From: Brijesh Singh <brijesh.singh@amd.com>
To: edk2-devel@lists.01.org
Cc: Brijesh Singh <brijesh.singh@amd.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Jordan Justen <jordan.l.justen@intel.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
Laszlo Ersek <lersek@redhat.com>
Subject: [PATCH v2 00/21] OvmfPkg/Virtio: introduce IOMMU-like member functions
Date: Mon, 14 Aug 2017 07:36:22 -0400 [thread overview]
Message-ID: <1502710605-8058-1-git-send-email-brijesh.singh@amd.com> (raw)
Currently, virtio drivers provides the system physical address to the device.
However, some systems may feature an IOMMU that requires the drivers to pass
the device addresses to the device - which are then translated by the IOMMU
into physical addresses in memory. The patch series introduces new member
functions in VIRTIO_DEVICE_PROTOCOL which can be used for mapping a system
physical address to device address.
The approach that this patch series takes is to maps the system physical
address to device address for buffers (including rings, device specifc
request and response pointed by vring descriptor, and any further memory
reference by those request and response).
Patch 1 - 5:
miscellaneous fixes
Patch 6 - 9:
Defines and implements new member functions to map a system physical address
to device address. The patch implements Laszlo's suggestion [1].
[1] http://mid.mail-archive.com/841bec5f-6f6e-8b1f-25ba-0fd37a915b72@redhat.com
Patch 10 - 16:
Add some helper functions and allocate the vring using newly added member
functions.
Patch 17:
Update the virtio-rng driver to use newly added member functions to map the
addresses.
Verified using the following qemu cli
# $QEMU \
-device virtio-rng-pci
# $QEMU \
-device virtio-rng-pci,disable-legacy=on
# $QEMU \
-device virtio-rng-pci,disable-legacy=on,iommu_platform=true
And succesfully ran RngTest.efi from SecurityPkg/Application
Patch 18:
Update the virtio-blk driver to use newly added member functions to map the
addresses.
Verified using the following qemu cli
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device virtio-blk-pci,drive=disk0
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device virtio-blk-pci,drive=disk0,disable-legacy=on
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device virtio-blk-pci,drive=disk0,disable-legacy=on,iommu_platform=true
Patch 19:
Update the virtio-scsi driver to use newly added member functions to map the
addresses.
Verified using the following qemu cli
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device scsi-hd,drive=disk0 \
-device virtio-scsi-pci,id=scsi
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device scsi-hd,drive=disk0 \
-device virtio-scsi-pci,id=scsi,disable-legacy=on
# $QEMU \
-drive file=${IMAGE},if=none,id=disk0 \
-device scsi-hd,drive=disk0 \
-device virtio-scsi-pci,id=scsi,disable-legacy=on,iommu_platform=true
Patch 20 - 22:
Update the virtio-net driver to use newly added member functions to map the
addresses.
Verified using the following qemu cli
# $QEMU \
-netdev type=tap,id=net0 \
-device virtio-net-pci,netdev=net0,romfile=
# $QEMU \
-netdev type=tap,id=net0 \
-device virtio-net-pci,netdev=net0,disable-legacy=on,romfile=
# $QEMU \
-netdev type=tap,id=net0 \
-device virtio-net-pci,netdev=net0,disable-legacy=on,iommu_platform=true,romfile=
Patch 23:
Add support for VIRTIO_F_IOMMU_FEATURE bit
Repo: https://github.com/codomania/edk2
Branch: virtio-support-v2
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Laszlo Ersek <lersek@redhat.com>
TODO:
* Update VirtioGpuDxe
* Runtime test on aarch64
Changes since v1:
* changes to address v2 feedbacks
* add VIRTIO_F_IOMMU_PLATFORM feature bit
Brijesh Singh (23):
OvmfPkg/VirtioPciDeviceDxe: supply missing BUS_MASTER attribute
OvmfPkg/Virtio10Dxe: supply missing BUS_MASTER attribute
OvmfPkg/VirtioPciDeviceDxe: add missing IN and OUT decoration
OvmfPkg/VirtioMmioDeviceLib: add missing IN and OUT decoration
OvmfPkg/Virtio: fix comment style
OvmfPkg/Virtio: introduce IOMMU-like member functions to
VIRTIO_DEVICE_PROTOCOL
OvmfPkg/Virtio10Dxe: implement IOMMU-like member functions
OvmfPkg/VirtioPciDeviceDxe: implement IOMMU-like member functions
OvmfPkg/VirtioMmioDeviceLib: implement IOMMU-like member functions
OvmfPkg/VirtioLib: add VirtioMapAllBytesInSharedBuffer() helper
function
OvmfPkg/VirtioLib: take VirtIo instance in
VirtioRingInit/VirtioRingUninit
OvmfPkg/VirtioLib: add functions to map/unmap VRING
OvmfPkg/Virtio: take RingBaseShift in VirtioSetQueueAddress()
OvmfPkg/Virtio10Dxe: add the RingBaseShift offset
OvmfPkg/VirtioLib: alloc vring buffer with AllocateSharedPages()
OvmfPkg/VirtioRngDxe: map host address to device address
OvmfPkg/VirtioBlkDxe: map host address to device address
OvmfPkg/VirtioScsiDxe: Use DeviceAddresses in vring descriptors
OvmfPkg/VirtioNetDxe: alloc Tx and Rx rings using AllocateSharedPage()
OvmfPkg/VirtioNetDxe: alloc RxBuf using AllocateSharedPages()
OvmfPkg/VirtioNetDxe: dynamically alloc transmit header
OvmfPkg/VirtioNetDxe: map transmit buffer host address to device
address
OvmfPkg/Virtio: define VIRITO_F_IOMMU_PLATFORM feature bit
OvmfPkg/Include/IndustryStandard/Virtio10.h | 5 +
OvmfPkg/Include/Library/VirtioLib.h | 83 +++++++++-
OvmfPkg/Include/Protocol/VirtioDevice.h | 170 ++++++++++++++++++--
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h | 65 ++++++--
OvmfPkg/VirtioBlkDxe/VirtioBlk.h | 1 +
OvmfPkg/VirtioNetDxe/VirtioNet.h | 25 ++-
OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h | 61 +++++--
OvmfPkg/VirtioRngDxe/VirtioRng.h | 1 +
OvmfPkg/VirtioScsiDxe/VirtioScsi.h | 1 +
OvmfPkg/Library/VirtioLib/VirtioLib.c | 150 ++++++++++++++++-
OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c | 92 +++++++++--
OvmfPkg/Virtio10Dxe/Virtio10.c | 127 ++++++++++++++-
OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 131 +++++++++++++--
OvmfPkg/VirtioGpuDxe/Commands.c | 10 +-
OvmfPkg/VirtioNetDxe/Events.c | 19 +++
OvmfPkg/VirtioNetDxe/SnpGetStatus.c | 19 ++-
OvmfPkg/VirtioNetDxe/SnpInitialize.c | 168 +++++++++++++++----
OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c | 127 ++++++++++++++-
OvmfPkg/VirtioNetDxe/SnpShutdown.c | 5 +-
OvmfPkg/VirtioNetDxe/SnpTransmit.c | 26 ++-
OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c | 11 +-
OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c | 87 ++++++++--
OvmfPkg/VirtioRngDxe/VirtioRng.c | 74 +++++++--
OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 160 +++++++++++++++---
24 files changed, 1437 insertions(+), 181 deletions(-)
--
2.7.4
next reply other threads:[~2017-08-14 11:34 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-14 11:36 Brijesh Singh [this message]
2017-08-14 11:36 ` [PATCH v2 01/23] OvmfPkg/VirtioPciDeviceDxe: supply missing BUS_MASTER attribute Brijesh Singh
2017-08-16 0:34 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 02/23] OvmfPkg/Virtio10Dxe: " Brijesh Singh
2017-08-16 0:36 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 03/23] OvmfPkg/VirtioPciDeviceDxe: add missing IN and OUT decoration Brijesh Singh
2017-08-16 0:36 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 04/23] OvmfPkg/VirtioMmioDeviceLib: " Brijesh Singh
2017-08-16 0:37 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 05/23] OvmfPkg/Virtio: fix comment style Brijesh Singh
2017-08-16 0:41 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 06/23] OvmfPkg/Virtio: introduce IOMMU-like member functions to VIRTIO_DEVICE_PROTOCOL Brijesh Singh
2017-08-16 14:37 ` Laszlo Ersek
2017-08-16 15:58 ` Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 07/23] OvmfPkg/Virtio10Dxe: implement IOMMU-like member functions Brijesh Singh
2017-08-16 14:59 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 08/23] OvmfPkg/VirtioPciDeviceDxe: " Brijesh Singh
2017-08-16 15:32 ` Laszlo Ersek
2017-08-16 15:53 ` Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 09/23] OvmfPkg/VirtioMmioDeviceLib: " Brijesh Singh
2017-08-16 15:58 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 10/23] OvmfPkg/VirtioLib: add VirtioMapAllBytesInSharedBuffer() helper function Brijesh Singh
2017-08-16 16:47 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 11/23] OvmfPkg/VirtioLib: take VirtIo instance in VirtioRingInit/VirtioRingUninit Brijesh Singh
2017-08-16 16:53 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 12/23] OvmfPkg/VirtioLib: add functions to map/unmap VRING Brijesh Singh
2017-08-16 20:56 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 13/23] OvmfPkg/Virtio: take RingBaseShift in VirtioSetQueueAddress() Brijesh Singh
2017-08-16 21:43 ` Laszlo Ersek
2017-08-16 21:51 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 14/23] OvmfPkg/Virtio10Dxe: add the RingBaseShift offset Brijesh Singh
2017-08-16 21:57 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 15/23] OvmfPkg/VirtioLib: alloc vring buffer with AllocateSharedPages() Brijesh Singh
2017-08-16 22:18 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 16/23] OvmfPkg/VirtioRngDxe: map host address to device address Brijesh Singh
2017-08-21 14:05 ` Laszlo Ersek
2017-08-22 15:44 ` Brijesh Singh
2017-08-22 16:28 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 17/23] OvmfPkg/VirtioBlkDxe: " Brijesh Singh
2017-08-21 15:24 ` Laszlo Ersek
2017-08-22 1:42 ` Brijesh Singh
[not found] ` <1387174d-0040-0072-5e36-c133fd7ec934@redhat.com>
2017-08-22 14:29 ` Brijesh Singh
2017-08-22 15:53 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 18/23] OvmfPkg/VirtioScsiDxe: Use DeviceAddresses in vring descriptors Brijesh Singh
2017-08-21 19:08 ` Laszlo Ersek
2017-08-14 11:36 ` [PATCH v2 19/23] OvmfPkg/VirtioNetDxe: alloc Tx and Rx rings using AllocateSharedPage() Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 20/23] OvmfPkg/VirtioNetDxe: alloc RxBuf using AllocateSharedPages() Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 21/23] OvmfPkg/VirtioNetDxe: dynamically alloc transmit header Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 22/23] OvmfPkg/VirtioNetDxe: map transmit buffer host address to device address Brijesh Singh
2017-08-14 11:36 ` [PATCH v2 23/23] OvmfPkg/Virtio: define VIRITO_F_IOMMU_PLATFORM feature bit Brijesh Singh
2017-08-21 15:40 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1502710605-8058-1-git-send-email-brijesh.singh@amd.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox