On 8/31/26 3:49 PM, [email protected] wrote:
> From: Jared Rossi <[email protected]>
> 
> The length of the PCI IPLB is calculated by size of the IplBlockPci struct
> plus the number of bytes used for common IPLB fields.
> 
> Fix the S390_IPLB_MIN_PCI_LEN to reflect this, and assign a valid blk0_len
> while we are at it.
> 
> Cc: [email protected]
> Fixes: 395116781df5 ("s390x: Build IPLB for virtio-pci devices")
> Signed-off-by: Jared Rossi <[email protected]>
> ---
>  hw/s390x/ipl.c              | 2 ++
>  include/hw/s390x/ipl/qipl.h | 2 +-
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index d59ed36c78..ba69ee89bb 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -615,6 +615,8 @@ static bool s390_build_iplb(DeviceState *dev_st, 
> IplParameterBlock *iplb)
>          switch (devtype) {
>          case PCI_DEVTYPE_VIRTIO:
>              iplb->len = cpu_to_be32(S390_IPLB_MIN_PCI_LEN);
> +            iplb->blk0_len =
> +                cpu_to_be32(S390_IPLB_MIN_PCI_LEN - S390_IPLB_HEADER_LEN);
>              iplb->pbt = S390_IPL_TYPE_PCI;
>              iplb->pci.fid = cpu_to_be32(pbdev->fid);
>              break;
> diff --git a/include/hw/s390x/ipl/qipl.h b/include/hw/s390x/ipl/qipl.h
> index 3fa9649112..69b0023ea3 100644
> --- a/include/hw/s390x/ipl/qipl.h
> +++ b/include/hw/s390x/ipl/qipl.h
> @@ -39,7 +39,7 @@ typedef enum S390IplType S390IplType;
>  #define S390_IPLB_MIN_PV_LEN 148
>  #define S390_IPLB_MIN_CCW_LEN 200
>  #define S390_IPLB_MIN_FCP_LEN 384
> -#define S390_IPLB_MIN_PCI_LEN 376
> +#define S390_IPLB_MIN_PCI_LEN (offsetof(IplParameterBlock, pci) + 
> sizeof(IplBlockPci))

Thanks!

Reviewed-by: Matthew Rosato <[email protected]>

>  #define S390_IPLB_MIN_QEMU_SCSI_LEN 200
>  #define S390_IPLB_MAX_LEN 4096
>  


Reply via email to