On Fri, Aug 14, 2026 at 09:19:29 +0100, John Levon wrote:
> For NVRAM storage specifically, the guest-visible size is critical to
> correct handling of the OVMF address space. Allow specifying storage
> slices for NVRAM storage when the underlying block may be larger
> due to alignment/allocation restrictions.
> 
> As qemuPrepareNVRAMBlock() does not support it, disallow slices with
> non-raw formats, and slice offsets.
> 
> Signed-off-by: John Levon <[email protected]>
> ---
>  src/qemu/qemu_validate.c                      | 32 ++++++++++----
>  ...ual-efi-nvram-dev-slice.x86_64-latest.args | 35 ++++++++++++++++
>  ...nual-efi-nvram-dev-slice.x86_64-latest.xml | 42 +++++++++++++++++++
>  .../firmware-manual-efi-nvram-dev-slice.xml   | 25 +++++++++++
>  tests/qemuxmlconftest.c                       |  1 +
>  5 files changed, 128 insertions(+), 7 deletions(-)
>  create mode 100644 
> tests/qemuxmlconfdata/firmware-manual-efi-nvram-dev-slice.x86_64-latest.args
>  create mode 100644 
> tests/qemuxmlconfdata/firmware-manual-efi-nvram-dev-slice.x86_64-latest.xml
>  create mode 100644 
> tests/qemuxmlconfdata/firmware-manual-efi-nvram-dev-slice.xml
> 
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index 61f3bd3278..ae70eb89f0 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -707,8 +707,32 @@ qemuValidateDomainDefNvram(const virDomainDef *def,
>  
>      switch (src->type) {
>      case VIR_STORAGE_TYPE_FILE:
> -    case VIR_STORAGE_TYPE_BLOCK:
>      case VIR_STORAGE_TYPE_NETWORK:
> +        if (src->sliceStorage) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                           _("slices are not supported with non-block 
> NVRAM"));
> +            return -1;
> +        }
> +        break;
> +
> +    case VIR_STORAGE_TYPE_BLOCK:
> +        if (src->sliceStorage) {
> +            if (src->sliceStorage->offset != 0) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("offset slices are not supported with 
> NVRAM"));

Missing 'return -1;'


> +            }
> +
> +            switch (src->format) {
> +            case VIR_STORAGE_FILE_RAW:
> +            case VIR_STORAGE_FILE_NONE:
> +                break;
> +
> +            default:
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                               _("NVRAM slices are not supported with format 
> '%1$s'"),
> +                               
> virStorageFileFormatTypeToString(src->format));

Missing 'return -1'. Also we normally prefer enum statements with a
proper type which are then forced by the compiler to cover all cases.

Since 'src->format' wasn't converted to proper type yet I think we can
leave it as-is.


> +            }
> +        }
>          break;
>  
>      case VIR_STORAGE_TYPE_DIR:
> @@ -728,12 +752,6 @@ qemuValidateDomainDefNvram(const virDomainDef *def,
>          return -1;
>      }
>  
> -    if (src->sliceStorage) {
> -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                        _("slices are not supported with NVRAM"));
> -        return -1;
> -    }
> -
>      if (src->pr) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                          _("persistent reservations are not supported with 
> NVRAM"));

I'll add the missing code and:

Reviewed-by: Peter Krempa <[email protected]>

and push this soon

Reply via email to