Skip to content

Commit

Permalink
maps4: rework TASK_SIZE macros
Browse files Browse the repository at this point in the history
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 <[email protected]>

[[email protected]: fix mips build]
Signed-off-by: Dave Hansen <[email protected]>
Signed-off-by: Ralf Baechle <[email protected]>
Signed-off-by: Matt Mackall <[email protected]>
Acked-by: David Rientjes <[email protected]>
Cc: Dave Hansen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
hansendc authored and Linus Torvalds committed Feb 5, 2008
1 parent ec4dd3e commit 8245525
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 4 deletions.
3 changes: 2 additions & 1 deletion include/asm-ia64/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions include/asm-mips/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ extern unsigned int vced_count, vcei_count;
#define TASK_UNMAPPED_BASE \
(test_thread_flag(TIF_32BIT_ADDR) ? \
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

#define NUM_FPU_REGS 32
Expand Down
3 changes: 2 additions & 1 deletion include/asm-parisc/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 TASK_SIZE_OF(current)
#define TASK_UNMAPPED_BASE (current->thread.map_base)

#define DEFAULT_TASK_SIZE32 (0xFFF00000UL)
Expand Down
3 changes: 2 additions & 1 deletion include/asm-powerpc/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,9 @@ extern struct task_struct *last_task_used_spe;
*/
#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)
#define TASK_SIZE TASK_SIZE_OF(current)

/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
Expand Down
3 changes: 2 additions & 1 deletion include/asm-s390/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@ extern int get_cpu_capability(unsigned int *);

#else /* __s390x__ */

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

Expand Down
4 changes: 4 additions & 0 deletions include/linux/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -2087,6 +2087,10 @@ static inline void migration_init(void)
}
#endif

#ifndef TASK_SIZE_OF
#define TASK_SIZE_OF(tsk) TASK_SIZE
#endif

#endif /* __KERNEL__ */

#endif

0 comments on commit 8245525

Please sign in to comment.