Quoting Tvrtko Ursulin (2017-11-13 08:57:22) > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h > index b71d9ea5227f..5b5e2bd9b25d 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.h > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h > @@ -560,6 +560,38 @@ struct intel_engine_cs { > * certain bits to encode the command length in the header). > */ > u32 (*get_cmd_length_mask)(u32 cmd_header); > + > + struct { > + /** > + * @lock: Lock protecting the below fields. > + */ > + spinlock_t lock; > + /** > + * @enabled: Reference count indicating number of listeners. > + */ > + unsigned int enabled; > + /** > + * @active: Number of contexts currently scheduled in. > + */ > + unsigned int active; > + /** > + * @enabled_at: Timestamp when busy stats were enabled. > + */ > + ktime_t enabled_at; > + /** > + * @start: Timestamp of the last idle to active transition. > + * > + * Idle is defined as active == 0, active is active > 0. > + */ > + ktime_t start; > + /** > + * @total: Total time this engine was busy. > + * > + * Accumulated time not counting the most recent block in cases > + * where engine is currently busy (active > 0). > + */ > + ktime_t total; > + } stats; > }; > > static inline void > @@ -964,4 +996,64 @@ void intel_engine_dump(struct intel_engine_cs *engine, struct drm_printer *p); > struct intel_engine_cs * > intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance); > > +static inline void intel_engine_context_in(struct intel_engine_cs *engine) > +{ > + unsigned long flags; > + > + if (READ_ONCE(engine->stats.enabled) == 0) > + return; > + > + spin_lock_irqsave(&engine->stats.lock, flags); > + > + if (engine->stats.enabled > 0) { Why > 0 for an unsigned int? -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx