On Wed, Feb 17, 2021 at 11:24:48AM +1100, David Gibson wrote: > On Mon, Feb 15, 2021 at 12:05:40PM +0530, Bharata B Rao wrote: > > H_RPT_INVALIDATE hcall needs to perform process scoped tlbie > > invalidations of L1 and nested guests from L0. This needs RS register > > for TLBIE instruction to contain both PID and LPID. Introduce > > primitives that execute tlbie instruction with both PID > > and LPID set in prepartion for H_RPT_INVALIDATE hcall. > > > > While we are here, move RIC_FLUSH definitions to header file > > and introduce helper rpti_pgsize_to_psize() that will be needed > > by the upcoming hcall. > > > > Signed-off-by: Bharata B Rao <bharata@xxxxxxxxxxxxx> > > --- > > .../include/asm/book3s/64/tlbflush-radix.h | 18 +++ > > arch/powerpc/mm/book3s64/radix_tlb.c | 122 +++++++++++++++++- > > 2 files changed, 136 insertions(+), 4 deletions(-) > > > > diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > > index 94439e0cefc9..aace7e9b2397 100644 > > --- a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > > +++ b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > > @@ -4,6 +4,10 @@ > > > > #include <asm/hvcall.h> > > > > +#define RIC_FLUSH_TLB 0 > > +#define RIC_FLUSH_PWC 1 > > +#define RIC_FLUSH_ALL 2 > > + > > struct vm_area_struct; > > struct mm_struct; > > struct mmu_gather; > > @@ -21,6 +25,20 @@ static inline u64 psize_to_rpti_pgsize(unsigned long psize) > > return H_RPTI_PAGE_ALL; > > } > > > > +static inline int rpti_pgsize_to_psize(unsigned long page_size) > > +{ > > + if (page_size == H_RPTI_PAGE_4K) > > + return MMU_PAGE_4K; > > + if (page_size == H_RPTI_PAGE_64K) > > + return MMU_PAGE_64K; > > + if (page_size == H_RPTI_PAGE_2M) > > + return MMU_PAGE_2M; > > + if (page_size == H_RPTI_PAGE_1G) > > + return MMU_PAGE_1G; > > + else > > + return MMU_PAGE_64K; /* Default */ > > +} > > Would it make sense to put the H_RPT_PAGE_ tags into the > mmu_psize_defs table and scan that here, rather than open coding the > conversion? I will give this a try and see how it looks. Otherwise the changes in the patch which are mainly about introducing primitives that require to set both PID and LPID for tlbie instruction - do they look right? Regards, Bharata.