Message ID | 20230214131441.101760-6-shentey@gmail.com |
---|---|
State | New |
Headers | show |
Series | Q35 PCI host fixes and QOM cleanup | expand |
On Tue, Feb 14, 2023 at 02:14:34PM +0100, Bernhard Beschow wrote: > The Q35 PCI host already has a "bypass-iommu" property. However, the > host initializes this property itself by accessing global machine state, > thereby assuming it to be a PC machine. Avoid this by having board code > set this property. > > Signed-off-by: Bernhard Beschow <shentey@gmail.com> > --- > hw/i386/pc_q35.c | 2 ++ > hw/pci-host/q35.c | 3 +-- > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index c2dc87acee..b3c55012d4 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -231,6 +231,8 @@ static void pc_q35_init(MachineState *machine) > x86ms->below_4g_mem_size, NULL); > object_property_set_int(phb, PCI_HOST_ABOVE_4G_MEM_SIZE, > x86ms->above_4g_mem_size, NULL); > + object_property_set_bool(phb, "bypass-iommu", > + pcms->default_bus_bypass_iommu, NULL); Can we use a macro to avoid duplicating the property name? > sysbus_realize_and_unref(SYS_BUS_DEVICE(phb), &error_fatal); > > /* pci */ > diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c > index 26e9e28e0e..0e198f97a7 100644 > --- a/hw/pci-host/q35.c > +++ b/hw/pci-host/q35.c > @@ -66,8 +66,7 @@ static void q35_host_realize(DeviceState *dev, Error **errp) > s->mch.pci_address_space, > s->mch.address_space_io, > 0, TYPE_PCIE_BUS); > - pci->bypass_iommu = > - PC_MACHINE(qdev_get_machine())->default_bus_bypass_iommu; > + > qdev_realize(DEVICE(&s->mch), BUS(pci->bus), &error_fatal); > } > > -- > 2.39.1
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index c2dc87acee..b3c55012d4 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -231,6 +231,8 @@ static void pc_q35_init(MachineState *machine) x86ms->below_4g_mem_size, NULL); object_property_set_int(phb, PCI_HOST_ABOVE_4G_MEM_SIZE, x86ms->above_4g_mem_size, NULL); + object_property_set_bool(phb, "bypass-iommu", + pcms->default_bus_bypass_iommu, NULL); sysbus_realize_and_unref(SYS_BUS_DEVICE(phb), &error_fatal); /* pci */ diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c index 26e9e28e0e..0e198f97a7 100644 --- a/hw/pci-host/q35.c +++ b/hw/pci-host/q35.c @@ -66,8 +66,7 @@ static void q35_host_realize(DeviceState *dev, Error **errp) s->mch.pci_address_space, s->mch.address_space_io, 0, TYPE_PCIE_BUS); - pci->bypass_iommu = - PC_MACHINE(qdev_get_machine())->default_bus_bypass_iommu; + qdev_realize(DEVICE(&s->mch), BUS(pci->bus), &error_fatal); }
The Q35 PCI host already has a "bypass-iommu" property. However, the host initializes this property itself by accessing global machine state, thereby assuming it to be a PC machine. Avoid this by having board code set this property. Signed-off-by: Bernhard Beschow <shentey@gmail.com> --- hw/i386/pc_q35.c | 2 ++ hw/pci-host/q35.c | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-)