[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [SOLVED] GPLPV SCSI passthrough does not working
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@xxxxxxxxxxxxx [mailto:xen-devel- bounces@xxxxxxxxxxxxx] On Behalf Of Kazuto Yoshino Sent: Friday, 8 June 2012 11:37 PM To: xen-devel@xxxxxxxxxxxxx; yoshink@xxxxxxxxxxx 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@xxxxxxxxxxxxx http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |