Re: [Xen-devel] [PATCH 1/5] arm/alternatives: Fix apply_alternatives() API
Hi, On 29/01/18 20:23, Stefano Stabellini wrote: On Mon, 29 Jan 2018, Andrew Cooper wrote: The !HAS_ALTERNATIVE case has bit-rotten and won't even compile. The x86 side of apply_alternatives() is void, while the ARM side returns int. However, the functions can't fail and no return values are checked. Switch the ARM side to be void as well. One observation is that __apply_alternatives_multi_stop() is only used at boot time, so can become __init and its static data can become __initdata Signed-off-by: Andrew Cooper Acked-by: Stefano Stabellini --- CC: Jan Beulich CC: Stefano Stabellini CC: Julien Grall CC: Konrad Rzeszutek Wilk CC: Ross Lagerwall TODO: Drop the !HAS_ALTERNATIVE case on ARM? Yeah, we could do. Julien, what do you think? Sounds good. In that case, we should remove all the reference of HAS_ALTERNATIVE in the code. Cheers, -- Julien Grall ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH 1/5] arm/alternatives: Fix apply_alternatives() API
On Mon, 29 Jan 2018, Andrew Cooper wrote: > The !HAS_ALTERNATIVE case has bit-rotten and won't even compile. > > The x86 side of apply_alternatives() is void, while the ARM side returns int. > However, the functions can't fail and no return values are checked. Switch > the ARM side to be void as well. > > One observation is that __apply_alternatives_multi_stop() is only used at boot > time, so can become __init and its static data can become __initdata > > Signed-off-by: Andrew Cooper Acked-by: Stefano Stabellini > --- > CC: Jan Beulich > CC: Stefano Stabellini > CC: Julien Grall > CC: Konrad Rzeszutek Wilk > CC: Ross Lagerwall > > TODO: Drop the !HAS_ALTERNATIVE case on ARM? Yeah, we could do. Julien, what do you think? > --- > xen/arch/arm/alternative.c| 18 +++--- > xen/include/asm-arm/alternative.h | 7 --- > 2 files changed, 11 insertions(+), 14 deletions(-) > > diff --git a/xen/arch/arm/alternative.c b/xen/arch/arm/alternative.c > index 9ffdc47..99112e1 100644 > --- a/xen/arch/arm/alternative.c > +++ b/xen/arch/arm/alternative.c > @@ -98,7 +98,7 @@ static u32 get_alt_insn(const struct alt_instr *alt, > * The region patched should be read-write to allow __apply_alternatives > * to replacing the instructions when necessary. > */ > -static int __apply_alternatives(const struct alt_region *region) > +static void __apply_alternatives(const struct alt_region *region) > { > const struct alt_instr *alt; > const u32 *replptr; > @@ -135,17 +135,15 @@ static int __apply_alternatives(const struct alt_region > *region) > > /* Nuke the instruction cache */ > invalidate_icache(); > - > -return 0; > } > > /* > * We might be patching the stop_machine state machine, so implement a > * really simple polling protocol here. > */ > -static int __apply_alternatives_multi_stop(void *unused) > +static int __init __apply_alternatives_multi_stop(void *unused) > { > -static int patched = 0; > +static int __initdata patched = 0; > > /* We always have a CPU 0 at this point (__init) */ > if ( smp_processor_id() ) > @@ -156,7 +154,6 @@ static int __apply_alternatives_multi_stop(void *unused) > } > else > { > -int ret; > struct alt_region region; > mfn_t xen_mfn = virt_to_mfn(_start); > paddr_t xen_size = _end - _start; > @@ -196,9 +193,7 @@ static int __apply_alternatives_multi_stop(void *unused) > region.begin = (void *)__alt_instructions - (void *)_start + xenmap; > region.end = (void *)__alt_instructions_end - (void *)_start + > xenmap; > > -ret = __apply_alternatives(®ion); > -/* The patching is not expected to fail during boot. */ > -BUG_ON(ret != 0); > +__apply_alternatives(®ion); > > unregister_virtual_region(&patch_region); > > @@ -228,14 +223,15 @@ void __init apply_alternatives_all(void) > BUG_ON(ret); > } > > -int apply_alternatives(const struct alt_instr *start, const struct alt_instr > *end) > +void apply_alternatives(const struct alt_instr *start, > +const struct alt_instr *end) > { > const struct alt_region region = { > .begin = start, > .end = end, > }; > > -return __apply_alternatives(®ion); > +__apply_alternatives(®ion); > } > > /* > diff --git a/xen/include/asm-arm/alternative.h > b/xen/include/asm-arm/alternative.h > index 6cc9d0d..49a055e 100644 > --- a/xen/include/asm-arm/alternative.h > +++ b/xen/include/asm-arm/alternative.h > @@ -25,7 +25,8 @@ struct alt_instr { > #define ALT_REPL_PTR(a) __ALT_PTR(a, alt_offset) > > void __init apply_alternatives_all(void); > -int apply_alternatives(const struct alt_instr *start, const struct alt_instr > *end); > +void apply_alternatives(const struct alt_instr *start, > +const struct alt_instr *end); > > #define ALTINSTR_ENTRY(feature) > \ > " .word 661b - .\n" /* label */ \ > @@ -158,9 +159,9 @@ static inline void apply_alternatives_all(void) > { > } > > -static inline int apply_alternatives(void *start, size_t length) > +static inline void apply_alternatives(const struct alt_instr *start, > + const struct alt_instr *end) > { > -return 0; > } > > #endif > -- > 2.1.4 > ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
[Xen-devel] [PATCH 1/5] arm/alternatives: Fix apply_alternatives() API
The !HAS_ALTERNATIVE case has bit-rotten and won't even compile. The x86 side of apply_alternatives() is void, while the ARM side returns int. However, the functions can't fail and no return values are checked. Switch the ARM side to be void as well. One observation is that __apply_alternatives_multi_stop() is only used at boot time, so can become __init and its static data can become __initdata Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Stefano Stabellini CC: Julien Grall CC: Konrad Rzeszutek Wilk CC: Ross Lagerwall TODO: Drop the !HAS_ALTERNATIVE case on ARM? --- xen/arch/arm/alternative.c| 18 +++--- xen/include/asm-arm/alternative.h | 7 --- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/xen/arch/arm/alternative.c b/xen/arch/arm/alternative.c index 9ffdc47..99112e1 100644 --- a/xen/arch/arm/alternative.c +++ b/xen/arch/arm/alternative.c @@ -98,7 +98,7 @@ static u32 get_alt_insn(const struct alt_instr *alt, * The region patched should be read-write to allow __apply_alternatives * to replacing the instructions when necessary. */ -static int __apply_alternatives(const struct alt_region *region) +static void __apply_alternatives(const struct alt_region *region) { const struct alt_instr *alt; const u32 *replptr; @@ -135,17 +135,15 @@ static int __apply_alternatives(const struct alt_region *region) /* Nuke the instruction cache */ invalidate_icache(); - -return 0; } /* * We might be patching the stop_machine state machine, so implement a * really simple polling protocol here. */ -static int __apply_alternatives_multi_stop(void *unused) +static int __init __apply_alternatives_multi_stop(void *unused) { -static int patched = 0; +static int __initdata patched = 0; /* We always have a CPU 0 at this point (__init) */ if ( smp_processor_id() ) @@ -156,7 +154,6 @@ static int __apply_alternatives_multi_stop(void *unused) } else { -int ret; struct alt_region region; mfn_t xen_mfn = virt_to_mfn(_start); paddr_t xen_size = _end - _start; @@ -196,9 +193,7 @@ static int __apply_alternatives_multi_stop(void *unused) region.begin = (void *)__alt_instructions - (void *)_start + xenmap; region.end = (void *)__alt_instructions_end - (void *)_start + xenmap; -ret = __apply_alternatives(®ion); -/* The patching is not expected to fail during boot. */ -BUG_ON(ret != 0); +__apply_alternatives(®ion); unregister_virtual_region(&patch_region); @@ -228,14 +223,15 @@ void __init apply_alternatives_all(void) BUG_ON(ret); } -int apply_alternatives(const struct alt_instr *start, const struct alt_instr *end) +void apply_alternatives(const struct alt_instr *start, +const struct alt_instr *end) { const struct alt_region region = { .begin = start, .end = end, }; -return __apply_alternatives(®ion); +__apply_alternatives(®ion); } /* diff --git a/xen/include/asm-arm/alternative.h b/xen/include/asm-arm/alternative.h index 6cc9d0d..49a055e 100644 --- a/xen/include/asm-arm/alternative.h +++ b/xen/include/asm-arm/alternative.h @@ -25,7 +25,8 @@ struct alt_instr { #define ALT_REPL_PTR(a)__ALT_PTR(a, alt_offset) void __init apply_alternatives_all(void); -int apply_alternatives(const struct alt_instr *start, const struct alt_instr *end); +void apply_alternatives(const struct alt_instr *start, +const struct alt_instr *end); #define ALTINSTR_ENTRY(feature) \ " .word 661b - .\n" /* label */ \ @@ -158,9 +159,9 @@ static inline void apply_alternatives_all(void) { } -static inline int apply_alternatives(void *start, size_t length) +static inline void apply_alternatives(const struct alt_instr *start, + const struct alt_instr *end) { -return 0; } #endif -- 2.1.4 ___ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel