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

Reply via email to