All of lore.kernel.org
 help / color / mirror / Atom feed
From: shaggy@linux.vnet.ibm.com
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org, Paul Mackerras <paulus@au1.ibm.com>,
	Linuxppc-dev@ozlabs.org
Subject: [patch 5/6] powerpc: Add Strong Access Ordering
Date: Wed, 18 Jun 2008 17:32:59 -0500	[thread overview]
Message-ID: <20080618223329.493513729@linux.vnet.ibm.com> (raw)
In-Reply-To: 20080618223254.966080905@linux.vnet.ibm.com

Allow an application to enable Strong Access Ordering on specific pages of
memory on Power 7 hardware. Currently, power has a weaker memory model than
x86. Implementing a stronger memory model allows an emulator to more
efficiently translate x86 code into power code, resulting in faster code
execution.

On Power 7 hardware, storing 0b1110 in the WIMG bits of the hpte enables
strong access ordering mode for the memory page.  This patchset allows a
user to specify which pages are thus enabled by passing a new protection
bit through mmap() and mprotect().  I have tentatively defined this bit,
PROT_SAO, as 0x10.

Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
---

 arch/powerpc/kernel/syscalls.c |    3 +++
 include/asm-powerpc/mman.h     |   28 ++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

Index: linux-2.6.26-rc5/arch/powerpc/kernel/syscalls.c
===================================================================
--- linux-2.6.26-rc5.orig/arch/powerpc/kernel/syscalls.c
+++ linux-2.6.26-rc5/arch/powerpc/kernel/syscalls.c
@@ -143,6 +143,9 @@ static inline unsigned long do_mmap2(uns
 	struct file * file = NULL;
 	unsigned long ret = -EINVAL;
 
+	if (!arch_validate_prot(prot))
+		goto out;
+
 	if (shift) {
 		if (off & ((1 << shift) - 1))
 			goto out;
Index: linux-2.6.26-rc5/include/asm-powerpc/mman.h
===================================================================
--- linux-2.6.26-rc5.orig/include/asm-powerpc/mman.h
+++ linux-2.6.26-rc5/include/asm-powerpc/mman.h
@@ -1,7 +1,9 @@
 #ifndef _ASM_POWERPC_MMAN_H
 #define _ASM_POWERPC_MMAN_H
 
+#include <asm/cputable.h>
 #include <asm-generic/mman.h>
+#include <linux/mm.h>
 
 /*
  * This program is free software; you can redistribute it and/or
@@ -26,4 +28,30 @@
 #define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */
 #define MAP_NONBLOCK	0x10000		/* do not block on IO */
 
+/*
+ * This file is included by linux/mman.h, so we can't use cacl_vm_prot_bits()
+ * here.  How important is the optimization?
+ */
+static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot)
+{
+	return (prot & PROT_SAO) ? VM_SAO : 0;
+}
+#define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot)
+
+static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags)
+{
+	return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : 0;
+}
+#define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags)
+
+static inline int arch_validate_prot(unsigned long prot)
+{
+	if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO))
+		return 0;
+	if ((prot & PROT_SAO) && !cpu_has_feature(CPU_FTR_SAO))
+		return 0;
+	return 1;
+}
+#define arch_validate_prot(prot) arch_validate_prot(prot)
+
 #endif	/* _ASM_POWERPC_MMAN_H */

-- 

WARNING: multiple messages have this Message-ID (diff)
From: shaggy@linux.vnet.ibm.com
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Paul Mackerras <paulus@au1.ibm.com>,
	linux-mm@kvack.org, Linuxppc-dev@ozlabs.org
Subject: [patch 5/6] powerpc: Add Strong Access Ordering
Date: Wed, 18 Jun 2008 17:32:59 -0500	[thread overview]
Message-ID: <20080618223329.493513729@linux.vnet.ibm.com> (raw)
In-Reply-To: 20080618223254.966080905@linux.vnet.ibm.com

[-- Attachment #1: sao.patch --]
[-- Type: text/plain, Size: 2973 bytes --]

Allow an application to enable Strong Access Ordering on specific pages of
memory on Power 7 hardware. Currently, power has a weaker memory model than
x86. Implementing a stronger memory model allows an emulator to more
efficiently translate x86 code into power code, resulting in faster code
execution.

On Power 7 hardware, storing 0b1110 in the WIMG bits of the hpte enables
strong access ordering mode for the memory page.  This patchset allows a
user to specify which pages are thus enabled by passing a new protection
bit through mmap() and mprotect().  I have tentatively defined this bit,
PROT_SAO, as 0x10.

Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
---

 arch/powerpc/kernel/syscalls.c |    3 +++
 include/asm-powerpc/mman.h     |   28 ++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

Index: linux-2.6.26-rc5/arch/powerpc/kernel/syscalls.c
===================================================================
--- linux-2.6.26-rc5.orig/arch/powerpc/kernel/syscalls.c
+++ linux-2.6.26-rc5/arch/powerpc/kernel/syscalls.c
@@ -143,6 +143,9 @@ static inline unsigned long do_mmap2(uns
 	struct file * file = NULL;
 	unsigned long ret = -EINVAL;
 
+	if (!arch_validate_prot(prot))
+		goto out;
+
 	if (shift) {
 		if (off & ((1 << shift) - 1))
 			goto out;
Index: linux-2.6.26-rc5/include/asm-powerpc/mman.h
===================================================================
--- linux-2.6.26-rc5.orig/include/asm-powerpc/mman.h
+++ linux-2.6.26-rc5/include/asm-powerpc/mman.h
@@ -1,7 +1,9 @@
 #ifndef _ASM_POWERPC_MMAN_H
 #define _ASM_POWERPC_MMAN_H
 
+#include <asm/cputable.h>
 #include <asm-generic/mman.h>
+#include <linux/mm.h>
 
 /*
  * This program is free software; you can redistribute it and/or
@@ -26,4 +28,30 @@
 #define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */
 #define MAP_NONBLOCK	0x10000		/* do not block on IO */
 
+/*
+ * This file is included by linux/mman.h, so we can't use cacl_vm_prot_bits()
+ * here.  How important is the optimization?
+ */
+static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot)
+{
+	return (prot & PROT_SAO) ? VM_SAO : 0;
+}
+#define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot)
+
+static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags)
+{
+	return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : 0;
+}
+#define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags)
+
+static inline int arch_validate_prot(unsigned long prot)
+{
+	if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO))
+		return 0;
+	if ((prot & PROT_SAO) && !cpu_has_feature(CPU_FTR_SAO))
+		return 0;
+	return 1;
+}
+#define arch_validate_prot(prot) arch_validate_prot(prot)
+
 #endif	/* _ASM_POWERPC_MMAN_H */

-- 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2008-06-18 22:32 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-18 22:32 [patch 0/6] Strong Access Ordering page attributes for POWER7 shaggy
2008-06-18 22:32 ` shaggy
2008-06-18 22:32 ` [patch 1/6] mm: Allow architectures to define additional protection bits shaggy
2008-06-18 22:32   ` shaggy
2008-07-01  8:53   ` Andrew Morton
2008-07-01  8:53     ` Andrew Morton
2008-07-01 13:54     ` Dave Kleikamp
2008-07-01 13:54       ` Dave Kleikamp
2008-07-07  5:52       ` Benjamin Herrenschmidt
2008-07-07  5:52         ` Benjamin Herrenschmidt
2008-07-07 21:11         ` Hugh Dickins
2008-07-07 21:11           ` Hugh Dickins
2008-07-07 22:24           ` Benjamin Herrenschmidt
2008-07-07 22:24             ` Benjamin Herrenschmidt
2008-07-08  6:18             ` Benjamin Herrenschmidt
2008-07-08  6:18               ` Benjamin Herrenschmidt
2008-07-08 13:00               ` Hugh Dickins
2008-07-08 13:00                 ` Hugh Dickins
2008-07-08 13:35               ` Dave Kleikamp
2008-07-08 13:35                 ` Dave Kleikamp
2008-06-18 22:32 ` [patch 2/6] powerpc: hash_huge_page() should get the WIMG bits from the lpte shaggy
2008-06-18 22:32   ` shaggy
2008-06-18 22:32 ` [patch 3/6] powerpc: Define flags for Strong Access Ordering shaggy
2008-06-18 22:32   ` shaggy
2008-06-18 22:32 ` [patch 4/6] powerpc: Add SAO Feature bit to the cputable shaggy
2008-06-18 22:32   ` shaggy
2008-06-18 22:32 ` shaggy [this message]
2008-06-18 22:32   ` [patch 5/6] powerpc: Add Strong Access Ordering shaggy
2008-06-18 22:33 ` [patch 6/6] powerpc: Dont clear _PAGE_COHERENT when _PAGE_SAO is set shaggy
2008-06-18 22:33   ` shaggy
2008-07-03 23:39 ` [patch 0/6] Strong Access Ordering page attributes for POWER7 Benjamin Herrenschmidt
2008-07-03 23:39   ` Benjamin Herrenschmidt
2008-07-07 14:05   ` Dave Kleikamp
2008-07-07 14:05     ` Dave Kleikamp
2008-07-07 21:23     ` Joel Schopp
2008-07-07 21:23       ` Joel Schopp
2008-07-07 22:27       ` Benjamin Herrenschmidt
2008-07-07 22:27         ` Benjamin Herrenschmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080618223329.493513729@linux.vnet.ibm.com \
    --to=shaggy@linux.vnet.ibm.com \
    --cc=Linuxppc-dev@ozlabs.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-mm@kvack.org \
    --cc=paulus@au1.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.