Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f07ef395ad4cd050e695edfec217ceb2158220a3
Commit:     f07ef395ad4cd050e695edfec217ceb2158220a3
Parent:     080eb42f31a8a6dde1568f906692d9914cdfbfe8
Author:     Jeff Garzik <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 23 19:12:11 2007 -0400
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Tue Oct 23 19:53:17 2007 -0400

    drivers/char/riscom8: clean up irq handling
    
    Make irq handling more efficient, by passing board pointer via
    request_irq() to our irq handler's dev_id argument.
    
    This eliminates a table lookup upon each interrupt, and eliminates an
    associated global variable (the table).
    
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/char/riscom8.c |   16 +++++-----------
 1 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c
index b37e626..102ece4 100644
--- a/drivers/char/riscom8.c
+++ b/drivers/char/riscom8.c
@@ -79,7 +79,6 @@
 
 #define RS_EVENT_WRITE_WAKEUP  0
 
-static struct riscom_board * IRQ_to_board[16];
 static struct tty_driver *riscom_driver;
 
 static struct riscom_board rc_board[RC_NBOARD] =  {
@@ -537,16 +536,14 @@ static inline void rc_check_modem(struct riscom_board 
const * bp)
 }
 
 /* The main interrupt processing routine */
-static irqreturn_t rc_interrupt(int irq, void * dev_id)
+static irqreturn_t rc_interrupt(int dummy, void * dev_id)
 {
        unsigned char status;
        unsigned char ack;
-       struct riscom_board *bp;
+       struct riscom_board *bp = dev_id;
        unsigned long loop = 0;
        int handled = 0;
 
-       bp = IRQ_to_board[irq];
-
        if (!(bp->flags & RC_BOARD_ACTIVE))
                return IRQ_NONE;
 
@@ -603,7 +600,7 @@ static irqreturn_t rc_interrupt(int irq, void * dev_id)
  */
 
 /* Called with disabled interrupts */
-static inline int rc_setup_board(struct riscom_board * bp)
+static int rc_setup_board(struct riscom_board * bp)
 {
        int error;
 
@@ -611,7 +608,7 @@ static inline int rc_setup_board(struct riscom_board * bp)
                return 0;
        
        error = request_irq(bp->irq, rc_interrupt, IRQF_DISABLED,
-                           "RISCom/8", NULL);
+                           "RISCom/8", bp);
        if (error) 
                return error;
        
@@ -619,14 +616,13 @@ static inline int rc_setup_board(struct riscom_board * bp)
        bp->DTR = ~0;
        rc_out(bp, RC_DTR, bp->DTR);            /* Drop DTR on all ports */
        
-       IRQ_to_board[bp->irq] = bp;
        bp->flags |= RC_BOARD_ACTIVE;
        
        return 0;
 }
 
 /* Called with disabled interrupts */
-static inline void rc_shutdown_board(struct riscom_board *bp)
+static void rc_shutdown_board(struct riscom_board *bp)
 {
        if (!(bp->flags & RC_BOARD_ACTIVE))
                return;
@@ -634,7 +630,6 @@ static inline void rc_shutdown_board(struct riscom_board 
*bp)
        bp->flags &= ~RC_BOARD_ACTIVE;
        
        free_irq(bp->irq, NULL);
-       IRQ_to_board[bp->irq] = NULL;
        
        bp->DTR = ~0;
        rc_out(bp, RC_DTR, bp->DTR);           /* Drop DTR on all ports */
@@ -1594,7 +1589,6 @@ static inline int rc_init_drivers(void)
        if (!riscom_driver)     
                return -ENOMEM;
        
-       memset(IRQ_to_board, 0, sizeof(IRQ_to_board));
        riscom_driver->owner = THIS_MODULE;
        riscom_driver->name = "ttyL";
        riscom_driver->major = RISCOM8_NORMAL_MAJOR;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to