Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82455257 authored by Dave Hansen's avatar Dave Hansen Committed by Linus Torvalds
Browse files

maps4: rework TASK_SIZE macros

The following replaces the earlier patches sent.  It should address
David Rientjes's comments, and has been compile tested on all the
architectures that it touches, save for parisc.

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



- MIPS portion from Ralf Baechle <ralf@linux-mips.org>

[akpm@linux-foundation.org: fix mips build]
Signed-off-by: default avatarDave Hansen <haveblue@us.ibm.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarMatt Mackall <mpm@selenic.com>
Acked-by: default avatarDavid Rientjes <rientjes@google.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ec4dd3eb
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -31,7 +31,8 @@
 * each (assuming 8KB page size), for a total of 8TB of user virtual
 * each (assuming 8KB page size), for a total of 8TB of user virtual
 * address space.
 * 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
 * This decides where the kernel will search for a free chunk of vm
+2 −0
Original line number Original line Diff line number Diff line
@@ -65,6 +65,8 @@ extern unsigned int vced_count, vcei_count;
#define TASK_UNMAPPED_BASE						\
#define TASK_UNMAPPED_BASE						\
	(test_thread_flag(TIF_32BIT_ADDR) ?				\
	(test_thread_flag(TIF_32BIT_ADDR) ?				\
		PAGE_ALIGN(TASK_SIZE32 / 3) : PAGE_ALIGN(TASK_SIZE / 3))
		PAGE_ALIGN(TASK_SIZE32 / 3) : PAGE_ALIGN(TASK_SIZE / 3))
#define TASK_SIZE_OF(tsk)						\
	(test_tsk_thread_flag(tsk, TIF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE)
#endif
#endif


#define NUM_FPU_REGS	32
#define NUM_FPU_REGS	32
+2 −1
Original line number Original line Diff line number Diff line
@@ -32,7 +32,8 @@
#endif
#endif
#define current_text_addr() ({ void *pc; current_ia(pc); pc; })
#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	        TASK_SIZE_OF(current)
#define TASK_UNMAPPED_BASE      (current->thread.map_base)
#define TASK_UNMAPPED_BASE      (current->thread.map_base)


#define DEFAULT_TASK_SIZE32	(0xFFF00000UL)
#define DEFAULT_TASK_SIZE32	(0xFFF00000UL)
+2 −1
Original line number Original line Diff line number Diff line
@@ -99,8 +99,9 @@ extern struct task_struct *last_task_used_spe;
 */
 */
#define TASK_SIZE_USER32 (0x0000000100000000UL - (1*PAGE_SIZE))
#define TASK_SIZE_USER32 (0x0000000100000000UL - (1*PAGE_SIZE))


#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
		TASK_SIZE_USER32 : TASK_SIZE_USER64)
		TASK_SIZE_USER32 : TASK_SIZE_USER64)
#define TASK_SIZE	  TASK_SIZE_OF(current)


/* This decides where the kernel will search for a free chunk of vm
/* This decides where the kernel will search for a free chunk of vm
 * space during mmap's.
 * space during mmap's.
+2 −1
Original line number Original line Diff line number Diff line
@@ -70,8 +70,9 @@ extern int get_cpu_capability(unsigned int *);


#else /* __s390x__ */
#else /* __s390x__ */


# define TASK_SIZE		(test_thread_flag(TIF_31BIT) ? \
# define TASK_SIZE_OF(tsk)	(test_tsk_thread_flag(tsk, TIF_31BIT) ? \
					(0x80000000UL) : (0x40000000000UL))
					(0x80000000UL) : (0x40000000000UL))
# define TASK_SIZE		TASK_SIZE_OF(current)
# define TASK_UNMAPPED_BASE	(TASK_SIZE / 2)
# define TASK_UNMAPPED_BASE	(TASK_SIZE / 2)
# define DEFAULT_TASK_SIZE	(0x40000000000UL)
# define DEFAULT_TASK_SIZE	(0x40000000000UL)


Loading