x86/arm64: Expose the ALT_[ORIG|REPL]_PTR macros to header files.

That way common code can use the same macro to access
the most common attributes without much #ifdef.

Take advantage of it right away in the livepatch code.

Note: on ARM we use tabs to conform to the style of the file.

Acked-by: Julien Grall <julien.grall@arm.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Konrad Rzeszutek Wilk committed 2016-09-09 11:48:21 -04:00
1 parent aa1ae74cb5
commit 3e883d8b7a
4 files changed
+11 -6

No files matched your search

-4
View File
@@ -32,10 +32,6 @@
#include <asm/insn.h>
#include <asm/page.h>
#define __ALT_PTR(a,f) (u32 *)((void *)&(a)->f + (a)->f)
#define ALT_ORIG_PTR(a) __ALT_PTR(a, orig_offset)
#define ALT_REPL_PTR(a) __ALT_PTR(a, alt_offset)
extern const struct alt_instr __alt_instructions[], __alt_instructions_end[];
struct alt_region {
+2 -2
View File
@@ -621,8 +621,8 @@ static int prepare_payload(struct payload *payload,
for ( a = start; a < end; a++ )
{
const void *instr = &a->instr_offset + a->instr_offset;
const void *replacement = &a->repl_offset + a->repl_offset;
const void *instr = ALT_ORIG_PTR(a);
const void *replacement = ALT_REPL_PTR(a);
if ( (instr < region->start && instr >= region->end) ||
(replacement < region->start && replacement >= region->end) )
+5
View File
@@ -21,6 +21,11 @@ struct alt_instr {
u8 alt_len; /* size of new instruction(s), <= orig_len */
};
/* Xen: helpers used by common code. */
#define __ALT_PTR(a,f) ((u32 *)((void *)&(a)->f + (a)->f))
#define ALT_ORIG_PTR(a) __ALT_PTR(a, orig_offset)
#define ALT_REPL_PTR(a) __ALT_PTR(a, alt_offset)
void __init apply_alternatives_all(void);
int apply_alternatives(void *start, size_t length);
+4
View File
@@ -23,6 +23,10 @@ struct alt_instr {
u8 replacementlen; /* length of new instruction, <= instrlen */
};
#define __ALT_PTR(a,f) ((u8 *)((void *)&(a)->f + (a)->f))
#define ALT_ORIG_PTR(a) __ALT_PTR(a, instr_offset)
#define ALT_REPL_PTR(a) __ALT_PTR(a, repl_offset)
/* Similar to apply_alternatives except it can be run with IRQs enabled. */
extern void apply_alternatives_nocheck(struct alt_instr *start,
struct alt_instr *end);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.