forked from Minki/linux
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: Sumanesh Samanta <sumanesh.samanta@broadcom.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
2a5a24aa83
commit
9ebb4d70dc
@ -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;
|
* Put fields referenced in IO submission path together in
|
||||||
|
* same cacheline
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The info function will return whatever useful information the
|
* Additional per-command data allocated for the driver.
|
||||||
* developer sees fit. If not provided, then the name field will
|
|
||||||
* be used instead.
|
|
||||||
*
|
|
||||||
* Status: OPTIONAL
|
|
||||||
*/
|
*/
|
||||||
const char *(* info)(struct Scsi_Host *);
|
unsigned int cmd_size;
|
||||||
|
|
||||||
/*
|
|
||||||
* 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);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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 {
|
|||||||
*/
|
*/
|
||||||
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 {
|
|||||||
*/
|
*/
|
||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user