From bf876706272891678e6de7d3aa7623050e899c17 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Wed, 30 Apr 2008 00:53:45 -0700 Subject: [PATCH] --- yaml --- r: 95196 b: refs/heads/master c: 2a5413416b6b2fd8a5a38601a4fe3b56a52cfb86 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/char/moxa.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index ed7a907c223c..424226729b2e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2108eba5c531c12f5ae2ed2ef4cee7bf4246897b +refs/heads/master: 2a5413416b6b2fd8a5a38601a4fe3b56a52cfb86 diff --git a/trunk/drivers/char/moxa.c b/trunk/drivers/char/moxa.c index 797284fe5fce..abcc16eba44f 100644 --- a/trunk/drivers/char/moxa.c +++ b/trunk/drivers/char/moxa.c @@ -846,10 +846,11 @@ static int moxa_init_board(struct moxa_board_conf *brd, struct device *dev) if (ret) goto err_free; + spin_lock_bh(&moxa_lock); brd->ready = 1; - if (!timer_pending(&moxaTimer)) mod_timer(&moxaTimer, jiffies + HZ / 50); + spin_unlock_bh(&moxa_lock); return 0; err_free: @@ -1041,13 +1042,6 @@ static void __exit moxa_exit(void) { int i; - del_timer_sync(&moxaTimer); - - if (tty_unregister_driver(moxaDriver)) - printk(KERN_ERR "Couldn't unregister MOXA Intellio family " - "serial driver\n"); - put_tty_driver(moxaDriver); - #ifdef CONFIG_PCI pci_unregister_driver(&moxa_pci_driver); #endif @@ -1055,6 +1049,13 @@ static void __exit moxa_exit(void) for (i = 0; i < MAX_BOARDS; i++) /* ISA boards */ if (moxa_boards[i].ready) moxa_board_deinit(&moxa_boards[i]); + + del_timer_sync(&moxaTimer); + + if (tty_unregister_driver(moxaDriver)) + printk(KERN_ERR "Couldn't unregister MOXA Intellio family " + "serial driver\n"); + put_tty_driver(moxaDriver); } module_init(moxa_init); @@ -1432,7 +1433,7 @@ static void moxa_poll(unsigned long ignored) { struct moxa_board_conf *brd; u16 __iomem *ip; - unsigned int card, port; + unsigned int card, port, served = 0; spin_lock(&moxa_lock); for (card = 0; card < MAX_BOARDS; card++) { @@ -1440,6 +1441,8 @@ static void moxa_poll(unsigned long ignored) if (!brd->ready) continue; + served++; + ip = NULL; if (readb(brd->intPend) == 0xff) ip = brd->intTable + readb(brd->intNdx); @@ -1460,9 +1463,10 @@ static void moxa_poll(unsigned long ignored) } } moxaLowWaterChk = 0; - spin_unlock(&moxa_lock); - mod_timer(&moxaTimer, jiffies + HZ / 50); + if (served) + mod_timer(&moxaTimer, jiffies + HZ / 50); + spin_unlock(&moxa_lock); } /******************************************************************************/