mirror of https://gitee.com/openkylin/linux.git
perf auxtrace: Add auxtrace_cache__remove()
Add auxtrace_cache__remove(). Intel PT uses an auxtrace_cache to store the results of code-walking, so that the same block of instructions does not have to be decoded repeatedly. However, when there are text poke events, the associated cache entries need to be removed. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Borislav Petkov <bp@alien8.de> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: x86@kernel.org Link: http://lore.kernel.org/lkml/20191025130000.13032-6-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
af04dd2f8e
commit
fd62c1097a
|
@ -1457,6 +1457,34 @@ int auxtrace_cache__add(struct auxtrace_cache *c, u32 key,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct auxtrace_cache_entry *auxtrace_cache__rm(struct auxtrace_cache *c,
|
||||
u32 key)
|
||||
{
|
||||
struct auxtrace_cache_entry *entry;
|
||||
struct hlist_head *hlist;
|
||||
struct hlist_node *n;
|
||||
|
||||
if (!c)
|
||||
return NULL;
|
||||
|
||||
hlist = &c->hashtable[hash_32(key, c->bits)];
|
||||
hlist_for_each_entry_safe(entry, n, hlist, hash) {
|
||||
if (entry->key == key) {
|
||||
hlist_del(&entry->hash);
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void auxtrace_cache__remove(struct auxtrace_cache *c, u32 key)
|
||||
{
|
||||
struct auxtrace_cache_entry *entry = auxtrace_cache__rm(c, key);
|
||||
|
||||
auxtrace_cache__free_entry(c, entry);
|
||||
}
|
||||
|
||||
void *auxtrace_cache__lookup(struct auxtrace_cache *c, u32 key)
|
||||
{
|
||||
struct auxtrace_cache_entry *entry;
|
||||
|
|
|
@ -489,6 +489,7 @@ void *auxtrace_cache__alloc_entry(struct auxtrace_cache *c);
|
|||
void auxtrace_cache__free_entry(struct auxtrace_cache *c, void *entry);
|
||||
int auxtrace_cache__add(struct auxtrace_cache *c, u32 key,
|
||||
struct auxtrace_cache_entry *entry);
|
||||
void auxtrace_cache__remove(struct auxtrace_cache *c, u32 key);
|
||||
void *auxtrace_cache__lookup(struct auxtrace_cache *c, u32 key);
|
||||
|
||||
struct auxtrace_record *auxtrace_record__init(struct evlist *evlist,
|
||||
|
|
Loading…
Reference in New Issue