mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-05 05:15:02 +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 {
|
||||
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;
|
||||
struct i915_perf perf;
|
||||
|
||||
/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
|
||||
struct intel_gt gt;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/uuid.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
@ -124,9 +125,14 @@ struct i915_perf_stream_ops {
|
||||
*/
|
||||
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``
|
||||
@ -266,20 +272,19 @@ struct i915_oa_ops {
|
||||
* @is_valid_b_counter_reg: Validates register's address for
|
||||
* programming boolean counters for a particular platform.
|
||||
*/
|
||||
bool (*is_valid_b_counter_reg)(struct drm_i915_private *dev_priv,
|
||||
u32 addr);
|
||||
bool (*is_valid_b_counter_reg)(struct i915_perf *perf, u32 addr);
|
||||
|
||||
/**
|
||||
* @is_valid_mux_reg: Validates register's address for programming mux
|
||||
* 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
|
||||
* 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
|
||||
@ -324,4 +329,60 @@ struct i915_oa_ops {
|
||||
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_ */
|
||||
|
Loading…
Reference in New Issue
Block a user