mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 08:46:46 +00:00
scsi: storvsc: use tagged SRB requests if supported by the device
Properly set SRB flags when hosting device supports tagged queuing. This patch improves the performance on Fiber Channel disks. Signed-off-by: Long Li <longli@microsoft.com> Reviewed-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Cc: <stable@vger.kernel.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d86adf482b
commit
3cd6d3d9b1
1 changed files with 9 additions and 0 deletions
|
@ -136,6 +136,8 @@ struct hv_fc_wwn_packet {
|
||||||
#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
|
#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
|
||||||
#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
|
#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
|
||||||
|
|
||||||
|
#define SP_UNTAGGED ((unsigned char) ~0)
|
||||||
|
#define SRB_SIMPLE_TAG_REQUEST 0x20
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Platform neutral description of a scsi request -
|
* Platform neutral description of a scsi request -
|
||||||
|
@ -1549,6 +1551,13 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
|
||||||
vm_srb->win8_extension.srb_flags |=
|
vm_srb->win8_extension.srb_flags |=
|
||||||
SRB_FLAGS_DISABLE_SYNCH_TRANSFER;
|
SRB_FLAGS_DISABLE_SYNCH_TRANSFER;
|
||||||
|
|
||||||
|
if (scmnd->device->tagged_supported) {
|
||||||
|
vm_srb->win8_extension.srb_flags |=
|
||||||
|
(SRB_FLAGS_QUEUE_ACTION_ENABLE | SRB_FLAGS_NO_QUEUE_FREEZE);
|
||||||
|
vm_srb->win8_extension.queue_tag = SP_UNTAGGED;
|
||||||
|
vm_srb->win8_extension.queue_action = SRB_SIMPLE_TAG_REQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
/* Build the SRB */
|
/* Build the SRB */
|
||||||
switch (scmnd->sc_data_direction) {
|
switch (scmnd->sc_data_direction) {
|
||||||
case DMA_TO_DEVICE:
|
case DMA_TO_DEVICE:
|
||||||
|
|
Loading…
Reference in a new issue