|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] x86/vMSI-X emulation issue
All,
so I've just learned that Windows (at least some versions and some
of their code paths) use REP MOVSD to read/write the MSI-X table.
The way at least msixtbl_write() works is not compatible with this
(msixtbl_read() also seems affected, albeit to a lesser degree), and
apparently it just worked by accident until the XSA-120 and 128-131
and follow-up changes - most notably commit ad28e42bd1 ("x86/MSI:
track host and guest masking separately"), as without the call to
guest_mask_msi_irq() interrupts won't ever get unmasked.
The problem with emulating REP MOVSD is that msixtbl_write()
intentionally returns X86EMUL_UNHANDLEABLE on all writes to
words 0, 1, and 2. When in the process of emulating multiple
writes, we therefore hand the entire batch of 3 or 4 writes to qemu,
and the hypervisor doesn't get to see any other than the initial
iteration.
Now I see a couple of possible solutions, but none of them look
really neat, hence I'm seeking a second opinion (including, of
course, further alternative ideas):
1) Introduce another X86EMUL_* like status that's not really to be
used by the emulator itself, but only by the two vMSI-X functions
to indicate to their caller that prior to forwarding the request it
should be chopped to a single repetition.
2) Do aforementioned chopping automatically on seeing
X86EMUL_UNHANDLEABLE, on the basis that the .check
handler had indicated that the full range was acceptable. That
would at once cover other similarly undesirable cases like the
vLAPIC code returning this error. However, any stdvga like
emulated device would clearly not want such to happen, and
would instead prefer the entire batch to get forwarded in one
go (stdvga itself sits on a different path). Otoh, with the
devices we have currently, this would seem to be the least
intrusive solution.
3) Have emulation backends provide some kind of (static) flag
indicating which forwarding behavior they would like.
4) Expose the full ioreq to the emulation backends, so they can
fiddle with the request to their liking.
Thanks, Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |