Lines Matching refs:pci

44 	struct edac_pci_ctl_info *pci;  in edac_pci_alloc_ctl_info()  local
50 pci = edac_align_ptr(&p, sizeof(*pci), 1); in edac_pci_alloc_ctl_info()
55 pci = kzalloc(size, GFP_KERNEL); in edac_pci_alloc_ctl_info()
56 if (pci == NULL) in edac_pci_alloc_ctl_info()
60 pvt = sz_pvt ? ((char *)pci) + ((unsigned long)pvt) : NULL; in edac_pci_alloc_ctl_info()
62 pci->pvt_info = pvt; in edac_pci_alloc_ctl_info()
63 pci->op_state = OP_ALLOC; in edac_pci_alloc_ctl_info()
65 snprintf(pci->name, strlen(edac_pci_name) + 1, "%s", edac_pci_name); in edac_pci_alloc_ctl_info()
67 return pci; in edac_pci_alloc_ctl_info()
81 void edac_pci_free_ctl_info(struct edac_pci_ctl_info *pci) in edac_pci_free_ctl_info() argument
85 edac_pci_remove_sysfs(pci); in edac_pci_free_ctl_info()
97 struct edac_pci_ctl_info *pci; in find_edac_pci_by_dev() local
103 pci = list_entry(item, struct edac_pci_ctl_info, link); in find_edac_pci_by_dev()
105 if (pci->dev == dev) in find_edac_pci_by_dev()
106 return pci; in find_edac_pci_by_dev()
120 static int add_edac_pci_to_global_list(struct edac_pci_ctl_info *pci) in add_edac_pci_to_global_list() argument
130 rover = find_edac_pci_by_dev(pci->dev); in add_edac_pci_to_global_list()
138 if (rover->pci_idx >= pci->pci_idx) { in add_edac_pci_to_global_list()
139 if (unlikely(rover->pci_idx == pci->pci_idx)) in add_edac_pci_to_global_list()
147 list_add_tail_rcu(&pci->link, insert_before); in add_edac_pci_to_global_list()
170 static void del_edac_pci_from_global_list(struct edac_pci_ctl_info *pci) in del_edac_pci_from_global_list() argument
172 list_del_rcu(&pci->link); in del_edac_pci_from_global_list()
178 INIT_LIST_HEAD(&pci->link); in del_edac_pci_from_global_list()
196 struct edac_pci_ctl_info *pci;
200 pci = list_entry(item, struct edac_pci_ctl_info, link);
202 if (pci->pci_idx >= idx) {
203 if (pci->pci_idx == idx)
204 return pci;
225 struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work); in edac_pci_workq_function() local
233 if (pci->op_state == OP_RUNNING_POLL) { in edac_pci_workq_function()
236 if ((pci->edac_check != NULL) && edac_pci_get_check_errors()) in edac_pci_workq_function()
237 pci->edac_check(pci); in edac_pci_workq_function()
247 queue_delayed_work(edac_workqueue, &pci->work, delay); in edac_pci_workq_function()
261 static void edac_pci_workq_setup(struct edac_pci_ctl_info *pci, in edac_pci_workq_setup() argument
266 INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function); in edac_pci_workq_setup()
267 queue_delayed_work(edac_workqueue, &pci->work, in edac_pci_workq_setup()
275 static void edac_pci_workq_teardown(struct edac_pci_ctl_info *pci) in edac_pci_workq_teardown() argument
279 pci->op_state = OP_OFFLINE; in edac_pci_workq_teardown()
281 cancel_delayed_work_sync(&pci->work); in edac_pci_workq_teardown()
292 void edac_pci_reset_delay_period(struct edac_pci_ctl_info *pci, in edac_pci_reset_delay_period() argument
297 edac_pci_workq_teardown(pci); in edac_pci_reset_delay_period()
302 edac_pci_workq_setup(pci, value); in edac_pci_reset_delay_period()
333 int edac_pci_add_device(struct edac_pci_ctl_info *pci, int edac_idx) in edac_pci_add_device() argument
337 pci->pci_idx = edac_idx; in edac_pci_add_device()
338 pci->start_time = jiffies; in edac_pci_add_device()
342 if (add_edac_pci_to_global_list(pci)) in edac_pci_add_device()
345 if (edac_pci_create_sysfs(pci)) { in edac_pci_add_device()
346 edac_pci_printk(pci, KERN_WARNING, in edac_pci_add_device()
351 if (pci->edac_check != NULL) { in edac_pci_add_device()
352 pci->op_state = OP_RUNNING_POLL; in edac_pci_add_device()
354 edac_pci_workq_setup(pci, 1000); in edac_pci_add_device()
356 pci->op_state = OP_RUNNING_INTERRUPT; in edac_pci_add_device()
359 edac_pci_printk(pci, KERN_INFO, in edac_pci_add_device()
361 pci->mod_name, pci->ctl_name, pci->dev_name, in edac_pci_add_device()
362 edac_op_state_to_string(pci->op_state)); in edac_pci_add_device()
369 del_edac_pci_from_global_list(pci); in edac_pci_add_device()
391 struct edac_pci_ctl_info *pci; in edac_pci_del_device() local
400 pci = find_edac_pci_by_dev(dev); in edac_pci_del_device()
401 if (pci == NULL) { in edac_pci_del_device()
406 pci->op_state = OP_OFFLINE; in edac_pci_del_device()
408 del_edac_pci_from_global_list(pci); in edac_pci_del_device()
413 edac_pci_workq_teardown(pci); in edac_pci_del_device()
417 pci->pci_idx, pci->mod_name, pci->ctl_name, edac_dev_name(pci)); in edac_pci_del_device()
419 return pci; in edac_pci_del_device()
428 static void edac_pci_generic_check(struct edac_pci_ctl_info *pci) in edac_pci_generic_check() argument
456 struct edac_pci_ctl_info *pci; in edac_pci_create_generic_ctl() local
459 pci = edac_pci_alloc_ctl_info(sizeof(*pdata), EDAC_PCI_GENCTL_NAME); in edac_pci_create_generic_ctl()
460 if (!pci) in edac_pci_create_generic_ctl()
463 pdata = pci->pvt_info; in edac_pci_create_generic_ctl()
464 pci->dev = dev; in edac_pci_create_generic_ctl()
465 dev_set_drvdata(pci->dev, pci); in edac_pci_create_generic_ctl()
466 pci->dev_name = pci_name(to_pci_dev(dev)); in edac_pci_create_generic_ctl()
468 pci->mod_name = mod_name; in edac_pci_create_generic_ctl()
469 pci->ctl_name = EDAC_PCI_GENCTL_NAME; in edac_pci_create_generic_ctl()
471 pci->edac_check = edac_pci_generic_check; in edac_pci_create_generic_ctl()
475 if (edac_pci_add_device(pci, pdata->edac_idx) > 0) { in edac_pci_create_generic_ctl()
477 edac_pci_free_ctl_info(pci); in edac_pci_create_generic_ctl()
481 return pci; in edac_pci_create_generic_ctl()
490 void edac_pci_release_generic_ctl(struct edac_pci_ctl_info *pci) in edac_pci_release_generic_ctl() argument
492 edac_dbg(0, "pci mod=%s\n", pci->mod_name); in edac_pci_release_generic_ctl()
494 edac_pci_del_device(pci->dev); in edac_pci_release_generic_ctl()
495 edac_pci_free_ctl_info(pci); in edac_pci_release_generic_ctl()