Hi Shameer, On 11/18/24 16:00, Shameerali Kolothum Thodi wrote: > Hi Eric, > >> -----Original Message----- >> From: Eric Auger <eric.au...@redhat.com> >> Sent: Monday, November 18, 2024 1:46 PM >> To: Shameerali Kolothum Thodi >> <shameerali.kolothum.th...@huawei.com>; qemu-...@nongnu.org; >> qemu-devel@nongnu.org >> Cc: peter.mayd...@linaro.org; j...@nvidia.com; nicol...@nvidia.com; >> ddut...@redhat.com; Linuxarm <linux...@huawei.com>; Wangzhou (B) >> <wangzh...@hisilicon.com>; jiangkunkun <jiangkun...@huawei.com>; >> Jonathan Cameron <jonathan.came...@huawei.com>; >> zhangfei....@linaro.org >> Subject: Re: [RFC PATCH 4/5] hw/arm/virt-acpi-build: Build IORT with >> multiple SMMU nodes >> >>>>> /* Number of IORT Nodes */ >>>>> @@ -342,10 +356,9 @@ build_iort(GArray *table_data, BIOSLinker >>>> *linker, VirtMachineState *vms) >>>>> /* GIC ITS Identifier Array */ >>>>> build_append_int_noprefix(table_data, 0 /* MADT translation_id */, >>>> 4); >>>>> - if (vms->iommu == VIRT_IOMMU_SMMUV3) { >>>>> - int irq = vms->irqmap[VIRT_SMMU] + ARM_SPI_BASE; >>>>> + for (i = 0; i < num_smmus; i++) { >>>>> + smmu_offset[i] = table_data->len - table.table_offset; >>>>> >>>> I would have expected changes in the smmu idmap has well. If a given >>>> SMMU instance now protects a given bus hierarchy shouldn't it be >>>> reflected in a differentiated SMMU idmap for each of them (RID subset >> of >>>> SMMU->pci-bus mapping to a specific IORT SMMU node)? How is it done >>>> currently? >>> I thought that smmu_idmaps will be handled by this ? >>> >>> object_child_foreach_recursive(object_get_root(), >>> iort_host_bridges, smmu_idmaps); >> to me this traverses the qemu object hierarchy to find all host bridges >> and for each of them builds an idmap array (smmu_idmaps mapping this >> RC >> RID range to this SMMU). But to me those idmaps will be assigned to >> *all* SMMU insteaces leading to a wong IORT description because all >> SMMUs will be protecting all devices. You shall only retain idmaps which >> correspond to the pci_bus a given vSMMU is attached to. Then each SMMU >> will protect a distinct PCIe subtree which does not seem the case today. >> At least that's my current understanding. > Ah..right. I will fix that in next version. > > I think the above won't affect the basic case where I have only one > pcie-pxb/SMMUv3. But even in that case hot add seems not working. > > I tried hacking the min/max ranges as suspected by Nicolin. But still not > enough to > get it working. Do you have any hint on why the hot add(described below) is > not > working? Hum thought the duplicate idmap could be the cause. Otherwise I have no clue. I would advice to fix it first.
Eric > > Thanks, > Shameer > >> Eric >> >> >>> But it is possible that, there is a bug in this IORT generation here as I am >> not >>> able to hot add devices. It looks like the pciehp interrupt is not >> generated/received >>> for some reason. Nicolin[0] is suspecting the min/max bus range in >>> iort_host_bridges() may not leave enough ranges for hot add later. >>> >>> Cold plugging devices to different SMMUv3/pcie-pxb seems to be alright. >>> >>> I will debug that soon. >>> >>> Thanks, >>> Shameer >>> [0] https://lore.kernel.org/qemu-devel/ZzPd1F%2FUA2MKMbwl@Asurada- >> Nvidia/ >>>