On the virtual engines, we only use the intel_breadcrumbs for tracking signaling of stale breadcrumbs from the irq_workers. They do not have any associated interrupt handling, active requests are passed to a physical engine and associated breadcrumb interrupt handler. This causes issues for us as we need to ensure that we do not actually try and enable interrupts and the powermanagement required for them on the virtual engine, as they will never be disabled. Instead, let's specify the physical engine used for interrupt handler on a particular breadcrumb. v2: Drop b->irq_armed = true mocking for no interrupt HW Fixes: 4fe6abb8f513 ("drm/i915/gt: Ignore irq enabling on the virtual engines") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200731154834.8378-4-chris@chris-wilson.co.uk Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
37 lines
947 B
C
37 lines
947 B
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_BREADCRUMBS__
|
|
#define __INTEL_BREADCRUMBS__
|
|
|
|
#include <linux/irq_work.h>
|
|
|
|
#include "intel_engine_types.h"
|
|
|
|
struct drm_printer;
|
|
struct i915_request;
|
|
struct intel_breadcrumbs;
|
|
|
|
struct intel_breadcrumbs *
|
|
intel_breadcrumbs_create(struct intel_engine_cs *irq_engine);
|
|
void intel_breadcrumbs_free(struct intel_breadcrumbs *b);
|
|
|
|
void intel_breadcrumbs_reset(struct intel_breadcrumbs *b);
|
|
void intel_breadcrumbs_park(struct intel_breadcrumbs *b);
|
|
|
|
static inline void
|
|
intel_engine_signal_breadcrumbs(struct intel_engine_cs *engine)
|
|
{
|
|
irq_work_queue(&engine->breadcrumbs->irq_work);
|
|
}
|
|
|
|
void intel_engine_print_breadcrumbs(struct intel_engine_cs *engine,
|
|
struct drm_printer *p);
|
|
|
|
bool i915_request_enable_breadcrumb(struct i915_request *request);
|
|
void i915_request_cancel_breadcrumb(struct i915_request *request);
|
|
|
|
#endif /* __INTEL_BREADCRUMBS__ */
|