xref: /linux/drivers/gpu/drm/xe/xe_gt_stats.c (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1acc4e41eSNirmoy Das // SPDX-License-Identifier: MIT
2acc4e41eSNirmoy Das /*
3acc4e41eSNirmoy Das  * Copyright © 2024 Intel Corporation
4acc4e41eSNirmoy Das  */
5acc4e41eSNirmoy Das 
6acc4e41eSNirmoy Das #include <linux/atomic.h>
7acc4e41eSNirmoy Das 
8acc4e41eSNirmoy Das #include <drm/drm_print.h>
9acc4e41eSNirmoy Das 
10acc4e41eSNirmoy Das #include "xe_gt.h"
11acc4e41eSNirmoy Das #include "xe_gt_stats.h"
12acc4e41eSNirmoy Das 
13acc4e41eSNirmoy Das /**
14acc4e41eSNirmoy Das  * xe_gt_stats_incr - Increments the specified stats counter
156acea03fSLucas De Marchi  * @gt: GT structure
16acc4e41eSNirmoy Das  * @id: xe_gt_stats_id type id that needs to be incremented
17acc4e41eSNirmoy Das  * @incr: value to be incremented with
18acc4e41eSNirmoy Das  *
19acc4e41eSNirmoy Das  * Increments the specified stats counter.
20acc4e41eSNirmoy Das  */
xe_gt_stats_incr(struct xe_gt * gt,const enum xe_gt_stats_id id,int incr)21acc4e41eSNirmoy Das void xe_gt_stats_incr(struct xe_gt *gt, const enum xe_gt_stats_id id, int incr)
22acc4e41eSNirmoy Das {
23acc4e41eSNirmoy Das 	if (id >= __XE_GT_STATS_NUM_IDS)
24acc4e41eSNirmoy Das 		return;
25acc4e41eSNirmoy Das 
264f109b06SFrancois Dugast 	atomic64_add(incr, &gt->stats.counters[id]);
27acc4e41eSNirmoy Das }
28acc4e41eSNirmoy Das 
29acc4e41eSNirmoy Das static const char *const stat_description[__XE_GT_STATS_NUM_IDS] = {
30*80bcbdfcSFrancois Dugast 	"svm_pagefault_count",
3139fa14e5SNirmoy Das 	"tlb_inval_count",
325b380838SFrancois Dugast 	"vma_pagefault_count",
33278d4f42SFrancois Dugast 	"vma_pagefault_kb",
34acc4e41eSNirmoy Das };
35acc4e41eSNirmoy Das 
36acc4e41eSNirmoy Das /**
37acc4e41eSNirmoy Das  * xe_gt_stats_print_info - Print the GT stats
386acea03fSLucas De Marchi  * @gt: GT structure
39acc4e41eSNirmoy Das  * @p: drm_printer where it will be printed out.
40acc4e41eSNirmoy Das  *
41acc4e41eSNirmoy Das  * This prints out all the available GT stats.
42acc4e41eSNirmoy Das  */
xe_gt_stats_print_info(struct xe_gt * gt,struct drm_printer * p)43acc4e41eSNirmoy Das int xe_gt_stats_print_info(struct xe_gt *gt, struct drm_printer *p)
44acc4e41eSNirmoy Das {
45acc4e41eSNirmoy Das 	enum xe_gt_stats_id id;
46acc4e41eSNirmoy Das 
47acc4e41eSNirmoy Das 	for (id = 0; id < __XE_GT_STATS_NUM_IDS; ++id)
484f109b06SFrancois Dugast 		drm_printf(p, "%s: %lld\n", stat_description[id],
494f109b06SFrancois Dugast 			   atomic64_read(&gt->stats.counters[id]));
50acc4e41eSNirmoy Das 
51acc4e41eSNirmoy Das 	return 0;
52acc4e41eSNirmoy Das }
53