OSDN Git Service

qla2xxx: ISP27xx optimize fwdump entry table lookup.
authorJoe Carnuccio <joe.carnuccio@qlogic.com>
Thu, 25 Sep 2014 09:16:33 +0000 (05:16 -0400)
committerChristoph Hellwig <hch@lst.de>
Thu, 25 Sep 2014 12:25:01 +0000 (14:25 +0200)
Since the entry call array is sorted in order of entry type opcode,
the search can be terminated as soon as the search key is exceeded.

Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/qla2xxx/qla_tmpl.c

index 252de5d..29271cc 100644 (file)
@@ -726,7 +726,7 @@ qla27xx_fwdt_entry_other(struct scsi_qla_host *vha,
 }
 
 struct qla27xx_fwdt_entry_call {
-       int type;
+       uint type;
        int (*call)(
            struct scsi_qla_host *,
            struct qla27xx_fwdt_entry *,
@@ -759,15 +759,17 @@ static struct qla27xx_fwdt_entry_call ql27xx_fwdt_entry_call_list[] = {
        { -1                            , qla27xx_fwdt_entry_other }
 };
 
-static inline int (*qla27xx_find_entry(int type))
+static inline int (*qla27xx_find_entry(uint type))
        (struct scsi_qla_host *, struct qla27xx_fwdt_entry *, void *, ulong *)
 {
        struct qla27xx_fwdt_entry_call *list = ql27xx_fwdt_entry_call_list;
 
-       while (list->type != -1 && list->type != type)
+       while (list->type < type)
                list++;
 
-       return list->call;
+       if (list->type == type)
+               return list->call;
+       return qla27xx_fwdt_entry_other;
 }
 
 static inline void *