mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-08 06:44:35 +08:00
drm/i915/perf: Wean ourselves off dev_priv
Use the local uncore accessors for the GT rather than using the [not-so] magic global dev_priv mmio routines. In the process, we also teach the perf stream to use backpointers to the i915_perf rather than digging it out of dev_priv. v2: Rebase onto i915_perf_types.h Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> #v1 Link: https://patchwork.freedesktop.org/patch/msgid/20191007140812.10963-1-chris@chris-wilson.co.uk Link: https://patchwork.freedesktop.org/patch/msgid/20191007210942.18145-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
d30213e533
commit
8f8b1171e1
@ -1332,61 +1332,7 @@ struct drm_i915_private {
|
|||||||
|
|
||||||
struct intel_runtime_pm runtime_pm;
|
struct intel_runtime_pm runtime_pm;
|
||||||
|
|
||||||
struct {
|
struct i915_perf perf;
|
||||||
bool initialized;
|
|
||||||
|
|
||||||
struct kobject *metrics_kobj;
|
|
||||||
struct ctl_table_header *sysctl_header;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lock associated with adding/modifying/removing OA configs
|
|
||||||
* in dev_priv->perf.metrics_idr.
|
|
||||||
*/
|
|
||||||
struct mutex metrics_lock;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List of dynamic configurations, you need to hold
|
|
||||||
* dev_priv->perf.metrics_lock to access it.
|
|
||||||
*/
|
|
||||||
struct idr metrics_idr;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lock associated with anything below within this structure
|
|
||||||
* except exclusive_stream.
|
|
||||||
*/
|
|
||||||
struct mutex lock;
|
|
||||||
struct list_head streams;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The stream currently using the OA unit. If accessed
|
|
||||||
* outside a syscall associated to its file
|
|
||||||
* descriptor, you need to hold
|
|
||||||
* dev_priv->drm.struct_mutex.
|
|
||||||
*/
|
|
||||||
struct i915_perf_stream *exclusive_stream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For rate limiting any notifications of spurious
|
|
||||||
* invalid OA reports
|
|
||||||
*/
|
|
||||||
struct ratelimit_state spurious_report_rs;
|
|
||||||
|
|
||||||
struct i915_oa_config test_config;
|
|
||||||
|
|
||||||
u32 gen7_latched_oastatus1;
|
|
||||||
u32 ctx_oactxctrl_offset;
|
|
||||||
u32 ctx_flexeu0_offset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The RPT_ID/reason field for Gen8+ includes a bit
|
|
||||||
* to determine if the CTX ID in the report is valid
|
|
||||||
* but the specific bit differs between Gen 8 and 9
|
|
||||||
*/
|
|
||||||
u32 gen8_valid_ctx_bit;
|
|
||||||
|
|
||||||
struct i915_oa_ops ops;
|
|
||||||
const struct i915_oa_format *oa_formats;
|
|
||||||
} perf;
|
|
||||||
|
|
||||||
/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
|
/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
|
||||||
struct intel_gt gt;
|
struct intel_gt gt;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
#include <linux/sysfs.h>
|
#include <linux/sysfs.h>
|
||||||
|
#include <linux/types.h>
|
||||||
#include <linux/uuid.h>
|
#include <linux/uuid.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
|
|
||||||
@ -124,9 +125,14 @@ struct i915_perf_stream_ops {
|
|||||||
*/
|
*/
|
||||||
struct i915_perf_stream {
|
struct i915_perf_stream {
|
||||||
/**
|
/**
|
||||||
* @dev_priv: i915 drm device
|
* @perf: i915_perf backpointer
|
||||||
*/
|
*/
|
||||||
struct drm_i915_private *dev_priv;
|
struct i915_perf *perf;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @gt: intel_gt container
|
||||||
|
*/
|
||||||
|
struct intel_gt *gt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @link: Links the stream into ``&drm_i915_private->streams``
|
* @link: Links the stream into ``&drm_i915_private->streams``
|
||||||
@ -266,20 +272,19 @@ struct i915_oa_ops {
|
|||||||
* @is_valid_b_counter_reg: Validates register's address for
|
* @is_valid_b_counter_reg: Validates register's address for
|
||||||
* programming boolean counters for a particular platform.
|
* programming boolean counters for a particular platform.
|
||||||
*/
|
*/
|
||||||
bool (*is_valid_b_counter_reg)(struct drm_i915_private *dev_priv,
|
bool (*is_valid_b_counter_reg)(struct i915_perf *perf, u32 addr);
|
||||||
u32 addr);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @is_valid_mux_reg: Validates register's address for programming mux
|
* @is_valid_mux_reg: Validates register's address for programming mux
|
||||||
* for a particular platform.
|
* for a particular platform.
|
||||||
*/
|
*/
|
||||||
bool (*is_valid_mux_reg)(struct drm_i915_private *dev_priv, u32 addr);
|
bool (*is_valid_mux_reg)(struct i915_perf *perf, u32 addr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @is_valid_flex_reg: Validates register's address for programming
|
* @is_valid_flex_reg: Validates register's address for programming
|
||||||
* flex EU filtering for a particular platform.
|
* flex EU filtering for a particular platform.
|
||||||
*/
|
*/
|
||||||
bool (*is_valid_flex_reg)(struct drm_i915_private *dev_priv, u32 addr);
|
bool (*is_valid_flex_reg)(struct i915_perf *perf, u32 addr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enable_metric_set: Selects and applies any MUX configuration to set
|
* @enable_metric_set: Selects and applies any MUX configuration to set
|
||||||
@ -324,4 +329,60 @@ struct i915_oa_ops {
|
|||||||
u32 (*oa_hw_tail_read)(struct i915_perf_stream *stream);
|
u32 (*oa_hw_tail_read)(struct i915_perf_stream *stream);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct i915_perf {
|
||||||
|
struct drm_i915_private *i915;
|
||||||
|
|
||||||
|
struct kobject *metrics_kobj;
|
||||||
|
struct ctl_table_header *sysctl_header;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lock associated with adding/modifying/removing OA configs
|
||||||
|
* in dev_priv->perf.metrics_idr.
|
||||||
|
*/
|
||||||
|
struct mutex metrics_lock;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of dynamic configurations, you need to hold
|
||||||
|
* dev_priv->perf.metrics_lock to access it.
|
||||||
|
*/
|
||||||
|
struct idr metrics_idr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lock associated with anything below within this structure
|
||||||
|
* except exclusive_stream.
|
||||||
|
*/
|
||||||
|
struct mutex lock;
|
||||||
|
struct list_head streams;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The stream currently using the OA unit. If accessed
|
||||||
|
* outside a syscall associated to its file
|
||||||
|
* descriptor, you need to hold
|
||||||
|
* dev_priv->drm.struct_mutex.
|
||||||
|
*/
|
||||||
|
struct i915_perf_stream *exclusive_stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For rate limiting any notifications of spurious
|
||||||
|
* invalid OA reports
|
||||||
|
*/
|
||||||
|
struct ratelimit_state spurious_report_rs;
|
||||||
|
|
||||||
|
struct i915_oa_config test_config;
|
||||||
|
|
||||||
|
u32 gen7_latched_oastatus1;
|
||||||
|
u32 ctx_oactxctrl_offset;
|
||||||
|
u32 ctx_flexeu0_offset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The RPT_ID/reason field for Gen8+ includes a bit
|
||||||
|
* to determine if the CTX ID in the report is valid
|
||||||
|
* but the specific bit differs between Gen 8 and 9
|
||||||
|
*/
|
||||||
|
u32 gen8_valid_ctx_bit;
|
||||||
|
|
||||||
|
struct i915_oa_ops ops;
|
||||||
|
const struct i915_oa_format *oa_formats;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _I915_PERF_TYPES_H_ */
|
#endif /* _I915_PERF_TYPES_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user