Re: [git pull] drm fixes for 7.3-rc2
From: Arnd Bergmann
Date: Mon Sep 07 2026 - 04:44:16 EST
On Mon, Sep 7, 2026, at 09:38, Geert Uytterhoeven wrote:
> Sorry, forgot to CC Arnd for the uapi breakage
Thanks!
> On Mon, 7 Sept 2026 at 09:36, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote:
>> On Fri, 4 Sept 2026 at 21:52, Dave Airlie <airlied@xxxxxxxxx> wrote:
>> > amdgpu:
>> > - Fix for drm_amdgpu_info_device with mixed 64 bit kernel and 32 bit userspace
>>
>> This commit contains a "cherry picked from"-reference to a
>> non-existing commit in upstream (it does exist in linux-next),
>> and mentions a discussion between three people.
>> It would have been better to include a link to that discusion:
>> https://lore.kernel.org/20260820045438.3974-1-yogesh.mohanmarimuthu@xxxxxxx
Agreed, and at least mention that this breaks native x86-32
binaries until a user space recompile. If we're breaking this now,
I would also suggest adding corresponding padding at the end of
drm_amdgpu_gem_metadata and drm_amdgpu_info_hw_ip to align
the x86-32 ABI with the other architectures.
As far as I can tell, drm_ioctl_desc is robust against padding
at the end of a structure, but having different
numeric values for DRM_IOCTL_AMDGPU_GEM_METADATA based on
-m32/-m64 compiler flags is an unnecessary source of confusion.
For references, see below for all structures in include/drm
contain implicit padding, from my patch series to add -Wpadded
and shut up known warnings. Most of these are already handled
correctly in drm compat handlers, but a few may need to be
addressed better:
- drm_i915_query_perf_config looks like it gets the wrong
data pointer, and may need a fix in the compat handler
- drm_radeon appears to completely lack proper compat
structure conversion and just passes everything to
the native handler, which is broken on all compat
architectures in addition to the x86-32 padding issue
- panfrost/v3d/vc4 can just make the implicit padding explicit
to avoid the -Wpadded warnings, since these are never
used on x86-32
- hexagon is a special beast and may need a better global
fix to align with normal enum types.
Arnd
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 9f3090db2f16..0114289f8369 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -713,7 +713,8 @@ struct drm_amdgpu_gem_metadata {
__u64 tiling_info;
__u32 data_size_bytes;
__u32 data[64];
- } data;
+ __uapi_arch_pad32;
+ } __uapi_arch_align data;
};
struct drm_amdgpu_gem_mmap_in {
@@ -1510,6 +1511,7 @@ struct drm_amdgpu_info_device {
__u64 high_va_max;
/* gfx10 pa_sc_tile_steering_override */
__u32 pa_sc_tile_steering_override;
+ __uapi_arch_pad32;
/* disabled TCCs */
__u64 tcc_disabled_mask;
__u64 min_engine_clock;
@@ -1535,7 +1537,8 @@ struct drm_amdgpu_info_device {
/* Userq IP mask (1 << AMDGPU_HW_IP_*) */
__u32 userq_ip_mask;
__u32 pad;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
struct drm_amdgpu_info_hw_ip {
/** Version of h/w IP */
@@ -1553,7 +1556,8 @@ struct drm_amdgpu_info_hw_ip {
__u32 ip_discovery_version;
/* Userq available slots */
__u32 userq_num_slots;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
struct drm_amdgpu_info_num_handles {
/** Max handles as supported by firmware for UVD */
diff --git a/include/uapi/drm/armada_drm.h b/include/uapi/drm/armada_drm.h
index af1c14c837c5..4cbec706d4f2 100644
--- a/include/uapi/drm/armada_drm.h
+++ b/include/uapi/drm/armada_drm.h
@@ -45,7 +45,8 @@ struct drm_armada_gem_pwrite {
__u32 handle;
__u32 offset;
__u32 size;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
#define DRM_IOCTL_ARMADA_GEM_PWRITE \
ARMADA_IOCTL(IOW, GEM_PWRITE, gem_pwrite)
diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
index bc7ef7684099..2d18ccff8b62 100644
--- a/include/uapi/drm/drm.h
+++ b/include/uapi/drm/drm.h
@@ -87,8 +87,9 @@ struct drm_clip_rect {
*/
struct drm_drawable_info {
unsigned int num_rects;
+ __uapi_arch_pad_long;
struct drm_clip_rect *rects;
-};
+} __uapi_arch_align;
/*
* Texture region,
@@ -122,13 +123,14 @@ struct drm_version {
int version_major; /**< Major version */
int version_minor; /**< Minor version */
int version_patchlevel; /**< Patch level */
+ __uapi_arch_pad_long;
__kernel_size_t name_len; /**< Length of name buffer */
char __user *name; /**< Name of driver */
__kernel_size_t date_len; /**< Length of date buffer */
char __user *date; /**< User-space buffer to hold date */
__kernel_size_t desc_len; /**< Length of desc buffer */
char __user *desc; /**< User-space buffer to hold desc */
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_GET_UNIQUE ioctl argument type.
@@ -142,6 +144,7 @@ struct drm_unique {
struct drm_list {
int count; /**< Length of user-space structures */
+ __uapi_arch_pad_long;
struct drm_version __user *version;
};
@@ -192,8 +195,9 @@ enum drm_map_flags {
struct drm_ctx_priv_map {
unsigned int ctx_id; /**< Context requesting private mapping */
+ __uapi_arch_pad_long;
void *handle; /**< Handle of map */
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
@@ -209,8 +213,9 @@ struct drm_map {
void *handle; /**< User-space: "Handle" to pass to mmap() */
/**< Kernel-space: kernel-virtual address */
int mtrr; /**< MTRR slot used */
+ __uapi_arch_pad_long;
/* Private data */
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_GET_CLIENT ioctl argument type.
@@ -252,7 +257,12 @@ struct drm_stats {
struct {
unsigned long value;
enum drm_stat_type type;
- } data[15];
+ __uapi_arch_pad_long;
+#ifdef __hexagon__
+ /* hexagon uses short enums */
+ __u8 :8, :8, :8;
+#endif
+ } __uapi_arch_align data[15];
};
/*
@@ -326,6 +336,7 @@ struct drm_buf_desc {
_DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */
_DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
} flags;
+ __uapi_arch_pad_long;
unsigned long agp_start; /**<
* Start address of where the AGP buffers are
* in the AGP aperture
@@ -337,16 +348,18 @@ struct drm_buf_desc {
*/
struct drm_buf_info {
int count; /**< Entries in list */
+ __uapi_arch_pad_long;
struct drm_buf_desc __user *list;
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_FREE_BUFS ioctl argument type.
*/
struct drm_buf_free {
int count;
+ __uapi_arch_pad_long;
int __user *list;
-};
+} __uapi_arch_align;
/*
* Buffer information
@@ -357,21 +370,23 @@ struct drm_buf_pub {
int idx; /**< Index into the master buffer list */
int total; /**< Buffer size */
int used; /**< Amount of buffer in use (for DMA) */
+ __uapi_arch_pad_long;
void __user *address; /**< Address of buffer */
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_MAP_BUFS ioctl argument type.
*/
struct drm_buf_map {
int count; /**< Length of the buffer list */
+ __uapi_arch_pad_long;
#ifdef __cplusplus
void __user *virt;
#else
void __user *virtual; /**< Mmap'd area in user-virtual */
#endif
struct drm_buf_pub __user *list; /**< Buffer information */
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_DMA ioctl argument type.
@@ -388,10 +403,12 @@ struct drm_dma {
enum drm_dma_flags flags; /**< Flags */
int request_count; /**< Number of buffers requested */
int request_size; /**< Desired size for buffers */
+ __uapi_arch_pad_long;
int __user *request_indices; /**< Buffer information */
int __user *request_sizes;
int granted_count; /**< Number of buffers granted */
-};
+ __uapi_arch_pad_long;
+} __uapi_arch_align;
enum drm_ctx_flags {
_DRM_CONTEXT_PRESERVED = 0x01,
@@ -413,8 +430,9 @@ struct drm_ctx {
*/
struct drm_ctx_res {
int count;
+ __uapi_arch_pad_long;
struct drm_ctx __user *contexts;
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
@@ -434,8 +452,9 @@ struct drm_update_draw {
drm_drawable_t handle;
unsigned int type;
unsigned int num;
+ __uapi_arch_pad32;
unsigned long long data;
-};
+} __uapi_arch_align;
/*
* DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
@@ -559,7 +578,8 @@ struct drm_agp_info {
/* PCI information */
unsigned short id_vendor;
unsigned short id_device;
-};
+ __uapi_arch_pad_long;
+} __uapi_arch_align;
/*
* DRM_IOCTL_SG_ALLOC ioctl argument type.
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 381a3e857d4e..7da67277fb5f 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -350,7 +350,8 @@ struct drm_mode_get_plane {
struct drm_mode_get_plane_res {
__u64 plane_id_ptr;
__u32 count_planes;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
#define DRM_MODE_ENCODER_NONE 0
#define DRM_MODE_ENCODER_DAC 1
@@ -628,14 +629,16 @@ struct drm_mode_obj_get_properties {
__u32 count_props;
__u32 obj_id;
__u32 obj_type;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
struct drm_mode_obj_set_property {
__u64 value;
__u32 prop_id;
__u32 obj_id;
__u32 obj_type;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
struct drm_mode_get_blob {
__u32 blob_id;
@@ -723,8 +726,9 @@ struct drm_mode_fb_cmd2 {
* constants in ``drm_fourcc.h``. All planes must use the same
* modifier. Ignored unless &DRM_MODE_FB_MODIFIERS is set in @flags.
*/
+ __uapi_arch_pad32;
__u64 modifier[4];
-};
+} __uapi_arch_align;
#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
@@ -1078,7 +1082,8 @@ struct hdr_output_metadata {
union {
struct hdr_metadata_infoframe hdmi_metadata_type1;
};
-};
+ __uapi_arch_pad16;
+} __uapi_arch_align;
/**
* DRM_MODE_PAGE_FLIP_EVENT
diff --git a/include/uapi/drm/etnaviv_drm.h b/include/uapi/drm/etnaviv_drm.h
index af024d90453d..abd0cafa231f 100644
--- a/include/uapi/drm/etnaviv_drm.h
+++ b/include/uapi/drm/etnaviv_drm.h
@@ -140,6 +140,7 @@ struct drm_etnaviv_gem_submit_reloc {
__u32 reloc_idx; /* in, index of reloc_bo buffer */
__u64 reloc_offset; /* in, offset from start of reloc_bo */
__u32 flags; /* in, placeholder for now, no defined values */
+ __uapi_arch_pad32;
};
/* Each buffer referenced elsewhere in the cmdstream submit (ie. the
@@ -263,7 +264,8 @@ struct drm_etnaviv_pm_signal {
__u16 iter; /* in/out, select pm source at index iter */
__u16 id; /* out, id of signal */
char name[64]; /* out, name of domain */
-};
+ __uapi_arch_pad16;
+} __uapi_arch_align;
#define DRM_ETNAVIV_GET_PARAM 0x00
/* placeholder:
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index 535cb68fdb5c..13ff9be3db27 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -28,6 +28,7 @@
#define _UAPI_I915_DRM_H_
#include "drm.h"
+#include <linux/stddef.h>
#if defined(__cplusplus)
extern "C" {
@@ -559,6 +560,7 @@ typedef struct drm_i915_batchbuffer {
int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
int num_cliprects; /* mulitpass with multiple cliprects? */
+ __uapi_arch_pad_long;
struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
} drm_i915_batchbuffer_t;
@@ -820,6 +822,7 @@ typedef struct drm_i915_irq_wait {
struct drm_i915_getparam {
/** @param: Driver parameter to query. */
__s32 param;
+ __uapi_arch_pad_long;
/**
* @value: Address of memory where queried value should be put.
@@ -828,7 +831,7 @@ struct drm_i915_getparam {
* compat32 code. Don't repeat this mistake.
*/
int __user *value;
-};
+} __uapi_arch_align;
/**
* typedef drm_i915_getparam_t - Driver parameter query structure.
@@ -857,8 +860,9 @@ typedef struct drm_i915_mem_alloc {
int region;
int alignment;
int size;
+ __uapi_arch_pad_long;
int __user *region_offset; /* offset from start of fb or agp */
-} drm_i915_mem_alloc_t;
+} __uapi_arch_align drm_i915_mem_alloc_t;
typedef struct drm_i915_mem_free {
int region;
@@ -3422,7 +3426,19 @@ struct drm_i915_query_perf_config {
* String formatted like "%08x-%04x-%04x-%04x-%012x"
*/
char uuid[36];
- };
+
+ /*
+ * uuid is the longest field in the union but is not a multiple
+ * of alignof(__u64) in size, which leads to a -Wpadded warning.
+ * add an explicit union member here with the correct size on
+ * the architectures that need padding or zero length on those
+ * that do not.
+ */
+ struct {
+ char __pad[36];
+ __uapi_arch_pad32;
+ };
+ } __uapi_arch_align;
/**
* @flags:
@@ -3447,8 +3463,11 @@ struct drm_i915_query_perf_config {
* - &drm_i915_perf_oa_config.n_boolean_regs
* - &drm_i915_perf_oa_config.n_flex_regs
*/
- __u8 data[];
-};
+ union {
+ __uapi_arch_pad32; /* pad to alignof(__u64) */
+ __DECLARE_FLEX_ARRAY(__u8, data);
+ };
+} __uapi_arch_align;
/**
* enum drm_i915_gem_memory_class - Supported memory classes
@@ -3867,7 +3886,8 @@ struct drm_i915_gem_create_ext_protected_content {
struct i915_user_extension base;
/** @flags: reserved for future usage, currently MBZ */
__u32 flags;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
/**
* struct drm_i915_gem_create_ext_set_pat - The
diff --git a/include/uapi/drm/ivpu_accel.h b/include/uapi/drm/ivpu_accel.h
index 264505d54f93..f80a580a21bc 100644
--- a/include/uapi/drm/ivpu_accel.h
+++ b/include/uapi/drm/ivpu_accel.h
@@ -389,7 +389,8 @@ struct drm_ivpu_submit {
* %DRM_IVPU_JOB_PRIORITY_REALTIME
*/
__u32 priority;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
/**
* struct drm_ivpu_cmdq_submit - Submit commands to the VPU using explicit command queue
@@ -488,7 +489,8 @@ struct drm_ivpu_metric_streamer_start {
__u32 sample_size;
/** @max_data_size: Returned max @data_size from %DRM_IOCTL_IVPU_METRIC_STREAMER_GET_DATA */
__u32 max_data_size;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
/**
* struct drm_ivpu_metric_streamer_get_data - Copy collected metric data
diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h
index 7f2e594be4eb..d5c6c9d40bc4 100644
--- a/include/uapi/drm/msm_drm.h
+++ b/include/uapi/drm/msm_drm.h
@@ -430,7 +430,8 @@ struct drm_msm_wait_fence {
__u32 flags; /* in, bitmask of MSM_WAIT_FENCE_x */
struct drm_msm_timespec timeout; /* in */
__u32 queueid; /* in, submitqueue id */
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
/* madvise provides a way to tell the kernel in case a buffers contents
* can be discarded under memory pressure, which is useful for userspace
diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h
index 50d5337f35ef..f5b1e3b56897 100644
--- a/include/uapi/drm/panfrost_drm.h
+++ b/include/uapi/drm/panfrost_drm.h
@@ -402,14 +402,16 @@ struct panfrost_dump_object_header {
__u32 gpu_id;
__u32 major;
__u32 minor;
+ __uapi_arch_pad32;
__u64 nbos;
- } reghdr;
+ } __uapi_arch_align reghdr;
struct {
__u32 valid;
+ __uapi_arch_pad32;
__u64 iova;
__u32 data[2];
- } bomap;
+ } __uapi_arch_align bomap;
/*
* Force same size in case we want to expand the header
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index 490a59cc4532..95db5d8eea49 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -569,6 +569,7 @@ typedef struct drm_radeon_init {
RADEON_INIT_R300_CP = 0x04,
RADEON_INIT_R600_CP = 0x05
} func;
+ __uapi_arch_pad_long;
unsigned long sarea_priv_offset;
int is_pci;
int cp_mode;
@@ -581,6 +582,7 @@ typedef struct drm_radeon_init {
unsigned int back_offset, back_pitch;
unsigned int depth_bpp;
unsigned int depth_offset, depth_pitch;
+ __uapi_arch_pad_long;
unsigned long fb_offset;
unsigned long mmio_offset;
@@ -588,7 +590,7 @@ typedef struct drm_radeon_init {
unsigned long ring_rptr_offset;
unsigned long buffers_offset;
unsigned long gart_textures_offset;
-} drm_radeon_init_t;
+} __uapi_arch_align drm_radeon_init_t;
typedef struct drm_radeon_cp_stop {
int flush;
@@ -619,8 +621,9 @@ typedef struct drm_radeon_clear {
unsigned int clear_depth;
unsigned int color_mask;
unsigned int depth_mask; /* misnamed field: should be stencil */
+ __uapi_arch_pad_long;
drm_radeon_clear_rect_t __user *depth_boxes;
-} drm_radeon_clear_t;
+} __uapi_arch_align drm_radeon_clear_t;
typedef struct drm_radeon_vertex {
int prim;
@@ -645,10 +648,12 @@ typedef struct drm_radeon_vertex2 {
int idx; /* Index of vertex buffer */
int discard; /* Client finished with buffer? */
int nr_states;
+ __uapi_arch_pad_long;
drm_radeon_state_t __user *state;
int nr_prims;
+ __uapi_arch_pad_long;
drm_radeon_prim_t __user *prim;
-} drm_radeon_vertex2_t;
+} __uapi_arch_align drm_radeon_vertex2_t;
/* v1.3 - obsoletes drm_radeon_vertex2
* - allows arbitrarily large cliprect list
@@ -662,10 +667,12 @@ typedef struct drm_radeon_vertex2 {
*/
typedef struct drm_radeon_cmd_buffer {
int bufsz;
+ __uapi_arch_pad_long;
char __user *buf;
int nbox;
+ __uapi_arch_pad_long;
struct drm_clip_rect __user *boxes;
-} drm_radeon_cmd_buffer_t;
+} __uapi_arch_align drm_radeon_cmd_buffer_t;
typedef struct drm_radeon_tex_image {
unsigned int x, y; /* Blit coordinates */
@@ -679,6 +686,7 @@ typedef struct drm_radeon_texture {
int format;
int width; /* Texture image coordinates */
int height;
+ __uapi_arch_pad_long;
drm_radeon_tex_image_t __user *image;
} drm_radeon_texture_t;
@@ -723,8 +731,9 @@ typedef struct drm_radeon_indirect {
typedef struct drm_radeon_getparam {
int param;
+ __uapi_arch_pad_long;
void __user *value;
-} drm_radeon_getparam_t;
+} __uapi_arch_align drm_radeon_getparam_t;
/* 1.6: Set up a memory manager for regions of shared memory:
*/
@@ -735,8 +744,9 @@ typedef struct drm_radeon_mem_alloc {
int region;
int alignment;
int size;
+ __uapi_arch_pad_long;
int __user *region_offset; /* offset from start of fb or GART */
-} drm_radeon_mem_alloc_t;
+} __uapi_arch_align drm_radeon_mem_alloc_t;
typedef struct drm_radeon_mem_free {
int region;
@@ -765,8 +775,9 @@ typedef struct drm_radeon_irq_wait {
typedef struct drm_radeon_setparam {
unsigned int param;
+ __uapi_arch_pad32;
__s64 value;
-} drm_radeon_setparam_t;
+} __uapi_arch_align drm_radeon_setparam_t;
#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */
#define RADEON_SETPARAM_SWITCH_TILING 2 /* enable/disable color tiling */
@@ -816,7 +827,8 @@ struct drm_radeon_gem_create {
__u32 handle;
__u32 initial_domain;
__u32 flags;
-};
+ __uapi_arch_pad32;
+} __uapi_arch_align;
/*
* This is not a reliable API and you should expect it to fail for any
diff --git a/include/uapi/drm/v3d_drm.h b/include/uapi/drm/v3d_drm.h
index d9b01f4c3a04..626e0619770d 100644
--- a/include/uapi/drm/v3d_drm.h
+++ b/include/uapi/drm/v3d_drm.h
@@ -354,6 +354,8 @@ struct drm_v3d_submit_csd {
__u32 cfg[7];
__u32 coef[4];
+ __uapi_arch_pad32;
+
/* Pointer to a u32 array of the BOs that are referenced by the job.
*/
__u64 bo_handles;
@@ -379,7 +381,7 @@ struct drm_v3d_submit_csd {
__u32 flags;
__u32 pad;
-};
+} __uapi_arch_align;
/**
* struct drm_v3d_indirect_csd - ioctl extension for the CPU job to create an
diff --git a/include/uapi/drm/vc4_drm.h b/include/uapi/drm/vc4_drm.h
index 2cac6277a1d7..bdfaabe35474 100644
--- a/include/uapi/drm/vc4_drm.h
+++ b/include/uapi/drm/vc4_drm.h
@@ -432,8 +432,9 @@ struct drm_vc4_perfmon_destroy {
*/
struct drm_vc4_perfmon_get_values {
__u32 id;
+ __uapi_arch_pad32;
__u64 values_ptr;
-};
+} __uapi_arch_align;
#if defined(__cplusplus)
}
diff --git a/include/uapi/drm/vmwgfx_drm.h b/include/uapi/drm/vmwgfx_drm.h
index 7d786a0cc835..11553d87e1b7 100644
--- a/include/uapi/drm/vmwgfx_drm.h
+++ b/include/uapi/drm/vmwgfx_drm.h
@@ -227,6 +227,9 @@ struct drm_vmw_surface_create_req {
struct drm_vmw_surface_arg {
__s32 sid;
enum drm_vmw_handle_type handle_type;
+#ifdef __hexagon__
+ __u8 :8, :8, :8;
+#endif
};
/**
@@ -865,6 +868,9 @@ enum drm_vmw_shader_type {
*/
struct drm_vmw_shader_create_arg {
enum drm_vmw_shader_type shader_type;
+#ifdef __hexagon__
+ __u8 :8, :8, :8;
+#endif
__u32 size;
__u32 buffer_handle;
__u32 shader_handle;
@@ -941,6 +947,9 @@ struct drm_vmw_gb_surface_create_req {
__u32 format;
__u32 mip_levels;
enum drm_vmw_surface_flags drm_surface_flags;
+#ifdef __hexagon__
+ __u8 :8, :8, :8;
+#endif
__u32 multisample_count;
__u32 autogen_filter;
__u32 buffer_handle;
@@ -1170,6 +1179,10 @@ enum drm_vmw_surface_version {
struct drm_vmw_gb_surface_create_ext_req {
struct drm_vmw_gb_surface_create_req base;
enum drm_vmw_surface_version version;
+#ifdef __hexagon__
+ /* hexagon uses short enums */
+ __u8 :8, :8, :8;
+#endif
__u32 svga3d_flags_upper_32_bits;
__u32 multisample_pattern;
__u32 quality_level;