aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/ptrace.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/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_defconfig152
-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.c5
-rw-r--r--arch/ia64/kernel/salinfo.c2
-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/mips/mm/init.c4
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/kernel/kprobes.c2
-rw-r--r--arch/powerpc/kernel/setup_64.c10
-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/pmac_feature.c20
-rw-r--r--arch/sparc/Makefile2
-rw-r--r--arch/sparc/lib/atomic32.c1
-rw-r--r--arch/sparc64/kernel/kprobes.c2
-rw-r--r--arch/um/include/um_uaccess.h2
-rw-r--r--arch/um/kernel/skas/include/uaccess-skas.h1
-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/mmconfig.c63
45 files changed, 647 insertions, 215 deletions
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/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..8498b5ac3955 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 *)(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/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..08a084901212 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 *)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..e1924cc9687b 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,14 +108,10 @@ 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=512
100# CONFIG_HOTPLUG_CPU is not set 117# CONFIG_HOTPLUG_CPU is not set
@@ -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..a4da715a360c 100644
--- a/arch/ia64/kernel/process.c
+++ b/arch/ia64/kernel/process.c
@@ -721,8 +721,11 @@ 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 if (IS_IA32_PROCESS(ia64_task_regs(current))) {
725 ia32_drop_partial_page_list(current); 725 ia32_drop_partial_page_list(current);
726 current->thread.task_size = IA32_PAGE_OFFSET;
727 set_fs(USER_DS);
728 }
726} 729}
727 730
728/* 731/*
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/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/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/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/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/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/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/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/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/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/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/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..0d260e4492f7 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 *)(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/mmconfig.c b/arch/x86_64/pci/mmconfig.c
index a0838c4a94e4..9c4f907e301c 100644
--- a/arch/x86_64/pci/mmconfig.c
+++ b/arch/x86_64/pci/mmconfig.c
@@ -8,10 +8,13 @@
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;
@@ -19,7 +22,7 @@ struct mmcfg_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 *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 *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
45{ 47{
46 48 char *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 *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 *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 *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