On Tue, Jun 12, 2018 at 2:57 PM Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > On Tue, Jun 12, 2018 at 02:42:13PM +0800, Pingfan Liu wrote: > > The Linux Device Driver Model allows a physical device to be handled > > by only a single driver. But at present, both shpchp and portdrv_pci > > claim PCI_CLASS_BRIDGE_PCI, and touch devices_kset. This causes a > > few problems, one is the wrong shutdown seq of devices, owing to the > > broken devices_kset. > > How can they both touch devices_kset? Once one driver has claimed the > device it should not be available to others. > Unfortunately, it could be. There are two code path for do_one_initcall kernel_init->..->do_one_initcall->pcie_portdrv_init And load_module->do_init_module->do_one_initcall->shpcd_init > > + /* do not claim pcie port device */ > > + if (pci_is_pcie(dev) && > > + ((pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) || > > + (pci_pcie_type(dev) == PCI_EXP_TYPE_UPSTREAM) || > > + (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM))) > > + return -ENODEV; > > No need for the inner braces. OK. Thanks, Pingfan