Commit 59cfc06a authored by Qiuxu Zhuo's avatar Qiuxu Zhuo Committed by Tony Luck
Browse files

EDAC/skx_common: Move mc_mapping to be a field inside struct skx_imc



The mc_mapping and imc fields of struct skx_dev have the same size,
NUM_IMC. Move mc_mapping to be a field inside struct skx_imc to prepare
for making the imc array of memory controller instances a flexible array.

No functional changes intended.

Suggested-by: default avatarTony Luck <tony.luck@intel.com>
Signed-off-by: default avatarQiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/r/20250731145534.2759334-3-qiuxu.zhuo@intel.com
parent 219af5df
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ static void skx_init_mc_mapping(struct skx_dev *d)
	 * EDAC driver.
	 */
	for (int i = 0; i < NUM_IMC; i++)
		d->mc_mapping[i] = i;
		d->imc[i].mc_mapping = i;
}

void skx_set_mc_mapping(struct skx_dev *d, u8 pmc, u8 lmc)
@@ -139,16 +139,16 @@ void skx_set_mc_mapping(struct skx_dev *d, u8 pmc, u8 lmc)
	edac_dbg(0, "Set the mapping of mc phy idx to logical idx: %02d -> %02d\n",
		 pmc, lmc);

	d->mc_mapping[pmc] = lmc;
	d->imc[pmc].mc_mapping = lmc;
}
EXPORT_SYMBOL_GPL(skx_set_mc_mapping);

static u8 skx_get_mc_mapping(struct skx_dev *d, u8 pmc)
{
	edac_dbg(0, "Get the mapping of mc phy idx to logical idx: %02d -> %02d\n",
		 pmc, d->mc_mapping[pmc]);
		 pmc, d->imc[pmc].mc_mapping);

	return d->mc_mapping[pmc];
	return d->imc[pmc].mc_mapping;
}

static bool skx_adxl_decode(struct decoded_addr *res, enum error_source err_src)
+10 −10
Original line number Diff line number Diff line
@@ -135,16 +135,6 @@ struct skx_dev {
	struct pci_dev *pcu_cr3; /* for HBM memory detection */
	u32 mcroute;
	int num_imc;
	/*
	 * Some server BIOS may hide certain memory controllers, and the
	 * EDAC driver skips those hidden memory controllers. However, the
	 * ADXL still decodes memory error address using physical memory
	 * controller indices. The mapping table is used to convert the
	 * physical indices (reported by ADXL) to the logical indices
	 * (used the EDAC driver) of present memory controllers during the
	 * error handling process.
	 */
	u8 mc_mapping[NUM_IMC];
	struct skx_imc {
		struct mem_ctl_info *mci;
		struct pci_dev *mdev; /* for i10nm CPU */
@@ -156,6 +146,16 @@ struct skx_dev {
		u8 mc;	/* system wide mc# */
		u8 lmc;	/* socket relative mc# */
		u8 src_id;
		/*
		 * Some server BIOS may hide certain memory controllers, and the
		 * EDAC driver skips those hidden memory controllers. However, the
		 * ADXL still decodes memory error address using physical memory
		 * controller indices. The mapping table is used to convert the
		 * physical indices (reported by ADXL) to the logical indices
		 * (used the EDAC driver) of present memory controllers during the
		 * error handling process.
		 */
		u8 mc_mapping;
		struct skx_channel {
			struct pci_dev	*cdev;
			struct pci_dev	*edev;