Lines Matching refs:pci
31 struct edac_pci_ctl_info *pci;
35 pci = kzalloc(sizeof(struct edac_pci_ctl_info), GFP_KERNEL);
36 if (!pci)
40 pci->pvt_info = kzalloc(sz_pvt, GFP_KERNEL);
41 if (!pci->pvt_info)
45 pci->op_state = OP_ALLOC;
47 snprintf(pci->name, strlen(edac_pci_name) + 1, "%s", edac_pci_name);
49 return pci;
52 kfree(pci);
57 void edac_pci_free_ctl_info(struct edac_pci_ctl_info *pci)
61 edac_pci_remove_sysfs(pci);
73 struct edac_pci_ctl_info *pci;
79 pci = list_entry(item, struct edac_pci_ctl_info, link);
81 if (pci->dev == dev)
82 return pci;
96 static int add_edac_pci_to_global_list(struct edac_pci_ctl_info *pci)
106 rover = find_edac_pci_by_dev(pci->dev);
114 if (rover->pci_idx >= pci->pci_idx) {
115 if (unlikely(rover->pci_idx == pci->pci_idx))
123 list_add_tail_rcu(&pci->link, insert_before);
146 static void del_edac_pci_from_global_list(struct edac_pci_ctl_info *pci)
148 list_del_rcu(&pci->link);
154 INIT_LIST_HEAD(&pci->link);
166 struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work);
174 if (pci->op_state != OP_RUNNING_POLL) {
180 pci->edac_check(pci);
189 edac_queue_work(&pci->work, delay);
200 int edac_pci_add_device(struct edac_pci_ctl_info *pci, int edac_idx)
204 pci->pci_idx = edac_idx;
205 pci->start_time = jiffies;
209 if (add_edac_pci_to_global_list(pci))
212 if (edac_pci_create_sysfs(pci)) {
213 edac_pci_printk(pci, KERN_WARNING,
214 "failed to create sysfs pci\n");
218 if (pci->edac_check) {
219 pci->op_state = OP_RUNNING_POLL;
221 INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function);
222 edac_queue_work(&pci->work, msecs_to_jiffies(edac_pci_get_poll_msec()));
225 pci->op_state = OP_RUNNING_INTERRUPT;
228 edac_pci_printk(pci, KERN_INFO,
230 pci->mod_name, pci->ctl_name, pci->dev_name,
231 edac_op_state_to_string(pci->op_state));
238 del_edac_pci_from_global_list(pci);
247 struct edac_pci_ctl_info *pci;
256 pci = find_edac_pci_by_dev(dev);
257 if (pci == NULL) {
262 pci->op_state = OP_OFFLINE;
264 del_edac_pci_from_global_list(pci);
268 if (pci->edac_check)
269 edac_stop_work(&pci->work);
273 pci->pci_idx, pci->mod_name, pci->ctl_name, edac_dev_name(pci));
275 return pci;
284 static void edac_pci_generic_check(struct edac_pci_ctl_info *pci)
301 struct edac_pci_ctl_info *pci;
304 pci = edac_pci_alloc_ctl_info(sizeof(*pdata), EDAC_PCI_GENCTL_NAME);
305 if (!pci)
308 pdata = pci->pvt_info;
309 pci->dev = dev;
310 dev_set_drvdata(pci->dev, pci);
311 pci->dev_name = pci_name(to_pci_dev(dev));
313 pci->mod_name = mod_name;
314 pci->ctl_name = EDAC_PCI_GENCTL_NAME;
316 pci->edac_check = edac_pci_generic_check;
320 if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
322 edac_pci_free_ctl_info(pci);
326 return pci;
330 void edac_pci_release_generic_ctl(struct edac_pci_ctl_info *pci)
332 edac_dbg(0, "pci mod=%s\n", pci->mod_name);
334 edac_pci_del_device(pci->dev);
335 edac_pci_free_ctl_info(pci);