linux-parisc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC V1 21/31] parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
       [not found] <1643029028-12710-1-git-send-email-anshuman.khandual@arm.com>
@ 2022-01-24 12:56 ` Anshuman Khandual
  2022-01-25 16:53   ` Rolf Eike Beer
  0 siblings, 1 reply; 3+ messages in thread
From: Anshuman Khandual @ 2022-01-24 12:56 UTC (permalink / raw)
  To: linux-mm
  Cc: linux-kernel, hch, akpm, Anshuman Khandual, James E.J. Bottomley,
	linux-parisc

This defines and exports a platform specific custom vm_get_page_prot() via
subscribing ARCH_HAS_VM_GET_PAGE_PROT. Subsequently all __SXXX and __PXXX
macros can be dropped which are no longer needed.

Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: linux-parisc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
---
 arch/parisc/Kconfig               |  1 +
 arch/parisc/include/asm/pgtable.h | 20 ---------------
 arch/parisc/mm/init.c             | 41 +++++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 43c1c880def6..de512f120b50 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -10,6 +10,7 @@ config PARISC
 	select ARCH_HAS_ELF_RANDOMIZE
 	select ARCH_HAS_STRICT_KERNEL_RWX
 	select ARCH_HAS_UBSAN_SANITIZE_ALL
+	select ARCH_HAS_VM_GET_PAGE_PROT
 	select ARCH_NO_SG_CHAIN
 	select ARCH_SUPPORTS_HUGETLBFS if PA20
 	select ARCH_SUPPORTS_MEMORY_FAILURE
diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
index 3e7cf882639f..80d99b2b5913 100644
--- a/arch/parisc/include/asm/pgtable.h
+++ b/arch/parisc/include/asm/pgtable.h
@@ -269,26 +269,6 @@ extern void __update_cache(pte_t pte);
  * pages.
  */
 
-	 /*xwr*/
-#define __P000  PAGE_NONE
-#define __P001  PAGE_READONLY
-#define __P010  __P000 /* copy on write */
-#define __P011  __P001 /* copy on write */
-#define __P100  PAGE_EXECREAD
-#define __P101  PAGE_EXECREAD
-#define __P110  __P100 /* copy on write */
-#define __P111  __P101 /* copy on write */
-
-#define __S000  PAGE_NONE
-#define __S001  PAGE_READONLY
-#define __S010  PAGE_WRITEONLY
-#define __S011  PAGE_SHARED
-#define __S100  PAGE_EXECREAD
-#define __S101  PAGE_EXECREAD
-#define __S110  PAGE_RWX
-#define __S111  PAGE_RWX
-
-
 extern pgd_t swapper_pg_dir[]; /* declared in init_task.c */
 
 /* initial page tables for 0-8MB for kernel */
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
index 1ae31db9988f..c8316e97e1a2 100644
--- a/arch/parisc/mm/init.c
+++ b/arch/parisc/mm/init.c
@@ -866,3 +866,44 @@ void flush_tlb_all(void)
 	spin_unlock(&sid_lock);
 }
 #endif
+
+pgprot_t vm_get_page_prot(unsigned long vm_flags)
+{
+	switch (vm_flags & (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)) {
+	case VM_NONE:
+		return PAGE_NONE;
+	case VM_READ:
+		return PAGE_READONLY;
+	case VM_WRITE:
+		return PAGE_NONE;
+	case VM_READ | VM_WRITE:
+		return PAGE_READONLY;
+	case VM_EXEC:
+		return PAGE_EXECREAD;
+	case VM_EXEC | VM_READ:
+		return PAGE_EXECREAD;
+	case VM_EXEC | VM_WRITE:
+		return PAGE_EXECREAD;
+	case VM_EXEC | VM_READ | VM_WRITE:
+		return PAGE_EXECREAD;
+	case VM_SHARED:
+		return PAGE_NONE;
+	case VM_SHARED | VM_READ:
+		return PAGE_READONLY;
+	case VM_SHARED | VM_WRITE:
+		return PAGE_WRITEONLY;
+	case VM_SHARED | VM_READ | VM_WRITE:
+		return PAGE_SHARED;
+	case VM_SHARED | VM_EXEC:
+		return PAGE_EXECREAD;
+	case VM_SHARED | VM_EXEC | VM_READ:
+		return PAGE_EXECREAD;
+	case VM_SHARED | VM_EXEC | VM_WRITE:
+		return PAGE_RWX;
+	case VM_SHARED | VM_EXEC | VM_READ | VM_WRITE:
+		return PAGE_RWX;
+	default:
+		BUILD_BUG();
+	}
+}
+EXPORT_SYMBOL(vm_get_page_prot);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [RFC V1 21/31] parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
  2022-01-24 12:56 ` [RFC V1 21/31] parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
@ 2022-01-25 16:53   ` Rolf Eike Beer
  2022-01-27  4:06     ` Anshuman Khandual
  0 siblings, 1 reply; 3+ messages in thread
From: Rolf Eike Beer @ 2022-01-25 16:53 UTC (permalink / raw)
  To: linux-mm, Anshuman Khandual
  Cc: linux-kernel, hch, akpm, Anshuman Khandual, James E.J. Bottomley,
	linux-parisc

[-- Attachment #1: Type: text/plain, Size: 3661 bytes --]

Anshuman Khandual wrote:
> This defines and exports a platform specific custom vm_get_page_prot() via
> subscribing ARCH_HAS_VM_GET_PAGE_PROT. Subsequently all __SXXX and __PXXX
> macros can be dropped which are no longer needed.
> 
> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> Cc: linux-parisc@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
> ---
>  arch/parisc/Kconfig               |  1 +
>  arch/parisc/include/asm/pgtable.h | 20 ---------------
>  arch/parisc/mm/init.c             | 41 +++++++++++++++++++++++++++++++
>  3 files changed, 42 insertions(+), 20 deletions(-)
> 
> diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
> index 43c1c880def6..de512f120b50 100644
> --- a/arch/parisc/Kconfig
> +++ b/arch/parisc/Kconfig
> @@ -10,6 +10,7 @@ config PARISC
>  	select ARCH_HAS_ELF_RANDOMIZE
>  	select ARCH_HAS_STRICT_KERNEL_RWX
>  	select ARCH_HAS_UBSAN_SANITIZE_ALL
> +	select ARCH_HAS_VM_GET_PAGE_PROT
>  	select ARCH_NO_SG_CHAIN
>  	select ARCH_SUPPORTS_HUGETLBFS if PA20
>  	select ARCH_SUPPORTS_MEMORY_FAILURE
> diff --git a/arch/parisc/include/asm/pgtable.h
> b/arch/parisc/include/asm/pgtable.h index 3e7cf882639f..80d99b2b5913 100644
> --- a/arch/parisc/include/asm/pgtable.h
> +++ b/arch/parisc/include/asm/pgtable.h
> @@ -269,26 +269,6 @@ extern void __update_cache(pte_t pte);
>   * pages.
>   */
> 
> -	 /*xwr*/
> -#define __P000  PAGE_NONE
> -#define __P001  PAGE_READONLY
> -#define __P010  __P000 /* copy on write */
> -#define __P011  __P001 /* copy on write */
> -#define __P100  PAGE_EXECREAD
> -#define __P101  PAGE_EXECREAD
> -#define __P110  __P100 /* copy on write */
> -#define __P111  __P101 /* copy on write */
> -
> -#define __S000  PAGE_NONE
> -#define __S001  PAGE_READONLY
> -#define __S010  PAGE_WRITEONLY
> -#define __S011  PAGE_SHARED
> -#define __S100  PAGE_EXECREAD
> -#define __S101  PAGE_EXECREAD
> -#define __S110  PAGE_RWX
> -#define __S111  PAGE_RWX
> -
> -
>  extern pgd_t swapper_pg_dir[]; /* declared in init_task.c */
> 
>  /* initial page tables for 0-8MB for kernel */
> diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
> index 1ae31db9988f..c8316e97e1a2 100644
> --- a/arch/parisc/mm/init.c
> +++ b/arch/parisc/mm/init.c
> @@ -866,3 +866,44 @@ void flush_tlb_all(void)
>  	spin_unlock(&sid_lock);
>  }
>  #endif
> +
> +pgprot_t vm_get_page_prot(unsigned long vm_flags)
> +{
> +	switch (vm_flags & (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)) {
> +	case VM_NONE:
> +		return PAGE_NONE;
> +	case VM_READ:
> +		return PAGE_READONLY;
> +	case VM_WRITE:
> +		return PAGE_NONE;
> +	case VM_READ | VM_WRITE:
> +		return PAGE_READONLY;

This looks extremely strange. It probably is correct when it comes to CoW, how 
about including the comment that was in the original definitions for the cases 
where CoW is expected?

> +	case VM_EXEC:
> +		return PAGE_EXECREAD;
> +	case VM_EXEC | VM_READ:
> +		return PAGE_EXECREAD;
> +	case VM_EXEC | VM_WRITE:
> +		return PAGE_EXECREAD;
> +	case VM_EXEC | VM_READ | VM_WRITE:
> +		return PAGE_EXECREAD;
> +	case VM_SHARED:
> +		return PAGE_NONE;
> +	case VM_SHARED | VM_READ:
> +		return PAGE_READONLY;
> +	case VM_SHARED | VM_WRITE:
> +		return PAGE_WRITEONLY;
> +	case VM_SHARED | VM_READ | VM_WRITE:
> +		return PAGE_SHARED;
> +	case VM_SHARED | VM_EXEC:
> +		return PAGE_EXECREAD;
> +	case VM_SHARED | VM_EXEC | VM_READ:
> +		return PAGE_EXECREAD;
> +	case VM_SHARED | VM_EXEC | VM_WRITE:
> +		return PAGE_RWX;
> +	case VM_SHARED | VM_EXEC | VM_READ | VM_WRITE:
> +		return PAGE_RWX;
> +	default:
> +		BUILD_BUG();
> +	}
> +}
> +EXPORT_SYMBOL(vm_get_page_prot);


[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFC V1 21/31] parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
  2022-01-25 16:53   ` Rolf Eike Beer
@ 2022-01-27  4:06     ` Anshuman Khandual
  0 siblings, 0 replies; 3+ messages in thread
From: Anshuman Khandual @ 2022-01-27  4:06 UTC (permalink / raw)
  To: Rolf Eike Beer, linux-mm
  Cc: linux-kernel, hch, akpm, James E.J. Bottomley, linux-parisc



On 1/25/22 10:23 PM, Rolf Eike Beer wrote:
> Anshuman Khandual wrote:
>> This defines and exports a platform specific custom vm_get_page_prot() via
>> subscribing ARCH_HAS_VM_GET_PAGE_PROT. Subsequently all __SXXX and __PXXX
>> macros can be dropped which are no longer needed.
>>
>> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
>> Cc: linux-parisc@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
>> ---
>>  arch/parisc/Kconfig               |  1 +
>>  arch/parisc/include/asm/pgtable.h | 20 ---------------
>>  arch/parisc/mm/init.c             | 41 +++++++++++++++++++++++++++++++
>>  3 files changed, 42 insertions(+), 20 deletions(-)
>>
>> diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
>> index 43c1c880def6..de512f120b50 100644
>> --- a/arch/parisc/Kconfig
>> +++ b/arch/parisc/Kconfig
>> @@ -10,6 +10,7 @@ config PARISC
>>  	select ARCH_HAS_ELF_RANDOMIZE
>>  	select ARCH_HAS_STRICT_KERNEL_RWX
>>  	select ARCH_HAS_UBSAN_SANITIZE_ALL
>> +	select ARCH_HAS_VM_GET_PAGE_PROT
>>  	select ARCH_NO_SG_CHAIN
>>  	select ARCH_SUPPORTS_HUGETLBFS if PA20
>>  	select ARCH_SUPPORTS_MEMORY_FAILURE
>> diff --git a/arch/parisc/include/asm/pgtable.h
>> b/arch/parisc/include/asm/pgtable.h index 3e7cf882639f..80d99b2b5913 100644
>> --- a/arch/parisc/include/asm/pgtable.h
>> +++ b/arch/parisc/include/asm/pgtable.h
>> @@ -269,26 +269,6 @@ extern void __update_cache(pte_t pte);
>>   * pages.
>>   */
>>
>> -	 /*xwr*/
>> -#define __P000  PAGE_NONE
>> -#define __P001  PAGE_READONLY
>> -#define __P010  __P000 /* copy on write */
>> -#define __P011  __P001 /* copy on write */
>> -#define __P100  PAGE_EXECREAD
>> -#define __P101  PAGE_EXECREAD
>> -#define __P110  __P100 /* copy on write */
>> -#define __P111  __P101 /* copy on write */
>> -
>> -#define __S000  PAGE_NONE
>> -#define __S001  PAGE_READONLY
>> -#define __S010  PAGE_WRITEONLY
>> -#define __S011  PAGE_SHARED
>> -#define __S100  PAGE_EXECREAD
>> -#define __S101  PAGE_EXECREAD
>> -#define __S110  PAGE_RWX
>> -#define __S111  PAGE_RWX
>> -
>> -
>>  extern pgd_t swapper_pg_dir[]; /* declared in init_task.c */
>>
>>  /* initial page tables for 0-8MB for kernel */
>> diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
>> index 1ae31db9988f..c8316e97e1a2 100644
>> --- a/arch/parisc/mm/init.c
>> +++ b/arch/parisc/mm/init.c
>> @@ -866,3 +866,44 @@ void flush_tlb_all(void)
>>  	spin_unlock(&sid_lock);
>>  }
>>  #endif
>> +
>> +pgprot_t vm_get_page_prot(unsigned long vm_flags)
>> +{
>> +	switch (vm_flags & (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)) {
>> +	case VM_NONE:
>> +		return PAGE_NONE;
>> +	case VM_READ:
>> +		return PAGE_READONLY;
>> +	case VM_WRITE:
>> +		return PAGE_NONE;
>> +	case VM_READ | VM_WRITE:
>> +		return PAGE_READONLY;
> This looks extremely strange. It probably is correct when it comes to CoW, how 
> about including the comment that was in the original definitions for the cases 
> where CoW is expected?
> 

Assuming that you suggest the following four comments here, sure will add them.

-#define __P000  PAGE_NONE
-#define __P001  PAGE_READONLY
-#define __P010  __P000 /* copy on write */
-#define __P011  __P001 /* copy on write */
-#define __P100  PAGE_EXECREAD
-#define __P101  PAGE_EXECREAD
-#define __P110  __P100 /* copy on write */
-#define __P111  __P101 /* copy on write */

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-27  4:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1643029028-12710-1-git-send-email-anshuman.khandual@arm.com>
2022-01-24 12:56 ` [RFC V1 21/31] parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
2022-01-25 16:53   ` Rolf Eike Beer
2022-01-27  4:06     ` Anshuman Khandual

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).