Message ID | 20240305180734.48515-9-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | VIRTIO-IOMMU: Introduce aw-bits and granule options | expand |
>-----Original Message----- >From: Eric Auger <eric.auger@redhat.com> >Subject: [PATCH v6 8/9] hw/arm/virt: Set virtio-iommu aw-bits default value >to 48 > >On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0). > >hw_compat_8_2 is used to handle the compatibility for machine types >before 9.0 (default was 64 bits). > >Signed-off-by: Eric Auger <eric.auger@redhat.com> >--- > hw/arm/virt.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > >diff --git a/hw/arm/virt.c b/hw/arm/virt.c >index 0af1943697..dcfb25369b 100644 >--- a/hw/arm/virt.c >+++ b/hw/arm/virt.c >@@ -85,11 +85,28 @@ > #include "hw/char/pl011.h" > #include "qemu/guest-random.h" > >+GlobalProperty arm_virt_compat[] = { >+ { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" }, >+}; >+const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat); This can be static, otherwise, Reviewed-by: Zhenzhong Duan <Zhenzhong.duan@intel.com> Thanks Zhenzhong >+ >+/* >+ * This cannot be called from the virt_machine_class_init() because >+ * TYPE_VIRT_MACHINE is abstract and mc->compat_props >g_ptr_array_new() >+ * only is called on virt non abstract class init. >+ */ >+static void arm_virt_compat_set(MachineClass *mc) >+{ >+ compat_props_add(mc->compat_props, arm_virt_compat, >+ arm_virt_compat_len); >+} >+ > #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ > static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ > void *data) \ > { \ > MachineClass *mc = MACHINE_CLASS(oc); \ >+ arm_virt_compat_set(mc); \ > virt_machine_##major##_##minor##_options(mc); \ > mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \ > if (latest) { \ >-- >2.41.0
On 3/6/24 04:25, Duan, Zhenzhong wrote: > >> -----Original Message----- >> From: Eric Auger <eric.auger@redhat.com> >> Subject: [PATCH v6 8/9] hw/arm/virt: Set virtio-iommu aw-bits default value >> to 48 >> >> On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0). >> >> hw_compat_8_2 is used to handle the compatibility for machine types >> before 9.0 (default was 64 bits). >> >> Signed-off-by: Eric Auger <eric.auger@redhat.com> >> --- >> hw/arm/virt.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/hw/arm/virt.c b/hw/arm/virt.c >> index 0af1943697..dcfb25369b 100644 >> --- a/hw/arm/virt.c >> +++ b/hw/arm/virt.c >> @@ -85,11 +85,28 @@ >> #include "hw/char/pl011.h" >> #include "qemu/guest-random.h" >> >> +GlobalProperty arm_virt_compat[] = { >> + { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" }, >> +}; >> +const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat); > This can be static, otherwise, sure > > Reviewed-by: Zhenzhong Duan <Zhenzhong.duan@intel.com> thanks! Eric > > Thanks > Zhenzhong > >> + >> +/* >> + * This cannot be called from the virt_machine_class_init() because >> + * TYPE_VIRT_MACHINE is abstract and mc->compat_props >> g_ptr_array_new() >> + * only is called on virt non abstract class init. >> + */ >> +static void arm_virt_compat_set(MachineClass *mc) >> +{ >> + compat_props_add(mc->compat_props, arm_virt_compat, >> + arm_virt_compat_len); >> +} >> + >> #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ >> static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ >> void *data) \ >> { \ >> MachineClass *mc = MACHINE_CLASS(oc); \ >> + arm_virt_compat_set(mc); \ >> virt_machine_##major##_##minor##_options(mc); \ >> mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \ >> if (latest) { \ >> -- >> 2.41.0
diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 0af1943697..dcfb25369b 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -85,11 +85,28 @@ #include "hw/char/pl011.h" #include "qemu/guest-random.h" +GlobalProperty arm_virt_compat[] = { + { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "48" }, +}; +const size_t arm_virt_compat_len = G_N_ELEMENTS(arm_virt_compat); + +/* + * This cannot be called from the virt_machine_class_init() because + * TYPE_VIRT_MACHINE is abstract and mc->compat_props g_ptr_array_new() + * only is called on virt non abstract class init. + */ +static void arm_virt_compat_set(MachineClass *mc) +{ + compat_props_add(mc->compat_props, arm_virt_compat, + arm_virt_compat_len); +} + #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ void *data) \ { \ MachineClass *mc = MACHINE_CLASS(oc); \ + arm_virt_compat_set(mc); \ virt_machine_##major##_##minor##_options(mc); \ mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \ if (latest) { \
On ARM we set 48b as a default (matching SMMUv3 SMMU_IDR5.VAX == 0). hw_compat_8_2 is used to handle the compatibility for machine types before 9.0 (default was 64 bits). Signed-off-by: Eric Auger <eric.auger@redhat.com> --- hw/arm/virt.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)