On Wed, Sep 13, 2023 at 8:50 PM Bjorn Helgaas <helgaas@xxxxxxxxxx> wrote: [snipped] > Hmm. In some ways the VMD device acts as a Root Port, since it > originates a new hierarchy in a separate domain, but on the upstream > side, it's just a normal endpoint. > > How does AER for the new hierarchy work? A device below the VMD can > generate ERR_COR/ERR_NONFATAL/ERR_FATAL messages. I guess I was > assuming those messages would terminate at the VMD, and the VMD could > generate an AER interrupt just like a Root Port. But that can't be > right because I don't think VMD would have the Root Error Command > register needed to manage that interrupt. VMD itself doesn't seem to manage AER, the rootport that "moved" from 0000 domain does: [ 2113.507345] pcieport 10000:e0:06.0: AER: Corrected error received: 10000:e1:00.0 [ 2113.507380] nvme 10000:e1:00.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID) [ 2113.507389] nvme 10000:e1:00.0: device [144d:a80a] error status/mask=00000001/0000e000 [ 2113.507398] nvme 10000:e1:00.0: [ 0] RxErr (First) > > But if VMD just passes those messages up to the Root Port, the source > of the messages (the Requester ID) won't make any sense because > they're in a hierarchy the Root Port doesn't know anything about. Not sure what's current status is but I think Nirmal's patch is valid for both our cases. Kai-Heng > > > So what items should be hard-coded, assuming 04b12ef163d1 gets reverted? > > > > > >>>> Signed-off-by: Nirmal Patel <nirmal.patel@xxxxxxxxxxxxxxx> > > > > >>>> --- > > > > >>>> v3->v4: Rewrite the commit log. > > > > >>>> v2->v3: Update the commit log. > > > > >>>> v1->v2: Update the commit log. > > > > >>>> --- > > > > >>>> drivers/pci/controller/vmd.c | 2 -- > > > > >>>> 1 file changed, 2 deletions(-) > > > > >>>> > > > > >>>> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c > > > > >>>> index 769eedeb8802..52c2461b4761 100644 > > > > >>>> --- a/drivers/pci/controller/vmd.c > > > > >>>> +++ b/drivers/pci/controller/vmd.c > > > > >>>> @@ -701,8 +701,6 @@ static int vmd_alloc_irqs(struct vmd_dev *vmd) > > > > >>>> static void vmd_copy_host_bridge_flags(struct pci_host_bridge *root_bridge, > > > > >>>> struct pci_host_bridge *vmd_bridge) > > > > >>>> { > > > > >>>> - vmd_bridge->native_pcie_hotplug = root_bridge->native_pcie_hotplug; > > > > >>>> - vmd_bridge->native_shpc_hotplug = root_bridge->native_shpc_hotplug; > > > > >>>> vmd_bridge->native_aer = root_bridge->native_aer; > > > > >>>> vmd_bridge->native_pme = root_bridge->native_pme; > > > > >>>> vmd_bridge->native_ltr = root_bridge->native_ltr; > > > > >>>> -- > > > > >>>> 2.31.1 > > > > >>>> > > > >