- Simplify paravirt patching machinery by removing the now unused
clobber mask -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmOYkNQACgkQEsHwGGHe VUqflhAAnZBE/UzP499WcdjvnnQWLORfjUzAyU157U/08iMCx5qF/Qw73SrQwjIX XPWiqi0gvLS/2eDK02UylBF5reNUuATNO5wavGb0ORUKmDytcklZSzoygunByvrG fco2DXw99qQ2xhZ4fU7UbVoEek7P7nxM33dMfZjeiGldPSiRKV8pmtTG4Gmq5Ihl gEI1MLKw75oTg3t/VJqPoENv+wIBH/i2Q+oFr7E9cUoO/3T94OsKgeuCf0f+tINY YQtiFYFQGLzMEQlPnGBj+2S7usocAs80RCjvRSMMXhuC6hmoGBibw2/u25s+QmY/ yHYsmxQ+a4dEFiv/8jBAxJew/eQwiz0LSTteVS8/2cV4lhiNJHb8L2AV+xHms8Az fPTYGEX4GbykZPCemVI/y3saVbPOidGIoOUvOqML8LeQYURntgh1KleTmF5UweR+ ZMwEbXOS0Ni7wsB1Tfj/A21eGOG8dFzhszZBz8QjhtQHgckeF/JtAsNWSVRdhRyz Z0Cm1+XPftNx2eus6T7i6y9Kj8QSKszsDs+oLFvhiO8BkeJhLn9w3IQXCsDjVeZU y0Qx3VakL4MK3Im+Ah/ZM6IQQuGR3ld8x1jQJkp3FAylmznqSjYl1MoUA5MZwnwv M3yNGcLFO5uIjBfvFwBQXH28FkSS7tL9OfmtDyrEk2ITILmGqBU= =LcBv -----END PGP SIGNATURE----- Merge tag 'x86_paravirt_for_v6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull x86 paravirt update from Borislav Petkov: - Simplify paravirt patching machinery by removing the now unused clobber mask * tag 'x86_paravirt_for_v6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/paravirt: Remove clobber bitmask from .parainstructions
This commit is contained in:
commit
82c72902c5
@ -2,37 +2,6 @@
|
||||
#ifndef _ASM_X86_PARAVIRT_TYPES_H
|
||||
#define _ASM_X86_PARAVIRT_TYPES_H
|
||||
|
||||
/* Bitmask of what can be clobbered: usually at least eax. */
|
||||
#define CLBR_EAX (1 << 0)
|
||||
#define CLBR_ECX (1 << 1)
|
||||
#define CLBR_EDX (1 << 2)
|
||||
#define CLBR_EDI (1 << 3)
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
/* CLBR_ANY should match all regs platform has. For i386, that's just it */
|
||||
#define CLBR_ANY ((1 << 4) - 1)
|
||||
|
||||
#define CLBR_ARG_REGS (CLBR_EAX | CLBR_EDX | CLBR_ECX)
|
||||
#define CLBR_RET_REG (CLBR_EAX | CLBR_EDX)
|
||||
#else
|
||||
#define CLBR_RAX CLBR_EAX
|
||||
#define CLBR_RCX CLBR_ECX
|
||||
#define CLBR_RDX CLBR_EDX
|
||||
#define CLBR_RDI CLBR_EDI
|
||||
#define CLBR_RSI (1 << 4)
|
||||
#define CLBR_R8 (1 << 5)
|
||||
#define CLBR_R9 (1 << 6)
|
||||
#define CLBR_R10 (1 << 7)
|
||||
#define CLBR_R11 (1 << 8)
|
||||
|
||||
#define CLBR_ANY ((1 << 9) - 1)
|
||||
|
||||
#define CLBR_ARG_REGS (CLBR_RDI | CLBR_RSI | CLBR_RDX | \
|
||||
CLBR_RCX | CLBR_R8 | CLBR_R9)
|
||||
#define CLBR_RET_REG (CLBR_RAX)
|
||||
|
||||
#endif /* X86_64 */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/desc_defs.h>
|
||||
@ -279,27 +248,23 @@ extern struct paravirt_patch_template pv_ops;
|
||||
#define paravirt_type(op) \
|
||||
[paravirt_typenum] "i" (PARAVIRT_PATCH(op)), \
|
||||
[paravirt_opptr] "m" (pv_ops.op)
|
||||
#define paravirt_clobber(clobber) \
|
||||
[paravirt_clobber] "i" (clobber)
|
||||
|
||||
/*
|
||||
* Generate some code, and mark it as patchable by the
|
||||
* apply_paravirt() alternate instruction patcher.
|
||||
*/
|
||||
#define _paravirt_alt(insn_string, type, clobber) \
|
||||
#define _paravirt_alt(insn_string, type) \
|
||||
"771:\n\t" insn_string "\n" "772:\n" \
|
||||
".pushsection .parainstructions,\"a\"\n" \
|
||||
_ASM_ALIGN "\n" \
|
||||
_ASM_PTR " 771b\n" \
|
||||
" .byte " type "\n" \
|
||||
" .byte 772b-771b\n" \
|
||||
" .short " clobber "\n" \
|
||||
_ASM_ALIGN "\n" \
|
||||
".popsection\n"
|
||||
|
||||
/* Generate patchable code, with the default asm parameters. */
|
||||
#define paravirt_alt(insn_string) \
|
||||
_paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]")
|
||||
_paravirt_alt(insn_string, "%c[paravirt_typenum]")
|
||||
|
||||
/* Simple instruction patching code. */
|
||||
#define NATIVE_LABEL(a,x,b) "\n\t.globl " a #x "_" #b "\n" a #x "_" #b ":\n\t"
|
||||
@ -451,20 +416,19 @@ int paravirt_disable_iospace(void);
|
||||
})
|
||||
|
||||
|
||||
#define ____PVOP_CALL(ret, op, clbr, call_clbr, extra_clbr, ...) \
|
||||
#define ____PVOP_CALL(ret, op, call_clbr, extra_clbr, ...) \
|
||||
({ \
|
||||
PVOP_CALL_ARGS; \
|
||||
PVOP_TEST_NULL(op); \
|
||||
asm volatile(paravirt_alt(PARAVIRT_CALL) \
|
||||
: call_clbr, ASM_CALL_CONSTRAINT \
|
||||
: paravirt_type(op), \
|
||||
paravirt_clobber(clbr), \
|
||||
##__VA_ARGS__ \
|
||||
: "memory", "cc" extra_clbr); \
|
||||
ret; \
|
||||
})
|
||||
|
||||
#define ____PVOP_ALT_CALL(ret, op, alt, cond, clbr, call_clbr, \
|
||||
#define ____PVOP_ALT_CALL(ret, op, alt, cond, call_clbr, \
|
||||
extra_clbr, ...) \
|
||||
({ \
|
||||
PVOP_CALL_ARGS; \
|
||||
@ -473,45 +437,44 @@ int paravirt_disable_iospace(void);
|
||||
alt, cond) \
|
||||
: call_clbr, ASM_CALL_CONSTRAINT \
|
||||
: paravirt_type(op), \
|
||||
paravirt_clobber(clbr), \
|
||||
##__VA_ARGS__ \
|
||||
: "memory", "cc" extra_clbr); \
|
||||
ret; \
|
||||
})
|
||||
|
||||
#define __PVOP_CALL(rettype, op, ...) \
|
||||
____PVOP_CALL(PVOP_RETVAL(rettype), op, CLBR_ANY, \
|
||||
____PVOP_CALL(PVOP_RETVAL(rettype), op, \
|
||||
PVOP_CALL_CLOBBERS, EXTRA_CLOBBERS, ##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_ALT_CALL(rettype, op, alt, cond, ...) \
|
||||
____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op, alt, cond, CLBR_ANY,\
|
||||
____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op, alt, cond, \
|
||||
PVOP_CALL_CLOBBERS, EXTRA_CLOBBERS, \
|
||||
##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_CALLEESAVE(rettype, op, ...) \
|
||||
____PVOP_CALL(PVOP_RETVAL(rettype), op.func, CLBR_RET_REG, \
|
||||
____PVOP_CALL(PVOP_RETVAL(rettype), op.func, \
|
||||
PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_ALT_CALLEESAVE(rettype, op, alt, cond, ...) \
|
||||
____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op.func, alt, cond, \
|
||||
CLBR_RET_REG, PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
|
||||
PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
|
||||
|
||||
|
||||
#define __PVOP_VCALL(op, ...) \
|
||||
(void)____PVOP_CALL(, op, CLBR_ANY, PVOP_VCALL_CLOBBERS, \
|
||||
(void)____PVOP_CALL(, op, PVOP_VCALL_CLOBBERS, \
|
||||
VEXTRA_CLOBBERS, ##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_ALT_VCALL(op, alt, cond, ...) \
|
||||
(void)____PVOP_ALT_CALL(, op, alt, cond, CLBR_ANY, \
|
||||
(void)____PVOP_ALT_CALL(, op, alt, cond, \
|
||||
PVOP_VCALL_CLOBBERS, VEXTRA_CLOBBERS, \
|
||||
##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_VCALLEESAVE(op, ...) \
|
||||
(void)____PVOP_CALL(, op.func, CLBR_RET_REG, \
|
||||
(void)____PVOP_CALL(, op.func, \
|
||||
PVOP_VCALLEE_CLOBBERS, , ##__VA_ARGS__)
|
||||
|
||||
#define __PVOP_ALT_VCALLEESAVE(op, alt, cond, ...) \
|
||||
(void)____PVOP_ALT_CALL(, op.func, alt, cond, CLBR_RET_REG, \
|
||||
(void)____PVOP_ALT_CALL(, op.func, alt, cond, \
|
||||
PVOP_VCALLEE_CLOBBERS, , ##__VA_ARGS__)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user