mirror-linux/drivers/gpu/drm
Linus Torvalds ca7e917769 Rework of APIC enumeration and topology evaluation:
The current implementation has a couple of shortcomings:
 
   - It fails to handle hybrid systems correctly.
 
   - The APIC registration code which handles CPU number assignents is in
     the middle of the APIC code and detached from the topology evaluation.
 
   - The various mechanisms which enumerate APICs, ACPI, MPPARSE and guest
     specific ones, tweak global variables as they see fit or in case of
     XENPV just hack around the generic mechanisms completely.
 
   - The CPUID topology evaluation code is sprinkled all over the vendor
     code and reevaluates global variables on every hotplug operation.
 
   - There is no way to analyze topology on the boot CPU before bringing up
     the APs. This causes problems for infrastructure like PERF which needs
     to size certain aspects upfront or could be simplified if that would be
     possible.
 
   - The APIC admission and CPU number association logic is incomprehensible
     and overly complex and needs to be kept around after boot instead of
     completing this right after the APIC enumeration.
 
 This update addresses these shortcomings with the following changes:
 
   - Rework the CPUID evaluation code so it is common for all vendors and
     provides information about the APIC ID segments in a uniform way
     independent of the number of segments (Thread, Core, Module, ..., Die,
     Package) so that this information can be computed instead of rewriting
     global variables of dubious value over and over.
 
   - A few cleanups and simplifcations of the APIC, IO/APIC and related
     interfaces to prepare for the topology evaluation changes.
 
   - Seperation of the parser stages so the early evaluation which tries to
     find the APIC address can be seperately overridden from the late
     evaluation which enumerates and registers the local APIC as further
     preparation for sanitizing the topology evaluation.
 
   - A new registration and admission logic which
 
      - encapsulates the inner workings so that parsers and guest logic
        cannot longer fiddle in it
 
      - uses the APIC ID segments to build topology bitmaps at registration
        time
 
      - provides a sane admission logic
 
      - allows to detect the crash kernel case, where CPU0 does not run on
        the real BSP, automatically. This is required to prevent sending
        INIT/SIPI sequences to the real BSP which would reset the whole
        machine. This was so far handled by a tedious command line
        parameter, which does not even work in nested crash scenarios.
 
      - Associates CPU number after the enumeration completed and prevents
        the late registration of APICs, which was somehow tolerated before.
 
   - Converting all parsers and guest enumeration mechanisms over to the
     new interfaces.
 
     This allows to get rid of all global variable tweaking from the parsers
     and enumeration mechanisms and sanitizes the XEN[PV] handling so it can
     use CPUID evaluation for the first time.
 
   - Mopping up existing sins by taking the information from the APIC ID
     segment bitmaps.
 
     This evaluates hybrid systems correctly on the boot CPU and allows for
     cleanups and fixes in the related drivers, e.g. PERF.
 
 The series has been extensively tested and the minimal late fallout due to
 a broken ACPI/MADT table has been addressed by tightening the admission
 logic further.
 -----BEGIN PGP SIGNATURE-----
 
 iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmXuDawTHHRnbHhAbGlu
 dXRyb25peC5kZQAKCRCmGPVMDXSYobE7EACngItF+UOTCoCV6och2lL6HVoIdZD1
 Y5oaAgD+WzQSz/lBkH6b9kZSyvjlMo6O9GlnGX+ii+VUnijDp4VrspnxbJDaKEq3
 gOfsSg2Tk+ps50HqMcZawjjBYJb/TmvKwEV2XuzIBPOONSWLNjvN7nBSzLl1eF9/
 8uCE39/8aB5K3GXryRyXdo2uLu6eHTVC0aYFu/kLX1/BbVqF5NMD3sz9E9w8+D/U
 MIIMEMXy4Fn+P2o0vVH+gjUlwI76mJbB1WqCX/sqbVacXrjl3KfNJRiisTFIOOYV
 8o+rIV0ef5X9xmZqtOXAdyZQzj++Gwmz9+4TU1M4YHtS7UkYn6AluOjvVekCc+gc
 qXE3WhqKfCK2/carRMLQxAMxNeRylkZG+Wuv1Qtyjpe9JX2dTqtems0f4DMp9DKf
 b7InO3z39kJanpqcUG2Sx+GWanetfnX+0Ho2Moqu6Xi+2ATr1PfMG/Wyr5/WWOfV
 qApaHSTwa+J43mSzP6BsXngEv085EHSGM5tPe7u46MCYFqB21+bMl+qH82KjMkOe
 c6uZovFQMmX2WBlqJSYGVCH+Jhgvqq8HFeRs19Hd4enOt3e6LE3E74RBVD1AyfLV
 1b/m8tYB/o871ZlEZwDCGVrV/LNnA7PxmFpq5ZHLpUt39g2/V0RH1puBVz1e97pU
 YsTT7hBCUYzgjQ==
 =/5oR
 -----END PGP SIGNATURE-----

Merge tag 'x86-apic-2024-03-10' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 APIC updates from Thomas Gleixner:
 "Rework of APIC enumeration and topology evaluation.

  The current implementation has a couple of shortcomings:

   - It fails to handle hybrid systems correctly.

   - The APIC registration code which handles CPU number assignents is
     in the middle of the APIC code and detached from the topology
     evaluation.

   - The various mechanisms which enumerate APICs, ACPI, MPPARSE and
     guest specific ones, tweak global variables as they see fit or in
     case of XENPV just hack around the generic mechanisms completely.

   - The CPUID topology evaluation code is sprinkled all over the vendor
     code and reevaluates global variables on every hotplug operation.

   - There is no way to analyze topology on the boot CPU before bringing
     up the APs. This causes problems for infrastructure like PERF which
     needs to size certain aspects upfront or could be simplified if
     that would be possible.

   - The APIC admission and CPU number association logic is
     incomprehensible and overly complex and needs to be kept around
     after boot instead of completing this right after the APIC
     enumeration.

  This update addresses these shortcomings with the following changes:

   - Rework the CPUID evaluation code so it is common for all vendors
     and provides information about the APIC ID segments in a uniform
     way independent of the number of segments (Thread, Core, Module,
     ..., Die, Package) so that this information can be computed instead
     of rewriting global variables of dubious value over and over.

   - A few cleanups and simplifcations of the APIC, IO/APIC and related
     interfaces to prepare for the topology evaluation changes.

   - Seperation of the parser stages so the early evaluation which tries
     to find the APIC address can be seperately overridden from the late
     evaluation which enumerates and registers the local APIC as further
     preparation for sanitizing the topology evaluation.

   - A new registration and admission logic which

       - encapsulates the inner workings so that parsers and guest logic
         cannot longer fiddle in it

       - uses the APIC ID segments to build topology bitmaps at
         registration time

       - provides a sane admission logic

       - allows to detect the crash kernel case, where CPU0 does not run
         on the real BSP, automatically. This is required to prevent
         sending INIT/SIPI sequences to the real BSP which would reset
         the whole machine. This was so far handled by a tedious command
         line parameter, which does not even work in nested crash
         scenarios.

       - Associates CPU number after the enumeration completed and
         prevents the late registration of APICs, which was somehow
         tolerated before.

   - Converting all parsers and guest enumeration mechanisms over to the
     new interfaces.

     This allows to get rid of all global variable tweaking from the
     parsers and enumeration mechanisms and sanitizes the XEN[PV]
     handling so it can use CPUID evaluation for the first time.

   - Mopping up existing sins by taking the information from the APIC ID
     segment bitmaps.

     This evaluates hybrid systems correctly on the boot CPU and allows
     for cleanups and fixes in the related drivers, e.g. PERF.

  The series has been extensively tested and the minimal late fallout
  due to a broken ACPI/MADT table has been addressed by tightening the
  admission logic further"

* tag 'x86-apic-2024-03-10' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (76 commits)
  x86/topology: Ignore non-present APIC IDs in a present package
  x86/apic: Build the x86 topology enumeration functions on UP APIC builds too
  smp: Provide 'setup_max_cpus' definition on UP too
  smp: Avoid 'setup_max_cpus' namespace collision/shadowing
  x86/bugs: Use fixed addressing for VERW operand
  x86/cpu/topology: Get rid of cpuinfo::x86_max_cores
  x86/cpu/topology: Provide __num_[cores|threads]_per_package
  x86/cpu/topology: Rename topology_max_die_per_package()
  x86/cpu/topology: Rename smp_num_siblings
  x86/cpu/topology: Retrieve cores per package from topology bitmaps
  x86/cpu/topology: Use topology logical mapping mechanism
  x86/cpu/topology: Provide logical pkg/die mapping
  x86/cpu/topology: Simplify cpu_mark_primary_thread()
  x86/cpu/topology: Mop up primary thread mask handling
  x86/cpu/topology: Use topology bitmaps for sizing
  x86/cpu/topology: Let XEN/PV use topology from CPUID/MADT
  x86/xen/smp_pv: Count number of vCPUs early
  x86/cpu/topology: Assign hotpluggable CPUIDs during init
  x86/cpu/topology: Reject unknown APIC IDs on ACPI hotplug
  x86/topology: Add a mechanism to track topology via APIC IDs
  ...
2024-03-11 15:45:55 -07:00
..
amd Rework of APIC enumeration and topology evaluation: 2024-03-11 15:45:55 -07:00
arm drm/drm_property: make replace_property_blob_from_id a DRM helper 2023-12-13 15:09:53 -05:00
armada drm: Use device_get_match_data() 2023-11-27 13:56:32 -06:00
aspeed drm: Use device_get_match_data() 2023-11-27 13:56:32 -06:00
ast This cycle, I2C removes the currently unused CLASS_DDC support 2024-01-18 17:29:01 -08:00
atmel-hlcdc
bridge Merge drm/drm-fixes into drm-misc-fixes 2024-02-26 15:23:00 +01:00
ci Merge tag 'drm-msm-next-2023-12-15' of https://gitlab.freedesktop.org/drm/msm into drm-next 2023-12-20 07:54:03 +10:00
display drm/dp_mst: Separate @failing_port list in drm_dp_mst_atomic_check_mgr() comment 2024-01-22 19:20:36 +02:00
etnaviv drm/etnaviv: Convert to platform remove callback returning void 2023-11-21 09:17:54 +01:00
exynos Several fixups 2024-01-25 14:22:15 +10:00
fsl-dcu
gma500 drm: remove I2C_CLASS_DDC support 2024-01-18 21:10:41 +01:00
gud Merge drm/drm-next into drm-misc-next 2023-11-15 10:56:44 +01:00
hisilicon drm: remove I2C_CLASS_DDC support 2024-01-18 21:10:41 +01:00
hyperv drm/hyperv: Remove firmware framebuffers with aperture helper 2024-01-12 12:38:37 +01:00
i2c
i915 drm/i915/panelreplay: Move out psr_init_dpcd() from init_connector() 2024-03-06 15:41:16 +02:00
imagination One fix for drm/plane to avoid a use-after-free and some additional 2024-01-05 10:31:54 +10:00
imx drm/imx/lcdc: Fix double-free of driver data 2023-12-01 16:04:14 +01:00
ingenic
kmb drm/kmb: Convert to platform remove callback returning void 2023-11-21 09:18:52 +01:00
lib
lima drm-next for 6.8: 2024-01-12 11:32:19 -08:00
logicvc Merge tag 'drm-misc-fixes-2023-11-08' of git://anongit.freedesktop.org/drm/drm-misc into drm-next 2023-11-10 16:57:49 +01:00
loongson This cycle, I2C removes the currently unused CLASS_DDC support 2024-01-18 17:29:01 -08:00
mcde
mediatek This cycle, I2C removes the currently unused CLASS_DDC support 2024-01-18 17:29:01 -08:00
meson drm/meson: Don't remove bridges which are created by other drivers 2024-02-19 09:41:34 +01:00
mgag200 This cycle, I2C removes the currently unused CLASS_DDC support 2024-01-18 17:29:01 -08:00
msm Merge tag 'drm-msm-fixes-2024-02-28' of https://gitlab.freedesktop.org/drm/msm into drm-fixes 2024-03-01 14:24:52 +10:00
mxsfb drm: Use device_get_match_data() 2023-11-27 13:56:32 -06:00
nouveau nouveau: lock the client object tree. 2024-03-08 13:40:56 +10:00
omapdrm drm/omapdrm: Improve check for contiguous buffers 2023-12-01 12:04:28 +02:00
panel drm/panel: boe-tv101wum-nl6: Fine tune Himax83102-j02 panel HFP and HBP (again) 2024-03-04 08:47:58 -08:00
panfrost Linux 6.7-rc5 2023-12-12 11:32:33 +10:00
pl111 drm: Call drm_atomic_helper_shutdown() at shutdown/remove time for misc drivers 2023-09-21 10:51:55 -07:00
qxl drm/qxl: remove unused declaration 2023-12-04 09:42:32 +01:00
radeon This cycle, I2C removes the currently unused CLASS_DDC support 2024-01-18 17:29:01 -08:00
renesas drm/shmobile: Do not include <drm/drm_plane_helper.h> 2023-12-06 10:36:06 +01:00
rockchip drm/rockchip: vop2: add a missing unlock in vop2_crtc_atomic_enable() 2024-02-13 20:33:39 +01:00
scheduler drm/sched: Re-queue run job worker when drm_sched_entity_pop_job() returns NULL 2024-02-06 12:47:43 +10:00
solomon pwm: Changes for v6.8-rc1 2024-01-12 14:59:50 -08:00
sprd drm/sprd: Convert to platform remove callback returning void 2023-11-21 09:18:53 +01:00
sti
stm drm: Call drm_atomic_helper_shutdown() at shutdown/remove time for misc drivers 2023-09-21 10:51:55 -07:00
sun4i drm: remove I2C_CLASS_DDC support 2024-01-18 21:10:41 +01:00
tegra Merge drm/drm-fixes into drm-misc-fixes 2024-02-26 15:23:00 +01:00
tests linux_kselftest-kunit-6.9-rc1 2024-03-11 09:32:28 -07:00
tidss drm/tidss: Use DRM_PLANE_COMMIT_ACTIVE_ONLY 2023-12-01 12:04:43 +02:00
tilcdc drm/tilcdc: Convert to platform remove callback returning void 2023-11-28 21:57:16 +02:00
tiny drm/simpledrm: Do not include <drm/drm_plane_helper.h> 2023-12-06 10:36:18 +01:00
ttm drm/ttm: Fix an invalid freeing on already freed page in error path 2024-02-22 10:57:41 +01:00
tve200 drm: Call drm_atomic_helper_shutdown() at shutdown/remove time for misc drivers 2023-09-21 10:51:55 -07:00
udl Revert "drm/udl: Add ARGB8888 as a format" 2024-03-06 07:08:24 -08:00
v3d drm/v3d: Free the job and assign it to NULL if initialization fails 2024-01-11 11:23:13 -03:00
vboxvideo drm/vboxvideo: Use the hotspot properties from cursor planes 2023-11-24 11:58:00 +01:00
vc4 drm-next for 6.8: 2024-01-12 11:32:19 -08:00
vgem
virtio drm/virtio: Set segment size for virtio_gpu device 2024-01-29 11:44:34 +03:00
vkms drm/vkms: move wb's atomic_check from encoder to connector 2023-12-08 10:24:30 +01:00
vmwgfx drm/vmwgfx: Disable damage clipping if FB changed since last page-flip 2023-11-24 15:15:28 +01:00
xe linux_kselftest-kunit-6.9-rc1 2024-03-11 09:32:28 -07:00
xen
xlnx drm/xlnx: Do not include <drm/drm_plane_helper.h> 2023-12-06 10:36:21 +01:00
Kconfig drm/ttm/tests: depend on UML || COMPILE_TEST 2024-02-26 16:17:02 +01:00
Makefile drm/xe: Introduce a new DRM driver for Intel GPUs 2023-12-12 14:05:48 -05:00
drm_aperture.c
drm_atomic.c drm/drm_plane: track color mgmt changes per plane 2023-12-13 15:09:53 -05:00
drm_atomic_helper.c drm-misc-next for $kernel-version: 2023-12-19 17:07:32 +10:00
drm_atomic_state_helper.c drm/drm_plane: track color mgmt changes per plane 2023-12-13 15:09:53 -05:00
drm_atomic_uapi.c drm/drm_property: make replace_property_blob_from_id a DRM helper 2023-12-13 15:09:53 -05:00
drm_auth.c drm-next for 6.8: 2024-01-12 11:32:19 -08:00
drm_blend.c Revert "drm: Introduce pixel_source DRM plane property" 2023-12-04 21:33:10 +02:00
drm_bridge.c drm/bridge: migrate bridge_chains to per-encoder file 2023-12-04 16:07:29 +02:00
drm_bridge_connector.c drm: remove drm_bridge_hpd_disable() from drm_bridge_connector_destroy() 2023-12-03 20:22:02 +02:00
drm_buddy.c drm/buddy: check range allocation matches alignment 2024-02-28 08:02:53 +01:00
drm_cache.c
drm_client.c drm/client: Do not acquire module reference 2023-11-15 13:51:38 +01:00
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm/doc: describe PATH format for DP MST 2023-10-27 16:01:10 +02:00
drm_crtc.c drm/crtc: fix uninitialized variable use even harder 2024-02-13 18:03:58 +02:00
drm_crtc_helper.c drm/plane-helper: Move drm_plane_helper_atomic_check() into udl 2023-12-06 10:35:49 +01:00
drm_crtc_helper_internal.h
drm_crtc_internal.h Revert "drm/atomic: Add pixel source to plane state dump" 2023-12-04 21:33:07 +02:00
drm_damage_helper.c drm: Allow drivers to indicate the damage helpers to ignore damage clips 2023-11-24 15:15:25 +01:00
drm_debugfs.c drm/debugfs: fix potential NULL pointer dereference 2023-12-07 12:29:17 +02:00
drm_debugfs_crc.c
drm_displayid.c
drm_drv.c drm: Remove support for legacy drivers 2023-12-06 10:08:28 +01:00
drm_dumb_buffers.c
drm_edid.c drm-next for 6.8: 2024-01-12 11:32:19 -08:00
drm_edid_load.c drm/edid/firmware: drop drm_kms_helper.edid_firmware backward compat 2023-11-21 12:22:48 +02:00
drm_eld.c drm/eld: add helpers to modify the SADs of an ELD 2023-11-09 16:48:27 +02:00
drm_encoder.c drm/encoder: register per-encoder debugfs dir 2023-12-04 16:07:29 +02:00
drm_encoder_slave.c
drm_exec.c drm/exec: Pass in initial # of objects 2023-12-10 10:38:47 -08:00
drm_fb_dma_helper.c
drm_fb_helper.c
drm_fbdev_dma.c
drm_fbdev_generic.c
drm_file.c drm/drm_file: fix use of uninitialized variable 2023-12-07 09:21:43 +02:00
drm_flip_work.c drm: Remove struct drm_flip_task from DRM interfaces 2023-11-14 10:23:11 +01:00
drm_format_helper.c drm/format-helper: Pass format-conversion state to helpers 2023-11-14 10:16:53 +01:00
drm_fourcc.c drm/fourcc: Add NV20 and NV30 YUV formats 2023-10-24 21:34:35 +02:00
drm_framebuffer.c drm: Warn when freeing a framebuffer that's still on a list 2023-12-23 07:31:29 +02:00
drm_gem.c drm: Do not overrun array in drm_gem_get_pages() 2023-10-12 10:44:06 +02:00
drm_gem_atomic_helper.c drm/atomic-helper: Add format-conversion state to shadow-plane state 2023-11-14 10:01:14 +01:00
drm_gem_dma_helper.c
drm_gem_framebuffer_helper.c
drm_gem_shmem_helper.c
drm_gem_ttm_helper.c
drm_gem_vram_helper.c
drm_gpuvm.c Merge tag 'drm-msm-next-2023-12-15' of https://gitlab.freedesktop.org/drm/msm into drm-next 2023-12-20 07:54:03 +10:00
drm_internal.h drm: Remove source code for non-KMS drivers 2023-12-06 10:08:37 +01:00
drm_ioc32.c drm: Remove locking for legacy ioctls and DRM_UNLOCKED 2023-12-06 10:08:32 +01:00
drm_ioctl.c drm: Remove locking for legacy ioctls and DRM_UNLOCKED 2023-12-06 10:08:32 +01:00
drm_kms_helper_common.c drm/edid/firmware: drop drm_kms_helper.edid_firmware backward compat 2023-11-21 12:22:48 +02:00
drm_lease.c drm_lease.c: copy user-array safely 2023-10-09 16:59:49 +10:00
drm_managed.c
drm_mipi_dbi.c drm/format-helper: Pass format-conversion state to helpers 2023-11-14 10:16:53 +01:00
drm_mipi_dsi.c drm/mipi-dsi: Fix detach call without attach 2023-12-07 09:22:47 +02:00
drm_mm.c
drm_mode_config.c
drm_mode_object.c drm: Refuse to async flip with atomic prop changes 2023-11-23 17:12:38 +01:00
drm_modes.c drm/modes: replace deprecated strncpy with strscpy_pad 2023-12-01 09:51:43 -08:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for Lenovo Legion Go 2023-11-15 16:57:08 +01:00
drm_pci.c drm: Remove source code for non-KMS drivers 2023-12-06 10:08:37 +01:00
drm_plane.c drm: Don't unref the same fb many times by mistake due to deadlock handling 2023-12-23 07:31:05 +02:00
drm_plane_helper.c drm/plane-helper: Move drm_plane_helper_atomic_check() into udl 2023-12-06 10:35:49 +01:00
drm_prime.c drm/prime: Support page array >= 4GB 2024-02-13 16:36:04 +01:00
drm_print.c
drm_privacy_screen.c
drm_privacy_screen_x86.c
drm_probe_helper.c drm: Fix output poll work for drm_kms_helper_poll=n 2024-03-04 14:15:51 +02:00
drm_property.c drm/drm_property: make replace_property_blob_from_id a DRM helper 2023-12-13 15:09:53 -05:00
drm_rect.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_suballoc.c
drm_syncobj.c drm/syncobj: handle NULL fence in syncobj_eventfd_entry_func 2024-02-22 13:52:52 +01:00
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c drm: Remove support for legacy drivers 2023-12-06 10:08:28 +01:00
drm_vblank_work.c drm/vblank: Warn when silently cancelling vblank works 2023-10-03 16:01:03 +03:00
drm_vma_manager.c
drm_writeback.c