drm/i915: Drop the CONTEXT_CLONE API (v2)
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / gt / intel_engine_stats.h
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2020 Intel Corporation
4  */
5
6 #ifndef __INTEL_ENGINE_STATS_H__
7 #define __INTEL_ENGINE_STATS_H__
8
9 #include <linux/atomic.h>
10 #include <linux/ktime.h>
11 #include <linux/seqlock.h>
12
13 #include "i915_gem.h" /* GEM_BUG_ON */
14 #include "intel_engine.h"
15
16 static inline void intel_engine_context_in(struct intel_engine_cs *engine)
17 {
18         unsigned long flags;
19
20         if (engine->stats.active) {
21                 engine->stats.active++;
22                 return;
23         }
24
25         /* The writer is serialised; but the pmu reader may be from hardirq */
26         local_irq_save(flags);
27         write_seqcount_begin(&engine->stats.lock);
28
29         engine->stats.start = ktime_get();
30         engine->stats.active++;
31
32         write_seqcount_end(&engine->stats.lock);
33         local_irq_restore(flags);
34
35         GEM_BUG_ON(!engine->stats.active);
36 }
37
38 static inline void intel_engine_context_out(struct intel_engine_cs *engine)
39 {
40         unsigned long flags;
41
42         GEM_BUG_ON(!engine->stats.active);
43         if (engine->stats.active > 1) {
44                 engine->stats.active--;
45                 return;
46         }
47
48         local_irq_save(flags);
49         write_seqcount_begin(&engine->stats.lock);
50
51         engine->stats.active--;
52         engine->stats.total =
53                 ktime_add(engine->stats.total,
54                           ktime_sub(ktime_get(), engine->stats.start));
55
56         write_seqcount_end(&engine->stats.lock);
57         local_irq_restore(flags);
58 }
59
60 #endif /* __INTEL_ENGINE_STATS_H__ */