Well, i don't have a patch for it, as i'm not that skilled with
writing ASL code for the DSDT.
When i tried to change the levle interrupt to edge, it didn't work,
although i though it should work, so it might be a bug i wrote.
Bottom line, if you are skilled enough to write a "smarter" device
search code for the DSDT - you should try it. I think that will solve
it. If you don't think you'll be able to pull it off, i can try to
prepare a patch, but it's not my sepciality... :)
What do u think we should do to solve it?
On Thu, Oct 15, 2009 at 1:06 PM, Simon Horman <horms@xxxxxxxxxxxx> wrote:
> On Thu, Oct 15, 2009 at 11:38:39AM +0200, Tom Rotenberg wrote:
>> Simon,
>>
>> i'm glad you were able to re-produce it :)
>>
>> About the bug, i suspect that the code in the virtual DSDT, which
>> "checks" which device was hot-plugged, is really not efficient, as it
>> needs to go over all sltos prior to the new assigned slot before
>> notifying the device. This means that if the slot number is 0x14, then
>> the 'if' clause in the dsdt, needs about 20*8=160 if statements before
>> it's notifying, and this what i think is causing the problem.
>> Especially, because the GPE interrupt is defined as level interrupt.
>>
>> This bug can be fixed, using one of the followings:
>> 1. Improve the code in the virtual DSDT (e.g.: doing some sort of
>> 'binary-search' to see which device should be notified. This will
>> reduce the number of 'if' clause to evaluate from 160 to ~5)
>> 2. Change the interrupt to edge interrupt, and see if it helps
>>
>> What do u say?
>
> It sounds worth investigating. do you want to come up with a patch?
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|