From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wayne Gong Subject: Re: GPLPV Drivers 0.9.11-pre4 hang during boot - WindowsXP Pro SP2 Date: Fri, 04 Jul 2008 16:29:40 +0800 Message-ID: <486DDF74.1010909@oracle.com> References: <485A8681.10503@darkskiez.co.uk> <485AD22D.7070303@darkskiez.co.uk> <485F726C.2000908@darkskiez.co.uk> <4861D361.9070806@sigala.it> <486C7997.80503@sigala.it> <486CDFE4.6040006@sigala.it> <486DD394.4060403@sigala.it> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <486DD394.4060403@sigala.it> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Sandro Sigala Cc: James Harper , xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hi James, I meet this problem before but not in the same scenario. I use WinPv driver WDF version and attach a lot of vbd and vif device, such as 4 disks and 8 NICs. After WinPv driver install correctly, reboot the vm. Vm cannot reboot correctly every times. And the debug log is very similar as Sandro provided. I change the backend bit width detect code as follow. In my test box, WinPv driver works ok till now. Please have a try if you are interested in it. +XenVbd_TestBitWidth(PXENVBD_DEVICE_DATA DeviceData, PXENVBD_TARGET_DATA TargetData) +{ + blkif_request_t *req; + ULONG i; + int notify; + + KdPrint((__DRIVER_NAME " --> XenVbd_TestBitWidth\n")); + req = RING_GET_REQUEST(&TargetData->Ring, TargetData->Ring.req_prod_pvt); + req->id = 0; + KdPrint((__DRIVER_NAME " req id : %d\n",req->id)); + req->operation = 0xff; + req->nr_segments = 0; + for (i = 0; i < req->nr_segments; i++) + { + req->seg[i].gref = 0xffffffff; + req->seg[i].first_sect = 0xff; + req->seg[i].last_sect = 0xff; + } + TargetData->Ring.req_prod_pvt++; + + RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&TargetData->Ring, notify); + KdPrint((__DRIVER_NAME " 1st notify: %d\n", notify)); + if (notify) + DeviceData->XenDeviceData->XenInterface.EvtChn_Notify( + DeviceData->XenDeviceData->XenInterface.InterfaceHeader.Context, + TargetData->EventChannel); + KeMemoryBarrier(); + + req = RING_GET_REQUEST(&TargetData->Ring, TargetData->Ring.req_prod_pvt); + req->id = 1; + KdPrint((__DRIVER_NAME " req id : %d\n",req->id)); + req->operation = 0xff; + req->nr_segments = 0; + for (i = 0; i < req->nr_segments; i++) + { + req->seg[i].gref = 0xffffffff; + req->seg[i].first_sect = 0xff; + req->seg[i].last_sect = 0xff; + } + TargetData->Ring.req_prod_pvt++; + + RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&TargetData->Ring, notify); + KdPrint((__DRIVER_NAME " 2nd notify: %d\n", notify)); + if (notify) + DeviceData->XenDeviceData->XenInterface.EvtChn_Notify( + DeviceData->XenDeviceData->XenInterface.InterfaceHeader.Context, + TargetData->EventChannel); + KeMemoryBarrier(); + KdPrint((__DRIVER_NAME " <-- XenVbd_TestBitWidth\n")); + return; +}