From: Dave Hansen <haveblue@us.ibm.com>
To: linux-arch@vger.kernel.org
Cc: Dave Hansen <haveblue@us.ibm.com>
Subject: [RFC][PATCH] introduce TASK_SIZE_OF() for all arches
Date: Tue, 21 Aug 2007 12:38:35 -0700 [thread overview]
Message-ID: <20070821193835.258D7DD4@kernel> (raw)
For the /proc/<pid>/pagemap code[1], we need to able to query how
much virtual address space a particular task has. The trick is
that we do it through /proc and can't use TASK_SIZE since it
references "current" on some arches. The process opening the
/proc file might be a 32-bit process opening a 64-bit process's
pagemap file.
x86_64 already has a TASK_SIZE_OF() macro:
#define TASK_SIZE_OF(child) ((test_tsk_thread_flag(child, TIF_IA32)) ? IA32_PAGE_OFFSET : TASK_SIZE64)
I'd like to have that for other architectures. So, add it
for all the architectures that actually use "current" in
their TASK_SIZE. For the others, just add a quick #define
in sched.h to use plain old TASK_SIZE.
1. http://www.linuxworld.com/news/2007/042407-kernel.html
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
---
lxc-dave/include/asm-ia64/processor.h | 3 ++-
lxc-dave/include/asm-parisc/processor.h | 3 ++-
lxc-dave/include/asm-powerpc/processor.h | 4 +++-
lxc-dave/include/asm-s390/processor.h | 2 ++
lxc-dave/include/linux/sched.h | 4 ++++
5 files changed, 13 insertions(+), 3 deletions(-)
diff -puN include/asm-ia64/processor.h~task_size_of include/asm-ia64/processor.h
--- lxc/include/asm-ia64/processor.h~task_size_of 2007-08-07 15:30:54.000000000 -0700
+++ lxc-dave/include/asm-ia64/processor.h 2007-08-07 15:30:54.000000000 -0700
@@ -31,7 +31,8 @@
* each (assuming 8KB page size), for a total of 8TB of user virtual
* address space.
*/
-#define TASK_SIZE (current->thread.task_size)
+#define TASK_SIZE_OF(tsk) ((tsk)->thread.task_size)
+#define TASK_SIZE TASK_SIZE_OF(current)
/*
* This decides where the kernel will search for a free chunk of vm
diff -puN include/asm-parisc/processor.h~task_size_of include/asm-parisc/processor.h
--- lxc/include/asm-parisc/processor.h~task_size_of 2007-08-07 15:30:54.000000000 -0700
+++ lxc-dave/include/asm-parisc/processor.h 2007-08-07 15:30:54.000000000 -0700
@@ -32,7 +32,8 @@
#endif
#define current_text_addr() ({ void *pc; current_ia(pc); pc; })
-#define TASK_SIZE (current->thread.task_size)
+#define TASK_SIZE_OF(tsk) ((tsk)->thread.task_size)
+#define TASK_SIZE (current->thread.task_size)
#define TASK_UNMAPPED_BASE (current->thread.map_base)
#define DEFAULT_TASK_SIZE32 (0xFFF00000UL)
diff -puN include/asm-powerpc/processor.h~task_size_of include/asm-powerpc/processor.h
--- lxc/include/asm-powerpc/processor.h~task_size_of 2007-08-07 15:30:54.000000000 -0700
+++ lxc-dave/include/asm-powerpc/processor.h 2007-08-07 15:30:54.000000000 -0700
@@ -107,7 +107,9 @@ extern struct task_struct *last_task_use
*/
#define TASK_SIZE_USER32 (0x0000000100000000UL - (1*PAGE_SIZE))
-#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
+#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
+ TASK_SIZE_USER32 : TASK_SIZE_USER64)
+#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
TASK_SIZE_USER32 : TASK_SIZE_USER64)
/* This decides where the kernel will search for a free chunk of vm
diff -puN include/asm-s390/processor.h~task_size_of include/asm-s390/processor.h
--- lxc/include/asm-s390/processor.h~task_size_of 2007-08-07 15:30:54.000000000 -0700
+++ lxc-dave/include/asm-s390/processor.h 2007-08-07 15:30:54.000000000 -0700
@@ -75,6 +75,8 @@ extern struct task_struct *last_task_use
# define TASK_SIZE (test_thread_flag(TIF_31BIT) ? \
(0x80000000UL) : (0x40000000000UL))
+# define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_31BIT) ? \
+ (0x80000000UL) : (0x40000000000UL))
# define TASK_UNMAPPED_BASE (TASK_SIZE / 2)
# define DEFAULT_TASK_SIZE (0x40000000000UL)
diff -puN include/linux/sched.h~task_size_of include/linux/sched.h
--- lxc/include/linux/sched.h~task_size_of 2007-08-07 15:30:54.000000000 -0700
+++ lxc-dave/include/linux/sched.h 2007-08-07 15:30:54.000000000 -0700
@@ -1712,6 +1712,10 @@ static inline void inc_syscw(struct task
}
#endif
+#ifndef TASK_SIZE_OF
+#define TASK_SIZE_OF(tsk) TASK_SIZE
+#endif
+
#endif /* __KERNEL__ */
#endif
_
next reply other threads:[~2007-08-21 19:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-21 19:38 Dave Hansen [this message]
2007-08-21 19:43 ` [RFC][PATCH] introduce TASK_SIZE_OF() for all arches Matthew Wilcox
2007-08-22 17:30 ` Ralf Baechle
2007-08-22 23:10 ` Dave Hansen
2007-08-22 9:06 ` David Howells
2007-08-22 22:55 ` Dave Hansen
2007-08-22 23:50 ` Matt Mackall
2007-08-22 23:15 ` Dave Hansen
2007-08-23 9:37 ` David Howells
-- strict thread matches above, loose matches on Subject: below --
2007-08-21 13:20 2.6.23-rc3-git3 make warnings Jarek Poplawski
2007-08-21 16:31 ` Randy Dunlap
2007-08-21 17:35 ` RFC: drop support for gcc < 4.0 Adrian Bunk
2007-08-21 19:19 ` Andi Kleen
2007-08-21 19:54 ` Adrian Bunk
2007-08-21 20:07 ` [RFC][PATCH] introduce TASK_SIZE_OF() for all arches Matthew Wilcox
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=20070821193835.258D7DD4@kernel \
--to=haveblue@us.ibm.com \
--cc=linux-arch@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 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.