2018-10-17 18:19:05

by Wenwen Wang

[permalink] [raw]
Subject: [PATCH] drivers/vfio: Fix an 8-byte alignment issue

This patch adds a 4-byte reserved field in the structure
vfio_eeh_pe_op to make sure that the u64 fields in the structure
vfio_eeh_pe_err are 8-byte aligned.

Signed-off-by: Wenwen Wang <[email protected]>
---
include/uapi/linux/vfio.h | 1 +
1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
index 1aa7b82..3e71ded 100644
--- a/include/uapi/linux/vfio.h
+++ b/include/uapi/linux/vfio.h
@@ -729,6 +729,7 @@ struct vfio_eeh_pe_op {
__u32 argsz;
__u32 flags;
__u32 op;
+ __u32 __res;
union {
struct vfio_eeh_pe_err err;
};
--
2.7.4



2018-10-17 21:16:42

by Konrad Rzeszutek Wilk

[permalink] [raw]
Subject: Re: [PATCH] drivers/vfio: Fix an 8-byte alignment issue

On Wed, Oct 17, 2018 at 01:18:19PM -0500, Wenwen Wang wrote:
> This patch adds a 4-byte reserved field in the structure
> vfio_eeh_pe_op to make sure that the u64 fields in the structure
> vfio_eeh_pe_err are 8-byte aligned.

Won't this break 32-bit kernels? That is the size of the structure
will now be 4 bytes bigger..
>
> Signed-off-by: Wenwen Wang <[email protected]>
> ---
> include/uapi/linux/vfio.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> index 1aa7b82..3e71ded 100644
> --- a/include/uapi/linux/vfio.h
> +++ b/include/uapi/linux/vfio.h
> @@ -729,6 +729,7 @@ struct vfio_eeh_pe_op {
> __u32 argsz;
> __u32 flags;
> __u32 op;
> + __u32 __res;
> union {
> struct vfio_eeh_pe_err err;
> };
> --
> 2.7.4
>

2018-10-17 22:04:43

by Alex Williamson

[permalink] [raw]
Subject: Re: [PATCH] drivers/vfio: Fix an 8-byte alignment issue

On Wed, 17 Oct 2018 17:15:33 -0400
Konrad Rzeszutek Wilk <[email protected]> wrote:

> On Wed, Oct 17, 2018 at 01:18:19PM -0500, Wenwen Wang wrote:
> > This patch adds a 4-byte reserved field in the structure
> > vfio_eeh_pe_op to make sure that the u64 fields in the structure
> > vfio_eeh_pe_err are 8-byte aligned.
>
> Won't this break 32-bit kernels? That is the size of the structure
> will now be 4 bytes bigger..

Hi Konrad,

EEH support here depends on SPAPR_TCE_IOMMU which depends on either
PPC_POWERNV or PPC_PSERIES, both of which depend on PPC64. So I don't
think 32-bit kernels are a concern here. Thanks,

Alex

> > Signed-off-by: Wenwen Wang <[email protected]>
> > ---
> > include/uapi/linux/vfio.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> > index 1aa7b82..3e71ded 100644
> > --- a/include/uapi/linux/vfio.h
> > +++ b/include/uapi/linux/vfio.h
> > @@ -729,6 +729,7 @@ struct vfio_eeh_pe_op {
> > __u32 argsz;
> > __u32 flags;
> > __u32 op;
> > + __u32 __res;
> > union {
> > struct vfio_eeh_pe_err err;
> > };
> > --
> > 2.7.4
> >


2018-10-18 17:22:41

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] drivers/vfio: Fix an 8-byte alignment issue

On Wed, 2018-10-17 at 13:18 -0500, Wenwen Wang wrote:
> This patch adds a 4-byte reserved field in the structure
> vfio_eeh_pe_op to make sure that the u64 fields in the structure
> vfio_eeh_pe_err are 8-byte aligned.
>
> Signed-off-by: Wenwen Wang <[email protected]>
> ---
> include/uapi/linux/vfio.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> index 1aa7b82..3e71ded 100644
> --- a/include/uapi/linux/vfio.h
> +++ b/include/uapi/linux/vfio.h
> @@ -729,6 +729,7 @@ struct vfio_eeh_pe_op {
> __u32 argsz;
> __u32 flags;
> __u32 op;
> + __u32 __res;
> union {
> struct vfio_eeh_pe_err err;
> };

Why use an anonymous union for a single element?
Why not make struct vfio_eeh_pe_err __aligned(8)?
Why not make the u64 structure elements of
struct ufio_eeh_pe_err __aligned_u64?