Re: [RFC PATCH 07/16] PCI: Separate pci_host_bridge creation out of pci_create_root_bus()
From: Yijing Wang <hidden>
Date: 2014-11-20 02:01:23
Also in:
linux-arm-kernel, linux-pci, lkml
quoted
quoted
Something like this: struct pci_controller { struct pci_host_bridge bridge; /* private host bridge data here */ ..... }; #define PCI_CONTROLLER(bus) ({ struct pci_host_bridge *hb = to_pci_host_bridge(bus->bridge); \ container_of(hb, struct pci_controller, bridge); }) Then we can retrieve the host bridge structure from everywhere we have a device.Hi Liviu, it looks good to me, because this change will involve lots platforms, I would think more about it. Thanks for your suggestion very much! :)Given that I also look at this area maybe we should join forces and divide the problem?
That's better, we could cooperate to do this. :)
Best regards, Liviuquoted
Thanks! Yijing.quoted
Best regards, Liviuquoted
quoted
quoted
+ host = kzalloc(sizeof(*host), GFP_KERNEL); + if (!host) + return NULL;devm_kzalloc maybe?I don't know much detail about devm_kzalloc(), but we have no pci host driver here, and I found no devm_kzalloc() uses in core PCI code before.quoted
quoted
+ if (!resources) { + /* Use default IO/MEM/BUS resources*/ + pci_add_resource(&host->windows, &ioport_resource); + pci_add_resource(&host->windows, &iomem_resource); + pci_add_resource(&host->windows, &busn_resource); + } else { + list_for_each_entry_safe(window, n, resources, list) + list_move_tail(&window->list, &host->windows); + }I think we should assume that the correct resources are passed. You could add a wrapper around this function to convert old platforms though.OK, I will move these code out of pci_create_host_bridge, and add a wrapper to setup the default resources.quoted
quoted
+EXPORT_SYMBOL(pci_create_host_bridge);EXPORT_SYMBOL_GPL() maybe?OK, will update it.quoted
quoted
diff --git a/include/linux/pci.h b/include/linux/pci.h index 8b11b38..daa7f40 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h@@ -402,7 +402,12 @@ struct pci_host_bridge_window { struct pci_host_bridge { struct device dev; struct pci_bus *bus; /* root bus */ + struct list_head list; struct list_head windows; /* pci_host_bridge_windows */ + int busnum;The busnum should already be implied through the bus resource.Yes, I will consider remove it and introduce a helper function to get the root bus number, thanks! Thanks! Yijing.quoted
Arnd .-- Thanks! Yijing -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html-- Thanks! Yijing -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
-- Thanks! Yijing