summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-12-18 20:10:19 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-12-28 13:01:36 -0500
commit8fb6a8562ec033d2d1319f91377cd1782f593979 (patch)
tree07b7fe61cd9763ddf5cee2934994841fa330b90a /drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
parentf19f22fcc8ef21b363b873c499cbd2e690af29f8 (diff)
gpu: nvgpu: gv11b: Report LTC errors per slice
Add support to report ltc ecc errors per slice (1) use new logic to detect subunits (2) store size of array and check before comparison to prevent out of bounds derefencing (3) use new hashing to prevent collisions or entries with permuted names bug 2037425 Change-Id: I63b9f0df43b9dceddc1bae17924c4723072f569e Signed-off-by: David Nieto <dmartineznie@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1620854 GVS: Gerrit_Virtual_Submit Reviewed-by: Chris Dragan <kdragan@nvidia.com> Tested-by: Chris Dragan <kdragan@nvidia.com> Reviewed-by: Nirav Patel <nipatel@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
index 78461b5d..4f4381a5 100644
--- a/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
+++ b/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
@@ -334,112 +334,144 @@ void gr_gv11b_create_sysfs(struct gk20a *g)
334 334
335 error |= gp10b_ecc_stat_create(dev, 335 error |= gp10b_ecc_stat_create(dev,
336 g->ltc_count, 336 g->ltc_count,
337 0,
337 "ltc", 338 "ltc",
339 NULL,
338 "l2_cache_uncorrected_err_count", 340 "l2_cache_uncorrected_err_count",
339 &g->ecc.ltc.t19x.l2_cache_uncorrected_err_count, 341 &g->ecc.ltc.t19x.l2_cache_uncorrected_err_count,
340 &dev_attr_l2_cache_ecc_uncorrected_err_count_array); 342 &dev_attr_l2_cache_ecc_uncorrected_err_count_array);
341 343
342 error |= gp10b_ecc_stat_create(dev, 344 error |= gp10b_ecc_stat_create(dev,
343 g->ltc_count, 345 g->ltc_count,
346 0,
344 "ltc", 347 "ltc",
348 NULL,
345 "l2_cache_corrected_err_count", 349 "l2_cache_corrected_err_count",
346 &g->ecc.ltc.t19x.l2_cache_corrected_err_count, 350 &g->ecc.ltc.t19x.l2_cache_corrected_err_count,
347 &dev_attr_l2_cache_ecc_corrected_err_count_array); 351 &dev_attr_l2_cache_ecc_corrected_err_count_array);
348 352
349 error |= gp10b_ecc_stat_create(dev, 353 error |= gp10b_ecc_stat_create(dev,
350 1, 354 1,
355 0,
351 "gpc", 356 "gpc",
357 NULL,
352 "fecs_ecc_uncorrected_err_count", 358 "fecs_ecc_uncorrected_err_count",
353 &g->ecc.gr.t19x.fecs_uncorrected_err_count, 359 &g->ecc.gr.t19x.fecs_uncorrected_err_count,
354 &dev_attr_fecs_ecc_uncorrected_err_count_array); 360 &dev_attr_fecs_ecc_uncorrected_err_count_array);
355 361
356 error |= gp10b_ecc_stat_create(dev, 362 error |= gp10b_ecc_stat_create(dev,
357 1, 363 1,
364 0,
358 "gpc", 365 "gpc",
366 NULL,
359 "fecs_ecc_corrected_err_count", 367 "fecs_ecc_corrected_err_count",
360 &g->ecc.gr.t19x.fecs_corrected_err_count, 368 &g->ecc.gr.t19x.fecs_corrected_err_count,
361 &dev_attr_fecs_ecc_corrected_err_count_array); 369 &dev_attr_fecs_ecc_corrected_err_count_array);
362 370
363 error |= gp10b_ecc_stat_create(dev, 371 error |= gp10b_ecc_stat_create(dev,
364 g->gr.gpc_count, 372 g->gr.gpc_count,
373 0,
365 "gpc", 374 "gpc",
375 NULL,
366 "gpccs_ecc_uncorrected_err_count", 376 "gpccs_ecc_uncorrected_err_count",
367 &g->ecc.gr.t19x.gpccs_uncorrected_err_count, 377 &g->ecc.gr.t19x.gpccs_uncorrected_err_count,
368 &dev_attr_gpccs_ecc_uncorrected_err_count_array); 378 &dev_attr_gpccs_ecc_uncorrected_err_count_array);
369 379
370 error |= gp10b_ecc_stat_create(dev, 380 error |= gp10b_ecc_stat_create(dev,
371 g->gr.gpc_count, 381 g->gr.gpc_count,
382 0,
372 "gpc", 383 "gpc",
384 NULL,
373 "gpccs_ecc_corrected_err_count", 385 "gpccs_ecc_corrected_err_count",
374 &g->ecc.gr.t19x.gpccs_corrected_err_count, 386 &g->ecc.gr.t19x.gpccs_corrected_err_count,
375 &dev_attr_gpccs_ecc_corrected_err_count_array); 387 &dev_attr_gpccs_ecc_corrected_err_count_array);
376 388
377 error |= gp10b_ecc_stat_create(dev, 389 error |= gp10b_ecc_stat_create(dev,
378 g->gr.gpc_count, 390 g->gr.gpc_count,
391 0,
379 "gpc", 392 "gpc",
393 NULL,
380 "mmu_l1tlb_ecc_uncorrected_err_count", 394 "mmu_l1tlb_ecc_uncorrected_err_count",
381 &g->ecc.gr.t19x.mmu_l1tlb_uncorrected_err_count, 395 &g->ecc.gr.t19x.mmu_l1tlb_uncorrected_err_count,
382 &dev_attr_mmu_l1tlb_ecc_uncorrected_err_count_array); 396 &dev_attr_mmu_l1tlb_ecc_uncorrected_err_count_array);
383 397
384 error |= gp10b_ecc_stat_create(dev, 398 error |= gp10b_ecc_stat_create(dev,
385 g->gr.gpc_count, 399 g->gr.gpc_count,
400 0,
386 "gpc", 401 "gpc",
402 NULL,
387 "mmu_l1tlb_ecc_corrected_err_count", 403 "mmu_l1tlb_ecc_corrected_err_count",
388 &g->ecc.gr.t19x.mmu_l1tlb_corrected_err_count, 404 &g->ecc.gr.t19x.mmu_l1tlb_corrected_err_count,
389 &dev_attr_mmu_l1tlb_ecc_corrected_err_count_array); 405 &dev_attr_mmu_l1tlb_ecc_corrected_err_count_array);
390 406
391 error |= gp10b_ecc_stat_create(dev, 407 error |= gp10b_ecc_stat_create(dev,
392 1, 408 1,
409 0,
393 "eng", 410 "eng",
411 NULL,
394 "mmu_l2tlb_ecc_uncorrected_err_count", 412 "mmu_l2tlb_ecc_uncorrected_err_count",
395 &g->ecc.eng.t19x.mmu_l2tlb_uncorrected_err_count, 413 &g->ecc.eng.t19x.mmu_l2tlb_uncorrected_err_count,
396 &dev_attr_mmu_l2tlb_ecc_uncorrected_err_count_array); 414 &dev_attr_mmu_l2tlb_ecc_uncorrected_err_count_array);
397 415
398 error |= gp10b_ecc_stat_create(dev, 416 error |= gp10b_ecc_stat_create(dev,
399 1, 417 1,
418 0,
400 "eng", 419 "eng",
420 NULL,
401 "mmu_l2tlb_ecc_corrected_err_count", 421 "mmu_l2tlb_ecc_corrected_err_count",
402 &g->ecc.eng.t19x.mmu_l2tlb_corrected_err_count, 422 &g->ecc.eng.t19x.mmu_l2tlb_corrected_err_count,
403 &dev_attr_mmu_l2tlb_ecc_corrected_err_count_array); 423 &dev_attr_mmu_l2tlb_ecc_corrected_err_count_array);
404 424
405 error |= gp10b_ecc_stat_create(dev, 425 error |= gp10b_ecc_stat_create(dev,
406 1, 426 1,
427 0,
407 "eng", 428 "eng",
429 NULL,
408 "mmu_hubtlb_ecc_uncorrected_err_count", 430 "mmu_hubtlb_ecc_uncorrected_err_count",
409 &g->ecc.eng.t19x.mmu_hubtlb_uncorrected_err_count, 431 &g->ecc.eng.t19x.mmu_hubtlb_uncorrected_err_count,
410 &dev_attr_mmu_hubtlb_ecc_uncorrected_err_count_array); 432 &dev_attr_mmu_hubtlb_ecc_uncorrected_err_count_array);
411 433
412 error |= gp10b_ecc_stat_create(dev, 434 error |= gp10b_ecc_stat_create(dev,
413 1, 435 1,
436 0,
414 "eng", 437 "eng",
438 NULL,
415 "mmu_hubtlb_ecc_corrected_err_count", 439 "mmu_hubtlb_ecc_corrected_err_count",
416 &g->ecc.eng.t19x.mmu_hubtlb_corrected_err_count, 440 &g->ecc.eng.t19x.mmu_hubtlb_corrected_err_count,
417 &dev_attr_mmu_hubtlb_ecc_corrected_err_count_array); 441 &dev_attr_mmu_hubtlb_ecc_corrected_err_count_array);
418 442
419 error |= gp10b_ecc_stat_create(dev, 443 error |= gp10b_ecc_stat_create(dev,
420 1, 444 1,
445 0,
421 "eng", 446 "eng",
447 NULL,
422 "mmu_fillunit_ecc_uncorrected_err_count", 448 "mmu_fillunit_ecc_uncorrected_err_count",
423 &g->ecc.eng.t19x.mmu_fillunit_uncorrected_err_count, 449 &g->ecc.eng.t19x.mmu_fillunit_uncorrected_err_count,
424 &dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array); 450 &dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array);
425 451
426 error |= gp10b_ecc_stat_create(dev, 452 error |= gp10b_ecc_stat_create(dev,
427 1, 453 1,
454 0,
428 "eng", 455 "eng",
456 NULL,
429 "mmu_fillunit_ecc_corrected_err_count", 457 "mmu_fillunit_ecc_corrected_err_count",
430 &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count, 458 &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count,
431 &dev_attr_mmu_fillunit_ecc_corrected_err_count_array); 459 &dev_attr_mmu_fillunit_ecc_corrected_err_count_array);
432 460
433 error |= gp10b_ecc_stat_create(dev, 461 error |= gp10b_ecc_stat_create(dev,
434 1, 462 1,
463 0,
435 "eng", 464 "eng",
465 NULL,
436 "pmu_ecc_uncorrected_err_count", 466 "pmu_ecc_uncorrected_err_count",
437 &g->ecc.eng.t19x.pmu_uncorrected_err_count, 467 &g->ecc.eng.t19x.pmu_uncorrected_err_count,
438 &dev_attr_pmu_ecc_uncorrected_err_count_array); 468 &dev_attr_pmu_ecc_uncorrected_err_count_array);
439 469
440 error |= gp10b_ecc_stat_create(dev, 470 error |= gp10b_ecc_stat_create(dev,
441 1, 471 1,
472 0,
442 "eng", 473 "eng",
474 NULL,
443 "pmu_ecc_corrected_err_count", 475 "pmu_ecc_corrected_err_count",
444 &g->ecc.eng.t19x.pmu_corrected_err_count, 476 &g->ecc.eng.t19x.pmu_corrected_err_count,
445 &dev_attr_pmu_ecc_corrected_err_count_array); 477 &dev_attr_pmu_ecc_corrected_err_count_array);