viostor driver. Xp driver performance.
PATCH 1/1 viostor driver. Xp driver performance.
repository: /home/vadimr/shares/kvm-guest-drivers-windows
branch: XP
commit 3b2926a281a769499944a23cc3c9b905593e6838
Author: Vadim Rozenfeld<[email protected]> Date: Thu Nov 19 09:14:38 2009 +0200
[PATCH] viostor driver. Xp driver performance.
Signed-off-by Vadim Rozenfeld<[email protected]>
viostor/virtio_stor.c +17 -14
@@ -215,6 +215,7 @@ VirtIoFindAdapter( ConfigInfo->Dma32BitAddresses = TRUE; ConfigInfo->Dma64BitAddresses = TRUE; ConfigInfo->WmiDataProvider = FALSE; +#ifdef USE_STORPORT ConfigInfo->MapBuffers =STOR_MAP_NON_READ_WRITE_BUFFERS ; ConfigInfo->SynchronizationModel = StorSynchronizeFullDuplex;
@@ -286,7 +287,7 @@ VirtIoFindAdapter(if (adaptExt->dump_mode) { ConfigInfo->NumberOfPhysicalBreaks =8 ; }else { - ConfigInfo->NumberOfPhysicalBreaks =16 ; + ConfigInfo->NumberOfPhysicalBreaks =MAX_PHYS_SEGMENTS -1 ; } ConfigInfo->MaximumTransferLength = ConfigInfo->NumberOfPhysicalBreaks *PAGE_SIZE ;
@@ -316,7 +317,6 @@ VirtIoFindAdapter(InitializeListHead (&adaptExt->list_head);InitializeListHead (&adaptExt->complete_list); -return SP_RETURN_FOUND ; }
@@ -470,9 +470,7 @@ VirtIoStartIo( {PCDB cdb = (PCDB )&Srb->Cdb[0 ]; -PADAPTER_EXTENSION adaptExt; - - adaptExt = (PADAPTER_EXTENSION )DeviceExtension; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension;switch (Srb->Function) {case SRB_FUNCTION_EXECUTE_SCSI :
@@ -591,7 +589,6 @@ VirtIoStartIo(return TRUE; } - BOOLEAN VirtIoInterrupt( IN PVOID DeviceExtension
@@ -600,12 +597,10 @@ VirtIoInterrupt(pblk_req vbr;unsigned int len;unsigned long flags; -PADAPTER_EXTENSION adaptExt; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension;BOOLEAN isInterruptServiced = FALSE;PSCSI_REQUEST_BLOCK Srb; - adaptExt = (PADAPTER_EXTENSION )DeviceExtension; -RhelDbgPrint (TRACE_LEVEL_VERBOSE , ("%s (%d)\n" , __FUNCTION__,KeGetCurrentIrql ()));if (VirtIODeviceISR (DeviceExtension)>0 ) {
@@ -1019,7 +1014,6 @@ RhelGetLba(PCDB Cdb ) { -EIGHT_BYTE lba;switch (Cdb->CDB6GENERIC.OperationCode) {
@@ -1094,7 +1088,7 @@ CompleteDPC( {PSCSI_REQUEST_BLOCK Srb = (PSCSI_REQUEST_BLOCK )vbr->req;PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension; - +PRHEL_SRB_EXTENSION srbExt = (PRHEL_SRB_EXTENSION )Srb->SrbExtension;RemoveEntryList (&vbr->list_entry);#ifdef USE_STORPORT
@@ -1106,13 +1100,22 @@ CompleteDPC( NULL);return ; } -#endif CompleteSRB (DeviceExtension, Srb); -#ifndef USE_STORPORT - --adaptExt->requests; +#else +ScsiPortNotification (RequestComplete, + DeviceExtension, + Srb); +if (srbExt->call_next) { +ScsiPortNotification (NextLuRequest, + DeviceExtension, + Srb->PathId, + Srb->TargetId, + Srb->Lun); + }#endif } +#ifdef USE_STORPORT VOID CompleteDpcRoutine(
viostor/virtio_stor.h +5 -3
@@ -52,7 +52,7 @@ typedef struct VirtIOBufferDescriptor VIO_SG, *PVIO_SG;#define VIRTIO_BLK_S_UNSUPP 2#define SECTOR_SIZE 512 -#define MAX_PHYS_SEGMENTS 128 +#define MAX_PHYS_SEGMENTS 17 //128#define VIRTIO_MAX_SG (3+MAX_PHYS_SEGMENTS)#define IO_PORT_LENGTH 0x40
@@ -105,8 +105,6 @@ typedef struct _ADAPTER_EXTENSION {LIST_ENTRY complete_list;#ifdef USE_STORPORT STOR_DPC completion_dpc; -#else -ULONG requests;#endif BOOLEAN has_sn;ULONG msix_vectors;
@@ -116,6 +114,10 @@ typedef struct _RHEL_SRB_EXTENSION {blk_req vbr;ULONG out;ULONG in; +PSCSI_REQUEST_BLOCK srb; +#ifndef USE_STORPORT +BOOLEAN call_next; +#endif }RHEL_SRB_EXTENSION , *PRHEL_SRB_EXTENSION ;ULONGLONG
viostor/virtio_stor.c +17 -14
@@ -215,6 +215,7 @@ VirtIoFindAdapter( ConfigInfo->Dma32BitAddresses = TRUE; ConfigInfo->Dma64BitAddresses = TRUE; ConfigInfo->WmiDataProvider = FALSE; +#ifdef USE_STORPORT ConfigInfo->MapBuffers =STOR_MAP_NON_READ_WRITE_BUFFERS ; ConfigInfo->SynchronizationModel = StorSynchronizeFullDuplex;
@@ -286,7 +287,7 @@ VirtIoFindAdapter(if (adaptExt->dump_mode) { ConfigInfo->NumberOfPhysicalBreaks =8 ; }else { - ConfigInfo->NumberOfPhysicalBreaks =16 ; + ConfigInfo->NumberOfPhysicalBreaks =MAX_PHYS_SEGMENTS -1 ; } ConfigInfo->MaximumTransferLength = ConfigInfo->NumberOfPhysicalBreaks *PAGE_SIZE ;
@@ -316,7 +317,6 @@ VirtIoFindAdapter(InitializeListHead (&adaptExt->list_head);InitializeListHead (&adaptExt->complete_list); -return SP_RETURN_FOUND ; }
@@ -470,9 +470,7 @@ VirtIoStartIo( {PCDB cdb = (PCDB )&Srb->Cdb[0 ]; -PADAPTER_EXTENSION adaptExt; - - adaptExt = (PADAPTER_EXTENSION )DeviceExtension; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension;switch (Srb->Function) {case SRB_FUNCTION_EXECUTE_SCSI :
@@ -591,7 +589,6 @@ VirtIoStartIo(return TRUE; } - BOOLEAN VirtIoInterrupt( IN PVOID DeviceExtension
@@ -600,12 +597,10 @@ VirtIoInterrupt(pblk_req vbr;unsigned int len;unsigned long flags; -PADAPTER_EXTENSION adaptExt; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension;BOOLEAN isInterruptServiced = FALSE;PSCSI_REQUEST_BLOCK Srb; - adaptExt = (PADAPTER_EXTENSION )DeviceExtension; -RhelDbgPrint (TRACE_LEVEL_VERBOSE , ("%s (%d)\n" , __FUNCTION__,KeGetCurrentIrql ()));if (VirtIODeviceISR (DeviceExtension) >0 ) {
@@ -1019,7 +1014,6 @@ RhelGetLba(PCDB Cdb ) { -EIGHT_BYTE lba;switch (Cdb->CDB6GENERIC.OperationCode) {
@@ -1094,7 +1088,7 @@ CompleteDPC( {PSCSI_REQUEST_BLOCK Srb = (PSCSI_REQUEST_BLOCK )vbr->req;PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension; - +PRHEL_SRB_EXTENSION srbExt = (PRHEL_SRB_EXTENSION )Srb->SrbExtension;RemoveEntryList (&vbr->list_entry);#ifdef USE_STORPORT
@@ -1106,13 +1100,22 @@ CompleteDPC( NULL);return ; } -#endif CompleteSRB (DeviceExtension, Srb); -#ifndef USE_STORPORT - --adaptExt->requests; +#else +ScsiPortNotification (RequestComplete, + DeviceExtension, + Srb); +if (srbExt->call_next) { +ScsiPortNotification (NextLuRequest, + DeviceExtension, + Srb->PathId, + Srb->TargetId, + Srb->Lun); + }#endif } +#ifdef USE_STORPORT VOID CompleteDpcRoutine(
viostor/virtio_stor.h +5 -3
@@ -52,7 +52,7 @@ typedef struct VirtIOBufferDescriptor VIO_SG, *PVIO_SG;#define VIRTIO_BLK_S_UNSUPP 2#define SECTOR_SIZE 512 -#define MAX_PHYS_SEGMENTS 128 +#define MAX_PHYS_SEGMENTS 17 //128#define VIRTIO_MAX_SG (3+MAX_PHYS_SEGMENTS)#define IO_PORT_LENGTH 0x40
@@ -105,8 +105,6 @@ typedef struct _ADAPTER_EXTENSION {LIST_ENTRY complete_list;#ifdef USE_STORPORT STOR_DPC completion_dpc; -#else -ULONG requests;#endif BOOLEAN has_sn;ULONG msix_vectors;
@@ -116,6 +114,10 @@ typedef struct _RHEL_SRB_EXTENSION {blk_req vbr;ULONG out;ULONG in; +PSCSI_REQUEST_BLOCK srb; +#ifndef USE_STORPORT +BOOLEAN call_next; +#endif }RHEL_SRB_EXTENSION , *PRHEL_SRB_EXTENSION ;ULONGLONG