|
@@ -505,13 +505,16 @@ void _paravirt_nop(void);
|
|
#define paravirt_nop ((void *)_paravirt_nop)
|
|
#define paravirt_nop ((void *)_paravirt_nop)
|
|
|
|
|
|
/* These all sit in the .parainstructions section to tell us what to patch. */
|
|
/* These all sit in the .parainstructions section to tell us what to patch. */
|
|
-struct paravirt_patch {
|
|
|
|
|
|
+struct paravirt_patch_site {
|
|
u8 *instr; /* original instructions */
|
|
u8 *instr; /* original instructions */
|
|
u8 instrtype; /* type of this instruction */
|
|
u8 instrtype; /* type of this instruction */
|
|
u8 len; /* length of original instruction */
|
|
u8 len; /* length of original instruction */
|
|
u16 clobbers; /* what registers you may clobber */
|
|
u16 clobbers; /* what registers you may clobber */
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+extern struct paravirt_patch_site __parainstructions[],
|
|
|
|
+ __parainstructions_end[];
|
|
|
|
+
|
|
#define paravirt_alt(insn_string, typenum, clobber) \
|
|
#define paravirt_alt(insn_string, typenum, clobber) \
|
|
"771:\n\t" insn_string "\n" "772:\n" \
|
|
"771:\n\t" insn_string "\n" "772:\n" \
|
|
".pushsection .parainstructions,\"a\"\n" \
|
|
".pushsection .parainstructions,\"a\"\n" \
|