diff options
| -rw-r--r-- | drivers/char/mxser_new.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c index 945c7e1b4c34..042d1381ff6f 100644 --- a/drivers/char/mxser_new.c +++ b/drivers/char/mxser_new.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | #define MXSER_BOARDS 4 /* Max. boards */ | 56 | #define MXSER_BOARDS 4 /* Max. boards */ |
| 57 | #define MXSER_PORTS_PER_BOARD 8 /* Max. ports per board */ | 57 | #define MXSER_PORTS_PER_BOARD 8 /* Max. ports per board */ |
| 58 | #define MXSER_PORTS (MXSER_BOARDS * MXSER_PORTS_PER_BOARD) | 58 | #define MXSER_PORTS (MXSER_BOARDS * MXSER_PORTS_PER_BOARD) |
| 59 | #define MXSER_ISR_PASS_LIMIT 99999L | 59 | #define MXSER_ISR_PASS_LIMIT 100 |
| 60 | 60 | ||
| 61 | #define MXSER_ERR_IOADDR -1 | 61 | #define MXSER_ERR_IOADDR -1 |
| 62 | #define MXSER_ERR_IRQ -2 | 62 | #define MXSER_ERR_IRQ -2 |
| @@ -2222,8 +2222,7 @@ static irqreturn_t mxser_interrupt(int irq, void *dev_id) | |||
| 2222 | struct mxser_board *brd = NULL; | 2222 | struct mxser_board *brd = NULL; |
| 2223 | struct mxser_port *port; | 2223 | struct mxser_port *port; |
| 2224 | int max, irqbits, bits, msr; | 2224 | int max, irqbits, bits, msr; |
| 2225 | int pass_counter = 0; | 2225 | unsigned int int_cnt, pass_counter = 0; |
| 2226 | unsigned int int_cnt; | ||
| 2227 | int handled = IRQ_NONE; | 2226 | int handled = IRQ_NONE; |
| 2228 | 2227 | ||
| 2229 | for (i = 0; i < MXSER_BOARDS; i++) | 2228 | for (i = 0; i < MXSER_BOARDS; i++) |
| @@ -2237,7 +2236,7 @@ static irqreturn_t mxser_interrupt(int irq, void *dev_id) | |||
| 2237 | if (brd == NULL) | 2236 | if (brd == NULL) |
| 2238 | goto irq_stop; | 2237 | goto irq_stop; |
| 2239 | max = brd->info->nports; | 2238 | max = brd->info->nports; |
| 2240 | while (1) { | 2239 | while (pass_counter++ < MXSER_ISR_PASS_LIMIT) { |
| 2241 | irqbits = inb(brd->vector) & brd->vector_mask; | 2240 | irqbits = inb(brd->vector) & brd->vector_mask; |
| 2242 | if (irqbits == brd->vector_mask) | 2241 | if (irqbits == brd->vector_mask) |
| 2243 | break; | 2242 | break; |
| @@ -2308,8 +2307,6 @@ static irqreturn_t mxser_interrupt(int irq, void *dev_id) | |||
| 2308 | } while (int_cnt++ < MXSER_ISR_PASS_LIMIT); | 2307 | } while (int_cnt++ < MXSER_ISR_PASS_LIMIT); |
| 2309 | spin_unlock(&port->slock); | 2308 | spin_unlock(&port->slock); |
| 2310 | } | 2309 | } |
| 2311 | if (pass_counter++ > MXSER_ISR_PASS_LIMIT) | ||
| 2312 | break; /* Prevent infinite loops */ | ||
| 2313 | } | 2310 | } |
| 2314 | 2311 | ||
| 2315 | irq_stop: | 2312 | irq_stop: |
