From: Michal Hocko <mhocko@suse.cz>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Hugh Dickins <hughd@google.com>,
linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>,
linux-parisc@vger.kernel.org
Subject: [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards
Date: Tue, 19 Apr 2011 13:10:04 +0200 [thread overview]
Message-ID: <20110419111004.GE21689@tiehlicka.suse.cz> (raw)
In-Reply-To: <20110418135637.5baac204.akpm@linux-foundation.org>
On Mon 18-04-11 13:56:37, Andrew Morton wrote:
> On Mon, 18 Apr 2011 12:01:31 +0200
> Michal Hocko <mhocko@suse.cz> wrote:
>
> > Currently we have expand_upwards exported while expand_downwards is
> > accessible only via expand_stack or expand_stack_downwards.
> >
> > check_stack_guard_page is a nice example of the asymmetry. It uses
> > expand_stack for VM_GROWSDOWN while expand_upwards is called for
> > VM_GROWSUP case.
> >
> > Let's clean this up by exporting both functions and make those name
> > consistent. Let's use expand_stack_{upwards,downwards} so that we are
> > explicit about stack manipulation in the name. expand_stack_downwards
> > has to be defined for both CONFIG_STACK_GROWS{UP,DOWN} because
> > get_arg_page calls the downwards version in the early process
> > initialization phase for growsup configuration.
>
> Has this patch been tested on any stack-grows-upwards architecture?
The only one I can find in the tree is parisc and I do not have access
to any such machine. Maybe someone on the list (CCed) can help with
testing the patch bellow? Nevertheless, the patch doesn't change growsup
case. It just renames functions and exports growsdown.
IA64 which grows upwards only for registers still needs a fix because of
the rename, though. I'm sorry, I must have missed it in the grep output
before. No other arch specific code uses expand_{down,up}wards directly.
Changes since v2
- fix compilation error on ia64
Changes since v1
- fixed expand_downwards case for CONFIG_STACK_GROWSUP in get_arg_page.
- rename expand_{downwards,upwards} -> expand_stack_{downwards,upwards}
---
>From 091cf27fe9fad875bc7f6cdbb8206c617b06fc7b Mon Sep 17 00:00:00 2001
From: Michal Hocko <mhocko@suse.cz>
Date: Fri, 15 Apr 2011 14:56:26 +0200
Subject: [PATCH] mm: make expand_downwards symmetrical to expand_upwards
Currently we have expand_upwards exported while expand_downwards is
accessible only via expand_stack or expand_stack_downwards.
check_stack_guard_page is a nice example of the asymmetry. It uses
expand_stack for VM_GROWSDOWN while expand_upwards is called for
VM_GROWSUP case.
Let's clean this up by exporting both functions and make those name
consistent. Let's use expand_stack_{upwards,downwards} so that we are
explicit about stack manipulation in the name. expand_stack_downwards
has to be defined for both CONFIG_STACK_GROWS{UP,DOWN} because
get_arg_page calls the downwards version in the early process
initialization phase for growsup configuration.
Signed-off-by: Michal Hocko <mhocko@suse.cz>
---
arch/ia64/mm/fault.c | 2 +-
include/linux/mm.h | 13 ++++++++-----
mm/memory.c | 4 ++--
mm/mmap.c | 13 ++++---------
4 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index 0799fea..aebff8a 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -197,7 +197,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
*/
if (address > vma->vm_end + PAGE_SIZE - sizeof(long))
goto bad_area;
- if (expand_upwards(vma, address))
+ if (expand_stack_upwards(vma, address))
goto bad_area;
}
goto good_area;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 692dbae..17f9b86 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1494,15 +1494,18 @@ unsigned long ra_submit(struct file_ra_state *ra,
struct address_space *mapping,
struct file *filp);
-/* Do stack extension */
+/* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */
extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
+
+/* CONFIG_STACK_GROWSUP still needs to to grow downwards at some places */
+extern int expand_stack_downwards(struct vm_area_struct *vma,
+ unsigned long address);
#if VM_GROWSUP
-extern int expand_upwards(struct vm_area_struct *vma, unsigned long address);
+extern int expand_stack_upwards(struct vm_area_struct *vma,
+ unsigned long address);
#else
- #define expand_upwards(vma, address) do { } while (0)
+ #define expand_stack_upwards(vma, address) do { } while (0)
#endif
-extern int expand_stack_downwards(struct vm_area_struct *vma,
- unsigned long address);
/* Look up the first VMA which satisfies addr < vm_end, NULL if none. */
extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
diff --git a/mm/memory.c b/mm/memory.c
index ce22a25..ba5b4d8 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2969,7 +2969,7 @@ static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned lo
if (prev && prev->vm_end == address)
return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
- expand_stack(vma, address - PAGE_SIZE);
+ expand_stack_downwards(vma, address - PAGE_SIZE);
}
if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
struct vm_area_struct *next = vma->vm_next;
@@ -2978,7 +2978,7 @@ static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned lo
if (next && next->vm_start == address + PAGE_SIZE)
return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
- expand_upwards(vma, address + PAGE_SIZE);
+ expand_stack_upwards(vma, address + PAGE_SIZE);
}
return 0;
}
diff --git a/mm/mmap.c b/mm/mmap.c
index e27e0cf..29c68b0 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1731,7 +1731,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
* PA-RISC uses this for its stack; IA64 for its Register Backing Store.
* vma is the last one with address > vma->vm_end. Have to extend vma.
*/
-int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+int expand_stack_upwards(struct vm_area_struct *vma, unsigned long address)
{
int error;
@@ -1782,7 +1782,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
/*
* vma is the first one with address < vma->vm_start. Have to extend vma.
*/
-static int expand_downwards(struct vm_area_struct *vma,
+int expand_stack_downwards(struct vm_area_struct *vma,
unsigned long address)
{
int error;
@@ -1829,15 +1829,10 @@ static int expand_downwards(struct vm_area_struct *vma,
return error;
}
-int expand_stack_downwards(struct vm_area_struct *vma, unsigned long address)
-{
- return expand_downwards(vma, address);
-}
-
#ifdef CONFIG_STACK_GROWSUP
int expand_stack(struct vm_area_struct *vma, unsigned long address)
{
- return expand_upwards(vma, address);
+ return expand_stack_upwards(vma, address);
}
struct vm_area_struct *
@@ -1859,7 +1854,7 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr)
#else
int expand_stack(struct vm_area_struct *vma, unsigned long address)
{
- return expand_downwards(vma, address);
+ return expand_stack_downwards(vma, address);
}
struct vm_area_struct *
--
1.7.4.1
--
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9
Czech Republic
next prev parent reply other threads:[~2011-04-19 11:10 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-15 13:51 [PATCH] " Michal Hocko
2011-04-18 3:00 ` Hugh Dickins
2011-04-18 10:01 ` [PATCH v2] " Michal Hocko
2011-04-18 20:56 ` Andrew Morton
[not found] ` <20110419091022.GA21689@tiehlicka.suse.cz>
2011-04-19 11:09 ` [PATCH followup] mm: get rid of CONFIG_STACK_GROWSUP || CONFIG_IA64 Michal Hocko
2011-04-20 0:33 ` KOSAKI Motohiro
2011-04-20 6:59 ` Michal Hocko
2011-04-20 7:08 ` KOSAKI Motohiro
2011-04-26 7:59 ` Michal Hocko
2011-04-19 11:10 ` Michal Hocko [this message]
2011-04-19 15:46 ` [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards James Bottomley
2011-04-19 16:06 ` [PATCH v3] mm: make expand_downwards symmetrical to John David Anglin
2011-04-19 16:59 ` James Bottomley
2011-04-19 16:07 ` [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards James Bottomley
2011-04-19 17:05 ` Pekka Enberg
2011-04-19 17:11 ` James Bottomley
2011-04-19 17:15 ` Christoph Lameter
2011-04-19 17:48 ` James Bottomley
2011-04-19 18:10 ` Christoph Lameter
2011-04-19 18:20 ` James Bottomley
2011-04-19 18:35 ` Christoph Lameter
2011-04-19 19:49 ` James Bottomley
2011-04-19 20:56 ` Christoph Lameter
2011-04-19 21:21 ` James Bottomley
2011-04-19 21:39 ` Christoph Lameter
2011-04-19 21:48 ` James Bottomley
2011-04-19 21:58 ` Christoph Lameter
2011-04-20 1:23 ` KOSAKI Motohiro
2011-04-20 2:48 ` James Bottomley
2011-04-20 2:57 ` KOSAKI Motohiro
2011-04-20 13:50 ` Christoph Lameter
2011-04-21 13:32 ` Tejun Heo
2011-04-20 5:53 ` Pekka Enberg
2011-04-20 7:15 ` KOSAKI Motohiro
2011-04-20 7:34 ` Pekka Enberg
2011-04-20 8:40 ` KOSAKI Motohiro
2011-04-20 16:32 ` James Bottomley
2011-04-20 16:50 ` Christoph Lameter
2011-04-20 18:09 ` James Bottomley
2011-04-20 21:18 ` David Rientjes
2011-04-20 22:15 ` James Bottomley
2011-04-20 23:12 ` David Rientjes
2011-04-21 13:16 ` KOSAKI Motohiro
2011-04-21 16:37 ` James Bottomley
2011-04-21 18:33 ` Christoph Lameter
2011-04-21 18:45 ` Dave Hansen
2011-04-22 18:19 ` James Bottomley
2011-04-22 20:24 ` Dave Hansen
2011-04-22 20:35 ` James Bottomley
2011-04-22 21:33 ` James Bottomley
2011-04-23 18:34 ` [PATCH] convert parisc to sparsemem (was Re: [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards) James Bottomley
2011-04-24 16:27 ` John David Anglin
2011-04-26 0:32 ` KOSAKI Motohiro
2011-04-27 16:36 ` Dave Hansen
2011-04-21 20:05 ` [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards James Bottomley
2011-04-21 21:07 ` Christoph Lameter
2011-04-21 21:22 ` James Bottomley
2011-04-21 19:33 ` David Rientjes
2011-04-22 0:34 ` KOSAKI Motohiro
2011-04-21 2:27 ` [patch] parisc: set memory ranges in N_NORMAL_MEMORY when onlined David Rientjes
2011-04-21 13:03 ` [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards KOSAKI Motohiro
2011-04-21 19:38 ` David Rientjes
2011-04-21 20:02 ` Christoph Lameter
2011-04-21 21:19 ` David Rientjes
2011-04-21 21:24 ` James Bottomley
2011-04-21 21:34 ` David Rientjes
2011-04-21 21:49 ` James Bottomley
2011-04-21 22:12 ` David Rientjes
2011-04-22 8:02 ` Pekka Enberg
2011-04-22 13:49 ` James Bottomley
2011-04-22 17:00 ` Pekka Enberg
2011-04-22 17:03 ` James Bottomley
2011-04-21 21:31 ` [patch] parisc: enable CONFIG_NUMA for DISCONTIGMEM and fix build errors David Rientjes
2011-04-21 21:41 ` [patch] mm: always set nodes with regular memory in N_NORMAL_MEMORY David Rientjes
2011-04-22 0:36 ` KOSAKI Motohiro
2011-04-21 22:00 ` [patch] alpha, mm: set all online nodes " David Rientjes
2011-04-21 22:01 ` [patch] m32r, " David Rientjes
2011-04-21 22:02 ` [patch] m68k, " David Rientjes
2011-04-24 1:59 ` Michael Schmitz
2011-04-24 3:14 ` KOSAKI Motohiro
2011-04-24 4:01 ` Michael Schmitz
2011-04-24 5:05 ` Michael Schmitz
2011-04-24 6:04 ` KOSAKI Motohiro
2011-04-24 11:32 ` Thorsten Glaser
2011-04-25 2:41 ` Michael Schmitz
2011-04-25 14:22 ` Thorsten Glaser
2011-04-24 12:18 ` Thorsten Glaser
2011-04-25 20:56 ` David Rientjes
2011-04-26 2:51 ` Michael Schmitz
2011-04-26 10:50 ` Thorsten Glaser
2011-04-27 13:19 ` Geert Uytterhoeven
2011-04-27 15:09 ` Thorsten Glaser
2011-04-28 3:05 ` Michael Schmitz
2011-04-20 21:05 ` [PATCH v3] mm: make expand_downwards symmetrical to expand_upwards David Rientjes
2011-04-20 11:20 ` Matthew Wilcox
2011-04-20 11:28 ` Pekka Enberg
2011-04-20 14:15 ` James Bottomley
2011-04-20 14:50 ` Christoph Lameter
2011-04-20 15:02 ` James Bottomley
2011-04-20 15:22 ` Christoph Lameter
2011-04-20 19:25 ` Matthew Wilcox
2011-04-20 21:42 ` David Rientjes
2011-04-21 16:06 ` James Bottomley
2011-04-21 22:19 ` David Rientjes
2011-04-21 22:31 ` James Bottomley
2011-04-20 13:58 ` Christoph Lameter
2011-04-20 21:34 ` David Rientjes
2011-04-20 14:07 ` Christoph Lameter
2011-04-20 2:33 ` James Bottomley
2011-04-19 17:12 ` Christoph Lameter
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=20110419111004.GE21689@tiehlicka.suse.cz \
--to=mhocko@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-parisc@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®