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.stabell...@eu.citrix.com> > > --- > 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 <ler...@redhat.com> I test-built this for X64 and Ia32, and then committed it to SVN as rev 18651. Thanks! Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel