[edk2-devel] [PATCH v3 3/4] OvmfPkg/VirtioMmioDeviceLib: Add default QueueNum for virtio 1.0

Philippe Mathieu-Daudé philmd at redhat.com
Tue Aug 17 09:48:40 UTC 2021


On 8/17/21 11:23 AM, Gerd Hoffmann wrote:
> Use QueueNumMax as QueueNum default for drivers which do not
> explicitly call VIRTIO_DEVICE_PROTOCOL->SetQueueSize().
> 
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
> ---
>  .../Library/VirtioMmioDeviceLib/VirtioMmioDevice.h   |  1 +
>  .../VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c  | 12 +++++++++++-
>  2 files changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h
> index 0c2f99633c46..5ad951f4154a 100644
> --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h
> +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h
> @@ -30,6 +30,7 @@
>  typedef struct {
>    UINT32                 Signature;
>    UINT32                 Version;
> +  UINT16                 QueueNum;
>    VIRTIO_DEVICE_PROTOCOL VirtioDevice;
>    PHYSICAL_ADDRESS       BaseAddress;
>  } VIRTIO_MMIO_DEVICE;
> diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c
> index a0ee8e5f3c86..b9ee407eddc4 100644
> --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c
> +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c
> @@ -83,7 +83,11 @@ VirtioMmioSetQueueSize (
>  
>    Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This);
>  
> -  VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);
> +  if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {
> +    Device->QueueNum = QueueSize;
> +  } else {
> +    VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, QueueSize);
> +  }
>  
>    return EFI_SUCCESS;
>  }
> @@ -171,6 +175,10 @@ VirtioMmioSetQueueSel (
>  
>    VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_SEL, Sel);
>  
> +  if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) {
> +    Device->QueueNum = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX) & 0xFFFF;
> +  }
> +
>    return EFI_SUCCESS;
>  }
>  
> @@ -193,6 +201,8 @@ VirtioMmioSetQueueAddress (
>      VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_PFN,
>        (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT));
>    } else {
> +    VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, Device->QueueNum);

This looks like a bugfix in the previous patch... Going to revisit it.

>      Address = (UINT64)Ring->Base;
>      VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO,
>                        (UINT32)Address);
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79422): https://edk2.groups.io/g/devel/message/79422
Mute This Topic: https://groups.io/mt/84943951/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list