aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor_core@ameritech.net>2005-12-20 23:03:50 -0500
committerDmitry Torokhov <dtor_core@ameritech.net>2005-12-20 23:03:50 -0500
commit041387d98460b3947587929ef3a4773b8c48538f (patch)
tree3330eebba3fa1aa7c13479e527f07b03d7fb53ed /arch
parent56f0356321a876a1a356712f2486d6188a3b4992 (diff)
parentb05948d9b7167e23af88cc65b9ffa4687eaf1f0d (diff)
Manual merge with Linus (conflict in drivers/input/misc/wistron_bnts.c)
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/machvec_impl.h2
-rw-r--r--arch/arm/kernel/calls.S8
-rw-r--r--arch/arm/kernel/entry-armv.S49
-rw-r--r--arch/arm/kernel/entry-common.S20
-rw-r--r--arch/arm/kernel/module.c2
-rw-r--r--arch/arm/kernel/ptrace.c9
-rw-r--r--arch/arm/mach-pxa/pm.c9
-rw-r--r--arch/i386/kernel/kprobes.c2
-rw-r--r--arch/i386/kernel/smpboot.c3
-rw-r--r--arch/i386/kernel/traps.c7
-rw-r--r--arch/i386/mm/ioremap.c37
-rw-r--r--arch/i386/pci/Makefile2
-rw-r--r--arch/i386/pci/direct.c4
-rw-r--r--arch/i386/pci/mmconfig.c65
-rw-r--r--arch/i386/pci/pci.h7
-rw-r--r--arch/ia64/Kconfig2
-rw-r--r--arch/ia64/configs/sn2_defconfig154
-rw-r--r--arch/ia64/configs/tiger_defconfig74
-rw-r--r--arch/ia64/ia32/binfmt_elf32.c2
-rw-r--r--arch/ia64/ia32/ia32priv.h1
-rw-r--r--arch/ia64/kernel/kprobes.c2
-rw-r--r--arch/ia64/kernel/process.c7
-rw-r--r--arch/ia64/kernel/salinfo.c2
-rw-r--r--arch/ia64/kernel/time.c29
-rw-r--r--arch/ia64/kernel/uncached.c6
-rw-r--r--arch/ia64/kernel/vmlinux.lds.S3
-rw-r--r--arch/ia64/mm/discontig.c4
-rw-r--r--arch/ia64/sn/kernel/io_init.c153
-rw-r--r--arch/ia64/sn/kernel/sn2/ptc_deadlock.S8
-rw-r--r--arch/ia64/sn/kernel/sn2/sn2_smp.c2
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_reg.c48
-rw-r--r--arch/ia64/sn/pci/tioca_provider.c12
-rw-r--r--arch/mips/mm/init.c4
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/configs/cell_defconfig7
-rw-r--r--arch/powerpc/configs/g5_defconfig9
-rw-r--r--arch/powerpc/configs/iseries_defconfig7
-rw-r--r--arch/powerpc/configs/maple_defconfig10
-rw-r--r--arch/powerpc/configs/ppc64_defconfig7
-rw-r--r--arch/powerpc/configs/pseries_defconfig7
-rw-r--r--arch/powerpc/kernel/entry_64.S4
-rw-r--r--arch/powerpc/kernel/kprobes.c2
-rw-r--r--arch/powerpc/kernel/setup_64.c10
-rw-r--r--arch/powerpc/kernel/syscalls.c2
-rw-r--r--arch/powerpc/mm/hash_utils_64.c2
-rw-r--r--arch/powerpc/mm/hugetlbpage.c95
-rw-r--r--arch/powerpc/mm/numa.c2
-rw-r--r--arch/powerpc/mm/stab.c7
-rw-r--r--arch/powerpc/platforms/powermac/feature.c21
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c11
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c12
-rw-r--r--arch/ppc/Kconfig6
-rw-r--r--arch/ppc/kernel/smp.c4
-rw-r--r--arch/ppc/platforms/85xx/mpc85xx_cds_common.c3
-rw-r--r--arch/ppc/platforms/pmac_feature.c20
-rw-r--r--arch/ppc/syslib/ppc4xx_dma.c1
-rw-r--r--arch/sparc/Makefile2
-rw-r--r--arch/sparc/kernel/ebus.c24
-rw-r--r--arch/sparc/kernel/led.c2
-rw-r--r--arch/sparc/kernel/pcic.c2
-rw-r--r--arch/sparc/kernel/time.c4
-rw-r--r--arch/sparc/lib/atomic32.c1
-rw-r--r--arch/sparc/mm/sun4c.c2
-rw-r--r--arch/sparc64/Makefile5
-rw-r--r--arch/sparc64/kernel/kprobes.c2
-rw-r--r--arch/um/Kconfig2
-rw-r--r--arch/um/Makefile-x86_644
-rw-r--r--arch/um/include/sysdep-i386/stub.h29
-rw-r--r--arch/um/include/sysdep-x86_64/stub.h30
-rw-r--r--arch/um/include/um_uaccess.h2
-rw-r--r--arch/um/kernel/skas/clone.c23
-rw-r--r--arch/um/kernel/skas/include/uaccess-skas.h1
-rw-r--r--arch/um/scripts/Makefile.rules5
-rw-r--r--arch/x86_64/ia32/ia32_binfmt.c3
-rw-r--r--arch/x86_64/kernel/kprobes.c2
-rw-r--r--arch/x86_64/kernel/smpboot.c2
-rw-r--r--arch/x86_64/kernel/time.c6
-rw-r--r--arch/x86_64/mm/ioremap.c37
-rw-r--r--arch/x86_64/mm/numa.c4
-rw-r--r--arch/x86_64/pci/Makefile2
-rw-r--r--arch/x86_64/pci/mmconfig.c65
81 files changed, 883 insertions, 368 deletions
diff --git a/arch/alpha/kernel/machvec_impl.h b/arch/alpha/kernel/machvec_impl.h
index 4959b7a3e1e6..11f996f24fde 100644
--- a/arch/alpha/kernel/machvec_impl.h
+++ b/arch/alpha/kernel/machvec_impl.h
@@ -41,7 +41,7 @@
41#define CAT1(x,y) x##y 41#define CAT1(x,y) x##y
42#define CAT(x,y) CAT1(x,y) 42#define CAT(x,y) CAT1(x,y)
43 43
44#define DO_DEFAULT_RTC rtc_port: 0x70 44#define DO_DEFAULT_RTC .rtc_port = 0x70
45 45
46#define DO_EV4_MMU \ 46#define DO_EV4_MMU \
47 .max_asn = EV4_MAX_ASN, \ 47 .max_asn = EV4_MAX_ASN, \
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 2ad4aa2a1536..55076a75e5bf 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -131,7 +131,7 @@ __syscall_start:
131 .long sys_wait4 131 .long sys_wait4
132/* 115 */ .long sys_swapoff 132/* 115 */ .long sys_swapoff
133 .long sys_sysinfo 133 .long sys_sysinfo
134 .long sys_ipc_wrapper 134 .long sys_ipc
135 .long sys_fsync 135 .long sys_fsync
136 .long sys_sigreturn_wrapper 136 .long sys_sigreturn_wrapper
137/* 120 */ .long sys_clone_wrapper 137/* 120 */ .long sys_clone_wrapper
@@ -254,7 +254,7 @@ __syscall_start:
254 .long sys_fremovexattr 254 .long sys_fremovexattr
255 .long sys_tkill 255 .long sys_tkill
256 .long sys_sendfile64 256 .long sys_sendfile64
257/* 240 */ .long sys_futex_wrapper 257/* 240 */ .long sys_futex
258 .long sys_sched_setaffinity 258 .long sys_sched_setaffinity
259 .long sys_sched_getaffinity 259 .long sys_sched_getaffinity
260 .long sys_io_setup 260 .long sys_io_setup
@@ -284,7 +284,7 @@ __syscall_start:
284 .long sys_fstatfs64 284 .long sys_fstatfs64
285 .long sys_tgkill 285 .long sys_tgkill
286 .long sys_utimes 286 .long sys_utimes
287/* 270 */ .long sys_arm_fadvise64_64_wrapper 287/* 270 */ .long sys_arm_fadvise64_64
288 .long sys_pciconfig_iobase 288 .long sys_pciconfig_iobase
289 .long sys_pciconfig_read 289 .long sys_pciconfig_read
290 .long sys_pciconfig_write 290 .long sys_pciconfig_write
@@ -333,7 +333,7 @@ __syscall_start:
333 .long sys_inotify_init 333 .long sys_inotify_init
334 .long sys_inotify_add_watch 334 .long sys_inotify_add_watch
335 .long sys_inotify_rm_watch 335 .long sys_inotify_rm_watch
336 .long sys_mbind_wrapper 336 .long sys_mbind
337/* 320 */ .long sys_get_mempolicy 337/* 320 */ .long sys_get_mempolicy
338 .long sys_set_mempolicy 338 .long sys_set_mempolicy
339__syscall_end: 339__syscall_end:
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index d9fb819bf7cc..2a8d27e18fa7 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -614,6 +614,47 @@ __kuser_helper_start:
614/* 614/*
615 * Reference prototype: 615 * Reference prototype:
616 * 616 *
617 * void __kernel_memory_barrier(void)
618 *
619 * Input:
620 *
621 * lr = return address
622 *
623 * Output:
624 *
625 * none
626 *
627 * Clobbered:
628 *
629 * the Z flag might be lost
630 *
631 * Definition and user space usage example:
632 *
633 * typedef void (__kernel_dmb_t)(void);
634 * #define __kernel_dmb (*(__kernel_dmb_t *)0xffff0fa0)
635 *
636 * Apply any needed memory barrier to preserve consistency with data modified
637 * manually and __kuser_cmpxchg usage.
638 *
639 * This could be used as follows:
640 *
641 * #define __kernel_dmb() \
642 * asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
643 * : : : "lr","cc" )
644 */
645
646__kuser_memory_barrier: @ 0xffff0fa0
647
648#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
649 mcr p15, 0, r0, c7, c10, 5 @ dmb
650#endif
651 mov pc, lr
652
653 .align 5
654
655/*
656 * Reference prototype:
657 *
617 * int __kernel_cmpxchg(int oldval, int newval, int *ptr) 658 * int __kernel_cmpxchg(int oldval, int newval, int *ptr)
618 * 659 *
619 * Input: 660 * Input:
@@ -642,6 +683,8 @@ __kuser_helper_start:
642 * The C flag is also set if *ptr was changed to allow for assembly 683 * The C flag is also set if *ptr was changed to allow for assembly
643 * optimization in the calling code. 684 * optimization in the calling code.
644 * 685 *
686 * Note: this routine already includes memory barriers as needed.
687 *
645 * For example, a user space atomic_add implementation could look like this: 688 * For example, a user space atomic_add implementation could look like this:
646 * 689 *
647 * #define atomic_add(ptr, val) \ 690 * #define atomic_add(ptr, val) \
@@ -698,10 +741,16 @@ __kuser_cmpxchg: @ 0xffff0fc0
698 741
699#else 742#else
700 743
744#ifdef CONFIG_SMP
745 mcr p15, 0, r0, c7, c10, 5 @ dmb
746#endif
701 ldrex r3, [r2] 747 ldrex r3, [r2]
702 subs r3, r3, r0 748 subs r3, r3, r0
703 strexeq r3, r1, [r2] 749 strexeq r3, r1, [r2]
704 rsbs r0, r3, #0 750 rsbs r0, r3, #0
751#ifdef CONFIG_SMP
752 mcr p15, 0, r0, c7, c10, 5 @ dmb
753#endif
705 mov pc, lr 754 mov pc, lr
706 755
707#endif 756#endif
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index f7f183075237..e2b42997ad33 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -145,7 +145,7 @@ ENTRY(vector_swi)
145#endif 145#endif
146 enable_irq 146 enable_irq
147 147
148 str r4, [sp, #-S_OFF]! @ push fifth arg 148 stmdb sp!, {r4, r5} @ push fifth and sixth args
149 149
150 get_thread_info tsk 150 get_thread_info tsk
151 ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing 151 ldr ip, [tsk, #TI_FLAGS] @ check for syscall tracing
@@ -204,7 +204,7 @@ ENTRY(sys_call_table)
204 * Special system call wrappers 204 * Special system call wrappers
205 */ 205 */
206@ r0 = syscall number 206@ r0 = syscall number
207@ r5 = syscall table 207@ r8 = syscall table
208 .type sys_syscall, #function 208 .type sys_syscall, #function
209sys_syscall: 209sys_syscall:
210 eor scno, r0, #__NR_SYSCALL_BASE 210 eor scno, r0, #__NR_SYSCALL_BASE
@@ -255,22 +255,6 @@ sys_sigaltstack_wrapper:
255 ldr r2, [sp, #S_OFF + S_SP] 255 ldr r2, [sp, #S_OFF + S_SP]
256 b do_sigaltstack 256 b do_sigaltstack
257 257
258sys_futex_wrapper:
259 str r5, [sp, #4] @ push sixth arg
260 b sys_futex
261
262sys_arm_fadvise64_64_wrapper:
263 str r5, [sp, #4] @ push r5 to stack
264 b sys_arm_fadvise64_64
265
266sys_mbind_wrapper:
267 str r5, [sp, #4]
268 b sys_mbind
269
270sys_ipc_wrapper:
271 str r5, [sp, #4] @ push sixth arg
272 b sys_ipc
273
274/* 258/*
275 * Note: off_4k (r5) is always units of 4K. If we can't do the requested 259 * Note: off_4k (r5) is always units of 4K. If we can't do the requested
276 * offset, we return EINVAL. 260 * offset, we return EINVAL.
diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
index 6055e1427ba3..055bf5d28894 100644
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
@@ -101,6 +101,8 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
101 break; 101 break;
102 102
103 case R_ARM_PC24: 103 case R_ARM_PC24:
104 case R_ARM_CALL:
105 case R_ARM_JUMP24:
104 offset = (*(u32 *)loc & 0x00ffffff) << 2; 106 offset = (*(u32 *)loc & 0x00ffffff) << 2;
105 if (offset & 0x02000000) 107 if (offset & 0x02000000)
106 offset -= 0x04000000; 108 offset -= 0x04000000;
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index 9a340e790da5..2b84f78d7b0f 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -242,6 +242,15 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in
242 */ 242 */
243 long aluop1, aluop2, ccbit; 243 long aluop1, aluop2, ccbit;
244 244
245 if ((insn & 0x0fffffd0) == 0x012fff10) {
246 /*
247 * bx or blx
248 */
249 alt = get_user_reg(child, insn & 15);
250 break;
251 }
252
253
245 if ((insn & 0xf000) != 0xf000) 254 if ((insn & 0xf000) != 0xf000)
246 break; 255 break;
247 256
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c
index f74b9af112dc..852ea72d8c80 100644
--- a/arch/arm/mach-pxa/pm.c
+++ b/arch/arm/mach-pxa/pm.c
@@ -155,19 +155,20 @@ int pxa_pm_enter(suspend_state_t state)
155 PSPR = 0; 155 PSPR = 0;
156 156
157 /* restore registers */ 157 /* restore registers */
158 RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
159 RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
158 RESTORE(GAFR0_L); RESTORE(GAFR0_U); 160 RESTORE(GAFR0_L); RESTORE(GAFR0_U);
159 RESTORE(GAFR1_L); RESTORE(GAFR1_U); 161 RESTORE(GAFR1_L); RESTORE(GAFR1_U);
160 RESTORE(GAFR2_L); RESTORE(GAFR2_U); 162 RESTORE(GAFR2_L); RESTORE(GAFR2_U);
161 RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
162 RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
163 RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); 163 RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
164 RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); 164 RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
165 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); 165 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
166 166
167#ifdef CONFIG_PXA27x 167#ifdef CONFIG_PXA27x
168 RESTORE(MDREFR); 168 RESTORE(MDREFR);
169 RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3); 169 RESTORE_GPLEVEL(3); RESTORE(GPDR3);
170 RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3); 170 RESTORE(GAFR3_L); RESTORE(GAFR3_U);
171 RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3);
171 RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); 172 RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER);
172 RESTORE(PFER); RESTORE(PKWR); 173 RESTORE(PFER); RESTORE(PKWR);
173#endif 174#endif
diff --git a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c
index 32b0c24ab9a6..19edcd526ba4 100644
--- a/arch/i386/kernel/kprobes.c
+++ b/arch/i386/kernel/kprobes.c
@@ -191,7 +191,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
191 */ 191 */
192 save_previous_kprobe(kcb); 192 save_previous_kprobe(kcb);
193 set_current_kprobe(p, regs, kcb); 193 set_current_kprobe(p, regs, kcb);
194 p->nmissed++; 194 kprobes_inc_nmissed_count(p);
195 prepare_singlestep(p, regs); 195 prepare_singlestep(p, regs);
196 kcb->kprobe_status = KPROBE_REENTER; 196 kcb->kprobe_status = KPROBE_REENTER;
197 return 1; 197 return 1;
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
index d16520da4550..9ed449af8e9f 100644
--- a/arch/i386/kernel/smpboot.c
+++ b/arch/i386/kernel/smpboot.c
@@ -1338,8 +1338,7 @@ int __cpu_disable(void)
1338 if (cpu == 0) 1338 if (cpu == 0)
1339 return -EBUSY; 1339 return -EBUSY;
1340 1340
1341 /* We enable the timer again on the exit path of the death loop */ 1341 clear_local_APIC();
1342 disable_APIC_timer();
1343 /* Allow any queued timer interrupts to get serviced */ 1342 /* Allow any queued timer interrupts to get serviced */
1344 local_irq_enable(); 1343 local_irq_enable();
1345 mdelay(1); 1344 mdelay(1);
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index c34d1bfc5161..f0dffa03fbba 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -650,13 +650,6 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
650 650
651 cpu = smp_processor_id(); 651 cpu = smp_processor_id();
652 652
653#ifdef CONFIG_HOTPLUG_CPU
654 if (!cpu_online(cpu)) {
655 nmi_exit();
656 return;
657 }
658#endif
659
660 ++nmi_count(cpu); 653 ++nmi_count(cpu);
661 654
662 if (!rcu_dereference(nmi_callback)(regs, cpu)) 655 if (!rcu_dereference(nmi_callback)(regs, cpu))
diff --git a/arch/i386/mm/ioremap.c b/arch/i386/mm/ioremap.c
index 5d09de8d1c6b..247fde76aaed 100644
--- a/arch/i386/mm/ioremap.c
+++ b/arch/i386/mm/ioremap.c
@@ -223,9 +223,15 @@ void __iomem *ioremap_nocache (unsigned long phys_addr, unsigned long size)
223} 223}
224EXPORT_SYMBOL(ioremap_nocache); 224EXPORT_SYMBOL(ioremap_nocache);
225 225
226/**
227 * iounmap - Free a IO remapping
228 * @addr: virtual address from ioremap_*
229 *
230 * Caller must ensure there is only one unmapping for the same pointer.
231 */
226void iounmap(volatile void __iomem *addr) 232void iounmap(volatile void __iomem *addr)
227{ 233{
228 struct vm_struct *p; 234 struct vm_struct *p, *o;
229 235
230 if ((void __force *)addr <= high_memory) 236 if ((void __force *)addr <= high_memory)
231 return; 237 return;
@@ -239,22 +245,37 @@ void iounmap(volatile void __iomem *addr)
239 addr < phys_to_virt(ISA_END_ADDRESS)) 245 addr < phys_to_virt(ISA_END_ADDRESS))
240 return; 246 return;
241 247
242 write_lock(&vmlist_lock); 248 addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long __force)addr);
243 p = __remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr)); 249
244 if (!p) { 250 /* Use the vm area unlocked, assuming the caller
245 printk(KERN_WARNING "iounmap: bad address %p\n", addr); 251 ensures there isn't another iounmap for the same address
252 in parallel. Reuse of the virtual address is prevented by
253 leaving it in the global lists until we're done with it.
254 cpa takes care of the direct mappings. */
255 read_lock(&vmlist_lock);
256 for (p = vmlist; p; p = p->next) {
257 if (p->addr == addr)
258 break;
259 }
260 read_unlock(&vmlist_lock);
261
262 if (!p) {
263 printk("iounmap: bad address %p\n", addr);
246 dump_stack(); 264 dump_stack();
247 goto out_unlock; 265 return;
248 } 266 }
249 267
268 /* Reset the direct mapping. Can block */
250 if ((p->flags >> 20) && p->phys_addr < virt_to_phys(high_memory) - 1) { 269 if ((p->flags >> 20) && p->phys_addr < virt_to_phys(high_memory) - 1) {
251 change_page_attr(virt_to_page(__va(p->phys_addr)), 270 change_page_attr(virt_to_page(__va(p->phys_addr)),
252 p->size >> PAGE_SHIFT, 271 p->size >> PAGE_SHIFT,
253 PAGE_KERNEL); 272 PAGE_KERNEL);
254 global_flush_tlb(); 273 global_flush_tlb();
255 } 274 }
256out_unlock: 275
257 write_unlock(&vmlist_lock); 276 /* Finally remove it */
277 o = remove_vm_area((void *)addr);
278 BUG_ON(p != o || o == NULL);
258 kfree(p); 279 kfree(p);
259} 280}
260EXPORT_SYMBOL(iounmap); 281EXPORT_SYMBOL(iounmap);
diff --git a/arch/i386/pci/Makefile b/arch/i386/pci/Makefile
index ead6122dd06d..5461d4d5ea1e 100644
--- a/arch/i386/pci/Makefile
+++ b/arch/i386/pci/Makefile
@@ -1,7 +1,7 @@
1obj-y := i386.o 1obj-y := i386.o
2 2
3obj-$(CONFIG_PCI_BIOS) += pcbios.o 3obj-$(CONFIG_PCI_BIOS) += pcbios.o
4obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o 4obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
5obj-$(CONFIG_PCI_DIRECT) += direct.o 5obj-$(CONFIG_PCI_DIRECT) += direct.o
6 6
7pci-y := fixup.o 7pci-y := fixup.o
diff --git a/arch/i386/pci/direct.c b/arch/i386/pci/direct.c
index 94331d6be7a3..e3ac502bf2fb 100644
--- a/arch/i386/pci/direct.c
+++ b/arch/i386/pci/direct.c
@@ -13,7 +13,7 @@
13#define PCI_CONF1_ADDRESS(bus, devfn, reg) \ 13#define PCI_CONF1_ADDRESS(bus, devfn, reg) \
14 (0x80000000 | (bus << 16) | (devfn << 8) | (reg & ~3)) 14 (0x80000000 | (bus << 16) | (devfn << 8) | (reg & ~3))
15 15
16static int pci_conf1_read(unsigned int seg, unsigned int bus, 16int pci_conf1_read(unsigned int seg, unsigned int bus,
17 unsigned int devfn, int reg, int len, u32 *value) 17 unsigned int devfn, int reg, int len, u32 *value)
18{ 18{
19 unsigned long flags; 19 unsigned long flags;
@@ -42,7 +42,7 @@ static int pci_conf1_read(unsigned int seg, unsigned int bus,
42 return 0; 42 return 0;
43} 43}
44 44
45static int pci_conf1_write(unsigned int seg, unsigned int bus, 45int pci_conf1_write(unsigned int seg, unsigned int bus,
46 unsigned int devfn, int reg, int len, u32 value) 46 unsigned int devfn, int reg, int len, u32 value)
47{ 47{
48 unsigned long flags; 48 unsigned long flags;
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c
index dfbf80cff834..4bb4d4b0f73a 100644
--- a/arch/i386/pci/mmconfig.c
+++ b/arch/i386/pci/mmconfig.c
@@ -19,21 +19,25 @@
19/* The base address of the last MMCONFIG device accessed */ 19/* The base address of the last MMCONFIG device accessed */
20static u32 mmcfg_last_accessed_device; 20static u32 mmcfg_last_accessed_device;
21 21
22static DECLARE_BITMAP(fallback_slots, 32);
23
22/* 24/*
23 * Functions for accessing PCI configuration space with MMCONFIG accesses 25 * Functions for accessing PCI configuration space with MMCONFIG accesses
24 */ 26 */
25static u32 get_base_addr(unsigned int seg, int bus) 27static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
26{ 28{
27 int cfg_num = -1; 29 int cfg_num = -1;
28 struct acpi_table_mcfg_config *cfg; 30 struct acpi_table_mcfg_config *cfg;
29 31
32 if (seg == 0 && bus == 0 &&
33 test_bit(PCI_SLOT(devfn), fallback_slots))
34 return 0;
35
30 while (1) { 36 while (1) {
31 ++cfg_num; 37 ++cfg_num;
32 if (cfg_num >= pci_mmcfg_config_num) { 38 if (cfg_num >= pci_mmcfg_config_num) {
33 /* something bad is going on, no cfg table is found. */ 39 /* Not found - fallback to type 1 */
34 /* so we fall back to the old way we used to do this */ 40 return 0;
35 /* and just rely on the first entry to be correct. */
36 return pci_mmcfg_config[0].base_address;
37 } 41 }
38 cfg = &pci_mmcfg_config[cfg_num]; 42 cfg = &pci_mmcfg_config[cfg_num];
39 if (cfg->pci_segment_group_number != seg) 43 if (cfg->pci_segment_group_number != seg)
@@ -44,9 +48,9 @@ static u32 get_base_addr(unsigned int seg, int bus)
44 } 48 }
45} 49}
46 50
47static inline void pci_exp_set_dev_base(unsigned int seg, int bus, int devfn) 51static inline void pci_exp_set_dev_base(unsigned int base, int bus, int devfn)
48{ 52{
49 u32 dev_base = get_base_addr(seg, bus) | (bus << 20) | (devfn << 12); 53 u32 dev_base = base | (bus << 20) | (devfn << 12);
50 if (dev_base != mmcfg_last_accessed_device) { 54 if (dev_base != mmcfg_last_accessed_device) {
51 mmcfg_last_accessed_device = dev_base; 55 mmcfg_last_accessed_device = dev_base;
52 set_fixmap_nocache(FIX_PCIE_MCFG, dev_base); 56 set_fixmap_nocache(FIX_PCIE_MCFG, dev_base);
@@ -57,13 +61,18 @@ static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
57 unsigned int devfn, int reg, int len, u32 *value) 61 unsigned int devfn, int reg, int len, u32 *value)
58{ 62{
59 unsigned long flags; 63 unsigned long flags;
64 u32 base;
60 65
61 if (!value || (bus > 255) || (devfn > 255) || (reg > 4095)) 66 if (!value || (bus > 255) || (devfn > 255) || (reg > 4095))
62 return -EINVAL; 67 return -EINVAL;
63 68
69 base = get_base_addr(seg, bus, devfn);
70 if (!base)
71 return pci_conf1_read(seg,bus,devfn,reg,len,value);
72
64 spin_lock_irqsave(&pci_config_lock, flags); 73 spin_lock_irqsave(&pci_config_lock, flags);
65 74
66 pci_exp_set_dev_base(seg, bus, devfn); 75 pci_exp_set_dev_base(base, bus, devfn);
67 76
68 switch (len) { 77 switch (len) {
69 case 1: 78 case 1:
@@ -86,13 +95,18 @@ static int pci_mmcfg_write(unsigned int seg, unsigned int bus,
86 unsigned int devfn, int reg, int len, u32 value) 95 unsigned int devfn, int reg, int len, u32 value)
87{ 96{
88 unsigned long flags; 97 unsigned long flags;
98 u32 base;
89 99
90 if ((bus > 255) || (devfn > 255) || (reg > 4095)) 100 if ((bus > 255) || (devfn > 255) || (reg > 4095))
91 return -EINVAL; 101 return -EINVAL;
92 102
103 base = get_base_addr(seg, bus, devfn);
104 if (!base)
105 return pci_conf1_write(seg,bus,devfn,reg,len,value);
106
93 spin_lock_irqsave(&pci_config_lock, flags); 107 spin_lock_irqsave(&pci_config_lock, flags);
94 108
95 pci_exp_set_dev_base(seg, bus, devfn); 109 pci_exp_set_dev_base(base, bus, devfn);
96 110
97 switch (len) { 111 switch (len) {
98 case 1: 112 case 1:
@@ -116,6 +130,37 @@ static struct pci_raw_ops pci_mmcfg = {
116 .write = pci_mmcfg_write, 130 .write = pci_mmcfg_write,
117}; 131};
118 132
133/* K8 systems have some devices (typically in the builtin northbridge)
134 that are only accessible using type1
135 Normally this can be expressed in the MCFG by not listing them
136 and assigning suitable _SEGs, but this isn't implemented in some BIOS.
137 Instead try to discover all devices on bus 0 that are unreachable using MM
138 and fallback for them.
139 We only do this for bus 0/seg 0 */
140static __init void unreachable_devices(void)
141{
142 int i;
143 unsigned long flags;
144
145 for (i = 0; i < 32; i++) {
146 u32 val1;
147 u32 addr;
148
149 pci_conf1_read(0, 0, PCI_DEVFN(i, 0), 0, 4, &val1);
150 if (val1 == 0xffffffff)
151 continue;
152
153 /* Locking probably not needed, but safer */
154 spin_lock_irqsave(&pci_config_lock, flags);
155 addr = get_base_addr(0, 0, PCI_DEVFN(i, 0));
156 if (addr != 0)
157 pci_exp_set_dev_base(addr, 0, PCI_DEVFN(i, 0));
158 if (addr == 0 || readl((u32 __iomem *)mmcfg_virt_addr) != val1)
159 set_bit(i, fallback_slots);
160 spin_unlock_irqrestore(&pci_config_lock, flags);
161 }
162}
163
119static int __init pci_mmcfg_init(void) 164static int __init pci_mmcfg_init(void)
120{ 165{
121 if ((pci_probe & PCI_PROBE_MMCONF) == 0) 166 if ((pci_probe & PCI_PROBE_MMCONF) == 0)
@@ -131,6 +176,8 @@ static int __init pci_mmcfg_init(void)
131 raw_pci_ops = &pci_mmcfg; 176 raw_pci_ops = &pci_mmcfg;
132 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; 177 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
133 178
179 unreachable_devices();
180
134 out: 181 out:
135 return 0; 182 return 0;
136} 183}
diff --git a/arch/i386/pci/pci.h b/arch/i386/pci/pci.h
index 127d53ad16be..f550781ec310 100644
--- a/arch/i386/pci/pci.h
+++ b/arch/i386/pci/pci.h
@@ -74,3 +74,10 @@ extern spinlock_t pci_config_lock;
74 74
75extern int (*pcibios_enable_irq)(struct pci_dev *dev); 75extern int (*pcibios_enable_irq)(struct pci_dev *dev);
76extern void (*pcibios_disable_irq)(struct pci_dev *dev); 76extern void (*pcibios_disable_irq)(struct pci_dev *dev);
77
78extern int pci_conf1_write(unsigned int seg, unsigned int bus,
79 unsigned int devfn, int reg, int len, u32 value);
80extern int pci_conf1_read(unsigned int seg, unsigned int bus,
81 unsigned int devfn, int reg, int len, u32 *value);
82
83
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index b76ce1fe2e7f..199eeaf0f4e3 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -58,7 +58,7 @@ config IA64_UNCACHED_ALLOCATOR
58 bool 58 bool
59 select GENERIC_ALLOCATOR 59 select GENERIC_ALLOCATOR
60 60
61config ZONE_DMA_IS_DMA32 61config DMA_IS_DMA32
62 bool 62 bool
63 default y 63 default y
64 64
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig
index 87cfd31a4a39..ff8bb3770c9d 100644
--- a/arch/ia64/configs/sn2_defconfig
+++ b/arch/ia64/configs/sn2_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.13-rc6 3# Linux kernel version: 2.6.15-rc4
4# Tue Aug 16 14:40:41 2005 4# Fri Dec 2 10:33:48 2005
5# 5#
6 6
7# 7#
@@ -16,6 +16,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
16# General setup 16# General setup
17# 17#
18CONFIG_LOCALVERSION="" 18CONFIG_LOCALVERSION=""
19# CONFIG_LOCALVERSION_AUTO is not set
19CONFIG_SWAP=y 20CONFIG_SWAP=y
20CONFIG_SYSVIPC=y 21CONFIG_SYSVIPC=y
21CONFIG_POSIX_MQUEUE=y 22CONFIG_POSIX_MQUEUE=y
@@ -26,6 +27,7 @@ CONFIG_HOTPLUG=y
26CONFIG_KOBJECT_UEVENT=y 27CONFIG_KOBJECT_UEVENT=y
27# CONFIG_IKCONFIG is not set 28# CONFIG_IKCONFIG is not set
28CONFIG_CPUSETS=y 29CONFIG_CPUSETS=y
30CONFIG_INITRAMFS_SOURCE=""
29# CONFIG_EMBEDDED is not set 31# CONFIG_EMBEDDED is not set
30CONFIG_KALLSYMS=y 32CONFIG_KALLSYMS=y
31CONFIG_KALLSYMS_ALL=y 33CONFIG_KALLSYMS_ALL=y
@@ -56,11 +58,29 @@ CONFIG_KMOD=y
56CONFIG_STOP_MACHINE=y 58CONFIG_STOP_MACHINE=y
57 59
58# 60#
61# Block layer
62#
63
64#
65# IO Schedulers
66#
67CONFIG_IOSCHED_NOOP=y
68CONFIG_IOSCHED_AS=y
69CONFIG_IOSCHED_DEADLINE=y
70CONFIG_IOSCHED_CFQ=y
71CONFIG_DEFAULT_AS=y
72# CONFIG_DEFAULT_DEADLINE is not set
73# CONFIG_DEFAULT_CFQ is not set
74# CONFIG_DEFAULT_NOOP is not set
75CONFIG_DEFAULT_IOSCHED="anticipatory"
76
77#
59# Processor type and features 78# Processor type and features
60# 79#
61CONFIG_IA64=y 80CONFIG_IA64=y
62CONFIG_64BIT=y 81CONFIG_64BIT=y
63CONFIG_MMU=y 82CONFIG_MMU=y
83CONFIG_SWIOTLB=y
64CONFIG_RWSEM_XCHGADD_ALGORITHM=y 84CONFIG_RWSEM_XCHGADD_ALGORITHM=y
65CONFIG_GENERIC_CALIBRATE_DELAY=y 85CONFIG_GENERIC_CALIBRATE_DELAY=y
66CONFIG_TIME_INTERPOLATION=y 86CONFIG_TIME_INTERPOLATION=y
@@ -68,6 +88,7 @@ CONFIG_EFI=y
68CONFIG_GENERIC_IOMAP=y 88CONFIG_GENERIC_IOMAP=y
69CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 89CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
70CONFIG_IA64_UNCACHED_ALLOCATOR=y 90CONFIG_IA64_UNCACHED_ALLOCATOR=y
91CONFIG_ZONE_DMA_IS_DMA32=y
71# CONFIG_IA64_GENERIC is not set 92# CONFIG_IA64_GENERIC is not set
72# CONFIG_IA64_DIG is not set 93# CONFIG_IA64_DIG is not set
73# CONFIG_IA64_HP_ZX1 is not set 94# CONFIG_IA64_HP_ZX1 is not set
@@ -87,16 +108,12 @@ CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 108# CONFIG_HZ_1000 is not set
88CONFIG_HZ=250 109CONFIG_HZ=250
89CONFIG_IA64_L1_CACHE_SHIFT=7 110CONFIG_IA64_L1_CACHE_SHIFT=7
90CONFIG_NUMA=y
91CONFIG_VIRTUAL_MEM_MAP=y
92CONFIG_HOLES_IN_ZONE=y
93CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
94# CONFIG_IA64_CYCLONE is not set 111# CONFIG_IA64_CYCLONE is not set
95CONFIG_IOSAPIC=y 112CONFIG_IOSAPIC=y
96CONFIG_IA64_SGI_SN_XP=m 113CONFIG_IA64_SGI_SN_XP=m
97CONFIG_FORCE_MAX_ZONEORDER=18 114CONFIG_FORCE_MAX_ZONEORDER=17
98CONFIG_SMP=y 115CONFIG_SMP=y
99CONFIG_NR_CPUS=512 116CONFIG_NR_CPUS=1024
100# CONFIG_HOTPLUG_CPU is not set 117# CONFIG_HOTPLUG_CPU is not set
101CONFIG_SCHED_SMT=y 118CONFIG_SCHED_SMT=y
102CONFIG_PREEMPT=y 119CONFIG_PREEMPT=y
@@ -107,7 +124,17 @@ CONFIG_DISCONTIGMEM_MANUAL=y
107CONFIG_DISCONTIGMEM=y 124CONFIG_DISCONTIGMEM=y
108CONFIG_FLAT_NODE_MEM_MAP=y 125CONFIG_FLAT_NODE_MEM_MAP=y
109CONFIG_NEED_MULTIPLE_NODES=y 126CONFIG_NEED_MULTIPLE_NODES=y
110CONFIG_HAVE_DEC_LOCK=y 127# CONFIG_SPARSEMEM_STATIC is not set
128CONFIG_SPLIT_PTLOCK_CPUS=4
129CONFIG_ARCH_SELECT_MEMORY_MODEL=y
130CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
131CONFIG_ARCH_FLATMEM_ENABLE=y
132CONFIG_ARCH_SPARSEMEM_ENABLE=y
133CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
134CONFIG_NUMA=y
135CONFIG_VIRTUAL_MEM_MAP=y
136CONFIG_HOLES_IN_ZONE=y
137CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
111CONFIG_IA32_SUPPORT=y 138CONFIG_IA32_SUPPORT=y
112CONFIG_COMPAT=y 139CONFIG_COMPAT=y
113CONFIG_IA64_MCA_RECOVERY=y 140CONFIG_IA64_MCA_RECOVERY=y
@@ -126,28 +153,35 @@ CONFIG_BINFMT_ELF=y
126# Power management and ACPI 153# Power management and ACPI
127# 154#
128CONFIG_PM=y 155CONFIG_PM=y
129CONFIG_ACPI=y 156# CONFIG_PM_LEGACY is not set
157# CONFIG_PM_DEBUG is not set
130 158
131# 159#
132# ACPI (Advanced Configuration and Power Interface) Support 160# ACPI (Advanced Configuration and Power Interface) Support
133# 161#
162CONFIG_ACPI=y
134# CONFIG_ACPI_BUTTON is not set 163# CONFIG_ACPI_BUTTON is not set
135# CONFIG_ACPI_FAN is not set 164# CONFIG_ACPI_FAN is not set
136# CONFIG_ACPI_PROCESSOR is not set 165# CONFIG_ACPI_PROCESSOR is not set
137CONFIG_ACPI_NUMA=y 166CONFIG_ACPI_NUMA=y
167CONFIG_ACPI_BLACKLIST_YEAR=0
138# CONFIG_ACPI_DEBUG is not set 168# CONFIG_ACPI_DEBUG is not set
139CONFIG_ACPI_POWER=y 169CONFIG_ACPI_POWER=y
140CONFIG_ACPI_SYSTEM=y 170CONFIG_ACPI_SYSTEM=y
141# CONFIG_ACPI_CONTAINER is not set 171# CONFIG_ACPI_CONTAINER is not set
142 172
143# 173#
174# CPU Frequency scaling
175#
176# CONFIG_CPU_FREQ is not set
177
178#
144# Bus options (PCI, PCMCIA) 179# Bus options (PCI, PCMCIA)
145# 180#
146CONFIG_PCI=y 181CONFIG_PCI=y
147CONFIG_PCI_DOMAINS=y 182CONFIG_PCI_DOMAINS=y
148# CONFIG_PCI_MSI is not set 183# CONFIG_PCI_MSI is not set
149CONFIG_PCI_LEGACY_PROC=y 184CONFIG_PCI_LEGACY_PROC=y
150CONFIG_PCI_NAMES=y
151# CONFIG_PCI_DEBUG is not set 185# CONFIG_PCI_DEBUG is not set
152 186
153# 187#
@@ -191,8 +225,8 @@ CONFIG_SYN_COOKIES=y
191# CONFIG_INET_ESP is not set 225# CONFIG_INET_ESP is not set
192# CONFIG_INET_IPCOMP is not set 226# CONFIG_INET_IPCOMP is not set
193# CONFIG_INET_TUNNEL is not set 227# CONFIG_INET_TUNNEL is not set
194CONFIG_IP_TCPDIAG=y 228CONFIG_INET_DIAG=m
195# CONFIG_IP_TCPDIAG_IPV6 is not set 229CONFIG_INET_TCP_DIAG=m
196# CONFIG_TCP_CONG_ADVANCED is not set 230# CONFIG_TCP_CONG_ADVANCED is not set
197CONFIG_TCP_CONG_BIC=y 231CONFIG_TCP_CONG_BIC=y
198CONFIG_IPV6=m 232CONFIG_IPV6=m
@@ -205,6 +239,11 @@ CONFIG_IPV6=m
205# CONFIG_NETFILTER is not set 239# CONFIG_NETFILTER is not set
206 240
207# 241#
242# DCCP Configuration (EXPERIMENTAL)
243#
244# CONFIG_IP_DCCP is not set
245
246#
208# SCTP Configuration (EXPERIMENTAL) 247# SCTP Configuration (EXPERIMENTAL)
209# 248#
210# CONFIG_IP_SCTP is not set 249# CONFIG_IP_SCTP is not set
@@ -220,8 +259,11 @@ CONFIG_IPV6=m
220# CONFIG_NET_DIVERT is not set 259# CONFIG_NET_DIVERT is not set
221# CONFIG_ECONET is not set 260# CONFIG_ECONET is not set
222# CONFIG_WAN_ROUTER is not set 261# CONFIG_WAN_ROUTER is not set
262
263#
264# QoS and/or fair queueing
265#
223# CONFIG_NET_SCHED is not set 266# CONFIG_NET_SCHED is not set
224# CONFIG_NET_CLS_ROUTE is not set
225 267
226# 268#
227# Network testing 269# Network testing
@@ -230,6 +272,7 @@ CONFIG_IPV6=m
230# CONFIG_HAMRADIO is not set 272# CONFIG_HAMRADIO is not set
231# CONFIG_IRDA is not set 273# CONFIG_IRDA is not set
232# CONFIG_BT is not set 274# CONFIG_BT is not set
275# CONFIG_IEEE80211 is not set
233 276
234# 277#
235# Device Drivers 278# Device Drivers
@@ -244,6 +287,11 @@ CONFIG_FW_LOADER=y
244# CONFIG_DEBUG_DRIVER is not set 287# CONFIG_DEBUG_DRIVER is not set
245 288
246# 289#
290# Connector - unified userspace <-> kernelspace linker
291#
292# CONFIG_CONNECTOR is not set
293
294#
247# Memory Technology Devices (MTD) 295# Memory Technology Devices (MTD)
248# 296#
249# CONFIG_MTD is not set 297# CONFIG_MTD is not set
@@ -275,16 +323,7 @@ CONFIG_BLK_DEV_RAM=y
275CONFIG_BLK_DEV_RAM_COUNT=16 323CONFIG_BLK_DEV_RAM_COUNT=16
276CONFIG_BLK_DEV_RAM_SIZE=4096 324CONFIG_BLK_DEV_RAM_SIZE=4096
277CONFIG_BLK_DEV_INITRD=y 325CONFIG_BLK_DEV_INITRD=y
278CONFIG_INITRAMFS_SOURCE=""
279# CONFIG_CDROM_PKTCDVD is not set 326# CONFIG_CDROM_PKTCDVD is not set
280
281#
282# IO Schedulers
283#
284CONFIG_IOSCHED_NOOP=y
285CONFIG_IOSCHED_AS=y
286CONFIG_IOSCHED_DEADLINE=y
287CONFIG_IOSCHED_CFQ=y
288CONFIG_ATA_OVER_ETH=m 327CONFIG_ATA_OVER_ETH=m
289 328
290# 329#
@@ -349,6 +388,7 @@ CONFIG_IDEDMA_AUTO=y
349# 388#
350# SCSI device support 389# SCSI device support
351# 390#
391# CONFIG_RAID_ATTRS is not set
352CONFIG_SCSI=y 392CONFIG_SCSI=y
353CONFIG_SCSI_PROC_FS=y 393CONFIG_SCSI_PROC_FS=y
354 394
@@ -375,11 +415,13 @@ CONFIG_SCSI_CONSTANTS=y
375# 415#
376CONFIG_SCSI_SPI_ATTRS=y 416CONFIG_SCSI_SPI_ATTRS=y
377CONFIG_SCSI_FC_ATTRS=y 417CONFIG_SCSI_FC_ATTRS=y
378# CONFIG_SCSI_ISCSI_ATTRS is not set 418CONFIG_SCSI_ISCSI_ATTRS=m
419CONFIG_SCSI_SAS_ATTRS=y
379 420
380# 421#
381# SCSI low-level drivers 422# SCSI low-level drivers
382# 423#
424CONFIG_ISCSI_TCP=m
383# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 425# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
384# CONFIG_SCSI_3W_9XXX is not set 426# CONFIG_SCSI_3W_9XXX is not set
385# CONFIG_SCSI_ACARD is not set 427# CONFIG_SCSI_ACARD is not set
@@ -389,15 +431,19 @@ CONFIG_SCSI_FC_ATTRS=y
389# CONFIG_SCSI_AIC79XX is not set 431# CONFIG_SCSI_AIC79XX is not set
390# CONFIG_MEGARAID_NEWGEN is not set 432# CONFIG_MEGARAID_NEWGEN is not set
391# CONFIG_MEGARAID_LEGACY is not set 433# CONFIG_MEGARAID_LEGACY is not set
434# CONFIG_MEGARAID_SAS is not set
392CONFIG_SCSI_SATA=y 435CONFIG_SCSI_SATA=y
393# CONFIG_SCSI_SATA_AHCI is not set 436# CONFIG_SCSI_SATA_AHCI is not set
394# CONFIG_SCSI_SATA_SVW is not set 437# CONFIG_SCSI_SATA_SVW is not set
395# CONFIG_SCSI_ATA_PIIX is not set 438# CONFIG_SCSI_ATA_PIIX is not set
439# CONFIG_SCSI_SATA_MV is not set
396# CONFIG_SCSI_SATA_NV is not set 440# CONFIG_SCSI_SATA_NV is not set
397# CONFIG_SCSI_SATA_PROMISE is not set 441# CONFIG_SCSI_PDC_ADMA is not set
398# CONFIG_SCSI_SATA_QSTOR is not set 442# CONFIG_SCSI_SATA_QSTOR is not set
443# CONFIG_SCSI_SATA_PROMISE is not set
399# CONFIG_SCSI_SATA_SX4 is not set 444# CONFIG_SCSI_SATA_SX4 is not set
400# CONFIG_SCSI_SATA_SIL is not set 445# CONFIG_SCSI_SATA_SIL is not set
446# CONFIG_SCSI_SATA_SIL24 is not set
401# CONFIG_SCSI_SATA_SIS is not set 447# CONFIG_SCSI_SATA_SIS is not set
402# CONFIG_SCSI_SATA_ULI is not set 448# CONFIG_SCSI_SATA_ULI is not set
403# CONFIG_SCSI_SATA_VIA is not set 449# CONFIG_SCSI_SATA_VIA is not set
@@ -411,7 +457,6 @@ CONFIG_SCSI_SATA_VITESSE=y
411# CONFIG_SCSI_IPR is not set 457# CONFIG_SCSI_IPR is not set
412# CONFIG_SCSI_QLOGIC_FC is not set 458# CONFIG_SCSI_QLOGIC_FC is not set
413CONFIG_SCSI_QLOGIC_1280=y 459CONFIG_SCSI_QLOGIC_1280=y
414# CONFIG_SCSI_QLOGIC_1280_1040 is not set
415CONFIG_SCSI_QLA2XXX=y 460CONFIG_SCSI_QLA2XXX=y
416# CONFIG_SCSI_QLA21XX is not set 461# CONFIG_SCSI_QLA21XX is not set
417CONFIG_SCSI_QLA22XX=y 462CONFIG_SCSI_QLA22XX=y
@@ -451,6 +496,7 @@ CONFIG_DM_MULTIPATH_EMC=m
451CONFIG_FUSION=y 496CONFIG_FUSION=y
452CONFIG_FUSION_SPI=y 497CONFIG_FUSION_SPI=y
453CONFIG_FUSION_FC=y 498CONFIG_FUSION_FC=y
499CONFIG_FUSION_SAS=y
454CONFIG_FUSION_MAX_SGE=128 500CONFIG_FUSION_MAX_SGE=128
455CONFIG_FUSION_CTL=m 501CONFIG_FUSION_CTL=m
456 502
@@ -479,6 +525,10 @@ CONFIG_NETDEVICES=y
479# CONFIG_ARCNET is not set 525# CONFIG_ARCNET is not set
480 526
481# 527#
528# PHY device support
529#
530
531#
482# Ethernet (10 or 100Mbit) 532# Ethernet (10 or 100Mbit)
483# 533#
484# CONFIG_NET_ETHERNET is not set 534# CONFIG_NET_ETHERNET is not set
@@ -493,6 +543,7 @@ CONFIG_NETDEVICES=y
493# CONFIG_HAMACHI is not set 543# CONFIG_HAMACHI is not set
494# CONFIG_YELLOWFIN is not set 544# CONFIG_YELLOWFIN is not set
495# CONFIG_R8169 is not set 545# CONFIG_R8169 is not set
546# CONFIG_SIS190 is not set
496# CONFIG_SKGE is not set 547# CONFIG_SKGE is not set
497# CONFIG_SK98LIN is not set 548# CONFIG_SK98LIN is not set
498CONFIG_TIGON3=y 549CONFIG_TIGON3=y
@@ -501,10 +552,10 @@ CONFIG_TIGON3=y
501# 552#
502# Ethernet (10000 Mbit) 553# Ethernet (10000 Mbit)
503# 554#
555CONFIG_CHELSIO_T1=m
504# CONFIG_IXGB is not set 556# CONFIG_IXGB is not set
505CONFIG_S2IO=m 557CONFIG_S2IO=m
506# CONFIG_S2IO_NAPI is not set 558# CONFIG_S2IO_NAPI is not set
507# CONFIG_2BUFF_MODE is not set
508 559
509# 560#
510# Token Ring devices 561# Token Ring devices
@@ -583,6 +634,7 @@ CONFIG_HW_CONSOLE=y
583CONFIG_SERIAL_NONSTANDARD=y 634CONFIG_SERIAL_NONSTANDARD=y
584# CONFIG_ROCKETPORT is not set 635# CONFIG_ROCKETPORT is not set
585# CONFIG_CYCLADES is not set 636# CONFIG_CYCLADES is not set
637# CONFIG_DIGIEPCA is not set
586# CONFIG_MOXA_SMARTIO is not set 638# CONFIG_MOXA_SMARTIO is not set
587# CONFIG_ISI is not set 639# CONFIG_ISI is not set
588# CONFIG_SYNCLINKMP is not set 640# CONFIG_SYNCLINKMP is not set
@@ -629,7 +681,8 @@ CONFIG_EFI_RTC=y
629# 681#
630# Ftape, the floppy tape device driver 682# Ftape, the floppy tape device driver
631# 683#
632# CONFIG_AGP is not set 684CONFIG_AGP=y
685CONFIG_AGP_SGI_TIOCA=y
633# CONFIG_DRM is not set 686# CONFIG_DRM is not set
634CONFIG_RAW_DRIVER=m 687CONFIG_RAW_DRIVER=m
635# CONFIG_HPET is not set 688# CONFIG_HPET is not set
@@ -641,12 +694,12 @@ CONFIG_MMTIMER=y
641# TPM devices 694# TPM devices
642# 695#
643# CONFIG_TCG_TPM is not set 696# CONFIG_TCG_TPM is not set
697# CONFIG_TELCLOCK is not set
644 698
645# 699#
646# I2C support 700# I2C support
647# 701#
648# CONFIG_I2C is not set 702# CONFIG_I2C is not set
649# CONFIG_I2C_SENSOR is not set
650 703
651# 704#
652# Dallas's 1-wire bus 705# Dallas's 1-wire bus
@@ -657,12 +710,17 @@ CONFIG_MMTIMER=y
657# Hardware Monitoring support 710# Hardware Monitoring support
658# 711#
659# CONFIG_HWMON is not set 712# CONFIG_HWMON is not set
713# CONFIG_HWMON_VID is not set
660 714
661# 715#
662# Misc devices 716# Misc devices
663# 717#
664 718
665# 719#
720# Multimedia Capabilities Port drivers
721#
722
723#
666# Multimedia devices 724# Multimedia devices
667# 725#
668# CONFIG_VIDEO_DEV is not set 726# CONFIG_VIDEO_DEV is not set
@@ -721,12 +779,15 @@ CONFIG_USB_UHCI_HCD=m
721# 779#
722# USB Device Class drivers 780# USB Device Class drivers
723# 781#
724# CONFIG_USB_BLUETOOTH_TTY is not set
725# CONFIG_USB_ACM is not set 782# CONFIG_USB_ACM is not set
726# CONFIG_USB_PRINTER is not set 783# CONFIG_USB_PRINTER is not set
727 784
728# 785#
729# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 786# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
787#
788
789#
790# may also be needed; see USB_STORAGE Help for more information
730# 791#
731# CONFIG_USB_STORAGE is not set 792# CONFIG_USB_STORAGE is not set
732 793
@@ -751,9 +812,11 @@ CONFIG_USB_HIDINPUT=y
751# CONFIG_USB_MTOUCH is not set 812# CONFIG_USB_MTOUCH is not set
752# CONFIG_USB_ITMTOUCH is not set 813# CONFIG_USB_ITMTOUCH is not set
753# CONFIG_USB_EGALAX is not set 814# CONFIG_USB_EGALAX is not set
815# CONFIG_USB_YEALINK is not set
754# CONFIG_USB_XPAD is not set 816# CONFIG_USB_XPAD is not set
755# CONFIG_USB_ATI_REMOTE is not set 817# CONFIG_USB_ATI_REMOTE is not set
756# CONFIG_USB_KEYSPAN_REMOTE is not set 818# CONFIG_USB_KEYSPAN_REMOTE is not set
819# CONFIG_USB_APPLETOUCH is not set
757 820
758# 821#
759# USB Imaging devices 822# USB Imaging devices
@@ -824,11 +887,13 @@ CONFIG_USB_MON=y
824# InfiniBand support 887# InfiniBand support
825# 888#
826CONFIG_INFINIBAND=m 889CONFIG_INFINIBAND=m
827CONFIG_INFINIBAND_USER_VERBS=m 890# CONFIG_INFINIBAND_USER_MAD is not set
891CONFIG_INFINIBAND_USER_ACCESS=m
828CONFIG_INFINIBAND_MTHCA=m 892CONFIG_INFINIBAND_MTHCA=m
829# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 893# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
830CONFIG_INFINIBAND_IPOIB=m 894CONFIG_INFINIBAND_IPOIB=m
831# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 895# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
896CONFIG_INFINIBAND_SRP=m
832 897
833# 898#
834# SN Devices 899# SN Devices
@@ -858,16 +923,12 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
858CONFIG_REISERFS_FS_SECURITY=y 923CONFIG_REISERFS_FS_SECURITY=y
859# CONFIG_JFS_FS is not set 924# CONFIG_JFS_FS is not set
860CONFIG_FS_POSIX_ACL=y 925CONFIG_FS_POSIX_ACL=y
861
862#
863# XFS support
864#
865CONFIG_XFS_FS=y 926CONFIG_XFS_FS=y
866CONFIG_XFS_EXPORT=y 927CONFIG_XFS_EXPORT=y
867CONFIG_XFS_RT=y
868CONFIG_XFS_QUOTA=y 928CONFIG_XFS_QUOTA=y
869# CONFIG_XFS_SECURITY is not set 929# CONFIG_XFS_SECURITY is not set
870CONFIG_XFS_POSIX_ACL=y 930CONFIG_XFS_POSIX_ACL=y
931CONFIG_XFS_RT=y
871# CONFIG_MINIX_FS is not set 932# CONFIG_MINIX_FS is not set
872# CONFIG_ROMFS_FS is not set 933# CONFIG_ROMFS_FS is not set
873CONFIG_INOTIFY=y 934CONFIG_INOTIFY=y
@@ -878,6 +939,7 @@ CONFIG_QUOTACTL=y
878CONFIG_DNOTIFY=y 939CONFIG_DNOTIFY=y
879CONFIG_AUTOFS_FS=m 940CONFIG_AUTOFS_FS=m
880CONFIG_AUTOFS4_FS=m 941CONFIG_AUTOFS4_FS=m
942CONFIG_FUSE_FS=m
881 943
882# 944#
883# CD-ROM/DVD Filesystems 945# CD-ROM/DVD Filesystems
@@ -904,13 +966,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
904CONFIG_PROC_FS=y 966CONFIG_PROC_FS=y
905CONFIG_PROC_KCORE=y 967CONFIG_PROC_KCORE=y
906CONFIG_SYSFS=y 968CONFIG_SYSFS=y
907# CONFIG_DEVPTS_FS_XATTR is not set
908CONFIG_TMPFS=y 969CONFIG_TMPFS=y
909CONFIG_TMPFS_XATTR=y
910CONFIG_TMPFS_SECURITY=y
911CONFIG_HUGETLBFS=y 970CONFIG_HUGETLBFS=y
912CONFIG_HUGETLB_PAGE=y 971CONFIG_HUGETLB_PAGE=y
913CONFIG_RAMFS=y 972CONFIG_RAMFS=y
973CONFIG_RELAYFS_FS=m
914 974
915# 975#
916# Miscellaneous filesystems 976# Miscellaneous filesystems
@@ -959,6 +1019,7 @@ CONFIG_CIFS=m
959# CONFIG_NCP_FS is not set 1019# CONFIG_NCP_FS is not set
960# CONFIG_CODA_FS is not set 1020# CONFIG_CODA_FS is not set
961# CONFIG_AFS_FS is not set 1021# CONFIG_AFS_FS is not set
1022# CONFIG_9P_FS is not set
962 1023
963# 1024#
964# Partition Types 1025# Partition Types
@@ -1028,18 +1089,21 @@ CONFIG_NLS_UTF8=y
1028# Library routines 1089# Library routines
1029# 1090#
1030# CONFIG_CRC_CCITT is not set 1091# CONFIG_CRC_CCITT is not set
1092CONFIG_CRC16=m
1031CONFIG_CRC32=y 1093CONFIG_CRC32=y
1032# CONFIG_LIBCRC32C is not set 1094CONFIG_LIBCRC32C=m
1033CONFIG_ZLIB_INFLATE=m 1095CONFIG_ZLIB_INFLATE=m
1034CONFIG_ZLIB_DEFLATE=m 1096CONFIG_ZLIB_DEFLATE=m
1035CONFIG_GENERIC_ALLOCATOR=y 1097CONFIG_GENERIC_ALLOCATOR=y
1036CONFIG_GENERIC_HARDIRQS=y 1098CONFIG_GENERIC_HARDIRQS=y
1037CONFIG_GENERIC_IRQ_PROBE=y 1099CONFIG_GENERIC_IRQ_PROBE=y
1100CONFIG_GENERIC_PENDING_IRQ=y
1038 1101
1039# 1102#
1040# Profiling support 1103# Instrumentation Support
1041# 1104#
1042# CONFIG_PROFILING is not set 1105# CONFIG_PROFILING is not set
1106# CONFIG_KPROBES is not set
1043 1107
1044# 1108#
1045# Kernel hacking 1109# Kernel hacking
@@ -1048,6 +1112,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
1048CONFIG_DEBUG_KERNEL=y 1112CONFIG_DEBUG_KERNEL=y
1049CONFIG_MAGIC_SYSRQ=y 1113CONFIG_MAGIC_SYSRQ=y
1050CONFIG_LOG_BUF_SHIFT=20 1114CONFIG_LOG_BUF_SHIFT=20
1115CONFIG_DETECT_SOFTLOCKUP=y
1051# CONFIG_SCHEDSTATS is not set 1116# CONFIG_SCHEDSTATS is not set
1052# CONFIG_DEBUG_SLAB is not set 1117# CONFIG_DEBUG_SLAB is not set
1053CONFIG_DEBUG_PREEMPT=y 1118CONFIG_DEBUG_PREEMPT=y
@@ -1056,7 +1121,8 @@ CONFIG_DEBUG_PREEMPT=y
1056# CONFIG_DEBUG_KOBJECT is not set 1121# CONFIG_DEBUG_KOBJECT is not set
1057CONFIG_DEBUG_INFO=y 1122CONFIG_DEBUG_INFO=y
1058# CONFIG_DEBUG_FS is not set 1123# CONFIG_DEBUG_FS is not set
1059# CONFIG_KPROBES is not set 1124# CONFIG_DEBUG_VM is not set
1125# CONFIG_RCU_TORTURE_TEST is not set
1060CONFIG_IA64_GRANULE_16MB=y 1126CONFIG_IA64_GRANULE_16MB=y
1061# CONFIG_IA64_GRANULE_64MB is not set 1127# CONFIG_IA64_GRANULE_64MB is not set
1062# CONFIG_IA64_PRINT_HAZARDS is not set 1128# CONFIG_IA64_PRINT_HAZARDS is not set
@@ -1097,7 +1163,7 @@ CONFIG_CRYPTO_DES=m
1097# CONFIG_CRYPTO_ANUBIS is not set 1163# CONFIG_CRYPTO_ANUBIS is not set
1098CONFIG_CRYPTO_DEFLATE=m 1164CONFIG_CRYPTO_DEFLATE=m
1099# CONFIG_CRYPTO_MICHAEL_MIC is not set 1165# CONFIG_CRYPTO_MICHAEL_MIC is not set
1100# CONFIG_CRYPTO_CRC32C is not set 1166CONFIG_CRYPTO_CRC32C=m
1101# CONFIG_CRYPTO_TEST is not set 1167# CONFIG_CRYPTO_TEST is not set
1102 1168
1103# 1169#
diff --git a/arch/ia64/configs/tiger_defconfig b/arch/ia64/configs/tiger_defconfig
index 9bc8bcafc905..b1e8f09e9fd5 100644
--- a/arch/ia64/configs/tiger_defconfig
+++ b/arch/ia64/configs/tiger_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc1 3# Linux kernel version: 2.6.15-rc4
4# Wed Sep 14 15:17:57 2005 4# Fri Dec 2 16:06:32 2005
5# 5#
6 6
7# 7#
@@ -59,17 +59,36 @@ CONFIG_KMOD=y
59CONFIG_STOP_MACHINE=y 59CONFIG_STOP_MACHINE=y
60 60
61# 61#
62# Block layer
63#
64
65#
66# IO Schedulers
67#
68CONFIG_IOSCHED_NOOP=y
69CONFIG_IOSCHED_AS=y
70CONFIG_IOSCHED_DEADLINE=y
71CONFIG_IOSCHED_CFQ=y
72CONFIG_DEFAULT_AS=y
73# CONFIG_DEFAULT_DEADLINE is not set
74# CONFIG_DEFAULT_CFQ is not set
75# CONFIG_DEFAULT_NOOP is not set
76CONFIG_DEFAULT_IOSCHED="anticipatory"
77
78#
62# Processor type and features 79# Processor type and features
63# 80#
64CONFIG_IA64=y 81CONFIG_IA64=y
65CONFIG_64BIT=y 82CONFIG_64BIT=y
66CONFIG_MMU=y 83CONFIG_MMU=y
84CONFIG_SWIOTLB=y
67CONFIG_RWSEM_XCHGADD_ALGORITHM=y 85CONFIG_RWSEM_XCHGADD_ALGORITHM=y
68CONFIG_GENERIC_CALIBRATE_DELAY=y 86CONFIG_GENERIC_CALIBRATE_DELAY=y
69CONFIG_TIME_INTERPOLATION=y 87CONFIG_TIME_INTERPOLATION=y
70CONFIG_EFI=y 88CONFIG_EFI=y
71CONFIG_GENERIC_IOMAP=y 89CONFIG_GENERIC_IOMAP=y
72CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
91CONFIG_ZONE_DMA_IS_DMA32=y
73# CONFIG_IA64_GENERIC is not set 92# CONFIG_IA64_GENERIC is not set
74CONFIG_IA64_DIG=y 93CONFIG_IA64_DIG=y
75# CONFIG_IA64_HP_ZX1 is not set 94# CONFIG_IA64_HP_ZX1 is not set
@@ -82,18 +101,16 @@ CONFIG_MCKINLEY=y
82# CONFIG_IA64_PAGE_SIZE_8KB is not set 101# CONFIG_IA64_PAGE_SIZE_8KB is not set
83CONFIG_IA64_PAGE_SIZE_16KB=y 102CONFIG_IA64_PAGE_SIZE_16KB=y
84# CONFIG_IA64_PAGE_SIZE_64KB is not set 103# CONFIG_IA64_PAGE_SIZE_64KB is not set
104CONFIG_PGTABLE_3=y
105# CONFIG_PGTABLE_4 is not set
85# CONFIG_HZ_100 is not set 106# CONFIG_HZ_100 is not set
86CONFIG_HZ_250=y 107CONFIG_HZ_250=y
87# CONFIG_HZ_1000 is not set 108# CONFIG_HZ_1000 is not set
88CONFIG_HZ=250 109CONFIG_HZ=250
89CONFIG_IA64_L1_CACHE_SHIFT=7 110CONFIG_IA64_L1_CACHE_SHIFT=7
90# CONFIG_NUMA is not set
91CONFIG_VIRTUAL_MEM_MAP=y
92CONFIG_HOLES_IN_ZONE=y
93CONFIG_IA64_CYCLONE=y 111CONFIG_IA64_CYCLONE=y
94CONFIG_IOSAPIC=y 112CONFIG_IOSAPIC=y
95# CONFIG_IA64_SGI_SN_XP is not set 113CONFIG_FORCE_MAX_ZONEORDER=17
96CONFIG_FORCE_MAX_ZONEORDER=18
97CONFIG_SMP=y 114CONFIG_SMP=y
98CONFIG_NR_CPUS=4 115CONFIG_NR_CPUS=4
99CONFIG_HOTPLUG_CPU=y 116CONFIG_HOTPLUG_CPU=y
@@ -106,7 +123,13 @@ CONFIG_FLATMEM_MANUAL=y
106CONFIG_FLATMEM=y 123CONFIG_FLATMEM=y
107CONFIG_FLAT_NODE_MEM_MAP=y 124CONFIG_FLAT_NODE_MEM_MAP=y
108# CONFIG_SPARSEMEM_STATIC is not set 125# CONFIG_SPARSEMEM_STATIC is not set
109CONFIG_HAVE_DEC_LOCK=y 126CONFIG_SPLIT_PTLOCK_CPUS=4
127CONFIG_ARCH_SELECT_MEMORY_MODEL=y
128CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
129CONFIG_ARCH_FLATMEM_ENABLE=y
130CONFIG_ARCH_SPARSEMEM_ENABLE=y
131CONFIG_VIRTUAL_MEM_MAP=y
132CONFIG_HOLES_IN_ZONE=y
110CONFIG_IA32_SUPPORT=y 133CONFIG_IA32_SUPPORT=y
111CONFIG_COMPAT=y 134CONFIG_COMPAT=y
112CONFIG_IA64_MCA_RECOVERY=y 135CONFIG_IA64_MCA_RECOVERY=y
@@ -118,7 +141,6 @@ CONFIG_IA64_PALINFO=y
118# 141#
119CONFIG_EFI_VARS=y 142CONFIG_EFI_VARS=y
120CONFIG_EFI_PCDP=y 143CONFIG_EFI_PCDP=y
121# CONFIG_DELL_RBU is not set
122CONFIG_BINFMT_ELF=y 144CONFIG_BINFMT_ELF=y
123CONFIG_BINFMT_MISC=m 145CONFIG_BINFMT_MISC=m
124 146
@@ -126,6 +148,7 @@ CONFIG_BINFMT_MISC=m
126# Power management and ACPI 148# Power management and ACPI
127# 149#
128CONFIG_PM=y 150CONFIG_PM=y
151CONFIG_PM_LEGACY=y
129# CONFIG_PM_DEBUG is not set 152# CONFIG_PM_DEBUG is not set
130 153
131# 154#
@@ -226,14 +249,16 @@ CONFIG_TCP_CONG_BIC=y
226# CONFIG_NET_DIVERT is not set 249# CONFIG_NET_DIVERT is not set
227# CONFIG_ECONET is not set 250# CONFIG_ECONET is not set
228# CONFIG_WAN_ROUTER is not set 251# CONFIG_WAN_ROUTER is not set
252
253#
254# QoS and/or fair queueing
255#
229# CONFIG_NET_SCHED is not set 256# CONFIG_NET_SCHED is not set
230# CONFIG_NET_CLS_ROUTE is not set
231 257
232# 258#
233# Network testing 259# Network testing
234# 260#
235# CONFIG_NET_PKTGEN is not set 261# CONFIG_NET_PKTGEN is not set
236# CONFIG_NETFILTER_NETLINK is not set
237# CONFIG_HAMRADIO is not set 262# CONFIG_HAMRADIO is not set
238# CONFIG_IRDA is not set 263# CONFIG_IRDA is not set
239# CONFIG_BT is not set 264# CONFIG_BT is not set
@@ -295,14 +320,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
295CONFIG_BLK_DEV_RAM_SIZE=4096 320CONFIG_BLK_DEV_RAM_SIZE=4096
296CONFIG_BLK_DEV_INITRD=y 321CONFIG_BLK_DEV_INITRD=y
297# CONFIG_CDROM_PKTCDVD is not set 322# CONFIG_CDROM_PKTCDVD is not set
298
299#
300# IO Schedulers
301#
302CONFIG_IOSCHED_NOOP=y
303CONFIG_IOSCHED_AS=y
304CONFIG_IOSCHED_DEADLINE=y
305CONFIG_IOSCHED_CFQ=y
306# CONFIG_ATA_OVER_ETH is not set 323# CONFIG_ATA_OVER_ETH is not set
307 324
308# 325#
@@ -400,6 +417,7 @@ CONFIG_SCSI_FC_ATTRS=y
400# 417#
401# SCSI low-level drivers 418# SCSI low-level drivers
402# 419#
420# CONFIG_ISCSI_TCP is not set
403# CONFIG_BLK_DEV_3W_XXXX_RAID is not set 421# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
404# CONFIG_SCSI_3W_9XXX is not set 422# CONFIG_SCSI_3W_9XXX is not set
405# CONFIG_SCSI_ACARD is not set 423# CONFIG_SCSI_ACARD is not set
@@ -409,6 +427,7 @@ CONFIG_SCSI_FC_ATTRS=y
409# CONFIG_SCSI_AIC79XX is not set 427# CONFIG_SCSI_AIC79XX is not set
410# CONFIG_MEGARAID_NEWGEN is not set 428# CONFIG_MEGARAID_NEWGEN is not set
411# CONFIG_MEGARAID_LEGACY is not set 429# CONFIG_MEGARAID_LEGACY is not set
430# CONFIG_MEGARAID_SAS is not set
412# CONFIG_SCSI_SATA is not set 431# CONFIG_SCSI_SATA is not set
413# CONFIG_SCSI_DMX3191D is not set 432# CONFIG_SCSI_DMX3191D is not set
414# CONFIG_SCSI_FUTURE_DOMAIN is not set 433# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -424,7 +443,6 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
424CONFIG_SCSI_QLOGIC_FC=y 443CONFIG_SCSI_QLOGIC_FC=y
425# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set 444# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
426CONFIG_SCSI_QLOGIC_1280=y 445CONFIG_SCSI_QLOGIC_1280=y
427# CONFIG_SCSI_QLOGIC_1280_1040 is not set
428CONFIG_SCSI_QLA2XXX=y 446CONFIG_SCSI_QLA2XXX=y
429CONFIG_SCSI_QLA21XX=m 447CONFIG_SCSI_QLA21XX=m
430CONFIG_SCSI_QLA22XX=m 448CONFIG_SCSI_QLA22XX=m
@@ -463,6 +481,7 @@ CONFIG_DM_ZERO=m
463CONFIG_FUSION=y 481CONFIG_FUSION=y
464CONFIG_FUSION_SPI=y 482CONFIG_FUSION_SPI=y
465CONFIG_FUSION_FC=y 483CONFIG_FUSION_FC=y
484# CONFIG_FUSION_SAS is not set
466CONFIG_FUSION_MAX_SGE=128 485CONFIG_FUSION_MAX_SGE=128
467CONFIG_FUSION_CTL=y 486CONFIG_FUSION_CTL=y
468 487
@@ -503,6 +522,7 @@ CONFIG_NET_ETHERNET=y
503CONFIG_MII=m 522CONFIG_MII=m
504# CONFIG_HAPPYMEAL is not set 523# CONFIG_HAPPYMEAL is not set
505# CONFIG_SUNGEM is not set 524# CONFIG_SUNGEM is not set
525# CONFIG_CASSINI is not set
506# CONFIG_NET_VENDOR_3COM is not set 526# CONFIG_NET_VENDOR_3COM is not set
507 527
508# 528#
@@ -727,6 +747,7 @@ CONFIG_MAX_RAW_DEVS=256
727# TPM devices 747# TPM devices
728# 748#
729# CONFIG_TCG_TPM is not set 749# CONFIG_TCG_TPM is not set
750# CONFIG_TELCLOCK is not set
730 751
731# 752#
732# I2C support 753# I2C support
@@ -812,12 +833,15 @@ CONFIG_USB_UHCI_HCD=y
812# 833#
813# USB Device Class drivers 834# USB Device Class drivers
814# 835#
815# CONFIG_USB_BLUETOOTH_TTY is not set
816# CONFIG_USB_ACM is not set 836# CONFIG_USB_ACM is not set
817# CONFIG_USB_PRINTER is not set 837# CONFIG_USB_PRINTER is not set
818 838
819# 839#
820# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information 840# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
841#
842
843#
844# may also be needed; see USB_STORAGE Help for more information
821# 845#
822CONFIG_USB_STORAGE=m 846CONFIG_USB_STORAGE=m
823# CONFIG_USB_STORAGE_DEBUG is not set 847# CONFIG_USB_STORAGE_DEBUG is not set
@@ -1123,9 +1147,10 @@ CONFIG_GENERIC_IRQ_PROBE=y
1123CONFIG_GENERIC_PENDING_IRQ=y 1147CONFIG_GENERIC_PENDING_IRQ=y
1124 1148
1125# 1149#
1126# Profiling support 1150# Instrumentation Support
1127# 1151#
1128# CONFIG_PROFILING is not set 1152# CONFIG_PROFILING is not set
1153# CONFIG_KPROBES is not set
1129 1154
1130# 1155#
1131# Kernel hacking 1156# Kernel hacking
@@ -1142,7 +1167,8 @@ CONFIG_DETECT_SOFTLOCKUP=y
1142# CONFIG_DEBUG_KOBJECT is not set 1167# CONFIG_DEBUG_KOBJECT is not set
1143# CONFIG_DEBUG_INFO is not set 1168# CONFIG_DEBUG_INFO is not set
1144# CONFIG_DEBUG_FS is not set 1169# CONFIG_DEBUG_FS is not set
1145# CONFIG_KPROBES is not set 1170# CONFIG_DEBUG_VM is not set
1171# CONFIG_RCU_TORTURE_TEST is not set
1146CONFIG_IA64_GRANULE_16MB=y 1172CONFIG_IA64_GRANULE_16MB=y
1147# CONFIG_IA64_GRANULE_64MB is not set 1173# CONFIG_IA64_GRANULE_64MB is not set
1148# CONFIG_IA64_PRINT_HAZARDS is not set 1174# CONFIG_IA64_PRINT_HAZARDS is not set
diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c
index a7280d9f6c16..4e7a6a1ec6c7 100644
--- a/arch/ia64/ia32/binfmt_elf32.c
+++ b/arch/ia64/ia32/binfmt_elf32.c
@@ -261,8 +261,6 @@ elf32_set_personality (void)
261{ 261{
262 set_personality(PER_LINUX32); 262 set_personality(PER_LINUX32);
263 current->thread.map_base = IA32_PAGE_OFFSET/3; 263 current->thread.map_base = IA32_PAGE_OFFSET/3;
264 current->thread.task_size = IA32_PAGE_OFFSET; /* use what Linux/x86 uses... */
265 set_fs(USER_DS); /* set addr limit for new TASK_SIZE */
266} 264}
267 265
268static unsigned long 266static unsigned long
diff --git a/arch/ia64/ia32/ia32priv.h b/arch/ia64/ia32/ia32priv.h
index e3e9290e3ff2..68ceb4e690c7 100644
--- a/arch/ia64/ia32/ia32priv.h
+++ b/arch/ia64/ia32/ia32priv.h
@@ -305,7 +305,6 @@ struct old_linux32_dirent {
305#define ELF_DATA ELFDATA2LSB 305#define ELF_DATA ELFDATA2LSB
306#define ELF_ARCH EM_386 306#define ELF_ARCH EM_386
307 307
308#define IA32_PAGE_OFFSET 0xc0000000
309#define IA32_STACK_TOP IA32_PAGE_OFFSET 308#define IA32_STACK_TOP IA32_PAGE_OFFSET
310#define IA32_GATE_OFFSET IA32_PAGE_OFFSET 309#define IA32_GATE_OFFSET IA32_PAGE_OFFSET
311#define IA32_GATE_END IA32_PAGE_OFFSET + PAGE_SIZE 310#define IA32_GATE_END IA32_PAGE_OFFSET + PAGE_SIZE
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c
index 2895d6e6062f..89a70400c4f6 100644
--- a/arch/ia64/kernel/kprobes.c
+++ b/arch/ia64/kernel/kprobes.c
@@ -630,7 +630,7 @@ static int __kprobes pre_kprobes_handler(struct die_args *args)
630 */ 630 */
631 save_previous_kprobe(kcb); 631 save_previous_kprobe(kcb);
632 set_current_kprobe(p, kcb); 632 set_current_kprobe(p, kcb);
633 p->nmissed++; 633 kprobes_inc_nmissed_count(p);
634 prepare_ss(p, regs); 634 prepare_ss(p, regs);
635 kcb->kprobe_status = KPROBE_REENTER; 635 kcb->kprobe_status = KPROBE_REENTER;
636 return 1; 636 return 1;
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index 2e33665d9c18..e9904c74d2ba 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -721,8 +721,13 @@ flush_thread (void)
721 /* drop floating-point and debug-register state if it exists: */ 721 /* drop floating-point and debug-register state if it exists: */
722 current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID); 722 current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID);
723 ia64_drop_fpu(current); 723 ia64_drop_fpu(current);
724 if (IS_IA32_PROCESS(ia64_task_regs(current))) 724#ifdef CONFIG_IA32_SUPPORT
725 if (IS_IA32_PROCESS(ia64_task_regs(current))) {
725 ia32_drop_partial_page_list(current); 726 ia32_drop_partial_page_list(current);
727 current->thread.task_size = IA32_PAGE_OFFSET;
728 set_fs(USER_DS);
729 }
730#endif
726} 731}
727 732
728/* 733/*
diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c
index ca68e6e44a72..1461dc660b43 100644
--- a/arch/ia64/kernel/salinfo.c
+++ b/arch/ia64/kernel/salinfo.c
@@ -293,7 +293,7 @@ retry:
293 if (file->f_flags & O_NONBLOCK) 293 if (file->f_flags & O_NONBLOCK)
294 return -EAGAIN; 294 return -EAGAIN;
295 if (down_interruptible(&data->sem)) 295 if (down_interruptible(&data->sem))
296 return -ERESTARTSYS; 296 return -EINTR;
297 } 297 }
298 298
299 n = data->cpu_check; 299 n = data->cpu_check;
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 5b7e736f3b49..028a2b95936c 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -249,3 +249,32 @@ time_init (void)
249 */ 249 */
250 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); 250 set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
251} 251}
252
253#define SMALLUSECS 100
254
255void
256udelay (unsigned long usecs)
257{
258 unsigned long start;
259 unsigned long cycles;
260 unsigned long smallusecs;
261
262 /*
263 * Execute the non-preemptible delay loop (because the ITC might
264 * not be synchronized between CPUS) in relatively short time
265 * chunks, allowing preemption between the chunks.
266 */
267 while (usecs > 0) {
268 smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs;
269 preempt_disable();
270 cycles = smallusecs*local_cpu_data->cyc_per_usec;
271 start = ia64_get_itc();
272
273 while (ia64_get_itc() - start < cycles)
274 cpu_relax();
275
276 preempt_enable();
277 usecs -= smallusecs;
278 }
279}
280EXPORT_SYMBOL(udelay);
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c
index c6d40446c2c4..b631cf86ed44 100644
--- a/arch/ia64/kernel/uncached.c
+++ b/arch/ia64/kernel/uncached.c
@@ -53,7 +53,7 @@ static void uncached_ipi_visibility(void *data)
53 if ((status != PAL_VISIBILITY_OK) && 53 if ((status != PAL_VISIBILITY_OK) &&
54 (status != PAL_VISIBILITY_OK_REMOTE_NEEDED)) 54 (status != PAL_VISIBILITY_OK_REMOTE_NEEDED))
55 printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on " 55 printk(KERN_DEBUG "pal_prefetch_visibility() returns %i on "
56 "CPU %i\n", status, get_cpu()); 56 "CPU %i\n", status, raw_smp_processor_id());
57} 57}
58 58
59 59
@@ -63,7 +63,7 @@ static void uncached_ipi_mc_drain(void *data)
63 status = ia64_pal_mc_drain(); 63 status = ia64_pal_mc_drain();
64 if (status) 64 if (status)
65 printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on " 65 printk(KERN_WARNING "ia64_pal_mc_drain() failed with %i on "
66 "CPU %i\n", status, get_cpu()); 66 "CPU %i\n", status, raw_smp_processor_id());
67} 67}
68 68
69 69
@@ -105,7 +105,7 @@ uncached_get_new_chunk(struct gen_pool *poolp)
105 status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); 105 status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL);
106 106
107 dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n", 107 dprintk(KERN_INFO "pal_prefetch_visibility() returns %i on cpu %i\n",
108 status, get_cpu()); 108 status, raw_smp_processor_id());
109 109
110 if (!status) { 110 if (!status) {
111 status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1); 111 status = smp_call_function(uncached_ipi_visibility, NULL, 0, 1);
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S
index 30d8564e9603..73af6267d2ef 100644
--- a/arch/ia64/kernel/vmlinux.lds.S
+++ b/arch/ia64/kernel/vmlinux.lds.S
@@ -177,6 +177,9 @@ SECTIONS
177 } 177 }
178 . = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose kernel data */ 178 . = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose kernel data */
179 179
180 .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET)
181 { *(.data.read_mostly) }
182
180 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) 183 .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET)
181 { *(.data.cacheline_aligned) } 184 { *(.data.cacheline_aligned) }
182 185
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c
index 0f776b032d31..c87d6d1d5813 100644
--- a/arch/ia64/mm/discontig.c
+++ b/arch/ia64/mm/discontig.c
@@ -50,8 +50,10 @@ static nodemask_t memory_less_mask __initdata;
50 * To prevent cache aliasing effects, align per-node structures so that they 50 * To prevent cache aliasing effects, align per-node structures so that they
51 * start at addresses that are strided by node number. 51 * start at addresses that are strided by node number.
52 */ 52 */
53#define MAX_NODE_ALIGN_OFFSET (32 * 1024 * 1024)
53#define NODEDATA_ALIGN(addr, node) \ 54#define NODEDATA_ALIGN(addr, node) \
54 ((((addr) + 1024*1024-1) & ~(1024*1024-1)) + (node)*PERCPU_PAGE_SIZE) 55 ((((addr) + 1024*1024-1) & ~(1024*1024-1)) + \
56 (((node)*PERCPU_PAGE_SIZE) & (MAX_NODE_ALIGN_OFFSET - 1)))
55 57
56/** 58/**
57 * build_node_maps - callback to setup bootmem structs for each node 59 * build_node_maps - callback to setup bootmem structs for each node
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
index 05e4ea889981..318087e35b66 100644
--- a/arch/ia64/sn/kernel/io_init.c
+++ b/arch/ia64/sn/kernel/io_init.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved. 6 * Copyright (C) 1992 - 1997, 2000-2005 Silicon Graphics, Inc. All rights reserved.
7 */ 7 */
8 8
9#include <linux/bootmem.h> 9#include <linux/bootmem.h>
@@ -147,6 +147,24 @@ sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev,
147} 147}
148 148
149/* 149/*
150 * sn_pcidev_info_get() - Retrieve the pcidev_info struct for the specified
151 * device.
152 */
153inline struct pcidev_info *
154sn_pcidev_info_get(struct pci_dev *dev)
155{
156 struct pcidev_info *pcidev;
157
158 list_for_each_entry(pcidev,
159 &(SN_PCI_CONTROLLER(dev)->pcidev_info), pdi_list) {
160 if (pcidev->pdi_linux_pcidev == dev) {
161 return pcidev;
162 }
163 }
164 return NULL;
165}
166
167/*
150 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for 168 * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for
151 * each node in the system. 169 * each node in the system.
152 */ 170 */
@@ -229,6 +247,50 @@ static void sn_fixup_ionodes(void)
229 247
230} 248}
231 249
250/*
251 * sn_pci_window_fixup() - Create a pci_window for each device resource.
252 * Until ACPI support is added, we need this code
253 * to setup pci_windows for use by
254 * pcibios_bus_to_resource(),
255 * pcibios_resource_to_bus(), etc.
256 */
257static void
258sn_pci_window_fixup(struct pci_dev *dev, unsigned int count,
259 int64_t * pci_addrs)
260{
261 struct pci_controller *controller = PCI_CONTROLLER(dev->bus);
262 unsigned int i;
263 unsigned int idx;
264 unsigned int new_count;
265 struct pci_window *new_window;
266
267 if (count == 0)
268 return;
269 idx = controller->windows;
270 new_count = controller->windows + count;
271 new_window = kcalloc(new_count, sizeof(struct pci_window), GFP_KERNEL);
272 if (new_window == NULL)
273 BUG();
274 if (controller->window) {
275 memcpy(new_window, controller->window,
276 sizeof(struct pci_window) * controller->windows);
277 kfree(controller->window);
278 }
279
280 /* Setup a pci_window for each device resource. */
281 for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
282 if (pci_addrs[i] == -1)
283 continue;
284
285 new_window[idx].offset = dev->resource[i].start - pci_addrs[i];
286 new_window[idx].resource = dev->resource[i];
287 idx++;
288 }
289
290 controller->windows = new_count;
291 controller->window = new_window;
292}
293
232void sn_pci_unfixup_slot(struct pci_dev *dev) 294void sn_pci_unfixup_slot(struct pci_dev *dev)
233{ 295{
234 struct pci_dev *host_pci_dev = SN_PCIDEV_INFO(dev)->host_pci_dev; 296 struct pci_dev *host_pci_dev = SN_PCIDEV_INFO(dev)->host_pci_dev;
@@ -246,21 +308,23 @@ void sn_pci_unfixup_slot(struct pci_dev *dev)
246 */ 308 */
247void sn_pci_fixup_slot(struct pci_dev *dev) 309void sn_pci_fixup_slot(struct pci_dev *dev)
248{ 310{
311 unsigned int count = 0;
249 int idx; 312 int idx;
250 int segment = pci_domain_nr(dev->bus); 313 int segment = pci_domain_nr(dev->bus);
251 int status = 0; 314 int status = 0;
252 struct pcibus_bussoft *bs; 315 struct pcibus_bussoft *bs;
253 struct pci_bus *host_pci_bus; 316 struct pci_bus *host_pci_bus;
254 struct pci_dev *host_pci_dev; 317 struct pci_dev *host_pci_dev;
318 struct pcidev_info *pcidev_info;
319 int64_t pci_addrs[PCI_ROM_RESOURCE + 1];
255 struct sn_irq_info *sn_irq_info; 320 struct sn_irq_info *sn_irq_info;
256 unsigned long size; 321 unsigned long size;
257 unsigned int bus_no, devfn; 322 unsigned int bus_no, devfn;
258 323
259 pci_dev_get(dev); /* for the sysdata pointer */ 324 pci_dev_get(dev); /* for the sysdata pointer */
260 dev->sysdata = kmalloc(sizeof(struct pcidev_info), GFP_KERNEL); 325 pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
261 if (SN_PCIDEV_INFO(dev) <= 0) 326 if (pcidev_info <= 0)
262 BUG(); /* Cannot afford to run out of memory */ 327 BUG(); /* Cannot afford to run out of memory */
263 memset(SN_PCIDEV_INFO(dev), 0, sizeof(struct pcidev_info));
264 328
265 sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL); 329 sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
266 if (sn_irq_info <= 0) 330 if (sn_irq_info <= 0)
@@ -270,22 +334,34 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
270 /* Call to retrieve pci device information needed by kernel. */ 334 /* Call to retrieve pci device information needed by kernel. */
271 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, 335 status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number,
272 dev->devfn, 336 dev->devfn,
273 (u64) __pa(SN_PCIDEV_INFO(dev)), 337 (u64) __pa(pcidev_info),
274 (u64) __pa(sn_irq_info)); 338 (u64) __pa(sn_irq_info));
275 if (status) 339 if (status)
276 BUG(); /* Cannot get platform pci device information */ 340 BUG(); /* Cannot get platform pci device information */
277 341
342 /* Add pcidev_info to list in sn_pci_controller struct */
343 list_add_tail(&pcidev_info->pdi_list,
344 &(SN_PCI_CONTROLLER(dev->bus)->pcidev_info));
345
278 /* Copy over PIO Mapped Addresses */ 346 /* Copy over PIO Mapped Addresses */
279 for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) { 347 for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) {
280 unsigned long start, end, addr; 348 unsigned long start, end, addr;
281 349
282 if (!SN_PCIDEV_INFO(dev)->pdi_pio_mapped_addr[idx]) 350 if (!pcidev_info->pdi_pio_mapped_addr[idx]) {
351 pci_addrs[idx] = -1;
283 continue; 352 continue;
353 }
284 354
285 start = dev->resource[idx].start; 355 start = dev->resource[idx].start;
286 end = dev->resource[idx].end; 356 end = dev->resource[idx].end;
287 size = end - start; 357 size = end - start;
288 addr = SN_PCIDEV_INFO(dev)->pdi_pio_mapped_addr[idx]; 358 if (size == 0) {
359 pci_addrs[idx] = -1;
360 continue;
361 }
362 pci_addrs[idx] = start;
363 count++;
364 addr = pcidev_info->pdi_pio_mapped_addr[idx];
289 addr = ((addr << 4) >> 4) | __IA64_UNCACHED_OFFSET; 365 addr = ((addr << 4) >> 4) | __IA64_UNCACHED_OFFSET;
290 dev->resource[idx].start = addr; 366 dev->resource[idx].start = addr;
291 dev->resource[idx].end = addr + size; 367 dev->resource[idx].end = addr + size;
@@ -294,23 +370,27 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
294 else 370 else
295 dev->resource[idx].parent = &iomem_resource; 371 dev->resource[idx].parent = &iomem_resource;
296 } 372 }
373 /* Create a pci_window in the pci_controller struct for
374 * each device resource.
375 */
376 if (count > 0)
377 sn_pci_window_fixup(dev, count, pci_addrs);
297 378
298 /* 379 /*
299 * Using the PROMs values for the PCI host bus, get the Linux 380 * Using the PROMs values for the PCI host bus, get the Linux
300 * PCI host_pci_dev struct and set up host bus linkages 381 * PCI host_pci_dev struct and set up host bus linkages
301 */ 382 */
302 383
303 bus_no = (SN_PCIDEV_INFO(dev)->pdi_slot_host_handle >> 32) & 0xff; 384 bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff;
304 devfn = SN_PCIDEV_INFO(dev)->pdi_slot_host_handle & 0xffffffff; 385 devfn = pcidev_info->pdi_slot_host_handle & 0xffffffff;
305 host_pci_bus = pci_find_bus(segment, bus_no); 386 host_pci_bus = pci_find_bus(segment, bus_no);
306 host_pci_dev = pci_get_slot(host_pci_bus, devfn); 387 host_pci_dev = pci_get_slot(host_pci_bus, devfn);
307 388
308 SN_PCIDEV_INFO(dev)->host_pci_dev = host_pci_dev; 389 pcidev_info->host_pci_dev = host_pci_dev;
309 SN_PCIDEV_INFO(dev)->pdi_host_pcidev_info = 390 pcidev_info->pdi_linux_pcidev = dev;
310 SN_PCIDEV_INFO(host_pci_dev); 391 pcidev_info->pdi_host_pcidev_info = SN_PCIDEV_INFO(host_pci_dev);
311 SN_PCIDEV_INFO(dev)->pdi_linux_pcidev = dev;
312 bs = SN_PCIBUS_BUSSOFT(dev->bus); 392 bs = SN_PCIBUS_BUSSOFT(dev->bus);
313 SN_PCIDEV_INFO(dev)->pdi_pcibus_info = bs; 393 pcidev_info->pdi_pcibus_info = bs;
314 394
315 if (bs && bs->bs_asic_type < PCIIO_ASIC_MAX_TYPES) { 395 if (bs && bs->bs_asic_type < PCIIO_ASIC_MAX_TYPES) {
316 SN_PCIDEV_BUSPROVIDER(dev) = sn_pci_provider[bs->bs_asic_type]; 396 SN_PCIDEV_BUSPROVIDER(dev) = sn_pci_provider[bs->bs_asic_type];
@@ -320,11 +400,11 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
320 400
321 /* Only set up IRQ stuff if this device has a host bus context */ 401 /* Only set up IRQ stuff if this device has a host bus context */
322 if (bs && sn_irq_info->irq_irq) { 402 if (bs && sn_irq_info->irq_irq) {
323 SN_PCIDEV_INFO(dev)->pdi_sn_irq_info = sn_irq_info; 403 pcidev_info->pdi_sn_irq_info = sn_irq_info;
324 dev->irq = SN_PCIDEV_INFO(dev)->pdi_sn_irq_info->irq_irq; 404 dev->irq = pcidev_info->pdi_sn_irq_info->irq_irq;
325 sn_irq_fixup(dev, sn_irq_info); 405 sn_irq_fixup(dev, sn_irq_info);
326 } else { 406 } else {
327 SN_PCIDEV_INFO(dev)->pdi_sn_irq_info = NULL; 407 pcidev_info->pdi_sn_irq_info = NULL;
328 kfree(sn_irq_info); 408 kfree(sn_irq_info);
329 } 409 }
330} 410}
@@ -338,6 +418,7 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
338 int status = 0; 418 int status = 0;
339 int nasid, cnode; 419 int nasid, cnode;
340 struct pci_controller *controller; 420 struct pci_controller *controller;
421 struct sn_pci_controller *sn_controller;
341 struct pcibus_bussoft *prom_bussoft_ptr; 422 struct pcibus_bussoft *prom_bussoft_ptr;
342 struct hubdev_info *hubdev_info; 423 struct hubdev_info *hubdev_info;
343 void *provider_soft = NULL; 424 void *provider_soft = NULL;
@@ -349,10 +430,15 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
349 return; /*bus # does not exist */ 430 return; /*bus # does not exist */
350 prom_bussoft_ptr = __va(prom_bussoft_ptr); 431 prom_bussoft_ptr = __va(prom_bussoft_ptr);
351 432
352 controller = kzalloc(sizeof(struct pci_controller), GFP_KERNEL); 433 /* Allocate a sn_pci_controller, which has a pci_controller struct
434 * as the first member.
435 */
436 sn_controller = kzalloc(sizeof(struct sn_pci_controller), GFP_KERNEL);
437 if (!sn_controller)
438 BUG();
439 INIT_LIST_HEAD(&sn_controller->pcidev_info);
440 controller = &sn_controller->pci_controller;
353 controller->segment = segment; 441 controller->segment = segment;
354 if (!controller)
355 BUG();
356 442
357 if (bus == NULL) { 443 if (bus == NULL) {
358 bus = pci_scan_bus(busnum, &pci_root_ops, controller); 444 bus = pci_scan_bus(busnum, &pci_root_ops, controller);
@@ -390,6 +476,29 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
390 } 476 }
391 477
392 /* 478 /*
479 * Setup pci_windows for legacy IO and MEM space.
480 * (Temporary until ACPI support is in place.)
481 */
482 controller->window = kcalloc(2, sizeof(struct pci_window), GFP_KERNEL);
483 if (controller->window == NULL)
484 BUG();
485 controller->window[0].offset = prom_bussoft_ptr->bs_legacy_io;
486 controller->window[0].resource.name = "legacy_io";
487 controller->window[0].resource.flags = IORESOURCE_IO;
488 controller->window[0].resource.start = prom_bussoft_ptr->bs_legacy_io;
489 controller->window[0].resource.end =
490 controller->window[0].resource.start + 0xffff;
491 controller->window[0].resource.parent = &ioport_resource;
492 controller->window[1].offset = prom_bussoft_ptr->bs_legacy_mem;
493 controller->window[1].resource.name = "legacy_mem";
494 controller->window[1].resource.flags = IORESOURCE_MEM;
495 controller->window[1].resource.start = prom_bussoft_ptr->bs_legacy_mem;
496 controller->window[1].resource.end =
497 controller->window[1].resource.start + (1024 * 1024) - 1;
498 controller->window[1].resource.parent = &iomem_resource;
499 controller->windows = 2;
500
501 /*
393 * Generic bus fixup goes here. Don't reference prom_bussoft_ptr 502 * Generic bus fixup goes here. Don't reference prom_bussoft_ptr
394 * after this point. 503 * after this point.
395 */ 504 */
@@ -421,7 +530,7 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
421 530
422error_return: 531error_return:
423 532
424 kfree(controller); 533 kfree(sn_controller);
425 return; 534 return;
426} 535}
427 536
@@ -434,7 +543,7 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
434 dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__); 543 dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__);
435 return; 544 return;
436 } 545 }
437 element->sysdata = dev->sysdata; 546 element->sysdata = SN_PCIDEV_INFO(dev);
438 list_add(&element->entry, &sn_sysdata_list); 547 list_add(&element->entry, &sn_sysdata_list);
439} 548}
440 549
diff --git a/arch/ia64/sn/kernel/sn2/ptc_deadlock.S b/arch/ia64/sn/kernel/sn2/ptc_deadlock.S
index 3fa95065a446..bebbcc4f8dd4 100644
--- a/arch/ia64/sn/kernel/sn2/ptc_deadlock.S
+++ b/arch/ia64/sn/kernel/sn2/ptc_deadlock.S
@@ -39,9 +39,13 @@ sn2_ptc_deadlock_recovery_core:
39 mov r8=r0 39 mov r8=r0
40 40
411: 411:
42 cmp.ne p8,p9=r0,ptc1 // Test for shub type (ptc1 non-null on shub1)
43 // p8 = 1 if shub1, p9 = 1 if shub2
44
42 add scr2=ALIAS_OFFSET,piowc // Address of WRITE_STATUS alias register 45 add scr2=ALIAS_OFFSET,piowc // Address of WRITE_STATUS alias register
43 ;; 46 mov scr1=7;; // Clear DEADLOCK, WRITE_ERROR, MULTI_WRITE_ERROR
44 ld8.acq scr1=[scr2];; 47(p8) st8.rel [scr2]=scr1;;
48(p9) ld8.acq scr1=[scr2];;
45 49
465: ld8.acq scr1=[piowc];; // Wait for PIOs to complete. 505: ld8.acq scr1=[piowc];; // Wait for PIOs to complete.
47 hint @pause 51 hint @pause
diff --git a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c
index 5d54f5f4e926..471bbaa65d1b 100644
--- a/arch/ia64/sn/kernel/sn2/sn2_smp.c
+++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c
@@ -202,7 +202,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
202 unsigned long end, unsigned long nbits) 202 unsigned long end, unsigned long nbits)
203{ 203{
204 int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0; 204 int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0;
205 int mymm = (mm == current->active_mm); 205 int mymm = (mm == current->active_mm && current->mm);
206 volatile unsigned long *ptc0, *ptc1; 206 volatile unsigned long *ptc0, *ptc1;
207 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value; 207 unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value;
208 short nasids[MAX_NUMNODES], nix; 208 short nasids[MAX_NUMNODES], nix;
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_reg.c b/arch/ia64/sn/pci/pcibr/pcibr_reg.c
index 5d534091262c..79fdb91d7259 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_reg.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_reg.c
@@ -25,7 +25,7 @@ union br_ptr {
25 */ 25 */
26void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) 26void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
27{ 27{
28 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 28 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
29 29
30 if (pcibus_info) { 30 if (pcibus_info) {
31 switch (pcibus_info->pbi_bridge_type) { 31 switch (pcibus_info->pbi_bridge_type) {
@@ -38,14 +38,14 @@ void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
38 default: 38 default:
39 panic 39 panic
40 ("pcireg_control_bit_clr: unknown bridgetype bridge 0x%p", 40 ("pcireg_control_bit_clr: unknown bridgetype bridge 0x%p",
41 (void *)ptr); 41 ptr);
42 } 42 }
43 } 43 }
44} 44}
45 45
46void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) 46void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
47{ 47{
48 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 48 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
49 49
50 if (pcibus_info) { 50 if (pcibus_info) {
51 switch (pcibus_info->pbi_bridge_type) { 51 switch (pcibus_info->pbi_bridge_type) {
@@ -58,7 +58,7 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
58 default: 58 default:
59 panic 59 panic
60 ("pcireg_control_bit_set: unknown bridgetype bridge 0x%p", 60 ("pcireg_control_bit_set: unknown bridgetype bridge 0x%p",
61 (void *)ptr); 61 ptr);
62 } 62 }
63 } 63 }
64} 64}
@@ -68,7 +68,7 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
68 */ 68 */
69uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info) 69uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
70{ 70{
71 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 71 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
72 uint64_t ret = 0; 72 uint64_t ret = 0;
73 73
74 if (pcibus_info) { 74 if (pcibus_info) {
@@ -82,7 +82,7 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
82 default: 82 default:
83 panic 83 panic
84 ("pcireg_tflush_get: unknown bridgetype bridge 0x%p", 84 ("pcireg_tflush_get: unknown bridgetype bridge 0x%p",
85 (void *)ptr); 85 ptr);
86 } 86 }
87 } 87 }
88 88
@@ -98,7 +98,7 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
98 */ 98 */
99uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info) 99uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
100{ 100{
101 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 101 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
102 uint64_t ret = 0; 102 uint64_t ret = 0;
103 103
104 if (pcibus_info) { 104 if (pcibus_info) {
@@ -112,7 +112,7 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
112 default: 112 default:
113 panic 113 panic
114 ("pcireg_intr_status_get: unknown bridgetype bridge 0x%p", 114 ("pcireg_intr_status_get: unknown bridgetype bridge 0x%p",
115 (void *)ptr); 115 ptr);
116 } 116 }
117 } 117 }
118 return ret; 118 return ret;
@@ -123,7 +123,7 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
123 */ 123 */
124void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits) 124void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
125{ 125{
126 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 126 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
127 127
128 if (pcibus_info) { 128 if (pcibus_info) {
129 switch (pcibus_info->pbi_bridge_type) { 129 switch (pcibus_info->pbi_bridge_type) {
@@ -136,14 +136,14 @@ void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
136 default: 136 default:
137 panic 137 panic
138 ("pcireg_intr_enable_bit_clr: unknown bridgetype bridge 0x%p", 138 ("pcireg_intr_enable_bit_clr: unknown bridgetype bridge 0x%p",
139 (void *)ptr); 139 ptr);
140 } 140 }
141 } 141 }
142} 142}
143 143
144void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits) 144void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
145{ 145{
146 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 146 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
147 147
148 if (pcibus_info) { 148 if (pcibus_info) {
149 switch (pcibus_info->pbi_bridge_type) { 149 switch (pcibus_info->pbi_bridge_type) {
@@ -156,7 +156,7 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
156 default: 156 default:
157 panic 157 panic
158 ("pcireg_intr_enable_bit_set: unknown bridgetype bridge 0x%p", 158 ("pcireg_intr_enable_bit_set: unknown bridgetype bridge 0x%p",
159 (void *)ptr); 159 ptr);
160 } 160 }
161 } 161 }
162} 162}
@@ -167,7 +167,7 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
167void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n, 167void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
168 uint64_t addr) 168 uint64_t addr)
169{ 169{
170 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 170 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
171 171
172 if (pcibus_info) { 172 if (pcibus_info) {
173 switch (pcibus_info->pbi_bridge_type) { 173 switch (pcibus_info->pbi_bridge_type) {
@@ -186,7 +186,7 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
186 default: 186 default:
187 panic 187 panic
188 ("pcireg_intr_addr_addr_get: unknown bridgetype bridge 0x%p", 188 ("pcireg_intr_addr_addr_get: unknown bridgetype bridge 0x%p",
189 (void *)ptr); 189 ptr);
190 } 190 }
191 } 191 }
192} 192}
@@ -196,7 +196,7 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
196 */ 196 */
197void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n) 197void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
198{ 198{
199 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 199 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
200 200
201 if (pcibus_info) { 201 if (pcibus_info) {
202 switch (pcibus_info->pbi_bridge_type) { 202 switch (pcibus_info->pbi_bridge_type) {
@@ -209,7 +209,7 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
209 default: 209 default:
210 panic 210 panic
211 ("pcireg_force_intr_set: unknown bridgetype bridge 0x%p", 211 ("pcireg_force_intr_set: unknown bridgetype bridge 0x%p",
212 (void *)ptr); 212 ptr);
213 } 213 }
214 } 214 }
215} 215}
@@ -219,7 +219,7 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
219 */ 219 */
220uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device) 220uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
221{ 221{
222 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 222 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
223 uint64_t ret = 0; 223 uint64_t ret = 0;
224 224
225 if (pcibus_info) { 225 if (pcibus_info) {
@@ -233,7 +233,7 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
233 __sn_readq_relaxed(&ptr->pic.p_wr_req_buf[device]); 233 __sn_readq_relaxed(&ptr->pic.p_wr_req_buf[device]);
234 break; 234 break;
235 default: 235 default:
236 panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", (void *)ptr); 236 panic("pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p", ptr);
237 } 237 }
238 238
239 } 239 }
@@ -244,7 +244,7 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
244void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index, 244void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
245 uint64_t val) 245 uint64_t val)
246{ 246{
247 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 247 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
248 248
249 if (pcibus_info) { 249 if (pcibus_info) {
250 switch (pcibus_info->pbi_bridge_type) { 250 switch (pcibus_info->pbi_bridge_type) {
@@ -257,15 +257,15 @@ void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
257 default: 257 default:
258 panic 258 panic
259 ("pcireg_int_ate_set: unknown bridgetype bridge 0x%p", 259 ("pcireg_int_ate_set: unknown bridgetype bridge 0x%p",
260 (void *)ptr); 260 ptr);
261 } 261 }
262 } 262 }
263} 263}
264 264
265uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index) 265uint64_t __iomem *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
266{ 266{
267 union br_ptr *ptr = (union br_ptr *)pcibus_info->pbi_buscommon.bs_base; 267 union br_ptr __iomem *ptr = (union br_ptr __iomem *)pcibus_info->pbi_buscommon.bs_base;
268 uint64_t *ret = (uint64_t *) 0; 268 uint64_t __iomem *ret = NULL;
269 269
270 if (pcibus_info) { 270 if (pcibus_info) {
271 switch (pcibus_info->pbi_bridge_type) { 271 switch (pcibus_info->pbi_bridge_type) {
@@ -278,7 +278,7 @@ uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
278 default: 278 default:
279 panic 279 panic
280 ("pcireg_int_ate_addr: unknown bridgetype bridge 0x%p", 280 ("pcireg_int_ate_addr: unknown bridgetype bridge 0x%p",
281 (void *)ptr); 281 ptr);
282 } 282 }
283 } 283 }
284 return ret; 284 return ret;
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index 46b646a6d345..27aa1842dacc 100644
--- a/arch/ia64/sn/pci/tioca_provider.c
+++ b/arch/ia64/sn/pci/tioca_provider.c
@@ -38,10 +38,10 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
38 uint64_t offset; 38 uint64_t offset;
39 struct page *tmp; 39 struct page *tmp;
40 struct tioca_common *tioca_common; 40 struct tioca_common *tioca_common;
41 struct tioca *ca_base; 41 struct tioca __iomem *ca_base;
42 42
43 tioca_common = tioca_kern->ca_common; 43 tioca_common = tioca_kern->ca_common;
44 ca_base = (struct tioca *)tioca_common->ca_common.bs_base; 44 ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base;
45 45
46 if (list_empty(tioca_kern->ca_devices)) 46 if (list_empty(tioca_kern->ca_devices))
47 return 0; 47 return 0;
@@ -215,7 +215,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
215{ 215{
216 int cap_ptr; 216 int cap_ptr;
217 uint32_t reg; 217 uint32_t reg;
218 struct tioca *tioca_base; 218 struct tioca __iomem *tioca_base;
219 struct pci_dev *pdev; 219 struct pci_dev *pdev;
220 struct tioca_common *common; 220 struct tioca_common *common;
221 221
@@ -257,7 +257,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
257 * Set ca's fw to match 257 * Set ca's fw to match
258 */ 258 */
259 259
260 tioca_base = (struct tioca *)common->ca_common.bs_base; 260 tioca_base = (struct tioca __iomem*)common->ca_common.bs_base;
261 __sn_setq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE); 261 __sn_setq_relaxed(&tioca_base->ca_control1, CA_AGP_FW_ENABLE);
262} 262}
263 263
@@ -322,7 +322,7 @@ static uint64_t
322tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr) 322tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
323{ 323{
324 struct tioca_common *tioca_common; 324 struct tioca_common *tioca_common;
325 struct tioca *ca_base; 325 struct tioca __iomem *ca_base;
326 uint64_t ct_addr; 326 uint64_t ct_addr;
327 dma_addr_t bus_addr; 327 dma_addr_t bus_addr;
328 uint32_t node_upper; 328 uint32_t node_upper;
@@ -330,7 +330,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
330 struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev); 330 struct pcidev_info *pcidev_info = SN_PCIDEV_INFO(pdev);
331 331
332 tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info; 332 tioca_common = (struct tioca_common *)pcidev_info->pdi_pcibus_info;
333 ca_base = (struct tioca *)tioca_common->ca_common.bs_base; 333 ca_base = (struct tioca __iomem *)tioca_common->ca_common.bs_base;
334 334
335 ct_addr = PHYS_TO_TIODMA(paddr); 335 ct_addr = PHYS_TO_TIODMA(paddr);
336 if (!ct_addr) 336 if (!ct_addr)
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 3a49036e0ae8..4ee91c9a556f 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -67,8 +67,8 @@ unsigned long setup_zero_pages(void)
67 67
68 page = virt_to_page(empty_zero_page); 68 page = virt_to_page(empty_zero_page);
69 while (page < virt_to_page(empty_zero_page + (PAGE_SIZE << order))) { 69 while (page < virt_to_page(empty_zero_page + (PAGE_SIZE << order))) {
70 set_bit(PG_reserved, &page->flags); 70 SetPageReserved(page);
71 reset_page_mapcount(page); 71 set_page_count(page, 1);
72 page++; 72 page++;
73 } 73 }
74 74
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index bb2efdd566a9..db93dbc0e21a 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -227,7 +227,7 @@ config SMP
227 If you don't know what to do here, say N. 227 If you don't know what to do here, say N.
228 228
229config NR_CPUS 229config NR_CPUS
230 int "Maximum number of CPUs (2-32)" 230 int "Maximum number of CPUs (2-128)"
231 range 2 128 231 range 2 128
232 depends on SMP 232 depends on SMP
233 default "32" if PPC64 233 default "32" if PPC64
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig
index 4b433411b9e3..b657f7e44762 100644
--- a/arch/powerpc/configs/cell_defconfig
+++ b/arch/powerpc/configs/cell_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Tue Nov 15 14:36:20 2005 4# Tue Dec 20 15:59:26 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_KOBJECT_UEVENT=y
53# CONFIG_IKCONFIG is not set 53# CONFIG_IKCONFIG is not set
54# CONFIG_CPUSETS is not set 54# CONFIG_CPUSETS is not set
55CONFIG_INITRAMFS_SOURCE="" 55CONFIG_INITRAMFS_SOURCE=""
56CONFIG_CC_OPTIMIZE_FOR_SIZE=y
56# CONFIG_EMBEDDED is not set 57# CONFIG_EMBEDDED is not set
57CONFIG_KALLSYMS=y 58CONFIG_KALLSYMS=y
58# CONFIG_KALLSYMS_ALL is not set 59# CONFIG_KALLSYMS_ALL is not set
@@ -151,7 +152,7 @@ CONFIG_FLATMEM_MANUAL=y
151CONFIG_FLATMEM=y 152CONFIG_FLATMEM=y
152CONFIG_FLAT_NODE_MEM_MAP=y 153CONFIG_FLAT_NODE_MEM_MAP=y
153# CONFIG_SPARSEMEM_STATIC is not set 154# CONFIG_SPARSEMEM_STATIC is not set
154CONFIG_SPLIT_PTLOCK_CPUS=4096 155CONFIG_SPLIT_PTLOCK_CPUS=4
155# CONFIG_PPC_64K_PAGES is not set 156# CONFIG_PPC_64K_PAGES is not set
156CONFIG_SCHED_SMT=y 157CONFIG_SCHED_SMT=y
157CONFIG_PROC_DEVICETREE=y 158CONFIG_PROC_DEVICETREE=y
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
index e7c23e3902b8..3c22ccb18519 100644
--- a/arch/powerpc/configs/g5_defconfig
+++ b/arch/powerpc/configs/g5_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Tue Nov 15 14:39:20 2005 4# Tue Dec 20 15:59:30 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y 53CONFIG_IKCONFIG_PROC=y
54# CONFIG_CPUSETS is not set 54# CONFIG_CPUSETS is not set
55CONFIG_INITRAMFS_SOURCE="" 55CONFIG_INITRAMFS_SOURCE=""
56CONFIG_CC_OPTIMIZE_FOR_SIZE=y
56# CONFIG_EMBEDDED is not set 57# CONFIG_EMBEDDED is not set
57CONFIG_KALLSYMS=y 58CONFIG_KALLSYMS=y
58# CONFIG_KALLSYMS_ALL is not set 59# CONFIG_KALLSYMS_ALL is not set
@@ -162,7 +163,7 @@ CONFIG_FLATMEM_MANUAL=y
162CONFIG_FLATMEM=y 163CONFIG_FLATMEM=y
163CONFIG_FLAT_NODE_MEM_MAP=y 164CONFIG_FLAT_NODE_MEM_MAP=y
164# CONFIG_SPARSEMEM_STATIC is not set 165# CONFIG_SPARSEMEM_STATIC is not set
165CONFIG_SPLIT_PTLOCK_CPUS=4096 166CONFIG_SPLIT_PTLOCK_CPUS=4
166# CONFIG_PPC_64K_PAGES is not set 167# CONFIG_PPC_64K_PAGES is not set
167# CONFIG_SCHED_SMT is not set 168# CONFIG_SCHED_SMT is not set
168CONFIG_PROC_DEVICETREE=y 169CONFIG_PROC_DEVICETREE=y
@@ -1203,6 +1204,7 @@ CONFIG_USB_MON=y
1203CONFIG_USB_SERIAL=m 1204CONFIG_USB_SERIAL=m
1204CONFIG_USB_SERIAL_GENERIC=y 1205CONFIG_USB_SERIAL_GENERIC=y
1205# CONFIG_USB_SERIAL_AIRPRIME is not set 1206# CONFIG_USB_SERIAL_AIRPRIME is not set
1207# CONFIG_USB_SERIAL_ANYDATA is not set
1206CONFIG_USB_SERIAL_BELKIN=m 1208CONFIG_USB_SERIAL_BELKIN=m
1207CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m 1209CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
1208# CONFIG_USB_SERIAL_CP2101 is not set 1210# CONFIG_USB_SERIAL_CP2101 is not set
@@ -1233,7 +1235,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
1233CONFIG_USB_SERIAL_KLSI=m 1235CONFIG_USB_SERIAL_KLSI=m
1234CONFIG_USB_SERIAL_KOBIL_SCT=m 1236CONFIG_USB_SERIAL_KOBIL_SCT=m
1235CONFIG_USB_SERIAL_MCT_U232=m 1237CONFIG_USB_SERIAL_MCT_U232=m
1236# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
1237CONFIG_USB_SERIAL_PL2303=m 1238CONFIG_USB_SERIAL_PL2303=m
1238# CONFIG_USB_SERIAL_HP4X is not set 1239# CONFIG_USB_SERIAL_HP4X is not set
1239CONFIG_USB_SERIAL_SAFE=m 1240CONFIG_USB_SERIAL_SAFE=m
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig
index 5d0866707a75..751a622fb7a7 100644
--- a/arch/powerpc/configs/iseries_defconfig
+++ b/arch/powerpc/configs/iseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Tue Nov 15 14:38:09 2005 4# Tue Dec 20 15:59:32 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
55CONFIG_IKCONFIG_PROC=y 55CONFIG_IKCONFIG_PROC=y
56# CONFIG_CPUSETS is not set 56# CONFIG_CPUSETS is not set
57CONFIG_INITRAMFS_SOURCE="" 57CONFIG_INITRAMFS_SOURCE=""
58CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58# CONFIG_EMBEDDED is not set 59# CONFIG_EMBEDDED is not set
59CONFIG_KALLSYMS=y 60CONFIG_KALLSYMS=y
60# CONFIG_KALLSYMS_ALL is not set 61# CONFIG_KALLSYMS_ALL is not set
@@ -144,7 +145,7 @@ CONFIG_FLATMEM_MANUAL=y
144CONFIG_FLATMEM=y 145CONFIG_FLATMEM=y
145CONFIG_FLAT_NODE_MEM_MAP=y 146CONFIG_FLAT_NODE_MEM_MAP=y
146# CONFIG_SPARSEMEM_STATIC is not set 147# CONFIG_SPARSEMEM_STATIC is not set
147CONFIG_SPLIT_PTLOCK_CPUS=4096 148CONFIG_SPLIT_PTLOCK_CPUS=4
148# CONFIG_PPC_64K_PAGES is not set 149# CONFIG_PPC_64K_PAGES is not set
149# CONFIG_SCHED_SMT is not set 150# CONFIG_SCHED_SMT is not set
150CONFIG_PROC_DEVICETREE=y 151CONFIG_PROC_DEVICETREE=y
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig
index 92e42613ef06..07b6d3d23360 100644
--- a/arch/powerpc/configs/maple_defconfig
+++ b/arch/powerpc/configs/maple_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Tue Nov 15 14:38:58 2005 4# Tue Dec 20 15:59:36 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -53,6 +53,7 @@ CONFIG_IKCONFIG=y
53CONFIG_IKCONFIG_PROC=y 53CONFIG_IKCONFIG_PROC=y
54# CONFIG_CPUSETS is not set 54# CONFIG_CPUSETS is not set
55CONFIG_INITRAMFS_SOURCE="" 55CONFIG_INITRAMFS_SOURCE=""
56CONFIG_CC_OPTIMIZE_FOR_SIZE=y
56# CONFIG_EMBEDDED is not set 57# CONFIG_EMBEDDED is not set
57CONFIG_KALLSYMS=y 58CONFIG_KALLSYMS=y
58CONFIG_KALLSYMS_ALL=y 59CONFIG_KALLSYMS_ALL=y
@@ -149,7 +150,7 @@ CONFIG_FLATMEM_MANUAL=y
149CONFIG_FLATMEM=y 150CONFIG_FLATMEM=y
150CONFIG_FLAT_NODE_MEM_MAP=y 151CONFIG_FLAT_NODE_MEM_MAP=y
151# CONFIG_SPARSEMEM_STATIC is not set 152# CONFIG_SPARSEMEM_STATIC is not set
152CONFIG_SPLIT_PTLOCK_CPUS=4096 153CONFIG_SPLIT_PTLOCK_CPUS=4
153# CONFIG_PPC_64K_PAGES is not set 154# CONFIG_PPC_64K_PAGES is not set
154# CONFIG_SCHED_SMT is not set 155# CONFIG_SCHED_SMT is not set
155CONFIG_PROC_DEVICETREE=y 156CONFIG_PROC_DEVICETREE=y
@@ -242,7 +243,6 @@ CONFIG_TCP_CONG_BIC=y
242# QoS and/or fair queueing 243# QoS and/or fair queueing
243# 244#
244# CONFIG_NET_SCHED is not set 245# CONFIG_NET_SCHED is not set
245# CONFIG_NET_CLS_ROUTE is not set
246 246
247# 247#
248# Network testing 248# Network testing
@@ -794,6 +794,7 @@ CONFIG_USB_SERIAL=y
794# CONFIG_USB_SERIAL_CONSOLE is not set 794# CONFIG_USB_SERIAL_CONSOLE is not set
795CONFIG_USB_SERIAL_GENERIC=y 795CONFIG_USB_SERIAL_GENERIC=y
796# CONFIG_USB_SERIAL_AIRPRIME is not set 796# CONFIG_USB_SERIAL_AIRPRIME is not set
797# CONFIG_USB_SERIAL_ANYDATA is not set
797# CONFIG_USB_SERIAL_BELKIN is not set 798# CONFIG_USB_SERIAL_BELKIN is not set
798# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set 799# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
799# CONFIG_USB_SERIAL_CP2101 is not set 800# CONFIG_USB_SERIAL_CP2101 is not set
@@ -824,7 +825,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
824# CONFIG_USB_SERIAL_KLSI is not set 825# CONFIG_USB_SERIAL_KLSI is not set
825# CONFIG_USB_SERIAL_KOBIL_SCT is not set 826# CONFIG_USB_SERIAL_KOBIL_SCT is not set
826# CONFIG_USB_SERIAL_MCT_U232 is not set 827# CONFIG_USB_SERIAL_MCT_U232 is not set
827# CONFIG_USB_SERIAL_NOKIA_DKU2 is not set
828# CONFIG_USB_SERIAL_PL2303 is not set 828# CONFIG_USB_SERIAL_PL2303 is not set
829# CONFIG_USB_SERIAL_HP4X is not set 829# CONFIG_USB_SERIAL_HP4X is not set
830# CONFIG_USB_SERIAL_SAFE is not set 830# CONFIG_USB_SERIAL_SAFE is not set
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
index b5ba3bbd96fb..509399eab6f5 100644
--- a/arch/powerpc/configs/ppc64_defconfig
+++ b/arch/powerpc/configs/ppc64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Fri Nov 18 16:23:24 2005 4# Tue Dec 20 15:59:38 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -54,6 +54,7 @@ CONFIG_IKCONFIG=y
54CONFIG_IKCONFIG_PROC=y 54CONFIG_IKCONFIG_PROC=y
55CONFIG_CPUSETS=y 55CONFIG_CPUSETS=y
56CONFIG_INITRAMFS_SOURCE="" 56CONFIG_INITRAMFS_SOURCE=""
57CONFIG_CC_OPTIMIZE_FOR_SIZE=y
57# CONFIG_EMBEDDED is not set 58# CONFIG_EMBEDDED is not set
58CONFIG_KALLSYMS=y 59CONFIG_KALLSYMS=y
59CONFIG_KALLSYMS_ALL=y 60CONFIG_KALLSYMS_ALL=y
@@ -176,7 +177,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
176# CONFIG_SPARSEMEM_STATIC is not set 177# CONFIG_SPARSEMEM_STATIC is not set
177CONFIG_SPARSEMEM_EXTREME=y 178CONFIG_SPARSEMEM_EXTREME=y
178# CONFIG_MEMORY_HOTPLUG is not set 179# CONFIG_MEMORY_HOTPLUG is not set
179CONFIG_SPLIT_PTLOCK_CPUS=4096 180CONFIG_SPLIT_PTLOCK_CPUS=4
180# CONFIG_PPC_64K_PAGES is not set 181# CONFIG_PPC_64K_PAGES is not set
181# CONFIG_SCHED_SMT is not set 182# CONFIG_SCHED_SMT is not set
182CONFIG_PROC_DEVICETREE=y 183CONFIG_PROC_DEVICETREE=y
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
index b589b196eb3f..a50ce0fa9243 100644
--- a/arch/powerpc/configs/pseries_defconfig
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.15-rc1 3# Linux kernel version: 2.6.15-rc5
4# Tue Nov 15 14:36:55 2005 4# Tue Dec 20 15:59:40 2005
5# 5#
6CONFIG_PPC64=y 6CONFIG_PPC64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -55,6 +55,7 @@ CONFIG_IKCONFIG=y
55CONFIG_IKCONFIG_PROC=y 55CONFIG_IKCONFIG_PROC=y
56CONFIG_CPUSETS=y 56CONFIG_CPUSETS=y
57CONFIG_INITRAMFS_SOURCE="" 57CONFIG_INITRAMFS_SOURCE=""
58CONFIG_CC_OPTIMIZE_FOR_SIZE=y
58# CONFIG_EMBEDDED is not set 59# CONFIG_EMBEDDED is not set
59CONFIG_KALLSYMS=y 60CONFIG_KALLSYMS=y
60CONFIG_KALLSYMS_ALL=y 61CONFIG_KALLSYMS_ALL=y
@@ -163,7 +164,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
163# CONFIG_SPARSEMEM_STATIC is not set 164# CONFIG_SPARSEMEM_STATIC is not set
164CONFIG_SPARSEMEM_EXTREME=y 165CONFIG_SPARSEMEM_EXTREME=y
165# CONFIG_MEMORY_HOTPLUG is not set 166# CONFIG_MEMORY_HOTPLUG is not set
166CONFIG_SPLIT_PTLOCK_CPUS=4096 167CONFIG_SPLIT_PTLOCK_CPUS=4
167CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y 168CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
168# CONFIG_PPC_64K_PAGES is not set 169# CONFIG_PPC_64K_PAGES is not set
169CONFIG_SCHED_SMT=y 170CONFIG_SCHED_SMT=y
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 2d22bf03484e..bce33a38399f 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -183,8 +183,8 @@ syscall_exit_trace_cont:
183 ld r13,GPR13(r1) /* returning to usermode */ 183 ld r13,GPR13(r1) /* returning to usermode */
1841: ld r2,GPR2(r1) 1841: ld r2,GPR2(r1)
185 li r12,MSR_RI 185 li r12,MSR_RI
186 andc r10,r10,r12 186 andc r11,r10,r12
187 mtmsrd r10,1 /* clear MSR.RI */ 187 mtmsrd r11,1 /* clear MSR.RI */
188 ld r1,GPR1(r1) 188 ld r1,GPR1(r1)
189 mtlr r4 189 mtlr r4
190 mtcr r5 190 mtcr r5
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index 511af54e6230..5368f9c2e6bf 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -177,7 +177,7 @@ static inline int kprobe_handler(struct pt_regs *regs)
177 save_previous_kprobe(kcb); 177 save_previous_kprobe(kcb);
178 set_current_kprobe(p, regs, kcb); 178 set_current_kprobe(p, regs, kcb);
179 kcb->kprobe_saved_msr = regs->msr; 179 kcb->kprobe_saved_msr = regs->msr;
180 p->nmissed++; 180 kprobes_inc_nmissed_count(p);
181 prepare_singlestep(p, regs); 181 prepare_singlestep(p, regs);
182 kcb->kprobe_status = KPROBE_REENTER; 182 kcb->kprobe_status = KPROBE_REENTER;
183 return 1; 183 return 1;
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 608fee7c7e20..e3fb78397dc6 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -102,7 +102,15 @@ int boot_cpuid_phys = 0;
102dev_t boot_dev; 102dev_t boot_dev;
103u64 ppc64_pft_size; 103u64 ppc64_pft_size;
104 104
105struct ppc64_caches ppc64_caches; 105/* Pick defaults since we might want to patch instructions
106 * before we've read this from the device tree.
107 */
108struct ppc64_caches ppc64_caches = {
109 .dline_size = 0x80,
110 .log_dline_size = 7,
111 .iline_size = 0x80,
112 .log_iline_size = 7
113};
106EXPORT_SYMBOL_GPL(ppc64_caches); 114EXPORT_SYMBOL_GPL(ppc64_caches);
107 115
108/* 116/*
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c
index f72ced11212d..91b93d917b64 100644
--- a/arch/powerpc/kernel/syscalls.c
+++ b/arch/powerpc/kernel/syscalls.c
@@ -247,7 +247,7 @@ long ppc64_personality(unsigned long personality)
247#define OVERRIDE_MACHINE 0 247#define OVERRIDE_MACHINE 0
248#endif 248#endif
249 249
250static inline int override_machine(char *mach) 250static inline int override_machine(char __user *mach)
251{ 251{
252 if (OVERRIDE_MACHINE) { 252 if (OVERRIDE_MACHINE) {
253 /* change ppc64 to ppc */ 253 /* change ppc64 to ppc */
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 706e8a63ced9..a33583f3b0e7 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -601,7 +601,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap)
601 /* Handle hugepage regions */ 601 /* Handle hugepage regions */
602 if (unlikely(in_hugepage_area(mm->context, ea))) { 602 if (unlikely(in_hugepage_area(mm->context, ea))) {
603 DBG_LOW(" -> huge page !\n"); 603 DBG_LOW(" -> huge page !\n");
604 return hash_huge_page(mm, access, ea, vsid, local); 604 return hash_huge_page(mm, access, ea, vsid, local, trap);
605 } 605 }
606 606
607 /* Get PTE and page size from page tables */ 607 /* Get PTE and page size from page tables */
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 6bc9dbad7dea..54131b877da3 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -148,43 +148,63 @@ int is_aligned_hugepage_range(unsigned long addr, unsigned long len)
148 return 0; 148 return 0;
149} 149}
150 150
151struct slb_flush_info {
152 struct mm_struct *mm;
153 u16 newareas;
154};
155
151static void flush_low_segments(void *parm) 156static void flush_low_segments(void *parm)
152{ 157{
153 u16 areas = (unsigned long) parm; 158 struct slb_flush_info *fi = parm;
154 unsigned long i; 159 unsigned long i;
155 160
156 asm volatile("isync" : : : "memory"); 161 BUILD_BUG_ON((sizeof(fi->newareas)*8) != NUM_LOW_AREAS);
162
163 if (current->active_mm != fi->mm)
164 return;
165
166 /* Only need to do anything if this CPU is working in the same
167 * mm as the one which has changed */
157 168
158 BUILD_BUG_ON((sizeof(areas)*8) != NUM_LOW_AREAS); 169 /* update the paca copy of the context struct */
170 get_paca()->context = current->active_mm->context;
159 171
172 asm volatile("isync" : : : "memory");
160 for (i = 0; i < NUM_LOW_AREAS; i++) { 173 for (i = 0; i < NUM_LOW_AREAS; i++) {
161 if (! (areas & (1U << i))) 174 if (! (fi->newareas & (1U << i)))
162 continue; 175 continue;
163 asm volatile("slbie %0" 176 asm volatile("slbie %0"
164 : : "r" ((i << SID_SHIFT) | SLBIE_C)); 177 : : "r" ((i << SID_SHIFT) | SLBIE_C));
165 } 178 }
166
167 asm volatile("isync" : : : "memory"); 179 asm volatile("isync" : : : "memory");
168} 180}
169 181
170static void flush_high_segments(void *parm) 182static void flush_high_segments(void *parm)
171{ 183{
172 u16 areas = (unsigned long) parm; 184 struct slb_flush_info *fi = parm;
173 unsigned long i, j; 185 unsigned long i, j;
174 186
175 asm volatile("isync" : : : "memory");
176 187
177 BUILD_BUG_ON((sizeof(areas)*8) != NUM_HIGH_AREAS); 188 BUILD_BUG_ON((sizeof(fi->newareas)*8) != NUM_HIGH_AREAS);
178 189
190 if (current->active_mm != fi->mm)
191 return;
192
193 /* Only need to do anything if this CPU is working in the same
194 * mm as the one which has changed */
195
196 /* update the paca copy of the context struct */
197 get_paca()->context = current->active_mm->context;
198
199 asm volatile("isync" : : : "memory");
179 for (i = 0; i < NUM_HIGH_AREAS; i++) { 200 for (i = 0; i < NUM_HIGH_AREAS; i++) {
180 if (! (areas & (1U << i))) 201 if (! (fi->newareas & (1U << i)))
181 continue; 202 continue;
182 for (j = 0; j < (1UL << (HTLB_AREA_SHIFT-SID_SHIFT)); j++) 203 for (j = 0; j < (1UL << (HTLB_AREA_SHIFT-SID_SHIFT)); j++)
183 asm volatile("slbie %0" 204 asm volatile("slbie %0"
184 :: "r" (((i << HTLB_AREA_SHIFT) 205 :: "r" (((i << HTLB_AREA_SHIFT)
185 + (j << SID_SHIFT)) | SLBIE_C)); 206 + (j << SID_SHIFT)) | SLBIE_C));
186 } 207 }
187
188 asm volatile("isync" : : : "memory"); 208 asm volatile("isync" : : : "memory");
189} 209}
190 210
@@ -229,6 +249,7 @@ static int prepare_high_area_for_htlb(struct mm_struct *mm, unsigned long area)
229static int open_low_hpage_areas(struct mm_struct *mm, u16 newareas) 249static int open_low_hpage_areas(struct mm_struct *mm, u16 newareas)
230{ 250{
231 unsigned long i; 251 unsigned long i;
252 struct slb_flush_info fi;
232 253
233 BUILD_BUG_ON((sizeof(newareas)*8) != NUM_LOW_AREAS); 254 BUILD_BUG_ON((sizeof(newareas)*8) != NUM_LOW_AREAS);
234 BUILD_BUG_ON((sizeof(mm->context.low_htlb_areas)*8) != NUM_LOW_AREAS); 255 BUILD_BUG_ON((sizeof(mm->context.low_htlb_areas)*8) != NUM_LOW_AREAS);
@@ -244,19 +265,20 @@ static int open_low_hpage_areas(struct mm_struct *mm, u16 newareas)
244 265
245 mm->context.low_htlb_areas |= newareas; 266 mm->context.low_htlb_areas |= newareas;
246 267
247 /* update the paca copy of the context struct */
248 get_paca()->context = mm->context;
249
250 /* the context change must make it to memory before the flush, 268 /* the context change must make it to memory before the flush,
251 * so that further SLB misses do the right thing. */ 269 * so that further SLB misses do the right thing. */
252 mb(); 270 mb();
253 on_each_cpu(flush_low_segments, (void *)(unsigned long)newareas, 0, 1); 271
272 fi.mm = mm;
273 fi.newareas = newareas;
274 on_each_cpu(flush_low_segments, &fi, 0, 1);
254 275
255 return 0; 276 return 0;
256} 277}
257 278
258static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas) 279static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas)
259{ 280{
281 struct slb_flush_info fi;
260 unsigned long i; 282 unsigned long i;
261 283
262 BUILD_BUG_ON((sizeof(newareas)*8) != NUM_HIGH_AREAS); 284 BUILD_BUG_ON((sizeof(newareas)*8) != NUM_HIGH_AREAS);
@@ -280,7 +302,10 @@ static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas)
280 /* the context change must make it to memory before the flush, 302 /* the context change must make it to memory before the flush,
281 * so that further SLB misses do the right thing. */ 303 * so that further SLB misses do the right thing. */
282 mb(); 304 mb();
283 on_each_cpu(flush_high_segments, (void *)(unsigned long)newareas, 0, 1); 305
306 fi.mm = mm;
307 fi.newareas = newareas;
308 on_each_cpu(flush_high_segments, &fi, 0, 1);
284 309
285 return 0; 310 return 0;
286} 311}
@@ -639,8 +664,36 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
639 return -ENOMEM; 664 return -ENOMEM;
640} 665}
641 666
667/*
668 * Called by asm hashtable.S for doing lazy icache flush
669 */
670static unsigned int hash_huge_page_do_lazy_icache(unsigned long rflags,
671 pte_t pte, int trap)
672{
673 struct page *page;
674 int i;
675
676 if (!pfn_valid(pte_pfn(pte)))
677 return rflags;
678
679 page = pte_page(pte);
680
681 /* page is dirty */
682 if (!test_bit(PG_arch_1, &page->flags) && !PageReserved(page)) {
683 if (trap == 0x400) {
684 for (i = 0; i < (HPAGE_SIZE / PAGE_SIZE); i++)
685 __flush_dcache_icache(page_address(page+i));
686 set_bit(PG_arch_1, &page->flags);
687 } else {
688 rflags |= HPTE_R_N;
689 }
690 }
691 return rflags;
692}
693
642int hash_huge_page(struct mm_struct *mm, unsigned long access, 694int hash_huge_page(struct mm_struct *mm, unsigned long access,
643 unsigned long ea, unsigned long vsid, int local) 695 unsigned long ea, unsigned long vsid, int local,
696 unsigned long trap)
644{ 697{
645 pte_t *ptep; 698 pte_t *ptep;
646 unsigned long old_pte, new_pte; 699 unsigned long old_pte, new_pte;
@@ -691,6 +744,11 @@ int hash_huge_page(struct mm_struct *mm, unsigned long access,
691 rflags = 0x2 | (!(new_pte & _PAGE_RW)); 744 rflags = 0x2 | (!(new_pte & _PAGE_RW));
692 /* _PAGE_EXEC -> HW_NO_EXEC since it's inverted */ 745 /* _PAGE_EXEC -> HW_NO_EXEC since it's inverted */
693 rflags |= ((new_pte & _PAGE_EXEC) ? 0 : HPTE_R_N); 746 rflags |= ((new_pte & _PAGE_EXEC) ? 0 : HPTE_R_N);
747 if (!cpu_has_feature(CPU_FTR_COHERENT_ICACHE))
748 /* No CPU has hugepages but lacks no execute, so we
749 * don't need to worry about that case */
750 rflags = hash_huge_page_do_lazy_icache(rflags, __pte(old_pte),
751 trap);
694 752
695 /* Check if pte already has an hpte (case 2) */ 753 /* Check if pte already has an hpte (case 2) */
696 if (unlikely(old_pte & _PAGE_HASHPTE)) { 754 if (unlikely(old_pte & _PAGE_HASHPTE)) {
@@ -703,7 +761,8 @@ int hash_huge_page(struct mm_struct *mm, unsigned long access,
703 slot = (hash & htab_hash_mask) * HPTES_PER_GROUP; 761 slot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
704 slot += (old_pte & _PAGE_F_GIX) >> 12; 762 slot += (old_pte & _PAGE_F_GIX) >> 12;
705 763
706 if (ppc_md.hpte_updatepp(slot, rflags, va, 1, local) == -1) 764 if (ppc_md.hpte_updatepp(slot, rflags, va, mmu_huge_psize,
765 local) == -1)
707 old_pte &= ~_PAGE_HPTEFLAGS; 766 old_pte &= ~_PAGE_HPTEFLAGS;
708 } 767 }
709 768
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
index f72cf87364cb..ba7a3055a9fc 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -125,7 +125,7 @@ void __init get_region(unsigned int nid, unsigned long *start_pfn,
125 125
126 /* We didnt find a matching region, return start/end as 0 */ 126 /* We didnt find a matching region, return start/end as 0 */
127 if (*start_pfn == -1UL) 127 if (*start_pfn == -1UL)
128 start_pfn = 0; 128 *start_pfn = 0;
129} 129}
130 130
131static inline void map_cpu_to_node(int cpu, int node) 131static inline void map_cpu_to_node(int cpu, int node)
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c
index cfbb4e1f966b..51e7951414e5 100644
--- a/arch/powerpc/mm/stab.c
+++ b/arch/powerpc/mm/stab.c
@@ -288,11 +288,6 @@ void stab_initialize(unsigned long stab)
288 return; 288 return;
289 } 289 }
290#endif /* CONFIG_PPC_ISERIES */ 290#endif /* CONFIG_PPC_ISERIES */
291#ifdef CONFIG_PPC_PSERIES 291
292 if (platform_is_lpar()) {
293 plpar_hcall_norets(H_SET_ASR, stabreal);
294 return;
295 }
296#endif
297 mtspr(SPRN_ASR, stabreal); 292 mtspr(SPRN_ASR, stabreal);
298} 293}
diff --git a/arch/powerpc/platforms/powermac/feature.c b/arch/powerpc/platforms/powermac/feature.c
index 0d7fa00fcb00..f6e22da2a5da 100644
--- a/arch/powerpc/platforms/powermac/feature.c
+++ b/arch/powerpc/platforms/powermac/feature.c
@@ -1650,11 +1650,19 @@ void pmac_tweak_clock_spreading(int enable)
1650 */ 1650 */
1651 1651
1652 if (macio->type == macio_intrepid) { 1652 if (macio->type == macio_intrepid) {
1653 if (enable) 1653 struct device_node *clock =
1654 UN_OUT(UNI_N_CLOCK_SPREADING, 2); 1654 of_find_node_by_path("/uni-n@f8000000/hw-clock");
1655 else 1655 if (clock && get_property(clock, "platform-do-clockspreading",
1656 UN_OUT(UNI_N_CLOCK_SPREADING, 0); 1656 NULL)) {
1657 mdelay(40); 1657 printk(KERN_INFO "%sabling clock spreading on Intrepid"
1658 " ASIC\n", enable ? "En" : "Dis");
1659 if (enable)
1660 UN_OUT(UNI_N_CLOCK_SPREADING, 2);
1661 else
1662 UN_OUT(UNI_N_CLOCK_SPREADING, 0);
1663 mdelay(40);
1664 }
1665 of_node_put(clock);
1658 } 1666 }
1659 1667
1660 while (machine_is_compatible("PowerBook5,2") || 1668 while (machine_is_compatible("PowerBook5,2") ||
@@ -1724,6 +1732,9 @@ void pmac_tweak_clock_spreading(int enable)
1724 pmac_low_i2c_close(ui2c); 1732 pmac_low_i2c_close(ui2c);
1725 break; 1733 break;
1726 } 1734 }
1735 printk(KERN_INFO "%sabling clock spreading on i2c clock chip\n",
1736 enable ? "En" : "Dis");
1737
1727 pmac_low_i2c_setmode(ui2c, pmac_low_i2c_mode_stdsub); 1738 pmac_low_i2c_setmode(ui2c, pmac_low_i2c_mode_stdsub);
1728 rc = pmac_low_i2c_xfer(ui2c, 0xd2 | pmac_low_i2c_write, 0x80, buffer, 9); 1739 rc = pmac_low_i2c_xfer(ui2c, 0xd2 | pmac_low_i2c_write, 0x80, buffer, 9);
1729 DBG("write result: %d,", rc); 1740 DBG("write result: %d,", rc);
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index c78f2b290a73..2043659ea7b1 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -109,6 +109,9 @@ static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum,
109 u64 rc; 109 u64 rc;
110 union tce_entry tce; 110 union tce_entry tce;
111 111
112 tcenum <<= TCE_PAGE_FACTOR;
113 npages <<= TCE_PAGE_FACTOR;
114
112 tce.te_word = 0; 115 tce.te_word = 0;
113 tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; 116 tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT;
114 tce.te_rdwr = 1; 117 tce.te_rdwr = 1;
@@ -143,10 +146,7 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
143 union tce_entry tce, *tcep; 146 union tce_entry tce, *tcep;
144 long l, limit; 147 long l, limit;
145 148
146 tcenum <<= TCE_PAGE_FACTOR; 149 if (TCE_PAGE_FACTOR == 0 && npages == 1)
147 npages <<= TCE_PAGE_FACTOR;
148
149 if (npages == 1)
150 return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, 150 return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr,
151 direction); 151 direction);
152 152
@@ -164,6 +164,9 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
164 __get_cpu_var(tce_page) = tcep; 164 __get_cpu_var(tce_page) = tcep;
165 } 165 }
166 166
167 tcenum <<= TCE_PAGE_FACTOR;
168 npages <<= TCE_PAGE_FACTOR;
169
167 tce.te_word = 0; 170 tce.te_word = 0;
168 tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; 171 tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT;
169 tce.te_rdwr = 1; 172 tce.te_rdwr = 1;
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index a50e5f3f396d..cf1bc11b3346 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -298,18 +298,6 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group,
298 if (!(vflags & HPTE_V_BOLTED)) 298 if (!(vflags & HPTE_V_BOLTED))
299 DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r); 299 DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r);
300 300
301#if 1
302 {
303 int i;
304 for (i=0;i<8;i++) {
305 unsigned long w0, w1;
306 plpar_pte_read(0, hpte_group, &w0, &w1);
307 BUG_ON (HPTE_V_COMPARE(hpte_v, w0)
308 && (w0 & HPTE_V_VALID));
309 }
310 }
311#endif
312
313 /* Now fill in the actual HPTE */ 301 /* Now fill in the actual HPTE */
314 /* Set CEC cookie to 0 */ 302 /* Set CEC cookie to 0 */
315 /* Zero page = 0 */ 303 /* Zero page = 0 */
diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig
index 8fa51b0a32d2..cc3f64c084c5 100644
--- a/arch/ppc/Kconfig
+++ b/arch/ppc/Kconfig
@@ -767,14 +767,14 @@ config CPM2
767 on it (826x, 827x, 8560). 767 on it (826x, 827x, 8560).
768 768
769config PPC_CHRP 769config PPC_CHRP
770 bool " Common Hardware Reference Platform (CHRP) based machines" 770 bool
771 depends on PPC_MULTIPLATFORM 771 depends on PPC_MULTIPLATFORM
772 select PPC_I8259 772 select PPC_I8259
773 select PPC_INDIRECT_PCI 773 select PPC_INDIRECT_PCI
774 default y 774 default y
775 775
776config PPC_PMAC 776config PPC_PMAC
777 bool " Apple PowerMac based machines" 777 bool
778 depends on PPC_MULTIPLATFORM 778 depends on PPC_MULTIPLATFORM
779 select PPC_INDIRECT_PCI 779 select PPC_INDIRECT_PCI
780 default y 780 default y
@@ -785,7 +785,7 @@ config PPC_PMAC64
785 default y 785 default y
786 786
787config PPC_PREP 787config PPC_PREP
788 bool " PowerPC Reference Platform (PReP) based machines" 788 bool
789 depends on PPC_MULTIPLATFORM 789 depends on PPC_MULTIPLATFORM
790 select PPC_I8259 790 select PPC_I8259
791 select PPC_INDIRECT_PCI 791 select PPC_INDIRECT_PCI
diff --git a/arch/ppc/kernel/smp.c b/arch/ppc/kernel/smp.c
index 43b8fc2ca591..becbfa397556 100644
--- a/arch/ppc/kernel/smp.c
+++ b/arch/ppc/kernel/smp.c
@@ -301,6 +301,10 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
301 301
302 /* Probe platform for CPUs: always linear. */ 302 /* Probe platform for CPUs: always linear. */
303 num_cpus = smp_ops->probe(); 303 num_cpus = smp_ops->probe();
304
305 if (num_cpus < 2)
306 smp_tb_synchronized = 1;
307
304 for (i = 0; i < num_cpus; ++i) 308 for (i = 0; i < num_cpus; ++i)
305 cpu_set(i, cpu_possible_map); 309 cpu_set(i, cpu_possible_map);
306 310
diff --git a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
index d8991b88dc9c..5e8cc5ec6ab5 100644
--- a/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
+++ b/arch/ppc/platforms/85xx/mpc85xx_cds_common.c
@@ -130,10 +130,11 @@ mpc85xx_cds_show_cpuinfo(struct seq_file *m)
130} 130}
131 131
132#ifdef CONFIG_CPM2 132#ifdef CONFIG_CPM2
133static void cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs) 133static irqreturn_t cpm2_cascade(int irq, void *dev_id, struct pt_regs *regs)
134{ 134{
135 while((irq = cpm2_get_irq(regs)) >= 0) 135 while((irq = cpm2_get_irq(regs)) >= 0)
136 __do_IRQ(irq, regs); 136 __do_IRQ(irq, regs);
137 return IRQ_HANDLED;
137} 138}
138 139
139static struct irqaction cpm2_irqaction = { 140static struct irqaction cpm2_irqaction = {
diff --git a/arch/ppc/platforms/pmac_feature.c b/arch/ppc/platforms/pmac_feature.c
index 1e69b0593162..6b7b3a150631 100644
--- a/arch/ppc/platforms/pmac_feature.c
+++ b/arch/ppc/platforms/pmac_feature.c
@@ -1606,11 +1606,19 @@ void pmac_tweak_clock_spreading(int enable)
1606 */ 1606 */
1607 1607
1608 if (macio->type == macio_intrepid) { 1608 if (macio->type == macio_intrepid) {
1609 if (enable) 1609 struct device_node *clock =
1610 UN_OUT(UNI_N_CLOCK_SPREADING, 2); 1610 of_find_node_by_path("/uni-n@f8000000/hw-clock");
1611 else 1611 if (clock && get_property(clock, "platform-do-clockspreading",
1612 UN_OUT(UNI_N_CLOCK_SPREADING, 0); 1612 NULL)) {
1613 mdelay(40); 1613 printk(KERN_INFO "%sabling clock spreading on Intrepid"
1614 " ASIC\n", enable ? "En" : "Dis");
1615 if (enable)
1616 UN_OUT(UNI_N_CLOCK_SPREADING, 2);
1617 else
1618 UN_OUT(UNI_N_CLOCK_SPREADING, 0);
1619 mdelay(40);
1620 }
1621 of_node_put(clock);
1614 } 1622 }
1615 1623
1616 while (machine_is_compatible("PowerBook5,2") || 1624 while (machine_is_compatible("PowerBook5,2") ||
@@ -1680,6 +1688,8 @@ void pmac_tweak_clock_spreading(int enable)
1680 pmac_low_i2c_close(ui2c); 1688 pmac_low_i2c_close(ui2c);
1681 break; 1689 break;
1682 } 1690 }
1691 printk(KERN_INFO "%sabling clock spreading on i2c clock chip\n",
1692 enable ? "En" : "Dis");
1683 pmac_low_i2c_setmode(ui2c, pmac_low_i2c_mode_stdsub); 1693 pmac_low_i2c_setmode(ui2c, pmac_low_i2c_mode_stdsub);
1684 rc = pmac_low_i2c_xfer(ui2c, 0xd2 | pmac_low_i2c_write, 0x80, buffer, 9); 1694 rc = pmac_low_i2c_xfer(ui2c, 0xd2 | pmac_low_i2c_write, 0x80, buffer, 9);
1685 DBG("write result: %d,", rc); 1695 DBG("write result: %d,", rc);
diff --git a/arch/ppc/syslib/ppc4xx_dma.c b/arch/ppc/syslib/ppc4xx_dma.c
index f15e64285f96..05ccd598dd4e 100644
--- a/arch/ppc/syslib/ppc4xx_dma.c
+++ b/arch/ppc/syslib/ppc4xx_dma.c
@@ -30,6 +30,7 @@
30 30
31#include <asm/system.h> 31#include <asm/system.h>
32#include <asm/io.h> 32#include <asm/io.h>
33#include <asm/dma.h>
33#include <asm/ppc4xx_dma.h> 34#include <asm/ppc4xx_dma.h>
34 35
35ppc_dma_ch_t dma_channels[MAX_PPC4xx_DMA_CHANNELS]; 36ppc_dma_ch_t dma_channels[MAX_PPC4xx_DMA_CHANNELS];
diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile
index dea48f6cff38..4cdbb2d59ed0 100644
--- a/arch/sparc/Makefile
+++ b/arch/sparc/Makefile
@@ -34,7 +34,7 @@ libs-y += arch/sparc/prom/ arch/sparc/lib/
34# Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-) 34# Renaming is done to avoid confusing pattern matching rules in 2.5.45 (multy-)
35INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) 35INIT_Y := $(patsubst %/, %/built-in.o, $(init-y))
36CORE_Y := $(core-y) 36CORE_Y := $(core-y)
37CORE_Y += kernel/ mm/ fs/ ipc/ security/ crypto/ 37CORE_Y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
38CORE_Y := $(patsubst %/, %/built-in.o, $(CORE_Y)) 38CORE_Y := $(patsubst %/, %/built-in.o, $(CORE_Y))
39DRIVERS_Y := $(patsubst %/, %/built-in.o, $(drivers-y)) 39DRIVERS_Y := $(patsubst %/, %/built-in.o, $(drivers-y))
40NET_Y := $(patsubst %/, %/built-in.o, $(net-y)) 40NET_Y := $(patsubst %/, %/built-in.o, $(net-y))
diff --git a/arch/sparc/kernel/ebus.c b/arch/sparc/kernel/ebus.c
index 1754192c69d0..5c3529ceb5d6 100644
--- a/arch/sparc/kernel/ebus.c
+++ b/arch/sparc/kernel/ebus.c
@@ -22,7 +22,7 @@
22#include <asm/oplib.h> 22#include <asm/oplib.h>
23#include <asm/bpp.h> 23#include <asm/bpp.h>
24 24
25struct linux_ebus *ebus_chain = 0; 25struct linux_ebus *ebus_chain = NULL;
26 26
27/* We are together with pcic.c under CONFIG_PCI. */ 27/* We are together with pcic.c under CONFIG_PCI. */
28extern unsigned int pcic_pin_to_irq(unsigned int, char *name); 28extern unsigned int pcic_pin_to_irq(unsigned int, char *name);
@@ -46,7 +46,7 @@ static struct ebus_device_irq je1_1[] = {
46 { "SUNW,CS4231", 0 }, 46 { "SUNW,CS4231", 0 },
47 { "parallel", 0 }, 47 { "parallel", 0 },
48 { "se", 2 }, 48 { "se", 2 },
49 { 0, 0 } 49 { NULL, 0 }
50}; 50};
51 51
52/* 52/*
@@ -55,7 +55,7 @@ static struct ebus_device_irq je1_1[] = {
55 */ 55 */
56static struct ebus_system_entry ebus_blacklist[] = { 56static struct ebus_system_entry ebus_blacklist[] = {
57 { "SUNW,JavaEngine1", je1_1 }, 57 { "SUNW,JavaEngine1", je1_1 },
58 { 0, 0 } 58 { NULL, NULL }
59}; 59};
60 60
61static struct ebus_device_irq *ebus_blackp = NULL; 61static struct ebus_device_irq *ebus_blackp = NULL;
@@ -233,7 +233,7 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
233 ebus_alloc(sizeof(struct linux_ebus_child)); 233 ebus_alloc(sizeof(struct linux_ebus_child));
234 234
235 child = dev->children; 235 child = dev->children;
236 child->next = 0; 236 child->next = NULL;
237 child->parent = dev; 237 child->parent = dev;
238 child->bus = dev->bus; 238 child->bus = dev->bus;
239 fill_ebus_child(node, &regs[0], child); 239 fill_ebus_child(node, &regs[0], child);
@@ -243,7 +243,7 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
243 ebus_alloc(sizeof(struct linux_ebus_child)); 243 ebus_alloc(sizeof(struct linux_ebus_child));
244 244
245 child = child->next; 245 child = child->next;
246 child->next = 0; 246 child->next = NULL;
247 child->parent = dev; 247 child->parent = dev;
248 child->bus = dev->bus; 248 child->bus = dev->bus;
249 fill_ebus_child(node, &regs[0], child); 249 fill_ebus_child(node, &regs[0], child);
@@ -275,7 +275,7 @@ void __init ebus_init(void)
275 } 275 }
276 } 276 }
277 277
278 pdev = pci_get_device(PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_EBUS, 0); 278 pdev = pci_get_device(PCI_VENDOR_ID_SUN, PCI_DEVICE_ID_SUN_EBUS, NULL);
279 if (!pdev) { 279 if (!pdev) {
280 return; 280 return;
281 } 281 }
@@ -284,7 +284,7 @@ void __init ebus_init(void)
284 284
285 ebus_chain = ebus = (struct linux_ebus *) 285 ebus_chain = ebus = (struct linux_ebus *)
286 ebus_alloc(sizeof(struct linux_ebus)); 286 ebus_alloc(sizeof(struct linux_ebus));
287 ebus->next = 0; 287 ebus->next = NULL;
288 288
289 while (ebusnd) { 289 while (ebusnd) {
290 290
@@ -325,8 +325,8 @@ void __init ebus_init(void)
325 ebus_alloc(sizeof(struct linux_ebus_device)); 325 ebus_alloc(sizeof(struct linux_ebus_device));
326 326
327 dev = ebus->devices; 327 dev = ebus->devices;
328 dev->next = 0; 328 dev->next = NULL;
329 dev->children = 0; 329 dev->children = NULL;
330 dev->bus = ebus; 330 dev->bus = ebus;
331 fill_ebus_device(nd, dev); 331 fill_ebus_device(nd, dev);
332 332
@@ -335,8 +335,8 @@ void __init ebus_init(void)
335 ebus_alloc(sizeof(struct linux_ebus_device)); 335 ebus_alloc(sizeof(struct linux_ebus_device));
336 336
337 dev = dev->next; 337 dev = dev->next;
338 dev->next = 0; 338 dev->next = NULL;
339 dev->children = 0; 339 dev->children = NULL;
340 dev->bus = ebus; 340 dev->bus = ebus;
341 fill_ebus_device(nd, dev); 341 fill_ebus_device(nd, dev);
342 } 342 }
@@ -353,7 +353,7 @@ void __init ebus_init(void)
353 ebus->next = (struct linux_ebus *) 353 ebus->next = (struct linux_ebus *)
354 ebus_alloc(sizeof(struct linux_ebus)); 354 ebus_alloc(sizeof(struct linux_ebus));
355 ebus = ebus->next; 355 ebus = ebus->next;
356 ebus->next = 0; 356 ebus->next = NULL;
357 ++num_ebus; 357 ++num_ebus;
358 } 358 }
359 if (pdev) 359 if (pdev)
diff --git a/arch/sparc/kernel/led.c b/arch/sparc/kernel/led.c
index 2a3afca453c9..313d1620ae8e 100644
--- a/arch/sparc/kernel/led.c
+++ b/arch/sparc/kernel/led.c
@@ -55,7 +55,7 @@ static int led_read_proc(char *buf, char **start, off_t offset, int count,
55 return len; 55 return len;
56} 56}
57 57
58static int led_write_proc(struct file *file, const char *buffer, 58static int led_write_proc(struct file *file, const char __user *buffer,
59 unsigned long count, void *data) 59 unsigned long count, void *data)
60{ 60{
61 char *buf = NULL; 61 char *buf = NULL;
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
index cccfc12802ed..42002b742deb 100644
--- a/arch/sparc/kernel/pcic.c
+++ b/arch/sparc/kernel/pcic.c
@@ -161,7 +161,7 @@ static struct pcic_sn2list pcic_known_sysnames[] = {
161static int pcic0_up; 161static int pcic0_up;
162static struct linux_pcic pcic0; 162static struct linux_pcic pcic0;
163 163
164void * __iomem pcic_regs; 164void __iomem *pcic_regs;
165volatile int pcic_speculative; 165volatile int pcic_speculative;
166volatile int pcic_trapped; 166volatile int pcic_trapped;
167 167
diff --git a/arch/sparc/kernel/time.c b/arch/sparc/kernel/time.c
index 24814d58f9e1..7dadcdb4ca42 100644
--- a/arch/sparc/kernel/time.c
+++ b/arch/sparc/kernel/time.c
@@ -49,7 +49,7 @@ DEFINE_SPINLOCK(rtc_lock);
49enum sparc_clock_type sp_clock_typ; 49enum sparc_clock_type sp_clock_typ;
50DEFINE_SPINLOCK(mostek_lock); 50DEFINE_SPINLOCK(mostek_lock);
51void __iomem *mstk48t02_regs = NULL; 51void __iomem *mstk48t02_regs = NULL;
52static struct mostek48t08 *mstk48t08_regs = NULL; 52static struct mostek48t08 __iomem *mstk48t08_regs = NULL;
53static int set_rtc_mmss(unsigned long); 53static int set_rtc_mmss(unsigned long);
54static int sbus_do_settimeofday(struct timespec *tv); 54static int sbus_do_settimeofday(struct timespec *tv);
55 55
@@ -342,7 +342,7 @@ static __inline__ void clock_probe(void)
342 /* XXX r/o attribute is somewhere in r.flags */ 342 /* XXX r/o attribute is somewhere in r.flags */
343 r.flags = clk_reg[0].which_io; 343 r.flags = clk_reg[0].which_io;
344 r.start = clk_reg[0].phys_addr; 344 r.start = clk_reg[0].phys_addr;
345 mstk48t08_regs = (struct mostek48t08 *) sbus_ioremap(&r, 0, 345 mstk48t08_regs = sbus_ioremap(&r, 0,
346 sizeof(struct mostek48t08), "mk48t08"); 346 sizeof(struct mostek48t08), "mk48t08");
347 347
348 mstk48t02_regs = &mstk48t08_regs->regs; 348 mstk48t02_regs = &mstk48t08_regs->regs;
diff --git a/arch/sparc/lib/atomic32.c b/arch/sparc/lib/atomic32.c
index cb3cf0f22822..de84f8534bac 100644
--- a/arch/sparc/lib/atomic32.c
+++ b/arch/sparc/lib/atomic32.c
@@ -66,7 +66,6 @@ int atomic_add_unless(atomic_t *v, int a, int u)
66 return ret != u; 66 return ret != u;
67} 67}
68 68
69static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
70/* Atomic operations are already serializing */ 69/* Atomic operations are already serializing */
71void atomic_set(atomic_t *v, int i) 70void atomic_set(atomic_t *v, int i)
72{ 71{
diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c
index 1d560390e282..731f19603cad 100644
--- a/arch/sparc/mm/sun4c.c
+++ b/arch/sparc/mm/sun4c.c
@@ -497,7 +497,7 @@ static void __init sun4c_probe_mmu(void)
497 patch_kernel_fault_handler(); 497 patch_kernel_fault_handler();
498} 498}
499 499
500volatile unsigned long *sun4c_memerr_reg = NULL; 500volatile unsigned long __iomem *sun4c_memerr_reg = NULL;
501 501
502void __init sun4c_probe_memerr_reg(void) 502void __init sun4c_probe_memerr_reg(void)
503{ 503{
diff --git a/arch/sparc64/Makefile b/arch/sparc64/Makefile
index 43fe382da078..cad10c5b83d3 100644
--- a/arch/sparc64/Makefile
+++ b/arch/sparc64/Makefile
@@ -17,7 +17,6 @@ CC := $(shell if $(CC) -m64 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then
17NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow) 17NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
18NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi) 18NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
19UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; ) 19UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
20INLINE_LIMIT := $(call cc-option-yn, -m64 -finline-limit=100000)
21 20
22export NEW_GCC 21export NEW_GCC
23 22
@@ -49,10 +48,6 @@ else
49 AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL) 48 AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
50endif 49endif
51 50
52ifeq ($(INLINE_LIMIT),y)
53 CFLAGS := $(CFLAGS) -finline-limit=100000
54endif
55
56ifeq ($(CONFIG_MCOUNT),y) 51ifeq ($(CONFIG_MCOUNT),y)
57 CFLAGS := $(CFLAGS) -pg 52 CFLAGS := $(CFLAGS) -pg
58endif 53endif
diff --git a/arch/sparc64/kernel/kprobes.c b/arch/sparc64/kernel/kprobes.c
index 96bd09b098f4..a97b0f0727ab 100644
--- a/arch/sparc64/kernel/kprobes.c
+++ b/arch/sparc64/kernel/kprobes.c
@@ -138,7 +138,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
138 */ 138 */
139 save_previous_kprobe(kcb); 139 save_previous_kprobe(kcb);
140 set_current_kprobe(p, regs, kcb); 140 set_current_kprobe(p, regs, kcb);
141 p->nmissed++; 141 kprobes_inc_nmissed_count(p);
142 kcb->kprobe_status = KPROBE_REENTER; 142 kcb->kprobe_status = KPROBE_REENTER;
143 prepare_singlestep(p, regs, kcb); 143 prepare_singlestep(p, regs, kcb);
144 return 1; 144 return 1;
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index 563301fe5df8..1eb21de9d1b5 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -289,6 +289,8 @@ source "arch/um/Kconfig.net"
289 289
290source "drivers/net/Kconfig" 290source "drivers/net/Kconfig"
291 291
292source "drivers/connector/Kconfig"
293
292source "fs/Kconfig" 294source "fs/Kconfig"
293 295
294source "security/Kconfig" 296source "security/Kconfig"
diff --git a/arch/um/Makefile-x86_64 b/arch/um/Makefile-x86_64
index 4f118d5cc2ee..38df311e75dc 100644
--- a/arch/um/Makefile-x86_64
+++ b/arch/um/Makefile-x86_64
@@ -12,3 +12,7 @@ CHECKFLAGS += -m64
12 12
13ELF_ARCH := i386:x86-64 13ELF_ARCH := i386:x86-64
14ELF_FORMAT := elf64-x86-64 14ELF_FORMAT := elf64-x86-64
15
16# Not on all 64-bit distros /lib is a symlink to /lib64. PLD is an example.
17
18LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64
diff --git a/arch/um/include/sysdep-i386/stub.h b/arch/um/include/sysdep-i386/stub.h
index 6ba8cbbe0d36..b492b12b4a10 100644
--- a/arch/um/include/sysdep-i386/stub.h
+++ b/arch/um/include/sysdep-i386/stub.h
@@ -6,8 +6,12 @@
6#ifndef __SYSDEP_STUB_H 6#ifndef __SYSDEP_STUB_H
7#define __SYSDEP_STUB_H 7#define __SYSDEP_STUB_H
8 8
9#include <sys/mman.h>
9#include <asm/ptrace.h> 10#include <asm/ptrace.h>
10#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include "stub-data.h"
13#include "kern_constants.h"
14#include "uml-config.h"
11 15
12extern void stub_segv_handler(int sig); 16extern void stub_segv_handler(int sig);
13extern void stub_clone_handler(void); 17extern void stub_clone_handler(void);
@@ -76,23 +80,22 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3,
76 return ret; 80 return ret;
77} 81}
78 82
79static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3, 83static inline void trap_myself(void)
80 long arg4, long arg5, long arg6)
81{ 84{
82 long ret; 85 __asm("int3");
83
84 __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; "
85 "int $0x80 ; pop %%ebp"
86 : "=a" (ret)
87 : "g" (syscall), "b" (arg1), "c" (arg2), "d" (arg3),
88 "S" (arg4), "D" (arg5), "0" (arg6));
89
90 return ret;
91} 86}
92 87
93static inline void trap_myself(void) 88static inline void remap_stack(int fd, unsigned long offset)
94{ 89{
95 __asm("int3"); 90 __asm__ volatile ("movl %%eax,%%ebp ; movl %0,%%eax ; int $0x80 ;"
91 "movl %7, %%ebx ; movl %%eax, (%%ebx)"
92 : : "g" (STUB_MMAP_NR), "b" (UML_CONFIG_STUB_DATA),
93 "c" (UM_KERN_PAGE_SIZE),
94 "d" (PROT_READ | PROT_WRITE),
95 "S" (MAP_FIXED | MAP_SHARED), "D" (fd),
96 "a" (offset),
97 "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err)
98 : "memory");
96} 99}
97 100
98#endif 101#endif
diff --git a/arch/um/include/sysdep-x86_64/stub.h b/arch/um/include/sysdep-x86_64/stub.h
index c41689c13dc9..92e989f81761 100644
--- a/arch/um/include/sysdep-x86_64/stub.h
+++ b/arch/um/include/sysdep-x86_64/stub.h
@@ -6,8 +6,12 @@
6#ifndef __SYSDEP_STUB_H 6#ifndef __SYSDEP_STUB_H
7#define __SYSDEP_STUB_H 7#define __SYSDEP_STUB_H
8 8
9#include <sys/mman.h>
9#include <asm/unistd.h> 10#include <asm/unistd.h>
10#include <sysdep/ptrace_user.h> 11#include <sysdep/ptrace_user.h>
12#include "stub-data.h"
13#include "kern_constants.h"
14#include "uml-config.h"
11 15
12extern void stub_segv_handler(int sig); 16extern void stub_segv_handler(int sig);
13extern void stub_clone_handler(void); 17extern void stub_clone_handler(void);
@@ -81,23 +85,23 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3,
81 return ret; 85 return ret;
82} 86}
83 87
84static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3, 88static inline void trap_myself(void)
85 long arg4, long arg5, long arg6)
86{ 89{
87 long ret; 90 __asm("int3");
88
89 __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; "
90 "movq %7, %%r9; " __syscall : "=a" (ret)
91 : "0" (syscall), "D" (arg1), "S" (arg2), "d" (arg3),
92 "g" (arg4), "g" (arg5), "g" (arg6)
93 : __syscall_clobber, "r10", "r8", "r9" );
94
95 return ret;
96} 91}
97 92
98static inline void trap_myself(void) 93static inline void remap_stack(long fd, unsigned long offset)
99{ 94{
100 __asm("int3"); 95 __asm__ volatile ("movq %4,%%r10 ; movq %5,%%r8 ; "
96 "movq %6, %%r9; " __syscall "; movq %7, %%rbx ; "
97 "movq %%rax, (%%rbx)":
98 : "a" (STUB_MMAP_NR), "D" (UML_CONFIG_STUB_DATA),
99 "S" (UM_KERN_PAGE_SIZE),
100 "d" (PROT_READ | PROT_WRITE),
101 "g" (MAP_FIXED | MAP_SHARED), "g" (fd),
102 "g" (offset),
103 "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err)
104 : __syscall_clobber, "r10", "r8", "r9" );
101} 105}
102 106
103#endif 107#endif
diff --git a/arch/um/include/um_uaccess.h b/arch/um/include/um_uaccess.h
index f8760a3f43b0..4567f1eeb4a7 100644
--- a/arch/um/include/um_uaccess.h
+++ b/arch/um/include/um_uaccess.h
@@ -17,6 +17,8 @@
17#include "uaccess-skas.h" 17#include "uaccess-skas.h"
18#endif 18#endif
19 19
20#include "asm/fixmap.h"
21
20#define __under_task_size(addr, size) \ 22#define __under_task_size(addr, size) \
21 (((unsigned long) (addr) < TASK_SIZE) && \ 23 (((unsigned long) (addr) < TASK_SIZE) && \
22 (((unsigned long) (addr) + (size)) < TASK_SIZE)) 24 (((unsigned long) (addr) + (size)) < TASK_SIZE))
diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c
index cb37ce9124a6..47b812b3bca8 100644
--- a/arch/um/kernel/skas/clone.c
+++ b/arch/um/kernel/skas/clone.c
@@ -18,11 +18,10 @@
18 * on some systems. 18 * on some systems.
19 */ 19 */
20 20
21#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field)
22
23void __attribute__ ((__section__ (".__syscall_stub"))) 21void __attribute__ ((__section__ (".__syscall_stub")))
24stub_clone_handler(void) 22stub_clone_handler(void)
25{ 23{
24 struct stub_data *data = (struct stub_data *) UML_CONFIG_STUB_DATA;
26 long err; 25 long err;
27 26
28 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, 27 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
@@ -35,17 +34,21 @@ stub_clone_handler(void)
35 if(err) 34 if(err)
36 goto out; 35 goto out;
37 36
38 err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, 37 err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL,
39 (long) &STUB_DATA(timer), 0); 38 (long) &data->timer, 0);
40 if(err) 39 if(err)
41 goto out; 40 goto out;
42 41
43 err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, 42 remap_stack(data->fd, data->offset);
44 UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE, 43 goto done;
45 MAP_FIXED | MAP_SHARED, STUB_DATA(fd), 44
46 STUB_DATA(offset));
47 out: 45 out:
48 /* save current result. Parent: pid; child: retcode of mmap */ 46 /* save current result.
49 STUB_DATA(err) = err; 47 * Parent: pid;
48 * child: retcode of mmap already saved and it jumps around this
49 * assignment
50 */
51 data->err = err;
52 done:
50 trap_myself(); 53 trap_myself();
51} 54}
diff --git a/arch/um/kernel/skas/include/uaccess-skas.h b/arch/um/kernel/skas/include/uaccess-skas.h
index f611f83ad4ff..64516c556cdf 100644
--- a/arch/um/kernel/skas/include/uaccess-skas.h
+++ b/arch/um/kernel/skas/include/uaccess-skas.h
@@ -7,7 +7,6 @@
7#define __SKAS_UACCESS_H 7#define __SKAS_UACCESS_H
8 8
9#include "asm/errno.h" 9#include "asm/errno.h"
10#include "asm/fixmap.h"
11 10
12/* No SKAS-specific checking. */ 11/* No SKAS-specific checking. */
13#define access_ok_skas(type, addr, size) 0 12#define access_ok_skas(type, addr, size) 0
diff --git a/arch/um/scripts/Makefile.rules b/arch/um/scripts/Makefile.rules
index b3fbf125709b..2e41cabd3d93 100644
--- a/arch/um/scripts/Makefile.rules
+++ b/arch/um/scripts/Makefile.rules
@@ -21,11 +21,6 @@ define unprofile
21endef 21endef
22 22
23 23
24# The stubs and unmap.o can't try to call mcount or update basic block data
25define unprofile
26 $(patsubst -pg,,$(patsubst -fprofile-arcs -ftest-coverage,,$(1)))
27endef
28
29# cmd_make_link checks to see if the $(foo-dir) variable starts with a /. If 24# cmd_make_link checks to see if the $(foo-dir) variable starts with a /. If
30# so, it's considered to be a path relative to $(srcdir) rather than 25# so, it's considered to be a path relative to $(srcdir) rather than
31# $(srcdir)/arch/$(SUBARCH). This is because x86_64 wants to get ldt.c from 26# $(srcdir)/arch/$(SUBARCH). This is because x86_64 wants to get ldt.c from
diff --git a/arch/x86_64/ia32/ia32_binfmt.c b/arch/x86_64/ia32/ia32_binfmt.c
index 830feb272eca..2b760d0d9ce2 100644
--- a/arch/x86_64/ia32/ia32_binfmt.c
+++ b/arch/x86_64/ia32/ia32_binfmt.c
@@ -217,8 +217,7 @@ elf_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs, elf_fpr
217 if (!tsk_used_math(tsk)) 217 if (!tsk_used_math(tsk))
218 return 0; 218 return 0;
219 if (!regs) 219 if (!regs)
220 regs = (struct pt_regs *)tsk->thread.rsp0; 220 regs = ((struct pt_regs *)tsk->thread.rsp0) - 1;
221 --regs;
222 if (tsk == current) 221 if (tsk == current)
223 unlazy_fpu(tsk); 222 unlazy_fpu(tsk);
224 set_fs(KERNEL_DS); 223 set_fs(KERNEL_DS);
diff --git a/arch/x86_64/kernel/kprobes.c b/arch/x86_64/kernel/kprobes.c
index dddeb678b440..afe11f4fbd1d 100644
--- a/arch/x86_64/kernel/kprobes.c
+++ b/arch/x86_64/kernel/kprobes.c
@@ -329,7 +329,7 @@ int __kprobes kprobe_handler(struct pt_regs *regs)
329 */ 329 */
330 save_previous_kprobe(kcb); 330 save_previous_kprobe(kcb);
331 set_current_kprobe(p, regs, kcb); 331 set_current_kprobe(p, regs, kcb);
332 p->nmissed++; 332 kprobes_inc_nmissed_count(p);
333 prepare_singlestep(p, regs); 333 prepare_singlestep(p, regs);
334 kcb->kprobe_status = KPROBE_REENTER; 334 kcb->kprobe_status = KPROBE_REENTER;
335 return 1; 335 return 1;
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index 683c33f7b967..ecbd7b83acc1 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -1181,7 +1181,7 @@ int __cpu_disable(void)
1181 if (cpu == 0) 1181 if (cpu == 0)
1182 return -EBUSY; 1182 return -EBUSY;
1183 1183
1184 disable_APIC_timer(); 1184 clear_local_APIC();
1185 1185
1186 /* 1186 /*
1187 * HACK: 1187 * HACK:
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
index fdaddc4e5284..74102796e5c0 100644
--- a/arch/x86_64/kernel/time.c
+++ b/arch/x86_64/kernel/time.c
@@ -59,7 +59,7 @@ static int notsc __initdata = 0;
59unsigned int cpu_khz; /* TSC clocks / usec, not used here */ 59unsigned int cpu_khz; /* TSC clocks / usec, not used here */
60static unsigned long hpet_period; /* fsecs / HPET clock */ 60static unsigned long hpet_period; /* fsecs / HPET clock */
61unsigned long hpet_tick; /* HPET clocks / interrupt */ 61unsigned long hpet_tick; /* HPET clocks / interrupt */
62static int hpet_use_timer; 62static int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */
63unsigned long vxtime_hz = PIT_TICK_RATE; 63unsigned long vxtime_hz = PIT_TICK_RATE;
64int report_lost_ticks; /* command line option */ 64int report_lost_ticks; /* command line option */
65unsigned long long monotonic_base; 65unsigned long long monotonic_base;
@@ -908,12 +908,14 @@ void __init time_init(void)
908 if (!hpet_init()) 908 if (!hpet_init())
909 vxtime_hz = (1000000000000000L + hpet_period / 2) / 909 vxtime_hz = (1000000000000000L + hpet_period / 2) /
910 hpet_period; 910 hpet_period;
911 else
912 vxtime.hpet_address = 0;
911 913
912 if (hpet_use_timer) { 914 if (hpet_use_timer) {
913 cpu_khz = hpet_calibrate_tsc(); 915 cpu_khz = hpet_calibrate_tsc();
914 timename = "HPET"; 916 timename = "HPET";
915#ifdef CONFIG_X86_PM_TIMER 917#ifdef CONFIG_X86_PM_TIMER
916 } else if (pmtmr_ioport) { 918 } else if (pmtmr_ioport && !vxtime.hpet_address) {
917 vxtime_hz = PM_TIMER_FREQUENCY; 919 vxtime_hz = PM_TIMER_FREQUENCY;
918 timename = "PM"; 920 timename = "PM";
919 pit_init(); 921 pit_init();
diff --git a/arch/x86_64/mm/ioremap.c b/arch/x86_64/mm/ioremap.c
index ecf7acb5db9b..ae207064201e 100644
--- a/arch/x86_64/mm/ioremap.c
+++ b/arch/x86_64/mm/ioremap.c
@@ -247,9 +247,15 @@ void __iomem *ioremap_nocache (unsigned long phys_addr, unsigned long size)
247 return __ioremap(phys_addr, size, _PAGE_PCD); 247 return __ioremap(phys_addr, size, _PAGE_PCD);
248} 248}
249 249
250/**
251 * iounmap - Free a IO remapping
252 * @addr: virtual address from ioremap_*
253 *
254 * Caller must ensure there is only one unmapping for the same pointer.
255 */
250void iounmap(volatile void __iomem *addr) 256void iounmap(volatile void __iomem *addr)
251{ 257{
252 struct vm_struct *p; 258 struct vm_struct *p, *o;
253 259
254 if (addr <= high_memory) 260 if (addr <= high_memory)
255 return; 261 return;
@@ -257,12 +263,31 @@ void iounmap(volatile void __iomem *addr)
257 addr < phys_to_virt(ISA_END_ADDRESS)) 263 addr < phys_to_virt(ISA_END_ADDRESS))
258 return; 264 return;
259 265
260 write_lock(&vmlist_lock); 266 addr = (volatile void __iomem *)(PAGE_MASK & (unsigned long __force)addr);
261 p = __remove_vm_area((void *)((unsigned long)addr & PAGE_MASK)); 267 /* Use the vm area unlocked, assuming the caller
262 if (!p) 268 ensures there isn't another iounmap for the same address
269 in parallel. Reuse of the virtual address is prevented by
270 leaving it in the global lists until we're done with it.
271 cpa takes care of the direct mappings. */
272 read_lock(&vmlist_lock);
273 for (p = vmlist; p; p = p->next) {
274 if (p->addr == addr)
275 break;
276 }
277 read_unlock(&vmlist_lock);
278
279 if (!p) {
263 printk("iounmap: bad address %p\n", addr); 280 printk("iounmap: bad address %p\n", addr);
264 else if (p->flags >> 20) 281 dump_stack();
282 return;
283 }
284
285 /* Reset the direct mapping. Can block */
286 if (p->flags >> 20)
265 ioremap_change_attr(p->phys_addr, p->size, 0); 287 ioremap_change_attr(p->phys_addr, p->size, 0);
266 write_unlock(&vmlist_lock); 288
289 /* Finally remove it */
290 o = remove_vm_area((void *)addr);
291 BUG_ON(p != o || o == NULL);
267 kfree(p); 292 kfree(p);
268} 293}
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c
index a828a01739cc..15b67d2760cb 100644
--- a/arch/x86_64/mm/numa.c
+++ b/arch/x86_64/mm/numa.c
@@ -53,6 +53,8 @@ static int __init populate_memnodemap(
53 int res = -1; 53 int res = -1;
54 unsigned long addr, end; 54 unsigned long addr, end;
55 55
56 if (shift >= 64)
57 return -1;
56 memset(memnodemap, 0xff, sizeof(memnodemap)); 58 memset(memnodemap, 0xff, sizeof(memnodemap));
57 for (i = 0; i < numnodes; i++) { 59 for (i = 0; i < numnodes; i++) {
58 addr = nodes[i].start; 60 addr = nodes[i].start;
@@ -65,7 +67,7 @@ static int __init populate_memnodemap(
65 if (memnodemap[addr >> shift] != 0xff) 67 if (memnodemap[addr >> shift] != 0xff)
66 return -1; 68 return -1;
67 memnodemap[addr >> shift] = i; 69 memnodemap[addr >> shift] = i;
68 addr += (1 << shift); 70 addr += (1UL << shift);
69 } while (addr < end); 71 } while (addr < end);
70 res = 1; 72 res = 1;
71 } 73 }
diff --git a/arch/x86_64/pci/Makefile b/arch/x86_64/pci/Makefile
index bb34e5ef916c..a8f75a2a0f6f 100644
--- a/arch/x86_64/pci/Makefile
+++ b/arch/x86_64/pci/Makefile
@@ -11,7 +11,7 @@ obj-y += fixup.o
11obj-$(CONFIG_ACPI) += acpi.o 11obj-$(CONFIG_ACPI) += acpi.o
12obj-y += legacy.o irq.o common.o 12obj-y += legacy.o irq.o common.o
13# mmconfig has a 64bit special 13# mmconfig has a 64bit special
14obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o 14obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o direct.o
15 15
16obj-$(CONFIG_NUMA) += k8-bus.o 16obj-$(CONFIG_NUMA) += k8-bus.o
17 17
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c
index a0838c4a94e4..f16c0d57c552 100644
--- a/arch/x86_64/pci/mmconfig.c
+++ b/arch/x86_64/pci/mmconfig.c
@@ -8,18 +8,21 @@
8#include <linux/pci.h> 8#include <linux/pci.h>
9#include <linux/init.h> 9#include <linux/init.h>
10#include <linux/acpi.h> 10#include <linux/acpi.h>
11#include <linux/bitmap.h>
11#include "pci.h" 12#include "pci.h"
12 13
13#define MMCONFIG_APER_SIZE (256*1024*1024) 14#define MMCONFIG_APER_SIZE (256*1024*1024)
14 15
16static DECLARE_BITMAP(fallback_slots, 32);
17
15/* Static virtual mapping of the MMCONFIG aperture */ 18/* Static virtual mapping of the MMCONFIG aperture */
16struct mmcfg_virt { 19struct mmcfg_virt {
17 struct acpi_table_mcfg_config *cfg; 20 struct acpi_table_mcfg_config *cfg;
18 char *virt; 21 char __iomem *virt;
19}; 22};
20static struct mmcfg_virt *pci_mmcfg_virt; 23static struct mmcfg_virt *pci_mmcfg_virt;
21 24
22static char *get_virt(unsigned int seg, int bus) 25static char __iomem *get_virt(unsigned int seg, unsigned bus)
23{ 26{
24 int cfg_num = -1; 27 int cfg_num = -1;
25 struct acpi_table_mcfg_config *cfg; 28 struct acpi_table_mcfg_config *cfg;
@@ -27,10 +30,9 @@ static char *get_virt(unsigned int seg, int bus)
27 while (1) { 30 while (1) {
28 ++cfg_num; 31 ++cfg_num;
29 if (cfg_num >= pci_mmcfg_config_num) { 32 if (cfg_num >= pci_mmcfg_config_num) {
30 /* something bad is going on, no cfg table is found. */ 33 /* Not found - fall back to type 1. This happens
31 /* so we fall back to the old way we used to do this */ 34 e.g. on the internal devices of a K8 northbridge. */
32 /* and just rely on the first entry to be correct. */ 35 return NULL;
33 return pci_mmcfg_virt[0].virt;
34 } 36 }
35 cfg = pci_mmcfg_virt[cfg_num].cfg; 37 cfg = pci_mmcfg_virt[cfg_num].cfg;
36 if (cfg->pci_segment_group_number != seg) 38 if (cfg->pci_segment_group_number != seg)
@@ -41,20 +43,30 @@ static char *get_virt(unsigned int seg, int bus)
41 } 43 }
42} 44}
43 45
44static inline char *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) 46static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
45{ 47{
46 48 char __iomem *addr;
47 return get_virt(seg, bus) + ((bus << 20) | (devfn << 12)); 49 if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), &fallback_slots))
50 return NULL;
51 addr = get_virt(seg, bus);
52 if (!addr)
53 return NULL;
54 return addr + ((bus << 20) | (devfn << 12));
48} 55}
49 56
50static int pci_mmcfg_read(unsigned int seg, unsigned int bus, 57static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
51 unsigned int devfn, int reg, int len, u32 *value) 58 unsigned int devfn, int reg, int len, u32 *value)
52{ 59{
53 char *addr = pci_dev_base(seg, bus, devfn); 60 char __iomem *addr;
54 61
62 /* Why do we have this when nobody checks it. How about a BUG()!? -AK */
55 if (unlikely(!value || (bus > 255) || (devfn > 255) || (reg > 4095))) 63 if (unlikely(!value || (bus > 255) || (devfn > 255) || (reg > 4095)))
56 return -EINVAL; 64 return -EINVAL;
57 65
66 addr = pci_dev_base(seg, bus, devfn);
67 if (!addr)
68 return pci_conf1_read(seg,bus,devfn,reg,len,value);
69
58 switch (len) { 70 switch (len) {
59 case 1: 71 case 1:
60 *value = readb(addr + reg); 72 *value = readb(addr + reg);
@@ -73,11 +85,16 @@ static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
73static int pci_mmcfg_write(unsigned int seg, unsigned int bus, 85static int pci_mmcfg_write(unsigned int seg, unsigned int bus,
74 unsigned int devfn, int reg, int len, u32 value) 86 unsigned int devfn, int reg, int len, u32 value)
75{ 87{
76 char *addr = pci_dev_base(seg, bus, devfn); 88 char __iomem *addr;
77 89
90 /* Why do we have this when nobody checks it. How about a BUG()!? -AK */
78 if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095))) 91 if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095)))
79 return -EINVAL; 92 return -EINVAL;
80 93
94 addr = pci_dev_base(seg, bus, devfn);
95 if (!addr)
96 return pci_conf1_write(seg,bus,devfn,reg,len,value);
97
81 switch (len) { 98 switch (len) {
82 case 1: 99 case 1:
83 writeb(value, addr + reg); 100 writeb(value, addr + reg);
@@ -98,6 +115,30 @@ static struct pci_raw_ops pci_mmcfg = {
98 .write = pci_mmcfg_write, 115 .write = pci_mmcfg_write,
99}; 116};
100 117
118/* K8 systems have some devices (typically in the builtin northbridge)
119 that are only accessible using type1
120 Normally this can be expressed in the MCFG by not listing them
121 and assigning suitable _SEGs, but this isn't implemented in some BIOS.
122 Instead try to discover all devices on bus 0 that are unreachable using MM
123 and fallback for them.
124 We only do this for bus 0/seg 0 */
125static __init void unreachable_devices(void)
126{
127 int i;
128 for (i = 0; i < 32; i++) {
129 u32 val1;
130 char __iomem *addr;
131
132 pci_conf1_read(0, 0, PCI_DEVFN(i,0), 0, 4, &val1);
133 if (val1 == 0xffffffff)
134 continue;
135 addr = pci_dev_base(0, 0, PCI_DEVFN(i, 0));
136 if (addr == NULL|| readl(addr) != val1) {
137 set_bit(i, &fallback_slots);
138 }
139 }
140}
141
101static int __init pci_mmcfg_init(void) 142static int __init pci_mmcfg_init(void)
102{ 143{
103 int i; 144 int i;
@@ -128,6 +169,8 @@ static int __init pci_mmcfg_init(void)
128 printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_config[i].base_address); 169 printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_config[i].base_address);
129 } 170 }
130 171
172 unreachable_devices();
173
131 raw_pci_ops = &pci_mmcfg; 174 raw_pci_ops = &pci_mmcfg;
132 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; 175 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
133 176