loongarch_pmu
static struct loongarch_pmu loongarch_pmu;
for (i = 0; i < loongarch_pmu.num_counters; i++) {
WARN_ON(idx < 0 || idx >= loongarch_pmu.num_counters);
WARN_ON(idx < 0 || idx >= loongarch_pmu.num_counters);
if (left > loongarch_pmu.max_period) {
left = loongarch_pmu.max_period;
local64_set(&hwc->prev_count, loongarch_pmu.overflow - left);
loongarch_pmu.write_counter(idx, loongarch_pmu.overflow - left);
new_raw_count = loongarch_pmu.read_counter(idx);
WARN_ON(idx < 0 || idx >= loongarch_pmu.num_counters);
free_irq(get_percpu_irq(INT_PCOV), &loongarch_pmu);
for (n = 0; n < loongarch_pmu.num_counters; n++) {
counter = loongarch_pmu.read_counter(n);
if (counter & loongarch_pmu.overflow) {
r = request_irq(irq, pmu_handle_irq, flags, "Perf_PMU", &loongarch_pmu);
pev = &(*loongarch_pmu.general_event_map)[idx];
pev = &((*loongarch_pmu.cache_event_map)
int counters = loongarch_pmu.num_counters;
loongarch_pmu.write_counter(n, 0);
pev = loongarch_pmu.map_raw_event(event->attr.config);
hwc->sample_period = loongarch_pmu.max_period;
int ctr = loongarch_pmu.num_counters;
int ctr = loongarch_pmu.num_counters;
loongarch_pmu.num_counters = counters;
loongarch_pmu.max_period = (1ULL << 63) - 1;
loongarch_pmu.valid_count = (1ULL << 63) - 1;
loongarch_pmu.overflow = 1ULL << 63;
loongarch_pmu.name = "loongarch/loongson64";
loongarch_pmu.read_counter = loongarch_pmu_read_counter;
loongarch_pmu.write_counter = loongarch_pmu_write_counter;
loongarch_pmu.map_raw_event = loongarch_pmu_map_raw_event;
loongarch_pmu.general_event_map = &loongson_event_map;
loongarch_pmu.cache_event_map = &loongson_cache_map;
loongarch_pmu.name, counters, bits);