Messages in this thread |  | | | Date | Wed, 19 Dec 2007 17:03:29 +0200 | | From | Avi Kivity <> | | Subject | Re: [PATCH] x86_64: fix problems due to use of "outb" to port 80 on some AMD64x2 laptops, etc. |
David P. Reed wrote:
> Avi Kivity wrote:
>> kvm will forward a virtual machine's writes to port 0x80 to the real
>> port. The reason is that the write is much faster than exiting and
>> emulating it; the difference is measurable when compiling kernels.
>>
>> Now if the cause is simply writing to port 0x80, then we must stop
>> doing that. But if the reason is the back-to-back writes, when we
>> can keep it, since the other writes will be trapped by kvm and
>> emulated. Do you which is the case?
>>
> As for kvm, I don't have enough info to know anything about that. Is
> there a test you'd like me to try?
>
I have a test, but I see that it is broken for mainline. I'll update it
eventually, but...
> I think you are also asking if the crash on these laptops is caused
> only by back-to-back writes. Actually, it doesn't seem to matter if
> they are back to back. I can cause the crash if the writes to 80 are
> very much spread out in time - it seems only to matter how many of
> them get executed - almost as if there is a buffer overflow. (And of
> course if you do back to back writes to other ports that are
> apparently fully unused, such as 0xED on my machine, no crash occurs).
>
> I believe (though no one seems to have confirming documentation from
> the chipset or motherboard vendor) that port 80 is actually functional
> for some unknown function on these machines. (They do respond to
> "in" instructions faster than a bus cycle abort does - more evidence).
That seems to be sufficient evidence for me to remove port 0x80
pass-through from kvm and emulate it instead. Given that port 80 writes
take 1 microsecond, and that an in-kernel exit handler takes a similar
amount of time, there won't be any significant performance loss.
--
error compiling committee.c: too many arguments to function
|  |