Re: L4Android performance issue

"Mai, Haohui" <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <CAKT8Gbvcfm1KZiyqpKfPh1EECqCxqsBwc3tqV1ZOu0B2xJtpUg@mail.gmail.com>
Hi,

Thanks. Please see the inlined response.

On Wed, Jul 11, 2012 at 5:08 PM, Adam Lackorzynski
<[email protected]> wrote:
> Hi,
>
> On Wed Jul 11, 2012 at 15:20:33 -0500, Mai, Haohui wrote:
>> This is an important problem to solve. I'm seeing 60x slow down on the
>> graphics component of L4Android right now because of this frame buffer
>> issue.
>
> This is software rendering versus something with hardware support.
>

Exactly. That's the reason why I really want to enable it. :-)

>> I'm using an Eee PC which has an i945 chip. I tweaked my configuration
>> a little bit but I still had no luck.
>>
>> There're two possible bugs(?) here:
>>
>> (1) The driver got confused because l4pci changes the func field of
>> the pci table. The func field in PCI table is to describe whether
>> there's another device attached to the slot. Here is code in Linux
>> kernel causing problem:
>>
>>         gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL, device, NULL);
>>         if (gmch_device && PCI_FUNC(gmch_device->devfn) != 0) {
>>                 gmch_device = pci_get_device(PCI_VENDOR_ID_INTEL,
>>                                              device, gmch_device);
>>         }
>>
>> On my machine, L4PCI reports the func field of my card (gmch_device in
>> the code) as 1, which makes it find the "next" display card (i.e.,
>> executing the if branch).
>> Therefore it cannot find the device.
>>
>> I worked around it by disabling the if statement, and the kernel can
>> detect the card and map in mmio memory.
>
> Are you using PCI_bus_ident() instead of PCI_bus() in your vbus config?
>

I have PCI/CC_03 mapped in two caps, one in PCI_bus_ident() and one in
PCI_bus(). I could try it out.


>> (2) L4Linux is unable to execute "wbinvd" instruction. wbvind is a
>> privileged instruction to write back all caches and invalidate them.
>> The driver is executing this instruction at ring 3 -- thus generating
>> a #GP fault.
>>
>> This is more troublesome and I don't really have a good idea of how to
>> fix it. I appreciate if you can tell me the quickest way of fixing it.
>
> Looking at this a bit... this is just done for initializing the
> ringbuffer which lives in non-caches memory already. It does not seem to
> be used during runtime. There's also no comment why such a complete
> global flush is required at all. Maybe to flush something else? Hmm. My
> suggestion would thus just be to comment that out and see if it works
> without.
>
>

There're a couple places that uses this instruction. I did try to
disable the wbinvd instruction entirely but      it didn't work. So
what do you think to take to implement it in L4Linux?

>
> Adam
> --
> Adam                 [email protected]
>   Lackorzynski         http://os.inf.tu-dresden.de/~adam/
>
> _______________________________________________
> l4-hackers mailing list
> [email protected]
> http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.