Commit 9ebb4d70 authored by Ming Lei's avatar Ming Lei Committed by Martin K. Petersen

scsi: core: Put hot fields of scsi_host_template in one cacheline

The following three fields of scsi_host_template are referenced in the SCSI
I/O submission hot path. Put them together in one cacheline:

 - cmd_size

 - queuecommand

 - commit_rqs

Link: https://lore.kernel.org/r/20210122023317.687987-10-ming.lei@redhat.com
Cc: Omar Sandoval <osandov@fb.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumanesh Samanta <sumanesh.samanta@broadcom.com>
Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
Tested-by: default avatarSumanesh Samanta <sumanesh.samanta@broadcom.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 2a5a24aa
...@@ -30,40 +30,15 @@ struct scsi_transport_template; ...@@ -30,40 +30,15 @@ struct scsi_transport_template;
#define MODE_TARGET 0x02 #define MODE_TARGET 0x02
struct scsi_host_template { struct scsi_host_template {
struct module *module;
const char *name;
/* /*
* The info function will return whatever useful information the * Put fields referenced in IO submission path together in
* developer sees fit. If not provided, then the name field will * same cacheline
* be used instead.
*
* Status: OPTIONAL
*/ */
const char *(* info)(struct Scsi_Host *);
/* /*
* Ioctl interface * Additional per-command data allocated for the driver.
*
* Status: OPTIONAL
*/
int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
void __user *arg);
#ifdef CONFIG_COMPAT
/*
* Compat handler. Handle 32bit ABI.
* When unknown ioctl is passed return -ENOIOCTLCMD.
*
* Status: OPTIONAL
*/ */
int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd, unsigned int cmd_size;
void __user *arg);
#endif
int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
/* /*
* The queuecommand function is used to queue up a scsi * The queuecommand function is used to queue up a scsi
...@@ -111,6 +86,41 @@ struct scsi_host_template { ...@@ -111,6 +86,41 @@ struct scsi_host_template {
*/ */
void (*commit_rqs)(struct Scsi_Host *, u16); void (*commit_rqs)(struct Scsi_Host *, u16);
struct module *module;
const char *name;
/*
* The info function will return whatever useful information the
* developer sees fit. If not provided, then the name field will
* be used instead.
*
* Status: OPTIONAL
*/
const char *(*info)(struct Scsi_Host *);
/*
* Ioctl interface
*
* Status: OPTIONAL
*/
int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
void __user *arg);
#ifdef CONFIG_COMPAT
/*
* Compat handler. Handle 32bit ABI.
* When unknown ioctl is passed return -ENOIOCTLCMD.
*
* Status: OPTIONAL
*/
int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
void __user *arg);
#endif
int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
/* /*
* This is an error handling strategy routine. You don't need to * This is an error handling strategy routine. You don't need to
* define one of these if you don't want to - there is a default * define one of these if you don't want to - there is a default
...@@ -484,10 +494,6 @@ struct scsi_host_template { ...@@ -484,10 +494,6 @@ struct scsi_host_template {
*/ */
u64 vendor_id; u64 vendor_id;
/*
* Additional per-command data allocated for the driver.
*/
unsigned int cmd_size;
struct scsi_host_cmd_pool *cmd_pool; struct scsi_host_cmd_pool *cmd_pool;
/* Delay for runtime autosuspend */ /* Delay for runtime autosuspend */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment