linux/drivers/edac
Qiuxu Zhuo 1652f14cf3 EDAC/i10nm: Skip DIMM enumeration on a disabled memory controller
[ Upstream commit 2e6fe1bbef ]

When loading the i10nm_edac driver on some Intel Granite Rapids servers,
a call trace may appear as follows:

  UBSAN: shift-out-of-bounds in drivers/edac/skx_common.c:453:16
  shift exponent -66 is negative
  ...
  __ubsan_handle_shift_out_of_bounds+0x1e3/0x390
  skx_get_dimm_info.cold+0x47/0xd40 [skx_edac_common]
  i10nm_get_dimm_config+0x23e/0x390 [i10nm_edac]
  skx_register_mci+0x159/0x220 [skx_edac_common]
  i10nm_init+0xcb0/0x1ff0 [i10nm_edac]
  ...

This occurs because some BIOS may disable a memory controller if there
aren't any memory DIMMs populated on this memory controller. The DIMMMTR
register of this disabled memory controller contains the invalid value
~0, resulting in the call trace above.

Fix this call trace by skipping DIMM enumeration on a disabled memory
controller.

Fixes: ba987eaaab ("EDAC/i10nm: Add Intel Granite Rapids server support")
Reported-by: Jose Jesus Ambriz Meza <jose.jesus.ambriz.meza@intel.com>
Reported-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Closes: https://lore.kernel.org/all/20250730063155.2612379-1-acelan.kao@canonical.com/
Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Tested-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Link: https://lore.kernel.org/r/20250806065707.3533345-1-qiuxu.zhuo@intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-10-15 11:59:55 +02:00
..
al_mc_edac.c EDAC/al_mc: Make use of the helper function devm_add_action_or_reset() 2021-09-28 18:35:11 +02:00
altera_edac.c EDAC/altera: Delete an inappropriate dma_free_coherent() call 2025-09-19 16:35:45 +02:00
altera_edac.h EDAC/altera: Set DDR and SDMMC interrupt mask before registration 2025-05-09 09:50:30 +02:00
amd64_edac.c EDAC/amd64: Fix size calculation for Non-Power-of-Two DIMMs 2025-07-06 11:01:42 +02:00
amd64_edac.h EDAC/amd64: Remove unused register accesses 2024-06-12 11:33:45 +02:00
amd76x_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
amd8111_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
amd8111_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
amd8131_edac.c EDAC/amd81[13]1: Remove trailing newline from MODULE_AUTHOR 2023-03-28 15:26:52 +02:00
amd8131_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
armada_xp_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
aspeed_edac.c EDAC/aspeed: Convert to platform remove callback returning void 2023-11-20 21:26:01 +01:00
bluefield_edac.c EDAC/bluefield: Fix potential integer overflow 2024-12-05 14:01:16 +01:00
cell_edac.c EDAC/cell: Convert to platform remove callback returning void 2023-11-20 21:39:13 +01:00
cpc925_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
debugfs.c ARM: 8892/1: EDAC: Add missing debugfs_create_x32 wrapper 2019-08-29 07:58:01 +01:00
dmc520_edac.c EDAC/dmc520: Use devm_platform_ioremap_resource() 2024-06-23 10:48:55 +02:00
e7xxx_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
e752x_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
edac_device.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
edac_device.h EDAC: Remove unused struct members 2024-03-27 18:26:58 +01:00
edac_device_sysfs.c EDAC/device: Remove edac_dev_sysfs_block_attribute::store() 2024-03-27 18:26:57 +01:00
edac_mc.c EDAC/mc: Add support for HBM3 memory type 2023-11-28 16:39:12 +01:00
edac_mc.h EDAC/mc: Determine mci pointer from the error descriptor 2020-02-17 13:05:10 +01:00
edac_mc_sysfs.c EDAC/mc_sysfs: Convert sprintf()/snprintf() to sysfs_emit() 2024-04-04 18:23:57 +02:00
edac_module.c EDAC: constantify the struct bus_type usage 2024-01-04 14:34:27 +01:00
edac_module.h EDAC/device: Fix period calculation in edac_device_reset_delay_period() 2022-12-30 15:51:41 +01:00
edac_pci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
edac_pci.h EDAC: Remove unused struct members 2024-03-27 18:26:58 +01:00
edac_pci_sysfs.c Driver core changes for 6.8-rc1 2024-01-18 09:48:40 -08:00
fsl_ddr_edac.c EDAC/fsl_ddr: Fix bad bit shift operations 2024-12-05 14:01:17 +01:00
fsl_ddr_edac.h EDAC/fsl_ddr: Convert to platform remove callback returning void 2023-11-20 23:34:04 +01:00
ghes_edac.c EDAC/ghes: Add missing newline to pr_info() statement 2024-05-28 16:13:09 +02:00
highbank_l2_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
highbank_mc_edac.c EDAC/highbank_mc: Convert to platform remove callback returning void 2023-11-20 22:33:52 +01:00
i7core_edac.c EDAC/{sb,i7core}_edac: Do not use a plain integer for a NULL pointer 2023-11-28 15:43:43 +01:00
i10nm_base.c EDAC/i10nm: Skip DIMM enumeration on a disabled memory controller 2025-10-15 11:59:55 +02:00
i3000_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i3200_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i5000_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i5100_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i5400_edac.c EDAC/i5400: Fix typo in comment: vaious -> various 2022-11-25 19:29:02 +01:00
i7300_edac.c EDAC/i7300: Correct the i7300_exit() function name in comment 2022-09-23 23:07:17 +02:00
i82443bxgx_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i82860_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i82875p_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i82975x_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
ie31200_edac.c EDAC/ie31200: work around false positive build warning 2025-05-29 11:02:43 +02:00
igen6_edac.c EDAC/igen6: Avoid segmentation fault on module unload 2024-12-05 14:01:18 +01:00
Kconfig EDAC: Drop obsolete PPC4xx driver 2024-09-05 16:56:38 +02:00
layerscape_edac.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
Makefile EDAC: Drop obsolete PPC4xx driver 2024-09-05 16:56:38 +02:00
mce_amd.c x86/cpu/amd: Provide a separate accessor for Node ID 2024-02-15 22:07:37 +01:00
mce_amd.h x86/mce/amd, edac: Remove report_gart_errors 2020-04-14 15:53:46 +02:00
mpc85xx_edac.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
mpc85xx_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
npcm_edac.c EDAC/npcm: Convert to platform remove callback returning void 2023-11-20 22:52:14 +01:00
octeon_edac-l2c.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-lmc.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-pc.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-pci.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
pasemi_edac.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
pnd2_edac.c EDAC, pnd2: Switch to new Intel CPU model defines 2024-05-28 16:03:43 -07:00
pnd2_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
qcom_edac.c EDAC/qcom: Correct interrupt enable register configuration 2025-02-27 04:30:23 -08:00
r82600_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
sb_edac.c EDAC/sb_edac: Fix the compile warning of large frame size 2024-09-03 15:09:22 -07:00
sifive_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
skx_base.c EDAC/{skx_common,skx,i10nm}: Move the common debug code to skx_common 2024-09-03 12:35:06 -07:00
skx_common.c EDAC/skx_common: Fix general protection fault 2025-06-19 15:31:31 +02:00
skx_common.h EDAC/{skx_common,i10nm}: Fix the loss of saved RRL for HBM pseudo channel 0 2025-06-19 15:31:31 +02:00
synopsys_edac.c EDAC/synopsys: Clear the ECC counters on init 2025-08-20 18:30:23 +02:00
thunderx_edac.c EDAC/thunderx: Remove unused struct error_syndrome 2024-05-27 14:42:04 +02:00
ti_edac.c EDAC/ti: Convert to platform remove callback returning void 2023-11-20 23:30:09 +01:00
versal_edac.c EDAC/versal: Do not log total error counts 2024-04-25 18:08:05 +02:00
wq.c EDAC/wq: Remove unneeded flush_workqueue() 2022-08-25 10:50:35 +02:00
x38_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
xgene_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
zynqmp_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00