Message ID | 1474479154-20991-16-git-send-email-konrad.wilk@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 09/21/2016 06:32 PM, Konrad Rzeszutek Wilk wrote: > It is exactly the same in both platforms. > > No functional change. > > Acked-by: Julien Grall <julien.grall@arm.com> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> > --- > Cc: Julien Grall <julien.grall@arm.com> > Cc: Stefano Stabellini <sstabellini@kernel.org> > > v3: New submission. > v4: s/arch_livepatch_insn_len/livepatch_insn_len/ > s/PATCH_INSN_SIZE/ARCH_PATCH_INSN_SIZE/ > v5: Added Julien's Acked-by. > Fixed comments. > - Rebase on top "livepatch: Drop _jmp from arch_livepatch_[apply,revert]_jmp" > - s/_jmp// > --- > xen/arch/arm/arm32/livepatch.c | 17 +---------------- > xen/arch/arm/arm64/livepatch.c | 17 +---------------- > xen/arch/arm/livepatch.c | 17 +++++++++++++++++ > 3 files changed, 19 insertions(+), 32 deletions(-) > > diff --git a/xen/arch/arm/arm32/livepatch.c b/xen/arch/arm/arm32/livepatch.c > index 3f47326..7e600f2 100644 > --- a/xen/arch/arm/arm32/livepatch.c > +++ b/xen/arch/arm/arm32/livepatch.c > @@ -74,22 +74,7 @@ void arch_livepatch_apply(struct livepatch_func *func) > clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); > } > > -void arch_livepatch_revert(const struct livepatch_func *func) > -{ > - uint32_t *new_ptr; > - unsigned int i, len; > - > - new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; > - len = livepatch_insn_len(func) / sizeof(uint32_t); > - for ( i = 0; i < len; i++ ) > - { > - uint32_t insn; > - > - memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); > - /* PATCH! */ > - *(new_ptr + i) = insn; > - } > -} > +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ > > int arch_livepatch_verify_elf(const struct livepatch_elf *elf) > { > diff --git a/xen/arch/arm/arm64/livepatch.c b/xen/arch/arm/arm64/livepatch.c > index ea8044d..a7a292f 100644 > --- a/xen/arch/arm/arm64/livepatch.c > +++ b/xen/arch/arm/arm64/livepatch.c > @@ -61,22 +61,7 @@ void arch_livepatch_apply(struct livepatch_func *func) > clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); > } > > -void arch_livepatch_revert(const struct livepatch_func *func) > -{ > - uint32_t *new_ptr; > - unsigned int i, len; > - > - new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; > - len = livepatch_insn_len(func) / sizeof(uint32_t); > - for ( i = 0; i < len; i++ ) > - { > - uint32_t insn; > - > - memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); > - /* PATCH! */ > - *(new_ptr + i) = insn; > - } > -} > +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ > > int arch_livepatch_verify_elf(const struct livepatch_elf *elf) > { > diff --git a/xen/arch/arm/livepatch.c b/xen/arch/arm/livepatch.c > index 6ee7081..2d62a24 100644 > --- a/xen/arch/arm/livepatch.c > +++ b/xen/arch/arm/livepatch.c > @@ -69,6 +69,23 @@ int arch_livepatch_verify_func(const struct livepatch_func *func) > return 0; > } > > +void arch_livepatch_revert(const struct livepatch_func *func) > +{ > + uint32_t *new_ptr; > + unsigned int i, len; > + > + new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; > + len = livepatch_insn_len(func) / sizeof(uint32_t); > + for ( i = 0; i < len; i++ ) > + { > + uint32_t insn; > + > + memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); > + /* PATCH! */ > + *(new_ptr + i) = insn; > + } > +} > + Same as previously, can this not be done with a simple memcpy?
diff --git a/xen/arch/arm/arm32/livepatch.c b/xen/arch/arm/arm32/livepatch.c index 3f47326..7e600f2 100644 --- a/xen/arch/arm/arm32/livepatch.c +++ b/xen/arch/arm/arm32/livepatch.c @@ -74,22 +74,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ - uint32_t *new_ptr; - unsigned int i, len; - - new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; - len = livepatch_insn_len(func) / sizeof(uint32_t); - for ( i = 0; i < len; i++ ) - { - uint32_t insn; - - memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); - /* PATCH! */ - *(new_ptr + i) = insn; - } -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/arm64/livepatch.c b/xen/arch/arm/arm64/livepatch.c index ea8044d..a7a292f 100644 --- a/xen/arch/arm/arm64/livepatch.c +++ b/xen/arch/arm/arm64/livepatch.c @@ -61,22 +61,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ - uint32_t *new_ptr; - unsigned int i, len; - - new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; - len = livepatch_insn_len(func) / sizeof(uint32_t); - for ( i = 0; i < len; i++ ) - { - uint32_t insn; - - memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); - /* PATCH! */ - *(new_ptr + i) = insn; - } -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/livepatch.c b/xen/arch/arm/livepatch.c index 6ee7081..2d62a24 100644 --- a/xen/arch/arm/livepatch.c +++ b/xen/arch/arm/livepatch.c @@ -69,6 +69,23 @@ int arch_livepatch_verify_func(const struct livepatch_func *func) return 0; } +void arch_livepatch_revert(const struct livepatch_func *func) +{ + uint32_t *new_ptr; + unsigned int i, len; + + new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; + len = livepatch_insn_len(func) / sizeof(uint32_t); + for ( i = 0; i < len; i++ ) + { + uint32_t insn; + + memcpy(&insn, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); + /* PATCH! */ + *(new_ptr + i) = insn; + } +} + void arch_livepatch_post_action(void) { /* arch_livepatch_revive has nuked the instruction cache. */