Re: [PATCH v3 4/7] x86/mm: Introduce _set_memory_prot()
On 2020-02-29 3:33 p.m., Dan Williams wrote: > On Fri, Feb 21, 2020 at 10:25 AM Logan Gunthorpe wrote: >> >> For use in the 32bit arch_add_memory() to set the pgprot type of the >> memory to add. >> >> Cc: Thomas Gleixner >> Cc: Ingo Molnar >> Cc: Borislav Petkov >> Cc: "H. Peter Anvin" >> Cc: x...@kernel.org >> Cc: Dave Hansen >> Cc: Andy Lutomirski >> Cc: Peter Zijlstra >> Signed-off-by: Logan Gunthorpe >> --- >> arch/x86/include/asm/set_memory.h | 1 + >> arch/x86/mm/pat/set_memory.c | 7 +++ >> 2 files changed, 8 insertions(+) >> >> diff --git a/arch/x86/include/asm/set_memory.h >> b/arch/x86/include/asm/set_memory.h >> index 64c3dce374e5..0aca959cf9a4 100644 >> --- a/arch/x86/include/asm/set_memory.h >> +++ b/arch/x86/include/asm/set_memory.h >> @@ -34,6 +34,7 @@ >> * The caller is required to take care of these. >> */ >> >> +int _set_memory_prot(unsigned long addr, int numpages, pgprot_t prot); > > I wonder if this should be separated from the naming convention of the > other routines because this is only an internal helper for code paths > where the prot was established by an upper layer. For example, I > expect that the kernel does not want new usages to make the mistake of > calling: > >_set_memory_prot(..., pgprot_writecombine(pgprot)) > > ...instead of > > _set_memory_wc() > > I'm thinking just a double underscore rename (__set_memory_prot) and a > kerneldoc comment for that pointing people to use the direct > _set_memory_ helpers. Thanks! Will do. Note, though, that even _set_memory_wc() is an internal x86-specific function. But the extra comment and underscore still make sense. > With that you can add: > > Reviewed-by: Dan Williams >
Re: [PATCH v3 4/7] x86/mm: Introduce _set_memory_prot()
On Fri, Feb 21, 2020 at 10:25 AM Logan Gunthorpe wrote: > > For use in the 32bit arch_add_memory() to set the pgprot type of the > memory to add. > > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: Borislav Petkov > Cc: "H. Peter Anvin" > Cc: x...@kernel.org > Cc: Dave Hansen > Cc: Andy Lutomirski > Cc: Peter Zijlstra > Signed-off-by: Logan Gunthorpe > --- > arch/x86/include/asm/set_memory.h | 1 + > arch/x86/mm/pat/set_memory.c | 7 +++ > 2 files changed, 8 insertions(+) > > diff --git a/arch/x86/include/asm/set_memory.h > b/arch/x86/include/asm/set_memory.h > index 64c3dce374e5..0aca959cf9a4 100644 > --- a/arch/x86/include/asm/set_memory.h > +++ b/arch/x86/include/asm/set_memory.h > @@ -34,6 +34,7 @@ > * The caller is required to take care of these. > */ > > +int _set_memory_prot(unsigned long addr, int numpages, pgprot_t prot); I wonder if this should be separated from the naming convention of the other routines because this is only an internal helper for code paths where the prot was established by an upper layer. For example, I expect that the kernel does not want new usages to make the mistake of calling: _set_memory_prot(..., pgprot_writecombine(pgprot)) ...instead of _set_memory_wc() I'm thinking just a double underscore rename (__set_memory_prot) and a kerneldoc comment for that pointing people to use the direct _set_memory_ helpers. With that you can add: Reviewed-by: Dan Williams
[PATCH v3 4/7] x86/mm: Introduce _set_memory_prot()
For use in the 32bit arch_add_memory() to set the pgprot type of the memory to add. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: "H. Peter Anvin" Cc: x...@kernel.org Cc: Dave Hansen Cc: Andy Lutomirski Cc: Peter Zijlstra Signed-off-by: Logan Gunthorpe --- arch/x86/include/asm/set_memory.h | 1 + arch/x86/mm/pat/set_memory.c | 7 +++ 2 files changed, 8 insertions(+) diff --git a/arch/x86/include/asm/set_memory.h b/arch/x86/include/asm/set_memory.h index 64c3dce374e5..0aca959cf9a4 100644 --- a/arch/x86/include/asm/set_memory.h +++ b/arch/x86/include/asm/set_memory.h @@ -34,6 +34,7 @@ * The caller is required to take care of these. */ +int _set_memory_prot(unsigned long addr, int numpages, pgprot_t prot); int _set_memory_uc(unsigned long addr, int numpages); int _set_memory_wc(unsigned long addr, int numpages); int _set_memory_wt(unsigned long addr, int numpages); diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index c4aedd00c1ba..2ba83d53d835 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -1792,6 +1792,13 @@ static inline int cpa_clear_pages_array(struct page **pages, int numpages, CPA_PAGES_ARRAY, pages); } +int _set_memory_prot(unsigned long addr, int numpages, pgprot_t prot) +{ + return change_page_attr_set_clr(, numpages, prot, + __pgprot(~pgprot_val(prot)), 0, 0, + NULL); +} + int _set_memory_uc(unsigned long addr, int numpages) { /* -- 2.20.1