Skip to content

Commit de3910e

Browse files
author
Mauro Carvalho Chehab
committed
edac: change the mem allocation scheme to make Documentation/kobject.txt happy
Kernel kobjects have rigid rules: each container object should be dynamically allocated, and can't be allocated into a single kmalloc. EDAC never obeyed this rule: it has a single malloc function that allocates all needed data into a single kzalloc. As this is not accepted anymore, change the allocation schema of the EDAC *_info structs to enforce this Kernel standard. Acked-by: Chris Metcalf <[email protected]> Cc: Aristeu Rozanski <[email protected]> Cc: Doug Thompson <[email protected]> Cc: Greg K H <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Mark Gross <[email protected]> Cc: Tim Small <[email protected]> Cc: Ranganathan Desikan <[email protected]> Cc: "Arvind R." <[email protected]> Cc: Olof Johansson <[email protected]> Cc: Egor Martovetsky <[email protected]> Cc: Michal Marek <[email protected]> Cc: Jiri Kosina <[email protected]> Cc: Dmitry Eremin-Solenikov <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Hitoshi Mitake <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Shaohui Xie <[email protected]> Cc: [email protected] Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent e39f4ea commit de3910e

22 files changed

+242
-164
lines changed

drivers/edac/amd64_edac.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2205,6 +2205,7 @@ static u32 amd64_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr)
22052205
static int init_csrows(struct mem_ctl_info *mci)
22062206
{
22072207
struct csrow_info *csrow;
2208+
struct dimm_info *dimm;
22082209
struct amd64_pvt *pvt = mci->pvt_info;
22092210
u64 base, mask;
22102211
u32 val;
@@ -2222,7 +2223,7 @@ static int init_csrows(struct mem_ctl_info *mci)
22222223
!!(val & NBCFG_CHIPKILL), !!(val & NBCFG_ECC_ENABLE));
22232224

22242225
for_each_chip_select(i, 0, pvt) {
2225-
csrow = &mci->csrows[i];
2226+
csrow = mci->csrows[i];
22262227

22272228
if (!csrow_enabled(i, 0, pvt) && !csrow_enabled(i, 1, pvt)) {
22282229
debugf1("----CSROW %d EMPTY for node %d\n", i,
@@ -2257,9 +2258,10 @@ static int init_csrows(struct mem_ctl_info *mci)
22572258
edac_mode = EDAC_NONE;
22582259

22592260
for (j = 0; j < pvt->channel_count; j++) {
2260-
csrow->channels[j].dimm->mtype = mtype;
2261-
csrow->channels[j].dimm->edac_mode = edac_mode;
2262-
csrow->channels[j].dimm->nr_pages = nr_pages;
2261+
dimm = csrow->channels[j]->dimm;
2262+
dimm->mtype = mtype;
2263+
dimm->edac_mode = edac_mode;
2264+
dimm->nr_pages = nr_pages;
22632265
}
22642266
}
22652267

drivers/edac/amd76x_edac.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ static int amd76x_process_error_info(struct mem_ctl_info *mci,
146146
if (handle_errors) {
147147
row = (info->ecc_mode_status >> 4) & 0xf;
148148
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci,
149-
mci->csrows[row].first_page, 0, 0,
149+
mci->csrows[row]->first_page, 0, 0,
150150
row, 0, -1,
151151
mci->ctl_name, "", NULL);
152152
}
@@ -161,7 +161,7 @@ static int amd76x_process_error_info(struct mem_ctl_info *mci,
161161
if (handle_errors) {
162162
row = info->ecc_mode_status & 0xf;
163163
edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci,
164-
mci->csrows[row].first_page, 0, 0,
164+
mci->csrows[row]->first_page, 0, 0,
165165
row, 0, -1,
166166
mci->ctl_name, "", NULL);
167167
}
@@ -194,8 +194,8 @@ static void amd76x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
194194
int index;
195195

196196
for (index = 0; index < mci->nr_csrows; index++) {
197-
csrow = &mci->csrows[index];
198-
dimm = csrow->channels[0].dimm;
197+
csrow = mci->csrows[index];
198+
dimm = csrow->channels[0]->dimm;
199199

200200
/* find the DRAM Chip Select Base address and mask */
201201
pci_read_config_dword(pdev,

drivers/edac/cell_edac.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct cell_edac_priv
3333
static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar)
3434
{
3535
struct cell_edac_priv *priv = mci->pvt_info;
36-
struct csrow_info *csrow = &mci->csrows[0];
36+
struct csrow_info *csrow = mci->csrows[0];
3737
unsigned long address, pfn, offset, syndrome;
3838

3939
dev_dbg(mci->pdev, "ECC CE err on node %d, channel %d, ar = 0x%016llx\n",
@@ -56,7 +56,7 @@ static void cell_edac_count_ce(struct mem_ctl_info *mci, int chan, u64 ar)
5656
static void cell_edac_count_ue(struct mem_ctl_info *mci, int chan, u64 ar)
5757
{
5858
struct cell_edac_priv *priv = mci->pvt_info;
59-
struct csrow_info *csrow = &mci->csrows[0];
59+
struct csrow_info *csrow = mci->csrows[0];
6060
unsigned long address, pfn, offset;
6161

6262
dev_dbg(mci->pdev, "ECC UE err on node %d, channel %d, ar = 0x%016llx\n",
@@ -126,7 +126,7 @@ static void cell_edac_check(struct mem_ctl_info *mci)
126126

127127
static void __devinit cell_edac_init_csrows(struct mem_ctl_info *mci)
128128
{
129-
struct csrow_info *csrow = &mci->csrows[0];
129+
struct csrow_info *csrow = mci->csrows[0];
130130
struct dimm_info *dimm;
131131
struct cell_edac_priv *priv = mci->pvt_info;
132132
struct device_node *np;
@@ -150,7 +150,7 @@ static void __devinit cell_edac_init_csrows(struct mem_ctl_info *mci)
150150
csrow->last_page = csrow->first_page + nr_pages - 1;
151151

152152
for (j = 0; j < csrow->nr_channels; j++) {
153-
dimm = csrow->channels[j].dimm;
153+
dimm = csrow->channels[j]->dimm;
154154
dimm->mtype = MEM_XDR;
155155
dimm->edac_mode = EDAC_SECDED;
156156
dimm->nr_pages = nr_pages / csrow->nr_channels;

drivers/edac/cpc925_edac.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ static void cpc925_init_csrows(struct mem_ctl_info *mci)
348348
if (bba == 0)
349349
continue; /* not populated */
350350

351-
csrow = &mci->csrows[index];
351+
csrow = mci->csrows[index];
352352

353353
row_size = bba * (1UL << 28); /* 256M */
354354
csrow->first_page = last_nr_pages;
@@ -380,7 +380,7 @@ static void cpc925_init_csrows(struct mem_ctl_info *mci)
380380
break;
381381
}
382382
for (j = 0; j < csrow->nr_channels; j++) {
383-
dimm = csrow->channels[j].dimm;
383+
dimm = csrow->channels[j]->dimm;
384384
dimm->nr_pages = nr_pages / csrow->nr_channels;
385385
dimm->mtype = MEM_RDDR;
386386
dimm->edac_mode = EDAC_SECDED;
@@ -463,15 +463,15 @@ static void cpc925_mc_get_pfn(struct mem_ctl_info *mci, u32 mear,
463463
*csrow = rank;
464464

465465
#ifdef CONFIG_EDAC_DEBUG
466-
if (mci->csrows[rank].first_page == 0) {
466+
if (mci->csrows[rank]->first_page == 0) {
467467
cpc925_mc_printk(mci, KERN_ERR, "ECC occurs in a "
468468
"non-populated csrow, broken hardware?\n");
469469
return;
470470
}
471471
#endif
472472

473473
/* Revert csrow number */
474-
pa = mci->csrows[rank].first_page << PAGE_SHIFT;
474+
pa = mci->csrows[rank]->first_page << PAGE_SHIFT;
475475

476476
/* Revert column address */
477477
col += bcnt;

drivers/edac/e752x_edac.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,7 +1096,7 @@ static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
10961096
for (last_cumul_size = index = 0; index < mci->nr_csrows; index++) {
10971097
/* mem_dev 0=x8, 1=x4 */
10981098
mem_dev = (dra >> (index * 4 + 2)) & 0x3;
1099-
csrow = &mci->csrows[remap_csrow_index(mci, index)];
1099+
csrow = mci->csrows[remap_csrow_index(mci, index)];
11001100

11011101
mem_dev = (mem_dev == 2);
11021102
pci_read_config_byte(pdev, E752X_DRB + index, &value);
@@ -1127,7 +1127,7 @@ static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
11271127
} else
11281128
edac_mode = EDAC_NONE;
11291129
for (i = 0; i < csrow->nr_channels; i++) {
1130-
struct dimm_info *dimm = csrow->channels[i].dimm;
1130+
struct dimm_info *dimm = csrow->channels[i]->dimm;
11311131

11321132
debugf3("Initializing rank at (%i,%i)\n", index, i);
11331133
dimm->nr_pages = nr_pages / csrow->nr_channels;

drivers/edac/e7xxx_edac.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ static void e7xxx_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
378378
for (index = 0; index < mci->nr_csrows; index++) {
379379
/* mem_dev 0=x8, 1=x4 */
380380
mem_dev = (dra >> (index * 4 + 3)) & 0x1;
381-
csrow = &mci->csrows[index];
381+
csrow = mci->csrows[index];
382382

383383
pci_read_config_byte(pdev, E7XXX_DRB + index, &value);
384384
/* convert a 64 or 32 MiB DRB to a page size. */
@@ -409,7 +409,7 @@ static void e7xxx_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
409409
edac_mode = EDAC_NONE;
410410

411411
for (j = 0; j < drc_chan + 1; j++) {
412-
dimm = csrow->channels[j].dimm;
412+
dimm = csrow->channels[j]->dimm;
413413

414414
dimm->nr_pages = nr_pages / (drc_chan + 1);
415415
dimm->grain = 1 << 12; /* 4KiB - resolution of CELOG */

0 commit comments

Comments
 (0)