android_kernel_motorola_sm6375/include/drm
Repository files (latest commit first)
Filename Latest commit message Latest commit date
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_atomic_helper.h
drm_atomic_state_helper.h
drm_atomic_uapi.h
drm_audio_component.h
drm_auth.h
drm_blend.h
drm_bridge.h
drm_cache.h
drm_client.h drm/client: Support unmapping of DRM client buffers 2019-08-01 15:01:22 +02:00
drm_color_mgmt.h
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_damage_helper.h
drm_debugfs.h
drm_debugfs_crc.h
drm_device.h
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_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_fb_cma_helper.h
drm_fb_helper.h
drm_file.h
drm_fixed.h
drm_flip_work.h
drm_format_helper.h
drm_fourcc.h
drm_framebuffer.h
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_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
drm_legacy.h
drm_mipi_dbi.h drm/tinydrm: Move mipi-dbi 2019-07-25 10:45:07 +02:00
drm_mipi_dsi.h
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_modeset_helper_vtables.h
drm_modeset_lock.h
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_plane_helper.h
drm_prime.h
drm_print.h
drm_probe_helper.h
drm_property.h
drm_rect.h
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
drm_syncobj.h
drm_sysfs.h drm: uevent for connector status change 2019-08-06 13:16:54 +05:30
drm_util.h
drm_utils.h
drm_vblank.h drm: drop uapi dependency from drm_vblank.h 2019-07-19 23:24:16 +02:00
drm_vma_manager.h
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
drmP.h dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
gma_drm.h
gpu_scheduler.h
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
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