From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Yin Fengwei Date: Tue, 3 Sep 2019 10:10:29 +0800 Subject: [PATCH] vhm ioreq: dump callstack for iorange adding operation Extend the vhm iorange dump function to include the callstack of adding iorange to specific ioreq client. Tracked-On: projectacrn/acrn-hypervisor#3634 Signed-off-by: Yin Fengwei Reviewed-by: Zhao Yakui --- drivers/vhm/vhm_ioreq.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/vhm/vhm_ioreq.c b/drivers/vhm/vhm_ioreq.c index ef89bf827270..16b666edfc3a 100644 --- a/drivers/vhm/vhm_ioreq.c +++ b/drivers/vhm/vhm_ioreq.c @@ -69,6 +69,8 @@ #include #include +#define IOREQ_RANGE_ENTRIES 8 + static DEFINE_SPINLOCK(client_lock); static struct idr idr_client; @@ -77,6 +79,11 @@ struct ioreq_range { uint32_t type; long start; long end; + +#ifdef CONFIG_STACKTRACE + struct stack_trace st; + unsigned long st_entries[IOREQ_RANGE_ENTRIES]; +#endif }; enum IOREQ_CLIENT_BITS { @@ -476,6 +483,14 @@ int acrn_ioreq_add_iorange(int client_id, uint32_t type, range->start = start; range->end = end; +#ifdef CONFIG_STACKTRACE + range->st.max_entries = IOREQ_RANGE_ENTRIES; + range->st.entries = range->st_entries; + range->st.nr_entries = 0; + range->st.skip = 0; + save_stack_trace(&range->st); +#endif + spin_lock_bh(&client->range_lock); list_add(&range->list, &client->range_list); spin_unlock_bh(&client->range_lock); @@ -1109,6 +1124,7 @@ static struct dentry *vhm_debugfs_dir; static void vhm_ioclient_range_show_one(struct seq_file *s, struct ioreq_client *client) { + int i; struct list_head *pos; seq_printf(s, " client: %s, id: %d\n", @@ -1120,6 +1136,13 @@ static void vhm_ioclient_range_show_one(struct seq_file *s, container_of(pos, struct ioreq_range, list); seq_printf(s, " io range: type %d, start 0x%lx, end 0x%lx\n", range->type, range->start, range->end); +#ifdef CONFIG_STACKTRACE + seq_puts(s, " allocation stack:\n"); + for (i = 0; i < range->st.nr_entries; i++) { + seq_printf(s, " %pB\n", + (void *)range->st_entries[i]); + } +#endif } spin_unlock_bh(&client->range_lock); } -- https://clearlinux.org