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

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).