Message ID | 20201103121721.5166-4-will@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On Tue, Nov 03, 2020 at 12:17:20PM +0000, Will Deacon wrote: > In preparation for patching the internals of READ_ONCE() itself, replace > its usage on the alternatives patching patch with a volatile variable > instead. > > Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> > Signed-off-by: Will Deacon <will@kernel.org> Acked-by: Mark Rutland <mark.rutland@arm.com> Mark. > --- > arch/arm64/kernel/alternative.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c > index 73039949b5ce..a57cffb752e8 100644 > --- a/arch/arm64/kernel/alternative.c > +++ b/arch/arm64/kernel/alternative.c > @@ -21,7 +21,8 @@ > #define ALT_ORIG_PTR(a) __ALT_PTR(a, orig_offset) > #define ALT_REPL_PTR(a) __ALT_PTR(a, alt_offset) > > -static int all_alternatives_applied; > +/* Volatile, as we may be patching the guts of READ_ONCE() */ > +static volatile int all_alternatives_applied; > > static DECLARE_BITMAP(applied_alternatives, ARM64_NCAPS); > > @@ -205,7 +206,7 @@ static int __apply_alternatives_multi_stop(void *unused) > > /* We always have a CPU 0 at this point (__init) */ > if (smp_processor_id()) { > - while (!READ_ONCE(all_alternatives_applied)) > + while (!all_alternatives_applied) > cpu_relax(); > isb(); > } else { > @@ -217,7 +218,7 @@ static int __apply_alternatives_multi_stop(void *unused) > BUG_ON(all_alternatives_applied); > __apply_alternatives(®ion, false, remaining_capabilities); > /* Barriers provided by the cache flushing */ > - WRITE_ONCE(all_alternatives_applied, 1); > + all_alternatives_applied = 1; > } > > return 0; > -- > 2.29.1.341.ge80a0c044ae-goog >
diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c index 73039949b5ce..a57cffb752e8 100644 --- a/arch/arm64/kernel/alternative.c +++ b/arch/arm64/kernel/alternative.c @@ -21,7 +21,8 @@ #define ALT_ORIG_PTR(a) __ALT_PTR(a, orig_offset) #define ALT_REPL_PTR(a) __ALT_PTR(a, alt_offset) -static int all_alternatives_applied; +/* Volatile, as we may be patching the guts of READ_ONCE() */ +static volatile int all_alternatives_applied; static DECLARE_BITMAP(applied_alternatives, ARM64_NCAPS); @@ -205,7 +206,7 @@ static int __apply_alternatives_multi_stop(void *unused) /* We always have a CPU 0 at this point (__init) */ if (smp_processor_id()) { - while (!READ_ONCE(all_alternatives_applied)) + while (!all_alternatives_applied) cpu_relax(); isb(); } else { @@ -217,7 +218,7 @@ static int __apply_alternatives_multi_stop(void *unused) BUG_ON(all_alternatives_applied); __apply_alternatives(®ion, false, remaining_capabilities); /* Barriers provided by the cache flushing */ - WRITE_ONCE(all_alternatives_applied, 1); + all_alternatives_applied = 1; } return 0;