scsi: aic7xxx: Convert timers to use timer_setup()
authorKees Cook <keescook@chromium.org>
Fri, 18 Aug 2017 23:26:35 +0000 (16:26 -0700)
committerKees Cook <keescook@chromium.org>
Wed, 1 Nov 2017 18:27:04 +0000 (11:27 -0700)
stat_timer only ever assigns the same function and data, so consolidate
to using timer_setup(), adjust callback, drop everything else used
to pass things around, and remove needless typedefs.

reset_timer is unused; remove it.

Cc: Hannes Reinecke <hare@suse.com>
Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aic7xxx/aic79xx.h
drivers/scsi/aic7xxx/aic79xx_core.c
drivers/scsi/aic7xxx/aic79xx_osm.h

index d47b527..31f2bb9 100644 (file)
@@ -1046,8 +1046,6 @@ typedef enum {
 
 typedef uint8_t ahd_mode_state;
 
-typedef void ahd_callback_t (void *);
-
 struct ahd_completion
 {
        uint16_t        tag;
@@ -1122,8 +1120,7 @@ struct ahd_softc {
        /*
         * Timer handles for timer driven callbacks.
         */
-       ahd_timer_t               reset_timer;
-       ahd_timer_t               stat_timer;
+       struct timer_list       stat_timer;
 
        /*
         * Statistics.
index 95d8f25..b560f39 100644 (file)
@@ -207,7 +207,7 @@ static void         ahd_add_scb_to_free_list(struct ahd_softc *ahd,
 static u_int           ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid,
                                     u_int prev, u_int next, u_int tid);
 static void            ahd_reset_current_bus(struct ahd_softc *ahd);
-static ahd_callback_t  ahd_stat_timer;
+static void            ahd_stat_timer(struct timer_list *t);
 #ifdef AHD_DUMP_SEQ
 static void            ahd_dumpseq(struct ahd_softc *ahd);
 #endif
@@ -6104,8 +6104,7 @@ ahd_alloc(void *platform_arg, char *name)
        ahd->bugs = AHD_BUGNONE;
        ahd->flags = AHD_SPCHK_ENB_A|AHD_RESET_BUS_A|AHD_TERM_ENB_A
                   | AHD_EXTENDED_TRANS_A|AHD_STPWLEVEL_A;
-       ahd_timer_init(&ahd->reset_timer);
-       ahd_timer_init(&ahd->stat_timer);
+       timer_setup(&ahd->stat_timer, ahd_stat_timer, 0);
        ahd->int_coalescing_timer = AHD_INT_COALESCING_TIMER_DEFAULT;
        ahd->int_coalescing_maxcmds = AHD_INT_COALESCING_MAXCMDS_DEFAULT;
        ahd->int_coalescing_mincmds = AHD_INT_COALESCING_MINCMDS_DEFAULT;
@@ -6235,8 +6234,7 @@ ahd_shutdown(void *arg)
        /*
         * Stop periodic timer callbacks.
         */
-       ahd_timer_stop(&ahd->reset_timer);
-       ahd_timer_stop(&ahd->stat_timer);
+       del_timer_sync(&ahd->stat_timer);
 
        /* This will reset most registers to 0, but not all */
        ahd_reset(ahd, /*reinit*/FALSE);
@@ -7039,20 +7037,11 @@ static const char *termstat_strings[] = {
 };
 
 /***************************** Timer Facilities *******************************/
-#define ahd_timer_init init_timer
-#define ahd_timer_stop del_timer_sync
-typedef void ahd_linux_callback_t (u_long);
-
 static void
-ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg)
+ahd_timer_reset(struct timer_list *timer, int usec)
 {
-       struct ahd_softc *ahd;
-
-       ahd = (struct ahd_softc *)arg;
        del_timer(timer);
-       timer->data = (u_long)arg;
        timer->expires = jiffies + (usec * HZ)/1000000;
-       timer->function = (ahd_linux_callback_t*)func;
        add_timer(timer);
 }
 
@@ -7279,8 +7268,7 @@ ahd_init(struct ahd_softc *ahd)
        }
 init_done:
        ahd_restart(ahd);
-       ahd_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US,
-                       ahd_stat_timer, ahd);
+       ahd_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US);
        return (0);
 }
 
@@ -8878,9 +8866,9 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset)
 
 /**************************** Statistics Processing ***************************/
 static void
-ahd_stat_timer(void *arg)
+ahd_stat_timer(struct timer_list *t)
 {
-       struct  ahd_softc *ahd = arg;
+       struct  ahd_softc *ahd = from_timer(ahd, t, stat_timer);
        u_long  s;
        int     enint_coal;
        
@@ -8907,8 +8895,7 @@ ahd_stat_timer(void *arg)
        ahd->cmdcmplt_bucket = (ahd->cmdcmplt_bucket+1) & (AHD_STAT_BUCKETS-1);
        ahd->cmdcmplt_total -= ahd->cmdcmplt_counts[ahd->cmdcmplt_bucket];
        ahd->cmdcmplt_counts[ahd->cmdcmplt_bucket] = 0;
-       ahd_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US,
-                       ahd_stat_timer, ahd);
+       ahd_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US);
        ahd_unlock(ahd, &s);
 }
 
index 728193a..8a8b7ae 100644 (file)
@@ -203,9 +203,6 @@ int ahd_dmamap_unload(struct ahd_softc *, bus_dma_tag_t, bus_dmamap_t);
  */
 #define ahd_dmamap_sync(ahd, dma_tag, dmamap, offset, len, op)
 
-/************************** Timer DataStructures ******************************/
-typedef struct timer_list ahd_timer_t;
-
 /********************************** Includes **********************************/
 #ifdef CONFIG_AIC79XX_REG_PRETTY_PRINT
 #define AIC_DEBUG_REGISTERS 1
@@ -214,10 +211,6 @@ typedef struct timer_list ahd_timer_t;
 #endif
 #include "aic79xx.h"
 
-/***************************** Timer Facilities *******************************/
-#define ahd_timer_init init_timer
-#define ahd_timer_stop del_timer_sync
-
 /***************************** SMP support ************************************/
 #include <linux/spinlock.h>