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: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
6ba186361e
commit
96bde06a2d
6 changed files with 24 additions and 36 deletions
|
@ -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)
|
||||||
*
|
*
|
||||||
* 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;
|
||||||
* 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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 @@ error_register:
|
||||||
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)
|
||||||
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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
* 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)
|
||||||
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)
|
||||||
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 @@ err_out:
|
||||||
}
|
}
|
||||||
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 @@
|
||||||
|
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
/* 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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
/* 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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
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)
|
||||||
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);
|
||||||
#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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue