Lines Matching +full:event +full:- +full:name
2 * SPDX-License-Identifier: MIT
4 * Copyright © 2017-2018 Intel Corporation
32 static unsigned int i915_pmu_target_cpu = -1;
34 static struct i915_pmu *event_to_pmu(struct perf_event *event) in event_to_pmu() argument
36 return container_of(event->pmu, struct i915_pmu, base); in event_to_pmu()
49 static u8 engine_event_sample(struct perf_event *event) in engine_event_sample() argument
51 return engine_config_sample(event->attr.config); in engine_event_sample()
54 static u8 engine_event_class(struct perf_event *event) in engine_event_class() argument
56 return (event->attr.config >> I915_PMU_CLASS_SHIFT) & 0xff; in engine_event_class()
59 static u8 engine_event_instance(struct perf_event *event) in engine_event_instance() argument
61 return (event->attr.config >> I915_PMU_SAMPLE_BITS) & 0xff; in engine_event_instance()
98 return -1; in other_bit()
121 enable)) - 1); in config_mask()
125 enable)) - 1); in config_mask()
130 static bool is_engine_event(struct perf_event *event) in is_engine_event() argument
132 return is_engine_config(event->attr.config); in is_engine_event()
135 static unsigned int event_bit(struct perf_event *event) in event_bit() argument
137 return config_bit(event->attr.config); in event_bit()
162 enable = pmu->enable; in pmu_needs_timer()
174 if (i915->caps.scheduler & I915_SCHEDULER_CAP_ENGINE_BUSY_STATS) in pmu_needs_timer()
185 struct drm_i915_private *i915 = gt->i915; in __get_rc6()
188 val = intel_rc6_residency_ns(>->rc6, INTEL_RC6_RES_RC6); in __get_rc6()
191 val += intel_rc6_residency_ns(>->rc6, INTEL_RC6_RES_RC6p); in __get_rc6()
194 val += intel_rc6_residency_ns(>->rc6, INTEL_RC6_RES_RC6pp); in __get_rc6()
206 return pmu->sample[gt_id][sample].cur; in read_sample()
212 pmu->sample[gt_id][sample].cur = val; in store_sample()
218 pmu->sample[gt_id][sample].cur += mul_u32_u32(val, mul); in add_sample_mult()
223 struct drm_i915_private *i915 = gt->i915; in get_rc6()
224 const unsigned int gt_id = gt->info.id; in get_rc6()
225 struct i915_pmu *pmu = &i915->pmu; in get_rc6()
236 spin_lock_irqsave(&pmu->lock, flags); in get_rc6()
248 val = ktime_since_raw(pmu->sleep_last[gt_id]); in get_rc6()
257 spin_unlock_irqrestore(&pmu->lock, flags); in get_rc6()
271 with_intel_runtime_pm(gt->uncore->rpm, wakeref) { in init_rc6()
277 pmu->sleep_last[i] = ktime_get_raw(); in init_rc6()
284 struct i915_pmu *pmu = >->i915->pmu; in park_rc6()
286 store_sample(pmu, gt->info.id, __I915_SAMPLE_RC6, __get_rc6(gt)); in park_rc6()
287 pmu->sleep_last[gt->info.id] = ktime_get_raw(); in park_rc6()
292 if (!pmu->timer_enabled && pmu_needs_timer(pmu)) { in __i915_pmu_maybe_start_timer()
293 pmu->timer_enabled = true; in __i915_pmu_maybe_start_timer()
294 pmu->timer_last = ktime_get(); in __i915_pmu_maybe_start_timer()
295 hrtimer_start_range_ns(&pmu->timer, in __i915_pmu_maybe_start_timer()
303 struct i915_pmu *pmu = >->i915->pmu; in i915_pmu_gt_parked()
305 if (!pmu->registered) in i915_pmu_gt_parked()
308 spin_lock_irq(&pmu->lock); in i915_pmu_gt_parked()
316 pmu->unparked &= ~BIT(gt->info.id); in i915_pmu_gt_parked()
317 if (pmu->unparked == 0) in i915_pmu_gt_parked()
318 pmu->timer_enabled = false; in i915_pmu_gt_parked()
320 spin_unlock_irq(&pmu->lock); in i915_pmu_gt_parked()
325 struct i915_pmu *pmu = >->i915->pmu; in i915_pmu_gt_unparked()
327 if (!pmu->registered) in i915_pmu_gt_unparked()
330 spin_lock_irq(&pmu->lock); in i915_pmu_gt_unparked()
333 * Re-enable sampling timer when GPU goes active. in i915_pmu_gt_unparked()
335 if (pmu->unparked == 0) in i915_pmu_gt_unparked()
338 pmu->unparked |= BIT(gt->info.id); in i915_pmu_gt_unparked()
340 spin_unlock_irq(&pmu->lock); in i915_pmu_gt_unparked()
346 sample->cur += val; in add_sample()
361 struct intel_engine_pmu *pmu = &engine->pmu; in gen3_engine_sample()
370 add_sample(&pmu->sample[I915_SAMPLE_WAIT], period_ns); in gen3_engine_sample()
372 add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns); in gen3_engine_sample()
379 * While waiting on a semaphore or event, MI_MODE reports the in gen3_engine_sample()
391 add_sample(&pmu->sample[I915_SAMPLE_BUSY], period_ns); in gen3_engine_sample()
396 struct intel_engine_pmu *pmu = &engine->pmu; in gen2_engine_sample()
404 add_sample(&pmu->sample[I915_SAMPLE_WAIT], period_ns); in gen2_engine_sample()
408 add_sample(&pmu->sample[I915_SAMPLE_BUSY], period_ns); in gen2_engine_sample()
413 if (GRAPHICS_VER(engine->i915) >= 3) in engine_sample()
422 struct drm_i915_private *i915 = gt->i915; in engines_sample()
427 if ((i915->pmu.enable & ENGINE_SAMPLE_MASK) == 0) in engines_sample()
434 if (!engine->pmu.enable) in engines_sample()
441 spin_lock_irqsave(&engine->uncore->lock, flags); in engines_sample()
443 spin_unlock_irqrestore(&engine->uncore->lock, flags); in engines_sample()
455 return pmu->enable & in frequency_sampling_enabled()
463 struct drm_i915_private *i915 = gt->i915; in frequency_sample()
464 const unsigned int gt_id = gt->info.id; in frequency_sample()
465 struct i915_pmu *pmu = &i915->pmu; in frequency_sample()
466 struct intel_rps *rps = >->rps; in frequency_sample()
477 if (pmu->enable & config_mask(__I915_PMU_ACTUAL_FREQUENCY(gt_id))) { in frequency_sample()
485 * mmio power well, then it will return 0 -- in which in frequency_sample()
491 val = intel_gpu_freq(rps, rps->cur_freq); in frequency_sample()
497 if (pmu->enable & config_mask(__I915_PMU_REQUESTED_FREQUENCY(gt_id))) { in frequency_sample()
515 if (!READ_ONCE(pmu->timer_enabled)) in i915_sample()
519 period_ns = ktime_to_ns(ktime_sub(now, pmu->timer_last)); in i915_sample()
520 pmu->timer_last = now; in i915_sample()
525 * grabbing the forcewake. However the potential error from timer call- in i915_sample()
530 if (!(pmu->unparked & BIT(i))) in i915_sample()
542 static void i915_pmu_event_destroy(struct perf_event *event) in i915_pmu_event_destroy() argument
544 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_destroy()
547 drm_WARN_ON(&i915->drm, event->parent); in i915_pmu_event_destroy()
549 drm_dev_put(&i915->drm); in i915_pmu_event_destroy()
561 if (GRAPHICS_VER(engine->i915) < 6) in engine_event_status()
562 return -ENODEV; in engine_event_status()
565 return -ENOENT; in engine_event_status()
580 return -ENOENT; in config_status()
586 return -ENODEV; in config_status()
590 return -ENODEV; in config_status()
594 return -ENOENT; in config_status()
597 if (!gt->rc6.supported) in config_status()
598 return -ENODEV; in config_status()
603 return -ENOENT; in config_status()
609 static int engine_event_init(struct perf_event *event) in engine_event_init() argument
611 struct i915_pmu *pmu = event_to_pmu(event); in engine_event_init()
615 engine = intel_engine_lookup_user(i915, engine_event_class(event), in engine_event_init()
616 engine_event_instance(event)); in engine_event_init()
618 return -ENODEV; in engine_event_init()
620 return engine_event_status(engine, engine_event_sample(event)); in engine_event_init()
623 static int i915_pmu_event_init(struct perf_event *event) in i915_pmu_event_init() argument
625 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_init()
629 if (!pmu->registered) in i915_pmu_event_init()
630 return -ENODEV; in i915_pmu_event_init()
632 if (event->attr.type != event->pmu->type) in i915_pmu_event_init()
633 return -ENOENT; in i915_pmu_event_init()
636 if (event->attr.sample_period) /* no sampling */ in i915_pmu_event_init()
637 return -EINVAL; in i915_pmu_event_init()
639 if (has_branch_stack(event)) in i915_pmu_event_init()
640 return -EOPNOTSUPP; in i915_pmu_event_init()
642 if (event->cpu < 0) in i915_pmu_event_init()
643 return -EINVAL; in i915_pmu_event_init()
646 if (!cpumask_test_cpu(event->cpu, &i915_pmu_cpumask)) in i915_pmu_event_init()
647 return -EINVAL; in i915_pmu_event_init()
649 if (is_engine_event(event)) in i915_pmu_event_init()
650 ret = engine_event_init(event); in i915_pmu_event_init()
652 ret = config_status(i915, event->attr.config); in i915_pmu_event_init()
656 if (!event->parent) { in i915_pmu_event_init()
657 drm_dev_get(&i915->drm); in i915_pmu_event_init()
658 event->destroy = i915_pmu_event_destroy; in i915_pmu_event_init()
664 static u64 __i915_pmu_event_read(struct perf_event *event) in __i915_pmu_event_read() argument
666 struct i915_pmu *pmu = event_to_pmu(event); in __i915_pmu_event_read()
670 if (is_engine_event(event)) { in __i915_pmu_event_read()
671 u8 sample = engine_event_sample(event); in __i915_pmu_event_read()
675 engine_event_class(event), in __i915_pmu_event_read()
676 engine_event_instance(event)); in __i915_pmu_event_read()
678 if (drm_WARN_ON_ONCE(&i915->drm, !engine)) { in __i915_pmu_event_read()
687 val = engine->pmu.sample[sample].cur; in __i915_pmu_event_read()
690 const unsigned int gt_id = config_gt_id(event->attr.config); in __i915_pmu_event_read()
691 const u64 config = config_counter(event->attr.config); in __i915_pmu_event_read()
707 val = READ_ONCE(pmu->irq_count); in __i915_pmu_event_read()
710 val = get_rc6(i915->gt[gt_id]); in __i915_pmu_event_read()
721 static void i915_pmu_event_read(struct perf_event *event) in i915_pmu_event_read() argument
723 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_read()
724 struct hw_perf_event *hwc = &event->hw; in i915_pmu_event_read()
727 if (!pmu->registered) { in i915_pmu_event_read()
728 event->hw.state = PERF_HES_STOPPED; in i915_pmu_event_read()
732 prev = local64_read(&hwc->prev_count); in i915_pmu_event_read()
734 new = __i915_pmu_event_read(event); in i915_pmu_event_read()
735 } while (!local64_try_cmpxchg(&hwc->prev_count, &prev, new)); in i915_pmu_event_read()
737 local64_add(new - prev, &event->count); in i915_pmu_event_read()
740 static void i915_pmu_enable(struct perf_event *event) in i915_pmu_enable() argument
742 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_enable()
744 const unsigned int bit = event_bit(event); in i915_pmu_enable()
747 if (bit == -1) in i915_pmu_enable()
750 spin_lock_irqsave(&pmu->lock, flags); in i915_pmu_enable()
754 * the event reference counter. in i915_pmu_enable()
756 BUILD_BUG_ON(ARRAY_SIZE(pmu->enable_count) != I915_PMU_MASK_BITS); in i915_pmu_enable()
757 GEM_BUG_ON(bit >= ARRAY_SIZE(pmu->enable_count)); in i915_pmu_enable()
758 GEM_BUG_ON(pmu->enable_count[bit] == ~0); in i915_pmu_enable()
760 pmu->enable |= BIT(bit); in i915_pmu_enable()
761 pmu->enable_count[bit]++; in i915_pmu_enable()
769 * For per-engine events the bitmask and reference counting in i915_pmu_enable()
772 if (is_engine_event(event)) { in i915_pmu_enable()
773 u8 sample = engine_event_sample(event); in i915_pmu_enable()
777 engine_event_class(event), in i915_pmu_enable()
778 engine_event_instance(event)); in i915_pmu_enable()
780 BUILD_BUG_ON(ARRAY_SIZE(engine->pmu.enable_count) != in i915_pmu_enable()
782 BUILD_BUG_ON(ARRAY_SIZE(engine->pmu.sample) != in i915_pmu_enable()
784 GEM_BUG_ON(sample >= ARRAY_SIZE(engine->pmu.enable_count)); in i915_pmu_enable()
785 GEM_BUG_ON(sample >= ARRAY_SIZE(engine->pmu.sample)); in i915_pmu_enable()
786 GEM_BUG_ON(engine->pmu.enable_count[sample] == ~0); in i915_pmu_enable()
788 engine->pmu.enable |= BIT(sample); in i915_pmu_enable()
789 engine->pmu.enable_count[sample]++; in i915_pmu_enable()
792 spin_unlock_irqrestore(&pmu->lock, flags); in i915_pmu_enable()
797 * for all listeners. Even when the event was already enabled and has in i915_pmu_enable()
798 * an existing non-zero value. in i915_pmu_enable()
800 local64_set(&event->hw.prev_count, __i915_pmu_event_read(event)); in i915_pmu_enable()
803 static void i915_pmu_disable(struct perf_event *event) in i915_pmu_disable() argument
805 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_disable()
807 const unsigned int bit = event_bit(event); in i915_pmu_disable()
810 if (bit == -1) in i915_pmu_disable()
813 spin_lock_irqsave(&pmu->lock, flags); in i915_pmu_disable()
815 if (is_engine_event(event)) { in i915_pmu_disable()
816 u8 sample = engine_event_sample(event); in i915_pmu_disable()
820 engine_event_class(event), in i915_pmu_disable()
821 engine_event_instance(event)); in i915_pmu_disable()
823 GEM_BUG_ON(sample >= ARRAY_SIZE(engine->pmu.enable_count)); in i915_pmu_disable()
824 GEM_BUG_ON(sample >= ARRAY_SIZE(engine->pmu.sample)); in i915_pmu_disable()
825 GEM_BUG_ON(engine->pmu.enable_count[sample] == 0); in i915_pmu_disable()
829 * bitmask when the last listener on an event goes away. in i915_pmu_disable()
831 if (--engine->pmu.enable_count[sample] == 0) in i915_pmu_disable()
832 engine->pmu.enable &= ~BIT(sample); in i915_pmu_disable()
835 GEM_BUG_ON(bit >= ARRAY_SIZE(pmu->enable_count)); in i915_pmu_disable()
836 GEM_BUG_ON(pmu->enable_count[bit] == 0); in i915_pmu_disable()
839 * bitmask when the last listener on an event goes away. in i915_pmu_disable()
841 if (--pmu->enable_count[bit] == 0) { in i915_pmu_disable()
842 pmu->enable &= ~BIT(bit); in i915_pmu_disable()
843 pmu->timer_enabled &= pmu_needs_timer(pmu); in i915_pmu_disable()
846 spin_unlock_irqrestore(&pmu->lock, flags); in i915_pmu_disable()
849 static void i915_pmu_event_start(struct perf_event *event, int flags) in i915_pmu_event_start() argument
851 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_start()
853 if (!pmu->registered) in i915_pmu_event_start()
856 i915_pmu_enable(event); in i915_pmu_event_start()
857 event->hw.state = 0; in i915_pmu_event_start()
860 static void i915_pmu_event_stop(struct perf_event *event, int flags) in i915_pmu_event_stop() argument
862 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_stop()
864 if (!pmu->registered) in i915_pmu_event_stop()
868 i915_pmu_event_read(event); in i915_pmu_event_stop()
870 i915_pmu_disable(event); in i915_pmu_event_stop()
873 event->hw.state = PERF_HES_STOPPED; in i915_pmu_event_stop()
876 static int i915_pmu_event_add(struct perf_event *event, int flags) in i915_pmu_event_add() argument
878 struct i915_pmu *pmu = event_to_pmu(event); in i915_pmu_event_add()
880 if (!pmu->registered) in i915_pmu_event_add()
881 return -ENODEV; in i915_pmu_event_add()
884 i915_pmu_event_start(event, flags); in i915_pmu_event_add()
889 static void i915_pmu_event_del(struct perf_event *event, int flags) in i915_pmu_event_del() argument
891 i915_pmu_event_stop(event, PERF_EF_UPDATE); in i915_pmu_event_del()
894 static int i915_pmu_event_event_idx(struct perf_event *event) in i915_pmu_event_event_idx() argument
910 return sprintf(buf, "%s\n", eattr->str); in i915_pmu_format_show()
920 I915_PMU_FORMAT_ATTR(i915_eventid, "config:0-20"),
925 .name = "format",
940 return sprintf(buf, "config=0x%lx\n", eattr->val); in i915_pmu_event_show()
963 .name = (__name), \
971 .name = (__name), \
979 .name = (__name), \
983 add_i915_attr(struct i915_ext_attribute *attr, const char *name, u64 config) in add_i915_attr() argument
985 sysfs_attr_init(&attr->attr.attr); in add_i915_attr()
986 attr->attr.attr.name = name; in add_i915_attr()
987 attr->attr.attr.mode = 0444; in add_i915_attr()
988 attr->attr.show = i915_pmu_event_show; in add_i915_attr()
989 attr->val = config; in add_i915_attr()
995 add_pmu_attr(struct perf_pmu_events_attr *attr, const char *name, in add_pmu_attr() argument
998 sysfs_attr_init(&attr->attr.attr); in add_pmu_attr()
999 attr->attr.attr.name = name; in add_pmu_attr()
1000 attr->attr.attr.mode = 0444; in add_pmu_attr()
1001 attr->attr.show = perf_event_sysfs_show; in add_pmu_attr()
1002 attr->event_str = str; in add_pmu_attr()
1013 const char *name; in create_event_attributes() member
1017 __event(0, "actual-frequency", "M"), in create_event_attributes()
1018 __event(1, "requested-frequency", "M"), in create_event_attributes()
1020 __event(3, "rc6-residency", "ns"), in create_event_attributes()
1021 __event(4, "software-gt-awake-time", "ns"), in create_event_attributes()
1025 char *name; in create_event_attributes() member
1075 /* Initialize supported non-engine counters. */ in create_event_attributes()
1085 str = kstrdup(events[i].name, GFP_KERNEL); in create_event_attributes()
1087 str = kasprintf(GFP_KERNEL, "%s-gt%u", in create_event_attributes()
1088 events[i].name, j); in create_event_attributes()
1092 *attr_iter++ = &i915_iter->attr.attr; in create_event_attributes()
1098 events[i].name); in create_event_attributes()
1100 str = kasprintf(GFP_KERNEL, "%s-gt%u.unit", in create_event_attributes()
1101 events[i].name, j); in create_event_attributes()
1105 *attr_iter++ = &pmu_iter->attr.attr; in create_event_attributes()
1121 str = kasprintf(GFP_KERNEL, "%s-%s", in create_event_attributes()
1122 engine->name, engine_events[i].name); in create_event_attributes()
1126 *attr_iter++ = &i915_iter->attr.attr; in create_event_attributes()
1129 __I915_PMU_ENGINE(engine->uabi_class, in create_event_attributes()
1130 engine->uabi_instance, in create_event_attributes()
1133 str = kasprintf(GFP_KERNEL, "%s-%s.unit", in create_event_attributes()
1134 engine->name, engine_events[i].name); in create_event_attributes()
1138 *attr_iter++ = &pmu_iter->attr.attr; in create_event_attributes()
1143 pmu->i915_attr = i915_attr; in create_event_attributes()
1144 pmu->pmu_attr = pmu_attr; in create_event_attributes()
1150 kfree((*attr_iter)->name); in create_event_attributes()
1162 struct attribute **attr_iter = pmu->events_attr_group.attrs; in free_event_attributes()
1165 kfree((*attr_iter)->name); in free_event_attributes()
1167 kfree(pmu->events_attr_group.attrs); in free_event_attributes()
1168 kfree(pmu->i915_attr); in free_event_attributes()
1169 kfree(pmu->pmu_attr); in free_event_attributes()
1171 pmu->events_attr_group.attrs = NULL; in free_event_attributes()
1172 pmu->i915_attr = NULL; in free_event_attributes()
1173 pmu->pmu_attr = NULL; in free_event_attributes()
1193 * Unregistering an instance generates a CPU offline event which we must in i915_pmu_cpu_offline()
1196 if (!pmu->registered) in i915_pmu_cpu_offline()
1209 if (target < nr_cpu_ids && target != pmu->cpuhp.cpu) { in i915_pmu_cpu_offline()
1210 perf_pmu_migrate_context(&pmu->base, cpu, target); in i915_pmu_cpu_offline()
1211 pmu->cpuhp.cpu = target; in i915_pmu_cpu_offline()
1245 return -EINVAL; in i915_pmu_register_cpuhp_state()
1247 return cpuhp_state_add_instance(cpuhp_state, &pmu->cpuhp.node); in i915_pmu_register_cpuhp_state()
1252 cpuhp_state_remove_instance(cpuhp_state, &pmu->cpuhp.node); in i915_pmu_unregister_cpuhp_state()
1257 struct i915_pmu *pmu = &i915->pmu; in i915_pmu_register()
1260 &pmu->events_attr_group, in i915_pmu_register()
1264 int ret = -ENOMEM; in i915_pmu_register()
1266 spin_lock_init(&pmu->lock); in i915_pmu_register()
1267 hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in i915_pmu_register()
1268 pmu->timer.function = i915_sample; in i915_pmu_register()
1269 pmu->cpuhp.cpu = -1; in i915_pmu_register()
1273 pmu->name = kasprintf(GFP_KERNEL, in i915_pmu_register()
1275 dev_name(i915->drm.dev)); in i915_pmu_register()
1276 if (pmu->name) { in i915_pmu_register()
1278 strreplace((char *)pmu->name, ':', '_'); in i915_pmu_register()
1281 pmu->name = "i915"; in i915_pmu_register()
1283 if (!pmu->name) in i915_pmu_register()
1286 pmu->events_attr_group.name = "events"; in i915_pmu_register()
1287 pmu->events_attr_group.attrs = create_event_attributes(pmu); in i915_pmu_register()
1288 if (!pmu->events_attr_group.attrs) in i915_pmu_register()
1291 pmu->base.attr_groups = kmemdup(attr_groups, sizeof(attr_groups), in i915_pmu_register()
1293 if (!pmu->base.attr_groups) in i915_pmu_register()
1296 pmu->base.module = THIS_MODULE; in i915_pmu_register()
1297 pmu->base.task_ctx_nr = perf_invalid_context; in i915_pmu_register()
1298 pmu->base.event_init = i915_pmu_event_init; in i915_pmu_register()
1299 pmu->base.add = i915_pmu_event_add; in i915_pmu_register()
1300 pmu->base.del = i915_pmu_event_del; in i915_pmu_register()
1301 pmu->base.start = i915_pmu_event_start; in i915_pmu_register()
1302 pmu->base.stop = i915_pmu_event_stop; in i915_pmu_register()
1303 pmu->base.read = i915_pmu_event_read; in i915_pmu_register()
1304 pmu->base.event_idx = i915_pmu_event_event_idx; in i915_pmu_register()
1306 ret = perf_pmu_register(&pmu->base, pmu->name, -1); in i915_pmu_register()
1314 pmu->registered = true; in i915_pmu_register()
1319 perf_pmu_unregister(&pmu->base); in i915_pmu_register()
1321 kfree(pmu->base.attr_groups); in i915_pmu_register()
1326 kfree(pmu->name); in i915_pmu_register()
1328 drm_notice(&i915->drm, "Failed to register PMU!\n"); in i915_pmu_register()
1333 struct i915_pmu *pmu = &i915->pmu; in i915_pmu_unregister()
1335 if (!pmu->registered) in i915_pmu_unregister()
1339 pmu->registered = false; in i915_pmu_unregister()
1341 hrtimer_cancel(&pmu->timer); in i915_pmu_unregister()
1345 perf_pmu_unregister(&pmu->base); in i915_pmu_unregister()
1346 kfree(pmu->base.attr_groups); in i915_pmu_unregister()
1348 kfree(pmu->name); in i915_pmu_unregister()