lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Sun, 16 Dec 2012 02:14:36 +0530
From:	Arvind R <arvino55@...il.com>
To:	linux-edac@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>,
	linux-next@...r.kernel.org
Subject: [PATCH 3.7.0 7/9] i82975x_edac: correct dimm label initialisation

Subject: [PATCH 3.7.0 7/9] i82975x_edac: correct dimm label initialisation

DIMM label are the legends on the mobo. Fix their initialisation
to correspond to the legends.
Channels are designated A/B. A single DIMM occupies 2 ranks. And
the first DIMM is 1, not 0. This is as found in Asus P5WDG2 family
of mobos. This patch maps to that.
Signed-off-by: Arvind R. <arvino55@...il.com>
---
 i82975x_edac.c |   21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

--- a/drivers/edac/i82975x_edac.c	2012-12-15 22:32:00.000000000 +0530
+++ b/drivers/edac/i82975x_edac.c	2012-12-15 22:42:00.000000000 +0530
@@ -32,6 +32,7 @@
 #define I82975X_NR_DIMMS		8
 #define I82975X_NR_CSROWS(nr_chans)	(I82975X_NR_DIMMS / (nr_chans))
 #define	I82975X_NR_CSROWS_PER_CHANNEL	4
+#define	I82975X_NR_CSROWS_PER_DIMM	2

 /* Intel 82975X register addresses - device 0 function 0 - DRAM Controller */
 #define I82975X_EAP		0x58	/* Dram Error Address Pointer (32b)
@@ -339,13 +340,13 @@ static void i82975x_check(struct mem_ctl
 }

 static void i82975x_init_csrows(struct mem_ctl_info *mci,
-		struct pci_dev *pdev, void __iomem *mch_window)
+			void __iomem *mch_window)
 {
 	struct csrow_info *csrow;
 	unsigned long last_cumul_size;
 	u8 value;
 	u32 cumul_size, nr_pages;
-	int index, chan;
+	unsigned index, chan;
 	struct dimm_info *dimm;

 	last_cumul_size = 0;
@@ -370,7 +371,8 @@ static void i82975x_init_csrows(struct m
 		 * Adjust cumul_size w.r.t number of channels
 		 *
 		 */
-		if (csrow->nr_channels > 1)
+		if (mci->num_cschannel > 1)
+			/* dual_channel symmetric */
 			cumul_size <<= 1;
 		edac_dbg(3, "(%d) cumul_size 0x%x\n", index, cumul_size);

@@ -384,15 +386,18 @@ static void i82975x_init_csrows(struct m
 		 *   [0-7] for single-channel; i.e. csrow->nr_channels = 1
 		 *   [0-3] for dual-channel; i.e. csrow->nr_channels = 2
 		 */
-		for (chan = 0; chan < csrow->nr_channels; chan++) {
+		for (chan = 0; chan < mci->num_cschannel; chan++) {
 			dimm = mci->csrows[index]->channels[chan]->dimm;

-			dimm->nr_pages = nr_pages / csrow->nr_channels;
+			dimm->nr_pages = nr_pages / mci->num_cschannel;

 			snprintf(csrow->channels[chan]->dimm->label,
 				 EDAC_MC_LABEL_LEN, "DIMM %c%d",
-				 (chan == 0) ? 'A' : 'B',
-				 index);
+				 ((mci->num_cschannel <= 1) ?
+					index / I82975X_NR_CSROWS_PER_CHANNEL :
+					chan) + 'A',
+				 ((index % I82975X_NR_CSROWS_PER_CHANNEL) /
+					I82975X_NR_CSROWS_PER_DIMM) + 1);
 			dimm->grain = 1 << 7;	/* always */
 			dimm->dtype = DEV_X8;	/* only with ECC */
 			dimm->mtype = MEM_DDR2; /* only supported */
@@ -589,7 +594,7 @@ static int i82975x_probe1(struct pci_dev
 	mci->ctl_page_to_phys = NULL;
 	pvt = (struct i82975x_pvt *) mci->pvt_info;
 	pvt->chip = dev_idx;
-	i82975x_init_csrows(mci, pdev, mch_window);
+	i82975x_init_csrows(mci, mch_window);
 	mci->scrub_mode = SCRUB_HW_SRC;
 	i82975x_get_error_info(mci, &discard);  /* clear counters */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ