[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 00/22] Use MSI chip framework to configure MSI/MSI-X in all platforms
On 2014/9/28 19:21, Liviu Dudau wrote: > On Sun, Sep 28, 2014 at 10:16:12AM +0800, Yijing Wang wrote: >>>>>> What I would like to see is a way of creating the pci_host_bridge >>>>>> structure outside >>>>>> the pci_create_root_bus(). That would then allow us to pass this sort of >>>>>> platform >>>>>> details like associated msi_chip into the host bridge and the child >>>>>> busses will >>>>>> have an easy way of finding the information needed by finding the root >>>>>> bus and then >>>>>> the host bridge structure. Then the generic pci_scan_root_bus() can be >>>>>> used by (mostly) >>>>>> everyone and the drivers can remove their kludges that try to work >>>>>> around the >>>>>> current limitations. >>>> >>>> So I think maybe save msi chip in PCI arch sysdata is a good candidate. >>> >>> Except that arch sysdata at the moment is an opaque pointer. I am all in >>> favour in >>> changing the type of sysdata from void* into pci_host_bridge* and arches >>> can wrap their old >>> sysdata around the pci_host_bridge*. >> >> I inspected every arch and found there are almost no common stuff, > > I will disagree here. Most (all?) of the structures that are passed as > sysdata argument to Most. > pci_create_root_bus() or pci_scan_root_bus() have a set of resources for > storing the MEM and > IO ranges, which struct pci_host_bridge already has. So that can be factored > out of the > arch code. Same for pci_domain_nr. Then there are some variables that are > used for communication > with the platform code due to convoluted way(s) in which PCI code gets > instantiated. Yes, currently some archs store MEM and IO resource in pci sysdata, and others not, move the MEM and IO resource to pci_host_bride could make code become simple, we can clean up the resource list argument in pci scan functions. > > What I am arguing here is not that the arch equivalent of pci_host_bridge > structure is already > common, but that by moving the members that are common out of arch sysdata > into pci_host_bridge > we will have more commonality and it will be easier to re-factor the code. Now, I got it, thanks! > >> and generic data struct should >> be created in generic PCI code. > > Not necessarily. What I have in mind is something like this: This is a good idea, what I'm worried is this series is already large, so I think we need to post another series to do it. > > - drivers/pci/ exports pci_init_host_bridge() that does the initialisation > of bridge->windows > and anything else that is needed (like find_pci_host_bridge() function). > - arch code does: > > struct pci_controller { > struct pci_host_bridge bridge; > ..... > }; > > #define to_pci_controller(bridge) container_of(bridge, struct > pci_controller, bridge) > > static inline struct pci_controller *get_host_controller(const struct > pci_bus *bus) > { > struct pci_host_bridge *bridge = find_pci_host_bridge(bus); > if (bridge) > return to_pci_controller(bridge); > > return NULL; > } > > int arch_pci_init(....) > { > struct pci_controller *hose; > .... > hose = kzalloc(sizeof(*hose), GFP_KERNEL); > pci_init_host_bridge(&hose->bridge); > .... > pci_scan_root_bus(...., &hose->bridge, &resources); > .... > return 0; > } > > Then finding the right structure will be easy. > >> Another, I don't like associate msi chip and every PCI device, further more, >> almost all platforms except arm have only one MSI controller, and currently, >> PCI enumerating code doesn't need >> to know the MSI chip details, like for legacy IRQ, PCI device doesn't need >> to know which IRQ controller they >> should deliver IRQ to. I would think more about it, and hope other PCI guys >> can give some comments, especially from Bjorn. >> > > I wasn't suggesing to associate an msi chip with every PCI device, but with > the pci_host_bridge. > I don't expect a host bridge to have more than one msi chip, so that should > be OK. Also, I'm > thinking that getting the associated msi chip should be some sort of > pci_host_bridge ops function, > and for arches that don't care about MSI it doesn't get implemented. Currently, a property "msi-parent" was introduced in arm, and all msi chip integrated in irq chip controller will be added to of_pci_msi_chip_list. PCI host driver find the match msi chip by its of_node. Thanks! Yijing. > > Best regards, > Liviu > > >> Thanks! >> Yijing. >> >>> >>> Best regards, >>> Liviu >>> >>>> >>>>> >>>>> I think both issues are orthogonal. Last time I checked a lot of work >>>>> was still necessary to unify host bridges enough so that it could be >>>>> shared across architectures. But perhaps some of that work has >>>>> happened in the meantime. >>>>> >>>>> But like I said, when you create the root bus, you can easily attach the >>>>> MSI chip to it. >>>>> >>>>> Thierry >>>>> >>>> >>>> >>>> -- >>>> Thanks! >>>> Yijing >>>> >>>> >>> >> >> >> -- >> Thanks! >> Yijing >> >> > -- Thanks! Yijing _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |