diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 04:38:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:06 -0500 |
commit | 537fba28928c01b7db1580627450691a4bb0b9b3 (patch) | |
tree | 1fd5adaa38ba639e28b56e014bfb309c0d1e181e /drivers/edac/i82875p_edac.c | |
parent | f2fe42abbf0d99a8c4b96f1cc55db10ac35d2fb9 (diff) |
[PATCH] EDAC: printk cleanup
This implements the following idea:
On Monday 30 January 2006 19:22, Eric W. Biederman wrote:
> One piece missing from this conversation is the issue that we need errors
> in a uniform format. That is why edac_mc has helper functions.
>
> However there will always be errors that don't fit any particular model.
> Could we add a edac_printk(dev, ); That is similar to dev_printk but
> prints out an EDAC header and the device on which the error was found?
> Letting the rest of the string be user specified.
>
> For actual control that interface may be to blunt, but at least for people
> looking in the logs it allows all of the errors to be detected and
> harvested.
Signed-off-by: David S. Peterson <dsp@llnl.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/edac/i82875p_edac.c')
-rw-r--r-- | drivers/edac/i82875p_edac.c | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c index 1991f94af753..0e22c66ee36c 100644 --- a/drivers/edac/i82875p_edac.c +++ b/drivers/edac/i82875p_edac.c | |||
@@ -26,6 +26,14 @@ | |||
26 | #include "edac_mc.h" | 26 | #include "edac_mc.h" |
27 | 27 | ||
28 | 28 | ||
29 | #define i82875p_printk(level, fmt, arg...) \ | ||
30 | edac_printk(level, "i82875p", fmt, ##arg) | ||
31 | |||
32 | |||
33 | #define i82875p_mc_printk(mci, level, fmt, arg...) \ | ||
34 | edac_mc_chipset_printk(mci, level, "i82875p", fmt, ##arg) | ||
35 | |||
36 | |||
29 | #ifndef PCI_DEVICE_ID_INTEL_82875_0 | 37 | #ifndef PCI_DEVICE_ID_INTEL_82875_0 |
30 | #define PCI_DEVICE_ID_INTEL_82875_0 0x2578 | 38 | #define PCI_DEVICE_ID_INTEL_82875_0 0x2578 |
31 | #endif /* PCI_DEVICE_ID_INTEL_82875_0 */ | 39 | #endif /* PCI_DEVICE_ID_INTEL_82875_0 */ |
@@ -254,7 +262,7 @@ static void i82875p_check(struct mem_ctl_info *mci) | |||
254 | { | 262 | { |
255 | struct i82875p_error_info info; | 263 | struct i82875p_error_info info; |
256 | 264 | ||
257 | debugf1("MC%d: " __FILE__ ": %s()\n", mci->mc_idx, __func__); | 265 | debugf1("MC%d: %s()\n", mci->mc_idx, __func__); |
258 | i82875p_get_error_info(mci, &info); | 266 | i82875p_get_error_info(mci, &info); |
259 | i82875p_process_error_info(mci, &info, 1); | 267 | i82875p_process_error_info(mci, &info, 1); |
260 | } | 268 | } |
@@ -279,7 +287,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
279 | u32 nr_chans; | 287 | u32 nr_chans; |
280 | u32 drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */ | 288 | u32 drc_ddim; /* DRAM Data Integrity Mode 0=none,2=edac */ |
281 | 289 | ||
282 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 290 | debugf0("%s()\n", __func__); |
283 | 291 | ||
284 | ovrfl_pdev = pci_find_device(PCI_VEND_DEV(INTEL, 82875_6), NULL); | 292 | ovrfl_pdev = pci_find_device(PCI_VEND_DEV(INTEL, 82875_6), NULL); |
285 | 293 | ||
@@ -298,16 +306,16 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
298 | } | 306 | } |
299 | #ifdef CONFIG_PROC_FS | 307 | #ifdef CONFIG_PROC_FS |
300 | if (!ovrfl_pdev->procent && pci_proc_attach_device(ovrfl_pdev)) { | 308 | if (!ovrfl_pdev->procent && pci_proc_attach_device(ovrfl_pdev)) { |
301 | printk(KERN_ERR "MC: " __FILE__ | 309 | i82875p_printk(KERN_ERR, |
302 | ": %s(): Failed to attach overflow device\n", | 310 | "%s(): Failed to attach overflow device\n", |
303 | __func__); | 311 | __func__); |
304 | goto fail; | 312 | goto fail; |
305 | } | 313 | } |
306 | #endif /* CONFIG_PROC_FS */ | 314 | #endif /* CONFIG_PROC_FS */ |
307 | if (pci_enable_device(ovrfl_pdev)) { | 315 | if (pci_enable_device(ovrfl_pdev)) { |
308 | printk(KERN_ERR "MC: " __FILE__ | 316 | i82875p_printk(KERN_ERR, |
309 | ": %s(): Failed to enable overflow device\n", | 317 | "%s(): Failed to enable overflow device\n", |
310 | __func__); | 318 | __func__); |
311 | goto fail; | 319 | goto fail; |
312 | } | 320 | } |
313 | 321 | ||
@@ -321,8 +329,8 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
321 | pci_resource_len(ovrfl_pdev, 0)); | 329 | pci_resource_len(ovrfl_pdev, 0)); |
322 | 330 | ||
323 | if (!ovrfl_window) { | 331 | if (!ovrfl_window) { |
324 | printk(KERN_ERR "MC: " __FILE__ | 332 | i82875p_printk(KERN_ERR, "%s(): Failed to ioremap bar6\n", |
325 | ": %s(): Failed to ioremap bar6\n", __func__); | 333 | __func__); |
326 | goto fail; | 334 | goto fail; |
327 | } | 335 | } |
328 | 336 | ||
@@ -340,7 +348,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
340 | goto fail; | 348 | goto fail; |
341 | } | 349 | } |
342 | 350 | ||
343 | debugf3("MC: " __FILE__ ": %s(): init mci\n", __func__); | 351 | debugf3("%s(): init mci\n", __func__); |
344 | 352 | ||
345 | mci->pdev = pdev; | 353 | mci->pdev = pdev; |
346 | mci->mtype_cap = MEM_FLAG_DDR; | 354 | mci->mtype_cap = MEM_FLAG_DDR; |
@@ -355,7 +363,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
355 | mci->edac_check = i82875p_check; | 363 | mci->edac_check = i82875p_check; |
356 | mci->ctl_page_to_phys = NULL; | 364 | mci->ctl_page_to_phys = NULL; |
357 | 365 | ||
358 | debugf3("MC: " __FILE__ ": %s(): init pvt\n", __func__); | 366 | debugf3("%s(): init pvt\n", __func__); |
359 | 367 | ||
360 | pvt = (struct i82875p_pvt *) mci->pvt_info; | 368 | pvt = (struct i82875p_pvt *) mci->pvt_info; |
361 | pvt->ovrfl_pdev = ovrfl_pdev; | 369 | pvt->ovrfl_pdev = ovrfl_pdev; |
@@ -374,8 +382,8 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
374 | 382 | ||
375 | value = readb(ovrfl_window + I82875P_DRB + index); | 383 | value = readb(ovrfl_window + I82875P_DRB + index); |
376 | cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT); | 384 | cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT); |
377 | debugf3("MC: " __FILE__ ": %s(): (%d) cumul_size 0x%x\n", | 385 | debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, |
378 | __func__, index, cumul_size); | 386 | cumul_size); |
379 | if (cumul_size == last_cumul_size) | 387 | if (cumul_size == last_cumul_size) |
380 | continue; /* not populated */ | 388 | continue; /* not populated */ |
381 | 389 | ||
@@ -393,13 +401,12 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx) | |||
393 | pci_write_bits16(mci->pdev, I82875P_ERRSTS, 0x0081, 0x0081); | 401 | pci_write_bits16(mci->pdev, I82875P_ERRSTS, 0x0081, 0x0081); |
394 | 402 | ||
395 | if (edac_mc_add_mc(mci)) { | 403 | if (edac_mc_add_mc(mci)) { |
396 | debugf3("MC: " __FILE__ | 404 | debugf3("%s(): failed edac_mc_add_mc()\n", __func__); |
397 | ": %s(): failed edac_mc_add_mc()\n", __func__); | ||
398 | goto fail; | 405 | goto fail; |
399 | } | 406 | } |
400 | 407 | ||
401 | /* get this far and it's successful */ | 408 | /* get this far and it's successful */ |
402 | debugf3("MC: " __FILE__ ": %s(): success\n", __func__); | 409 | debugf3("%s(): success\n", __func__); |
403 | return 0; | 410 | return 0; |
404 | 411 | ||
405 | fail: | 412 | fail: |
@@ -425,9 +432,9 @@ static int __devinit i82875p_init_one(struct pci_dev *pdev, | |||
425 | { | 432 | { |
426 | int rc; | 433 | int rc; |
427 | 434 | ||
428 | debugf0("MC: " __FILE__ ": %s()\n", __func__); | 435 | debugf0("%s()\n", __func__); |
429 | 436 | ||
430 | printk(KERN_INFO "i82875p init one\n"); | 437 | i82875p_printk(KERN_INFO, "i82875p init one\n"); |
431 | if(pci_enable_device(pdev) < 0) | 438 | if(pci_enable_device(pdev) < 0) |
432 | return -EIO; | 439 | return -EIO; |
433 | rc = i82875p_probe1(pdev, ent->driver_data); | 440 | rc = i82875p_probe1(pdev, ent->driver_data); |
@@ -442,7 +449,7 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev) | |||
442 | struct mem_ctl_info *mci; | 449 | struct mem_ctl_info *mci; |
443 | struct i82875p_pvt *pvt = NULL; | 450 | struct i82875p_pvt *pvt = NULL; |
444 | 451 | ||
445 | debugf0(__FILE__ ": %s()\n", __func__); | 452 | debugf0("%s()\n", __func__); |
446 | 453 | ||
447 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) | 454 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) |
448 | return; | 455 | return; |
@@ -487,7 +494,7 @@ static int __init i82875p_init(void) | |||
487 | { | 494 | { |
488 | int pci_rc; | 495 | int pci_rc; |
489 | 496 | ||
490 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 497 | debugf3("%s()\n", __func__); |
491 | pci_rc = pci_register_driver(&i82875p_driver); | 498 | pci_rc = pci_register_driver(&i82875p_driver); |
492 | if (pci_rc < 0) | 499 | if (pci_rc < 0) |
493 | return pci_rc; | 500 | return pci_rc; |
@@ -513,7 +520,7 @@ static int __init i82875p_init(void) | |||
513 | 520 | ||
514 | static void __exit i82875p_exit(void) | 521 | static void __exit i82875p_exit(void) |
515 | { | 522 | { |
516 | debugf3("MC: " __FILE__ ": %s()\n", __func__); | 523 | debugf3("%s()\n", __func__); |
517 | 524 | ||
518 | pci_unregister_driver(&i82875p_driver); | 525 | pci_unregister_driver(&i82875p_driver); |
519 | if (!i82875p_registered) { | 526 | if (!i82875p_registered) { |