intel/perf: move reap_old_sample_buffers into perf
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -843,3 +843,27 @@ gen_perf_get_free_sample_buf(struct gen_perf_context *perf_ctx)
|
|||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gen_perf_reap_old_sample_buffers(struct gen_perf_context *perf_ctx)
|
||||||
|
{
|
||||||
|
struct exec_node *tail_node =
|
||||||
|
exec_list_get_tail(&perf_ctx->sample_buffers);
|
||||||
|
struct oa_sample_buf *tail_buf =
|
||||||
|
exec_node_data(struct oa_sample_buf, tail_node, link);
|
||||||
|
|
||||||
|
/* Remove all old, unreferenced sample buffers walking forward from
|
||||||
|
* the head of the list, except always leave at least one node in
|
||||||
|
* the list so we always have a node to reference when we Begin
|
||||||
|
* a new query.
|
||||||
|
*/
|
||||||
|
foreach_list_typed_safe(struct oa_sample_buf, buf, link,
|
||||||
|
&perf_ctx->sample_buffers)
|
||||||
|
{
|
||||||
|
if (buf->refcount == 0 && buf != tail_buf) {
|
||||||
|
exec_node_remove(&buf->link);
|
||||||
|
exec_list_push_head(&perf_ctx->free_sample_buffers, &buf->link);
|
||||||
|
} else
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -505,6 +505,7 @@ void gen_perf_query_register_mdapi_oa_query(const struct gen_device_info *devinf
|
|||||||
uint64_t gen_perf_query_get_metric_id(struct gen_perf_config *perf,
|
uint64_t gen_perf_query_get_metric_id(struct gen_perf_config *perf,
|
||||||
const struct gen_perf_query_info *query);
|
const struct gen_perf_query_info *query);
|
||||||
struct oa_sample_buf * gen_perf_get_free_sample_buf(struct gen_perf_context *perf);
|
struct oa_sample_buf * gen_perf_get_free_sample_buf(struct gen_perf_context *perf);
|
||||||
|
void gen_perf_reap_old_sample_buffers(struct gen_perf_context *perf_ctx);
|
||||||
|
|
||||||
|
|
||||||
#endif /* GEN_PERF_H */
|
#endif /* GEN_PERF_H */
|
||||||
|
@@ -146,30 +146,6 @@ dump_perf_queries(struct brw_context *brw)
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
static void
|
|
||||||
reap_old_sample_buffers(struct brw_context *brw)
|
|
||||||
{
|
|
||||||
struct exec_node *tail_node =
|
|
||||||
exec_list_get_tail(&brw->perf_ctx.sample_buffers);
|
|
||||||
struct oa_sample_buf *tail_buf =
|
|
||||||
exec_node_data(struct oa_sample_buf, tail_node, link);
|
|
||||||
|
|
||||||
/* Remove all old, unreferenced sample buffers walking forward from
|
|
||||||
* the head of the list, except always leave at least one node in
|
|
||||||
* the list so we always have a node to reference when we Begin
|
|
||||||
* a new query.
|
|
||||||
*/
|
|
||||||
foreach_list_typed_safe(struct oa_sample_buf, buf, link,
|
|
||||||
&brw->perf_ctx.sample_buffers)
|
|
||||||
{
|
|
||||||
if (buf->refcount == 0 && buf != tail_buf) {
|
|
||||||
exec_node_remove(&buf->link);
|
|
||||||
exec_list_push_head(&brw->perf_ctx.free_sample_buffers, &buf->link);
|
|
||||||
} else
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_sample_bufs(struct brw_context *brw)
|
free_sample_bufs(struct brw_context *brw)
|
||||||
{
|
{
|
||||||
@@ -363,7 +339,7 @@ drop_from_unaccumulated_query_list(struct brw_context *brw,
|
|||||||
|
|
||||||
obj->oa.samples_head = NULL;
|
obj->oa.samples_head = NULL;
|
||||||
|
|
||||||
reap_old_sample_buffers(brw);
|
gen_perf_reap_old_sample_buffers(&brw->perf_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
Reference in New Issue
Block a user