mmap_cache: simplify API

* mmap_cache.h (mmap_cache_rebuild_if_invalid_): rename from
mmap_cache_rebuild_if_invalid.
(mmap_cache_rebuild_if_invalid): New macro, a wrapper for
mmap_cache_rebuild_if_invalid_ that supplies __func__ to it.
(mmap_cache_free_): New declaration.
(mmap_cache_free): New macro, a wrapper for mmap_cache_free_ that
supplies __func__ to it.
* mmap_cache.c (mmap_cache_rebuild_if_invalid_): Rename from
mmap_cache_rebuild_if_invalid.
(mmap_cache_free_): New function.
* unwind-libunwind.c (tcb_walk): Remove __func__ argument from the
mmap_cache_rebuild_if_invalid call.
* kvm.c (vcpu_get_info): Likewise.
* strace.c (droptcb): Call mmap_cache_free.
This commit is contained in:
Eugene Syromyatnikov
2018-09-04 15:41:47 +02:00
parent 3305550ccc
commit 05ae538c90
5 changed files with 26 additions and 6 deletions

2
kvm.c
View File

@ -137,7 +137,7 @@ vcpu_get_info(struct tcb *const tcp, int fd)
const char *cpuid_str;
enum mmap_cache_rebuild_result mc_stat =
mmap_cache_rebuild_if_invalid(tcp, __func__);
mmap_cache_rebuild_if_invalid(tcp);
if (mc_stat == MMAP_CACHE_REBUILD_NOCACHE)
return NULL;

View File

@ -94,7 +94,7 @@ delete_mmap_cache(struct tcb *tcp, const char *caller)
* e.g. mmap, mprotect, munmap, execve.
*/
extern enum mmap_cache_rebuild_result
mmap_cache_rebuild_if_invalid(struct tcb *tcp, const char *caller)
mmap_cache_rebuild_if_invalid_(struct tcb *tcp, const char *caller)
{
if (tcp->mmap_cache
&& tcp->mmap_cache->generation != mmap_cache_generation)
@ -245,3 +245,18 @@ mmap_cache_search_custom(struct tcb *tcp, mmap_cache_search_fn fn, void *data)
}
return NULL;
}
void
mmap_cache_free_(struct tcb *tcp, const char *caller)
{
if (!tcp->mmap_cache)
return;
if (!tcp->mmap_cache->free_fn) {
error_func_msg("pid %d: mmap_cache has NULL free_fn "
"(called from %s)", tcp->pid, caller);
return;
}
tcp->mmap_cache->free_fn(tcp, caller);
}

View File

@ -79,7 +79,9 @@ extern void
mmap_cache_enable(void);
extern enum mmap_cache_rebuild_result
mmap_cache_rebuild_if_invalid(struct tcb *, const char *caller);
mmap_cache_rebuild_if_invalid_(struct tcb *, const char *caller);
#define mmap_cache_rebuild_if_invalid(tcp_) \
mmap_cache_rebuild_if_invalid_((tcp_), __func__)
extern struct mmap_cache_entry_t *
mmap_cache_search(struct tcb *, unsigned long ip);
@ -87,4 +89,8 @@ mmap_cache_search(struct tcb *, unsigned long ip);
extern struct mmap_cache_entry_t *
mmap_cache_search_custom(struct tcb *, mmap_cache_search_fn, void *);
extern void
mmap_cache_free_(struct tcb *tcp, const char *caller);
#define mmap_cache_free(tcp_) mmap_cache_free_((tcp_), __func__)
#endif /* !STRACE_MMAP_CACHE_H */

View File

@ -838,8 +838,7 @@ droptcb(struct tcb *tcp)
kvm_vcpu_info_free(tcp);
#endif
if (tcp->mmap_cache)
tcp->mmap_cache->free_fn(tcp, __func__);
mmap_cache_free(tcp);
nprocs--;
debug_msg("dropped tcb for pid %d, %d remain", tcp->pid, nprocs);

View File

@ -163,7 +163,7 @@ tcb_walk(struct tcb *tcp,
unwind_error_action_fn error_action,
void *data)
{
switch (mmap_cache_rebuild_if_invalid(tcp, __func__)) {
switch (mmap_cache_rebuild_if_invalid(tcp)) {
case MMAP_CACHE_REBUILD_RENEWED:
/*
* Rebuild the unwinder internal cache.