On Mon Nov 7, 2022 at 4:58 PM AEST, Benjamin Gray wrote: > On Thu, 2022-11-03 at 11:39 +1100, Benjamin Gray wrote: > > On Wed, 2022-11-02 at 09:56 +0000, Christophe Leroy wrote: > > > By the way, 'extern' keyword is pointless and deprecated for > > > functions > > > prototypes, please don't add new ones, even if other historical > > > prototypes have one. > > > > This and the above commented parts match the style of the surrounding > > implementations. For example, > > > > static inline void local_flush_tlb_mm(struct mm_struct *mm) > > { > > if (radix_enabled()) > > return radix__local_flush_tlb_mm(mm); > > return hash__local_flush_tlb_mm(mm); > > } > > > > I am not going to add code that is inconsistent with the surrounding > > code. That just causes confusion later down the line when readers > > wonder why this function is special compared to the others. If it > > needs > > to use modern style, then I would be happy to include a patch that > > modernises the surrounding code first. > > > > Though why the hash__* functions are empty I'm not sure... If they > > were > > not implemented I would have expected a BUILD_BUG(). If they are > > unnecessary due to hash itself, it's odd that they exist (as you > > point > > out for the new one). > > From what I can see in the history, the empty hash functions were > originally introduced as 64-bit compatibility definitions for the hash > MMU (which I guess doesn't require any action).
Yeah the hash MMU does hash PTE update and TLB flushing in the Linux pte update APIs (which end up at hash__pte_update()). By the time Linux calls flush_tlb_xxx(), the powerpc code had already done the necessary TLB flushing. > These empty functions > were shuffled around, then eventually prefixed with hash__* to make way > for the radix variants, which are hidden behind a generic > 'local_flush_tlb_mm' etc. implementation as we see today. So basically, > the empty hash__* functions no longer (never, really) served a purpose > once the generic wrapper was added. I'll add a patch to delete them and > clean up the return voids. Yeah I think you got it - the functions had to be there pre-radix because they were required by core code, and when radix was added it probably just followed a template. Removing empty hash__ functions should be fine I think. Thanks, Nick