Skip to content

Commit

Permalink
x86/paravirt: have only one paravirt patch function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jgross1 authored and intel-lab-lkp committed Nov 20, 2020
1 parent fd8d46a commit 340df5e
Show file tree
Hide file tree
Showing 6 changed files with 5 additions and 38 deletions.
19 changes: 1 addition & 18 deletions arch/x86/include/asm/paravirt_types.h
Expand Up @@ -74,19 +74,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. */
Expand Down Expand Up @@ -282,7 +269,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;
Expand Down Expand Up @@ -323,10 +309,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 paravirt_patch(u8 type, void *insn_buff, unsigned long addr, unsigned len);

int paravirt_disable_iospace(void);

Expand Down
3 changes: 1 addition & 2 deletions arch/x86/kernel/Makefile
Expand Up @@ -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
Expand Down Expand Up @@ -122,7 +121,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
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/alternative.c
Expand Up @@ -617,7 +617,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);

Expand Down
7 changes: 2 additions & 5 deletions arch/x86/kernel/paravirt.c
Expand Up @@ -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 paravirt_patch(u8 type, void *insn_buff, unsigned long addr,
unsigned len)
{
/*
* Neat trick to map patch type back to the call within the
Expand Down Expand Up @@ -255,9 +255,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,

Expand Down
11 changes: 0 additions & 11 deletions arch/x86/kernel/paravirt_patch.c

This file was deleted.

1 change: 0 additions & 1 deletion arch/x86/xen/enlighten_pv.c
Expand Up @@ -1218,7 +1218,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();
Expand Down

0 comments on commit 340df5e

Please sign in to comment.