Message ID | 1546872111-5627-1-git-send-email-john.garry@huawei.com |
---|---|
State | New |
Headers | show |
Series | scsi: sd: Make protection lookup tables static | expand |
On Mon, 2019-01-07 at 22:41 +0800, John Garry wrote: > Currently the protection lookup tables in sd_prot_flag_mask() and > sd_prot_op() are declared 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 Since the sd_prot_op() function only has a single caller, please move it from sd.h into sd.c. Thanks, Bart.
On 07/01/2019 16:57, Bart Van Assche wrote: > On Mon, 2019-01-07 at 22:41 +0800, John Garry wrote: >> Currently the protection lookup tables in sd_prot_flag_mask() and >> sd_prot_op() are declared 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 > > Since the sd_prot_op() function only has a single caller, please move it from sd.h > into sd.c. Can do, as long as no one has objection. Function sd_prot_flag_mask() also has a single caller AFAICS, so this could also be relocated. Cheers, John > > Thanks, > > Bart. > >
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h index 1d63f3a..89e6d42 100644 --- a/drivers/scsi/sd.h +++ b/drivers/scsi/sd.h @@ -195,15 +195,15 @@ static inline sector_t sectors_to_logical(struct scsi_device *sdev, sector_t sec 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 */ + 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]; @@ -215,7 +215,7 @@ static inline unsigned int sd_prot_op(bool write, bool dix, bool dif) */ static inline unsigned int sd_prot_flag_mask(unsigned int prot_op) { - const unsigned int flag_mask[] = { + static const unsigned int flag_mask[] = { [SCSI_PROT_NORMAL] = 0, [SCSI_PROT_READ_STRIP] = SCSI_PROT_TRANSFER_PI |
Currently the protection lookup tables in sd_prot_flag_mask() and sd_prot_op() are declared 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 Signed-off-by: John Garry <john.garry@huawei.com> -- 1.9.1