1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/export.h>
3 #include <linux/types.h>
4 #include <linux/bits.h>
8 not_visible(struct kobject
*kobj
, struct attribute
*attr
, int i
)
14 perf_msr_probe(struct perf_msr
*msr
, int cnt
, bool zero
, void *data
)
16 unsigned long avail
= 0;
20 if (cnt
>= BITS_PER_LONG
)
23 for (bit
= 0; bit
< cnt
; bit
++) {
24 if (!msr
[bit
].no_check
) {
25 struct attribute_group
*grp
= msr
[bit
].grp
;
27 grp
->is_visible
= not_visible
;
29 if (msr
[bit
].test
&& !msr
[bit
].test(bit
, data
))
31 /* Virt sucks; you cannot tell if a R/O MSR is present :/ */
32 if (rdmsrl_safe(msr
[bit
].msr
, &val
))
34 /* Disable zero counters if requested. */
38 grp
->is_visible
= NULL
;
45 EXPORT_SYMBOL_GPL(perf_msr_probe
);