Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: avoid unaligned access warnings

When building on OpenBSD/arm64 with clang 15, unaligned access
warnings are seen when a union is embedded inside a packed struct.

drm/amd/display/dmub/inc/dmub_cmd.h:941:18: error: field
cursor_copy_src within 'struct dmub_rb_cmd_mall' is less aligned than
'union dmub_addr' and is usually due to 'struct dmub_rb_cmd_mall'
being packed, which can lead to unaligned accesses
[-Werror,-Wunaligned-access]
union dmub_addr cursor_copy_src; /**< Cursor copy address */
^
drm/amd/display/dmub/inc/dmub_cmd.h:942:18: error: field cursor_copy_dst
within 'struct dmub_rb_cmd_mall' is less aligned than
'union dmub_addr' and is usually due to 'struct dmub_rb_cmd_mall'
being packed, which can lead to unaligned accesses
[-Werror,-Wunaligned-access]
union dmub_addr cursor_copy_dst; /**< Cursor copy destination */
^

Add pragma pack around dmub_addr to avoid this.

Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Jonathan Gray and committed by
Alex Deucher
6e60cba6 e26b51c7

+2
+2
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
··· 162 162 #define dmub_udelay(microseconds) udelay(microseconds) 163 163 #endif 164 164 165 + #pragma pack(push, 1) 165 166 /** 166 167 * union dmub_addr - DMUB physical/virtual 64-bit address. 167 168 */ ··· 173 172 } u; /*<< Low/high bit access */ 174 173 uint64_t quad_part; /*<< 64 bit address */ 175 174 }; 175 + #pragma pack(pop) 176 176 177 177 /** 178 178 * Dirty rect definition.