drm/xe: Add explicit padding to uAPI definition
authorChristopher Snowhill <kode54@gmail.com>
Thu, 25 May 2023 01:56:06 +0000 (18:56 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:34:01 +0000 (18:34 -0500)
Pad the uAPI definition so that it would align identically between
64-bit and 32-bit uarch, so consumers using this header will work
correctly from 32-bit compat userspace on a 64-bit kernel. Do it
in a minimally invasive way, so that 64-bit userspace will still
work with the previous header, and so that no fields suddenly
change sizes.

Originally inspired by mlankhorst.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
include/uapi/drm/xe_drm.h

index b3bcb71..34aff9e 100644 (file)
@@ -91,7 +91,7 @@ struct xe_user_extension {
         */
        __u32 name;
        /**
-        * @flags: MBZ
+        * @pad: MBZ
         *
         * All undefined bits must be zero.
         */
@@ -291,6 +291,9 @@ struct drm_xe_gem_create {
         */
        __u32 handle;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        /** @reserved: Reserved */
        __u64 reserved[2];
 };
@@ -335,6 +338,9 @@ struct drm_xe_ext_vm_set_property {
 #define XE_VM_PROPERTY_BIND_OP_ERROR_CAPTURE_ADDRESS           0
        __u32 property;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        /** @value: property value */
        __u64 value;
 
@@ -379,6 +385,9 @@ struct drm_xe_vm_bind_op {
         */
        __u32 obj;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        union {
                /**
                 * @obj_offset: Offset into the object, MBZ for CLEAR_RANGE,
@@ -469,6 +478,9 @@ struct drm_xe_vm_bind {
        /** @num_binds: number of binds in this IOCTL */
        __u32 num_binds;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        union {
                /** @bind: used if num_binds == 1 */
                struct drm_xe_vm_bind_op bind;
@@ -482,6 +494,9 @@ struct drm_xe_vm_bind {
        /** @num_syncs: amount of syncs to wait on */
        __u32 num_syncs;
 
+       /** @pad2: MBZ */
+       __u32 pad2;
+
        /** @syncs: pointer to struct drm_xe_sync array */
        __u64 syncs;
 
@@ -497,6 +512,9 @@ struct drm_xe_ext_engine_set_property {
        /** @property: property to set */
        __u32 property;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        /** @value: property value */
        __u64 value;
 };
@@ -612,6 +630,9 @@ struct drm_xe_sync {
 #define DRM_XE_SYNC_USER_FENCE         0x3
 #define DRM_XE_SYNC_SIGNAL             0x10
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        union {
                __u32 handle;
                /**
@@ -656,6 +677,9 @@ struct drm_xe_exec {
         */
        __u16 num_batch_buffer;
 
+       /** @pad: MBZ */
+       __u16 pad[3];
+
        /** @reserved: Reserved */
        __u64 reserved[2];
 };
@@ -718,6 +742,8 @@ struct drm_xe_wait_user_fence {
 #define DRM_XE_UFENCE_WAIT_ABSTIME     (1 << 1)
 #define DRM_XE_UFENCE_WAIT_VM_ERROR    (1 << 2)
        __u16 flags;
+       /** @pad: MBZ */
+       __u32 pad;
        /** @value: compare value */
        __u64 value;
        /** @mask: comparison mask */
@@ -750,6 +776,9 @@ struct drm_xe_vm_madvise {
        /** @vm_id: The ID VM in which the VMA exists */
        __u32 vm_id;
 
+       /** @pad: MBZ */
+       __u32 pad;
+
        /** @range: Number of bytes in the VMA */
        __u64 range;
 
@@ -794,6 +823,9 @@ struct drm_xe_vm_madvise {
        /** @property: property to set */
        __u32 property;
 
+       /** @pad2: MBZ */
+       __u32 pad2;
+
        /** @value: property value */
        __u64 value;