diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/asm-offsets.c s390x/arch/s390x/kernel/asm-offsets.c --- 2.4.19rc3aa2/arch/s390x/kernel/asm-offsets.c Mon Jul 22 17:29:08 2002 +++ s390x/arch/s390x/kernel/asm-offsets.c Wed Jul 24 02:44:50 2002 @@ -26,7 +26,7 @@ int main(void) DEFINE(__TASK_need_resched, offsetof(struct task_struct, need_resched),); DEFINE(__TASK_ptrace, offsetof(struct task_struct, ptrace),); - DEFINE(__TASK_processor, offsetof(struct task_struct, processor),); + DEFINE(__TASK_processor, offsetof(struct task_struct, cpu),); return 0; } diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/bitmap.S s390x/arch/s390x/kernel/bitmap.S --- 2.4.19rc3aa2/arch/s390x/kernel/bitmap.S Thu Feb 22 03:44:55 2001 +++ s390x/arch/s390x/kernel/bitmap.S Wed Jul 24 02:45:16 2002 @@ -35,3 +35,21 @@ _zb_findmap: .byte 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4 .byte 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,8 + .globl _sb_findmap +_sb_findmap: + .byte 8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 + .byte 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/init_task.c s390x/arch/s390x/kernel/init_task.c --- 2.4.19rc3aa2/arch/s390x/kernel/init_task.c Mon Feb 25 22:05:04 2002 +++ s390x/arch/s390x/kernel/init_task.c Wed Jul 24 02:58:02 2002 @@ -8,6 +8,7 @@ #include #include +#include #include #include diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/process.c s390x/arch/s390x/kernel/process.c --- 2.4.19rc3aa2/arch/s390x/kernel/process.c Wed Jul 24 21:50:57 2002 +++ s390x/arch/s390x/kernel/process.c Wed Jul 24 02:58:26 2002 @@ -56,8 +56,6 @@ int cpu_idle(void *unused) unsigned long reg; /* endless idle loop with no priority at all */ - init_idle(); - while (1) { if (current->need_resched) { schedule(); @@ -90,7 +88,7 @@ void show_regs(struct pt_regs *regs) { struct task_struct *tsk = current; - printk("CPU: %d %s\n", tsk->processor, print_tainted()); + printk("CPU: %d %s\n", tsk->cpu, print_tainted()); printk("Process %s (pid: %d, task: %016lx, ksp: %016lx)\n", current->comm, current->pid, (unsigned long) tsk, tsk->thread.ksp); diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/s390_ksyms.c s390x/arch/s390x/kernel/s390_ksyms.c --- 2.4.19rc3aa2/arch/s390x/kernel/s390_ksyms.c Mon Jul 22 17:29:08 2002 +++ s390x/arch/s390x/kernel/s390_ksyms.c Wed Jul 24 02:58:51 2002 @@ -11,6 +11,7 @@ #include #include #include +#include #include #if CONFIG_IP_MULTICAST #include diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/smp.c s390x/arch/s390x/kernel/smp.c --- 2.4.19rc3aa2/arch/s390x/kernel/smp.c Mon Jul 22 17:29:08 2002 +++ s390x/arch/s390x/kernel/smp.c Wed Jul 24 02:59:52 2002 @@ -56,6 +56,7 @@ static atomic_t smp_commenced = ATOMIC_ spinlock_t kernel_flag __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED; unsigned long cpu_online_map; +unsigned long cache_decay_ticks = 0; /* * Setup routine for controlling SMP activation @@ -434,7 +435,7 @@ void smp_count_cpus(void) { int curr_cpu; - current->processor = 0; + current->cpu = 0; smp_num_cpus = 1; cpu_online_map = 1; for (curr_cpu = 0; @@ -512,12 +513,9 @@ static void __init do_boot_cpu(int cpu) idle = init_task.prev_task; if (!idle) panic("No idle process for CPU %d",cpu); - idle->processor = cpu; - idle->cpus_runnable = 1 << cpu; /* we schedule the first task manually */ + init_idle(idle, cpu); - del_from_runqueue(idle); unhash_process(idle); - init_tasks[cpu] = idle; cpu_lowcore = get_cpu_lowcore(cpu); cpu_lowcore->save_area[15] = idle->thread.ksp; diff -urNp 2.4.19rc3aa2/arch/s390x/kernel/traps.c s390x/arch/s390x/kernel/traps.c --- 2.4.19rc3aa2/arch/s390x/kernel/traps.c Mon Jul 22 17:29:08 2002 +++ s390x/arch/s390x/kernel/traps.c Wed Jul 24 03:00:20 2002 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -141,10 +142,9 @@ void show_trace_task(struct task_struct { /* * We can't print the backtrace of a running process. It is - * unreliable at best and can cause kernel oopses. + * unreliable at best and can cause kernel oopses. The + * callers takes care of this for us. */ - if (task_has_cpu(tsk)) - return; show_trace((unsigned long *) tsk->thread.ksp); } diff -urNp 2.4.19rc3aa2/include/asm-s390x/fcntl.h s390x/include/asm-s390x/fcntl.h --- 2.4.19rc3aa2/include/asm-s390x/fcntl.h Tue Jan 22 18:55:59 2002 +++ s390x/include/asm-s390x/fcntl.h Wed Jul 24 03:00:38 2002 @@ -27,6 +27,7 @@ #define O_LARGEFILE 0100000 #define O_DIRECTORY 0200000 /* must be a directory */ #define O_NOFOLLOW 0400000 /* don't follow links */ +#define O_ATOMICLOOKUP 01000000 /* do atomic file lookup */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get close_on_exec */ diff -urNp 2.4.19rc3aa2/include/asm-s390x/io.h s390x/include/asm-s390x/io.h --- 2.4.19rc3aa2/include/asm-s390x/io.h Tue Jan 22 18:52:36 2002 +++ s390x/include/asm-s390x/io.h Wed Jul 24 03:00:52 2002 @@ -40,6 +40,8 @@ extern inline void * phys_to_virt(unsign return __io_virt(address); } +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT) + extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); extern inline void * ioremap (unsigned long offset, unsigned long size) diff -urNp 2.4.19rc3aa2/include/asm-s390x/pgalloc.h s390x/include/asm-s390x/pgalloc.h --- 2.4.19rc3aa2/include/asm-s390x/pgalloc.h Tue Jan 22 18:52:37 2002 +++ s390x/include/asm-s390x/pgalloc.h Wed Jul 24 03:03:13 2002 @@ -127,8 +127,10 @@ extern __inline__ void pmd_free_slow (pm #define pmd_free(pmd) pmd_free_fast(pmd) -extern inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) +static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page * page) { + pte_t * pte = (pte_t *) page_address(page); + pmd_val(*pmd) = _PMD_ENTRY | __pa(pte); pmd_val1(*pmd) = _PMD_ENTRY | __pa(pte+256); } @@ -136,20 +138,21 @@ extern inline void pmd_populate(struct m /* * page table entry allocation/free routines. */ -extern inline pte_t * pte_alloc_one(struct mm_struct *mm, unsigned long vmaddr) +#define ARCH_HAS_PTE_ALLOC_ONE +static inline struct page * pte_alloc_one(struct mm_struct *mm, unsigned long vmaddr) { - pte_t *pte; + struct page * page; int i; - pte = (pte_t *) __get_free_page(GFP_KERNEL); - if (pte != NULL) { + page = alloc_page(GFP_KERNEL); + if (page != NULL) { for (i=0; i < PTRS_PER_PTE; i++) - pte_clear(pte+i); + pte_clear(((pte_t *)page_address(page))+i); } - return pte; + return page; } -extern __inline__ pte_t* pte_alloc_one_fast(struct mm_struct *mm, unsigned long address) +static __inline__ struct page * pte_alloc_one_fast(struct mm_struct *mm, unsigned long address) { unsigned long *ret = (unsigned long *) pte_quicklist; @@ -158,19 +161,25 @@ extern __inline__ pte_t* pte_alloc_one_f ret[0] = ret[1]; pgtable_cache_size--; } - return (pte_t *)ret; + return ret ? virt_to_page(ret) : NULL; } -extern __inline__ void pte_free_fast (pte_t *pte) +static __inline__ void pte_free_fast(struct page * page) { + pte_t *pte = page_address(page); *(unsigned long *) pte = (unsigned long) pte_quicklist; pte_quicklist = (unsigned long *) pte; pgtable_cache_size++; } -extern __inline__ void pte_free_slow (pte_t *pte) +static __inline__ void pte_free_slow(struct page * page) +{ + __free_page(page); +} + +static inline void pte_free_via_pmd(pmd_t pmd) { - free_page((unsigned long) pte); + pte_free_fast(virt_to_page(pte_offset(&pmd, 0))); } #define pte_free(pte) pte_free_fast(pte) diff -urNp 2.4.19rc3aa2/include/asm-s390x/pgtable.h s390x/include/asm-s390x/pgtable.h --- 2.4.19rc3aa2/include/asm-s390x/pgtable.h Mon Jul 22 17:29:24 2002 +++ s390x/include/asm-s390x/pgtable.h Wed Jul 24 03:03:30 2002 @@ -479,6 +479,15 @@ extern inline pte_t mk_pte_phys(unsigned /* Find an entry in the third-level page table.. */ #define pte_offset(dir,addr) \ ((pte_t *) pmd_page(*(dir)) + (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) +#define pte_offset2(dir, address) pte_offset(dir, address) +#define pte_offset_atomic(dir, address) pte_offset(dir, address) +#define pte_offset_atomic2(dir, address) pte_offset(dir, address) +#define pte_offset_under_lock(dir, address, mm) pte_offset(dir, address) +#define pte_offset2_under_lock(dir, address, mm) pte_offset(dir, address) +#define pte_kunmap(ptep) do { } while(0) +#define pte_kunmap2(ptep) do { } while(0) +#define pte_kunmap_atomic2(ptep) do { } while(0) +#define pte_alloc_atomic(mm, pmd, address) pte_alloc(mm, pmd, address) /* * A page-table entry has some bits we have to treat in a special way. diff -urNp 2.4.19rc3aa2/include/asm-s390x/prefetch.h s390x/include/asm-s390x/prefetch.h --- 2.4.19rc3aa2/include/asm-s390x/prefetch.h Thu Jan 1 01:00:00 1970 +++ s390x/include/asm-s390x/prefetch.h Wed Jul 24 03:03:52 2002 @@ -0,0 +1,3 @@ +#ifndef __ASM_S390_PREFETCH_H +#define __ASM_S390_PREFETCH_H +#endif diff -urNp 2.4.19rc3aa2/include/asm-s390x/smp.h s390x/include/asm-s390x/smp.h --- 2.4.19rc3aa2/include/asm-s390x/smp.h Tue Jan 22 18:55:00 2002 +++ s390x/include/asm-s390x/smp.h Wed Jul 24 03:04:03 2002 @@ -42,7 +42,7 @@ extern unsigned long cpu_online_map; #define PROC_CHANGE_PENALTY 20 /* Schedule penalty */ -#define smp_processor_id() (current->processor) +#define smp_processor_id() (current->cpu) extern __inline__ int cpu_logical_map(int cpu) {