scsi: sd: Make protection lookup tables static and relocate functions
authorJohn Garry <john.garry@huawei.com>
Tue, 8 Jan 2019 15:14:52 +0000 (23:14 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 9 Jan 2019 03:29:32 +0000 (22:29 -0500)
Currently the protection lookup tables in sd_prot_flag_mask() and
sd_prot_op() are declared as non-static. As such, they will be rebuilt for
each respective function call.

Optimise by making them static.

This saves ~100B object code for sd.c:

Before:
   text    data     bss     dec     hex filename
  25403    1024      16   26443    674b drivers/scsi/sd.o

After:
  text    data     bss     dec     hex filename
  25299    1024      16   26339    66e3 drivers/scsi/sd.o

In addition, since those same functions are declared in sd.h, but each are
only referenced in sd.c, relocate them to that same c file.

The inline specifier is dropped also, since gcc should be able to make the
decision to inline.

Signed-off-by: John Garry <john.garry@huawei.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/sd.c
drivers/scsi/sd.h

index a1a44f5..c6ca3d9 100644 (file)
@@ -659,6 +659,68 @@ static int sd_sec_submit(void *data, u16 spsp, u8 secp, void *buffer,
 }
 #endif /* CONFIG_BLK_SED_OPAL */
 
+/*
+ * Look up the DIX operation based on whether the command is read or
+ * write and whether dix and dif are enabled.
+ */
+static unsigned int sd_prot_op(bool write, bool dix, bool dif)
+{
+       /* Lookup table: bit 2 (write), bit 1 (dix), bit 0 (dif) */
+       static const unsigned int ops[] = {     /* wrt dix dif */
+               SCSI_PROT_NORMAL,               /*  0   0   0  */
+               SCSI_PROT_READ_STRIP,           /*  0   0   1  */
+               SCSI_PROT_READ_INSERT,          /*  0   1   0  */
+               SCSI_PROT_READ_PASS,            /*  0   1   1  */
+               SCSI_PROT_NORMAL,               /*  1   0   0  */
+               SCSI_PROT_WRITE_INSERT,         /*  1   0   1  */
+               SCSI_PROT_WRITE_STRIP,          /*  1   1   0  */
+               SCSI_PROT_WRITE_PASS,           /*  1   1   1  */
+       };
+
+       return ops[write << 2 | dix << 1 | dif];
+}
+
+/*
+ * Returns a mask of the protection flags that are valid for a given DIX
+ * operation.
+ */
+static unsigned int sd_prot_flag_mask(unsigned int prot_op)
+{
+       static const unsigned int flag_mask[] = {
+               [SCSI_PROT_NORMAL]              = 0,
+
+               [SCSI_PROT_READ_STRIP]          = SCSI_PROT_TRANSFER_PI |
+                                                 SCSI_PROT_GUARD_CHECK |
+                                                 SCSI_PROT_REF_CHECK |
+                                                 SCSI_PROT_REF_INCREMENT,
+
+               [SCSI_PROT_READ_INSERT]         = SCSI_PROT_REF_INCREMENT |
+                                                 SCSI_PROT_IP_CHECKSUM,
+
+               [SCSI_PROT_READ_PASS]           = SCSI_PROT_TRANSFER_PI |
+                                                 SCSI_PROT_GUARD_CHECK |
+                                                 SCSI_PROT_REF_CHECK |
+                                                 SCSI_PROT_REF_INCREMENT |
+                                                 SCSI_PROT_IP_CHECKSUM,
+
+               [SCSI_PROT_WRITE_INSERT]        = SCSI_PROT_TRANSFER_PI |
+                                                 SCSI_PROT_REF_INCREMENT,
+
+               [SCSI_PROT_WRITE_STRIP]         = SCSI_PROT_GUARD_CHECK |
+                                                 SCSI_PROT_REF_CHECK |
+                                                 SCSI_PROT_REF_INCREMENT |
+                                                 SCSI_PROT_IP_CHECKSUM,
+
+               [SCSI_PROT_WRITE_PASS]          = SCSI_PROT_TRANSFER_PI |
+                                                 SCSI_PROT_GUARD_CHECK |
+                                                 SCSI_PROT_REF_CHECK |
+                                                 SCSI_PROT_REF_INCREMENT |
+                                                 SCSI_PROT_IP_CHECKSUM,
+       };
+
+       return flag_mask[prot_op];
+}
+
 static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
                                           unsigned int dix, unsigned int dif)
 {
index 7f43e68..1080c85 100644 (file)
@@ -188,68 +188,6 @@ static inline sector_t sectors_to_logical(struct scsi_device *sdev, sector_t sec
        return sector >> (ilog2(sdev->sector_size) - 9);
 }
 
-/*
- * Look up the DIX operation based on whether the command is read or
- * write and whether dix and dif are enabled.
- */
-static inline unsigned int sd_prot_op(bool write, bool dix, bool dif)
-{
-       /* Lookup table: bit 2 (write), bit 1 (dix), bit 0 (dif) */
-       const unsigned int ops[] = {    /* wrt dix dif */
-               SCSI_PROT_NORMAL,       /*  0   0   0  */
-               SCSI_PROT_READ_STRIP,   /*  0   0   1  */
-               SCSI_PROT_READ_INSERT,  /*  0   1   0  */
-               SCSI_PROT_READ_PASS,    /*  0   1   1  */
-               SCSI_PROT_NORMAL,       /*  1   0   0  */
-               SCSI_PROT_WRITE_INSERT, /*  1   0   1  */
-               SCSI_PROT_WRITE_STRIP,  /*  1   1   0  */
-               SCSI_PROT_WRITE_PASS,   /*  1   1   1  */
-       };
-
-       return ops[write << 2 | dix << 1 | dif];
-}
-
-/*
- * Returns a mask of the protection flags that are valid for a given DIX
- * operation.
- */
-static inline unsigned int sd_prot_flag_mask(unsigned int prot_op)
-{
-       const unsigned int flag_mask[] = {
-               [SCSI_PROT_NORMAL]              = 0,
-
-               [SCSI_PROT_READ_STRIP]          = SCSI_PROT_TRANSFER_PI |
-                                                 SCSI_PROT_GUARD_CHECK |
-                                                 SCSI_PROT_REF_CHECK |
-                                                 SCSI_PROT_REF_INCREMENT,
-
-               [SCSI_PROT_READ_INSERT]         = SCSI_PROT_REF_INCREMENT |
-                                                 SCSI_PROT_IP_CHECKSUM,
-
-               [SCSI_PROT_READ_PASS]           = SCSI_PROT_TRANSFER_PI |
-                                                 SCSI_PROT_GUARD_CHECK |
-                                                 SCSI_PROT_REF_CHECK |
-                                                 SCSI_PROT_REF_INCREMENT |
-                                                 SCSI_PROT_IP_CHECKSUM,
-
-               [SCSI_PROT_WRITE_INSERT]        = SCSI_PROT_TRANSFER_PI |
-                                                 SCSI_PROT_REF_INCREMENT,
-
-               [SCSI_PROT_WRITE_STRIP]         = SCSI_PROT_GUARD_CHECK |
-                                                 SCSI_PROT_REF_CHECK |
-                                                 SCSI_PROT_REF_INCREMENT |
-                                                 SCSI_PROT_IP_CHECKSUM,
-
-               [SCSI_PROT_WRITE_PASS]          = SCSI_PROT_TRANSFER_PI |
-                                                 SCSI_PROT_GUARD_CHECK |
-                                                 SCSI_PROT_REF_CHECK |
-                                                 SCSI_PROT_REF_INCREMENT |
-                                                 SCSI_PROT_IP_CHECKSUM,
-       };
-
-       return flag_mask[prot_op];
-}
-
 #ifdef CONFIG_BLK_DEV_INTEGRITY
 
 extern void sd_dif_config_host(struct scsi_disk *);