struct dimm_info *dimm;
        u32 *ce_per_layer[EDAC_MAX_LAYERS], *ue_per_layer[EDAC_MAX_LAYERS];
        unsigned pos[EDAC_MAX_LAYERS];
-       void *pvt, *ptr = NULL;
        unsigned size, tot_dimms = 1, count = 1;
        unsigned tot_csrows = 1, tot_channels = 1, tot_errcount = 0;
-       int i, j, err, row, chn;
+       void *pvt, *p, *ptr = NULL;
+       int i, j, err, row, chn, n, len;
        bool per_rank = false;
 
        BUG_ON(n_layers > EDAC_MAX_LAYERS || n_layers == 0);
                        i, per_rank ? "rank" : "dimm", (dimm - mci->dimms),
                        pos[0], pos[1], pos[2], row, chn);
 
-               /* Copy DIMM location */
-               for (j = 0; j < n_layers; j++)
+               /*
+                * Copy DIMM location and initialize it.
+                */
+               len = sizeof(dimm->label);
+               p = dimm->label;
+               n = snprintf(p, len, "mc#%u", mc_num);
+               p += n;
+               len -= n;
+               for (j = 0; j < n_layers; j++) {
+                       n = snprintf(p, len, "%s#%u",
+                                    edac_layer_name[layers[j].type],
+                                    pos[j]);
+                       p += n;
+                       len -= n;
                        dimm->location[j] = pos[j];
 
+                       if (len <= 0)
+                               break;
+               }
+
                /* Link it to the csrows old API data */
                chan->dimm = dimm;
                dimm->csrow = row;
 {
        int i, index = 0;
 
-       mci->ce_count++;
+       mci->ce_mc++;
 
        if (!enable_per_layer_report) {
                mci->ce_noinfo_count++;
 {
        int i, index = 0;
 
-       mci->ue_count++;
+       mci->ue_mc++;
 
        if (!enable_per_layer_report) {
                mci->ce_noinfo_count++;
 
 
        mci->ue_noinfo_count = 0;
        mci->ce_noinfo_count = 0;
-       mci->ue_count = 0;
-       mci->ce_count = 0;
+       mci->ue_mc = 0;
+       mci->ce_mc = 0;
 
        for (row = 0; row < mci->nr_csrows; row++) {
                struct csrow_info *ri = &mci->csrows[row];
 /* default attribute files for the MCI object */
 static ssize_t mci_ue_count_show(struct mem_ctl_info *mci, char *data)
 {
-       return sprintf(data, "%d\n", mci->ue_count);
+       return sprintf(data, "%d\n", mci->ue_mc);
 }
 
 static ssize_t mci_ce_count_show(struct mem_ctl_info *mci, char *data)
 {
-       return sprintf(data, "%d\n", mci->ce_count);
+       return sprintf(data, "%d\n", mci->ce_mc);
 }
 
 static ssize_t mci_ce_noinfo_show(struct mem_ctl_info *mci, char *data)