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