linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Thomas Gleixner <tglx@linutronix.de>,
	Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Andy Lutomirski <luto@kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>, Andi Kleen <ak@linux.intel.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Joerg Roedel <joro@8bytes.org>, Jiri Olsa <jolsa@redhat.com>,
	linux-kernel@vger.kernel.org, x86@kernel.org
Subject: [PATCH RFC 04/19] x86: kcore: Give entry trampolines all the same offset in kcore
Date: Wed,  9 May 2018 14:43:33 +0300	[thread overview]
Message-ID: <1525866228-30321-5-git-send-email-adrian.hunter@intel.com> (raw)
In-Reply-To: <1525866228-30321-1-git-send-email-adrian.hunter@intel.com>

Entry trampolines all map to the same page.  Represent that by giving the
corresponding program headers in kcore the same offset.

This has the benefit that, when perf tools uses /proc/kcore as a source for
kernel object code, samples from different CPU trampolines are aggregated
together.  Note, such aggregation is normal for profiling i.e. people want
to profile the object code, not every different virtual address the object
code might be mapped to (across different processes for example).

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 arch/x86/mm/cpu_entry_area.c |  6 +++---
 fs/proc/kcore.c              |  7 +++++--
 include/linux/kcore.h        | 13 +++++++++++++
 3 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/arch/x86/mm/cpu_entry_area.c b/arch/x86/mm/cpu_entry_area.c
index fb1fbc8538fa..faea80e9bbd2 100644
--- a/arch/x86/mm/cpu_entry_area.c
+++ b/arch/x86/mm/cpu_entry_area.c
@@ -149,9 +149,9 @@ static void __init setup_cpu_entry_area(int cpu)
 
 	cea_set_pte(&get_cpu_entry_area(cpu)->entry_trampoline,
 		     __pa_symbol(_entry_trampoline), PAGE_KERNEL_RX);
-	kclist_add(&per_cpu(kcore_entry_trampoline, cpu),
-		   &get_cpu_entry_area(cpu)->entry_trampoline, PAGE_SIZE,
-		   KCORE_TEXT);
+	kclist_add_remap(&per_cpu(kcore_entry_trampoline, cpu),
+			 _entry_trampoline,
+			 &get_cpu_entry_area(cpu)->entry_trampoline, PAGE_SIZE);
 #endif
 	percpu_setup_debug_store(cpu);
 }
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
index d1e82761de81..b5e02b0379ca 100644
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -374,8 +374,11 @@ static void elf_kcore_store_hdr(char *bufp, int nphdr, int dataoff)
 		phdr->p_type	= PT_LOAD;
 		phdr->p_flags	= PF_R|PF_W|PF_X;
 		phdr->p_offset	= kc_vaddr_to_offset(m->addr) + dataoff;
-		phdr->p_vaddr	= (size_t)m->addr;
-		if (m->type == KCORE_RAM || m->type == KCORE_TEXT)
+		if (m->type == KCORE_REMAP)
+			phdr->p_vaddr	= (size_t)m->vaddr;
+		else
+			phdr->p_vaddr	= (size_t)m->addr;
+		if (m->type == KCORE_RAM || m->type == KCORE_TEXT || m->type == KCORE_REMAP)
 			phdr->p_paddr	= __pa(m->addr);
 		else
 			phdr->p_paddr	= (elf_addr_t)-1;
diff --git a/include/linux/kcore.h b/include/linux/kcore.h
index 80db19d3a505..3a11ce51e137 100644
--- a/include/linux/kcore.h
+++ b/include/linux/kcore.h
@@ -12,11 +12,13 @@ enum kcore_type {
 	KCORE_VMEMMAP,
 	KCORE_USER,
 	KCORE_OTHER,
+	KCORE_REMAP,
 };
 
 struct kcore_list {
 	struct list_head list;
 	unsigned long addr;
+	unsigned long vaddr;
 	size_t size;
 	int type;
 };
@@ -30,11 +32,22 @@ struct vmcore {
 
 #ifdef CONFIG_PROC_KCORE
 extern void kclist_add(struct kcore_list *, void *, size_t, int type);
+static inline
+void kclist_add_remap(struct kcore_list *m, void *addr, void *vaddr, size_t sz)
+{
+	m->vaddr = (unsigned long)vaddr;
+	kclist_add(m, addr, sz, KCORE_REMAP);
+}
 #else
 static inline
 void kclist_add(struct kcore_list *new, void *addr, size_t size, int type)
 {
 }
+
+static inline
+void kclist_add_remap(struct kcore_list *m, void *addr, void *vaddr, size_t sz)
+{
+}
 #endif
 
 #endif /* _LINUX_KCORE_H */
-- 
1.9.1

  parent reply	other threads:[~2018-05-09 11:45 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-09 11:43 [PATCH RFC 00/19] perf tools and x86_64 KPTI entry trampolines Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 01/19] kallsyms: Simplify update_iter_mod() Adrian Hunter
2018-05-10 13:01   ` Jiri Olsa
2018-05-10 17:02     ` Hunter, Adrian
2018-05-14 17:55       ` Arnaldo Carvalho de Melo
2018-05-09 11:43 ` [PATCH RFC 02/19] kallsyms, x86: Export addresses of syscall trampolines Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 03/19] x86: Add entry trampolines to kcore Adrian Hunter
2018-05-09 11:43 ` Adrian Hunter [this message]
2018-05-09 11:43 ` [PATCH RFC 05/19] perf tools: Use the _stest symbol to identify the kernel map when loading kcore Adrian Hunter
2018-05-16 18:04   ` [tip:perf/core] perf tools: Use the "_stest" " tip-bot for Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 06/19] perf tools: Fix kernel_start for KPTI on x86_64 Adrian Hunter
2018-05-09 17:08   ` Arnaldo Carvalho de Melo
2018-05-09 11:43 ` [PATCH RFC 07/19] perf tools: Workaround missing maps for x86_64 KPTI entry trampolines Adrian Hunter
2018-05-09 17:07   ` Arnaldo Carvalho de Melo
2018-05-10 19:08     ` Hunter, Adrian
2018-05-10 20:15       ` Arnaldo Carvalho de Melo
2018-05-10 20:19         ` Arnaldo Carvalho de Melo
2018-05-10 20:47           ` Arnaldo Carvalho de Melo
2018-05-11 11:18             ` Adrian Hunter
2018-05-11 14:45               ` Arnaldo Carvalho de Melo
2018-05-14 13:02                 ` Adrian Hunter
2018-05-11 11:15         ` Adrian Hunter
2018-05-15 10:30   ` Jiri Olsa
2018-05-15 10:40     ` Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 08/19] perf tools: Fix map_groups__split_kallsyms() for entry trampoline symbols Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 09/19] perf tools: Allow for special kernel maps Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 10/19] perf tools: Create maps for x86_64 KPTI entry trampolines Adrian Hunter
2018-05-14  8:32   ` Ingo Molnar
2018-05-09 11:43 ` [PATCH RFC 11/19] perf tools: Synthesize and process mmap events " Adrian Hunter
2018-05-15 10:49   ` Jiri Olsa
2018-05-09 11:43 ` [PATCH RFC 12/19] perf buildid-cache: kcore_copy: Keep phdr data in a list Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 13/19] perf buildid-cache: kcore_copy: Keep a count of phdrs Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 14/19] perf buildid-cache: kcore_copy: Calculate offset from phnum Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 15/19] perf buildid-cache: kcore_copy: Layout sections Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 16/19] perf buildid-cache: kcore_copy: Iterate phdrs Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 17/19] perf buildid-cache: kcore_copy: Get rid of kernel_map Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 18/19] perf buildid-cache: kcore_copy: Copy x86_64 entry trampoline sections Adrian Hunter
2018-05-09 11:43 ` [PATCH RFC 19/19] perf buildid-cache: kcore_copy: Amend the offset of sections that remap kernel text Adrian Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1525866228-30321-5-git-send-email-adrian.hunter@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jolsa@redhat.com \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).