[ipxe-devel] [PATCH 4/4] [virtio] Add virtio-net 1.0 support

Michael Brown mcb30 at ipxe.org
Fri Mar 11 15:34:20 UTC 2016

On 11/03/16 14:57, Michael S. Tsirkin wrote:
>>> Maybe include both binaries in the rom, and add a wrapper selecting
>>> the correct part of the ROM depending on the CPU?
>>> 1. start wrapper
>>> 2. check cpuid for 64 bit extensions
>>> 3. run 32 or 64 bit binary
>>> A bit wasteful but rather easy to implement.
>> That would result in a rather large ROM.
> About 2x the current one, won't it be?

Roughly, yes.  It's also some complexity that I'd prefer not to 
introduce, given that this is an extremely niche use case and can be 
solved more simply (see below).

>> For virtual machines, is it an issue?  Are there CPUs that support VMX but
>> don't support long mode?
> For the host - likely no. But for the guest we can emulate 32 bit
> CPUs, it's a question of setting an appropriate flag.
> One can say "so don't do this" but this means qemu has to ship
> both 64 and 32 bit ROMs, and somehow guess which one to
> expose to guest.

OK, so this seems to be an issue that affects only 32-bit virtual 
machines, where the choice on 32-bit versus 64-bit is being made by qemu 

That would suggest that the simplest solution is to have qemu expose the 
correct ROM for the CPU architecture.  No guessing required, since qemu 
already knows which CPU architecture it is exposing to the guest.

> Short term, I agree using cfg access + 32 bit ROM is likely best.

I'd still prefer the driver to be written to abstract away the 
difference between ioremap() and cfg accesses, and to attempt the 
ioremap() first.  This seems like a relatively trivial change, and 
avoids crippling the driver performance unnecessarily.


More information about the ipxe-devel mailing list