[ipxe-devel] [PATCH v4 0/4] Implement virtio 1.0 support

Michael S. Tsirkin mst at redhat.com
Mon Apr 11 13:00:45 UTC 2016


On Mon, Apr 11, 2016 at 11:26:55AM +0200, Ladi Prosek wrote:
> The goal here is to support booting from modern and transitional
> virtio-net devices using the new virtio 1.0 protocol. The code
> strives to comply with the virtio 1.0 spec and is heavily inspired
> by the Linux kernel implementation.

series:

Reviewed-by: Michael S. Tsirkin <mst at redhat.com>


> Changes from v3:
> 
> * reverted the device initialization change, adjust_pci_device
>   is called unconditionally again
> 
> Changes from v2:
> 
> * adjust_pci_device is called only if we actually use a bar,
>   otherwise the device is left uninitialized
> 
> * vpm_reset now waits for the device to report status == 0
> 
> * added an explicit "case VIRTIO_PCI_REGION_PCI_CONFIG" and
>   "default: assert(0)" to read/write functions (assert seems
>   to be appropriate here, I haven't found a true crash or
>   fail-fast function)
> 
> * now checking for a valid Ethernet MAC address as part of
>   initialization - that includes the case where the device does
>   not support VIRTIO_NET_F_MAC
> 
> * virtnet_open_modern fails if VIRTIO_F_VERSION_1 is not offered
> 
> * added a check for device ID < 0x1040 before falling back to
>   the legacy probe
> 
> * new virtio_version field is used instead of ioaddr to tell if
>   we're talking to the device using virtio 1.0
> 
> * comments and minor code changes
> 
> * rebased to latest master
> 
> Changes from v1:
> 
> * removed the packed attribute from virtio structures
> 
> * notification cap is now always mapped per queue - results in
>   one more ioremap call but eliminates special case code
> 
> * only sizeof(struct virtio_net_config) instead of PAGE_SIZE
>   of the device cap is mapped
> 
> * the config cap is now looked for and required
> 
> * vpm_ioread* and vpm_iowrite* support memory, port I/O, and PCI
>   config space access through the config cap as a fallback, and
>   are not declared inline anymore
> 
> * extra parameter is now used by virtnet_probe_modern instead of
>   specific error code to indicate that a 1.0 device was found
> 
> * device initialization follows the spec - note that reset,
>   ACKNOWLEDGE, and DRIVER happen in virtnet_probe_modern and the
>   rest in virtnet_open_modern
> 
> * nits, comments, and typos here and there
> 
>  src/drivers/bus/pciextra.c     |  54 +++++--
>  src/drivers/bus/virtio-pci.c   | 353 ++++++++++++++++++++++++++++++++++++++++-
>  src/drivers/bus/virtio-ring.c  |  17 +-
>  src/drivers/net/virtio-net.c   | 265 +++++++++++++++++++++++++++++--
>  src/drivers/net/virtio-net.h   |  16 ++
>  src/include/ipxe/errfile.h     |   1 +
>  src/include/ipxe/pci.h         |   2 +
>  src/include/ipxe/virtio-pci.h  | 207 ++++++++++++++++++++++++
>  src/include/ipxe/virtio-ring.h |  14 +-
>  9 files changed, 894 insertions(+), 35 deletions(-)



More information about the ipxe-devel mailing list