xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [SOLVED] GPLPV SCSI passthrough does not working
@ 2012-06-08 13:37 Kazuto Yoshino
  2012-06-10  4:49 ` James Harper
  0 siblings, 1 reply; 3+ messages in thread
From: Kazuto Yoshino @ 2012-06-08 13:37 UTC (permalink / raw)
  To: xen-devel, yoshink

Hi all,

SCSI passthrough of DVD drive is tried on Windows.
If vcpus=1 is used, it works.
However, if vcpus=2 is used, it does not work.
The log is as follows.


Hardware:
DELL Optiplex 990
Intel Core i5 2500


Software:
xen 4.2-unstable (25452:6bea63e6c780)
dom0: Linux 3.1.0-rc10+ 64bit
domU: Windows 7 SP1 64bit
GPLPV 0.10.0.357


domU config:
kernel = "hvmloader"
builder='hvm'
memory = 2048
name = "win7x64"
vcpus=2
vif = [ 'type=ioemu, mac=00:16:3e:19:18:7b, bridge=virbr0' ]
disk = [ 'file:/etc/xen/win7x64.img,hda,w' ]
device_model = 'qemu-dm'
sdl=0
opengl=1
vnc=1
vnclisten="0.0.0.0"
vncpasswd=''
stdvga=0
serial='pty'
tsc_mode=0


command:
# xm create /etc/xen/win7x64.hvm
# xm scsi-attach win7x64 1:0:0:0 2:0:0:0


qemu-dm log:
12983594247656: XenPCI --> XenPci_DeviceWatchHandler
12983594247656: XenPCI     Rescanning child list
12983594247656: XenPCI --> XenPci_EvtChildListScanForChildren
12983594247656: XenPCI     Found path = device/vbd/768
12983594247656: XenPCI     Found path = device/vif/0
12983594247671: XenPCI     Found path = device/vscsi/2
12983594247671: XenPCI <-- XenPci_EvtChildListScanForChildren
12983594247671: XenPCI --> XenPci_EvtChildListCreateDevice
12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
12983594247671: XenPCI     device = 'vscsi', index = '2', path = 
'device/vscsi/2'
12983594247671: XenPCI --> XenPci_DeviceWatchHandler
12983594247671: XenPCI <-- XenPci_EvtChildListCreateDevice
12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
12983594247671: XenPCI --> XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
12983594247671: XenPCI --> XenPci_DeviceWatchHandler
12983594247671: XenPCI     device/vscsi/2
12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
12983594247671: XenPCI     CmResourceTypeMemory (0)
12983594247671: XenPCI --> XenPci_DeviceWatchHandler
12983594247671: XenPCI     Start = f2000000, Length = 0
12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
12983594247687: XenPCI     pfn[0] = 0000d445
12983594247687: XenPCI     New Start = 000000000d445000, Length = 4096
12983594247687: XenPCI     CmResourceTypeMemory (1)
12983594247687: XenPCI     Start = f2000001, Length = 0
12983594247687: XenPCI <-- XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
12983594247687: XenPCI --> XenPciPdo_EvtDevicePrepareHardware
12983594247687: XenPCI <-- XenPciPdo_EvtDevicePrepareHardware
12983594247687: XenPCI --> XenPciPdo_EvtDeviceD0Entry
12983594247687: XenPCI     path = device/vscsi/2
12983594247687: XenPCI     WdfPowerDeviceD3Final
12983594247687: XenPCI --> XenPci_GetBackendAndAddWatch
12983594247687: XenPCI <-- XenPci_GetBackendAndAddWatch
12983594247687: XenPCI --> XenPci_UpdateBackendState
12983594247687: XenPCI --> XenConfig_InitConfigPage
12983594247687: XenPCI     Backend State Changed to InitWait
12983594247687: XenPCI     fdo_driver_object = FFFFFA80025B9E70
12983594247687: XenPCI <-- XenPci_UpdateBackendState
12983594247687: XenPCI     fdo_driver_extension = FFFFFA8001869010
12983594247703: XenPCI <-- XenConfig_InitConfigPage
12983594247703: XenPCI --> XenPci_XenConfigDeviceSpecifyBuffers
12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref = FFFFFA8002AB9000
12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref = 16383
12983594247703: XenPCI --> XenPci_DeviceWatchHandler
12983594247703: XenPCI     XEN_INIT_TYPE_EVENT_CHANNEL - event-channel = 8
12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
12983594247703: XenPCI --> EvtChn_BindIrq
12983594247703: XenPCI --> XenPci_DeviceWatchHandler
12983594247703: XenPCI <-- EvtChn_BindIrq
12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
12983594247703: XenPCI --> XenPci_ChangeFrontendStateMap
12983594247703: XenPCI --> XenPci_ChangeFrontendState
12983594247703: XenPCI --> XenPci_DeviceWatchHandler
12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
12983594247703: XenPCI --> XenPci_UpdateBackendState
12983594247718: XenPCI     Backend State Changed to Connected
12983594247718: XenPCI <-- XenPci_UpdateBackendState
12983594247718: XenPCI <-- XenPci_ChangeFrontendState
12983594247718: XenPCI <-- XenPci_ChangeFrontendStateMap
12983594247718: XenPCI --> XenPci_ChangeFrontendStateMap
12983594247718: XenPCI --> XenPci_ChangeFrontendState
12983594247734: XenPCI <-- XenPci_ChangeFrontendState
12983594247734: XenPCI --> XenPci_DeviceWatchHandler
12983594247734: XenPCI <-- XenPci_ChangeFrontendStateMap
12983594247734: XenPCI <-- XenPci_DeviceWatchHandler
12983594247734: XenPCI <-- XenPci_XenConfigDeviceSpecifyBuffers
12983594247734: XenPCI <-- XenPciPdo_EvtDeviceD0Entry
12983594247734: XenSCSI --> XenScsi_HwScsiFindAdapter
12983594247734: XenSCSI     IRQL = 0
12983594247734: XenSCSI     BusInterruptLevel = 28
12983594247734: XenSCSI     BusInterruptVector = 01c
12983594247734: XenSCSI     RangeStart = 0d445000, RangeLength = 00001000
12983594247734: XenSCSI     XEN_INIT_TYPE_13
12983594247734: XenSCSI     XEN_INIT_TYPE_VECTORS
12983594247734: XenSCSI     XEN_INIT_TYPE_11
12983594247734: XenSCSI     XEN_INIT_TYPE_RING - ring-ref = FFFFFA8002AB9000
12983594247734: XenSCSI     XEN_INIT_TYPE_EVENT_CHANNEL - event-channel = 8
12983594247750: XenSCSI     XEN_INIT_TYPE_GRANT_ENTRIES - 144
12983594247750: XenSCSI     Dma64BitAddresses supported
12983594247750: XenPCI --> XenPci_XenBus_AddWatch
12983594247750: XenPCI     XenPci_XenBus_AddWatch - 
/local/domain/0/backend/vscsi/3/2/vscsi-devs = NULL
12983594247750: XenSCSI --> XenScsi_DevWatch
12983594247750: XenPCI <-- XenPci_XenBus_AddWatch
12983594247750: XenSCSI     Waiting for pause...
12983594247750: XenSCSI <-- XenScsi_HwScsiFindAdapter
12983594247750: XenSCSI --> XenScsi_HwScsiInitialize
12983594247750: XenSCSI <-- XenScsi_HwScsiInitialize
12983594247750: XenSCSI --> XenScsi_HwScsiAdapterControl
12983594247750: XenSCSI     IRQL = 0
12983594247750: XenSCSI     ScsiQuerySupportedControlTypes (Max = 5)
12983594247750: XenSCSI <-- XenScsi_HwScsiAdapterControl
12983594247750: XenSCSI     Busy
12983594247859: XenSCSI     Waiting for pause...
12983594247968: XenSCSI     Waiting for pause...
12983594248078: XenSCSI     Waiting for pause...
12983594248187: XenSCSI     Waiting for pause...
12983594248296: XenSCSI     Waiting for pause...
12983594248406: XenSCSI     Waiting for pause...
12983594248515: XenSCSI     Waiting for pause...
12983594248625: XenSCSI     Waiting for pause...
12983594248734: XenSCSI     Waiting for pause...
12983594248843: XenSCSI     Waiting for pause...



It worked, when correcting the source code of GPLPV as follows.


--- a/xenscsi/xenscsi.c
+++ b/xenscsi/xenscsi.c
@@ -278,17 +278,27 @@
     /* this can only be called from a watch and so is always serialised */
     FUNCTION_ENTER();

-  #if DBG
-  oldpause =
-  #endif
-    InterlockedExchange(&xsdd->shared_paused, 
SHARED_PAUSED_PASSIVE_PAUSED);
-  ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
-
-  while (InterlockedCompareExchange(&xsdd->shared_paused, 
SHARED_PAUSED_SCSIPORT_PAUSED, SHARED_PAUSED_SCSIPORT_PAUSED) != 
SHARED_PAUSED_SCSIPORT_PAUSED)
+  while (1)
     {
-    KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
-    wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
-    KeDelayExecutionThread(KernelMode, FALSE, &wait_time);
+    if (InterlockedCompareExchange(&xsdd->shared_paused, 
SHARED_PAUSED_SCSIPORT_UNPAUSED, SHARED_PAUSED_SCSIPORT_UNPAUSED) == 
SHARED_PAUSED_SCSIPORT_UNPAUSED)
+    {
+      #if DBG
+      oldpause =
+      #endif
+        InterlockedExchange(&xsdd->shared_paused, 
SHARED_PAUSED_PASSIVE_PAUSED);
+      ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
+    }
+
+    if (InterlockedCompareExchange(&xsdd->shared_paused, 
SHARED_PAUSED_SCSIPORT_PAUSED, SHARED_PAUSED_SCSIPORT_PAUSED) != 
SHARED_PAUSED_SCSIPORT_PAUSED)
+    {
+      KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
+      wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
+      KeDelayExecutionThread(KernelMode, FALSE, &wait_time);
+    }
+    else
+    {
+      break;
+    }
     }

     KdPrint((__DRIVER_NAME "     Watch triggered on %s\n", path));


Thanks,
Kazuto Yoshino.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [SOLVED] GPLPV SCSI passthrough does not working
  2012-06-08 13:37 [SOLVED] GPLPV SCSI passthrough does not working Kazuto Yoshino
@ 2012-06-10  4:49 ` James Harper
  2012-06-11  1:53   ` Kazuto Yoshino
  0 siblings, 1 reply; 3+ messages in thread
From: James Harper @ 2012-06-10  4:49 UTC (permalink / raw)
  To: Kazuto Yoshino, xen-devel@lists.xen.org

Thanks for that. That locking code is really nasty... do you think your patch is fixing the problem or just working around it?

James

> -----Original Message-----
> From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
> bounces@lists.xen.org] On Behalf Of Kazuto Yoshino
> Sent: Friday, 8 June 2012 11:37 PM
> To: xen-devel@lists.xen.org; yoshink@alpha.co.jp
> Subject: [Xen-devel] [SOLVED] GPLPV SCSI passthrough does not working
> 
> Hi all,
> 
> SCSI passthrough of DVD drive is tried on Windows.
> If vcpus=1 is used, it works.
> However, if vcpus=2 is used, it does not work.
> The log is as follows.
> 
> 
> Hardware:
> DELL Optiplex 990
> Intel Core i5 2500
> 
> 
> Software:
> xen 4.2-unstable (25452:6bea63e6c780)
> dom0: Linux 3.1.0-rc10+ 64bit
> domU: Windows 7 SP1 64bit
> GPLPV 0.10.0.357
> 
> 
> domU config:
> kernel = "hvmloader"
> builder='hvm'
> memory = 2048
> name = "win7x64"
> vcpus=2
> vif = [ 'type=ioemu, mac=00:16:3e:19:18:7b, bridge=virbr0' ] disk = [
> 'file:/etc/xen/win7x64.img,hda,w' ] device_model = 'qemu-dm'
> sdl=0
> opengl=1
> vnc=1
> vnclisten="0.0.0.0"
> vncpasswd=''
> stdvga=0
> serial='pty'
> tsc_mode=0
> 
> 
> command:
> # xm create /etc/xen/win7x64.hvm
> # xm scsi-attach win7x64 1:0:0:0 2:0:0:0
> 
> 
> qemu-dm log:
> 12983594247656: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247656: XenPCI     Rescanning child list
> 12983594247656: XenPCI --> XenPci_EvtChildListScanForChildren
> 12983594247656: XenPCI     Found path = device/vbd/768
> 12983594247656: XenPCI     Found path = device/vif/0
> 12983594247671: XenPCI     Found path = device/vscsi/2
> 12983594247671: XenPCI <-- XenPci_EvtChildListScanForChildren
> 12983594247671: XenPCI --> XenPci_EvtChildListCreateDevice
> 12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247671: XenPCI     device = 'vscsi', index = '2', path =
> 'device/vscsi/2'
> 12983594247671: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247671: XenPCI <-- XenPci_EvtChildListCreateDevice
> 12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247671: XenPCI -->
> XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
> 12983594247671: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247671: XenPCI     device/vscsi/2
> 12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247671: XenPCI     CmResourceTypeMemory (0)
> 12983594247671: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247671: XenPCI     Start = f2000000, Length = 0
> 12983594247671: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247687: XenPCI     pfn[0] = 0000d445
> 12983594247687: XenPCI     New Start = 000000000d445000, Length = 4096
> 12983594247687: XenPCI     CmResourceTypeMemory (1)
> 12983594247687: XenPCI     Start = f2000001, Length = 0
> 12983594247687: XenPCI <--
> XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
> 12983594247687: XenPCI --> XenPciPdo_EvtDevicePrepareHardware
> 12983594247687: XenPCI <-- XenPciPdo_EvtDevicePrepareHardware
> 12983594247687: XenPCI --> XenPciPdo_EvtDeviceD0Entry
> 12983594247687: XenPCI     path = device/vscsi/2
> 12983594247687: XenPCI     WdfPowerDeviceD3Final
> 12983594247687: XenPCI --> XenPci_GetBackendAndAddWatch
> 12983594247687: XenPCI <-- XenPci_GetBackendAndAddWatch
> 12983594247687: XenPCI --> XenPci_UpdateBackendState
> 12983594247687: XenPCI --> XenConfig_InitConfigPage
> 12983594247687: XenPCI     Backend State Changed to InitWait
> 12983594247687: XenPCI     fdo_driver_object = FFFFFA80025B9E70
> 12983594247687: XenPCI <-- XenPci_UpdateBackendState
> 12983594247687: XenPCI     fdo_driver_extension = FFFFFA8001869010
> 12983594247703: XenPCI <-- XenConfig_InitConfigPage
> 12983594247703: XenPCI --> XenPci_XenConfigDeviceSpecifyBuffers
> 12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref =
> FFFFFA8002AB9000
> 12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref = 16383
> 12983594247703: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247703: XenPCI     XEN_INIT_TYPE_EVENT_CHANNEL - event-
> channel = 8
> 12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247703: XenPCI --> EvtChn_BindIrq
> 12983594247703: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247703: XenPCI <-- EvtChn_BindIrq
> 12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247703: XenPCI --> XenPci_ChangeFrontendStateMap
> 12983594247703: XenPCI --> XenPci_ChangeFrontendState
> 12983594247703: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247703: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247703: XenPCI --> XenPci_UpdateBackendState
> 12983594247718: XenPCI     Backend State Changed to Connected
> 12983594247718: XenPCI <-- XenPci_UpdateBackendState
> 12983594247718: XenPCI <-- XenPci_ChangeFrontendState
> 12983594247718: XenPCI <-- XenPci_ChangeFrontendStateMap
> 12983594247718: XenPCI --> XenPci_ChangeFrontendStateMap
> 12983594247718: XenPCI --> XenPci_ChangeFrontendState
> 12983594247734: XenPCI <-- XenPci_ChangeFrontendState
> 12983594247734: XenPCI --> XenPci_DeviceWatchHandler
> 12983594247734: XenPCI <-- XenPci_ChangeFrontendStateMap
> 12983594247734: XenPCI <-- XenPci_DeviceWatchHandler
> 12983594247734: XenPCI <-- XenPci_XenConfigDeviceSpecifyBuffers
> 12983594247734: XenPCI <-- XenPciPdo_EvtDeviceD0Entry
> 12983594247734: XenSCSI --> XenScsi_HwScsiFindAdapter
> 12983594247734: XenSCSI     IRQL = 0
> 12983594247734: XenSCSI     BusInterruptLevel = 28
> 12983594247734: XenSCSI     BusInterruptVector = 01c
> 12983594247734: XenSCSI     RangeStart = 0d445000, RangeLength = 00001000
> 12983594247734: XenSCSI     XEN_INIT_TYPE_13
> 12983594247734: XenSCSI     XEN_INIT_TYPE_VECTORS
> 12983594247734: XenSCSI     XEN_INIT_TYPE_11
> 12983594247734: XenSCSI     XEN_INIT_TYPE_RING - ring-ref =
> FFFFFA8002AB9000
> 12983594247734: XenSCSI     XEN_INIT_TYPE_EVENT_CHANNEL - event-
> channel = 8
> 12983594247750: XenSCSI     XEN_INIT_TYPE_GRANT_ENTRIES - 144
> 12983594247750: XenSCSI     Dma64BitAddresses supported
> 12983594247750: XenPCI --> XenPci_XenBus_AddWatch
> 12983594247750: XenPCI     XenPci_XenBus_AddWatch -
> /local/domain/0/backend/vscsi/3/2/vscsi-devs = NULL
> 12983594247750: XenSCSI --> XenScsi_DevWatch
> 12983594247750: XenPCI <-- XenPci_XenBus_AddWatch
> 12983594247750: XenSCSI     Waiting for pause...
> 12983594247750: XenSCSI <-- XenScsi_HwScsiFindAdapter
> 12983594247750: XenSCSI --> XenScsi_HwScsiInitialize
> 12983594247750: XenSCSI <-- XenScsi_HwScsiInitialize
> 12983594247750: XenSCSI --> XenScsi_HwScsiAdapterControl
> 12983594247750: XenSCSI     IRQL = 0
> 12983594247750: XenSCSI     ScsiQuerySupportedControlTypes (Max = 5)
> 12983594247750: XenSCSI <-- XenScsi_HwScsiAdapterControl
> 12983594247750: XenSCSI     Busy
> 12983594247859: XenSCSI     Waiting for pause...
> 12983594247968: XenSCSI     Waiting for pause...
> 12983594248078: XenSCSI     Waiting for pause...
> 12983594248187: XenSCSI     Waiting for pause...
> 12983594248296: XenSCSI     Waiting for pause...
> 12983594248406: XenSCSI     Waiting for pause...
> 12983594248515: XenSCSI     Waiting for pause...
> 12983594248625: XenSCSI     Waiting for pause...
> 12983594248734: XenSCSI     Waiting for pause...
> 12983594248843: XenSCSI     Waiting for pause...
> 
> 
> 
> It worked, when correcting the source code of GPLPV as follows.
> 
> 
> --- a/xenscsi/xenscsi.c
> +++ b/xenscsi/xenscsi.c
> @@ -278,17 +278,27 @@
>      /* this can only be called from a watch and so is always serialised */
>      FUNCTION_ENTER();
> 
> -  #if DBG
> -  oldpause =
> -  #endif
> -    InterlockedExchange(&xsdd->shared_paused,
> SHARED_PAUSED_PASSIVE_PAUSED);
> -  ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
> -
> -  while (InterlockedCompareExchange(&xsdd->shared_paused,
> SHARED_PAUSED_SCSIPORT_PAUSED,
> SHARED_PAUSED_SCSIPORT_PAUSED) !=
> SHARED_PAUSED_SCSIPORT_PAUSED)
> +  while (1)
>      {
> -    KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
> -    wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
> -    KeDelayExecutionThread(KernelMode, FALSE, &wait_time);
> +    if (InterlockedCompareExchange(&xsdd->shared_paused,
> SHARED_PAUSED_SCSIPORT_UNPAUSED,
> SHARED_PAUSED_SCSIPORT_UNPAUSED) ==
> SHARED_PAUSED_SCSIPORT_UNPAUSED)
> +    {
> +      #if DBG
> +      oldpause =
> +      #endif
> +        InterlockedExchange(&xsdd->shared_paused,
> SHARED_PAUSED_PASSIVE_PAUSED);
> +      ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
> +    }
> +
> +    if (InterlockedCompareExchange(&xsdd->shared_paused,
> SHARED_PAUSED_SCSIPORT_PAUSED,
> SHARED_PAUSED_SCSIPORT_PAUSED) !=
> SHARED_PAUSED_SCSIPORT_PAUSED)
> +    {
> +      KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
> +      wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
> +      KeDelayExecutionThread(KernelMode, FALSE, &wait_time);
> +    }
> +    else
> +    {
> +      break;
> +    }
>      }
> 
>      KdPrint((__DRIVER_NAME "     Watch triggered on %s\n", path));
> 
> 
> Thanks,
> Kazuto Yoshino.
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [SOLVED] GPLPV SCSI passthrough does not working
  2012-06-10  4:49 ` James Harper
@ 2012-06-11  1:53   ` Kazuto Yoshino
  0 siblings, 0 replies; 3+ messages in thread
From: Kazuto Yoshino @ 2012-06-11  1:53 UTC (permalink / raw)
  To: james.harper, xen-devel

Hi James,

I think that this patch is insufficient.
Although work is carried out, it is very doubtful.
Would you correct to the better form, if possible?


Thanks,
Kazuto Yoshino.

(2012/06/10 13:49), James Harper wrote:
> Thanks for that. That locking code is really nasty... do you think your patch is fixing the problem or just working around it?
>
> James
>
>> -----Original Message-----
>> From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
>> bounces@lists.xen.org] On Behalf Of Kazuto Yoshino
>> Sent: Friday, 8 June 2012 11:37 PM
>> To: xen-devel@lists.xen.org; yoshink@alpha.co.jp
>> Subject: [Xen-devel] [SOLVED] GPLPV SCSI passthrough does not working
>>
>> Hi all,
>>
>> SCSI passthrough of DVD drive is tried on Windows.
>> If vcpus=1 is used, it works.
>> However, if vcpus=2 is used, it does not work.
>> The log is as follows.
>>
>>
>> Hardware:
>> DELL Optiplex 990
>> Intel Core i5 2500
>>
>>
>> Software:
>> xen 4.2-unstable (25452:6bea63e6c780)
>> dom0: Linux 3.1.0-rc10+ 64bit
>> domU: Windows 7 SP1 64bit
>> GPLPV 0.10.0.357
>>
>>
>> domU config:
>> kernel = "hvmloader"
>> builder='hvm'
>> memory = 2048
>> name = "win7x64"
>> vcpus=2
>> vif = [ 'type=ioemu, mac=00:16:3e:19:18:7b, bridge=virbr0' ] disk = [
>> 'file:/etc/xen/win7x64.img,hda,w' ] device_model = 'qemu-dm'
>> sdl=0
>> opengl=1
>> vnc=1
>> vnclisten="0.0.0.0"
>> vncpasswd=''
>> stdvga=0
>> serial='pty'
>> tsc_mode=0
>>
>>
>> command:
>> # xm create /etc/xen/win7x64.hvm
>> # xm scsi-attach win7x64 1:0:0:0 2:0:0:0
>>
>>
>> qemu-dm log:
>> 12983594247656: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247656: XenPCI     Rescanning child list
>> 12983594247656: XenPCI -->  XenPci_EvtChildListScanForChildren
>> 12983594247656: XenPCI     Found path = device/vbd/768
>> 12983594247656: XenPCI     Found path = device/vif/0
>> 12983594247671: XenPCI     Found path = device/vscsi/2
>> 12983594247671: XenPCI<-- XenPci_EvtChildListScanForChildren
>> 12983594247671: XenPCI -->  XenPci_EvtChildListCreateDevice
>> 12983594247671: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI     device = 'vscsi', index = '2', path =
>> 'device/vscsi/2'
>> 12983594247671: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI<-- XenPci_EvtChildListCreateDevice
>> 12983594247671: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI -->
>> XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
>> 12983594247671: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI     device/vscsi/2
>> 12983594247671: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI     CmResourceTypeMemory (0)
>> 12983594247671: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247671: XenPCI     Start = f2000000, Length = 0
>> 12983594247671: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247687: XenPCI     pfn[0] = 0000d445
>> 12983594247687: XenPCI     New Start = 000000000d445000, Length = 4096
>> 12983594247687: XenPCI     CmResourceTypeMemory (1)
>> 12983594247687: XenPCI     Start = f2000001, Length = 0
>> 12983594247687: XenPCI<--
>> XenPciPdo_EvtDeviceWdmIrpPreprocess_START_DEVICE
>> 12983594247687: XenPCI -->  XenPciPdo_EvtDevicePrepareHardware
>> 12983594247687: XenPCI<-- XenPciPdo_EvtDevicePrepareHardware
>> 12983594247687: XenPCI -->  XenPciPdo_EvtDeviceD0Entry
>> 12983594247687: XenPCI     path = device/vscsi/2
>> 12983594247687: XenPCI     WdfPowerDeviceD3Final
>> 12983594247687: XenPCI -->  XenPci_GetBackendAndAddWatch
>> 12983594247687: XenPCI<-- XenPci_GetBackendAndAddWatch
>> 12983594247687: XenPCI -->  XenPci_UpdateBackendState
>> 12983594247687: XenPCI -->  XenConfig_InitConfigPage
>> 12983594247687: XenPCI     Backend State Changed to InitWait
>> 12983594247687: XenPCI     fdo_driver_object = FFFFFA80025B9E70
>> 12983594247687: XenPCI<-- XenPci_UpdateBackendState
>> 12983594247687: XenPCI     fdo_driver_extension = FFFFFA8001869010
>> 12983594247703: XenPCI<-- XenConfig_InitConfigPage
>> 12983594247703: XenPCI -->  XenPci_XenConfigDeviceSpecifyBuffers
>> 12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref =
>> FFFFFA8002AB9000
>> 12983594247703: XenPCI     XEN_INIT_TYPE_RING - ring-ref = 16383
>> 12983594247703: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI     XEN_INIT_TYPE_EVENT_CHANNEL - event-
>> channel = 8
>> 12983594247703: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI -->  EvtChn_BindIrq
>> 12983594247703: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI<-- EvtChn_BindIrq
>> 12983594247703: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI -->  XenPci_ChangeFrontendStateMap
>> 12983594247703: XenPCI -->  XenPci_ChangeFrontendState
>> 12983594247703: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247703: XenPCI -->  XenPci_UpdateBackendState
>> 12983594247718: XenPCI     Backend State Changed to Connected
>> 12983594247718: XenPCI<-- XenPci_UpdateBackendState
>> 12983594247718: XenPCI<-- XenPci_ChangeFrontendState
>> 12983594247718: XenPCI<-- XenPci_ChangeFrontendStateMap
>> 12983594247718: XenPCI -->  XenPci_ChangeFrontendStateMap
>> 12983594247718: XenPCI -->  XenPci_ChangeFrontendState
>> 12983594247734: XenPCI<-- XenPci_ChangeFrontendState
>> 12983594247734: XenPCI -->  XenPci_DeviceWatchHandler
>> 12983594247734: XenPCI<-- XenPci_ChangeFrontendStateMap
>> 12983594247734: XenPCI<-- XenPci_DeviceWatchHandler
>> 12983594247734: XenPCI<-- XenPci_XenConfigDeviceSpecifyBuffers
>> 12983594247734: XenPCI<-- XenPciPdo_EvtDeviceD0Entry
>> 12983594247734: XenSCSI -->  XenScsi_HwScsiFindAdapter
>> 12983594247734: XenSCSI     IRQL = 0
>> 12983594247734: XenSCSI     BusInterruptLevel = 28
>> 12983594247734: XenSCSI     BusInterruptVector = 01c
>> 12983594247734: XenSCSI     RangeStart = 0d445000, RangeLength = 00001000
>> 12983594247734: XenSCSI     XEN_INIT_TYPE_13
>> 12983594247734: XenSCSI     XEN_INIT_TYPE_VECTORS
>> 12983594247734: XenSCSI     XEN_INIT_TYPE_11
>> 12983594247734: XenSCSI     XEN_INIT_TYPE_RING - ring-ref =
>> FFFFFA8002AB9000
>> 12983594247734: XenSCSI     XEN_INIT_TYPE_EVENT_CHANNEL - event-
>> channel = 8
>> 12983594247750: XenSCSI     XEN_INIT_TYPE_GRANT_ENTRIES - 144
>> 12983594247750: XenSCSI     Dma64BitAddresses supported
>> 12983594247750: XenPCI -->  XenPci_XenBus_AddWatch
>> 12983594247750: XenPCI     XenPci_XenBus_AddWatch -
>> /local/domain/0/backend/vscsi/3/2/vscsi-devs = NULL
>> 12983594247750: XenSCSI -->  XenScsi_DevWatch
>> 12983594247750: XenPCI<-- XenPci_XenBus_AddWatch
>> 12983594247750: XenSCSI     Waiting for pause...
>> 12983594247750: XenSCSI<-- XenScsi_HwScsiFindAdapter
>> 12983594247750: XenSCSI -->  XenScsi_HwScsiInitialize
>> 12983594247750: XenSCSI<-- XenScsi_HwScsiInitialize
>> 12983594247750: XenSCSI -->  XenScsi_HwScsiAdapterControl
>> 12983594247750: XenSCSI     IRQL = 0
>> 12983594247750: XenSCSI     ScsiQuerySupportedControlTypes (Max = 5)
>> 12983594247750: XenSCSI<-- XenScsi_HwScsiAdapterControl
>> 12983594247750: XenSCSI     Busy
>> 12983594247859: XenSCSI     Waiting for pause...
>> 12983594247968: XenSCSI     Waiting for pause...
>> 12983594248078: XenSCSI     Waiting for pause...
>> 12983594248187: XenSCSI     Waiting for pause...
>> 12983594248296: XenSCSI     Waiting for pause...
>> 12983594248406: XenSCSI     Waiting for pause...
>> 12983594248515: XenSCSI     Waiting for pause...
>> 12983594248625: XenSCSI     Waiting for pause...
>> 12983594248734: XenSCSI     Waiting for pause...
>> 12983594248843: XenSCSI     Waiting for pause...
>>
>>
>>
>> It worked, when correcting the source code of GPLPV as follows.
>>
>>
>> --- a/xenscsi/xenscsi.c
>> +++ b/xenscsi/xenscsi.c
>> @@ -278,17 +278,27 @@
>>       /* this can only be called from a watch and so is always serialised */
>>       FUNCTION_ENTER();
>>
>> -  #if DBG
>> -  oldpause =
>> -  #endif
>> -    InterlockedExchange(&xsdd->shared_paused,
>> SHARED_PAUSED_PASSIVE_PAUSED);
>> -  ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
>> -
>> -  while (InterlockedCompareExchange(&xsdd->shared_paused,
>> SHARED_PAUSED_SCSIPORT_PAUSED,
>> SHARED_PAUSED_SCSIPORT_PAUSED) !=
>> SHARED_PAUSED_SCSIPORT_PAUSED)
>> +  while (1)
>>       {
>> -    KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
>> -    wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
>> -    KeDelayExecutionThread(KernelMode, FALSE,&wait_time);
>> +    if (InterlockedCompareExchange(&xsdd->shared_paused,
>> SHARED_PAUSED_SCSIPORT_UNPAUSED,
>> SHARED_PAUSED_SCSIPORT_UNPAUSED) ==
>> SHARED_PAUSED_SCSIPORT_UNPAUSED)
>> +    {
>> +      #if DBG
>> +      oldpause =
>> +      #endif
>> +        InterlockedExchange(&xsdd->shared_paused,
>> SHARED_PAUSED_PASSIVE_PAUSED);
>> +      ASSERT(oldpause == SHARED_PAUSED_SCSIPORT_UNPAUSED);
>> +    }
>> +
>> +    if (InterlockedCompareExchange(&xsdd->shared_paused,
>> SHARED_PAUSED_SCSIPORT_PAUSED,
>> SHARED_PAUSED_SCSIPORT_PAUSED) !=
>> SHARED_PAUSED_SCSIPORT_PAUSED)
>> +    {
>> +      KdPrint((__DRIVER_NAME "     Waiting for pause...\n"));
>> +      wait_time.QuadPart = -100 * 1000 * 10; /* 100ms */
>> +      KeDelayExecutionThread(KernelMode, FALSE,&wait_time);
>> +    }
>> +    else
>> +    {
>> +      break;
>> +    }
>>       }
>>
>>       KdPrint((__DRIVER_NAME "     Watch triggered on %s\n", path));
>>
>>
>> Thanks,
>> Kazuto Yoshino.
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xen.org
>> http://lists.xen.org/xen-devel
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-06-11  1:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-08 13:37 [SOLVED] GPLPV SCSI passthrough does not working Kazuto Yoshino
2012-06-10  4:49 ` James Harper
2012-06-11  1:53   ` Kazuto Yoshino

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).