|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [edk2] [PATCH v2] OvmfPkg: XenPvBlkDxe: handle empty cdrom drives
On Wed, 21 Oct 2015, Fabio Fantoni wrote:
> Il 21/10/2015 14:45, Laszlo Ersek ha scritto:
> > On 10/21/15 13:39, Stefano Stabellini wrote:
> > > Empty cdroms are not going to connect, avoid waiting for the backend to
> > > switch to state 4, which is never going to happen, and return
> > > error instead from XenPvBlockFrontInitialization(). Detect an
> > > empty cdrom by looking at the "params" node on xenstore, which is set to
> > > "" or "aio:" for empty drives by libxl.
> > >
> > > Contributed-under: TianoCore Contribution Agreement 1.0
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> > >
> > > ---
> > > Changes in v2:
> > > - better commit message
> > > - return EFI_DEVICE_ERROR instead of EFI_NO_MEDIA
> > > - check the return status of XenBusIo->XsBackendRead
> > > ---
> > > OvmfPkg/XenPvBlkDxe/BlockFront.c | 15 +++++++++++++++
> > > 1 file changed, 15 insertions(+)
> > >
> > > diff --git a/OvmfPkg/XenPvBlkDxe/BlockFront.c
> > > b/OvmfPkg/XenPvBlkDxe/BlockFront.c
> > > index 256ac55..d07e980 100644
> > > --- a/OvmfPkg/XenPvBlkDxe/BlockFront.c
> > > +++ b/OvmfPkg/XenPvBlkDxe/BlockFront.c
> > > @@ -169,6 +169,7 @@ XenPvBlockFrontInitialization (
> > > XEN_BLOCK_FRONT_DEVICE *Dev;
> > > XenbusState State;
> > > UINT64 Value;
> > > + CHAR8 *Params;
> > > ASSERT (NodeName != NULL);
> > > @@ -186,6 +187,20 @@ XenPvBlockFrontInitialization (
> > > }
> > > FreePool (DeviceType);
> > > + if (Dev->MediaInfo.CdRom) {
> > > + Status = XenBusIo->XsBackendRead (XenBusIo, XST_NIL, "params",
> > > (VOID**)&Params);
> > > + if (Status != XENSTORE_STATUS_SUCCESS) {
> > > + DEBUG ((EFI_D_ERROR, "%a: Failed to read params (%d)\n",
> > > __FUNCTION__, Status));
> > > + goto Error;
> > > + }
> > > + if (AsciiStrLen (Params) == 0 || AsciiStrCmp (Params, "aio:") == 0) {
> > > + FreePool (Params);
> > > + DEBUG ((EFI_D_INFO, "%a: Empty cdrom\n", __FUNCTION__));
> > > + goto Error;
> > > + }
> > > + FreePool (Params);
> > > + }
> > > +
> > > Status = XenBusReadUint64 (XenBusIo, "backend-id", FALSE, &Value);
> > > if (Status != XENSTORE_STATUS_SUCCESS || Value > MAX_UINT16) {
> > > DEBUG ((EFI_D_ERROR, "XenPvBlk: Failed to get backend-id (%d)\n",
> > >
> > Reviewed-by: Laszlo Ersek <lersek@xxxxxxxxxx>
> >
> > I test-built this for X64 and Ia32, and then committed it to SVN as rev
> > 18651.
> >
> > Thanks!
> > Laszlo
>
> Thanks to both.
> I tested it with a git cherry-pick on my tested build of some days ago.
> With ide disks it boots correctly and xl cd-insert and xl cd-eject are
> working.
> With pvdisk don't start, but this time instead freeze on "tianocore logo" but
> freeze with black screen after initial windows boot.
> I retried for take full logs as possibile but it booted correctly and with xl
> cd-insert and xl cd-eject was working.
> I retried other 2 reboot without problem but at the third windows freeze after
> arrived to login screen.
> I suppose that this patch is ok and the problem is another but I not
> understand exactly what.
>
> In attachment full qemu log and xl dmesg about the latest test where windows
> freezed at login screen, rdp and xl shutdown was not working, its qemu process
> was still active and with near 100% cpu usage.
> If you need more informations/tests tell me and I'll post them.
Yes, that's likely a completely different bug. Does it only happen using
OVMF as guest firmare? I am saying this because it looks like the guest
PV drivers were loaded at the time of the freeze.
In any case it might be good to repost it as a separate bug report to xen-devel.
Thanks again for testing,
Stefano
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |