diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-05 09:37:11 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-05 09:37:11 -0700 |
commit | f32c9e059eb6c12a4296003489b167f8eef9d201 (patch) | |
tree | 77832660127a7a015aa6c4a06e606313ce5fb329 /drivers | |
parent | d1ce495676644fc79b3ccd58657133c5d4a414fb (diff) | |
parent | fd46cd55fbc5a8e8c180ee04a30cda26c84569d2 (diff) |
Merge branch 'parisc-4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc updates from Helge Deller:
"Major changes include:
- Full support of the firmware Page Deallocation Table with
MADV_HWPOISON and MADV_SOFT_OFFLINE. A kernel thread scans
regularily for new bad memory pages.
- Full support for self-extracting kernel.
- Added UBSAN support.
- Lots of section mismatch fixes across all parisc drivers.
- Added examples for %pF and %pS usage in printk-formats.txt"
* 'parisc-4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: (28 commits)
printk-formats.txt: Add examples for %pF and %pS usage
parisc: Fix up devices below a PCI-PCI MegaRAID controller bridge
parisc/core: Fix section mismatches
parisc/ipmi_si_intf: Fix section mismatches on parisc platform
parisc/input/hilkbd: Fix section mismatches
parisc/net/lasi_82596: Fix section mismatches
parisc/serio: Fix section mismatches in gscps2 and hp_sdc drivers
parisc: Fix section mismatches in parisc core drivers
parisc/parport_gsc: Fix section mismatches
parisc/scsi/lasi700: Fix section mismatches
parisc/scsi/zalon: Fix section mismatches
parisc/8250_gsc: Fix section mismatches
parisc/mux: Fix section mismatches
parisc/sticore: Fix section mismatches
parisc/harmony: Fix section mismatches
parisc: Wire up support for self-extracting kernel
parisc: Make existing core files reuseable for bootloader
parisc: Add core code for self-extracting kernel
parisc: Enable UBSAN support
parisc/random: Add machine specific randomness
...
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 12 | ||||
-rw-r--r-- | drivers/input/keyboard/hilkbd.c | 10 | ||||
-rw-r--r-- | drivers/input/serio/gscps2.c | 10 | ||||
-rw-r--r-- | drivers/input/serio/hp_sdc.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/i825xx/lasi_82596.c | 10 | ||||
-rw-r--r-- | drivers/parisc/asp.c | 4 | ||||
-rw-r--r-- | drivers/parisc/ccio-dma.c | 4 | ||||
-rw-r--r-- | drivers/parisc/ccio-rm-dma.c | 6 | ||||
-rw-r--r-- | drivers/parisc/dino.c | 4 | ||||
-rw-r--r-- | drivers/parisc/eisa.c | 4 | ||||
-rw-r--r-- | drivers/parisc/hppb.c | 6 | ||||
-rw-r--r-- | drivers/parisc/lasi.c | 4 | ||||
-rw-r--r-- | drivers/parisc/lba_pci.c | 46 | ||||
-rw-r--r-- | drivers/parisc/sba_iommu.c | 6 | ||||
-rw-r--r-- | drivers/parisc/superio.c | 4 | ||||
-rw-r--r-- | drivers/parisc/wax.c | 4 | ||||
-rw-r--r-- | drivers/parport/parport_gsc.c | 10 | ||||
-rw-r--r-- | drivers/scsi/lasi700.c | 6 | ||||
-rw-r--r-- | drivers/scsi/zalon.c | 8 | ||||
-rw-r--r-- | drivers/tty/serial/8250/8250_gsc.c | 8 | ||||
-rw-r--r-- | drivers/tty/serial/mux.c | 14 | ||||
-rw-r--r-- | drivers/video/console/sticore.c | 11 |
22 files changed, 117 insertions, 78 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 985973855005..36f47e8d06a3 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -2812,7 +2812,7 @@ static struct platform_driver ipmi_driver = { }; #ifdef CONFIG_PARISC -static int ipmi_parisc_probe(struct parisc_device *dev) +static int __init ipmi_parisc_probe(struct parisc_device *dev) { struct smi_info *info; int rv; @@ -2850,22 +2850,24 @@ static int ipmi_parisc_probe(struct parisc_device *dev) return 0; } -static int ipmi_parisc_remove(struct parisc_device *dev) +static int __exit ipmi_parisc_remove(struct parisc_device *dev) { cleanup_one_si(dev_get_drvdata(&dev->dev)); return 0; } -static const struct parisc_device_id ipmi_parisc_tbl[] = { +static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = { { HPHW_MC, HVERSION_REV_ANY_ID, 0x004, 0xC0 }, { 0, } }; -static struct parisc_driver ipmi_parisc_driver = { +MODULE_DEVICE_TABLE(parisc, ipmi_parisc_tbl); + +static struct parisc_driver ipmi_parisc_driver __refdata = { .name = "ipmi", .id_table = ipmi_parisc_tbl, .probe = ipmi_parisc_probe, - .remove = ipmi_parisc_remove, + .remove = __exit_p(ipmi_parisc_remove), }; #endif /* CONFIG_PARISC */ diff --git a/drivers/input/keyboard/hilkbd.c b/drivers/input/keyboard/hilkbd.c index 198dc07a1be5..a4e404aaf64b 100644 --- a/drivers/input/keyboard/hilkbd.c +++ b/drivers/input/keyboard/hilkbd.c @@ -299,7 +299,7 @@ static void hil_keyb_exit(void) } #if defined(CONFIG_PARISC) -static int hil_probe_chip(struct parisc_device *dev) +static int __init hil_probe_chip(struct parisc_device *dev) { /* Only allow one HIL keyboard */ if (hil_dev.dev) @@ -320,14 +320,14 @@ static int hil_probe_chip(struct parisc_device *dev) return hil_keyb_init(); } -static int hil_remove_chip(struct parisc_device *dev) +static int __exit hil_remove_chip(struct parisc_device *dev) { hil_keyb_exit(); return 0; } -static struct parisc_device_id hil_tbl[] = { +static const struct parisc_device_id hil_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00073 }, { 0, } }; @@ -337,11 +337,11 @@ static struct parisc_device_id hil_tbl[] = { MODULE_DEVICE_TABLE(parisc, hil_tbl); #endif -static struct parisc_driver hil_driver = { +static struct parisc_driver hil_driver __refdata = { .name = "hil", .id_table = hil_tbl, .probe = hil_probe_chip, - .remove = hil_remove_chip, + .remove = __exit_p(hil_remove_chip), }; static int __init hil_init(void) diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index ecba666afadb..aa9f29b875de 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c @@ -325,7 +325,7 @@ static void gscps2_close(struct serio *port) * @return: success/error report */ -static int gscps2_probe(struct parisc_device *dev) +static int __init gscps2_probe(struct parisc_device *dev) { struct gscps2port *ps2port; struct serio *serio; @@ -412,7 +412,7 @@ fail_nomem: * @return: success/error report */ -static int gscps2_remove(struct parisc_device *dev) +static int __exit gscps2_remove(struct parisc_device *dev) { struct gscps2port *ps2port = dev_get_drvdata(&dev->dev); @@ -430,7 +430,7 @@ static int gscps2_remove(struct parisc_device *dev) } -static struct parisc_device_id gscps2_device_tbl[] = { +static const struct parisc_device_id gscps2_device_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00084 }, /* LASI PS/2 */ #ifdef DINO_TESTED { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00096 }, /* DINO PS/2 */ @@ -439,11 +439,11 @@ static struct parisc_device_id gscps2_device_tbl[] = { }; MODULE_DEVICE_TABLE(parisc, gscps2_device_tbl); -static struct parisc_driver parisc_ps2_driver = { +static struct parisc_driver parisc_ps2_driver __refdata = { .name = "gsc_ps2", .id_table = gscps2_device_tbl, .probe = gscps2_probe, - .remove = gscps2_remove, + .remove = __exit_p(gscps2_remove), }; static int __init gscps2_init(void) diff --git a/drivers/input/serio/hp_sdc.c b/drivers/input/serio/hp_sdc.c index 1bfdae4b0d99..8eef6849d066 100644 --- a/drivers/input/serio/hp_sdc.c +++ b/drivers/input/serio/hp_sdc.c @@ -805,7 +805,7 @@ static void hp_sdc_kicker(unsigned long data) #if defined(__hppa__) -static const struct parisc_device_id hp_sdc_tbl[] = { +static const struct parisc_device_id hp_sdc_tbl[] __initconst = { { .hw_type = HPHW_FIO, .hversion_rev = HVERSION_REV_ANY_ID, @@ -820,7 +820,7 @@ MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl); static int __init hp_sdc_init_hppa(struct parisc_device *d); static struct delayed_work moduleloader_work; -static struct parisc_driver hp_sdc_driver = { +static struct parisc_driver hp_sdc_driver __refdata = { .name = "hp_sdc", .id_table = hp_sdc_tbl, .probe = hp_sdc_init_hppa, diff --git a/drivers/net/ethernet/i825xx/lasi_82596.c b/drivers/net/ethernet/i825xx/lasi_82596.c index d787fdd5db7b..aa22e108f09b 100644 --- a/drivers/net/ethernet/i825xx/lasi_82596.c +++ b/drivers/net/ethernet/i825xx/lasi_82596.c @@ -149,7 +149,7 @@ static void mpu_port(struct net_device *dev, int c, dma_addr_t x) #define LAN_PROM_ADDR 0xF0810000 -static int +static int __init lan_init_chip(struct parisc_device *dev) { struct net_device *netdevice; @@ -194,7 +194,7 @@ lan_init_chip(struct parisc_device *dev) return retval; } -static int lan_remove_chip(struct parisc_device *pdev) +static int __exit lan_remove_chip(struct parisc_device *pdev) { struct net_device *dev = parisc_get_drvdata(pdev); struct i596_private *lp = netdev_priv(dev); @@ -206,7 +206,7 @@ static int lan_remove_chip(struct parisc_device *pdev) return 0; } -static struct parisc_device_id lan_tbl[] = { +static const struct parisc_device_id lan_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008a }, { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00072 }, { 0, } @@ -214,11 +214,11 @@ static struct parisc_device_id lan_tbl[] = { MODULE_DEVICE_TABLE(parisc, lan_tbl); -static struct parisc_driver lan_driver = { +static struct parisc_driver lan_driver __refdata = { .name = "lasi_82596", .id_table = lan_tbl, .probe = lan_init_chip, - .remove = lan_remove_chip, + .remove = __exit_p(lan_remove_chip), }; static int lasi_82596_init(void) diff --git a/drivers/parisc/asp.c b/drivers/parisc/asp.c index 6a1ab2512a53..3163b6752d3d 100644 --- a/drivers/parisc/asp.c +++ b/drivers/parisc/asp.c @@ -118,12 +118,12 @@ static int __init asp_init_chip(struct parisc_device *dev) return ret; } -static struct parisc_device_id asp_tbl[] = { +static const struct parisc_device_id asp_tbl[] __initconst = { { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00070 }, { 0, } }; -struct parisc_driver asp_driver = { +struct parisc_driver asp_driver __refdata = { .name = "asp", .id_table = asp_tbl, .probe = asp_init_chip, diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index 6aa1e7f6672f..acba1f56af3e 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c @@ -1241,7 +1241,7 @@ ccio_get_iotlb_size(struct parisc_device *dev) #endif /* 0 */ /* We *can't* support JAVA (T600). Venture there at your own risk. */ -static const struct parisc_device_id ccio_tbl[] = { +static const struct parisc_device_id ccio_tbl[] __initconst = { { HPHW_IOA, HVERSION_REV_ANY_ID, U2_IOA_RUNWAY, 0xb }, /* U2 */ { HPHW_IOA, HVERSION_REV_ANY_ID, UTURN_IOA_RUNWAY, 0xb }, /* UTurn */ { 0, } @@ -1249,7 +1249,7 @@ static const struct parisc_device_id ccio_tbl[] = { static int ccio_probe(struct parisc_device *dev); -static struct parisc_driver ccio_driver = { +static struct parisc_driver ccio_driver __refdata = { .name = "ccio", .id_table = ccio_tbl, .probe = ccio_probe, diff --git a/drivers/parisc/ccio-rm-dma.c b/drivers/parisc/ccio-rm-dma.c index 1bf988010855..df7932af48b7 100644 --- a/drivers/parisc/ccio-rm-dma.c +++ b/drivers/parisc/ccio-rm-dma.c @@ -163,7 +163,7 @@ static struct pci_dma_ops ccio_ops = { ** If so, initialize the chip and tell other partners in crime they ** have work to do. */ -static int +static int __init ccio_probe(struct parisc_device *dev) { printk(KERN_INFO "%s found %s at 0x%lx\n", MODULE_NAME, @@ -184,13 +184,13 @@ ccio_probe(struct parisc_device *dev) return 0; } -static struct parisc_device_id ccio_tbl[] = { +static const struct parisc_device_id ccio_tbl[] __initconst = { { HPHW_BCPORT, HVERSION_REV_ANY_ID, U2_BC_GSC, 0xc }, { HPHW_BCPORT, HVERSION_REV_ANY_ID, UTURN_BC_GSC, 0xc }, { 0, } }; -static struct parisc_driver ccio_driver = { +static struct parisc_driver ccio_driver __refdata = { .name = "U2/Uturn", .id_table = ccio_tbl, .probe = ccio_probe, diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c index ed92c1254cff..0b3fb99d9b89 100644 --- a/drivers/parisc/dino.c +++ b/drivers/parisc/dino.c @@ -1022,7 +1022,7 @@ static int __init dino_probe(struct parisc_device *dev) * and 725 firmware misreport it as 0x08080 for no adequately explained * reason. */ -static struct parisc_device_id dino_tbl[] = { +static const struct parisc_device_id dino_tbl[] __initconst = { { HPHW_A_DMA, HVERSION_REV_ANY_ID, 0x004, 0x0009D },/* Card-mode Dino */ { HPHW_A_DMA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x08080 }, /* XXX */ { HPHW_BRIDGE, HVERSION_REV_ANY_ID, 0x680, 0xa }, /* Bridge-mode Dino */ @@ -1031,7 +1031,7 @@ static struct parisc_device_id dino_tbl[] = { { 0, } }; -static struct parisc_driver dino_driver = { +static struct parisc_driver dino_driver __refdata = { .name = "dino", .id_table = dino_tbl, .probe = dino_probe, diff --git a/drivers/parisc/eisa.c b/drivers/parisc/eisa.c index 7e2f6d5a6aaf..9ff434f354bd 100644 --- a/drivers/parisc/eisa.c +++ b/drivers/parisc/eisa.c @@ -393,7 +393,7 @@ error_release: return result; } -static const struct parisc_device_id eisa_tbl[] = { +static const struct parisc_device_id eisa_tbl[] __initconst = { { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00076 }, /* Mongoose */ { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00090 }, /* Wax EISA */ { 0, } @@ -401,7 +401,7 @@ static const struct parisc_device_id eisa_tbl[] = { MODULE_DEVICE_TABLE(parisc, eisa_tbl); -static struct parisc_driver eisa_driver = { +static struct parisc_driver eisa_driver __refdata = { .name = "eisa_ba", .id_table = eisa_tbl, .probe = eisa_probe, diff --git a/drivers/parisc/hppb.c b/drivers/parisc/hppb.c index 898208e4f302..ebc7b617e5d0 100644 --- a/drivers/parisc/hppb.c +++ b/drivers/parisc/hppb.c @@ -45,7 +45,7 @@ static struct hppb_card hppb_card_head = { * (return 1). If so, initialize the chip and tell other partners in crime * they have work to do. */ -static int hppb_probe(struct parisc_device *dev) +static int __init hppb_probe(struct parisc_device *dev) { int status; struct hppb_card *card = &hppb_card_head; @@ -81,7 +81,7 @@ static int hppb_probe(struct parisc_device *dev) return 0; } -static struct parisc_device_id hppb_tbl[] = { +static const struct parisc_device_id hppb_tbl[] __initconst = { { HPHW_BCPORT, HVERSION_REV_ANY_ID, 0x500, 0xc }, /* E25 and K */ { HPHW_BCPORT, 0x0, 0x501, 0xc }, /* E35 */ { HPHW_BCPORT, 0x0, 0x502, 0xc }, /* E45 */ @@ -89,7 +89,7 @@ static struct parisc_device_id hppb_tbl[] = { { 0, } }; -static struct parisc_driver hppb_driver = { +static struct parisc_driver hppb_driver __refdata = { .name = "gecko_boa", .id_table = hppb_tbl, .probe = hppb_probe, diff --git a/drivers/parisc/lasi.c b/drivers/parisc/lasi.c index e65727ca9fc0..4c9225431500 100644 --- a/drivers/parisc/lasi.c +++ b/drivers/parisc/lasi.c @@ -227,12 +227,12 @@ static int __init lasi_init_chip(struct parisc_device *dev) return ret; } -static struct parisc_device_id lasi_tbl[] = { +static struct parisc_device_id lasi_tbl[] __initdata = { { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00081 }, { 0, } }; -struct parisc_driver lasi_driver = { +struct parisc_driver lasi_driver __refdata = { .name = "lasi", .id_table = lasi_tbl, .probe = lasi_init_chip, diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c index bc286cbbbc9b..a25fed52f7e9 100644 --- a/drivers/parisc/lba_pci.c +++ b/drivers/parisc/lba_pci.c @@ -667,6 +667,42 @@ extend_lmmio_len(unsigned long start, unsigned long end, unsigned long lba_len) #define truncate_pat_collision(r,n) (0) #endif +static void pcibios_allocate_bridge_resources(struct pci_dev *dev) +{ + int idx; + struct resource *r; + + for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) { + r = &dev->resource[idx]; + if (!r->flags) + continue; + if (r->parent) /* Already allocated */ + continue; + if (!r->start || pci_claim_bridge_resource(dev, idx) < 0) { + /* + * Something is wrong with the region. + * Invalidate the resource to prevent + * child resource allocations in this + * range. + */ + r->start = r->end = 0; + r->flags = 0; + } + } +} + +static void pcibios_allocate_bus_resources(struct pci_bus *bus) +{ + struct pci_bus *child; + + /* Depth-First Search on bus tree */ + if (bus->self) + pcibios_allocate_bridge_resources(bus->self); + list_for_each_entry(child, &bus->children, node) + pcibios_allocate_bus_resources(child); +} + + /* ** The algorithm is generic code. ** But it needs to access local data structures to get the IRQ base. @@ -693,11 +729,11 @@ lba_fixup_bus(struct pci_bus *bus) ** pci_alloc_primary_bus() mangles this. */ if (bus->parent) { - int i; /* PCI-PCI Bridge */ pci_read_bridge_bases(bus); - for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) - pci_claim_bridge_resource(bus->self, i); + + /* check and allocate bridge resources */ + pcibios_allocate_bus_resources(bus); } else { /* Host-PCI Bridge */ int err; @@ -1613,14 +1649,14 @@ lba_driver_probe(struct parisc_device *dev) return 0; } -static struct parisc_device_id lba_tbl[] = { +static const struct parisc_device_id lba_tbl[] __initconst = { { HPHW_BRIDGE, HVERSION_REV_ANY_ID, ELROY_HVERS, 0xa }, { HPHW_BRIDGE, HVERSION_REV_ANY_ID, MERCURY_HVERS, 0xa }, { HPHW_BRIDGE, HVERSION_REV_ANY_ID, QUICKSILVER_HVERS, 0xa }, { 0, } }; -static struct parisc_driver lba_driver = { +static struct parisc_driver lba_driver __refdata = { .name = MODULE_NAME, .id_table = lba_tbl, .probe = lba_driver_probe, diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index 4086f79d58d5..0a9c762a70fa 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c @@ -1905,7 +1905,7 @@ static const struct file_operations sba_proc_bitmap_fops = { }; #endif /* CONFIG_PROC_FS */ -static struct parisc_device_id sba_tbl[] = { +static const struct parisc_device_id sba_tbl[] __initconst = { { HPHW_IOA, HVERSION_REV_ANY_ID, ASTRO_RUNWAY_PORT, 0xb }, { HPHW_BCPORT, HVERSION_REV_ANY_ID, IKE_MERCED_PORT, 0xc }, { HPHW_BCPORT, HVERSION_REV_ANY_ID, REO_MERCED_PORT, 0xc }, @@ -1916,7 +1916,7 @@ static struct parisc_device_id sba_tbl[] = { static int sba_driver_callback(struct parisc_device *); -static struct parisc_driver sba_driver = { +static struct parisc_driver sba_driver __refdata = { .name = MODULE_NAME, .id_table = sba_tbl, .probe = sba_driver_callback, @@ -1927,7 +1927,7 @@ static struct parisc_driver sba_driver = { ** If so, initialize the chip and tell other partners in crime they ** have work to do. */ -static int sba_driver_callback(struct parisc_device *dev) +static int __init sba_driver_callback(struct parisc_device *dev) { struct sba_device *sba_dev; u32 func_class; diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c index deeaed544222..0441777fc777 100644 --- a/drivers/parisc/superio.c +++ b/drivers/parisc/superio.c @@ -482,14 +482,14 @@ superio_probe(struct pci_dev *dev, const struct pci_device_id *id) return -ENODEV; } -static const struct pci_device_id superio_tbl[] = { +static const struct pci_device_id superio_tbl[] __initconst = { { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87560_LIO) }, { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87560_USB) }, { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87415) }, { 0, } }; -static struct pci_driver superio_driver = { +static struct pci_driver superio_driver __refdata = { .name = SUPERIO, .id_table = superio_tbl, .probe = superio_probe, diff --git a/drivers/parisc/wax.c b/drivers/parisc/wax.c index da9d5ad1353c..6a3e40702b3b 100644 --- a/drivers/parisc/wax.c +++ b/drivers/parisc/wax.c @@ -125,14 +125,14 @@ static int __init wax_init_chip(struct parisc_device *dev) return ret; } -static struct parisc_device_id wax_tbl[] = { +static const struct parisc_device_id wax_tbl[] __initconst = { { HPHW_BA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008e }, { 0, } }; MODULE_DEVICE_TABLE(parisc, wax_tbl); -struct parisc_driver wax_driver = { +struct parisc_driver wax_driver __refdata = { .name = "wax", .id_table = wax_tbl, .probe = wax_init_chip, diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c index 3858b87fd0bb..5f710aaaf3da 100644 --- a/drivers/parport/parport_gsc.c +++ b/drivers/parport/parport_gsc.c @@ -346,7 +346,7 @@ struct parport *parport_gsc_probe_port(unsigned long base, static int parport_count; -static int parport_init_chip(struct parisc_device *dev) +static int __init parport_init_chip(struct parisc_device *dev) { struct parport *p; unsigned long port; @@ -381,7 +381,7 @@ static int parport_init_chip(struct parisc_device *dev) return 0; } -static int parport_remove_chip(struct parisc_device *dev) +static int __exit parport_remove_chip(struct parisc_device *dev) { struct parport *p = dev_get_drvdata(&dev->dev); if (p) { @@ -403,18 +403,18 @@ static int parport_remove_chip(struct parisc_device *dev) return 0; } -static struct parisc_device_id parport_tbl[] = { +static const struct parisc_device_id parport_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x74 }, { 0, } }; MODULE_DEVICE_TABLE(parisc, parport_tbl); -static struct parisc_driver parport_driver = { +static struct parisc_driver parport_driver __refdata = { .name = "Parallel", .id_table = parport_tbl, .probe = parport_init_chip, - .remove = parport_remove_chip, + .remove = __exit_p(parport_remove_chip), }; int parport_gsc_init(void) diff --git a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c index 5c4ded997265..dc839279bbd9 100644 --- a/drivers/scsi/lasi700.c +++ b/drivers/scsi/lasi700.c @@ -81,7 +81,7 @@ MODULE_LICENSE("GPL"); #define LASI710_CLOCK 40 #define LASI_SCSI_CORE_OFFSET 0x100 -static struct parisc_device_id lasi700_ids[] = { +static const struct parisc_device_id lasi700_ids[] __initconst = { LASI700_ID_TABLE, LASI710_ID_TABLE, { 0 } @@ -164,11 +164,11 @@ lasi700_driver_remove(struct parisc_device *dev) return 0; } -static struct parisc_driver lasi700_driver = { +static struct parisc_driver lasi700_driver __refdata = { .name = "lasi_scsi", .id_table = lasi700_ids, .probe = lasi700_probe, - .remove = lasi700_driver_remove, + .remove = __exit_p(lasi700_driver_remove), }; static int __init diff --git a/drivers/scsi/zalon.c b/drivers/scsi/zalon.c index b2cf1faa819d..4722660958f8 100644 --- a/drivers/scsi/zalon.c +++ b/drivers/scsi/zalon.c @@ -160,14 +160,14 @@ zalon_probe(struct parisc_device *dev) return error; } -static struct parisc_device_id zalon_tbl[] = { +static const struct parisc_device_id zalon_tbl[] __initconst = { { HPHW_A_DMA, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00089 }, { 0, } }; MODULE_DEVICE_TABLE(parisc, zalon_tbl); -static int zalon_remove(struct parisc_device *dev) +static int __exit zalon_remove(struct parisc_device *dev) { struct Scsi_Host *host = dev_get_drvdata(&dev->dev); @@ -178,11 +178,11 @@ static int zalon_remove(struct parisc_device *dev) return 0; } -static struct parisc_driver zalon_driver = { +static struct parisc_driver zalon_driver __refdata = { .name = "zalon", .id_table = zalon_tbl, .probe = zalon_probe, - .remove = zalon_remove, + .remove = __exit_p(zalon_remove), }; static int __init zalon7xx_init(void) diff --git a/drivers/tty/serial/8250/8250_gsc.c b/drivers/tty/serial/8250/8250_gsc.c index 63306de4390d..df2931e1e086 100644 --- a/drivers/tty/serial/8250/8250_gsc.c +++ b/drivers/tty/serial/8250/8250_gsc.c @@ -80,7 +80,7 @@ static int __init serial_init_chip(struct parisc_device *dev) return 0; } -static struct parisc_device_id serial_tbl[] = { +static const struct parisc_device_id serial_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00075 }, { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008c }, { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0008d }, @@ -94,7 +94,7 @@ static struct parisc_device_id serial_tbl[] = { * which only knows about Lasi and then a second which will find all the * other serial ports. HPUX ignores this problem. */ -static struct parisc_device_id lasi_tbl[] = { +static const struct parisc_device_id lasi_tbl[] __initconst = { { HPHW_FIO, HVERSION_REV_ANY_ID, 0x03B, 0x0008C }, /* C1xx/C1xxL */ { HPHW_FIO, HVERSION_REV_ANY_ID, 0x03C, 0x0008C }, /* B132L */ { HPHW_FIO, HVERSION_REV_ANY_ID, 0x03D, 0x0008C }, /* B160L */ @@ -110,13 +110,13 @@ static struct parisc_device_id lasi_tbl[] = { MODULE_DEVICE_TABLE(parisc, serial_tbl); -static struct parisc_driver lasi_driver = { +static struct parisc_driver lasi_driver __refdata = { .name = "serial_1", .id_table = lasi_tbl, .probe = serial_init_chip, }; -static struct parisc_driver serial_driver = { +static struct parisc_driver serial_driver __refdata = { .name = "serial", .id_table = serial_tbl, .probe = serial_init_chip, diff --git a/drivers/tty/serial/mux.c b/drivers/tty/serial/mux.c index 8a4be4b73723..6f14d2a547c4 100644 --- a/drivers/tty/serial/mux.c +++ b/drivers/tty/serial/mux.c @@ -503,7 +503,7 @@ static int __init mux_probe(struct parisc_device *dev) return 0; } -static int mux_remove(struct parisc_device *dev) +static int __exit mux_remove(struct parisc_device *dev) { int i, j; int port_count = (long)dev_get_drvdata(&dev->dev); @@ -536,13 +536,13 @@ static int mux_remove(struct parisc_device *dev) * This table only contains the parisc_device_id of known builtin mux * devices. All other mux cards will be detected by the generic mux_tbl. */ -static struct parisc_device_id builtin_mux_tbl[] = { +static const struct parisc_device_id builtin_mux_tbl[] __initconst = { { HPHW_A_DIRECT, HVERSION_REV_ANY_ID, 0x15, 0x0000D }, /* All K-class */ { HPHW_A_DIRECT, HVERSION_REV_ANY_ID, 0x44, 0x0000D }, /* E35, E45, and E55 */ { 0, } }; -static struct parisc_device_id mux_tbl[] = { +static const struct parisc_device_id mux_tbl[] __initconst = { { HPHW_A_DIRECT, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0000D }, { 0, } }; @@ -550,18 +550,18 @@ static struct parisc_device_id mux_tbl[] = { MODULE_DEVICE_TABLE(parisc, builtin_mux_tbl); MODULE_DEVICE_TABLE(parisc, mux_tbl); -static struct parisc_driver builtin_serial_mux_driver = { +static struct parisc_driver builtin_serial_mux_driver __refdata = { .name = "builtin_serial_mux", .id_table = builtin_mux_tbl, .probe = mux_probe, - .remove = mux_remove, + .remove = __exit_p(mux_remove), }; -static struct parisc_driver serial_mux_driver = { +static struct parisc_driver serial_mux_driver __refdata = { .name = "serial_mux", .id_table = mux_tbl, .probe = mux_probe, - .remove = mux_remove, + .remove = __exit_p(mux_remove), }; /** diff --git a/drivers/video/console/sticore.c b/drivers/video/console/sticore.c index 7da1ad03acb5..d1d3796773aa 100644 --- a/drivers/video/console/sticore.c +++ b/drivers/video/console/sticore.c @@ -281,7 +281,7 @@ static void sti_rom_copy(unsigned long base, unsigned long count, void *dest) static char default_sti_path[21] __read_mostly; #ifndef MODULE -static int sti_setup(char *str) +static int __init sti_setup(char *str) { if (str) strlcpy (default_sti_path, str, sizeof (default_sti_path)); @@ -941,7 +941,7 @@ static void sticore_check_for_default_sti(struct sti_struct *sti, char *path) * in the additional address field addr[1] while on * older Systems the PDC stores it in page0->proc_sti */ -static int sticore_pa_init(struct parisc_device *dev) +static int __init sticore_pa_init(struct parisc_device *dev) { char pa_path[21]; struct sti_struct *sti = NULL; @@ -1009,7 +1009,7 @@ static int sticore_pci_init(struct pci_dev *pd, const struct pci_device_id *ent) } -static void sticore_pci_remove(struct pci_dev *pd) +static void __exit sticore_pci_remove(struct pci_dev *pd) { BUG(); } @@ -1029,7 +1029,7 @@ static struct pci_driver pci_sti_driver = { .name = "sti", .id_table = sti_pci_tbl, .probe = sticore_pci_init, - .remove = sticore_pci_remove, + .remove = __exit_p(sticore_pci_remove), }; static struct parisc_device_id sti_pa_tbl[] = { @@ -1037,8 +1037,9 @@ static struct parisc_device_id sti_pa_tbl[] = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00085 }, { 0, } }; +MODULE_DEVICE_TABLE(parisc, sti_pa_tbl); -static struct parisc_driver pa_sti_driver = { +static struct parisc_driver pa_sti_driver __refdata = { .name = "sti", .id_table = sti_pa_tbl, .probe = sticore_pa_init, |