• Home
  • Raw
  • Download

Lines Matching refs:mci

64 	struct mem_ctl_info *mci = dimm->mci;  in edac_dimm_info_location()  local
68 for (i = 0; i < mci->n_layers; i++) { in edac_dimm_info_location()
70 edac_layer_name[mci->layers[i].type], in edac_dimm_info_location()
102 dimm->mci->csbased ? "rank" : "dimm", in edac_mc_dump_dimm()
120 edac_dbg(4, " csrow->mci = %p\n", csrow->mci); in edac_mc_dump_csrow()
123 static void edac_mc_dump_mci(struct mem_ctl_info *mci) in edac_mc_dump_mci() argument
125 edac_dbg(3, "\tmci = %p\n", mci); in edac_mc_dump_mci()
126 edac_dbg(3, "\tmci->mtype_cap = %lx\n", mci->mtype_cap); in edac_mc_dump_mci()
127 edac_dbg(3, "\tmci->edac_ctl_cap = %lx\n", mci->edac_ctl_cap); in edac_mc_dump_mci()
128 edac_dbg(3, "\tmci->edac_cap = %lx\n", mci->edac_cap); in edac_mc_dump_mci()
129 edac_dbg(4, "\tmci->edac_check = %p\n", mci->edac_check); in edac_mc_dump_mci()
131 mci->nr_csrows, mci->csrows); in edac_mc_dump_mci()
133 mci->tot_dimms, mci->dimms); in edac_mc_dump_mci()
134 edac_dbg(3, "\tdev = %p\n", mci->pdev); in edac_mc_dump_mci()
136 mci->mod_name, mci->ctl_name); in edac_mc_dump_mci()
137 edac_dbg(3, "\tpvt_info = %p\n\n", mci->pvt_info); in edac_mc_dump_mci()
223 static void _edac_mc_free(struct mem_ctl_info *mci) in _edac_mc_free() argument
225 put_device(&mci->dev); in _edac_mc_free()
230 struct mem_ctl_info *mci = container_of(dev, struct mem_ctl_info, dev); in mci_release() local
234 if (mci->dimms) { in mci_release()
235 for (i = 0; i < mci->tot_dimms; i++) in mci_release()
236 kfree(mci->dimms[i]); in mci_release()
237 kfree(mci->dimms); in mci_release()
240 if (mci->csrows) { in mci_release()
241 for (row = 0; row < mci->nr_csrows; row++) { in mci_release()
242 csr = mci->csrows[row]; in mci_release()
247 for (chn = 0; chn < mci->num_cschannel; chn++) in mci_release()
253 kfree(mci->csrows); in mci_release()
255 kfree(mci); in mci_release()
258 static int edac_mc_alloc_csrows(struct mem_ctl_info *mci) in edac_mc_alloc_csrows() argument
260 unsigned int tot_channels = mci->num_cschannel; in edac_mc_alloc_csrows()
261 unsigned int tot_csrows = mci->nr_csrows; in edac_mc_alloc_csrows()
267 mci->csrows = kcalloc(tot_csrows, sizeof(*mci->csrows), GFP_KERNEL); in edac_mc_alloc_csrows()
268 if (!mci->csrows) in edac_mc_alloc_csrows()
274 csr = kzalloc(sizeof(**mci->csrows), GFP_KERNEL); in edac_mc_alloc_csrows()
278 mci->csrows[row] = csr; in edac_mc_alloc_csrows()
280 csr->mci = mci; in edac_mc_alloc_csrows()
303 static int edac_mc_alloc_dimms(struct mem_ctl_info *mci) in edac_mc_alloc_dimms() argument
313 mci->dimms = kcalloc(mci->tot_dimms, sizeof(*mci->dimms), GFP_KERNEL); in edac_mc_alloc_dimms()
314 if (!mci->dimms) in edac_mc_alloc_dimms()
320 for (idx = 0; idx < mci->tot_dimms; idx++) { in edac_mc_alloc_dimms()
325 chan = mci->csrows[row]->channels[chn]; in edac_mc_alloc_dimms()
327 dimm = kzalloc(sizeof(**mci->dimms), GFP_KERNEL); in edac_mc_alloc_dimms()
330 mci->dimms[idx] = dimm; in edac_mc_alloc_dimms()
331 dimm->mci = mci; in edac_mc_alloc_dimms()
339 n = snprintf(p, len, "mc#%u", mci->mc_idx); in edac_mc_alloc_dimms()
342 for (layer = 0; layer < mci->n_layers; layer++) { in edac_mc_alloc_dimms()
344 edac_layer_name[mci->layers[layer].type], in edac_mc_alloc_dimms()
360 if (mci->layers[0].is_virt_csrow) { in edac_mc_alloc_dimms()
362 if (chn == mci->num_cschannel) { in edac_mc_alloc_dimms()
368 if (row == mci->nr_csrows) { in edac_mc_alloc_dimms()
375 for (layer = mci->n_layers - 1; layer >= 0; layer--) { in edac_mc_alloc_dimms()
377 if (pos[layer] < mci->layers[layer].size) in edac_mc_alloc_dimms()
391 struct mem_ctl_info *mci; in edac_mc_alloc() local
422 mci = edac_align_ptr(&ptr, sizeof(*mci), 1); in edac_mc_alloc()
433 mci = kzalloc(size, GFP_KERNEL); in edac_mc_alloc()
434 if (mci == NULL) in edac_mc_alloc()
437 mci->dev.release = mci_release; in edac_mc_alloc()
438 device_initialize(&mci->dev); in edac_mc_alloc()
443 layer = (struct edac_mc_layer *)(((char *)mci) + ((unsigned long)layer)); in edac_mc_alloc()
444 pvt = sz_pvt ? (((char *)mci) + ((unsigned long)pvt)) : NULL; in edac_mc_alloc()
447 mci->mc_idx = mc_num; in edac_mc_alloc()
448 mci->tot_dimms = tot_dimms; in edac_mc_alloc()
449 mci->pvt_info = pvt; in edac_mc_alloc()
450 mci->n_layers = n_layers; in edac_mc_alloc()
451 mci->layers = layer; in edac_mc_alloc()
452 memcpy(mci->layers, layers, sizeof(*layer) * n_layers); in edac_mc_alloc()
453 mci->nr_csrows = tot_csrows; in edac_mc_alloc()
454 mci->num_cschannel = tot_channels; in edac_mc_alloc()
455 mci->csbased = per_rank; in edac_mc_alloc()
457 if (edac_mc_alloc_csrows(mci)) in edac_mc_alloc()
460 if (edac_mc_alloc_dimms(mci)) in edac_mc_alloc()
463 mci->op_state = OP_ALLOC; in edac_mc_alloc()
465 return mci; in edac_mc_alloc()
468 _edac_mc_free(mci); in edac_mc_alloc()
474 void edac_mc_free(struct mem_ctl_info *mci) in edac_mc_free() argument
478 _edac_mc_free(mci); in edac_mc_free()
499 struct mem_ctl_info *mci; in __find_mci_by_dev() local
505 mci = list_entry(item, struct mem_ctl_info, link); in __find_mci_by_dev()
507 if (mci->pdev == dev) in __find_mci_by_dev()
508 return mci; in __find_mci_by_dev()
540 struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work); in edac_mc_workq_function() local
544 if (mci->op_state != OP_RUNNING_POLL) { in edac_mc_workq_function()
550 mci->edac_check(mci); in edac_mc_workq_function()
555 edac_queue_work(&mci->work, msecs_to_jiffies(edac_mc_get_poll_msec())); in edac_mc_workq_function()
566 struct mem_ctl_info *mci; in edac_mc_reset_delay_period() local
572 mci = list_entry(item, struct mem_ctl_info, link); in edac_mc_reset_delay_period()
574 if (mci->op_state == OP_RUNNING_POLL) in edac_mc_reset_delay_period()
575 edac_mod_work(&mci->work, value); in edac_mc_reset_delay_period()
590 static int add_mc_to_global_list(struct mem_ctl_info *mci) in add_mc_to_global_list() argument
597 p = __find_mci_by_dev(mci->pdev); in add_mc_to_global_list()
604 if (p->mc_idx >= mci->mc_idx) { in add_mc_to_global_list()
605 if (unlikely(p->mc_idx == mci->mc_idx)) in add_mc_to_global_list()
613 list_add_tail_rcu(&mci->link, insert_before); in add_mc_to_global_list()
619 edac_dev_name(mci), p->mod_name, p->ctl_name, p->mc_idx); in add_mc_to_global_list()
629 static int del_mc_from_global_list(struct mem_ctl_info *mci) in del_mc_from_global_list() argument
631 list_del_rcu(&mci->link); in del_mc_from_global_list()
637 INIT_LIST_HEAD(&mci->link); in del_mc_from_global_list()
644 struct mem_ctl_info *mci; in edac_mc_find() local
650 mci = list_entry(item, struct mem_ctl_info, link); in edac_mc_find()
651 if (mci->mc_idx == idx) in edac_mc_find()
655 mci = NULL; in edac_mc_find()
658 return mci; in edac_mc_find()
669 int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci, in edac_mc_add_mc_with_groups() argument
677 edac_mc_dump_mci(mci); in edac_mc_add_mc_with_groups()
683 for (i = 0; i < mci->nr_csrows; i++) { in edac_mc_add_mc_with_groups()
684 struct csrow_info *csrow = mci->csrows[i]; in edac_mc_add_mc_with_groups()
698 mci_for_each_dimm(mci, dimm) in edac_mc_add_mc_with_groups()
704 if (edac_mc_owner && edac_mc_owner != mci->mod_name) { in edac_mc_add_mc_with_groups()
709 if (add_mc_to_global_list(mci)) in edac_mc_add_mc_with_groups()
713 mci->start_time = jiffies; in edac_mc_add_mc_with_groups()
715 mci->bus = edac_get_sysfs_subsys(); in edac_mc_add_mc_with_groups()
717 if (edac_create_sysfs_mci_device(mci, groups)) { in edac_mc_add_mc_with_groups()
718 edac_mc_printk(mci, KERN_WARNING, in edac_mc_add_mc_with_groups()
723 if (mci->edac_check) { in edac_mc_add_mc_with_groups()
724 mci->op_state = OP_RUNNING_POLL; in edac_mc_add_mc_with_groups()
726 INIT_DELAYED_WORK(&mci->work, edac_mc_workq_function); in edac_mc_add_mc_with_groups()
727 edac_queue_work(&mci->work, msecs_to_jiffies(edac_mc_get_poll_msec())); in edac_mc_add_mc_with_groups()
730 mci->op_state = OP_RUNNING_INTERRUPT; in edac_mc_add_mc_with_groups()
734 edac_mc_printk(mci, KERN_INFO, in edac_mc_add_mc_with_groups()
736 mci->mod_name, mci->ctl_name, mci->dev_name, in edac_mc_add_mc_with_groups()
737 edac_op_state_to_string(mci->op_state)); in edac_mc_add_mc_with_groups()
739 edac_mc_owner = mci->mod_name; in edac_mc_add_mc_with_groups()
745 del_mc_from_global_list(mci); in edac_mc_add_mc_with_groups()
755 struct mem_ctl_info *mci; in edac_mc_del_mc() local
762 mci = __find_mci_by_dev(dev); in edac_mc_del_mc()
763 if (mci == NULL) { in edac_mc_del_mc()
769 mci->op_state = OP_OFFLINE; in edac_mc_del_mc()
771 if (del_mc_from_global_list(mci)) in edac_mc_del_mc()
776 if (mci->edac_check) in edac_mc_del_mc()
777 edac_stop_work(&mci->work); in edac_mc_del_mc()
780 edac_remove_sysfs_mci_device(mci); in edac_mc_del_mc()
783 "Removed device %d for %s %s: DEV %s\n", mci->mc_idx, in edac_mc_del_mc()
784 mci->mod_name, mci->ctl_name, edac_dev_name(mci)); in edac_mc_del_mc()
786 return mci; in edac_mc_del_mc()
822 int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, unsigned long page) in edac_mc_find_csrow_by_page() argument
824 struct csrow_info **csrows = mci->csrows; in edac_mc_find_csrow_by_page()
827 edac_dbg(1, "MC%d: 0x%lx\n", mci->mc_idx, page); in edac_mc_find_csrow_by_page()
830 for (i = 0; i < mci->nr_csrows; i++) { in edac_mc_find_csrow_by_page()
841 mci->mc_idx, in edac_mc_find_csrow_by_page()
855 edac_mc_printk(mci, KERN_ERR, in edac_mc_find_csrow_by_page()
875 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_inc_ce_error() local
876 struct dimm_info *dimm = edac_get_dimm(mci, pos[0], pos[1], pos[2]); in edac_inc_ce_error()
878 mci->ce_mc += e->error_count; in edac_inc_ce_error()
883 mci->ce_noinfo_count += e->error_count; in edac_inc_ce_error()
889 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_inc_ue_error() local
890 struct dimm_info *dimm = edac_get_dimm(mci, pos[0], pos[1], pos[2]); in edac_inc_ue_error()
892 mci->ue_mc += e->error_count; in edac_inc_ue_error()
897 mci->ue_noinfo_count += e->error_count; in edac_inc_ue_error()
902 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_ce_error() local
906 edac_mc_printk(mci, KERN_WARNING, in edac_ce_error()
918 if (mci->scrub_mode == SCRUB_SW_SRC) { in edac_ce_error()
930 remapped_page = mci->ctl_page_to_phys ? in edac_ce_error()
931 mci->ctl_page_to_phys(mci, e->page_frame_number) : in edac_ce_error()
940 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_ue_error() local
943 edac_mc_printk(mci, KERN_WARNING, in edac_ue_error()
968 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_inc_csrow() local
978 mci->csrows[row]->ce_count += count; in edac_inc_csrow()
980 mci->csrows[row]->channels[chan]->ce_count += count; in edac_inc_csrow()
982 mci->csrows[row]->ue_count += count; in edac_inc_csrow()
988 struct mem_ctl_info *mci = error_desc_to_mci(e); in edac_raw_mc_handle_error() local
1000 mci->mc_idx, e->top_layer, e->mid_layer, in edac_raw_mc_handle_error()
1013 struct mem_ctl_info *mci, in edac_mc_handle_error() argument
1029 struct edac_raw_error_desc *e = &mci->error_desc; in edac_mc_handle_error()
1032 edac_dbg(3, "MC%d\n", mci->mc_idx); in edac_mc_handle_error()
1053 for (i = 0; i < mci->n_layers; i++) { in edac_mc_handle_error()
1054 if (pos[i] >= (int)mci->layers[i].size) { in edac_mc_handle_error()
1056 edac_mc_printk(mci, KERN_ERR, in edac_mc_handle_error()
1058 edac_layer_name[mci->layers[i].type], in edac_mc_handle_error()
1059 pos[i], mci->layers[i].size); in edac_mc_handle_error()
1086 mci_for_each_dimm(mci, dimm) { in edac_mc_handle_error()
1125 mci->csbased ? "rank" : "dimm", in edac_mc_handle_error()
1148 for (i = 0; i < mci->n_layers; i++) { in edac_mc_handle_error()
1153 edac_layer_name[mci->layers[i].type], in edac_mc_handle_error()