lkml.org 
[lkml]   [2021]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/alternatives] x86/paravirt: Have only one paravirt patch function
    The following commit has been merged into the x86/alternatives branch of tip:

    Commit-ID: 054ac8ad5ebe4a69e1f0e842483821ddbe560121
    Gitweb: https://git.kernel.org/tip/054ac8ad5ebe4a69e1f0e842483821ddbe560121
    Author: Juergen Gross <jgross@suse.com>
    AuthorDate: Thu, 11 Mar 2021 15:23:19 +01:00
    Committer: Borislav Petkov <bp@suse.de>
    CommitterDate: Thu, 11 Mar 2021 20:11:09 +01:00

    x86/paravirt: Have only one paravirt patch function

    There is no need any longer to have different paravirt patch functions
    for native and Xen. Eliminate native_patch() and rename
    paravirt_patch_default() to paravirt_patch().

    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20210311142319.4723-15-jgross@suse.com
    ---
    arch/x86/include/asm/paravirt_types.h | 19 +------------------
    arch/x86/kernel/Makefile | 3 +--
    arch/x86/kernel/alternative.c | 2 +-
    arch/x86/kernel/paravirt.c | 20 ++------------------
    arch/x86/kernel/paravirt_patch.c | 11 -----------
    arch/x86/xen/enlighten_pv.c | 1 -
    6 files changed, 5 insertions(+), 51 deletions(-)
    delete mode 100644 arch/x86/kernel/paravirt_patch.c

    diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
    index 588ff14..9d1ddb7 100644
    --- a/arch/x86/include/asm/paravirt_types.h
    +++ b/arch/x86/include/asm/paravirt_types.h
    @@ -68,19 +68,6 @@ struct pv_info {
    const char *name;
    };

    -struct pv_init_ops {
    - /*
    - * Patch may replace one of the defined code sequences with
    - * arbitrary code, subject to the same register constraints.
    - * This generally means the code is not free to clobber any
    - * registers other than EAX. The patch function should return
    - * the number of bytes of code generated, as we nop pad the
    - * rest in generic code.
    - */
    - unsigned (*patch)(u8 type, void *insn_buff,
    - unsigned long addr, unsigned len);
    -} __no_randomize_layout;
    -
    #ifdef CONFIG_PARAVIRT_XXL
    struct pv_lazy_ops {
    /* Set deferred update mode, used for batching operations. */
    @@ -276,7 +263,6 @@ struct pv_lock_ops {
    * number for each function using the offset which we use to indicate
    * what to patch. */
    struct paravirt_patch_template {
    - struct pv_init_ops init;
    struct pv_cpu_ops cpu;
    struct pv_irq_ops irq;
    struct pv_mmu_ops mmu;
    @@ -317,10 +303,7 @@ extern void (*paravirt_iret)(void);
    /* Simple instruction patching code. */
    #define NATIVE_LABEL(a,x,b) "\n\t.globl " a #x "_" #b "\n" a #x "_" #b ":\n\t"

    -unsigned paravirt_patch_default(u8 type, void *insn_buff, unsigned long addr, unsigned len);
    -unsigned paravirt_patch_insns(void *insn_buff, unsigned len, const char *start, const char *end);
    -
    -unsigned native_patch(u8 type, void *insn_buff, unsigned long addr, unsigned len);
    +unsigned int paravirt_patch(u8 type, void *insn_buff, unsigned long addr, unsigned int len);

    int paravirt_disable_iospace(void);

    diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
    index 2ddf083..0704c2a 100644
    --- a/arch/x86/kernel/Makefile
    +++ b/arch/x86/kernel/Makefile
    @@ -35,7 +35,6 @@ KASAN_SANITIZE_sev-es.o := n
    KCSAN_SANITIZE := n

    OBJECT_FILES_NON_STANDARD_test_nx.o := y
    -OBJECT_FILES_NON_STANDARD_paravirt_patch.o := y

    ifdef CONFIG_FRAME_POINTER
    OBJECT_FILES_NON_STANDARD_ftrace_$(BITS).o := y
    @@ -121,7 +120,7 @@ obj-$(CONFIG_AMD_NB) += amd_nb.o
    obj-$(CONFIG_DEBUG_NMI_SELFTEST) += nmi_selftest.o

    obj-$(CONFIG_KVM_GUEST) += kvm.o kvmclock.o
    -obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch.o
    +obj-$(CONFIG_PARAVIRT) += paravirt.o
    obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= paravirt-spinlocks.o
    obj-$(CONFIG_PARAVIRT_CLOCK) += pvclock.o
    obj-$(CONFIG_X86_PMEM_LEGACY_DEVICE) += pmem.o
    diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
    index 76ad4ce..f810e6f 100644
    --- a/arch/x86/kernel/alternative.c
    +++ b/arch/x86/kernel/alternative.c
    @@ -616,7 +616,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start,
    BUG_ON(p->len > MAX_PATCH_LEN);
    /* prep the buffer with the original instructions */
    memcpy(insn_buff, p->instr, p->len);
    - used = pv_ops.init.patch(p->type, insn_buff, (unsigned long)p->instr, p->len);
    + used = paravirt_patch(p->type, insn_buff, (unsigned long)p->instr, p->len);

    BUG_ON(used > p->len);

    diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
    index 855ae08..d073026 100644
    --- a/arch/x86/kernel/paravirt.c
    +++ b/arch/x86/kernel/paravirt.c
    @@ -99,8 +99,8 @@ void __init native_pv_lock_init(void)
    static_branch_disable(&virt_spin_lock_key);
    }

    -unsigned paravirt_patch_default(u8 type, void *insn_buff,
    - unsigned long addr, unsigned len)
    +unsigned int paravirt_patch(u8 type, void *insn_buff, unsigned long addr,
    + unsigned int len)
    {
    /*
    * Neat trick to map patch type back to the call within the
    @@ -121,19 +121,6 @@ unsigned paravirt_patch_default(u8 type, void *insn_buff,
    return ret;
    }

    -unsigned paravirt_patch_insns(void *insn_buff, unsigned len,
    - const char *start, const char *end)
    -{
    - unsigned insn_len = end - start;
    -
    - /* Alternative instruction is too large for the patch site and we cannot continue: */
    - BUG_ON(insn_len > len || start == NULL);
    -
    - memcpy(insn_buff, start, insn_len);
    -
    - return insn_len;
    -}
    -
    struct static_key paravirt_steal_enabled;
    struct static_key paravirt_steal_rq_enabled;

    @@ -252,9 +239,6 @@ struct pv_info pv_info = {
    #define PTE_IDENT __PV_IS_CALLEE_SAVE(_paravirt_ident_64)

    struct paravirt_patch_template pv_ops = {
    - /* Init ops. */
    - .init.patch = native_patch,
    -
    /* Cpu ops. */
    .cpu.io_delay = native_io_delay,

    diff --git a/arch/x86/kernel/paravirt_patch.c b/arch/x86/kernel/paravirt_patch.c
    deleted file mode 100644
    index 10543dc..0000000
    --- a/arch/x86/kernel/paravirt_patch.c
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -// SPDX-License-Identifier: GPL-2.0
    -#include <linux/stringify.h>
    -
    -#include <asm/paravirt.h>
    -#include <asm/asm-offsets.h>
    -
    -unsigned int native_patch(u8 type, void *insn_buff, unsigned long addr,
    - unsigned int len)
    -{
    - return paravirt_patch_default(type, insn_buff, addr, len);
    -}
    diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
    index 08dca7b..4f18cd9 100644
    --- a/arch/x86/xen/enlighten_pv.c
    +++ b/arch/x86/xen/enlighten_pv.c
    @@ -1231,7 +1231,6 @@ asmlinkage __visible void __init xen_start_kernel(void)

    /* Install Xen paravirt ops */
    pv_info = xen_info;
    - pv_ops.init.patch = paravirt_patch_default;
    pv_ops.cpu = xen_cpu_ops;
    paravirt_iret = xen_iret;
    xen_init_irq_ops();
    \
     
     \ /
      Last update: 2021-03-12 12:57    [W:2.843 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site