[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 05/17] perf: Drop dead and useless guest "support" from arm, csky, nds32 and riscv



Drop "support" for guest callbacks from architectures that don't implement
the guest callbacks.  Future patches will convert the callbacks to
static_call; rather than churn a bunch of arch code (that was presumably
copy+pasted from x86), remove it wholesale as it's useless and at best
wasting cycles.

A future patch will also add a Kconfig to force architcture to opt into
the callbacks to make it more difficult for uses "support" to sneak in in
the future.

No functional change intended.

Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
---
 arch/arm/kernel/perf_callchain.c   | 33 ++++-------------------------
 arch/csky/kernel/perf_callchain.c  | 12 -----------
 arch/nds32/kernel/perf_event_cpu.c | 34 ++++--------------------------
 arch/riscv/kernel/perf_callchain.c | 13 ------------
 4 files changed, 8 insertions(+), 84 deletions(-)

diff --git a/arch/arm/kernel/perf_callchain.c b/arch/arm/kernel/perf_callchain.c
index 1626dfc6f6ce..bc6b246ab55e 100644
--- a/arch/arm/kernel/perf_callchain.c
+++ b/arch/arm/kernel/perf_callchain.c
@@ -62,14 +62,8 @@ user_backtrace(struct frame_tail __user *tail,
 void
 perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs 
*regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        struct frame_tail __user *tail;
 
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               /* We don't support guest os callchain now */
-               return;
-       }
-
        perf_callchain_store(entry, regs->ARM_pc);
 
        if (!current->mm)
@@ -99,44 +93,25 @@ callchain_trace(struct stackframe *fr,
 void
 perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs 
*regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        struct stackframe fr;
 
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               /* We don't support guest os callchain now */
-               return;
-       }
-
        arm_get_current_stackframe(regs, &fr);
        walk_stackframe(&fr, callchain_trace, entry);
 }
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
-
-       if (guest_cbs && guest_cbs->is_in_guest())
-               return guest_cbs->get_guest_ip();
-
        return instruction_pointer(regs);
 }
 
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        int misc = 0;
 
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               if (guest_cbs->is_user_mode())
-                       misc |= PERF_RECORD_MISC_GUEST_USER;
-               else
-                       misc |= PERF_RECORD_MISC_GUEST_KERNEL;
-       } else {
-               if (user_mode(regs))
-                       misc |= PERF_RECORD_MISC_USER;
-               else
-                       misc |= PERF_RECORD_MISC_KERNEL;
-       }
+       if (user_mode(regs))
+               misc |= PERF_RECORD_MISC_USER;
+       else
+               misc |= PERF_RECORD_MISC_KERNEL;
 
        return misc;
 }
diff --git a/arch/csky/kernel/perf_callchain.c 
b/arch/csky/kernel/perf_callchain.c
index 35318a635a5f..92057de08f4f 100644
--- a/arch/csky/kernel/perf_callchain.c
+++ b/arch/csky/kernel/perf_callchain.c
@@ -86,13 +86,8 @@ static unsigned long user_backtrace(struct 
perf_callchain_entry_ctx *entry,
 void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
                         struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        unsigned long fp = 0;
 
-       /* C-SKY does not support virtualization. */
-       if (guest_cbs && guest_cbs->is_in_guest())
-               return;
-
        fp = regs->regs[4];
        perf_callchain_store(entry, regs->pc);
 
@@ -111,15 +106,8 @@ void perf_callchain_user(struct perf_callchain_entry_ctx 
*entry,
 void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
                           struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        struct stackframe fr;
 
-       /* C-SKY does not support virtualization. */
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               pr_warn("C-SKY does not support perf in guest mode!");
-               return;
-       }
-
        fr.fp = regs->regs[4];
        fr.lr = regs->lr;
        walk_stackframe(&fr, entry);
diff --git a/arch/nds32/kernel/perf_event_cpu.c 
b/arch/nds32/kernel/perf_event_cpu.c
index f38791960781..a78a879e7ef1 100644
--- a/arch/nds32/kernel/perf_event_cpu.c
+++ b/arch/nds32/kernel/perf_event_cpu.c
@@ -1363,7 +1363,6 @@ void
 perf_callchain_user(struct perf_callchain_entry_ctx *entry,
                    struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        unsigned long fp = 0;
        unsigned long gp = 0;
        unsigned long lp = 0;
@@ -1372,11 +1371,6 @@ perf_callchain_user(struct perf_callchain_entry_ctx 
*entry,
 
        leaf_fp = 0;
 
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               /* We don't support guest os callchain now */
-               return;
-       }
-
        perf_callchain_store(entry, regs->ipc);
        fp = regs->fp;
        gp = regs->gp;
@@ -1480,13 +1474,8 @@ void
 perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
                      struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        struct stackframe fr;
 
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               /* We don't support guest os callchain now */
-               return;
-       }
        fr.fp = regs->fp;
        fr.lp = regs->lp;
        fr.sp = regs->sp;
@@ -1495,32 +1484,17 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx 
*entry,
 
 unsigned long perf_instruction_pointer(struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
-
-       /* However, NDS32 does not support virtualization */
-       if (guest_cbs && guest_cbs->is_in_guest())
-               return guest_cbs->get_guest_ip();
-
        return instruction_pointer(regs);
 }
 
 unsigned long perf_misc_flags(struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        int misc = 0;
 
-       /* However, NDS32 does not support virtualization */
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               if (guest_cbs->is_user_mode())
-                       misc |= PERF_RECORD_MISC_GUEST_USER;
-               else
-                       misc |= PERF_RECORD_MISC_GUEST_KERNEL;
-       } else {
-               if (user_mode(regs))
-                       misc |= PERF_RECORD_MISC_USER;
-               else
-                       misc |= PERF_RECORD_MISC_KERNEL;
-       }
+       if (user_mode(regs))
+               misc |= PERF_RECORD_MISC_USER;
+       else
+               misc |= PERF_RECORD_MISC_KERNEL;
 
        return misc;
 }
diff --git a/arch/riscv/kernel/perf_callchain.c 
b/arch/riscv/kernel/perf_callchain.c
index 8ecfc4c128bc..1fc075b8f764 100644
--- a/arch/riscv/kernel/perf_callchain.c
+++ b/arch/riscv/kernel/perf_callchain.c
@@ -56,13 +56,8 @@ static unsigned long user_backtrace(struct 
perf_callchain_entry_ctx *entry,
 void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
                         struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
        unsigned long fp = 0;
 
-       /* RISC-V does not support perf in guest mode. */
-       if (guest_cbs && guest_cbs->is_in_guest())
-               return;
-
        fp = regs->s0;
        perf_callchain_store(entry, regs->epc);
 
@@ -79,13 +74,5 @@ static bool fill_callchain(void *entry, unsigned long pc)
 void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
                           struct pt_regs *regs)
 {
-       struct perf_guest_info_callbacks *guest_cbs = perf_get_guest_cbs();
-
-       /* RISC-V does not support perf in guest mode. */
-       if (guest_cbs && guest_cbs->is_in_guest()) {
-               pr_warn("RISC-V does not support perf in guest mode!");
-               return;
-       }
-
        walk_stackframe(NULL, regs, fill_callchain, entry);
 }
-- 
2.34.0.rc0.344.g81b53c2807-goog




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.