| From 3cd6d3d9b1abab8dcdf0800224ce26daac24eea2 Mon Sep 17 00:00:00 2001 |
| From: Long Li <longli@microsoft.com> |
| Date: Wed, 14 Dec 2016 18:46:01 -0800 |
| Subject: scsi: storvsc: use tagged SRB requests if supported by the device |
| |
| From: Long Li <longli@microsoft.com> |
| |
| commit 3cd6d3d9b1abab8dcdf0800224ce26daac24eea2 upstream. |
| |
| 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> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/storvsc_drv.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/scsi/storvsc_drv.c |
| +++ b/drivers/scsi/storvsc_drv.c |
| @@ -136,6 +136,8 @@ struct hv_fc_wwn_packet { |
| #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000 |
| #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 - |
| @@ -1451,6 +1453,13 @@ static int storvsc_queuecommand(struct S |
| vm_srb->win8_extension.srb_flags |= |
| 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 */ |
| switch (scmnd->sc_data_direction) { |
| case DMA_TO_DEVICE: |