On Mon, 29 Sep 2025 14:36:24 +0100 Shameer Kolothum <[email protected]> wrote:
> From: Nicolin Chen <[email protected]> > > Implement a set_iommu_device callback: > -If found an existing viommu reuse that. > -Else, > Allocate a vIOMMU with the nested parent S2 hwpt allocated by VFIO. > Though, iommufd’s vIOMMU model supports nested translation by > encapsulating a S2 nesting parent HWPT, devices cannot attach to this > parent HWPT directly. So two proxy nested HWPTs (bypass and abort) are > allocated to handle device attachments. > -And add the dev to viommu device list > > Also add an unset_iommu_device to unwind/cleanup above. > > Signed-off-by: Nicolin Chen <[email protected]> > Signed-off-by: Shameer Kolothum <[email protected] > Signed-off-by: Shameer Kolothum <[email protected]> Triviality follows. Reviewed-by: Jonathan Cameron <[email protected]> > diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h > index 70da16960f..3c8506d1e6 100644 > --- a/hw/arm/smmuv3-accel.h > +++ b/hw/arm/smmuv3-accel.h > @@ -10,12 +10,29 @@ > #define HW_ARM_SMMUV3_ACCEL_H > > #include "hw/arm/smmu-common.h" > +#include "system/iommufd.h" > +#include <linux/iommufd.h> > #include CONFIG_DEVICES > > +typedef struct SMMUViommu { > + IOMMUFDBackend *iommufd; > + IOMMUFDViommu core; > + uint32_t bypass_hwpt_id; > + uint32_t abort_hwpt_id; > + QLIST_HEAD(, SMMUv3AccelDevice) device_list; Does that need a forwards def of SMMUv3AccelDevice ? > +} SMMUViommu; > + > typedef struct SMMUv3AccelDevice { > SMMUDevice sdev; I didn't comment on this earlier as thought there would be something added tht aligned with the above, but seems not. So why the double space? > + HostIOMMUDeviceIOMMUFD *idev; > + SMMUViommu *viommu; > + QLIST_ENTRY(SMMUv3AccelDevice) next; > } SMMUv3AccelDevice; > > +typedef struct SMMUv3AccelState { > + SMMUViommu *viommu; > +} SMMUv3AccelState; > strongarm_uart_update_parameters(const char *label, int speed, char parity, > int data_bits, int stop_bits) "%s speed=%d parity=%c data=%d stop=%d" > strongarm_ssp_read_underrun(void) "SSP rx underrun" > diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h > index bb7076286b..5f3e9089a7 100644 > --- a/include/hw/arm/smmuv3.h > +++ b/include/hw/arm/smmuv3.h > @@ -66,6 +66,7 @@ struct SMMUv3State { > > /* SMMU has HW accelerator support for nested S1 + s2 */ > bool accel; > + struct SMMUv3AccelState *s_accel; Seems like a bonus space before * > }; > > typedef enum {
