cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

intel_engine_stats.h (1327B)


      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
     16static inline void intel_engine_context_in(struct intel_engine_cs *engine)
     17{
     18	struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
     19	unsigned long flags;
     20
     21	if (stats->active) {
     22		stats->active++;
     23		return;
     24	}
     25
     26	/* The writer is serialised; but the pmu reader may be from hardirq */
     27	local_irq_save(flags);
     28	write_seqcount_begin(&stats->lock);
     29
     30	stats->start = ktime_get();
     31	stats->active++;
     32
     33	write_seqcount_end(&stats->lock);
     34	local_irq_restore(flags);
     35
     36	GEM_BUG_ON(!stats->active);
     37}
     38
     39static inline void intel_engine_context_out(struct intel_engine_cs *engine)
     40{
     41	struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
     42	unsigned long flags;
     43
     44	GEM_BUG_ON(!stats->active);
     45	if (stats->active > 1) {
     46		stats->active--;
     47		return;
     48	}
     49
     50	local_irq_save(flags);
     51	write_seqcount_begin(&stats->lock);
     52
     53	stats->active--;
     54	stats->total = ktime_add(stats->total,
     55				 ktime_sub(ktime_get(), stats->start));
     56
     57	write_seqcount_end(&stats->lock);
     58	local_irq_restore(flags);
     59}
     60
     61#endif /* __INTEL_ENGINE_STATS_H__ */