/* Create a CSROW object under specifed edac_mc_device */ static int edac_create_csrow_objects(struct mem_ctl_info *mci) { int err, i; struct csrow_info *csrow; for (i = 0; i < mci->nr_csrows; i++) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; err = edac_create_csrow_object(mci, mci->csrows[i], i); if (err < 0) { edac_dbg(1, "failure: create csrow objects for csrow %d\n", i); goto error; } } return 0; error: for (--i; i >= 0; i--) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; put_device(&mci->csrows[i]->dev); } return err; }
/* Create a CSROW object under specifed edac_mc_device */ static int edac_create_csrow_objects(struct mem_ctl_info *mci) { int err, i, chan; struct csrow_info *csrow; for (i = 0; i < mci->nr_csrows; i++) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; err = edac_create_csrow_object(mci, mci->csrows[i], i); if (err < 0) goto error; } return 0; error: for (--i; i >= 0; i--) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; for (chan = csrow->nr_channels - 1; chan >= 0; chan--) { if (!csrow->channels[chan]->dimm->nr_pages) continue; device_remove_file(&csrow->dev, dynamic_csrow_dimm_attr[chan]); device_remove_file(&csrow->dev, dynamic_csrow_ce_count_attr[chan]); } put_device(&mci->csrows[i]->dev); } return err; }
static void edac_delete_csrow_objects(struct mem_ctl_info *mci) { int i; struct csrow_info *csrow; for (i = mci->nr_csrows - 1; i >= 0; i--) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; device_unregister(&mci->csrows[i]->dev); } }
static void edac_delete_csrow_objects(struct mem_ctl_info *mci) { int i, chan; struct csrow_info *csrow; for (i = mci->nr_csrows - 1; i >= 0; i--) { csrow = mci->csrows[i]; if (!nr_pages_per_csrow(csrow)) continue; for (chan = csrow->nr_channels - 1; chan >= 0; chan--) { if (!csrow->channels[chan]->dimm->nr_pages) continue; edac_dbg(1, "Removing csrow %d channel %d sysfs nodes\n", i, chan); device_remove_file(&csrow->dev, dynamic_csrow_dimm_attr[chan]); device_remove_file(&csrow->dev, dynamic_csrow_ce_count_attr[chan]); } device_unregister(&mci->csrows[i]->dev); } }