viostor driver. Complete SRBs at DPC level
PATCH 1/1 viostor driver. Complete SRBs at DPC level
repository: /home/vadimr/shares/kvm-guest-drivers-windows
branch: master
commit c507d6b279010ff1e1939927d2b2e91a59daac3b
Author: Vadim Rozenfeld<[email protected]> Date: Thu Sep 24 22:03:00 2009 +0300
[PATCH] viostor driver. Complete SRBs at DPC level
Signed-off-by Vadim Rozenfeld<[email protected]>
viostor/virtio_stor.c +101 -2
@@ -30,6 +30,14 @@ VirtIoBuildIo( IN PVOID DeviceExtension, IN PSCSI_REQUEST_BLOCK Srb ); + +VOID +CompleteDpcRoutine ( + IN PSTOR_DPC Dpc, + IN PVOID Context, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ) ;#endif BOOLEAN
@@ -91,6 +99,13 @@ CompleteSRB( IN PSCSI_REQUEST_BLOCK Srb ); +VOID +FORCEINLINE +CompleteDPC ( + IN PVOID DeviceExtension, + IN pblk_req vbr + ); + ULONG DriverEntry( IN PVOID DriverObject,
@@ -325,10 +340,28 @@ VirtIoFindAdapter( }InitializeListHead (&adaptExt->list_head); +InitializeListHead (&adaptExt->complete_list);return SP_RETURN_FOUND ; } +#ifdef USE_STORPORT +BOOLEAN +VirtIoPassiveInitializeRoutine ( + IN PVOID DeviceExtension + ) +{ +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension; + +StorPortInitializeDpc (DeviceExtension, +&adaptExt->completion_dpc, + CompleteDpcRoutine); + +return TRUE; +} +#endif + + BOOLEAN VirtIoHwInitialize( IN PVOID DeviceExtension
@@ -400,6 +433,13 @@ VirtIoHwInitialize(ScsiPortMoveMemory (&adaptExt->inquiry_data.ProductRevisionLevel,"0001" ,sizeof ("0001" ));ScsiPortMoveMemory (&adaptExt->inquiry_data.VendorSpecific,"0001" ,sizeof ("0001" )); +#ifdef USE_STORPORT +if (!adaptExt->dump_mode) + { +return StorPortEnablePassiveInitialization (DeviceExtension, VirtIoPassiveInitializeRoutine); + } +#endif +return TRUE; }
@@ -564,8 +604,7 @@ VirtIoInterrupt( Srb->SrbStatus =SRB_STATUS_ERROR ;break ; } -RemoveEntryList (&vbr->list_entry); -CompleteSRB (DeviceExtension, Srb); +CompleteDPC (DeviceExtension, vbr); } }RhelDbgPrint (TRACE_LEVEL_VERBOSE , ("%s isInterruptServiced = %d\n" , __FUNCTION__, isInterruptServiced));
@@ -974,3 +1013,63 @@ CompleteSRB( Srb->Lun);#endif } + +VOID +FORCEINLINE +CompleteDPC ( + IN PVOID DeviceExtension, + IN pblk_req vbr + ) +{ +PSCSI_REQUEST_BLOCK Srb = (PSCSI_REQUEST_BLOCK )vbr->req; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )DeviceExtension; + +RemoveEntryList (&vbr->list_entry); + +#ifdef USE_STORPORT +if (!adaptExt->dump_mode) { +InsertTailList (&adaptExt->complete_list,&vbr->list_entry); +StorPortIssueDpc (DeviceExtension, +&adaptExt->completion_dpc, +NULL , +NULL ); +return ; + } +#endif +CompleteSRB (DeviceExtension, Srb); +} + + +VOID +CompleteDpcRoutine ( + IN PSTOR_DPC Dpc, + IN PVOID Context, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ) +{ +STOR_LOCK_HANDLE LockHandle; +PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION )Context; + +StorPortAcquireSpinLock ( Context, InterruptLock ,NULL ,&LockHandle); + +while (!IsListEmpty (&adaptExt->complete_list)) { +PSCSI_REQUEST_BLOCK Srb; +pblk_req vbr; + vbr = (pblk_req )RemoveHeadList (&adaptExt->complete_list); + Srb = (PSCSI_REQUEST_BLOCK )vbr->req; + +StorPortReleaseSpinLock (Context,&LockHandle); + +ScsiPortNotification (RequestComplete, + Context, + Srb); + +StorPortAcquireSpinLock ( Context, InterruptLock ,NULL ,&LockHandle); + + } + +StorPortReleaseSpinLock (Context,&LockHandle); + +return ; +}
viostor/virtio_stor.h +2 -0
@@ -95,6 +95,8 @@ typedef struct _ADAPTER_EXTENSION {ULONG queue_depth;BOOLEAN dump_mode;LIST_ENTRY list_head; +LIST_ENTRY complete_list; +STOR_DPC completion_dpc; }ADAPTER_EXTENSION , *PADAPTER_EXTENSION ; typedef struct _RHEL_SRB_EXTENSION {
--
To unsubscribe from this list: send the line "unsubscribe kvm-commits" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
viostor/virtio_stor.c +101 -2
140 lines not on this page · raw message
viostor/virtio_stor.h +2 -0
@@ -95,6 +95,8 @@ typedef struct _ADAPTER_EXTENSION {ULONG queue_depth;BOOLEAN dump_mode;LIST_ENTRY list_head; +LIST_ENTRY complete_list; +STOR_DPC completion_dpc; }ADAPTER_EXTENSION , *PADAPTER_EXTENSION ; typedef struct _RHEL_SRB_EXTENSION {