@@ -1013,7 +1013,7 @@ VioScsiInterrupt(IN PVOID DeviceExtension)
10131013 }
10141014 else
10151015 {
1016- ProcessBuffer (DeviceExtension , QUEUE_TO_MESSAGE (VIRTIO_SCSI_REQUEST_QUEUE_0 ), InterruptLock );
1016+ ProcessBuffer (DeviceExtension , QUEUE_TO_MESSAGE (VIRTIO_SCSI_REQUEST_QUEUE_0 ), TRUE );
10171017 }
10181018 }
10191019
@@ -1243,14 +1243,12 @@ VioScsiUnitControl(IN PVOID DeviceExtension, IN SCSI_UNIT_CONTROL_TYPE ControlTy
12431243 ULONG vq_req_idx ;
12441244 PREQUEST_LIST element ;
12451245 STOR_LOCK_HANDLE LockHandle = {0 };
1246- PVOID LockContext = NULL ; // sanity check for LockMode = InterruptLock or StartIoLock
12471246 PSTOR_ADDR_BTL8 stor_addr = (PSTOR_ADDR_BTL8 )Parameters ;
12481247
12491248 for (vq_req_idx = 0 ; vq_req_idx < adaptExt -> num_queues ; vq_req_idx ++ )
12501249 {
12511250 element = & adaptExt -> processing_srbs [vq_req_idx ];
1252- LockContext = & adaptExt -> dpc [vq_req_idx ];
1253- StorPortAcquireSpinLock (DeviceExtension , DpcLock , LockContext , & LockHandle );
1251+ StorPortAcquireSpinLock (DeviceExtension , DpcLock , & adaptExt -> dpc [vq_req_idx ], & LockHandle );
12541252 if (!IsListEmpty (& element -> srb_list ))
12551253 {
12561254 PLIST_ENTRY entry = element -> srb_list .Flink ;
@@ -1414,14 +1412,14 @@ VOID FORCEINLINE DispatchQueue(IN PVOID DeviceExtension, IN ULONG MessageId)
14141412 & adaptExt -> dpc [MessageId - QUEUE_TO_MESSAGE (VIRTIO_SCSI_REQUEST_QUEUE_0 )],
14151413 ULongToPtr (MessageId ),
14161414 ULongToPtr (MessageId ));
1417- EXIT_FN ();
1418- return ;
1415+ } else
1416+ {
1417+ ProcessBuffer (DeviceExtension , MessageId , TRUE);
14191418 }
1420- ProcessBuffer (DeviceExtension , MessageId , InterruptLock );
14211419 EXIT_FN ();
14221420}
14231421
1424- VOID ProcessBuffer (IN PVOID DeviceExtension , IN ULONG MessageId , IN STOR_SPINLOCK LockMode )
1422+ VOID ProcessBuffer (IN PVOID DeviceExtension , IN ULONG MessageId , IN BOOLEAN DumpModeNoSync )
14251423{
14261424 PVirtIOSCSICmd cmd ;
14271425 unsigned int len ;
@@ -1433,7 +1431,6 @@ VOID ProcessBuffer(IN PVOID DeviceExtension, IN ULONG MessageId, IN STOR_SPINLOC
14331431 PSRB_EXTENSION srbExt = NULL ;
14341432 PREQUEST_LIST element ;
14351433 ULONG vq_req_idx ;
1436- PVOID LockContext = NULL ; // sanity check for LockMode = InterruptLock or StartIoLock
14371434
14381435 ENTER_FN ();
14391436
@@ -1448,12 +1445,9 @@ VOID ProcessBuffer(IN PVOID DeviceExtension, IN ULONG MessageId, IN STOR_SPINLOC
14481445
14491446 vq = adaptExt -> vq [QueueNumber ];
14501447
1451- if (LockMode == DpcLock )
1452- {
1453- LockContext = & adaptExt -> dpc [vq_req_idx ];
1448+ if (!DumpModeNoSync ) {
1449+ StorPortAcquireSpinLock (DeviceExtension , DpcLock , & adaptExt -> dpc [vq_req_idx ], & LockHandle );
14541450 }
1455- StorPortAcquireSpinLock (DeviceExtension , LockMode , LockContext , & LockHandle );
1456-
14571451 do
14581452 {
14591453 virtqueue_disable_cb (vq );
@@ -1488,7 +1482,9 @@ VOID ProcessBuffer(IN PVOID DeviceExtension, IN ULONG MessageId, IN STOR_SPINLOC
14881482 }
14891483 } while (!virtqueue_enable_cb (vq ));
14901484
1491- StorPortReleaseSpinLock (DeviceExtension , & LockHandle );
1485+ if (!DumpModeNoSync ) {
1486+ StorPortReleaseSpinLock (DeviceExtension , & LockHandle );
1487+ }
14921488
14931489 EXIT_FN ();
14941490}
@@ -1499,7 +1495,7 @@ VOID VioScsiCompleteDpcRoutine(IN PSTOR_DPC Dpc, IN PVOID Context, IN PVOID Syst
14991495
15001496 ENTER_FN ();
15011497 MessageId = PtrToUlong (SystemArgument1 );
1502- ProcessBuffer (Context , MessageId , DpcLock );
1498+ ProcessBuffer (Context , MessageId , FALSE );
15031499 EXIT_FN ();
15041500}
15051501
@@ -1510,7 +1506,6 @@ VOID CompletePendingRequestsOnReset(IN PVOID DeviceExtension)
15101506 ULONG vq_req_idx ;
15111507 PREQUEST_LIST element ;
15121508 STOR_LOCK_HANDLE LockHandle = {0 };
1513- PVOID LockContext = NULL ; // sanity check for LockMode = InterruptLock or StartIoLock
15141509
15151510 adaptExt = (PADAPTER_EXTENSION )DeviceExtension ;
15161511
@@ -1524,8 +1519,8 @@ VOID CompletePendingRequestsOnReset(IN PVOID DeviceExtension)
15241519 {
15251520 element = & adaptExt -> processing_srbs [vq_req_idx ];
15261521 RhelDbgPrint (TRACE_LEVEL_FATAL , " queue %d cnt %d\n" , vq_req_idx , element -> srb_cnt );
1527- LockContext = & adaptExt -> dpc [ vq_req_idx ];
1528- StorPortAcquireSpinLock (DeviceExtension , DpcLock , LockContext , & LockHandle );
1522+
1523+ StorPortAcquireSpinLock (DeviceExtension , DpcLock , & adaptExt -> dpc [ vq_req_idx ] , & LockHandle );
15291524 while (!IsListEmpty (& element -> srb_list ))
15301525 {
15311526 PLIST_ENTRY entry = RemoveHeadList (& element -> srb_list );
0 commit comments