Linus Torvalds
ebede9aadf
drm: fix EDID struct for old ARM OABI format
...
[ Upstream commit 47f15561b69e226bfc034e94ff6dbec51a4662af ]
When building the kernel for arm with the "-mabi=apcs-gnu" option, gcc
will force alignment of all structures and unions to a word boundary
(see also STRUCTURE_SIZE_BOUNDARY and the "-mstructure-size-boundary=XX"
option if you're a gcc person), even when the members of said structures
do not want or need said alignment.
This completely messes up the structure alignment of 'struct edid' on
those targets, because even though all the embedded structures are
marked with "__attribute__((packed))", the unions that contain them are
not.
This was exposed by commit f1e4c916f97f ("drm/edid: add EDID block count
and size helpers"), but the bug is pre-existing. That commit just made
the structure layout problem cause a build failure due to the addition
of the
BUILD_BUG_ON(sizeof(*edid) != EDID_LENGTH);
sanity check in drivers/gpu/drm/drm_edid.c:edid_block_data().
This legacy union alignment should probably not be used in the first
place, but we can fix the layout by adding the packed attribute to the
union entries even when each member is already packed and it shouldn't
matter in a sane build environment.
You can see this issue with a trivial test program:
union {
struct {
char c[5];
};
struct {
char d;
unsigned e;
} __attribute__((packed));
} a = { "1234" };
where building this with a normal "gcc -S" will result in the expected
5-byte size of said union:
.type a, @object
.size a, 5
but with an ARM compiler and the old ABI:
arm-linux-gnu-gcc -mabi=apcs-gnu -mfloat-abi=soft -S t.c
you get
.type a, %object
.size a, 8
instead, because even though each member of the union is packed, the
union itself still gets aligned.
This was reported by Sudip for the spear3xx_defconfig target.
Link: https://lore.kernel.org/lkml/YpCUzStDnSgQLNFN@debian/
Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-06-14 18:11:31 +02:00
..
bridge
drm/bridge: analogix_dp: Split bind() into probe() and real bind()
2020-05-10 10:31:22 +02:00
i2c
ttm
drm-misc-next for 5.4:
2019-08-21 16:44:41 +10:00
amd_asic_type.h
drm/amdgpu: add renoir asic_type enum
2019-08-12 12:47:49 -05:00
ati_pcigart.h
drm_agpsupport.h
drm/agp: Remove unused function drm_agp_bind_pages
2019-07-15 18:11:30 +02:00
drm_atomic.h
drm: Add helpers to kick off self refresh mode in drivers
2019-06-13 14:31:10 -04:00
drm_atomic_helper.h
drm/atomic: Move __drm_atomic_helper_disable_plane/set_config()
2019-06-08 16:46:37 +02:00
drm_atomic_state_helper.h
drm/atomic: Add a function to reset connector TV properties
2019-06-19 12:17:52 +02:00
drm_atomic_uapi.h
drm_audio_component.h
Prep patches + headers for the mei-hdcp/i915 component interfaces
2019-02-20 11:53:48 +02:00
drm_auth.h
drm: make drm/drm_auth.h self contained
2019-05-27 18:05:44 +02:00
drm_blend.h
drm_bridge.h
drm-misc-next for v5.3:
2019-06-14 11:44:24 +02:00
drm_cache.h
drm: change func to better detect wether swiotlb is needed
2019-02-20 13:29:29 +01:00
drm_client.h
drm/client: Support unmapping of DRM client buffers
2019-08-01 15:01:22 +02:00
drm_color_mgmt.h
drm: Constify drm_color_lut_check()
2019-01-29 23:26:12 +02:00
drm_connector.h
drm: Fix kerneldoc warns in connector-related docs
2019-08-12 10:16:39 -04:00
drm_crtc.h
drm: Fix kerneldoc and remove unused struct member in self_refresh helper
2019-09-19 10:03:19 -04:00
drm_crtc_helper.h
drm: Split out drm_probe_helper.h
2019-01-24 13:20:42 +01:00
drm_damage_helper.h
drm/damage-helper: Add drm_atomic_helper_damage_merged()
2019-01-17 10:56:54 +01:00
drm_debugfs.h
drm: drm_debugfs.h self-contained
2019-06-10 22:30:24 +02:00
drm_debugfs_crc.h
drm_device.h
drm: Integrate VRAM MM into struct drm_device
2019-05-15 16:17:06 +02:00
drm_displayid.h
drm/edid: parse CEA blocks embedded in DisplayID
2019-06-25 14:32:26 +10:00
drm_dp_dual_mode_helper.h
drm_dp_helper.h
drm/dp_mst: Enable registration of AUX devices for MST ports
2019-07-25 16:39:35 -04:00
drm_dp_mst_helper.h
drm: mst: Fix query_payload ack reply struct
2019-12-31 16:42:19 +01:00
drm_drv.h
drm/prime: Ditch gem_prime_res_obj hook
2019-07-31 10:19:23 +02:00
drm_dsc.h
drm/dsc: Split DSC PPS and SDP header initialisations
2019-03-05 13:24:34 -05:00
drm_edid.h
drm: fix EDID struct for old ARM OABI format
2022-06-14 18:11:31 +02:00
drm_encoder.h
drm_encoder_slave.h
drm: remove include of drmP.h from drm_encoder_slave.h
2019-01-09 22:35:35 +01:00
drm_fb_cma_helper.h
drm/cma-helper: Remove unused fbdev code
2019-01-17 10:56:38 +01:00
drm_fb_helper.h
drm/fb-helper: Prepare to move out modeset config code
2019-06-11 14:47:17 +02:00
drm_file.h
drm/legacy: remove some legacy lock struct members
2019-04-24 12:36:32 +10:00
drm_fixed.h
drm_flip_work.h
drm_format_helper.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
drm_fourcc.h
drm/fourcc: Fix the parameters name in the documentation
2019-05-21 16:58:05 +02:00
drm_framebuffer.h
drm/fb: document dirty helper better
2019-06-11 18:02:48 +02:00
drm_gem.h
dma-buf: rename reservation_object to dma_resv
2019-08-13 09:09:30 +02:00
drm_gem_cma_helper.h
drm: remove drmP.h from drm_gem_cma_helper.h
2019-01-09 22:54:08 +01:00
drm_gem_framebuffer_helper.h
drm/fb: remove unused function: drm_gem_fbdev_fb_create()
2019-07-21 19:32:38 +02:00
drm_gem_shmem_helper.h
drm/shmem: Add docbook comments for drm_gem_shmem_object madvise fields
2019-11-06 17:57:42 -06:00
drm_gem_vram_helper.h
drm/vram: use embedded gem object
2019-08-06 08:21:53 +02:00
drm_hashtab.h
drm_hdcp.h
drm/hdcp: update content protection property with uevent
2019-08-06 13:17:23 +05:30
drm_ioctl.h
drm: Return -ENOTTY for non-drm ioctls
2021-07-28 13:31:01 +02:00
drm_irq.h
drm_lease.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
2019-05-30 11:26:37 -07:00
drm_legacy.h
drm: make drm/drm_legacy.h self-contained
2019-05-27 18:06:15 +02:00
drm_mipi_dbi.h
drm/tinydrm: Move mipi-dbi
2019-07-25 10:45:07 +02:00
drm_mipi_dsi.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
drm_mm.h
drm_mode_config.h
drm/drm_fb_helper: fix fbdev with sparc64
2020-08-11 15:33:37 +02:00
drm_mode_object.h
drm_modes.h
drm/selftests: reduce stack usage
2019-07-01 09:50:58 +02:00
drm_modeset_helper.h
drm: remove drmP.h from drm_modeset_helper.h
2019-02-07 21:48:34 +01:00
drm_modeset_helper_vtables.h
Linux 5.2-rc5
2019-06-19 12:07:29 +02:00
drm_modeset_lock.h
drm: Trivial comment grammar cleanups
2019-02-04 10:21:17 +01:00
drm_of.h
drm_os_linux.h
drm_panel.h
drm/panel: drop return code from drm_panel_detach()
2019-08-10 15:41:48 +02:00
drm_pci.h
drm_pciids.h
drm_plane.h
drm/docs: More links for implicit/explicit fencing.
2019-06-03 17:11:33 +02:00
drm_plane_helper.h
drm_prime.h
drm/prime: Align gem_prime_export with obj_funcs.export
2019-06-21 17:30:49 +02:00
drm_print.h
drm: fix build errors with drm_print.h
2019-06-10 22:58:53 +02:00
drm_probe_helper.h
drm: Split out drm_probe_helper.h
2019-01-24 13:20:42 +01:00
drm_property.h
drm_rect.h
drm: Nuke drm_calc_{h,v}scale_relaxed()
2019-02-07 13:14:06 +02:00
drm_scdc_helper.h
drm_self_refresh_helper.h
drm/atomic: fix self-refresh helpers crtc state dereference
2019-11-06 13:00:21 -05:00
drm_simple_kms_helper.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
drm_syncobj.h
drm/syncobj: add new drm_syncobj_add_point interface v4
2019-04-01 12:05:53 +02:00
drm_sysfs.h
drm: uevent for connector status change
2019-08-06 13:16:54 +05:30
drm_util.h
drm: fix drm_can_sleep() comment
2019-01-21 10:30:12 +01:00
drm_utils.h
drm: export drm_timeout_abs_to_jiffies
2019-03-07 12:00:30 -06:00
drm_vblank.h
drm: drop uapi dependency from drm_vblank.h
2019-07-19 23:24:16 +02:00
drm_vma_manager.h
drm: increase drm mmap_range size to 1TB
2019-04-24 16:20:23 -05:00
drm_vram_mm_helper.h
drm: add missing include to drm_vram_mm_helper.h
2019-07-15 18:11:31 +02:00
drm_writeback.h
drm: writeback: Add job prepare and cleanup operations
2019-03-18 17:24:38 +02:00
drmP.h
dma-buf: rename reservation_object to dma_resv
2019-08-13 09:09:30 +02:00
gma_drm.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 335
2019-06-05 17:37:06 +02:00
gpu_scheduler.h
drm/scheduler: Add flag to hint the release of guilty job.
2019-05-02 15:50:55 -05:00
i915_component.h
drm/i915/tgl: Add additional ports for Tiger Lake
2019-07-11 16:31:14 -07:00
i915_drm.h
drm/i915: Drop extern qualifiers from header function prototypes
2019-07-12 13:04:54 +01:00
i915_mei_hdcp_interface.h
drm/i915: header for i915 - MEI_HDCP interface
2019-02-15 18:56:35 +01:00
i915_pciids.h
drm/i915/cml: Add Missing PCI IDs
2019-08-15 12:55:54 -07:00
intel-gtt.h
iommu/vt-d: Move intel_iommu_gfx_mapped to Intel IOMMU header
2020-11-24 13:29:17 +01:00
intel_lpe_audio.h
spsc_queue.h