提交 96bde06a 编写于 作者: S Sam Ravnborg 提交者: Greg Kroah-Hartman

pci: do not mark exported functions as __devinit

Functions marked __devinit will be removed after kernel init.  But being
exported they are potentially called by a module much later.

So the safer choice seems to be to keep the function even in the non
CONFIG_HOTPLUG case.

This silence the follwoing section mismatch warnings:
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_add_device from __ksymtab_gpl between '__ksymtab_pci_bus_add_device' (at offset 0x20) and '__ksymtab_pci_walk_bus'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_create_bus from __ksymtab_gpl between '__ksymtab_pci_create_bus' (at offset 0x40) and '__ksymtab_pci_stop_bus_device'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_max_busnr from __ksymtab_gpl between '__ksymtab_pci_bus_max_busnr' (at offset 0xc0) and '__ksymtab_pci_assign_resource_fixed'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_claim_resource from __ksymtab_gpl between '__ksymtab_pci_claim_resource' (at offset 0xe0) and '__ksymtab_pcie_port_bus_type'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_add_devices from __ksymtab between '__ksymtab_pci_bus_add_devices' (at offset 0x70) and '__ksymtab_pci_bus_alloc_resource'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_scan_bus_parented from __ksymtab between '__ksymtab_pci_scan_bus_parented' (at offset 0x90) and '__ksymtab_pci_root_buses'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_assign_resources from __ksymtab between '__ksymtab_pci_bus_assign_resources' (at offset 0x4d0) and '__ksymtab_pci_bus_size_bridges'
WARNING: drivers/built-in.o - Section mismatch: reference to .init.text:pci_bus_size_bridges from __ksymtab between '__ksymtab_pci_bus_size_bridges' (at offset 0x4e0) and '__ksymtab_pci_setup_cardbus'
Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 6ba18636
...@@ -77,7 +77,7 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, ...@@ -77,7 +77,7 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
* This adds a single pci device to the global * This adds a single pci device to the global
* device list and adds sysfs and procfs entries * device list and adds sysfs and procfs entries
*/ */
int __devinit pci_bus_add_device(struct pci_dev *dev) int pci_bus_add_device(struct pci_dev *dev)
{ {
int retval; int retval;
retval = device_add(&dev->dev); retval = device_add(&dev->dev);
...@@ -105,7 +105,7 @@ int __devinit pci_bus_add_device(struct pci_dev *dev) ...@@ -105,7 +105,7 @@ int __devinit pci_bus_add_device(struct pci_dev *dev)
* *
* Call hotplug for each new devices. * Call hotplug for each new devices.
*/ */
void __devinit pci_bus_add_devices(struct pci_bus *bus) void pci_bus_add_devices(struct pci_bus *bus)
{ {
struct pci_dev *dev; struct pci_dev *dev;
int retval; int retval;
......
...@@ -35,8 +35,7 @@ unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE; ...@@ -35,8 +35,7 @@ unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
* Given a PCI bus, returns the highest PCI bus number present in the set * Given a PCI bus, returns the highest PCI bus number present in the set
* including the given PCI bus and its list of child PCI buses. * including the given PCI bus and its list of child PCI buses.
*/ */
unsigned char __devinit unsigned char pci_bus_max_busnr(struct pci_bus* bus)
pci_bus_max_busnr(struct pci_bus* bus)
{ {
struct list_head *tmp; struct list_head *tmp;
unsigned char max, n; unsigned char max, n;
......
...@@ -364,7 +364,7 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child) ...@@ -364,7 +364,7 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
} }
} }
static struct pci_bus * __devinit pci_alloc_bus(void) static struct pci_bus * pci_alloc_bus(void)
{ {
struct pci_bus *b; struct pci_bus *b;
...@@ -432,7 +432,7 @@ pci_alloc_child_bus(struct pci_bus *parent, struct pci_dev *bridge, int busnr) ...@@ -432,7 +432,7 @@ pci_alloc_child_bus(struct pci_bus *parent, struct pci_dev *bridge, int busnr)
return NULL; return NULL;
} }
struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr) struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
{ {
struct pci_bus *child; struct pci_bus *child;
...@@ -461,7 +461,7 @@ static void pci_enable_crs(struct pci_dev *dev) ...@@ -461,7 +461,7 @@ static void pci_enable_crs(struct pci_dev *dev)
pci_write_config_word(dev, rpcap + PCI_EXP_RTCTL, rpctl); pci_write_config_word(dev, rpcap + PCI_EXP_RTCTL, rpctl);
} }
static void __devinit pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max) static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
{ {
struct pci_bus *parent = child->parent; struct pci_bus *parent = child->parent;
...@@ -477,7 +477,7 @@ static void __devinit pci_fixup_parent_subordinate_busnr(struct pci_bus *child, ...@@ -477,7 +477,7 @@ static void __devinit pci_fixup_parent_subordinate_busnr(struct pci_bus *child,
} }
} }
unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus); unsigned int pci_scan_child_bus(struct pci_bus *bus);
/* /*
* If it's a bridge, configure it and scan the bus behind it. * If it's a bridge, configure it and scan the bus behind it.
...@@ -489,7 +489,7 @@ unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus); ...@@ -489,7 +489,7 @@ unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus);
* them, we proceed to assigning numbers to the remaining buses in * them, we proceed to assigning numbers to the remaining buses in
* order to avoid overlaps between old and new bus numbers. * order to avoid overlaps between old and new bus numbers.
*/ */
int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass) int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
{ {
struct pci_bus *child; struct pci_bus *child;
int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS); int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
...@@ -912,7 +912,7 @@ pci_scan_device(struct pci_bus *bus, int devfn) ...@@ -912,7 +912,7 @@ pci_scan_device(struct pci_bus *bus, int devfn)
return dev; return dev;
} }
void __devinit pci_device_add(struct pci_dev *dev, struct pci_bus *bus) void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
{ {
device_initialize(&dev->dev); device_initialize(&dev->dev);
dev->dev.release = pci_release_dev; dev->dev.release = pci_release_dev;
...@@ -935,8 +935,7 @@ void __devinit pci_device_add(struct pci_dev *dev, struct pci_bus *bus) ...@@ -935,8 +935,7 @@ void __devinit pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
up_write(&pci_bus_sem); up_write(&pci_bus_sem);
} }
struct pci_dev * __devinit struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
pci_scan_single_device(struct pci_bus *bus, int devfn)
{ {
struct pci_dev *dev; struct pci_dev *dev;
...@@ -958,7 +957,7 @@ pci_scan_single_device(struct pci_bus *bus, int devfn) ...@@ -958,7 +957,7 @@ pci_scan_single_device(struct pci_bus *bus, int devfn)
* discovered devices to the @bus->devices list. New devices * discovered devices to the @bus->devices list. New devices
* will have an empty dev->global_list head. * will have an empty dev->global_list head.
*/ */
int __devinit pci_scan_slot(struct pci_bus *bus, int devfn) int pci_scan_slot(struct pci_bus *bus, int devfn)
{ {
int func, nr = 0; int func, nr = 0;
int scan_all_fns; int scan_all_fns;
...@@ -991,7 +990,7 @@ int __devinit pci_scan_slot(struct pci_bus *bus, int devfn) ...@@ -991,7 +990,7 @@ int __devinit pci_scan_slot(struct pci_bus *bus, int devfn)
return nr; return nr;
} }
unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus) unsigned int pci_scan_child_bus(struct pci_bus *bus)
{ {
unsigned int devfn, pass, max = bus->secondary; unsigned int devfn, pass, max = bus->secondary;
struct pci_dev *dev; struct pci_dev *dev;
...@@ -1041,7 +1040,7 @@ unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus) ...@@ -1041,7 +1040,7 @@ unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
return max; return max;
} }
struct pci_bus * __devinit pci_create_bus(struct device *parent, struct pci_bus * pci_create_bus(struct device *parent,
int bus, struct pci_ops *ops, void *sysdata) int bus, struct pci_ops *ops, void *sysdata)
{ {
int error; int error;
...@@ -1119,7 +1118,7 @@ struct pci_bus * __devinit pci_create_bus(struct device *parent, ...@@ -1119,7 +1118,7 @@ struct pci_bus * __devinit pci_create_bus(struct device *parent,
} }
EXPORT_SYMBOL_GPL(pci_create_bus); EXPORT_SYMBOL_GPL(pci_create_bus);
struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent, struct pci_bus *pci_scan_bus_parented(struct device *parent,
int bus, struct pci_ops *ops, void *sysdata) int bus, struct pci_ops *ops, void *sysdata)
{ {
struct pci_bus *b; struct pci_bus *b;
......
...@@ -15,8 +15,7 @@ ...@@ -15,8 +15,7 @@
DECLARE_RWSEM(pci_bus_sem); DECLARE_RWSEM(pci_bus_sem);
static struct pci_bus * static struct pci_bus *pci_do_find_bus(struct pci_bus *bus, unsigned char busnr)
pci_do_find_bus(struct pci_bus* bus, unsigned char busnr)
{ {
struct pci_bus* child; struct pci_bus* child;
struct list_head *tmp; struct list_head *tmp;
......
...@@ -36,8 +36,7 @@ ...@@ -36,8 +36,7 @@
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1)) #define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
static void __devinit static void pbus_assign_resources_sorted(struct pci_bus *bus)
pbus_assign_resources_sorted(struct pci_bus *bus)
{ {
struct pci_dev *dev; struct pci_dev *dev;
struct resource *res; struct resource *res;
...@@ -220,8 +219,7 @@ pci_setup_bridge(struct pci_bus *bus) ...@@ -220,8 +219,7 @@ pci_setup_bridge(struct pci_bus *bus)
/* Check whether the bridge supports optional I/O and /* Check whether the bridge supports optional I/O and
prefetchable memory ranges. If not, the respective prefetchable memory ranges. If not, the respective
base/limit registers must be read-only and read as 0. */ base/limit registers must be read-only and read as 0. */
static void __devinit static void pci_bridge_check_ranges(struct pci_bus *bus)
pci_bridge_check_ranges(struct pci_bus *bus)
{ {
u16 io; u16 io;
u32 pmem; u32 pmem;
...@@ -259,8 +257,7 @@ pci_bridge_check_ranges(struct pci_bus *bus) ...@@ -259,8 +257,7 @@ pci_bridge_check_ranges(struct pci_bus *bus)
bus resource of a given type. Note: we intentionally skip bus resource of a given type. Note: we intentionally skip
the bus resources which have already been assigned (that is, the bus resources which have already been assigned (that is,
have non-NULL parent resource). */ have non-NULL parent resource). */
static struct resource * __devinit static struct resource *find_free_bus_resource(struct pci_bus *bus, unsigned long type)
find_free_bus_resource(struct pci_bus *bus, unsigned long type)
{ {
int i; int i;
struct resource *r; struct resource *r;
...@@ -281,8 +278,7 @@ find_free_bus_resource(struct pci_bus *bus, unsigned long type) ...@@ -281,8 +278,7 @@ find_free_bus_resource(struct pci_bus *bus, unsigned long type)
since these windows have 4K granularity and the IO ranges since these windows have 4K granularity and the IO ranges
of non-bridge PCI devices are limited to 256 bytes. of non-bridge PCI devices are limited to 256 bytes.
We must be careful with the ISA aliasing though. */ We must be careful with the ISA aliasing though. */
static void __devinit static void pbus_size_io(struct pci_bus *bus)
pbus_size_io(struct pci_bus *bus)
{ {
struct pci_dev *dev; struct pci_dev *dev;
struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO); struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO);
...@@ -326,8 +322,7 @@ pbus_size_io(struct pci_bus *bus) ...@@ -326,8 +322,7 @@ pbus_size_io(struct pci_bus *bus)
/* Calculate the size of the bus and minimal alignment which /* Calculate the size of the bus and minimal alignment which
guarantees that all child resources fit in this size. */ guarantees that all child resources fit in this size. */
static int __devinit static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
{ {
struct pci_dev *dev; struct pci_dev *dev;
unsigned long min_align, align, size; unsigned long min_align, align, size;
...@@ -447,8 +442,7 @@ pci_bus_size_cardbus(struct pci_bus *bus) ...@@ -447,8 +442,7 @@ pci_bus_size_cardbus(struct pci_bus *bus)
} }
} }
void __devinit void pci_bus_size_bridges(struct pci_bus *bus)
pci_bus_size_bridges(struct pci_bus *bus)
{ {
struct pci_dev *dev; struct pci_dev *dev;
unsigned long mask, prefmask; unsigned long mask, prefmask;
...@@ -498,8 +492,7 @@ pci_bus_size_bridges(struct pci_bus *bus) ...@@ -498,8 +492,7 @@ pci_bus_size_bridges(struct pci_bus *bus)
} }
EXPORT_SYMBOL(pci_bus_size_bridges); EXPORT_SYMBOL(pci_bus_size_bridges);
void __devinit void pci_bus_assign_resources(struct pci_bus *bus)
pci_bus_assign_resources(struct pci_bus *bus)
{ {
struct pci_bus *b; struct pci_bus *b;
struct pci_dev *dev; struct pci_dev *dev;
......
...@@ -101,8 +101,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) ...@@ -101,8 +101,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
new & ~PCI_REGION_FLAG_MASK); new & ~PCI_REGION_FLAG_MASK);
} }
int __devinit int pci_claim_resource(struct pci_dev *dev, int resource)
pci_claim_resource(struct pci_dev *dev, int resource)
{ {
struct resource *res = &dev->resource[resource]; struct resource *res = &dev->resource[resource];
struct resource *root = NULL; struct resource *root = NULL;
...@@ -212,8 +211,7 @@ EXPORT_SYMBOL_GPL(pci_assign_resource_fixed); ...@@ -212,8 +211,7 @@ EXPORT_SYMBOL_GPL(pci_assign_resource_fixed);
#endif #endif
/* Sort resources by alignment */ /* Sort resources by alignment */
void __devinit void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
{ {
int i; int i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册