From owner-linux-pci@atrey.karlin.mff.cuni.cz Thu Apr 5 00:19:24 2007 From: Michael Ellerman Date: Thu, 05 Apr 2007 17:19:08 +1000 Subject: [PATCH 3/9] PCI: Create alloc_pci_dev(), the one true way to create a struct pci_dev To: linux-pci@atrey.karlin.mff.cuni.cz Cc: Greg Kroah-Hartman , Eric W.Biederman , Benjamin Herrenschmidt , David S.Miller , , Message-ID: <20070405071910.313B7DDE46@ozlabs.org> There are currently several places in the kernel where we kmalloc() a struct pci_dev and start initialising it. It'd be preferable to have an allocator so we can ensure the pci_dev is correctly initialised in one place. Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- drivers/pci/probe.c | 15 +++++++++++++++ include/linux/pci.h | 2 ++ 2 files changed, 17 insertions(+) --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -844,6 +844,21 @@ static void pci_release_bus_bridge_dev(s kfree(dev); } +struct pci_dev *alloc_pci_dev(void) +{ + struct pci_dev *dev; + + dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL); + if (!dev) + return NULL; + + INIT_LIST_HEAD(&dev->global_list); + INIT_LIST_HEAD(&dev->bus_list); + + return dev; +} +EXPORT_SYMBOL(alloc_pci_dev); + /* * Read the config data for a PCI device, sanity-check it * and fill in the dev structure... --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -193,6 +193,8 @@ struct pci_dev { #endif }; +extern struct pci_dev *alloc_pci_dev(void); + #define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) #define to_pci_dev(n) container_of(n, struct pci_dev, dev)