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 >