Am Freitag, 26 August 2016, 11:50:10 schrieb Rui Teng: > The same logic appears twice and should probably be pulled out into a > function. > > Suggested-by: Michael Ellerman <m...@ellerman.id.au> > Signed-off-by: Rui Teng <rui.t...@linux.vnet.ibm.com> > --- > arch/powerpc/mm/hash_utils_64.c | 45 > +++++++++++++++++------------------------ 1 file changed, 19 > insertions(+), 26 deletions(-) > > diff --git a/arch/powerpc/mm/hash_utils_64.c > b/arch/powerpc/mm/hash_utils_64.c index 0821556..69ef702 100644 > --- a/arch/powerpc/mm/hash_utils_64.c > +++ b/arch/powerpc/mm/hash_utils_64.c > @@ -1460,6 +1460,23 @@ out_exit: > local_irq_restore(flags); > } > > +/* > + * Transactions are not aborted by tlbiel, only tlbie. > + * Without, syncing a page back to a block device w/ PIO could pick up > + * transactional data (bad!) so we force an abort here. Before the > + * sync the page will be made read-only, which will flush_hash_page. > + * BIG ISSUE here: if the kernel uses a page from userspace without > + * unmapping it first, it may see the speculated version. > + */ > +void local_tm_abort(int local) > +{ > + if (local && cpu_has_feature(CPU_FTR_TM) && current->thread.regs && > + MSR_TM_ACTIVE(current->thread.regs->msr)) { > + tm_enable(); > + tm_abort(TM_CAUSE_TLBI); > + } > +} > +
Since local_tm_abort is only used in this file, it should be static. Also, since both places calling it are guarded by CONFIG_PPC_TRANSACTIONAL_MEM, wouldn't it be cleaner if the #ifdef was here instead and the #else block defined an empty static inline function? Then the call sites wouldn't need to be guarded. -- []'s Thiago Jung Bauermann IBM Linux Technology Center