1 /* 2 * (C) 2005, 2006 Linux Networx (http://lnxi.com) 3 * This file may be distributed under the terms of the 4 * GNU General Public License. 5 * 6 * Written Doug Thompson <norsk5@xmission.com> 7 * 8 */ 9 #include <linux/module.h> 10 #include <linux/edac.h> 11 #include <linux/slab.h> 12 #include <linux/ctype.h> 13 14 #include "edac_pci.h" 15 #include "edac_module.h" 16 17 #define EDAC_PCI_SYMLINK "device" 18 19 /* data variables exported via sysfs */ 20 static int check_pci_errors; /* default NO check PCI parity */ 21 static int edac_pci_panic_on_pe; /* default NO panic on PCI Parity */ 22 static int edac_pci_log_pe = 1; /* log PCI parity errors */ 23 static int edac_pci_log_npe = 1; /* log PCI non-parity error errors */ 24 static int edac_pci_poll_msec = 1000; /* one second workq period */ 25 26 static atomic_t pci_parity_count = ATOMIC_INIT(0); 27 static atomic_t pci_nonparity_count = ATOMIC_INIT(0); 28 29 static struct kobject *edac_pci_top_main_kobj; 30 static atomic_t edac_pci_sysfs_refcount = ATOMIC_INIT(0); 31 32 /* getter functions for the data variables */ 33 int edac_pci_get_check_errors(void) 34 { 35 return check_pci_errors; 36 } 37 38 static int edac_pci_get_log_pe(void) 39 { 40 return edac_pci_log_pe; 41 } 42 43 static int edac_pci_get_log_npe(void) 44 { 45 return edac_pci_log_npe; 46 } 47 48 static int edac_pci_get_panic_on_pe(void) 49 { 50 return edac_pci_panic_on_pe; 51 } 52 53 int edac_pci_get_poll_msec(void) 54 { 55 return edac_pci_poll_msec; 56 } 57 58 /**************************** EDAC PCI sysfs instance *******************/ 59 static ssize_t instance_pe_count_show(struct edac_pci_ctl_info *pci, char *data) 60 { 61 return sprintf(data, "%u\n", atomic_read(&pci->counters.pe_count)); 62 } 63 64 static ssize_t instance_npe_count_show(struct edac_pci_ctl_info *pci, 65 char *data) 66 { 67 return sprintf(data, "%u\n", atomic_read(&pci->counters.npe_count)); 68 } 69 70 #define to_instance(k) container_of(k, struct edac_pci_ctl_info, kobj) 71 #define to_instance_attr(a) container_of(a, struct instance_attribute, attr) 72 73 /* DEVICE instance kobject release() function */ 74 static void edac_pci_instance_release(struct kobject *kobj) 75 { 76 struct edac_pci_ctl_info *pci; 77 78 edac_dbg(0, "\n"); 79 80 /* Form pointer to containing struct, the pci control struct */ 81 pci = to_instance(kobj); 82 83 /* decrement reference count on top main kobj */ 84 kobject_put(edac_pci_top_main_kobj); 85 86 kfree(pci); /* Free the control struct */ 87 } 88 89 /* instance specific attribute structure */ 90 struct instance_attribute { 91 struct attribute attr; 92 ssize_t(*show) (struct edac_pci_ctl_info *, char *); 93 ssize_t(*store) (struct edac_pci_ctl_info *, const char *, size_t); 94 }; 95 96 /* Function to 'show' fields from the edac_pci 'instance' structure */ 97 static ssize_t edac_pci_instance_show(struct kobject *kobj, 98 struct attribute *attr, char *buffer) 99 { 100 struct edac_pci_ctl_info *pci = to_instance(kobj); 101 struct instance_attribute *instance_attr = to_instance_attr(attr); 102 103 if (instance_attr->show) 104 return instance_attr->show(pci, buffer); 105 return -EIO; 106 } 107 108 /* Function to 'store' fields into the edac_pci 'instance' structure */ 109 static ssize_t edac_pci_instance_store(struct kobject *kobj, 110 struct attribute *attr, 111 const char *buffer, size_t count) 112 { 113 struct edac_pci_ctl_info *pci = to_instance(kobj); 114 struct instance_attribute *instance_attr = to_instance_attr(attr); 115 116 if (instance_attr->store) 117 return instance_attr->store(pci, buffer, count); 118 return -EIO; 119 } 120 121 /* fs_ops table */ 122 static const struct sysfs_ops pci_instance_ops = { 123 .show = edac_pci_instance_show, 124 .store = edac_pci_instance_store 125 }; 126 127 #define INSTANCE_ATTR(_name, _mode, _show, _store) \ 128 static struct instance_attribute attr_instance_##_name = { \ 129 .attr = {.name = __stringify(_name), .mode = _mode }, \ 130 .show = _show, \ 131 .store = _store, \ 132 }; 133 134 INSTANCE_ATTR(pe_count, S_IRUGO, instance_pe_count_show, NULL); 135 INSTANCE_ATTR(npe_count, S_IRUGO, instance_npe_count_show, NULL); 136 137 /* pci instance attributes */ 138 static struct attribute *pci_instance_attrs[] = { 139 &attr_instance_pe_count.attr, 140 &attr_instance_npe_count.attr, 141 NULL 142 }; 143 ATTRIBUTE_GROUPS(pci_instance); 144 145 /* the ktype for a pci instance */ 146 static struct kobj_type ktype_pci_instance = { 147 .release = edac_pci_instance_release, 148 .sysfs_ops = &pci_instance_ops, 149 .default_groups = pci_instance_groups, 150 }; 151 152 /* 153 * edac_pci_create_instance_kobj 154 * 155 * construct one EDAC PCI instance's kobject for use 156 */ 157 static int edac_pci_create_instance_kobj(struct edac_pci_ctl_info *pci, int idx) 158 { 159 struct kobject *main_kobj; 160 int err; 161 162 edac_dbg(0, "\n"); 163 164 /* First bump the ref count on the top main kobj, which will 165 * track the number of PCI instances we have, and thus nest 166 * properly on keeping the module loaded 167 */ 168 main_kobj = kobject_get(edac_pci_top_main_kobj); 169 if (!main_kobj) { 170 err = -ENODEV; 171 goto error_out; 172 } 173 174 /* And now register this new kobject under the main kobj */ 175 err = kobject_init_and_add(&pci->kobj, &ktype_pci_instance, 176 edac_pci_top_main_kobj, "pci%d", idx); 177 if (err != 0) { 178 edac_dbg(2, "failed to register instance pci%d\n", idx); 179 kobject_put(edac_pci_top_main_kobj); 180 goto error_out; 181 } 182 183 kobject_uevent(&pci->kobj, KOBJ_ADD); 184 edac_dbg(1, "Register instance 'pci%d' kobject\n", idx); 185 186 return 0; 187 188 /* Error unwind statck */ 189 error_out: 190 return err; 191 } 192 193 /* 194 * edac_pci_unregister_sysfs_instance_kobj 195 * 196 * unregister the kobj for the EDAC PCI instance 197 */ 198 static void edac_pci_unregister_sysfs_instance_kobj( 199 struct edac_pci_ctl_info *pci) 200 { 201 edac_dbg(0, "\n"); 202 203 /* Unregister the instance kobject and allow its release 204 * function release the main reference count and then 205 * kfree the memory 206 */ 207 kobject_put(&pci->kobj); 208 } 209 210 /***************************** EDAC PCI sysfs root **********************/ 211 #define to_edacpci(k) container_of(k, struct edac_pci_ctl_info, kobj) 212 #define to_edacpci_attr(a) container_of(a, struct edac_pci_attr, attr) 213 214 /* simple show/store functions for attributes */ 215 static ssize_t edac_pci_int_show(void *ptr, char *buffer) 216 { 217 int *value = ptr; 218 return sprintf(buffer, "%d\n", *value); 219 } 220 221 static ssize_t edac_pci_int_store(void *ptr, const char *buffer, size_t count) 222 { 223 int *value = ptr; 224 225 if (isdigit(*buffer)) 226 *value = simple_strtoul(buffer, NULL, 0); 227 228 return count; 229 } 230 231 struct edac_pci_dev_attribute { 232 struct attribute attr; 233 void *value; 234 ssize_t(*show) (void *, char *); 235 ssize_t(*store) (void *, const char *, size_t); 236 }; 237 238 /* Set of show/store abstract level functions for PCI Parity object */ 239 static ssize_t edac_pci_dev_show(struct kobject *kobj, struct attribute *attr, 240 char *buffer) 241 { 242 struct edac_pci_dev_attribute *edac_pci_dev; 243 edac_pci_dev = (struct edac_pci_dev_attribute *)attr; 244 245 if (edac_pci_dev->show) 246 return edac_pci_dev->show(edac_pci_dev->value, buffer); 247 return -EIO; 248 } 249 250 static ssize_t edac_pci_dev_store(struct kobject *kobj, 251 struct attribute *attr, const char *buffer, 252 size_t count) 253 { 254 struct edac_pci_dev_attribute *edac_pci_dev; 255 edac_pci_dev = (struct edac_pci_dev_attribute *)attr; 256 257 if (edac_pci_dev->store) 258 return edac_pci_dev->store(edac_pci_dev->value, buffer, count); 259 return -EIO; 260 } 261 262 static const struct sysfs_ops edac_pci_sysfs_ops = { 263 .show = edac_pci_dev_show, 264 .store = edac_pci_dev_store 265 }; 266 267 #define EDAC_PCI_ATTR(_name,_mode,_show,_store) \ 268 static struct edac_pci_dev_attribute edac_pci_attr_##_name = { \ 269 .attr = {.name = __stringify(_name), .mode = _mode }, \ 270 .value = &_name, \ 271 .show = _show, \ 272 .store = _store, \ 273 }; 274 275 #define EDAC_PCI_STRING_ATTR(_name,_data,_mode,_show,_store) \ 276 static struct edac_pci_dev_attribute edac_pci_attr_##_name = { \ 277 .attr = {.name = __stringify(_name), .mode = _mode }, \ 278 .value = _data, \ 279 .show = _show, \ 280 .store = _store, \ 281 }; 282 283 /* PCI Parity control files */ 284 EDAC_PCI_ATTR(check_pci_errors, S_IRUGO | S_IWUSR, edac_pci_int_show, 285 edac_pci_int_store); 286 EDAC_PCI_ATTR(edac_pci_log_pe, S_IRUGO | S_IWUSR, edac_pci_int_show, 287 edac_pci_int_store); 288 EDAC_PCI_ATTR(edac_pci_log_npe, S_IRUGO | S_IWUSR, edac_pci_int_show, 289 edac_pci_int_store); 290 EDAC_PCI_ATTR(edac_pci_panic_on_pe, S_IRUGO | S_IWUSR, edac_pci_int_show, 291 edac_pci_int_store); 292 EDAC_PCI_ATTR(pci_parity_count, S_IRUGO, edac_pci_int_show, NULL); 293 EDAC_PCI_ATTR(pci_nonparity_count, S_IRUGO, edac_pci_int_show, NULL); 294 295 /* Base Attributes of the memory ECC object */ 296 static struct attribute *edac_pci_attrs[] = { 297 &edac_pci_attr_check_pci_errors.attr, 298 &edac_pci_attr_edac_pci_log_pe.attr, 299 &edac_pci_attr_edac_pci_log_npe.attr, 300 &edac_pci_attr_edac_pci_panic_on_pe.attr, 301 &edac_pci_attr_pci_parity_count.attr, 302 &edac_pci_attr_pci_nonparity_count.attr, 303 NULL, 304 }; 305 ATTRIBUTE_GROUPS(edac_pci); 306 307 /* 308 * edac_pci_release_main_kobj 309 * 310 * This release function is called when the reference count to the 311 * passed kobj goes to zero. 312 * 313 * This kobj is the 'main' kobject that EDAC PCI instances 314 * link to, and thus provide for proper nesting counts 315 */ 316 static void edac_pci_release_main_kobj(struct kobject *kobj) 317 { 318 edac_dbg(0, "here to module_put(THIS_MODULE)\n"); 319 320 kfree(kobj); 321 322 /* last reference to top EDAC PCI kobject has been removed, 323 * NOW release our ref count on the core module 324 */ 325 module_put(THIS_MODULE); 326 } 327 328 /* ktype struct for the EDAC PCI main kobj */ 329 static struct kobj_type ktype_edac_pci_main_kobj = { 330 .release = edac_pci_release_main_kobj, 331 .sysfs_ops = &edac_pci_sysfs_ops, 332 .default_groups = edac_pci_groups, 333 }; 334 335 /** 336 * edac_pci_main_kobj_setup: Setup the sysfs for EDAC PCI attributes. 337 */ 338 static int edac_pci_main_kobj_setup(void) 339 { 340 int err = -ENODEV; 341 struct bus_type *edac_subsys; 342 struct device *dev_root; 343 344 edac_dbg(0, "\n"); 345 346 /* check and count if we have already created the main kobject */ 347 if (atomic_inc_return(&edac_pci_sysfs_refcount) != 1) 348 return 0; 349 350 /* First time, so create the main kobject and its 351 * controls and attributes 352 */ 353 edac_subsys = edac_get_sysfs_subsys(); 354 355 /* Bump the reference count on this module to ensure the 356 * modules isn't unloaded until we deconstruct the top 357 * level main kobj for EDAC PCI 358 */ 359 if (!try_module_get(THIS_MODULE)) { 360 edac_dbg(1, "try_module_get() failed\n"); 361 goto decrement_count_fail; 362 } 363 364 edac_pci_top_main_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); 365 if (!edac_pci_top_main_kobj) { 366 edac_dbg(1, "Failed to allocate\n"); 367 err = -ENOMEM; 368 goto kzalloc_fail; 369 } 370 371 /* Instanstiate the pci object */ 372 dev_root = bus_get_dev_root(edac_subsys); 373 if (dev_root) { 374 err = kobject_init_and_add(edac_pci_top_main_kobj, 375 &ktype_edac_pci_main_kobj, 376 &dev_root->kobj, "pci"); 377 put_device(dev_root); 378 } 379 if (err) { 380 edac_dbg(1, "Failed to register '.../edac/pci'\n"); 381 goto kobject_init_and_add_fail; 382 } 383 384 /* At this point, to 'release' the top level kobject 385 * for EDAC PCI, then edac_pci_main_kobj_teardown() 386 * must be used, for resources to be cleaned up properly 387 */ 388 kobject_uevent(edac_pci_top_main_kobj, KOBJ_ADD); 389 edac_dbg(1, "Registered '.../edac/pci' kobject\n"); 390 391 return 0; 392 393 /* Error unwind statck */ 394 kobject_init_and_add_fail: 395 kobject_put(edac_pci_top_main_kobj); 396 397 kzalloc_fail: 398 module_put(THIS_MODULE); 399 400 decrement_count_fail: 401 /* if are on this error exit, nothing to tear down */ 402 atomic_dec(&edac_pci_sysfs_refcount); 403 404 return err; 405 } 406 407 /* 408 * edac_pci_main_kobj_teardown() 409 * 410 * if no longer linked (needed) remove the top level EDAC PCI 411 * kobject with its controls and attributes 412 */ 413 static void edac_pci_main_kobj_teardown(void) 414 { 415 edac_dbg(0, "\n"); 416 417 /* Decrement the count and only if no more controller instances 418 * are connected perform the unregisteration of the top level 419 * main kobj 420 */ 421 if (atomic_dec_return(&edac_pci_sysfs_refcount) == 0) { 422 edac_dbg(0, "called kobject_put on main kobj\n"); 423 kobject_put(edac_pci_top_main_kobj); 424 } 425 } 426 427 int edac_pci_create_sysfs(struct edac_pci_ctl_info *pci) 428 { 429 int err; 430 struct kobject *edac_kobj = &pci->kobj; 431 432 edac_dbg(0, "idx=%d\n", pci->pci_idx); 433 434 /* create the top main EDAC PCI kobject, IF needed */ 435 err = edac_pci_main_kobj_setup(); 436 if (err) 437 return err; 438 439 /* Create this instance's kobject under the MAIN kobject */ 440 err = edac_pci_create_instance_kobj(pci, pci->pci_idx); 441 if (err) 442 goto unregister_cleanup; 443 444 err = sysfs_create_link(edac_kobj, &pci->dev->kobj, EDAC_PCI_SYMLINK); 445 if (err) { 446 edac_dbg(0, "sysfs_create_link() returned err= %d\n", err); 447 goto symlink_fail; 448 } 449 450 return 0; 451 452 /* Error unwind stack */ 453 symlink_fail: 454 edac_pci_unregister_sysfs_instance_kobj(pci); 455 456 unregister_cleanup: 457 edac_pci_main_kobj_teardown(); 458 459 return err; 460 } 461 462 void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci) 463 { 464 edac_dbg(0, "index=%d\n", pci->pci_idx); 465 466 /* Remove the symlink */ 467 sysfs_remove_link(&pci->kobj, EDAC_PCI_SYMLINK); 468 469 /* remove this PCI instance's sysfs entries */ 470 edac_pci_unregister_sysfs_instance_kobj(pci); 471 472 /* Call the main unregister function, which will determine 473 * if this 'pci' is the last instance. 474 * If it is, the main kobject will be unregistered as a result 475 */ 476 edac_dbg(0, "calling edac_pci_main_kobj_teardown()\n"); 477 edac_pci_main_kobj_teardown(); 478 } 479 480 /************************ PCI error handling *************************/ 481 static u16 get_pci_parity_status(struct pci_dev *dev, int secondary) 482 { 483 int where; 484 u16 status; 485 486 where = secondary ? PCI_SEC_STATUS : PCI_STATUS; 487 pci_read_config_word(dev, where, &status); 488 489 /* If we get back 0xFFFF then we must suspect that the card has been 490 * pulled but the Linux PCI layer has not yet finished cleaning up. 491 * We don't want to report on such devices 492 */ 493 494 if (status == 0xFFFF) { 495 u32 sanity; 496 497 pci_read_config_dword(dev, 0, &sanity); 498 499 if (sanity == 0xFFFFFFFF) 500 return 0; 501 } 502 503 status &= PCI_STATUS_DETECTED_PARITY | PCI_STATUS_SIG_SYSTEM_ERROR | 504 PCI_STATUS_PARITY; 505 506 if (status) 507 /* reset only the bits we are interested in */ 508 pci_write_config_word(dev, where, status); 509 510 return status; 511 } 512 513 514 /* Clear any PCI parity errors logged by this device. */ 515 static void edac_pci_dev_parity_clear(struct pci_dev *dev) 516 { 517 u8 header_type; 518 519 get_pci_parity_status(dev, 0); 520 521 /* read the device TYPE, looking for bridges */ 522 pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); 523 524 if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) 525 get_pci_parity_status(dev, 1); 526 } 527 528 /* 529 * PCI Parity polling 530 * 531 * Function to retrieve the current parity status 532 * and decode it 533 * 534 */ 535 static void edac_pci_dev_parity_test(struct pci_dev *dev) 536 { 537 unsigned long flags; 538 u16 status; 539 u8 header_type; 540 541 /* stop any interrupts until we can acquire the status */ 542 local_irq_save(flags); 543 544 /* read the STATUS register on this device */ 545 status = get_pci_parity_status(dev, 0); 546 547 /* read the device TYPE, looking for bridges */ 548 pci_read_config_byte(dev, PCI_HEADER_TYPE, &header_type); 549 550 local_irq_restore(flags); 551 552 edac_dbg(4, "PCI STATUS= 0x%04x %s\n", status, dev_name(&dev->dev)); 553 554 /* check the status reg for errors on boards NOT marked as broken 555 * if broken, we cannot trust any of the status bits 556 */ 557 if (status && !dev->broken_parity_status) { 558 if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) { 559 edac_printk(KERN_CRIT, EDAC_PCI, 560 "Signaled System Error on %s\n", 561 pci_name(dev)); 562 atomic_inc(&pci_nonparity_count); 563 } 564 565 if (status & (PCI_STATUS_PARITY)) { 566 edac_printk(KERN_CRIT, EDAC_PCI, 567 "Master Data Parity Error on %s\n", 568 pci_name(dev)); 569 570 atomic_inc(&pci_parity_count); 571 } 572 573 if (status & (PCI_STATUS_DETECTED_PARITY)) { 574 edac_printk(KERN_CRIT, EDAC_PCI, 575 "Detected Parity Error on %s\n", 576 pci_name(dev)); 577 578 atomic_inc(&pci_parity_count); 579 } 580 } 581 582 583 edac_dbg(4, "PCI HEADER TYPE= 0x%02x %s\n", 584 header_type, dev_name(&dev->dev)); 585 586 if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { 587 /* On bridges, need to examine secondary status register */ 588 status = get_pci_parity_status(dev, 1); 589 590 edac_dbg(4, "PCI SEC_STATUS= 0x%04x %s\n", 591 status, dev_name(&dev->dev)); 592 593 /* check the secondary status reg for errors, 594 * on NOT broken boards 595 */ 596 if (status && !dev->broken_parity_status) { 597 if (status & (PCI_STATUS_SIG_SYSTEM_ERROR)) { 598 edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " 599 "Signaled System Error on %s\n", 600 pci_name(dev)); 601 atomic_inc(&pci_nonparity_count); 602 } 603 604 if (status & (PCI_STATUS_PARITY)) { 605 edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " 606 "Master Data Parity Error on " 607 "%s\n", pci_name(dev)); 608 609 atomic_inc(&pci_parity_count); 610 } 611 612 if (status & (PCI_STATUS_DETECTED_PARITY)) { 613 edac_printk(KERN_CRIT, EDAC_PCI, "Bridge " 614 "Detected Parity Error on %s\n", 615 pci_name(dev)); 616 617 atomic_inc(&pci_parity_count); 618 } 619 } 620 } 621 } 622 623 /* reduce some complexity in definition of the iterator */ 624 typedef void (*pci_parity_check_fn_t) (struct pci_dev *dev); 625 626 /* 627 * pci_dev parity list iterator 628 * 629 * Scan the PCI device list looking for SERRORs, Master Parity ERRORS or 630 * Parity ERRORs on primary or secondary devices. 631 */ 632 static inline void edac_pci_dev_parity_iterator(pci_parity_check_fn_t fn) 633 { 634 struct pci_dev *dev = NULL; 635 636 for_each_pci_dev(dev) 637 fn(dev); 638 } 639 640 /* 641 * edac_pci_do_parity_check 642 * 643 * performs the actual PCI parity check operation 644 */ 645 void edac_pci_do_parity_check(void) 646 { 647 int before_count; 648 649 edac_dbg(3, "\n"); 650 651 /* if policy has PCI check off, leave now */ 652 if (!check_pci_errors) 653 return; 654 655 before_count = atomic_read(&pci_parity_count); 656 657 /* scan all PCI devices looking for a Parity Error on devices and 658 * bridges. 659 * The iterator calls pci_get_device() which might sleep, thus 660 * we cannot disable interrupts in this scan. 661 */ 662 edac_pci_dev_parity_iterator(edac_pci_dev_parity_test); 663 664 /* Only if operator has selected panic on PCI Error */ 665 if (edac_pci_get_panic_on_pe()) { 666 /* If the count is different 'after' from 'before' */ 667 if (before_count != atomic_read(&pci_parity_count)) 668 panic("EDAC: PCI Parity Error"); 669 } 670 } 671 672 /* 673 * edac_pci_clear_parity_errors 674 * 675 * function to perform an iteration over the PCI devices 676 * and clearn their current status 677 */ 678 void edac_pci_clear_parity_errors(void) 679 { 680 /* Clear any PCI bus parity errors that devices initially have logged 681 * in their registers. 682 */ 683 edac_pci_dev_parity_iterator(edac_pci_dev_parity_clear); 684 } 685 686 /* 687 * edac_pci_handle_pe 688 * 689 * Called to handle a PARITY ERROR event 690 */ 691 void edac_pci_handle_pe(struct edac_pci_ctl_info *pci, const char *msg) 692 { 693 694 /* global PE counter incremented by edac_pci_do_parity_check() */ 695 atomic_inc(&pci->counters.pe_count); 696 697 if (edac_pci_get_log_pe()) 698 edac_pci_printk(pci, KERN_WARNING, 699 "Parity Error ctl: %s %d: %s\n", 700 pci->ctl_name, pci->pci_idx, msg); 701 702 /* 703 * poke all PCI devices and see which one is the troublemaker 704 * panic() is called if set 705 */ 706 edac_pci_do_parity_check(); 707 } 708 EXPORT_SYMBOL_GPL(edac_pci_handle_pe); 709 710 711 /* 712 * edac_pci_handle_npe 713 * 714 * Called to handle a NON-PARITY ERROR event 715 */ 716 void edac_pci_handle_npe(struct edac_pci_ctl_info *pci, const char *msg) 717 { 718 719 /* global NPE counter incremented by edac_pci_do_parity_check() */ 720 atomic_inc(&pci->counters.npe_count); 721 722 if (edac_pci_get_log_npe()) 723 edac_pci_printk(pci, KERN_WARNING, 724 "Non-Parity Error ctl: %s %d: %s\n", 725 pci->ctl_name, pci->pci_idx, msg); 726 727 /* 728 * poke all PCI devices and see which one is the troublemaker 729 * panic() is called if set 730 */ 731 edac_pci_do_parity_check(); 732 } 733 EXPORT_SYMBOL_GPL(edac_pci_handle_npe); 734 735 /* 736 * Define the PCI parameter to the module 737 */ 738 module_param(check_pci_errors, int, 0644); 739 MODULE_PARM_DESC(check_pci_errors, 740 "Check for PCI bus parity errors: 0=off 1=on"); 741 module_param(edac_pci_panic_on_pe, int, 0644); 742 MODULE_PARM_DESC(edac_pci_panic_on_pe, 743 "Panic on PCI Bus Parity error: 0=off 1=on"); 744