From 0f15b1511ad2e82a6b422d275c369e92242854e6 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Thu, 25 Oct 2012 04:30:52 +0000 Subject: isdn: remove dead code multi is assigned to 0 and then acts as a constant. Remove the dead code. Signed-off-by: Alan Cox Signed-off-by: David S. Miller --- drivers/isdn/mISDN/l1oip_core.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c index db50f788855d..f8e405c383a0 100644 --- a/drivers/isdn/mISDN/l1oip_core.c +++ b/drivers/isdn/mISDN/l1oip_core.c @@ -277,7 +277,6 @@ l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 channel, u32 chanmask, u16 timebase, u8 *buf, int len) { u8 *p; - int multi = 0; u8 frame[len + 32]; struct socket *socket = NULL; @@ -317,9 +316,7 @@ l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 channel, u32 chanmask, *p++ = hc->id >> 8; *p++ = hc->id; } - *p++ = (multi == 1) ? 0x80 : 0x00 + channel; /* m-flag, channel */ - if (multi == 1) - *p++ = len; /* length */ + *p++ = 0x00 + channel; /* m-flag, channel */ *p++ = timebase >> 8; /* time base */ *p++ = timebase; -- cgit v1.2.3-59-g8ed1b From 7fd78edc470d968daacfb472226bc021081196bd Mon Sep 17 00:00:00 2001 From: Lee Jones Date: Tue, 6 Nov 2012 23:55:03 +0000 Subject: isdn: Make CONFIG_ISDN depend on CONFIG_NETDEVICES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It doesn't make much sense to enable ISDN services if you don't intend to connect to a network. Therefore insisting that ISDN depends on NETDEVICES seems logical. We can then remove any guards mentioning NETDEVICES inside all subordinate drivers. This also has the nice side-effect of fixing the warning below when ISDN_I4L && !CONFIG_NETDEVICES at compile time. This patch fixes: drivers/isdn/i4l/isdn_common.c: In function ‘isdn_ioctl’: drivers/isdn/i4l/isdn_common.c:1278:8: warning: unused variable ‘s’ [-Wunused-variable] Cc: Karsten Keil Cc: netdev@vger.kernel.org Signed-off-by: Lee Jones Signed-off-by: David S. Miller --- drivers/isdn/Kconfig | 2 +- drivers/isdn/i4l/Kconfig | 2 +- drivers/isdn/i4l/isdn_common.c | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/Kconfig b/drivers/isdn/Kconfig index a233ed53913a..86cd75a0e84d 100644 --- a/drivers/isdn/Kconfig +++ b/drivers/isdn/Kconfig @@ -4,7 +4,7 @@ menuconfig ISDN bool "ISDN support" - depends on NET + depends on NET && NETDEVICES depends on !S390 && !UML ---help--- ISDN ("Integrated Services Digital Network", called RNIS in France) diff --git a/drivers/isdn/i4l/Kconfig b/drivers/isdn/i4l/Kconfig index 2302fbe70ac6..9c6650ea848e 100644 --- a/drivers/isdn/i4l/Kconfig +++ b/drivers/isdn/i4l/Kconfig @@ -6,7 +6,7 @@ if ISDN_I4L config ISDN_PPP bool "Support synchronous PPP" - depends on INET && NETDEVICES + depends on INET select SLHC help Over digital connections such as ISDN, there is no need to diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c index 8c610fa6782b..e2a945ee9f05 100644 --- a/drivers/isdn/i4l/isdn_common.c +++ b/drivers/isdn/i4l/isdn_common.c @@ -1312,7 +1312,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) } else return -EINVAL; break; -#ifdef CONFIG_NETDEVICES case IIOCNETGPN: /* Get peer phone number of a connected * isdn network interface */ @@ -1322,7 +1321,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) return isdn_net_getpeer(&phone, argp); } else return -EINVAL; -#endif default: return -EINVAL; } @@ -1352,7 +1350,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) case IIOCNETLCR: printk(KERN_INFO "INFO: ISDN_ABC_LCR_SUPPORT not enabled\n"); return -ENODEV; -#ifdef CONFIG_NETDEVICES case IIOCNETAIF: /* Add a network-interface */ if (arg) { @@ -1491,7 +1488,6 @@ isdn_ioctl(struct file *file, uint cmd, ulong arg) return -EFAULT; return isdn_net_force_hangup(name); break; -#endif /* CONFIG_NETDEVICES */ case IIOCSETVER: dev->net_verbose = arg; printk(KERN_INFO "isdn: Verbose-Level is %d\n", dev->net_verbose); -- cgit v1.2.3-59-g8ed1b From 465b1678ebdf5dbd9bc0502358ae472343351c2c Mon Sep 17 00:00:00 2001 From: Masanari Iida Date: Fri, 9 Nov 2012 05:02:49 +0000 Subject: isdn: Fix typo in drivers/isdn Correct spelling typo in printk within drivers/isdn Signed-off-by: Masanari Iida Signed-off-by: David S. Miller --- drivers/isdn/hardware/mISDN/hfcpci.c | 2 +- drivers/isdn/hardware/mISDN/mISDNisar.c | 2 +- drivers/isdn/hisax/callc.c | 2 +- drivers/isdn/hisax/hfc_pci.c | 2 +- drivers/isdn/hisax/hfc_sx.c | 2 +- drivers/isdn/pcbit/layer2.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c index 81363ffa5357..6e99d73563b8 100644 --- a/drivers/isdn/hardware/mISDN/hfcpci.c +++ b/drivers/isdn/hardware/mISDN/hfcpci.c @@ -490,7 +490,7 @@ receive_dmsg(struct hfc_pci *hc) (df->data[le16_to_cpu(zp->z1)])) { if (dch->debug & DEBUG_HW) printk(KERN_DEBUG - "empty_fifo hfcpci paket inv. len " + "empty_fifo hfcpci packet inv. len " "%d or crc %d\n", rcnt, df->data[le16_to_cpu(zp->z1)]); diff --git a/drivers/isdn/hardware/mISDN/mISDNisar.c b/drivers/isdn/hardware/mISDN/mISDNisar.c index 182ecf0626c2..feafa91c2ed9 100644 --- a/drivers/isdn/hardware/mISDN/mISDNisar.c +++ b/drivers/isdn/hardware/mISDN/mISDNisar.c @@ -1302,7 +1302,7 @@ modeisar(struct isar_ch *ch, u32 bprotocol) &ch->is->Flags)) ch->dpath = 1; else { - pr_info("modeisar both pathes in use\n"); + pr_info("modeisar both paths in use\n"); return -EBUSY; } if (bprotocol == ISDN_P_B_HDLC) diff --git a/drivers/isdn/hisax/callc.c b/drivers/isdn/hisax/callc.c index a47637be0cc5..ddec47a911a0 100644 --- a/drivers/isdn/hisax/callc.c +++ b/drivers/isdn/hisax/callc.c @@ -35,7 +35,7 @@ static int chancount; /* experimental REJECT after ALERTING for CALLBACK to beat the 4s delay */ #define ALERT_REJECT 0 -/* Value to delay the sending of the first B-channel paket after CONNECT +/* Value to delay the sending of the first B-channel packet after CONNECT * here is no value given by ITU, but experience shows that 300 ms will * work on many networks, if you or your other side is behind local exchanges * a greater value may be recommented. If the delay is to short the first paket diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 334fa90bed8e..f60d4be58941 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -354,7 +354,7 @@ receive_dmsg(struct IsdnCardState *cs) if ((rcnt > MAX_DFRAME_LEN + 3) || (rcnt < 4) || (df->data[zp->z1])) { if (cs->debug & L1_DEB_WARN) - debugl1(cs, "empty_fifo hfcpci paket inv. len %d or crc %d", rcnt, df->data[zp->z1]); + debugl1(cs, "empty_fifo hfcpci packet inv. len %d or crc %d", rcnt, df->data[zp->z1]); #ifdef ERROR_STATISTIC cs->err_rx++; #endif diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c index 4db846be4369..4ec279ce052f 100644 --- a/drivers/isdn/hisax/hfc_sx.c +++ b/drivers/isdn/hisax/hfc_sx.c @@ -270,7 +270,7 @@ read_fifo(struct IsdnCardState *cs, u_char fifo, int trans_max) if ((count > fifo_size) || (count < 4)) { if (cs->debug & L1_DEB_WARN) - debugl1(cs, "hfcsx_read_fifo %d paket inv. len %d ", fifo , count); + debugl1(cs, "hfcsx_read_fifo %d packet inv. len %d ", fifo , count); while (count) { count--; /* empty fifo */ Read_hfc(cs, HFCSX_FIF_DRD); diff --git a/drivers/isdn/pcbit/layer2.c b/drivers/isdn/pcbit/layer2.c index a18e639b40d7..42ecfef80132 100644 --- a/drivers/isdn/pcbit/layer2.c +++ b/drivers/isdn/pcbit/layer2.c @@ -508,7 +508,7 @@ pcbit_irq_handler(int interrupt, void *devptr) return IRQ_NONE; } if (dev->interrupt) { - printk(KERN_DEBUG "pcbit: reentering interrupt hander\n"); + printk(KERN_DEBUG "pcbit: reentering interrupt handler\n"); return IRQ_HANDLED; } dev->interrupt = 1; -- cgit v1.2.3-59-g8ed1b From 55bef83cc68bda76a14a23b1076a9a9a9e43af68 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Thu, 15 Nov 2012 09:49:50 +0100 Subject: ISDN: capi, use kref from tty_port After commit "TTY: move tty buffers to tty_port", the tty buffers are not freed in some drivers. This is because tty_port_destructor is not called whenever a tty_port is freed. This was an assumption I counted with but was unfortunately untrue. So fix the drivers to fulfil this assumption. Here it is enough to switch to refcounting in tty_port. Signed-off-by: Jiri Slaby Signed-off-by: Greg Kroah-Hartman --- drivers/isdn/capi/capi.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c index c679867c2ccd..89562a845f6a 100644 --- a/drivers/isdn/capi/capi.c +++ b/drivers/isdn/capi/capi.c @@ -77,8 +77,6 @@ struct ackqueue_entry { }; struct capiminor { - struct kref kref; - unsigned int minor; struct capi20_appl *ap; @@ -190,7 +188,20 @@ static void capiminor_del_all_ack(struct capiminor *mp) /* -------- struct capiminor ---------------------------------------- */ -static const struct tty_port_operations capiminor_port_ops; /* we have none */ +static void capiminor_destroy(struct tty_port *port) +{ + struct capiminor *mp = container_of(port, struct capiminor, port); + + kfree_skb(mp->outskb); + skb_queue_purge(&mp->inqueue); + skb_queue_purge(&mp->outqueue); + capiminor_del_all_ack(mp); + kfree(mp); +} + +static const struct tty_port_operations capiminor_port_ops = { + .destruct = capiminor_destroy, +}; static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci) { @@ -204,8 +215,6 @@ static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci) return NULL; } - kref_init(&mp->kref); - mp->ap = ap; mp->ncci = ncci; INIT_LIST_HEAD(&mp->ackqueue); @@ -247,21 +256,10 @@ err_out2: spin_unlock(&capiminors_lock); err_out1: - kfree(mp); + tty_port_put(&mp->port); return NULL; } -static void capiminor_destroy(struct kref *kref) -{ - struct capiminor *mp = container_of(kref, struct capiminor, kref); - - kfree_skb(mp->outskb); - skb_queue_purge(&mp->inqueue); - skb_queue_purge(&mp->outqueue); - capiminor_del_all_ack(mp); - kfree(mp); -} - static struct capiminor *capiminor_get(unsigned int minor) { struct capiminor *mp; @@ -269,7 +267,7 @@ static struct capiminor *capiminor_get(unsigned int minor) spin_lock(&capiminors_lock); mp = capiminors[minor]; if (mp) - kref_get(&mp->kref); + tty_port_get(&mp->port); spin_unlock(&capiminors_lock); return mp; @@ -277,7 +275,7 @@ static struct capiminor *capiminor_get(unsigned int minor) static inline void capiminor_put(struct capiminor *mp) { - kref_put(&mp->kref, capiminor_destroy); + tty_port_put(&mp->port); } static void capiminor_free(struct capiminor *mp) -- cgit v1.2.3-59-g8ed1b From 191c5f10275cfbb36802edadbdb10c73537327b4 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Thu, 15 Nov 2012 09:49:56 +0100 Subject: TTY: call tty_port_destroy in the rest of drivers After commit "TTY: move tty buffers to tty_port", the tty buffers are not freed in some drivers. This is because tty_port_destructor is not called whenever a tty_port is freed. This was an assumption I counted with but was unfortunately untrue. So fix the drivers to fulfil this assumption. To be sure, the TTY buffers (and later some stuff) are gone along with the tty_port, we have to call tty_port_destroy at tear-down places. This is mostly where the structure containing a tty_port is freed. This patch does exactly that -- put tty_port_destroy at those places. Signed-off-by: Jiri Slaby Signed-off-by: Greg Kroah-Hartman --- arch/alpha/kernel/srmcons.c | 5 ++++- arch/ia64/hp/sim/simserial.c | 1 + arch/m68k/emu/nfcon.c | 6 ++++-- arch/parisc/kernel/pdc_cons.c | 5 +++-- arch/um/drivers/line.c | 2 ++ arch/xtensa/platforms/iss/console.c | 1 + drivers/char/pcmcia/synclink_cs.c | 5 ++++- drivers/char/ttyprintk.c | 4 +++- drivers/isdn/gigaset/common.c | 10 ++++++---- drivers/isdn/i4l/isdn_tty.c | 4 ++++ drivers/misc/pti.c | 7 +++++-- drivers/net/usb/hso.c | 5 +++-- drivers/s390/char/con3215.c | 1 + drivers/s390/char/sclp_tty.c | 4 +++- drivers/s390/char/sclp_vt220.c | 2 ++ drivers/s390/char/tty3270.c | 2 ++ drivers/staging/ccg/u_serial.c | 5 ++++- drivers/staging/dgrp/dgrp_specproc.c | 2 ++ drivers/staging/dgrp/dgrp_tty.c | 4 +++- drivers/staging/ipack/devices/ipoctal.c | 2 ++ drivers/tty/amiserial.c | 2 ++ drivers/tty/bfin_jtag_comm.c | 6 ++++-- drivers/tty/cyclades.c | 8 +++++--- drivers/tty/ehv_bytechan.c | 2 ++ drivers/tty/hvc/hvsi.c | 1 + drivers/tty/ipwireless/tty.c | 1 + drivers/tty/moxa.c | 4 ++++ drivers/tty/mxser.c | 25 +++++++++++++++++-------- drivers/tty/nozomi.c | 13 +++++++++---- drivers/tty/rocket.c | 2 ++ drivers/tty/serial/68328serial.c | 2 ++ drivers/tty/serial/ifx6x60.c | 5 ++++- drivers/tty/serial/kgdb_nmi.c | 2 ++ drivers/tty/serial/serial_core.c | 6 ++++++ drivers/tty/synclink.c | 1 + drivers/tty/synclink_gt.c | 5 ++++- drivers/tty/synclinkmp.c | 5 ++++- drivers/tty/vt/vt.c | 5 ++++- drivers/usb/gadget/u_serial.c | 5 ++++- drivers/usb/serial/usb-serial.c | 1 + net/irda/ircomm/ircomm_tty.c | 1 + 41 files changed, 139 insertions(+), 40 deletions(-) (limited to 'drivers/isdn') diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 5d5865204a1d..59b7bbad8394 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c @@ -205,7 +205,6 @@ static const struct tty_operations srmcons_ops = { static int __init srmcons_init(void) { - tty_port_init(&srmcons_singleton.port); setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, (unsigned long)&srmcons_singleton); if (srm_is_registered_console) { @@ -215,6 +214,9 @@ srmcons_init(void) driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); if (!driver) return -ENOMEM; + + tty_port_init(&srmcons_singleton.port); + driver->driver_name = "srm"; driver->name = "srm"; driver->major = 0; /* dynamic */ @@ -227,6 +229,7 @@ srmcons_init(void) err = tty_register_driver(driver); if (err) { put_tty_driver(driver); + tty_port_destroy(&srmcons_singleton.port); return err; } srmcons_driver = driver; diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index ec536e4e36c9..fc3924d18c1f 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c @@ -555,6 +555,7 @@ static int __init simrs_init(void) return 0; err_free_tty: put_tty_driver(hp_simserial_driver); + tty_port_destroy(&state->port); return retval; } diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c index 16d170f53bfd..6685bf45c2c3 100644 --- a/arch/m68k/emu/nfcon.c +++ b/arch/m68k/emu/nfcon.c @@ -120,8 +120,6 @@ static int __init nfcon_init(void) { int res; - tty_port_init(&nfcon_tty_port); - stderr_id = nf_get_id("NF_STDERR"); if (!stderr_id) return -ENODEV; @@ -130,6 +128,8 @@ static int __init nfcon_init(void) if (!nfcon_tty_driver) return -ENOMEM; + tty_port_init(&nfcon_tty_port); + nfcon_tty_driver->driver_name = "nfcon"; nfcon_tty_driver->name = "nfcon"; nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM; @@ -143,6 +143,7 @@ static int __init nfcon_init(void) if (res) { pr_err("failed to register nfcon tty driver\n"); put_tty_driver(nfcon_tty_driver); + tty_port_destroy(&nfcon_tty_port); return res; } @@ -157,6 +158,7 @@ static void __exit nfcon_exit(void) unregister_console(&nf_console); tty_unregister_driver(nfcon_tty_driver); put_tty_driver(nfcon_tty_driver); + tty_port_destroy(&nfcon_tty_port); } module_init(nfcon_init); diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index 88238638aee6..efc5e7d30530 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c @@ -186,13 +186,13 @@ static int __init pdc_console_tty_driver_init(void) printk(KERN_INFO "The PDC console driver is still registered, removing CON_BOOT flag\n"); pdc_cons.flags &= ~CON_BOOT; - tty_port_init(&tty_port); - pdc_console_tty_driver = alloc_tty_driver(1); if (!pdc_console_tty_driver) return -ENOMEM; + tty_port_init(&tty_port); + pdc_console_tty_driver->driver_name = "pdc_cons"; pdc_console_tty_driver->name = "ttyB"; pdc_console_tty_driver->major = MUX_MAJOR; @@ -207,6 +207,7 @@ static int __init pdc_console_tty_driver_init(void) err = tty_register_driver(pdc_console_tty_driver); if (err) { printk(KERN_ERR "Unable to register the PDC console TTY driver\n"); + tty_port_destroy(&tty_port); return err; } diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index fd9a15b318af..9ffc28bd4b7a 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -584,6 +584,8 @@ int register_lines(struct line_driver *line_driver, printk(KERN_ERR "register_lines : can't register %s driver\n", line_driver->name); put_tty_driver(driver); + for (i = 0; i < nlines; i++) + tty_port_destroy(&lines[i].port); return err; } diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 7e74895eee04..8207a119eee9 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c @@ -221,6 +221,7 @@ static __exit void rs_exit(void) printk("ISS_SERIAL: failed to unregister serial driver (%d)\n", error); put_tty_driver(serial_driver); + tty_port_destroy(&serial_port); } diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c index 21721d25e388..b66eaa04f8cb 100644 --- a/drivers/char/pcmcia/synclink_cs.c +++ b/drivers/char/pcmcia/synclink_cs.c @@ -549,8 +549,10 @@ static int mgslpc_probe(struct pcmcia_device *link) /* Initialize the struct pcmcia_device structure */ ret = mgslpc_config(link); - if (ret) + if (ret) { + tty_port_destroy(&info->port); return ret; + } mgslpc_add_device(info); @@ -2757,6 +2759,7 @@ static void mgslpc_remove_device(MGSLPC_INFO *remove_info) hdlcdev_exit(info); #endif release_resources(info); + tty_port_destroy(&info->port); kfree(info); mgslpc_device_count--; return; diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c index af98f6d6509b..4945bd3d18d0 100644 --- a/drivers/char/ttyprintk.c +++ b/drivers/char/ttyprintk.c @@ -179,7 +179,6 @@ static int __init ttyprintk_init(void) { int ret = -ENOMEM; - tty_port_init(&tpk_port.port); tpk_port.port.ops = &null_ops; mutex_init(&tpk_port.port_write_mutex); @@ -190,6 +189,8 @@ static int __init ttyprintk_init(void) if (IS_ERR(ttyprintk_driver)) return PTR_ERR(ttyprintk_driver); + tty_port_init(&tpk_port.port); + ttyprintk_driver->driver_name = "ttyprintk"; ttyprintk_driver->name = "ttyprintk"; ttyprintk_driver->major = TTYAUX_MAJOR; @@ -211,6 +212,7 @@ static int __init ttyprintk_init(void) error: tty_unregister_driver(ttyprintk_driver); put_tty_driver(ttyprintk_driver); + tty_port_destroy(&tpk_port.port); ttyprintk_driver = NULL; return ret; } diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index 30a6b174fbb0..bc9d89a8c4f6 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c @@ -518,6 +518,7 @@ f_bcs: gig_dbg(DEBUG_INIT, "freeing bcs[]"); kfree(cs->bcs); f_cs: gig_dbg(DEBUG_INIT, "freeing cs"); mutex_unlock(&cs->mutex); + tty_port_destroy(&cs->port); free_cs(cs); } EXPORT_SYMBOL_GPL(gigaset_freecs); @@ -751,14 +752,14 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "setting up iif"); if (gigaset_isdn_regdev(cs, modulename) < 0) { pr_err("error registering ISDN device\n"); - goto error; + goto error_port; } make_valid(cs, VALID_ID); ++cs->cs_init; gig_dbg(DEBUG_INIT, "setting up hw"); if (cs->ops->initcshw(cs) < 0) - goto error; + goto error_port; ++cs->cs_init; @@ -773,7 +774,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "setting up bcs[%d]", i); if (gigaset_initbcs(cs->bcs + i, cs, i) < 0) { pr_err("could not allocate channel %d data\n", i); - goto error; + goto error_port; } } @@ -786,7 +787,8 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "cs initialized"); return cs; - +error_port: + tty_port_destroy(&cs->port); error: gig_dbg(DEBUG_INIT, "failed"); gigaset_freecs(cs); diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index b817809f763c..e09dc8a5e743 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c @@ -1849,6 +1849,8 @@ err_unregister: kfree(info->fax); #endif kfree(info->port.xmit_buf - 4); + info->port.xmit_buf = NULL; + tty_port_destroy(&info->port); } tty_unregister_driver(m->tty_modem); err: @@ -1870,6 +1872,8 @@ isdn_tty_exit(void) kfree(info->fax); #endif kfree(info->port.xmit_buf - 4); + info->port.xmit_buf = NULL; + tty_port_destroy(&info->port); } tty_unregister_driver(dev->mdm.tty_modem); put_tty_driver(dev->mdm.tty_modem); diff --git a/drivers/misc/pti.c b/drivers/misc/pti.c index 4999b34b7a60..a1f0d174e687 100644 --- a/drivers/misc/pti.c +++ b/drivers/misc/pti.c @@ -882,11 +882,14 @@ err: static void __devexit pti_pci_remove(struct pci_dev *pdev) { struct pti_dev *drv_data = pci_get_drvdata(pdev); + unsigned int a; unregister_console(&pti_console); - tty_unregister_device(pti_tty_driver, 0); - tty_unregister_device(pti_tty_driver, 1); + for (a = 0; a < PTITTY_MINOR_NUM; a++) { + tty_unregister_device(pti_tty_driver, a); + tty_port_destroy(&drv_data->port[a]); + } iounmap(drv_data->pti_ioaddr); pci_set_drvdata(pdev, NULL); diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index 605a4baa9b7b..cd8ccb240f4b 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c @@ -2274,6 +2274,7 @@ static void hso_serial_common_free(struct hso_serial *serial) /* unlink and free TX URB */ usb_free_urb(serial->tx_urb); kfree(serial->tx_data); + tty_port_destroy(&serial->port); } static int hso_serial_common_create(struct hso_serial *serial, int num_urbs, @@ -2283,12 +2284,12 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs, int minor; int i; + tty_port_init(&serial->port); + minor = get_free_serial_index(); if (minor < 0) goto exit; - tty_port_init(&serial->port); - /* register our minor number */ serial->parent->dev = tty_port_register_device(&serial->port, tty_drv, minor, &serial->parent->interface->dev); diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c index 9ffb6d5f17aa..8fb014f32e4c 100644 --- a/drivers/s390/char/con3215.c +++ b/drivers/s390/char/con3215.c @@ -677,6 +677,7 @@ static void raw3215_free_info(struct raw3215_info *raw) { kfree(raw->inbuf); kfree(raw->buffer); + tty_port_destroy(&raw->port); kfree(raw); } diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c index 30ec09e3d037..877fbc37c1e7 100644 --- a/drivers/s390/char/sclp_tty.c +++ b/drivers/s390/char/sclp_tty.c @@ -547,7 +547,6 @@ sclp_tty_init(void) sclp_tty_tolower = 1; } sclp_tty_chars_count = 0; - tty_port_init(&sclp_port); rc = sclp_register(&sclp_input_event); if (rc) { @@ -555,6 +554,8 @@ sclp_tty_init(void) return rc; } + tty_port_init(&sclp_port); + driver->driver_name = "sclp_line"; driver->name = "sclp_line"; driver->major = TTY_MAJOR; @@ -571,6 +572,7 @@ sclp_tty_init(void) rc = tty_register_driver(driver); if (rc) { put_tty_driver(driver); + tty_port_destroy(&sclp_port); return rc; } sclp_tty_driver = driver; diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 7e60f3d2f3f9..effcc8756e0a 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c @@ -615,6 +615,7 @@ static void __init __sclp_vt220_cleanup(void) return; sclp_unregister(&sclp_vt220_register); __sclp_vt220_free_pages(); + tty_port_destroy(&sclp_vt220_port); } /* Allocate buffer pages and register with sclp core. Controlled by init @@ -650,6 +651,7 @@ out: if (rc) { __sclp_vt220_free_pages(); sclp_vt220_init_count--; + tty_port_destroy(&sclp_vt220_port); } return rc; } diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index 482ee028f842..43ea0593bdb0 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c @@ -722,6 +722,7 @@ out_pages: while (pages--) free_pages((unsigned long) tp->freemem_pages[pages], 0); kfree(tp->freemem_pages); + tty_port_destroy(&tp->port); out_tp: kfree(tp); out_err: @@ -744,6 +745,7 @@ tty3270_free_view(struct tty3270 *tp) for (pages = 0; pages < TTY3270_STRING_PAGES; pages++) free_pages((unsigned long) tp->freemem_pages[pages], 0); kfree(tp->freemem_pages); + tty_port_destroy(&tp->port); kfree(tp); } diff --git a/drivers/staging/ccg/u_serial.c b/drivers/staging/ccg/u_serial.c index 5b3f5fffea92..373c40656b52 100644 --- a/drivers/staging/ccg/u_serial.c +++ b/drivers/staging/ccg/u_serial.c @@ -1140,8 +1140,10 @@ int gserial_setup(struct usb_gadget *g, unsigned count) return status; fail: - while (count--) + while (count--) { + tty_port_destroy(&ports[count].port->port); kfree(ports[count].port); + } put_tty_driver(gs_tty_driver); gs_tty_driver = NULL; return status; @@ -1195,6 +1197,7 @@ void gserial_cleanup(void) WARN_ON(port->port_usb != NULL); + tty_port_destroy(&port->port); kfree(port); } n_ports = 0; diff --git a/drivers/staging/dgrp/dgrp_specproc.c b/drivers/staging/dgrp/dgrp_specproc.c index db91f676508a..c214078a89e9 100644 --- a/drivers/staging/dgrp/dgrp_specproc.c +++ b/drivers/staging/dgrp/dgrp_specproc.c @@ -752,6 +752,8 @@ static int dgrp_add_id(long id) return 0; + /* FIXME this guy should free the tty driver stored in nd and destroy + * all channel ports */ error_out: kfree(nd); return ret; diff --git a/drivers/staging/dgrp/dgrp_tty.c b/drivers/staging/dgrp/dgrp_tty.c index e125b03598d7..0db4c0514f63 100644 --- a/drivers/staging/dgrp/dgrp_tty.c +++ b/drivers/staging/dgrp/dgrp_tty.c @@ -3119,6 +3119,7 @@ static void dgrp_tty_hangup(struct tty_struct *tty) void dgrp_tty_uninit(struct nd_struct *nd) { + unsigned int i; char id[3]; ID_TO_CHAR(nd->nd_ID, id); @@ -3152,6 +3153,8 @@ dgrp_tty_uninit(struct nd_struct *nd) put_tty_driver(nd->nd_xprint_ttdriver); nd->nd_ttdriver_flags &= ~XPRINT_TTDRV_REG; } + for (i = 0; i < CHAN_MAX; i++) + tty_port_destroy(&nd->nd_chan[i].port); } @@ -3335,7 +3338,6 @@ dgrp_tty_init(struct nd_struct *nd) init_waitqueue_head(&(ch->ch_pun.un_open_wait)); init_waitqueue_head(&(ch->ch_pun.un_close_wait)); tty_port_init(&ch->port); - tty_port_init(&ch->port); } return 0; } diff --git a/drivers/staging/ipack/devices/ipoctal.c b/drivers/staging/ipack/devices/ipoctal.c index d751edfda839..729cb642840a 100644 --- a/drivers/staging/ipack/devices/ipoctal.c +++ b/drivers/staging/ipack/devices/ipoctal.c @@ -446,6 +446,7 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr, tty_dev = tty_port_register_device(&channel->tty_port, tty, i, NULL); if (IS_ERR(tty_dev)) { dev_err(&ipoctal->dev->dev, "Failed to register tty device.\n"); + tty_port_destroy(&channel->tty_port); continue; } dev_set_drvdata(tty_dev, channel); @@ -741,6 +742,7 @@ static void __ipoctal_remove(struct ipoctal *ipoctal) struct ipoctal_channel *channel = &ipoctal->channel[i]; tty_unregister_device(ipoctal->tty_drv, i); tty_port_free_xmit_buf(&channel->tty_port); + tty_port_destroy(&channel->tty_port); } tty_unregister_driver(ipoctal->tty_drv); diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c index 42d0a2581a87..9d7d00cdfecb 100644 --- a/drivers/tty/amiserial.c +++ b/drivers/tty/amiserial.c @@ -1771,6 +1771,7 @@ fail_free_irq: fail_unregister: tty_unregister_driver(serial_driver); fail_put_tty_driver: + tty_port_destroy(&state->tport); put_tty_driver(serial_driver); return error; } @@ -1785,6 +1786,7 @@ static int __exit amiga_serial_remove(struct platform_device *pdev) printk("SERIAL: failed to unregister serial driver (%d)\n", error); put_tty_driver(serial_driver); + tty_port_destroy(&state->tport); free_irq(IRQ_AMIGA_TBE, state); free_irq(IRQ_AMIGA_RBF, state); diff --git a/drivers/tty/bfin_jtag_comm.c b/drivers/tty/bfin_jtag_comm.c index 02b7d3a09696..1cfcdbf1d0cc 100644 --- a/drivers/tty/bfin_jtag_comm.c +++ b/drivers/tty/bfin_jtag_comm.c @@ -240,8 +240,6 @@ static int __init bfin_jc_init(void) { int ret; - tty_port_init(&port); - bfin_jc_kthread = kthread_create(bfin_jc_emudat_manager, NULL, DRV_NAME); if (IS_ERR(bfin_jc_kthread)) return PTR_ERR(bfin_jc_kthread); @@ -257,6 +255,8 @@ static int __init bfin_jc_init(void) if (!bfin_jc_driver) goto err_driver; + tty_port_init(&port); + bfin_jc_driver->driver_name = DRV_NAME; bfin_jc_driver->name = DEV_NAME; bfin_jc_driver->type = TTY_DRIVER_TYPE_SERIAL; @@ -274,6 +274,7 @@ static int __init bfin_jc_init(void) return 0; err: + tty_port_destroy(&port); put_tty_driver(bfin_jc_driver); err_driver: kfree(bfin_jc_write_buf.buf); @@ -289,6 +290,7 @@ static void __exit bfin_jc_exit(void) kfree(bfin_jc_write_buf.buf); tty_unregister_driver(bfin_jc_driver); put_tty_driver(bfin_jc_driver); + tty_port_destroy(&port); } module_exit(bfin_jc_exit); diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c index 0a6a0bc1b598..de25774b5ec6 100644 --- a/drivers/tty/cyclades.c +++ b/drivers/tty/cyclades.c @@ -3934,7 +3934,7 @@ err: static void __devexit cy_pci_remove(struct pci_dev *pdev) { struct cyclades_card *cinfo = pci_get_drvdata(pdev); - unsigned int i; + unsigned int i, channel; /* non-Z with old PLX */ if (!cy_is_Z(cinfo) && (readb(cinfo->base_addr + CyPLX_VER) & 0x0f) == @@ -3960,9 +3960,11 @@ static void __devexit cy_pci_remove(struct pci_dev *pdev) pci_release_regions(pdev); cinfo->base_addr = NULL; - for (i = cinfo->first_line; i < cinfo->first_line + - cinfo->nports; i++) + for (channel = 0, i = cinfo->first_line; i < cinfo->first_line + + cinfo->nports; i++, channel++) { tty_unregister_device(cy_serial_driver, i); + tty_port_destroy(&cinfo->ports[channel].port); + } cinfo->nports = 0; kfree(cinfo->ports); } diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c index 4ab936b7aac6..4193afb74a02 100644 --- a/drivers/tty/ehv_bytechan.c +++ b/drivers/tty/ehv_bytechan.c @@ -757,6 +757,7 @@ static int __devinit ehv_bc_tty_probe(struct platform_device *pdev) return 0; error: + tty_port_destroy(&bc->port); irq_dispose_mapping(bc->tx_irq); irq_dispose_mapping(bc->rx_irq); @@ -770,6 +771,7 @@ static int ehv_bc_tty_remove(struct platform_device *pdev) tty_unregister_device(ehv_bc_driver, bc - bcs); + tty_port_destroy(&bc->port); irq_dispose_mapping(bc->tx_irq); irq_dispose_mapping(bc->rx_irq); diff --git a/drivers/tty/hvc/hvsi.c b/drivers/tty/hvc/hvsi.c index 5b95b4f28cf3..68357a6e4de9 100644 --- a/drivers/tty/hvc/hvsi.c +++ b/drivers/tty/hvc/hvsi.c @@ -1218,6 +1218,7 @@ static int __init hvsi_console_init(void) if (hp->virq == 0) { printk(KERN_ERR "%s: couldn't create irq mapping for 0x%x\n", __func__, irq[0]); + tty_port_destroy(&hp->port); continue; } diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c index 160f0ad9589d..2cde13ddf9fc 100644 --- a/drivers/tty/ipwireless/tty.c +++ b/drivers/tty/ipwireless/tty.c @@ -566,6 +566,7 @@ void ipwireless_tty_free(struct ipw_tty *tty) ipwireless_disassociate_network_ttys(network, ttyj->channel_idx); tty_unregister_device(ipw_tty_driver, j); + tty_port_destroy(&ttyj->port); ttys[j] = NULL; mutex_unlock(&ttyj->ipw_tty_mutex); kfree(ttyj); diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c index 9b57aae139f6..d628176fb6d8 100644 --- a/drivers/tty/moxa.c +++ b/drivers/tty/moxa.c @@ -895,6 +895,8 @@ static int moxa_init_board(struct moxa_board_conf *brd, struct device *dev) return 0; err_free: + for (i = 0; i < MAX_PORTS_PER_BOARD; i++) + tty_port_destroy(&brd->ports[i].port); kfree(brd->ports); err: return ret; @@ -919,6 +921,8 @@ static void moxa_board_deinit(struct moxa_board_conf *brd) tty_kref_put(tty); } } + for (a = 0; a < MAX_PORTS_PER_BOARD; a++) + tty_port_destroy(&brd->ports[a].port); while (1) { opened = 0; for (a = 0; a < brd->numPorts; a++) diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c index cfda47dabd28..802a248e7ab9 100644 --- a/drivers/tty/mxser.c +++ b/drivers/tty/mxser.c @@ -2411,14 +2411,27 @@ static int __devinit mxser_initbrd(struct mxser_board *brd, retval = request_irq(brd->irq, mxser_interrupt, IRQF_SHARED, "mxser", brd); - if (retval) + if (retval) { + for (i = 0; i < brd->info->nports; i++) + tty_port_destroy(&brd->ports[i].port); printk(KERN_ERR "Board %s: Request irq failed, IRQ (%d) may " "conflict with another device.\n", brd->info->name, brd->irq); + } return retval; } +static void mxser_board_remove(struct mxser_board *brd) +{ + unsigned int i; + + for (i = 0; i < brd->info->nports; i++) { + tty_unregister_device(mxvar_sdriver, brd->idx + i); + tty_port_destroy(&brd->ports[i].port); + } +} + static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) { int id, i, bits, ret; @@ -2649,10 +2662,8 @@ static void __devexit mxser_remove(struct pci_dev *pdev) { #ifdef CONFIG_PCI struct mxser_board *brd = pci_get_drvdata(pdev); - unsigned int i; - for (i = 0; i < brd->info->nports; i++) - tty_unregister_device(mxvar_sdriver, brd->idx + i); + mxser_board_remove(brd); free_irq(pdev->irq, brd); pci_release_region(pdev, 2); @@ -2748,15 +2759,13 @@ err_put: static void __exit mxser_module_exit(void) { - unsigned int i, j; + unsigned int i; pci_unregister_driver(&mxser_driver); for (i = 0; i < MXSER_BOARDS; i++) /* ISA remains */ if (mxser_boards[i].info != NULL) - for (j = 0; j < mxser_boards[i].info->nports; j++) - tty_unregister_device(mxvar_sdriver, - mxser_boards[i].idx + j); + mxser_board_remove(&mxser_boards[i]); tty_unregister_driver(mxvar_sdriver); put_tty_driver(mxvar_sdriver); diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c index b917c9424954..cb764d297756 100644 --- a/drivers/tty/nozomi.c +++ b/drivers/tty/nozomi.c @@ -1479,6 +1479,7 @@ static int __devinit nozomi_card_init(struct pci_dev *pdev, if (IS_ERR(tty_dev)) { ret = PTR_ERR(tty_dev); dev_err(&pdev->dev, "Could not allocate tty?\n"); + tty_port_destroy(&port->port); goto err_free_tty; } } @@ -1486,8 +1487,10 @@ static int __devinit nozomi_card_init(struct pci_dev *pdev, return 0; err_free_tty: - for (i = dc->index_start; i < dc->index_start + MAX_PORT; ++i) - tty_unregister_device(ntty_driver, i); + for (i = 0; i < MAX_PORT; ++i) { + tty_unregister_device(ntty_driver, dc->index_start + i); + tty_port_destroy(&dc->port[i].port); + } err_free_kfifo: for (i = 0; i < MAX_PORT; i++) kfifo_free(&dc->port[i].fifo_ul); @@ -1520,8 +1523,10 @@ static void __devexit tty_exit(struct nozomi *dc) complete off a hangup method ? */ while (dc->open_ttys) msleep(1); - for (i = dc->index_start; i < dc->index_start + MAX_PORT; ++i) - tty_unregister_device(ntty_driver, i); + for (i = 0; i < MAX_PORT; ++i) { + tty_unregister_device(ntty_driver, dc->index_start + i); + tty_port_destroy(&dc->port[i].port); + } } /* Deallocate memory for one device */ diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c index 9700d34b20a3..d9056dac4ea1 100644 --- a/drivers/tty/rocket.c +++ b/drivers/tty/rocket.c @@ -673,6 +673,7 @@ static void init_r_port(int board, int aiop, int chan, struct pci_dev *pci_dev) if (sInitChan(ctlp, &info->channel, aiop, chan) == 0) { printk(KERN_ERR "RocketPort sInitChan(%d, %d, %d) failed!\n", board, aiop, chan); + tty_port_destroy(&info->port); kfree(info); return; } @@ -2357,6 +2358,7 @@ static void rp_cleanup_module(void) for (i = 0; i < MAX_RP_PORTS; i++) if (rp_table[i]) { tty_unregister_device(rocket_driver, i); + tty_port_destroy(&rp_table[i]->port); kfree(rp_table[i]); } diff --git a/drivers/tty/serial/68328serial.c b/drivers/tty/serial/68328serial.c index 66c38a3f74ce..f99a84526f82 100644 --- a/drivers/tty/serial/68328serial.c +++ b/drivers/tty/serial/68328serial.c @@ -1225,6 +1225,8 @@ rs68328_init(void) if (tty_register_driver(serial_driver)) { put_tty_driver(serial_driver); + for (i = 0; i < NR_PORTS; i++) + tty_port_destroy(&m68k_soft[i].tport); printk(KERN_ERR "Couldn't register serial driver\n"); return -ENOMEM; } diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c index 1754c147a94c..91125bb151cf 100644 --- a/drivers/tty/serial/ifx6x60.c +++ b/drivers/tty/serial/ifx6x60.c @@ -829,6 +829,7 @@ static void ifx_spi_free_port(struct ifx_spi_device *ifx_dev) { if (ifx_dev->tty_dev) tty_unregister_device(tty_drv, ifx_dev->minor); + tty_port_destroy(&ifx_dev->tty_port); kfifo_free(&ifx_dev->tx_fifo); } @@ -862,10 +863,12 @@ static int ifx_spi_create_port(struct ifx_spi_device *ifx_dev) dev_dbg(&ifx_dev->spi_dev->dev, "%s: registering tty device failed", __func__); ret = PTR_ERR(ifx_dev->tty_dev); - goto error_ret; + goto error_port; } return 0; +error_port: + tty_port_destroy(pport); error_ret: ifx_spi_free_port(ifx_dev); return ret; diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c index d185247ba1aa..6ac2b797a764 100644 --- a/drivers/tty/serial/kgdb_nmi.c +++ b/drivers/tty/serial/kgdb_nmi.c @@ -266,6 +266,7 @@ static int kgdb_nmi_tty_install(struct tty_driver *drv, struct tty_struct *tty) } return 0; err: + tty_port_destroy(&priv->port); kfree(priv); return ret; } @@ -275,6 +276,7 @@ static void kgdb_nmi_tty_cleanup(struct tty_struct *tty) struct kgdb_nmi_tty_priv *priv = tty->driver_data; tty->driver_data = NULL; + tty_port_destroy(&priv->port); kfree(priv); } diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index 63b33889d515..61ba24089ef7 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -2297,6 +2297,8 @@ int uart_register_driver(struct uart_driver *drv) if (retval >= 0) return retval; + for (i = 0; i < drv->nr; i++) + tty_port_destroy(&drv->state[i].port); put_tty_driver(normal); out_kfree: kfree(drv->state); @@ -2316,8 +2318,12 @@ out: void uart_unregister_driver(struct uart_driver *drv) { struct tty_driver *p = drv->tty_driver; + unsigned int i; + tty_unregister_driver(p); put_tty_driver(p); + for (i = 0; i < drv->nr; i++) + tty_port_destroy(&drv->state[i].port); kfree(drv->state); drv->state = NULL; drv->tty_driver = NULL; diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c index 70e3a525bc82..e4b5c39fc4ec 100644 --- a/drivers/tty/synclink.c +++ b/drivers/tty/synclink.c @@ -4425,6 +4425,7 @@ static void synclink_cleanup(void) mgsl_release_resources(info); tmp = info; info = info->next_device; + tty_port_destroy(&tmp->port); kfree(tmp); } diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c index b38e954eedd3..6e4c34011b7e 100644 --- a/drivers/tty/synclink_gt.c +++ b/drivers/tty/synclink_gt.c @@ -3645,8 +3645,10 @@ static void device_init(int adapter_num, struct pci_dev *pdev) for (i=0; i < port_count; ++i) { port_array[i] = alloc_dev(adapter_num, i, pdev); if (port_array[i] == NULL) { - for (--i; i >= 0; --i) + for (--i; i >= 0; --i) { + tty_port_destroy(&port_array[i]->port); kfree(port_array[i]); + } return; } } @@ -3773,6 +3775,7 @@ static void slgt_cleanup(void) release_resources(info); tmp = info; info = info->next_device; + tty_port_destroy(&tmp->port); kfree(tmp); } diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c index f17d9f3d84a2..40745beb2585 100644 --- a/drivers/tty/synclinkmp.c +++ b/drivers/tty/synclinkmp.c @@ -3843,8 +3843,10 @@ static void device_init(int adapter_num, struct pci_dev *pdev) for ( port = 0; port < SCA_MAX_PORTS; ++port ) { port_array[port] = alloc_dev(adapter_num,port,pdev); if( port_array[port] == NULL ) { - for ( --port; port >= 0; --port ) + for (--port; port >= 0; --port) { + tty_port_destroy(&port_array[port]->port); kfree(port_array[port]); + } return; } } @@ -3953,6 +3955,7 @@ static void synclinkmp_cleanup(void) } tmp = info; info = info->next_device; + tty_port_destroy(&tmp->port); kfree(tmp); } diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index f87d7e8964bf..607636b4734d 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c @@ -779,6 +779,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ con_set_default_unimap(vc); vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); if (!vc->vc_screenbuf) { + tty_port_destroy(&vc->port); kfree(vc); vc_cons[currcons].d = NULL; return -ENOMEM; @@ -999,8 +1000,10 @@ void vc_deallocate(unsigned int currcons) put_pid(vc->vt_pid); module_put(vc->vc_sw->owner); kfree(vc->vc_screenbuf); - if (currcons >= MIN_NR_CONSOLES) + if (currcons >= MIN_NR_CONSOLES) { + tty_port_destroy(&vc->port); kfree(vc); + } vc_cons[currcons].d = NULL; } } diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c index f1739526820f..d0f95482f40e 100644 --- a/drivers/usb/gadget/u_serial.c +++ b/drivers/usb/gadget/u_serial.c @@ -1145,8 +1145,10 @@ int gserial_setup(struct usb_gadget *g, unsigned count) return status; fail: - while (count--) + while (count--) { + tty_port_destroy(&ports[count].port->port); kfree(ports[count].port); + } put_tty_driver(gs_tty_driver); gs_tty_driver = NULL; return status; @@ -1200,6 +1202,7 @@ void gserial_cleanup(void) WARN_ON(port->port_usb != NULL); + tty_port_destroy(&port->port); kfree(port); } n_ports = 0; diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 73b8e0569164..64bda135ba7e 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -597,6 +597,7 @@ static void port_release(struct device *dev) kfifo_free(&port->write_fifo); kfree(port->interrupt_in_buffer); kfree(port->interrupt_out_buffer); + tty_port_destroy(&port->port); kfree(port); } diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c index 496ce2cebcd7..a68c88cdec6e 100644 --- a/net/irda/ircomm/ircomm_tty.c +++ b/net/irda/ircomm/ircomm_tty.c @@ -183,6 +183,7 @@ static void __exit __ircomm_tty_cleanup(struct ircomm_tty_cb *self) ircomm_tty_shutdown(self); self->magic = 0; + tty_port_destroy(&self->port); kfree(self); } -- cgit v1.2.3-59-g8ed1b From 1862c14e107a5a21402852b0256b3c87bc1a5b00 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Mon, 19 Nov 2012 20:11:42 +0100 Subject: TTY: isdn/gigaset destroy tty_port properly Currently, the port may be destroyed twice or destroyed without being initialized. Fix this by sticking the destroy call in the right place as suggested by Tilman. Signed-off-by: Jiri Slaby Reported-by: Tilman Schmidt Cc: Hansjoerg Lipp Cc: gigaset307x-common@lists.sourceforge.net Signed-off-by: Greg Kroah-Hartman --- drivers/isdn/gigaset/common.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/gigaset/common.c b/drivers/isdn/gigaset/common.c index bc9d89a8c4f6..6849a11a1b24 100644 --- a/drivers/isdn/gigaset/common.c +++ b/drivers/isdn/gigaset/common.c @@ -507,6 +507,7 @@ void gigaset_freecs(struct cardstate *cs) gig_dbg(DEBUG_INIT, "clearing at_state"); clear_at_state(&cs->at_state); dealloc_temp_at_states(cs); + tty_port_destroy(&cs->port); /* fall through */ case 0: /* error in basic setup */ @@ -518,7 +519,6 @@ f_bcs: gig_dbg(DEBUG_INIT, "freeing bcs[]"); kfree(cs->bcs); f_cs: gig_dbg(DEBUG_INIT, "freeing cs"); mutex_unlock(&cs->mutex); - tty_port_destroy(&cs->port); free_cs(cs); } EXPORT_SYMBOL_GPL(gigaset_freecs); @@ -752,14 +752,14 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "setting up iif"); if (gigaset_isdn_regdev(cs, modulename) < 0) { pr_err("error registering ISDN device\n"); - goto error_port; + goto error; } make_valid(cs, VALID_ID); ++cs->cs_init; gig_dbg(DEBUG_INIT, "setting up hw"); if (cs->ops->initcshw(cs) < 0) - goto error_port; + goto error; ++cs->cs_init; @@ -774,7 +774,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "setting up bcs[%d]", i); if (gigaset_initbcs(cs->bcs + i, cs, i) < 0) { pr_err("could not allocate channel %d data\n", i); - goto error_port; + goto error; } } @@ -787,8 +787,7 @@ struct cardstate *gigaset_initcs(struct gigaset_driver *drv, int channels, gig_dbg(DEBUG_INIT, "cs initialized"); return cs; -error_port: - tty_port_destroy(&cs->port); + error: gig_dbg(DEBUG_INIT, "failed"); gigaset_freecs(cs); -- cgit v1.2.3-59-g8ed1b From 481af03bfbc1e07954310689831ad2695b7c6a44 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Thu, 29 Nov 2012 01:27:45 +0000 Subject: mISDN: improve bitops usage This improves bitops usages in several points: - Convert u64 to a proper bitmap declaration. This enables to remove superfluous typecasting from 'u64' to 'unsigned long *'. - Convert superfluous atomic bitops to non atomic bitops. The bitmap is allocated on the stack and it is not accessed by any other threads, so using atomic bitops is not necessary. - Use find_next_zero_bit and find_next_zero_bit instead of calling test_bit() for each bit. Signed-off-by: Akinobu Mita Cc: Karsten Keil Cc: netdev@vger.kernel.org Signed-off-by: David S. Miller --- drivers/isdn/mISDN/tei.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/mISDN/tei.c b/drivers/isdn/mISDN/tei.c index be88728f1106..592f597d8951 100644 --- a/drivers/isdn/mISDN/tei.c +++ b/drivers/isdn/mISDN/tei.c @@ -250,7 +250,7 @@ tei_debug(struct FsmInst *fi, char *fmt, ...) static int get_free_id(struct manager *mgr) { - u64 ids = 0; + DECLARE_BITMAP(ids, 64) = { [0 ... BITS_TO_LONGS(64) - 1] = 0 }; int i; struct layer2 *l2; @@ -261,11 +261,11 @@ get_free_id(struct manager *mgr) __func__); return -EBUSY; } - test_and_set_bit(l2->ch.nr, (u_long *)&ids); + __set_bit(l2->ch.nr, ids); } - for (i = 1; i < 64; i++) - if (!test_bit(i, (u_long *)&ids)) - return i; + i = find_next_zero_bit(ids, 64, 1); + if (i < 64) + return i; printk(KERN_WARNING "%s: more as 63 layer2 for one device\n", __func__); return -EBUSY; @@ -274,7 +274,7 @@ get_free_id(struct manager *mgr) static int get_free_tei(struct manager *mgr) { - u64 ids = 0; + DECLARE_BITMAP(ids, 64) = { [0 ... BITS_TO_LONGS(64) - 1] = 0 }; int i; struct layer2 *l2; @@ -288,11 +288,11 @@ get_free_tei(struct manager *mgr) continue; i -= 64; - test_and_set_bit(i, (u_long *)&ids); + __set_bit(i, ids); } - for (i = 0; i < 64; i++) - if (!test_bit(i, (u_long *)&ids)) - return i + 64; + i = find_first_zero_bit(ids, 64); + if (i < 64) + return i + 64; printk(KERN_WARNING "%s: more as 63 dynamic tei for one device\n", __func__); return -1; -- cgit v1.2.3-59-g8ed1b From 4a0ae7b0a9e55db9b85f8abda623f145311eb951 Mon Sep 17 00:00:00 2001 From: Konstantin Khlebnikov Date: Fri, 14 Dec 2012 01:02:36 +0000 Subject: mISDN: fix race in timer canceling on module unloading Using timer_pending() without additional syncronization is racy, del_timer_sync() must be used here for waiting in-flight handler. Bug caught with help from "debug-objects" during random insmod/rmmod. Signed-off-by: Konstantin Khlebnikov Cc: Karsten Keil Cc: David S. Miller Cc: netdev Signed-off-by: David S. Miller --- drivers/isdn/mISDN/dsp_core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/mISDN/dsp_core.c b/drivers/isdn/mISDN/dsp_core.c index 28c99c623bcd..22b720ec80cb 100644 --- a/drivers/isdn/mISDN/dsp_core.c +++ b/drivers/isdn/mISDN/dsp_core.c @@ -1217,8 +1217,7 @@ static void __exit dsp_cleanup(void) { mISDN_unregister_Bprotocol(&DSP); - if (timer_pending(&dsp_spl_tl)) - del_timer(&dsp_spl_tl); + del_timer_sync(&dsp_spl_tl); if (!list_empty(&dsp_ilist)) { printk(KERN_ERR "mISDN_dsp: Audio DSP object inst list not " -- cgit v1.2.3-59-g8ed1b From ed5a84cdf593e54969518e82762786fbe1284ce4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 21 Dec 2012 13:13:05 -0800 Subject: Drivers: isdn: remove __dev* attributes. CONFIG_HOTPLUG is going away as an option. As a result, the __dev* markings need to be removed. This change removes the use of __devinit, __devexit_p, __devinitdata, and __devexit from these drivers. Based on patches originally written by Bill Pemberton, but redone by me in order to handle some of the coding style issues better, by hand. Cc: Bill Pemberton Cc: Karsten Keil Signed-off-by: Greg Kroah-Hartman --- drivers/isdn/hardware/avm/b1pci.c | 8 ++++---- drivers/isdn/hardware/avm/c4.c | 3 +-- drivers/isdn/hardware/avm/t1pci.c | 3 +-- drivers/isdn/hardware/eicon/divasmain.c | 9 ++++----- drivers/isdn/hardware/mISDN/avmfritz.c | 10 +++++----- drivers/isdn/hardware/mISDN/hfcmulti.c | 6 +++--- drivers/isdn/hardware/mISDN/hfcpci.c | 6 +++--- drivers/isdn/hardware/mISDN/mISDNinfineon.c | 16 +++++++-------- drivers/isdn/hardware/mISDN/netjet.c | 10 +++++----- drivers/isdn/hardware/mISDN/speedfax.c | 14 ++++++------- drivers/isdn/hardware/mISDN/w6692.c | 6 +++--- drivers/isdn/hisax/amd7930_fn.c | 3 +-- drivers/isdn/hisax/asuscom.c | 9 ++++----- drivers/isdn/hisax/avm_a1.c | 3 +-- drivers/isdn/hisax/avm_a1p.c | 2 +- drivers/isdn/hisax/avm_pci.c | 17 ++++++++-------- drivers/isdn/hisax/avma1_cs.c | 12 +++++------ drivers/isdn/hisax/bkm_a4t.c | 16 ++++++--------- drivers/isdn/hisax/bkm_a8.c | 18 ++++++++--------- drivers/isdn/hisax/config.c | 26 +++++++++--------------- drivers/isdn/hisax/diva.c | 31 ++++++++++++++--------------- drivers/isdn/hisax/elsa.c | 31 +++++++++++------------------ drivers/isdn/hisax/elsa_cs.c | 12 +++++------ drivers/isdn/hisax/enternow_pci.c | 14 +++++-------- drivers/isdn/hisax/gazel.c | 11 ++++------ drivers/isdn/hisax/hfc4s8s_l1.c | 16 ++++----------- drivers/isdn/hisax/hfc_pci.c | 4 ++-- drivers/isdn/hisax/hfc_sx.c | 9 ++++----- drivers/isdn/hisax/hfcscard.c | 9 ++++----- drivers/isdn/hisax/hisax_fcpcipnp.c | 22 ++++++++++---------- drivers/isdn/hisax/icc.c | 3 +-- drivers/isdn/hisax/isac.c | 7 +++---- drivers/isdn/hisax/isurf.c | 5 ++--- drivers/isdn/hisax/ix1_micro.c | 9 ++++----- drivers/isdn/hisax/mic.c | 3 +-- drivers/isdn/hisax/niccy.c | 6 +++--- drivers/isdn/hisax/nj_s.c | 14 +++++-------- drivers/isdn/hisax/nj_u.c | 14 +++++-------- drivers/isdn/hisax/s0box.c | 3 +-- drivers/isdn/hisax/saphir.c | 3 +-- drivers/isdn/hisax/sedlbauer.c | 23 +++++++++------------ drivers/isdn/hisax/sedlbauer_cs.c | 12 +++++------ drivers/isdn/hisax/sportster.c | 6 ++---- drivers/isdn/hisax/teleint.c | 3 +-- drivers/isdn/hisax/teles0.c | 3 +-- drivers/isdn/hisax/teles3.c | 9 ++++----- drivers/isdn/hisax/teles_cs.c | 12 +++++------ drivers/isdn/hisax/telespci.c | 5 ++--- drivers/isdn/hisax/w6692.c | 5 ++--- drivers/isdn/hysdn/hysdn_init.c | 8 ++++---- drivers/isdn/mISDN/core.c | 4 ---- 51 files changed, 217 insertions(+), 296 deletions(-) (limited to 'drivers/isdn') diff --git a/drivers/isdn/hardware/avm/b1pci.c b/drivers/isdn/hardware/avm/b1pci.c index b305e6b2b8ee..ac4863c2ecbc 100644 --- a/drivers/isdn/hardware/avm/b1pci.c +++ b/drivers/isdn/hardware/avm/b1pci.c @@ -299,8 +299,8 @@ static void b1pciv4_remove(struct pci_dev *pdev) #endif /* CONFIG_ISDN_DRV_AVMB1_B1PCIV4 */ -static int __devinit b1pci_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int b1pci_pci_probe(struct pci_dev *pdev, + const struct pci_device_id *ent) { struct capicardparams param; int retval; @@ -344,7 +344,7 @@ static int __devinit b1pci_pci_probe(struct pci_dev *pdev, return retval; } -static void __devexit b1pci_pci_remove(struct pci_dev *pdev) +static void b1pci_pci_remove(struct pci_dev *pdev) { #ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4 avmcard *card = pci_get_drvdata(pdev); @@ -362,7 +362,7 @@ static struct pci_driver b1pci_pci_driver = { .name = "b1pci", .id_table = b1pci_pci_tbl, .probe = b1pci_pci_probe, - .remove = __devexit_p(b1pci_pci_remove), + .remove = b1pci_pci_remove, }; static struct capi_driver capi_driver_b1pci = { diff --git a/drivers/isdn/hardware/avm/c4.c b/drivers/isdn/hardware/avm/c4.c index 98f18812441d..1d7fc44e3eef 100644 --- a/drivers/isdn/hardware/avm/c4.c +++ b/drivers/isdn/hardware/avm/c4.c @@ -1249,8 +1249,7 @@ err: /* ------------------------------------------------------------- */ -static int __devinit c4_probe(struct pci_dev *dev, - const struct pci_device_id *ent) +static int c4_probe(struct pci_dev *dev, const struct pci_device_id *ent) { int nr = ent->driver_data; int retval = 0; diff --git a/drivers/isdn/hardware/avm/t1pci.c b/drivers/isdn/hardware/avm/t1pci.c index cb9a30427bd2..2180b1685691 100644 --- a/drivers/isdn/hardware/avm/t1pci.c +++ b/drivers/isdn/hardware/avm/t1pci.c @@ -187,8 +187,7 @@ static char *t1pci_procinfo(struct capi_ctr *ctrl) /* ------------------------------------------------------------- */ -static int __devinit t1pci_probe(struct pci_dev *dev, - const struct pci_device_id *ent) +static int t1pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) { struct capicardparams param; int retval; diff --git a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c index ca6d276bb256..52377b4bf039 100644 --- a/drivers/isdn/hardware/eicon/divasmain.c +++ b/drivers/isdn/hardware/eicon/divasmain.c @@ -150,12 +150,12 @@ MODULE_DEVICE_TABLE(pci, divas_pci_tbl); static int divas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); -static void __devexit divas_remove_one(struct pci_dev *pdev); +static void divas_remove_one(struct pci_dev *pdev); static struct pci_driver diva_pci_driver = { .name = "divas", .probe = divas_init_one, - .remove = __devexit_p(divas_remove_one), + .remove = divas_remove_one, .id_table = divas_pci_tbl, }; @@ -688,8 +688,7 @@ static int __init divas_register_chrdev(void) /* -------------------------------------------------------------------------- PCI driver section -------------------------------------------------------------------------- */ -static int __devinit divas_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int divas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { void *pdiva = NULL; u8 pci_latency; @@ -749,7 +748,7 @@ static int __devinit divas_init_one(struct pci_dev *pdev, return (0); } -static void __devexit divas_remove_one(struct pci_dev *pdev) +static void divas_remove_one(struct pci_dev *pdev) { void *pdiva = pci_get_drvdata(pdev); diff --git a/drivers/isdn/hardware/mISDN/avmfritz.c b/drivers/isdn/hardware/mISDN/avmfritz.c index dceaec821b0e..292991c90c02 100644 --- a/drivers/isdn/hardware/mISDN/avmfritz.c +++ b/drivers/isdn/hardware/mISDN/avmfritz.c @@ -1034,7 +1034,7 @@ release_card(struct fritzcard *card) AVM_cnt--; } -static int __devinit +static int setup_instance(struct fritzcard *card) { int i, err; @@ -1096,7 +1096,7 @@ error: return err; } -static int __devinit +static int fritzpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -1130,7 +1130,7 @@ fritzpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void __devexit +static void fritz_remove_pci(struct pci_dev *pdev) { struct fritzcard *card = pci_get_drvdata(pdev); @@ -1142,7 +1142,7 @@ fritz_remove_pci(struct pci_dev *pdev) pr_info("%s: drvdata already removed\n", __func__); } -static struct pci_device_id fcpci_ids[] __devinitdata = { +static struct pci_device_id fcpci_ids[] = { { PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (unsigned long) "Fritz!Card PCI"}, { PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_A1_V2, PCI_ANY_ID, PCI_ANY_ID, @@ -1154,7 +1154,7 @@ MODULE_DEVICE_TABLE(pci, fcpci_ids); static struct pci_driver fcpci_driver = { .name = "fcpci", .probe = fritzpci_probe, - .remove = __devexit_p(fritz_remove_pci), + .remove = fritz_remove_pci, .id_table = fcpci_ids, }; diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index f02794203bb1..28543d795188 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c @@ -5274,7 +5274,7 @@ free_card: return ret_err; } -static void __devexit hfc_remove_pci(struct pci_dev *pdev) +static void hfc_remove_pci(struct pci_dev *pdev) { struct hfc_multi *card = pci_get_drvdata(pdev); u_long flags; @@ -5351,7 +5351,7 @@ static const struct hm_map hfcm_map[] = { #undef H #define H(x) ((unsigned long)&hfcm_map[x]) -static struct pci_device_id hfmultipci_ids[] __devinitdata = { +static struct pci_device_id hfmultipci_ids[] = { /* Cards with HFC-4S Chip */ { PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_HFC4S, PCI_VENDOR_ID_CCD, @@ -5472,7 +5472,7 @@ hfcmulti_probe(struct pci_dev *pdev, const struct pci_device_id *ent) static struct pci_driver hfcmultipci_driver = { .name = "hfc_multi", .probe = hfcmulti_probe, - .remove = __devexit_p(hfc_remove_pci), + .remove = hfc_remove_pci, .id_table = hfmultipci_ids, }; diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c index 6e99d73563b8..a7e4939787c9 100644 --- a/drivers/isdn/hardware/mISDN/hfcpci.c +++ b/drivers/isdn/hardware/mISDN/hfcpci.c @@ -2215,7 +2215,7 @@ static struct pci_device_id hfc_ids[] = {}, }; -static int __devinit +static int hfc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -2246,7 +2246,7 @@ hfc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void __devexit +static void hfc_remove_pci(struct pci_dev *pdev) { struct hfc_pci *card = pci_get_drvdata(pdev); @@ -2263,7 +2263,7 @@ hfc_remove_pci(struct pci_dev *pdev) static struct pci_driver hfc_driver = { .name = "hfcpci", .probe = hfc_probe, - .remove = __devexit_p(hfc_remove_pci), + .remove = hfc_remove_pci, .id_table = hfc_ids, }; diff --git a/drivers/isdn/hardware/mISDN/mISDNinfineon.c b/drivers/isdn/hardware/mISDN/mISDNinfineon.c index 631eb3fa63cf..c1493f4162fb 100644 --- a/drivers/isdn/hardware/mISDN/mISDNinfineon.c +++ b/drivers/isdn/hardware/mISDN/mISDNinfineon.c @@ -125,7 +125,7 @@ struct inf_hw { #define PCI_SUBVENDOR_SEDLBAUER_PCI 0x53 #define PCI_SUB_ID_SEDLBAUER 0x01 -static struct pci_device_id infineon_ids[] __devinitdata = { +static struct pci_device_id infineon_ids[] = { { PCI_VDEVICE(EICON, PCI_DEVICE_ID_EICON_DIVA20), INF_DIVA20 }, { PCI_VDEVICE(EICON, PCI_DEVICE_ID_EICON_DIVA20_U), INF_DIVA20U }, { PCI_VDEVICE(EICON, PCI_DEVICE_ID_EICON_DIVA201), INF_DIVA201 }, @@ -603,7 +603,7 @@ inf_ctrl(struct inf_hw *hw, u32 cmd, u_long arg) return ret; } -static int __devinit +static int init_irq(struct inf_hw *hw) { int ret, cnt = 3; @@ -662,7 +662,7 @@ release_io(struct inf_hw *hw) } } -static int __devinit +static int setup_io(struct inf_hw *hw) { int err = 0; @@ -896,7 +896,7 @@ release_card(struct inf_hw *card) { inf_cnt--; } -static int __devinit +static int setup_instance(struct inf_hw *card) { int err; @@ -1060,7 +1060,7 @@ static const struct inf_cinfo inf_card_info[] = { } }; -static const struct inf_cinfo * __devinit +static const struct inf_cinfo * get_card_info(enum inf_types typ) { const struct inf_cinfo *ci = inf_card_info; @@ -1073,7 +1073,7 @@ get_card_info(enum inf_types typ) return NULL; } -static int __devinit +static int inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -1135,7 +1135,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void __devexit +static void inf_remove(struct pci_dev *pdev) { struct inf_hw *card = pci_get_drvdata(pdev); @@ -1149,7 +1149,7 @@ inf_remove(struct pci_dev *pdev) static struct pci_driver infineon_driver = { .name = "ISDN Infineon pci", .probe = inf_probe, - .remove = __devexit_p(inf_remove), + .remove = inf_remove, .id_table = infineon_ids, }; diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c index 9bcade59eb73..8e2944784e00 100644 --- a/drivers/isdn/hardware/mISDN/netjet.c +++ b/drivers/isdn/hardware/mISDN/netjet.c @@ -1008,7 +1008,7 @@ nj_setup(struct tiger_hw *card) } -static int __devinit +static int setup_instance(struct tiger_hw *card) { int i, err; @@ -1059,7 +1059,7 @@ error: return err; } -static int __devinit +static int nj_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -1124,7 +1124,7 @@ nj_probe(struct pci_dev *pdev, const struct pci_device_id *ent) } -static void __devexit nj_remove(struct pci_dev *pdev) +static void nj_remove(struct pci_dev *pdev) { struct tiger_hw *card = pci_get_drvdata(pdev); @@ -1137,7 +1137,7 @@ static void __devexit nj_remove(struct pci_dev *pdev) /* We cannot select cards with PCI_SUB... IDs, since here are cards with * SUB IDs set to PCI_ANY_ID, so we need to match all and reject * known other cards which not work with this driver - see probe function */ -static struct pci_device_id nj_pci_ids[] __devinitdata = { +static struct pci_device_id nj_pci_ids[] = { { PCI_VENDOR_ID_TIGERJET, PCI_DEVICE_ID_TIGERJET_300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { } @@ -1147,7 +1147,7 @@ MODULE_DEVICE_TABLE(pci, nj_pci_ids); static struct pci_driver nj_driver = { .name = "netjet", .probe = nj_probe, - .remove = __devexit_p(nj_remove), + .remove = nj_remove, .id_table = nj_pci_ids, }; diff --git a/drivers/isdn/hardware/mISDN/speedfax.c b/drivers/isdn/hardware/mISDN/speedfax.c index 93f344d74e54..9815bb4eec9c 100644 --- a/drivers/isdn/hardware/mISDN/speedfax.c +++ b/drivers/isdn/hardware/mISDN/speedfax.c @@ -282,7 +282,7 @@ sfax_dctrl(struct mISDNchannel *ch, u32 cmd, void *arg) return err; } -static int __devinit +static int init_card(struct sfax_hw *sf) { int ret, cnt = 3; @@ -321,7 +321,7 @@ init_card(struct sfax_hw *sf) } -static int __devinit +static int setup_speedfax(struct sfax_hw *sf) { u_long flags; @@ -371,7 +371,7 @@ release_card(struct sfax_hw *card) { sfax_cnt--; } -static int __devinit +static int setup_instance(struct sfax_hw *card) { const struct firmware *firmware; @@ -451,7 +451,7 @@ error_fw: return err; } -static int __devinit +static int sfaxpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -480,7 +480,7 @@ sfaxpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void __devexit +static void sfax_remove_pci(struct pci_dev *pdev) { struct sfax_hw *card = pci_get_drvdata(pdev); @@ -491,7 +491,7 @@ sfax_remove_pci(struct pci_dev *pdev) pr_debug("%s: drvdata already removed\n", __func__); } -static struct pci_device_id sfaxpci_ids[] __devinitdata = { +static struct pci_device_id sfaxpci_ids[] = { { PCI_VENDOR_ID_TIGERJET, PCI_DEVICE_ID_TIGERJET_100, PCI_SUBVENDOR_SPEEDFAX_PYRAMID, PCI_SUB_ID_SEDLBAUER, 0, 0, (unsigned long) "Pyramid Speedfax + PCI" @@ -507,7 +507,7 @@ MODULE_DEVICE_TABLE(pci, sfaxpci_ids); static struct pci_driver sfaxpci_driver = { .name = "speedfax+ pci", .probe = sfaxpci_probe, - .remove = __devexit_p(sfax_remove_pci), + .remove = sfax_remove_pci, .id_table = sfaxpci_ids, }; diff --git a/drivers/isdn/hardware/mISDN/w6692.c b/drivers/isdn/hardware/mISDN/w6692.c index 335fe6455002..de69f6828c76 100644 --- a/drivers/isdn/hardware/mISDN/w6692.c +++ b/drivers/isdn/hardware/mISDN/w6692.c @@ -1355,7 +1355,7 @@ error_setup: return err; } -static int __devinit +static int w6692_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -1387,7 +1387,7 @@ w6692_probe(struct pci_dev *pdev, const struct pci_device_id *ent) return err; } -static void __devexit +static void w6692_remove_pci(struct pci_dev *pdev) { struct w6692_hw *card = pci_get_drvdata(pdev); @@ -1414,7 +1414,7 @@ MODULE_DEVICE_TABLE(pci, w6692_ids); static struct pci_driver w6692_driver = { .name = "w6692", .probe = w6692_probe, - .remove = __devexit_p(w6692_remove_pci), + .remove = w6692_remove_pci, .id_table = w6692_ids, }; diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c index 525471e776a7..1063babe1d3a 100644 --- a/drivers/isdn/hisax/amd7930_fn.c +++ b/drivers/isdn/hisax/amd7930_fn.c @@ -786,8 +786,7 @@ void Amd7930_init(struct IsdnCardState *cs) } } -void __devinit -setup_Amd7930(struct IsdnCardState *cs) +void setup_Amd7930(struct IsdnCardState *cs) { INIT_WORK(&cs->tqueue, Amd7930_bh); cs->dbusytimer.function = (void *) dbusy_timer_handler; diff --git a/drivers/isdn/hisax/asuscom.c b/drivers/isdn/hisax/asuscom.c index 2b74a40ad2a0..62f9c43e2377 100644 --- a/drivers/isdn/hisax/asuscom.c +++ b/drivers/isdn/hisax/asuscom.c @@ -295,7 +295,7 @@ Asus_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct isapnp_device_id asus_ids[] __devinitdata = { +static struct isapnp_device_id asus_ids[] = { { ISAPNP_VENDOR('A', 'S', 'U'), ISAPNP_FUNCTION(0x1688), ISAPNP_VENDOR('A', 'S', 'U'), ISAPNP_FUNCTION(0x1688), (unsigned long) "Asus1688 PnP" }, @@ -311,12 +311,11 @@ static struct isapnp_device_id asus_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &asus_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &asus_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_asuscom(struct IsdnCard *card) +int setup_asuscom(struct IsdnCard *card) { int bytecnt; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/avm_a1.c b/drivers/isdn/hisax/avm_a1.c index 402d489cbbf1..7dd74087ad72 100644 --- a/drivers/isdn/hisax/avm_a1.c +++ b/drivers/isdn/hisax/avm_a1.c @@ -177,8 +177,7 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -int __devinit -setup_avm_a1(struct IsdnCard *card) +int setup_avm_a1(struct IsdnCard *card) { u_char val; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/avm_a1p.c b/drivers/isdn/hisax/avm_a1p.c index 39347198d643..bc52d54ff5e1 100644 --- a/drivers/isdn/hisax/avm_a1p.c +++ b/drivers/isdn/hisax/avm_a1p.c @@ -213,7 +213,7 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) return 0; } -int __devinit setup_avm_a1_pcmcia(struct IsdnCard *card) +int setup_avm_a1_pcmcia(struct IsdnCard *card) { u_char model, vers; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/avm_pci.c b/drivers/isdn/hisax/avm_pci.c index 979492d69dae..ee9b9a03cffa 100644 --- a/drivers/isdn/hisax/avm_pci.c +++ b/drivers/isdn/hisax/avm_pci.c @@ -718,7 +718,7 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit avm_setup_rest(struct IsdnCardState *cs) +static int avm_setup_rest(struct IsdnCardState *cs) { u_int val, ver; @@ -770,16 +770,16 @@ static int __devinit avm_setup_rest(struct IsdnCardState *cs) #ifndef __ISAPNP__ -static int __devinit avm_pnp_setup(struct IsdnCardState *cs) +static int avm_pnp_setup(struct IsdnCardState *cs) { return (1); /* no-op: success */ } #else -static struct pnp_card *pnp_avm_c __devinitdata = NULL; +static struct pnp_card *pnp_avm_c = NULL; -static int __devinit avm_pnp_setup(struct IsdnCardState *cs) +static int avm_pnp_setup(struct IsdnCardState *cs) { struct pnp_dev *pnp_avm_d = NULL; @@ -825,16 +825,16 @@ static int __devinit avm_pnp_setup(struct IsdnCardState *cs) #ifndef CONFIG_PCI -static int __devinit avm_pci_setup(struct IsdnCardState *cs) +static int avm_pci_setup(struct IsdnCardState *cs) { return (1); /* no-op: success */ } #else -static struct pci_dev *dev_avm __devinitdata = NULL; +static struct pci_dev *dev_avm = NULL; -static int __devinit avm_pci_setup(struct IsdnCardState *cs) +static int avm_pci_setup(struct IsdnCardState *cs) { if ((dev_avm = hisax_find_pci_device(PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_A1, dev_avm))) { @@ -867,8 +867,7 @@ static int __devinit avm_pci_setup(struct IsdnCardState *cs) #endif /* CONFIG_PCI */ -int __devinit -setup_avm_pcipnp(struct IsdnCard *card) +int setup_avm_pcipnp(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c index c644557ae614..4e676bcf8506 100644 --- a/drivers/isdn/hisax/avma1_cs.c +++ b/drivers/isdn/hisax/avma1_cs.c @@ -38,11 +38,11 @@ module_param(isdnprot, int, 0); /*====================================================================*/ -static int avma1cs_config(struct pcmcia_device *link) __devinit; +static int avma1cs_config(struct pcmcia_device *link); static void avma1cs_release(struct pcmcia_device *link); -static void avma1cs_detach(struct pcmcia_device *p_dev) __devexit; +static void avma1cs_detach(struct pcmcia_device *p_dev); -static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) +static int avma1cs_probe(struct pcmcia_device *p_dev) { dev_dbg(&p_dev->dev, "avma1cs_attach()\n"); @@ -54,7 +54,7 @@ static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) return avma1cs_config(p_dev); } /* avma1cs_attach */ -static void __devexit avma1cs_detach(struct pcmcia_device *link) +static void avma1cs_detach(struct pcmcia_device *link) { dev_dbg(&link->dev, "avma1cs_detach(0x%p)\n", link); avma1cs_release(link); @@ -72,7 +72,7 @@ static int avma1cs_configcheck(struct pcmcia_device *p_dev, void *priv_data) } -static int __devinit avma1cs_config(struct pcmcia_device *link) +static int avma1cs_config(struct pcmcia_device *link) { int i = -1; char devname[128]; @@ -156,7 +156,7 @@ static struct pcmcia_driver avma1cs_driver = { .owner = THIS_MODULE, .name = "avma1_cs", .probe = avma1cs_probe, - .remove = __devexit_p(avma1cs_detach), + .remove = avma1cs_detach, .id_table = avma1cs_ids, }; diff --git a/drivers/isdn/hisax/bkm_a4t.c b/drivers/isdn/hisax/bkm_a4t.c index f6bf9c68892e..c360164bde1b 100644 --- a/drivers/isdn/hisax/bkm_a4t.c +++ b/drivers/isdn/hisax/bkm_a4t.c @@ -253,10 +253,8 @@ BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit a4t_pci_probe(struct pci_dev *dev_a4t, - struct IsdnCardState *cs, - u_int *found, - u_int *pci_memaddr) +static int a4t_pci_probe(struct pci_dev *dev_a4t, struct IsdnCardState *cs, + u_int *found, u_int *pci_memaddr) { u16 sub_sys; u16 sub_vendor; @@ -275,9 +273,8 @@ static int __devinit a4t_pci_probe(struct pci_dev *dev_a4t, return (-1); /* continue looping */ } -static int __devinit a4t_cs_init(struct IsdnCard *card, - struct IsdnCardState *cs, - u_int pci_memaddr) +static int a4t_cs_init(struct IsdnCard *card, struct IsdnCardState *cs, + u_int pci_memaddr) { I20_REGISTER_FILE *pI20_Regs; @@ -323,10 +320,9 @@ static int __devinit a4t_cs_init(struct IsdnCard *card, return (1); } -static struct pci_dev *dev_a4t __devinitdata = NULL; +static struct pci_dev *dev_a4t = NULL; -int __devinit -setup_bkm_a4t(struct IsdnCard *card) +int setup_bkm_a4t(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/bkm_a8.c b/drivers/isdn/hisax/bkm_a8.c index c9c98f071af6..dd663ea57ec6 100644 --- a/drivers/isdn/hisax/bkm_a8.c +++ b/drivers/isdn/hisax/bkm_a8.c @@ -255,8 +255,7 @@ BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit -sct_alloc_io(u_int adr, u_int len) +static int sct_alloc_io(u_int adr, u_int len) { if (!request_region(adr, len, "scitel")) { printk(KERN_WARNING @@ -267,15 +266,14 @@ sct_alloc_io(u_int adr, u_int len) return (0); } -static struct pci_dev *dev_a8 __devinitdata = NULL; -static u16 sub_vendor_id __devinitdata = 0; -static u16 sub_sys_id __devinitdata = 0; -static u_char pci_bus __devinitdata = 0; -static u_char pci_device_fn __devinitdata = 0; -static u_char pci_irq __devinitdata = 0; +static struct pci_dev *dev_a8 = NULL; +static u16 sub_vendor_id = 0; +static u16 sub_sys_id = 0; +static u_char pci_bus = 0; +static u_char pci_device_fn = 0; +static u_char pci_irq = 0; -int __devinit -setup_sct_quadro(struct IsdnCard *card) +int setup_sct_quadro(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c index b5edc0eeec06..bf04d2a3cf4a 100644 --- a/drivers/isdn/hisax/config.c +++ b/drivers/isdn/hisax/config.c @@ -338,11 +338,11 @@ static int io[HISAX_MAX_CARDS] = { 0, }; #define IO0_IO1 #endif #ifdef IO0_IO1 -static int io0[HISAX_MAX_CARDS] __devinitdata = { 0, }; -static int io1[HISAX_MAX_CARDS] __devinitdata = { 0, }; +static int io0[HISAX_MAX_CARDS] = { 0, }; +static int io1[HISAX_MAX_CARDS] = { 0, }; #endif -static int irq[HISAX_MAX_CARDS] __devinitdata = { 0, }; -static int mem[HISAX_MAX_CARDS] __devinitdata = { 0, }; +static int irq[HISAX_MAX_CARDS] = { 0, }; +static int mem[HISAX_MAX_CARDS] = { 0, }; static char *id = HiSaxID; MODULE_DESCRIPTION("ISDN4Linux: Driver for passive ISDN cards"); @@ -852,7 +852,7 @@ static int init_card(struct IsdnCardState *cs) return 3; } -static int __devinit hisax_cs_setup_card(struct IsdnCard *card) +static int hisax_cs_setup_card(struct IsdnCard *card) { int ret; @@ -1171,12 +1171,8 @@ outf_cs: return 0; } -/* Used from an exported function but calls __devinit functions. - * Tell modpost not to warn (__ref) - */ -static int __ref checkcard(int cardnr, char *id, int *busy_flag, - struct module *lockowner, - hisax_setup_func_t card_setup) +static int checkcard(int cardnr, char *id, int *busy_flag, + struct module *lockowner, hisax_setup_func_t card_setup) { int ret; struct IsdnCard *card = cards + cardnr; @@ -1547,9 +1543,7 @@ static void __exit HiSax_exit(void) printk(KERN_INFO "HiSax module removed\n"); } -#ifdef CONFIG_HOTPLUG - -int __devinit hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard *card) +int hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard *card) { u_char ids[16]; int ret = -1; @@ -1568,9 +1562,7 @@ int __devinit hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard * error: return ret; } - EXPORT_SYMBOL(hisax_init_pcmcia); -#endif EXPORT_SYMBOL(HiSax_closecard); @@ -1917,7 +1909,7 @@ static void EChannel_proc_rcv(struct hisax_d_if *d_if) #ifdef CONFIG_PCI #include -static struct pci_device_id hisax_pci_tbl[] __devinitdata __used = { +static struct pci_device_id hisax_pci_tbl[] __used = { #ifdef CONFIG_HISAX_FRITZPCI {PCI_VDEVICE(AVM, PCI_DEVICE_ID_AVM_A1) }, #endif diff --git a/drivers/isdn/hisax/diva.c b/drivers/isdn/hisax/diva.c index 62a2945fa7f2..8d0cf6e4dc00 100644 --- a/drivers/isdn/hisax/diva.c +++ b/drivers/isdn/hisax/diva.c @@ -904,7 +904,7 @@ Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit setup_diva_common(struct IsdnCardState *cs) +static int setup_diva_common(struct IsdnCardState *cs) { int bytecnt; u_char val; @@ -997,7 +997,7 @@ static int __devinit setup_diva_common(struct IsdnCardState *cs) #ifdef CONFIG_ISA -static int __devinit setup_diva_isa(struct IsdnCard *card) +static int setup_diva_isa(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; u_char val; @@ -1033,7 +1033,7 @@ static int __devinit setup_diva_isa(struct IsdnCard *card) #else /* if !CONFIG_ISA */ -static int __devinit setup_diva_isa(struct IsdnCard *card) +static int setup_diva_isa(struct IsdnCard *card) { return (-1); /* card not found; continue search */ } @@ -1041,7 +1041,7 @@ static int __devinit setup_diva_isa(struct IsdnCard *card) #endif /* CONFIG_ISA */ #ifdef __ISAPNP__ -static struct isapnp_device_id diva_ids[] __devinitdata = { +static struct isapnp_device_id diva_ids[] = { { ISAPNP_VENDOR('G', 'D', 'I'), ISAPNP_FUNCTION(0x51), ISAPNP_VENDOR('G', 'D', 'I'), ISAPNP_FUNCTION(0x51), (unsigned long) "Diva picola" }, @@ -1063,10 +1063,10 @@ static struct isapnp_device_id diva_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &diva_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &diva_ids[0]; +static struct pnp_card *pnp_c = NULL; -static int __devinit setup_diva_isapnp(struct IsdnCard *card) +static int setup_diva_isapnp(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; struct pnp_dev *pnp_d; @@ -1141,7 +1141,7 @@ static int __devinit setup_diva_isapnp(struct IsdnCard *card) #else /* if !ISAPNP */ -static int __devinit setup_diva_isapnp(struct IsdnCard *card) +static int setup_diva_isapnp(struct IsdnCard *card) { return (-1); /* card not found; continue search */ } @@ -1149,12 +1149,12 @@ static int __devinit setup_diva_isapnp(struct IsdnCard *card) #endif /* ISAPNP */ #ifdef CONFIG_PCI -static struct pci_dev *dev_diva __devinitdata = NULL; -static struct pci_dev *dev_diva_u __devinitdata = NULL; -static struct pci_dev *dev_diva201 __devinitdata = NULL; -static struct pci_dev *dev_diva202 __devinitdata = NULL; +static struct pci_dev *dev_diva = NULL; +static struct pci_dev *dev_diva_u = NULL; +static struct pci_dev *dev_diva201 = NULL; +static struct pci_dev *dev_diva202 = NULL; -static int __devinit setup_diva_pci(struct IsdnCard *card) +static int setup_diva_pci(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; @@ -1231,15 +1231,14 @@ static int __devinit setup_diva_pci(struct IsdnCard *card) #else /* if !CONFIG_PCI */ -static int __devinit setup_diva_pci(struct IsdnCard *card) +static int setup_diva_pci(struct IsdnCard *card) { return (-1); /* card not found; continue search */ } #endif /* CONFIG_PCI */ -int __devinit -setup_diva(struct IsdnCard *card) +int setup_diva(struct IsdnCard *card) { int rc, have_card = 0; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/elsa.c b/drivers/isdn/hisax/elsa.c index 64ba26a4afe6..1df6f9a56ca2 100644 --- a/drivers/isdn/hisax/elsa.c +++ b/drivers/isdn/hisax/elsa.c @@ -831,8 +831,7 @@ probe_elsa(struct IsdnCardState *cs) return (CARD_portlist[i]); } -static int __devinit -setup_elsa_isa(struct IsdnCard *card) +static int setup_elsa_isa(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; u_char val; @@ -902,7 +901,7 @@ setup_elsa_isa(struct IsdnCard *card) } #ifdef __ISAPNP__ -static struct isapnp_device_id elsa_ids[] __devinitdata = { +static struct isapnp_device_id elsa_ids[] = { { ISAPNP_VENDOR('E', 'L', 'S'), ISAPNP_FUNCTION(0x0133), ISAPNP_VENDOR('E', 'L', 'S'), ISAPNP_FUNCTION(0x0133), (unsigned long) "Elsa QS1000" }, @@ -912,12 +911,11 @@ static struct isapnp_device_id elsa_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &elsa_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &elsa_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif /* __ISAPNP__ */ -static int __devinit -setup_elsa_isapnp(struct IsdnCard *card) +static int setup_elsa_isapnp(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; @@ -994,8 +992,7 @@ setup_elsa_isapnp(struct IsdnCard *card) return (1); } -static void __devinit -setup_elsa_pcmcia(struct IsdnCard *card) +static void setup_elsa_pcmcia(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; u_char val; @@ -1027,11 +1024,10 @@ setup_elsa_pcmcia(struct IsdnCard *card) } #ifdef CONFIG_PCI -static struct pci_dev *dev_qs1000 __devinitdata = NULL; -static struct pci_dev *dev_qs3000 __devinitdata = NULL; +static struct pci_dev *dev_qs1000 = NULL; +static struct pci_dev *dev_qs3000 = NULL; -static int __devinit -setup_elsa_pci(struct IsdnCard *card) +static int setup_elsa_pci(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; @@ -1089,15 +1085,13 @@ setup_elsa_pci(struct IsdnCard *card) #else -static int __devinit -setup_elsa_pci(struct IsdnCard *card) +static int setup_elsa_pci(struct IsdnCard *card) { return (1); } #endif /* CONFIG_PCI */ -static int __devinit -setup_elsa_common(struct IsdnCard *card) +static int setup_elsa_common(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; u_char val; @@ -1212,8 +1206,7 @@ setup_elsa_common(struct IsdnCard *card) return (1); } -int __devinit -setup_elsa(struct IsdnCard *card) +int setup_elsa(struct IsdnCard *card) { int rc; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/elsa_cs.c b/drivers/isdn/hisax/elsa_cs.c index a8c4d3fc9a6d..ebe56918f6fc 100644 --- a/drivers/isdn/hisax/elsa_cs.c +++ b/drivers/isdn/hisax/elsa_cs.c @@ -62,9 +62,9 @@ MODULE_LICENSE("Dual MPL/GPL"); static int protocol = 2; /* EURO-ISDN Default */ module_param(protocol, int, 0); -static int elsa_cs_config(struct pcmcia_device *link) __devinit; +static int elsa_cs_config(struct pcmcia_device *link); static void elsa_cs_release(struct pcmcia_device *link); -static void elsa_cs_detach(struct pcmcia_device *p_dev) __devexit; +static void elsa_cs_detach(struct pcmcia_device *p_dev); typedef struct local_info_t { struct pcmcia_device *p_dev; @@ -72,7 +72,7 @@ typedef struct local_info_t { int cardnr; } local_info_t; -static int __devinit elsa_cs_probe(struct pcmcia_device *link) +static int elsa_cs_probe(struct pcmcia_device *link) { local_info_t *local; @@ -90,7 +90,7 @@ static int __devinit elsa_cs_probe(struct pcmcia_device *link) return elsa_cs_config(link); } /* elsa_cs_attach */ -static void __devexit elsa_cs_detach(struct pcmcia_device *link) +static void elsa_cs_detach(struct pcmcia_device *link) { local_info_t *info = link->priv; @@ -126,7 +126,7 @@ static int elsa_cs_configcheck(struct pcmcia_device *p_dev, void *priv_data) return -ENODEV; } -static int __devinit elsa_cs_config(struct pcmcia_device *link) +static int elsa_cs_config(struct pcmcia_device *link) { int i; IsdnCard_t icard; @@ -210,7 +210,7 @@ static struct pcmcia_driver elsa_cs_driver = { .owner = THIS_MODULE, .name = "elsa_cs", .probe = elsa_cs_probe, - .remove = __devexit_p(elsa_cs_detach), + .remove = elsa_cs_detach, .id_table = elsa_ids, .suspend = elsa_suspend, .resume = elsa_resume, diff --git a/drivers/isdn/hisax/enternow_pci.c b/drivers/isdn/hisax/enternow_pci.c index b1e38b54ebac..e8d431a8302d 100644 --- a/drivers/isdn/hisax/enternow_pci.c +++ b/drivers/isdn/hisax/enternow_pci.c @@ -300,8 +300,7 @@ enpci_interrupt(int intno, void *dev_id) return IRQ_HANDLED; } -static int __devinit en_pci_probe(struct pci_dev *dev_netjet, - struct IsdnCardState *cs) +static int en_pci_probe(struct pci_dev *dev_netjet, struct IsdnCardState *cs) { if (pci_enable_device(dev_netjet)) return (0); @@ -326,8 +325,7 @@ static int __devinit en_pci_probe(struct pci_dev *dev_netjet, return (1); } -static void __devinit en_cs_init(struct IsdnCard *card, - struct IsdnCardState *cs) +static void en_cs_init(struct IsdnCard *card, struct IsdnCardState *cs) { cs->hw.njet.auxa = cs->hw.njet.base + NETJET_AUXDATA; cs->hw.njet.isac = cs->hw.njet.base + 0xC0; // Fenster zum AMD @@ -350,8 +348,7 @@ static void __devinit en_cs_init(struct IsdnCard *card, outb(cs->hw.njet.auxd, cs->hw.njet.auxa); } -static int __devinit en_cs_init_rest(struct IsdnCard *card, - struct IsdnCardState *cs) +static int en_cs_init_rest(struct IsdnCard *card, struct IsdnCardState *cs) { const int bytecnt = 256; @@ -384,11 +381,10 @@ static int __devinit en_cs_init_rest(struct IsdnCard *card, return (1); } -static struct pci_dev *dev_netjet __devinitdata = NULL; +static struct pci_dev *dev_netjet = NULL; /* called by config.c */ -int __devinit -setup_enternow_pci(struct IsdnCard *card) +int setup_enternow_pci(struct IsdnCard *card) { int ret; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/gazel.c b/drivers/isdn/hisax/gazel.c index 4fef77562554..35c6df6534ec 100644 --- a/drivers/isdn/hisax/gazel.c +++ b/drivers/isdn/hisax/gazel.c @@ -483,8 +483,7 @@ error: return 1; } -static int __devinit -setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs) +static int setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs) { printk(KERN_INFO "Gazel: ISA PnP card automatic recognition\n"); // we got an irq parameter, assume it is an ISA card @@ -532,10 +531,9 @@ setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs) } #ifdef CONFIG_PCI -static struct pci_dev *dev_tel __devinitdata = NULL; +static struct pci_dev *dev_tel = NULL; -static int __devinit -setup_gazelpci(struct IsdnCardState *cs) +static int setup_gazelpci(struct IsdnCardState *cs) { u_int pci_ioaddr0 = 0, pci_ioaddr1 = 0; u_char pci_irq = 0, found; @@ -622,8 +620,7 @@ setup_gazelpci(struct IsdnCardState *cs) } #endif /* CONFIG_PCI */ -int __devinit -setup_gazel(struct IsdnCard *card) +int setup_gazel(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/hfc4s8s_l1.c b/drivers/isdn/hisax/hfc4s8s_l1.c index dea04de8e7ca..c49c294fc81e 100644 --- a/drivers/isdn/hisax/hfc4s8s_l1.c +++ b/drivers/isdn/hisax/hfc4s8s_l1.c @@ -1497,7 +1497,7 @@ enable_pci_ports(hfc4s8s_hw *hw) /* initialise the HFC-4s/8s hardware */ /* return 0 on success. */ /*************************************/ -static int __devinit +static int setup_instance(hfc4s8s_hw *hw) { int err = -EIO; @@ -1585,7 +1585,7 @@ out: /*****************************************/ /* PCI hotplug interface: probe new card */ /*****************************************/ -static int __devinit +static int hfc4s8s_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { int err = -ENOMEM; @@ -1640,7 +1640,7 @@ out: /**************************************/ /* PCI hotplug interface: remove card */ /**************************************/ -static void __devexit +static void hfc4s8s_remove(struct pci_dev *pdev) { hfc4s8s_hw *hw = pci_get_drvdata(pdev); @@ -1662,7 +1662,7 @@ hfc4s8s_remove(struct pci_dev *pdev) static struct pci_driver hfc4s8s_driver = { .name = "hfc4s8s_l1", .probe = hfc4s8s_probe, - .remove = __devexit_p(hfc4s8s_remove), + .remove = hfc4s8s_remove, .id_table = hfc4s8s_ids, }; @@ -1688,14 +1688,6 @@ hfc4s8s_module_init(void) } printk(KERN_INFO "HFC-4S/8S: found %d cards\n", card_cnt); -#if !defined(CONFIG_HOTPLUG) - if (err == 0) { - err = -ENODEV; - pci_unregister_driver(&hfc4s8s_driver); - goto out; - } -#endif - return 0; out: return (err); diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index f60d4be58941..3ccd724ff8c2 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -1632,9 +1632,9 @@ hfcpci_card_msg(struct IsdnCardState *cs, int mt, void *arg) /* this variable is used as card index when more than one cards are present */ -static struct pci_dev *dev_hfcpci __devinitdata = NULL; +static struct pci_dev *dev_hfcpci = NULL; -int __devinit +int setup_hfcpci(struct IsdnCard *card) { u_long flags; diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c index 4ec279ce052f..90f34ae2b80f 100644 --- a/drivers/isdn/hisax/hfc_sx.c +++ b/drivers/isdn/hisax/hfc_sx.c @@ -1381,19 +1381,18 @@ hfcsx_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct isapnp_device_id hfc_ids[] __devinitdata = { +static struct isapnp_device_id hfc_ids[] = { { ISAPNP_VENDOR('T', 'A', 'G'), ISAPNP_FUNCTION(0x2620), ISAPNP_VENDOR('T', 'A', 'G'), ISAPNP_FUNCTION(0x2620), (unsigned long) "Teles 16.3c2" }, { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &hfc_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &hfc_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_hfcsx(struct IsdnCard *card) +int setup_hfcsx(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/hfcscard.c b/drivers/isdn/hisax/hfcscard.c index a5f048bd2bb3..394da646e97b 100644 --- a/drivers/isdn/hisax/hfcscard.c +++ b/drivers/isdn/hisax/hfcscard.c @@ -136,7 +136,7 @@ hfcs_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct isapnp_device_id hfc_ids[] __devinitdata = { +static struct isapnp_device_id hfc_ids[] = { { ISAPNP_VENDOR('A', 'N', 'X'), ISAPNP_FUNCTION(0x1114), ISAPNP_VENDOR('A', 'N', 'X'), ISAPNP_FUNCTION(0x1114), (unsigned long) "Acer P10" }, @@ -161,12 +161,11 @@ static struct isapnp_device_id hfc_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &hfc_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &hfc_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_hfcs(struct IsdnCard *card) +int setup_hfcs(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/hisax_fcpcipnp.c b/drivers/isdn/hisax/hisax_fcpcipnp.c index e4f47fe3f7fd..5e8a5d967162 100644 --- a/drivers/isdn/hisax/hisax_fcpcipnp.c +++ b/drivers/isdn/hisax/hisax_fcpcipnp.c @@ -70,7 +70,7 @@ static struct pci_device_id fcpci_ids[] = { MODULE_DEVICE_TABLE(pci, fcpci_ids); #ifdef CONFIG_PNP -static struct pnp_device_id fcpnp_ids[] __devinitdata = { +static struct pnp_device_id fcpnp_ids[] = { { .id = "AVM0900", .driver_data = (unsigned long) "Fritz!Card PnP", @@ -712,7 +712,7 @@ static inline void fcpci_init(struct fritz_adapter *adapter) // ---------------------------------------------------------------------- -static int __devinit fcpcipnp_setup(struct fritz_adapter *adapter) +static int fcpcipnp_setup(struct fritz_adapter *adapter) { u32 val = 0; int retval; @@ -825,7 +825,7 @@ err: return retval; } -static void __devexit fcpcipnp_release(struct fritz_adapter *adapter) +static void fcpcipnp_release(struct fritz_adapter *adapter) { DBG(1, ""); @@ -836,8 +836,7 @@ static void __devexit fcpcipnp_release(struct fritz_adapter *adapter) // ---------------------------------------------------------------------- -static struct fritz_adapter * __devinit -new_adapter(void) +static struct fritz_adapter *new_adapter(void) { struct fritz_adapter *adapter; struct hisax_b_if *b_if[2]; @@ -876,8 +875,7 @@ static void delete_adapter(struct fritz_adapter *adapter) kfree(adapter); } -static int __devinit fcpci_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int fcpci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct fritz_adapter *adapter; int retval; @@ -917,7 +915,7 @@ err: } #ifdef CONFIG_PNP -static int __devinit fcpnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id) +static int fcpnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id) { struct fritz_adapter *adapter; int retval; @@ -959,7 +957,7 @@ err: return retval; } -static void __devexit fcpnp_remove(struct pnp_dev *pdev) +static void fcpnp_remove(struct pnp_dev *pdev) { struct fritz_adapter *adapter = pnp_get_drvdata(pdev); @@ -973,12 +971,12 @@ static void __devexit fcpnp_remove(struct pnp_dev *pdev) static struct pnp_driver fcpnp_driver = { .name = "fcpnp", .probe = fcpnp_probe, - .remove = __devexit_p(fcpnp_remove), + .remove = fcpnp_remove, .id_table = fcpnp_ids, }; #endif -static void __devexit fcpci_remove(struct pci_dev *pdev) +static void fcpci_remove(struct pci_dev *pdev) { struct fritz_adapter *adapter = pci_get_drvdata(pdev); @@ -990,7 +988,7 @@ static void __devexit fcpci_remove(struct pci_dev *pdev) static struct pci_driver fcpci_driver = { .name = "fcpci", .probe = fcpci_probe, - .remove = __devexit_p(fcpci_remove), + .remove = fcpci_remove, .id_table = fcpci_ids, }; diff --git a/drivers/isdn/hisax/icc.c b/drivers/isdn/hisax/icc.c index 7be762b17c70..db5321f6379b 100644 --- a/drivers/isdn/hisax/icc.c +++ b/drivers/isdn/hisax/icc.c @@ -673,8 +673,7 @@ clear_pending_icc_ints(struct IsdnCardState *cs) cs->writeisac(cs, ICC_MASK, 0xFF); } -void __devinit -setup_icc(struct IsdnCardState *cs) +void setup_icc(struct IsdnCardState *cs) { INIT_WORK(&cs->tqueue, icc_bh); cs->dbusytimer.function = (void *) dbusy_timer_handler; diff --git a/drivers/isdn/hisax/isac.c b/drivers/isdn/hisax/isac.c index bcd70a387307..a365ccc1c99c 100644 --- a/drivers/isdn/hisax/isac.c +++ b/drivers/isdn/hisax/isac.c @@ -24,11 +24,11 @@ #define DBUSY_TIMER_VALUE 80 #define ARCOFI_USE 1 -static char *ISACVer[] __devinitdata = +static char *ISACVer[] = {"2086/2186 V1.1", "2085 B1", "2085 B2", "2085 V2.3"}; -void __devinit ISACVersion(struct IsdnCardState *cs, char *s) +void ISACVersion(struct IsdnCardState *cs, char *s) { int val; @@ -669,8 +669,7 @@ void clear_pending_isac_ints(struct IsdnCardState *cs) cs->writeisac(cs, ISAC_MASK, 0xFF); } -void __devinit -setup_isac(struct IsdnCardState *cs) +void setup_isac(struct IsdnCardState *cs) { INIT_WORK(&cs->tqueue, isac_bh); cs->dbusytimer.function = (void *) dbusy_timer_handler; diff --git a/drivers/isdn/hisax/isurf.c b/drivers/isdn/hisax/isurf.c index c1530fe248c2..1399ddd4f6cb 100644 --- a/drivers/isdn/hisax/isurf.c +++ b/drivers/isdn/hisax/isurf.c @@ -194,11 +194,10 @@ isurf_auxcmd(struct IsdnCardState *cs, isdn_ctrl *ic) { } #ifdef __ISAPNP__ -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_isurf(struct IsdnCard *card) +int setup_isurf(struct IsdnCard *card) { int ver; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/ix1_micro.c b/drivers/isdn/hisax/ix1_micro.c index 5f299f82b801..7ae39f5e865d 100644 --- a/drivers/isdn/hisax/ix1_micro.c +++ b/drivers/isdn/hisax/ix1_micro.c @@ -209,7 +209,7 @@ ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct isapnp_device_id itk_ids[] __devinitdata = { +static struct isapnp_device_id itk_ids[] = { { ISAPNP_VENDOR('I', 'T', 'K'), ISAPNP_FUNCTION(0x25), ISAPNP_VENDOR('I', 'T', 'K'), ISAPNP_FUNCTION(0x25), (unsigned long) "ITK micro 2" }, @@ -219,13 +219,12 @@ static struct isapnp_device_id itk_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &itk_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &itk_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_ix1micro(struct IsdnCard *card) +int setup_ix1micro(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/mic.c b/drivers/isdn/hisax/mic.c index 08a6b7fb17f7..93398676f78f 100644 --- a/drivers/isdn/hisax/mic.c +++ b/drivers/isdn/hisax/mic.c @@ -187,8 +187,7 @@ mic_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -int __devinit -setup_mic(struct IsdnCard *card) +int setup_mic(struct IsdnCard *card) { int bytecnt; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/niccy.c b/drivers/isdn/hisax/niccy.c index 6569e0315cca..e4c33cfe3ef4 100644 --- a/drivers/isdn/hisax/niccy.c +++ b/drivers/isdn/hisax/niccy.c @@ -223,10 +223,10 @@ static int niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit setup_niccy(struct IsdnCard *card) +int setup_niccy(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; @@ -298,7 +298,7 @@ int __devinit setup_niccy(struct IsdnCard *card) } } else { #ifdef CONFIG_PCI - static struct pci_dev *niccy_dev __devinitdata; + static struct pci_dev *niccy_dev; u_int pci_ioaddr; cs->subtyp = 0; diff --git a/drivers/isdn/hisax/nj_s.c b/drivers/isdn/hisax/nj_s.c index f36ff69c07e1..32b4bbd18eb9 100644 --- a/drivers/isdn/hisax/nj_s.c +++ b/drivers/isdn/hisax/nj_s.c @@ -148,8 +148,7 @@ NETjet_S_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit njs_pci_probe(struct pci_dev *dev_netjet, - struct IsdnCardState *cs) +static int njs_pci_probe(struct pci_dev *dev_netjet, struct IsdnCardState *cs) { u32 cfg; @@ -187,8 +186,7 @@ static int __devinit njs_pci_probe(struct pci_dev *dev_netjet, return (1); } -static int __devinit njs_cs_init(struct IsdnCard *card, - struct IsdnCardState *cs) +static int njs_cs_init(struct IsdnCard *card, struct IsdnCardState *cs) { cs->hw.njet.auxa = cs->hw.njet.base + NETJET_AUXDATA; @@ -225,8 +223,7 @@ static int __devinit njs_cs_init(struct IsdnCard *card, return 1; /* end loop */ } -static int __devinit njs_cs_init_rest(struct IsdnCard *card, - struct IsdnCardState *cs) +static int njs_cs_init_rest(struct IsdnCard *card, struct IsdnCardState *cs) { const int bytecnt = 256; @@ -256,10 +253,9 @@ static int __devinit njs_cs_init_rest(struct IsdnCard *card, return (1); } -static struct pci_dev *dev_netjet __devinitdata = NULL; +static struct pci_dev *dev_netjet = NULL; -int __devinit -setup_netjet_s(struct IsdnCard *card) +int setup_netjet_s(struct IsdnCard *card) { int ret; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/nj_u.c b/drivers/isdn/hisax/nj_u.c index 333484aef425..4e8adbede361 100644 --- a/drivers/isdn/hisax/nj_u.c +++ b/drivers/isdn/hisax/nj_u.c @@ -128,8 +128,7 @@ NETjet_U_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit nju_pci_probe(struct pci_dev *dev_netjet, - struct IsdnCardState *cs) +static int nju_pci_probe(struct pci_dev *dev_netjet, struct IsdnCardState *cs) { if (pci_enable_device(dev_netjet)) return (0); @@ -148,8 +147,7 @@ static int __devinit nju_pci_probe(struct pci_dev *dev_netjet, return (1); } -static int __devinit nju_cs_init(struct IsdnCard *card, - struct IsdnCardState *cs) +static int nju_cs_init(struct IsdnCard *card, struct IsdnCardState *cs) { cs->hw.njet.auxa = cs->hw.njet.base + NETJET_AUXDATA; cs->hw.njet.isac = cs->hw.njet.base | NETJET_ISAC_OFF; @@ -187,8 +185,7 @@ static int __devinit nju_cs_init(struct IsdnCard *card, return 1; /* end loop */ } -static int __devinit nju_cs_init_rest(struct IsdnCard *card, - struct IsdnCardState *cs) +static int nju_cs_init_rest(struct IsdnCard *card, struct IsdnCardState *cs) { const int bytecnt = 256; @@ -219,10 +216,9 @@ static int __devinit nju_cs_init_rest(struct IsdnCard *card, return (1); } -static struct pci_dev *dev_netjet __devinitdata = NULL; +static struct pci_dev *dev_netjet = NULL; -int __devinit -setup_netjet_u(struct IsdnCard *card) +int setup_netjet_u(struct IsdnCard *card) { int ret; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/s0box.c b/drivers/isdn/hisax/s0box.c index 383c4e7ce50b..4e7d0aa227ad 100644 --- a/drivers/isdn/hisax/s0box.c +++ b/drivers/isdn/hisax/s0box.c @@ -210,8 +210,7 @@ S0Box_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -int __devinit -setup_s0box(struct IsdnCard *card) +int setup_s0box(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/saphir.c b/drivers/isdn/hisax/saphir.c index 75dcae6d36e0..6b2d0eccdd56 100644 --- a/drivers/isdn/hisax/saphir.c +++ b/drivers/isdn/hisax/saphir.c @@ -240,8 +240,7 @@ saphir_card_msg(struct IsdnCardState *cs, int mt, void *arg) } -int __devinit -setup_saphir(struct IsdnCard *card) +int setup_saphir(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/sedlbauer.c b/drivers/isdn/hisax/sedlbauer.c index 1ee531b6be99..f16a47bcef48 100644 --- a/drivers/isdn/hisax/sedlbauer.c +++ b/drivers/isdn/hisax/sedlbauer.c @@ -517,7 +517,7 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg) } #ifdef __ISAPNP__ -static struct isapnp_device_id sedl_ids[] __devinitdata = { +static struct isapnp_device_id sedl_ids[] = { { ISAPNP_VENDOR('S', 'A', 'G'), ISAPNP_FUNCTION(0x01), ISAPNP_VENDOR('S', 'A', 'G'), ISAPNP_FUNCTION(0x01), (unsigned long) "Speed win" }, @@ -527,11 +527,10 @@ static struct isapnp_device_id sedl_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &sedl_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &sedl_ids[0]; +static struct pnp_card *pnp_c = NULL; -static int __devinit -setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) +static int setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) { struct IsdnCardState *cs = card->cs; struct pnp_dev *pnp_d; @@ -591,18 +590,16 @@ setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) } #else -static int __devinit -setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) +static int setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) { return -1; } #endif /* __ISAPNP__ */ #ifdef CONFIG_PCI -static struct pci_dev *dev_sedl __devinitdata = NULL; +static struct pci_dev *dev_sedl = NULL; -static int __devinit -setup_sedlbauer_pci(struct IsdnCard *card) +static int setup_sedlbauer_pci(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; u16 sub_vendor_id, sub_id; @@ -667,16 +664,14 @@ setup_sedlbauer_pci(struct IsdnCard *card) #else -static int __devinit -setup_sedlbauer_pci(struct IsdnCard *card) +static int setup_sedlbauer_pci(struct IsdnCard *card) { return (1); } #endif /* CONFIG_PCI */ -int __devinit -setup_sedlbauer(struct IsdnCard *card) +int setup_sedlbauer(struct IsdnCard *card) { int bytecnt = 8, ver, val, rc; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/sedlbauer_cs.c b/drivers/isdn/hisax/sedlbauer_cs.c index f0dfc0c976eb..90f81291641b 100644 --- a/drivers/isdn/hisax/sedlbauer_cs.c +++ b/drivers/isdn/hisax/sedlbauer_cs.c @@ -62,10 +62,10 @@ MODULE_LICENSE("Dual MPL/GPL"); static int protocol = 2; /* EURO-ISDN Default */ module_param(protocol, int, 0); -static int sedlbauer_config(struct pcmcia_device *link) __devinit; +static int sedlbauer_config(struct pcmcia_device *link); static void sedlbauer_release(struct pcmcia_device *link); -static void sedlbauer_detach(struct pcmcia_device *p_dev) __devexit; +static void sedlbauer_detach(struct pcmcia_device *p_dev); typedef struct local_info_t { struct pcmcia_device *p_dev; @@ -73,7 +73,7 @@ typedef struct local_info_t { int cardnr; } local_info_t; -static int __devinit sedlbauer_probe(struct pcmcia_device *link) +static int sedlbauer_probe(struct pcmcia_device *link) { local_info_t *local; @@ -90,7 +90,7 @@ static int __devinit sedlbauer_probe(struct pcmcia_device *link) return sedlbauer_config(link); } /* sedlbauer_attach */ -static void __devexit sedlbauer_detach(struct pcmcia_device *link) +static void sedlbauer_detach(struct pcmcia_device *link) { dev_dbg(&link->dev, "sedlbauer_detach(0x%p)\n", link); @@ -110,7 +110,7 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev, void *priv_data) return pcmcia_request_io(p_dev); } -static int __devinit sedlbauer_config(struct pcmcia_device *link) +static int sedlbauer_config(struct pcmcia_device *link) { int ret; IsdnCard_t icard; @@ -201,7 +201,7 @@ static struct pcmcia_driver sedlbauer_driver = { .owner = THIS_MODULE, .name = "sedlbauer_cs", .probe = sedlbauer_probe, - .remove = __devexit_p(sedlbauer_detach), + .remove = sedlbauer_detach, .id_table = sedlbauer_ids, .suspend = sedlbauer_suspend, .resume = sedlbauer_resume, diff --git a/drivers/isdn/hisax/sportster.c b/drivers/isdn/hisax/sportster.c index 1267298ef551..18cee6360d0a 100644 --- a/drivers/isdn/hisax/sportster.c +++ b/drivers/isdn/hisax/sportster.c @@ -183,8 +183,7 @@ Sportster_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static int __devinit -get_io_range(struct IsdnCardState *cs) +static int get_io_range(struct IsdnCardState *cs) { int i, j, adr; @@ -208,8 +207,7 @@ get_io_range(struct IsdnCardState *cs) } } -int __devinit -setup_sportster(struct IsdnCard *card) +int setup_sportster(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/teleint.c b/drivers/isdn/hisax/teleint.c index fa329e27cc5b..bf647545c70c 100644 --- a/drivers/isdn/hisax/teleint.c +++ b/drivers/isdn/hisax/teleint.c @@ -259,8 +259,7 @@ TeleInt_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -int __devinit -setup_TeleInt(struct IsdnCard *card) +int setup_TeleInt(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/teles0.c b/drivers/isdn/hisax/teles0.c index 49b4a26f91e0..ce9eabdd2f6e 100644 --- a/drivers/isdn/hisax/teles0.c +++ b/drivers/isdn/hisax/teles0.c @@ -263,8 +263,7 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -int __devinit -setup_teles0(struct IsdnCard *card) +int setup_teles0(struct IsdnCard *card) { u_char val; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/teles3.c b/drivers/isdn/hisax/teles3.c index 220b919fafc3..38fb2c1a3f0f 100644 --- a/drivers/isdn/hisax/teles3.c +++ b/drivers/isdn/hisax/teles3.c @@ -253,7 +253,7 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg) #ifdef __ISAPNP__ -static struct isapnp_device_id teles_ids[] __devinitdata = { +static struct isapnp_device_id teles_ids[] = { { ISAPNP_VENDOR('T', 'A', 'G'), ISAPNP_FUNCTION(0x2110), ISAPNP_VENDOR('T', 'A', 'G'), ISAPNP_FUNCTION(0x2110), (unsigned long) "Teles 16.3 PnP" }, @@ -266,12 +266,11 @@ static struct isapnp_device_id teles_ids[] __devinitdata = { { 0, } }; -static struct isapnp_device_id *ipid __devinitdata = &teles_ids[0]; -static struct pnp_card *pnp_c __devinitdata = NULL; +static struct isapnp_device_id *ipid = &teles_ids[0]; +static struct pnp_card *pnp_c = NULL; #endif -int __devinit -setup_teles3(struct IsdnCard *card) +int setup_teles3(struct IsdnCard *card) { u_char val; struct IsdnCardState *cs = card->cs; diff --git a/drivers/isdn/hisax/teles_cs.c b/drivers/isdn/hisax/teles_cs.c index 4deac451807c..f2476ffb04fd 100644 --- a/drivers/isdn/hisax/teles_cs.c +++ b/drivers/isdn/hisax/teles_cs.c @@ -43,9 +43,9 @@ MODULE_LICENSE("GPL"); static int protocol = 2; /* EURO-ISDN Default */ module_param(protocol, int, 0); -static int teles_cs_config(struct pcmcia_device *link) __devinit; +static int teles_cs_config(struct pcmcia_device *link); static void teles_cs_release(struct pcmcia_device *link); -static void teles_detach(struct pcmcia_device *p_dev) __devexit; +static void teles_detach(struct pcmcia_device *p_dev); typedef struct local_info_t { struct pcmcia_device *p_dev; @@ -53,7 +53,7 @@ typedef struct local_info_t { int cardnr; } local_info_t; -static int __devinit teles_probe(struct pcmcia_device *link) +static int teles_probe(struct pcmcia_device *link) { local_info_t *local; @@ -72,7 +72,7 @@ static int __devinit teles_probe(struct pcmcia_device *link) return teles_cs_config(link); } /* teles_attach */ -static void __devexit teles_detach(struct pcmcia_device *link) +static void teles_detach(struct pcmcia_device *link) { local_info_t *info = link->priv; @@ -108,7 +108,7 @@ static int teles_cs_configcheck(struct pcmcia_device *p_dev, void *priv_data) return -ENODEV; } -static int __devinit teles_cs_config(struct pcmcia_device *link) +static int teles_cs_config(struct pcmcia_device *link) { int i; IsdnCard_t icard; @@ -192,7 +192,7 @@ static struct pcmcia_driver teles_cs_driver = { .owner = THIS_MODULE, .name = "teles_cs", .probe = teles_probe, - .remove = __devexit_p(teles_detach), + .remove = teles_detach, .id_table = teles_ids, .suspend = teles_suspend, .resume = teles_resume, diff --git a/drivers/isdn/hisax/telespci.c b/drivers/isdn/hisax/telespci.c index 9c002c9dc771..f6ab63aa6995 100644 --- a/drivers/isdn/hisax/telespci.c +++ b/drivers/isdn/hisax/telespci.c @@ -283,10 +283,9 @@ TelesPCI_card_msg(struct IsdnCardState *cs, int mt, void *arg) return (0); } -static struct pci_dev *dev_tel __devinitdata = NULL; +static struct pci_dev *dev_tel = NULL; -int __devinit -setup_telespci(struct IsdnCard *card) +int setup_telespci(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hisax/w6692.c b/drivers/isdn/hisax/w6692.c index 0f0d094af85b..d8cac6935818 100644 --- a/drivers/isdn/hisax/w6692.c +++ b/drivers/isdn/hisax/w6692.c @@ -991,10 +991,9 @@ w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg) static int id_idx; -static struct pci_dev *dev_w6692 __devinitdata = NULL; +static struct pci_dev *dev_w6692 = NULL; -int __devinit -setup_w6692(struct IsdnCard *card) +int setup_w6692(struct IsdnCard *card) { struct IsdnCardState *cs = card->cs; char tmp[64]; diff --git a/drivers/isdn/hysdn/hysdn_init.c b/drivers/isdn/hysdn/hysdn_init.c index b61bbb4bb52b..0db2f7506250 100644 --- a/drivers/isdn/hysdn/hysdn_init.c +++ b/drivers/isdn/hysdn/hysdn_init.c @@ -56,8 +56,8 @@ static hysdn_card *card_last = NULL; /* pointer to first card */ /* is assumed and the module will not be kept in memory. */ /****************************************************************************/ -static int __devinit hysdn_pci_init_one(struct pci_dev *akt_pcidev, - const struct pci_device_id *ent) +static int hysdn_pci_init_one(struct pci_dev *akt_pcidev, + const struct pci_device_id *ent) { hysdn_card *card; int rc; @@ -109,7 +109,7 @@ err_out: return rc; } -static void __devexit hysdn_pci_remove_one(struct pci_dev *akt_pcidev) +static void hysdn_pci_remove_one(struct pci_dev *akt_pcidev) { hysdn_card *card = pci_get_drvdata(akt_pcidev); @@ -147,7 +147,7 @@ static struct pci_driver hysdn_pci_driver = { .name = "hysdn", .id_table = hysdn_pci_tbl, .probe = hysdn_pci_init_one, - .remove = __devexit_p(hysdn_pci_remove_one), + .remove = hysdn_pci_remove_one, }; static int hysdn_have_procfs; diff --git a/drivers/isdn/mISDN/core.c b/drivers/isdn/mISDN/core.c index c401634c00ec..3e245712bba7 100644 --- a/drivers/isdn/mISDN/core.c +++ b/drivers/isdn/mISDN/core.c @@ -140,7 +140,6 @@ static struct device_attribute mISDN_dev_attrs[] = { {} }; -#ifdef CONFIG_HOTPLUG static int mISDN_uevent(struct device *dev, struct kobj_uevent_env *env) { struct mISDNdevice *mdev = dev_to_mISDN(dev); @@ -153,7 +152,6 @@ static int mISDN_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } -#endif static void mISDN_class_release(struct class *cls) { @@ -163,9 +161,7 @@ static void mISDN_class_release(struct class *cls) static struct class mISDN_class = { .name = "mISDN", .owner = THIS_MODULE, -#ifdef CONFIG_HOTPLUG .dev_uevent = mISDN_uevent, -#endif .dev_attrs = mISDN_dev_attrs, .dev_release = mISDN_dev_release, .class_release = mISDN_class_release, -- cgit v1.2.3-59-g8ed1b From d721a1752ba544df8d7d36959038b26bc92bdf80 Mon Sep 17 00:00:00 2001 From: Tilman Schmidt Date: Mon, 21 Jan 2013 11:57:21 +0000 Subject: isdn/gigaset: fix zero size border case in debug dump If subtracting 12 from l leaves zero we'd do a zero size allocation, leading to an oops later when we try to set the NUL terminator. Reported-by: Dan Carpenter Signed-off-by: Tilman Schmidt Signed-off-by: David S. Miller --- drivers/isdn/gigaset/capi.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/isdn') diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c index 68452b768da2..03a0a01a4054 100644 --- a/drivers/isdn/gigaset/capi.c +++ b/drivers/isdn/gigaset/capi.c @@ -248,6 +248,8 @@ static inline void dump_rawmsg(enum debuglevel level, const char *tag, CAPIMSG_APPID(data), CAPIMSG_MSGID(data), l, CAPIMSG_CONTROL(data)); l -= 12; + if (l <= 0) + return; dbgline = kmalloc(3 * l, GFP_ATOMIC); if (!dbgline) return; -- cgit v1.2.3-59-g8ed1b