Commit 5b636f78 authored by Paul Mackerras's avatar Paul Mackerras

Merge tango.paulus.ozlabs.org:/home/paulus/kernel/linux-2.5

into tango.paulus.ozlabs.org:/home/paulus/kernel/linuxppc-2.5
parents 7994321a 0cbf5ed1
...@@ -277,7 +277,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) ...@@ -277,7 +277,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
.globl ret_from_fork .globl ret_from_fork
ret_from_fork: ret_from_fork:
#ifdef CONFIG_SMP
bl schedule_tail bl schedule_tail
#endif
rlwinm r3,r1,0,0,18 rlwinm r3,r1,0,0,18
lwz r3,TI_FLAGS(r3) lwz r3,TI_FLAGS(r3)
andi. r0,r3,_TIF_SYSCALL_TRACE andi. r0,r3,_TIF_SYSCALL_TRACE
......
...@@ -1727,10 +1727,6 @@ m8260_gorom: ...@@ -1727,10 +1727,6 @@ m8260_gorom:
.data .data
.globl sdata .globl sdata
sdata: sdata:
.globl init_thread_union
init_thread_union:
.space 8192
.globl empty_zero_page .globl empty_zero_page
empty_zero_page: empty_zero_page:
.space 4096 .space 4096
......
...@@ -1082,8 +1082,6 @@ _GLOBAL(set_context) ...@@ -1082,8 +1082,6 @@ _GLOBAL(set_context)
*/ */
.data .data
_GLOBAL(sdata) _GLOBAL(sdata)
_GLOBAL(init_thread_union)
.space 8192
_GLOBAL(empty_zero_page) _GLOBAL(empty_zero_page)
.space 4096 .space 4096
_GLOBAL(swapper_pg_dir) _GLOBAL(swapper_pg_dir)
......
...@@ -971,10 +971,6 @@ set_dec_cpu6: ...@@ -971,10 +971,6 @@ set_dec_cpu6:
.data .data
.globl sdata .globl sdata
sdata: sdata:
.globl init_thread_union
init_thread_union:
.space 8192
.globl empty_zero_page .globl empty_zero_page
empty_zero_page: empty_zero_page:
.space 4096 .space 4096
......
...@@ -1496,11 +1496,6 @@ _GLOBAL(abort) ...@@ -1496,11 +1496,6 @@ _GLOBAL(abort)
.data .data
.globl sdata .globl sdata
sdata: sdata:
.globl init_thread_union
init_thread_union:
.space 8192
.globl empty_zero_page .globl empty_zero_page
empty_zero_page: empty_zero_page:
.space 4096 .space 4096
......
...@@ -59,6 +59,12 @@ static struct files_struct init_files = INIT_FILES; ...@@ -59,6 +59,12 @@ static struct files_struct init_files = INIT_FILES;
static struct signal_struct init_signals = INIT_SIGNALS; static struct signal_struct init_signals = INIT_SIGNALS;
struct mm_struct init_mm = INIT_MM(init_mm); struct mm_struct init_mm = INIT_MM(init_mm);
/* this is 8kB-aligned so we can get to the thread_info struct
at the base of it from the stack pointer with 1 integer instruction. */
union thread_union init_thread_union
__attribute__((__section__(".data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/* initial task structure */ /* initial task structure */
struct task_struct init_task = INIT_TASK(init_task); struct task_struct init_task = INIT_TASK(init_task);
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/pmac_feature.h> #include <asm/pmac_feature.h>
#include <asm/thread_info.h>
#if defined CONFIG_KGDB #if defined CONFIG_KGDB
#include <asm/kgdb.h> #include <asm/kgdb.h>
...@@ -542,9 +541,6 @@ int __init ppc_init(void) ...@@ -542,9 +541,6 @@ int __init ppc_init(void)
arch_initcall(ppc_init); arch_initcall(ppc_init);
/* Initial thread_info struct, copied into init_task_union */
struct thread_info init_thread_values __initdata = INIT_THREAD_INFO(init_task);
/* Warning, IO base is not yet inited */ /* Warning, IO base is not yet inited */
void __init setup_arch(char **cmdline_p) void __init setup_arch(char **cmdline_p)
{ {
...@@ -553,9 +549,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -553,9 +549,6 @@ void __init setup_arch(char **cmdline_p)
extern char *klimit; extern char *klimit;
extern void do_init_bootmem(void); extern void do_init_bootmem(void);
/* initialize the thread_info for the init task */
init_thread_info = init_thread_values;
/* so udelay does something sensible, assume <= 1000 bogomips */ /* so udelay does something sensible, assume <= 1000 bogomips */
loops_per_jiffy = 500000000 / HZ; loops_per_jiffy = 500000000 / HZ;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/binfmts.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
......
...@@ -49,8 +49,9 @@ SECTIONS ...@@ -49,8 +49,9 @@ SECTIONS
.fini : { *(.fini) } =0 .fini : { *(.fini) } =0
.ctors : { *(.ctors) } .ctors : { *(.ctors) }
.dtors : { *(.dtors) } .dtors : { *(.dtors) }
/* Read-write section, merged into data segment: */ /* Read-write section, merged into data segment: */
. = (. + 0x0FFF) & 0xFFFFF000; . = ALIGN(4096);
.data : .data :
{ {
*(.data) *(.data)
...@@ -80,6 +81,9 @@ SECTIONS ...@@ -80,6 +81,9 @@ SECTIONS
. = ALIGN(32); . = ALIGN(32);
.data.cacheline_aligned : { *(.data.cacheline_aligned) } .data.cacheline_aligned : { *(.data.cacheline_aligned) }
. = ALIGN(8192);
.data.init_task : { *(.data.init_task) }
. = ALIGN(4096); . = ALIGN(4096);
__init_begin = .; __init_begin = .;
.text.init : { *(.text.init) } .text.init : { *(.text.init) }
......
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
#include <asm/bitops.h> #include <asm/bitops.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#if MAX_RT_PRIO != 128 || MAX_PRIO != 168
# error update this function.
#endif
static inline int sched_find_first_bit(unsigned long *b) static inline int sched_find_first_bit(unsigned long *b)
{ {
if (unlikely(b[0])) if (unlikely(b[0]))
...@@ -22,11 +18,9 @@ static inline int sched_find_first_bit(unsigned long *b) ...@@ -22,11 +18,9 @@ static inline int sched_find_first_bit(unsigned long *b)
return __ffs(b[1]) + 32; return __ffs(b[1]) + 32;
if (unlikely(b[2])) if (unlikely(b[2]))
return __ffs(b[2]) + 64; return __ffs(b[2]) + 64;
if (unlikely(b[3])) if (b[3])
return __ffs(b[3]) + 96; return __ffs(b[3]) + 96;
if (b[4])
return __ffs(b[4]) + 128; return __ffs(b[4]) + 128;
return __ffs(b[5]) + 32 + 128;
} }
/* /*
......
...@@ -714,10 +714,8 @@ struct thread_struct { ...@@ -714,10 +714,8 @@ struct thread_struct {
/* /*
* Return saved PC of a blocked thread. For now, this is the "user" PC * Return saved PC of a blocked thread. For now, this is the "user" PC
*/ */
static inline unsigned long thread_saved_pc(struct thread_struct *t) #define thread_saved_pc(tsk) \
{ ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)
return (t->regs) ? t->regs->nip : 0;
}
#define copy_segments(tsk, mm) do { } while (0) #define copy_segments(tsk, mm) do { } while (0)
#define release_segments(mm) do { } while (0) #define release_segments(mm) do { } while (0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment