[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine
From: |
Eric Auger |
Subject: |
Re: [PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine |
Date: |
Tue, 9 Jul 2024 11:11:56 +0200 |
User-agent: |
Mozilla Thunderbird |
Hi Nicolin,
On 6/26/24 02:28, Nicolin Chen wrote:
> A nested SMMU must use iommufd ioctls to communicate with the host-level
> SMMU instance for 2-stage translation support. Add an iommufd link to the
> ARM virt-machine, allowing QEMU command to pass in an iommufd object.
If I am not wrong vfio devices are allowed to use different iommufd's
(although there is no real benefice). So this command line wouldn't
match with that option.
Also while reading the commit msg it is not clear with the iommufd is
needed in the machine whereas the vfio iommufd BE generally calls those
ioctls.
Thanks
Eric
>
> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
> ---
> hw/arm/virt.c | 14 ++++++++++++++
> include/hw/arm/virt.h | 2 ++
> 2 files changed, 16 insertions(+)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 78af2d2195..71093d7c60 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1404,6 +1404,13 @@ static void create_smmu(const VirtMachineState *vms,
>
> object_property_set_link(OBJECT(dev), "primary-bus", OBJECT(bus),
> &error_abort);
> +
> + if (vms->iommu == VIRT_IOMMU_NESTED_SMMUV3) {
> + g_assert(vms->iommufd);
> + object_property_set_link(OBJECT(dev), "iommufd",
> OBJECT(vms->iommufd),
> + &error_abort);
> + object_property_set_bool(OBJECT(dev), "nested", true, &error_abort);
> + }
> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
> sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
> for (i = 0; i < NUM_SMMU_IRQS; i++) {
> @@ -3114,6 +3121,13 @@ static void virt_machine_class_init(ObjectClass *oc,
> void *data)
> "Set GIC version. "
> "Valid values are 2, 3, 4, host
> and max");
>
> + object_class_property_add_link(oc, "iommufd", TYPE_IOMMUFD_BACKEND,
> + offsetof(VirtMachineState, iommufd),
> + object_property_allow_set_link,
> + OBJ_PROP_LINK_STRONG);
> + object_class_property_set_description(oc, "iommufd",
> + "Set the IOMMUFD handler from
> \"-iommufd\"");
> +
> object_class_property_add_str(oc, "iommu", virt_get_iommu,
> virt_set_iommu);
> object_class_property_set_description(oc, "iommu",
> "Set the IOMMU type. "
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index 7df0813e28..d5cbce1a30 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -36,6 +36,7 @@
> #include "hw/arm/boot.h"
> #include "hw/arm/bsa.h"
> #include "hw/block/flash.h"
> +#include "sysemu/iommufd.h"
> #include "sysemu/kvm.h"
> #include "hw/intc/arm_gicv3_common.h"
> #include "qom/object.h"
> @@ -154,6 +155,7 @@ struct VirtMachineState {
> bool dtb_randomness;
> OnOffAuto acpi;
> VirtGICType gic_version;
> + IOMMUFDBackend *iommufd;
> VirtIOMMUType iommu;
> bool default_bus_bypass_iommu;
> VirtMSIControllerType msi_controller;
- Re: [PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine,
Eric Auger <=