diff options
Diffstat (limited to 'arch')
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 | } |
224 | EXPORT_SYMBOL(ioremap_nocache); | 224 | EXPORT_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 | */ | ||
226 | void iounmap(volatile void __iomem *addr) | 232 | void 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 | } |
256 | out_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 | } |
260 | EXPORT_SYMBOL(iounmap); | 281 | EXPORT_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 | ||
16 | static int pci_conf1_read(unsigned int seg, unsigned int bus, | 16 | int 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 | ||
45 | static int pci_conf1_write(unsigned int seg, unsigned int bus, | 45 | int 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 */ |
20 | static u32 mmcfg_last_accessed_device; | 20 | static u32 mmcfg_last_accessed_device; |
21 | 21 | ||
22 | static 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 | */ |
25 | static u32 get_base_addr(unsigned int seg, int bus) | 27 | static 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 | ||
47 | static inline void pci_exp_set_dev_base(unsigned int seg, int bus, int devfn) | 51 | static 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 */ | ||
140 | static __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 | |||
119 | static int __init pci_mmcfg_init(void) | 164 | static 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 | ||
75 | extern int (*pcibios_enable_irq)(struct pci_dev *dev); | 75 | extern int (*pcibios_enable_irq)(struct pci_dev *dev); |
76 | extern void (*pcibios_disable_irq)(struct pci_dev *dev); | 76 | extern void (*pcibios_disable_irq)(struct pci_dev *dev); |
77 | |||
78 | extern int pci_conf1_write(unsigned int seg, unsigned int bus, | ||
79 | unsigned int devfn, int reg, int len, u32 value); | ||
80 | extern 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 | ||
61 | config ZONE_DMA_IS_DMA32 | 61 | config 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 | # |
18 | CONFIG_LOCALVERSION="" | 18 | CONFIG_LOCALVERSION="" |
19 | # CONFIG_LOCALVERSION_AUTO is not set | ||
19 | CONFIG_SWAP=y | 20 | CONFIG_SWAP=y |
20 | CONFIG_SYSVIPC=y | 21 | CONFIG_SYSVIPC=y |
21 | CONFIG_POSIX_MQUEUE=y | 22 | CONFIG_POSIX_MQUEUE=y |
@@ -26,6 +27,7 @@ CONFIG_HOTPLUG=y | |||
26 | CONFIG_KOBJECT_UEVENT=y | 27 | CONFIG_KOBJECT_UEVENT=y |
27 | # CONFIG_IKCONFIG is not set | 28 | # CONFIG_IKCONFIG is not set |
28 | CONFIG_CPUSETS=y | 29 | CONFIG_CPUSETS=y |
30 | CONFIG_INITRAMFS_SOURCE="" | ||
29 | # CONFIG_EMBEDDED is not set | 31 | # CONFIG_EMBEDDED is not set |
30 | CONFIG_KALLSYMS=y | 32 | CONFIG_KALLSYMS=y |
31 | CONFIG_KALLSYMS_ALL=y | 33 | CONFIG_KALLSYMS_ALL=y |
@@ -56,11 +58,29 @@ CONFIG_KMOD=y | |||
56 | CONFIG_STOP_MACHINE=y | 58 | CONFIG_STOP_MACHINE=y |
57 | 59 | ||
58 | # | 60 | # |
61 | # Block layer | ||
62 | # | ||
63 | |||
64 | # | ||
65 | # IO Schedulers | ||
66 | # | ||
67 | CONFIG_IOSCHED_NOOP=y | ||
68 | CONFIG_IOSCHED_AS=y | ||
69 | CONFIG_IOSCHED_DEADLINE=y | ||
70 | CONFIG_IOSCHED_CFQ=y | ||
71 | CONFIG_DEFAULT_AS=y | ||
72 | # CONFIG_DEFAULT_DEADLINE is not set | ||
73 | # CONFIG_DEFAULT_CFQ is not set | ||
74 | # CONFIG_DEFAULT_NOOP is not set | ||
75 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
76 | |||
77 | # | ||
59 | # Processor type and features | 78 | # Processor type and features |
60 | # | 79 | # |
61 | CONFIG_IA64=y | 80 | CONFIG_IA64=y |
62 | CONFIG_64BIT=y | 81 | CONFIG_64BIT=y |
63 | CONFIG_MMU=y | 82 | CONFIG_MMU=y |
83 | CONFIG_SWIOTLB=y | ||
64 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 84 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
65 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 85 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
66 | CONFIG_TIME_INTERPOLATION=y | 86 | CONFIG_TIME_INTERPOLATION=y |
@@ -68,6 +88,7 @@ CONFIG_EFI=y | |||
68 | CONFIG_GENERIC_IOMAP=y | 88 | CONFIG_GENERIC_IOMAP=y |
69 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 89 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
70 | CONFIG_IA64_UNCACHED_ALLOCATOR=y | 90 | CONFIG_IA64_UNCACHED_ALLOCATOR=y |
91 | CONFIG_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 |
88 | CONFIG_HZ=250 | 109 | CONFIG_HZ=250 |
89 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 110 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
90 | CONFIG_NUMA=y | ||
91 | CONFIG_VIRTUAL_MEM_MAP=y | ||
92 | CONFIG_HOLES_IN_ZONE=y | ||
93 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
94 | # CONFIG_IA64_CYCLONE is not set | 111 | # CONFIG_IA64_CYCLONE is not set |
95 | CONFIG_IOSAPIC=y | 112 | CONFIG_IOSAPIC=y |
96 | CONFIG_IA64_SGI_SN_XP=m | 113 | CONFIG_IA64_SGI_SN_XP=m |
97 | CONFIG_FORCE_MAX_ZONEORDER=18 | 114 | CONFIG_FORCE_MAX_ZONEORDER=17 |
98 | CONFIG_SMP=y | 115 | CONFIG_SMP=y |
99 | CONFIG_NR_CPUS=512 | 116 | CONFIG_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 | |||
107 | CONFIG_DISCONTIGMEM=y | 124 | CONFIG_DISCONTIGMEM=y |
108 | CONFIG_FLAT_NODE_MEM_MAP=y | 125 | CONFIG_FLAT_NODE_MEM_MAP=y |
109 | CONFIG_NEED_MULTIPLE_NODES=y | 126 | CONFIG_NEED_MULTIPLE_NODES=y |
110 | CONFIG_HAVE_DEC_LOCK=y | 127 | # CONFIG_SPARSEMEM_STATIC is not set |
128 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
130 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
131 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
132 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
133 | CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y | ||
134 | CONFIG_NUMA=y | ||
135 | CONFIG_VIRTUAL_MEM_MAP=y | ||
136 | CONFIG_HOLES_IN_ZONE=y | ||
137 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
111 | CONFIG_IA32_SUPPORT=y | 138 | CONFIG_IA32_SUPPORT=y |
112 | CONFIG_COMPAT=y | 139 | CONFIG_COMPAT=y |
113 | CONFIG_IA64_MCA_RECOVERY=y | 140 | CONFIG_IA64_MCA_RECOVERY=y |
@@ -126,28 +153,35 @@ CONFIG_BINFMT_ELF=y | |||
126 | # Power management and ACPI | 153 | # Power management and ACPI |
127 | # | 154 | # |
128 | CONFIG_PM=y | 155 | CONFIG_PM=y |
129 | CONFIG_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 | # |
162 | CONFIG_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 |
137 | CONFIG_ACPI_NUMA=y | 166 | CONFIG_ACPI_NUMA=y |
167 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
138 | # CONFIG_ACPI_DEBUG is not set | 168 | # CONFIG_ACPI_DEBUG is not set |
139 | CONFIG_ACPI_POWER=y | 169 | CONFIG_ACPI_POWER=y |
140 | CONFIG_ACPI_SYSTEM=y | 170 | CONFIG_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 | # |
146 | CONFIG_PCI=y | 181 | CONFIG_PCI=y |
147 | CONFIG_PCI_DOMAINS=y | 182 | CONFIG_PCI_DOMAINS=y |
148 | # CONFIG_PCI_MSI is not set | 183 | # CONFIG_PCI_MSI is not set |
149 | CONFIG_PCI_LEGACY_PROC=y | 184 | CONFIG_PCI_LEGACY_PROC=y |
150 | CONFIG_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 |
194 | CONFIG_IP_TCPDIAG=y | 228 | CONFIG_INET_DIAG=m |
195 | # CONFIG_IP_TCPDIAG_IPV6 is not set | 229 | CONFIG_INET_TCP_DIAG=m |
196 | # CONFIG_TCP_CONG_ADVANCED is not set | 230 | # CONFIG_TCP_CONG_ADVANCED is not set |
197 | CONFIG_TCP_CONG_BIC=y | 231 | CONFIG_TCP_CONG_BIC=y |
198 | CONFIG_IPV6=m | 232 | CONFIG_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 | |||
275 | CONFIG_BLK_DEV_RAM_COUNT=16 | 323 | CONFIG_BLK_DEV_RAM_COUNT=16 |
276 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 324 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
277 | CONFIG_BLK_DEV_INITRD=y | 325 | CONFIG_BLK_DEV_INITRD=y |
278 | CONFIG_INITRAMFS_SOURCE="" | ||
279 | # CONFIG_CDROM_PKTCDVD is not set | 326 | # CONFIG_CDROM_PKTCDVD is not set |
280 | |||
281 | # | ||
282 | # IO Schedulers | ||
283 | # | ||
284 | CONFIG_IOSCHED_NOOP=y | ||
285 | CONFIG_IOSCHED_AS=y | ||
286 | CONFIG_IOSCHED_DEADLINE=y | ||
287 | CONFIG_IOSCHED_CFQ=y | ||
288 | CONFIG_ATA_OVER_ETH=m | 327 | CONFIG_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 | ||
352 | CONFIG_SCSI=y | 392 | CONFIG_SCSI=y |
353 | CONFIG_SCSI_PROC_FS=y | 393 | CONFIG_SCSI_PROC_FS=y |
354 | 394 | ||
@@ -375,11 +415,13 @@ CONFIG_SCSI_CONSTANTS=y | |||
375 | # | 415 | # |
376 | CONFIG_SCSI_SPI_ATTRS=y | 416 | CONFIG_SCSI_SPI_ATTRS=y |
377 | CONFIG_SCSI_FC_ATTRS=y | 417 | CONFIG_SCSI_FC_ATTRS=y |
378 | # CONFIG_SCSI_ISCSI_ATTRS is not set | 418 | CONFIG_SCSI_ISCSI_ATTRS=m |
419 | CONFIG_SCSI_SAS_ATTRS=y | ||
379 | 420 | ||
380 | # | 421 | # |
381 | # SCSI low-level drivers | 422 | # SCSI low-level drivers |
382 | # | 423 | # |
424 | CONFIG_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 | ||
392 | CONFIG_SCSI_SATA=y | 435 | CONFIG_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 |
413 | CONFIG_SCSI_QLOGIC_1280=y | 459 | CONFIG_SCSI_QLOGIC_1280=y |
414 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | ||
415 | CONFIG_SCSI_QLA2XXX=y | 460 | CONFIG_SCSI_QLA2XXX=y |
416 | # CONFIG_SCSI_QLA21XX is not set | 461 | # CONFIG_SCSI_QLA21XX is not set |
417 | CONFIG_SCSI_QLA22XX=y | 462 | CONFIG_SCSI_QLA22XX=y |
@@ -451,6 +496,7 @@ CONFIG_DM_MULTIPATH_EMC=m | |||
451 | CONFIG_FUSION=y | 496 | CONFIG_FUSION=y |
452 | CONFIG_FUSION_SPI=y | 497 | CONFIG_FUSION_SPI=y |
453 | CONFIG_FUSION_FC=y | 498 | CONFIG_FUSION_FC=y |
499 | CONFIG_FUSION_SAS=y | ||
454 | CONFIG_FUSION_MAX_SGE=128 | 500 | CONFIG_FUSION_MAX_SGE=128 |
455 | CONFIG_FUSION_CTL=m | 501 | CONFIG_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 |
498 | CONFIG_TIGON3=y | 549 | CONFIG_TIGON3=y |
@@ -501,10 +552,10 @@ CONFIG_TIGON3=y | |||
501 | # | 552 | # |
502 | # Ethernet (10000 Mbit) | 553 | # Ethernet (10000 Mbit) |
503 | # | 554 | # |
555 | CONFIG_CHELSIO_T1=m | ||
504 | # CONFIG_IXGB is not set | 556 | # CONFIG_IXGB is not set |
505 | CONFIG_S2IO=m | 557 | CONFIG_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 | |||
583 | CONFIG_SERIAL_NONSTANDARD=y | 634 | CONFIG_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 | 684 | CONFIG_AGP=y |
685 | CONFIG_AGP_SGI_TIOCA=y | ||
633 | # CONFIG_DRM is not set | 686 | # CONFIG_DRM is not set |
634 | CONFIG_RAW_DRIVER=m | 687 | CONFIG_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 | # |
826 | CONFIG_INFINIBAND=m | 889 | CONFIG_INFINIBAND=m |
827 | CONFIG_INFINIBAND_USER_VERBS=m | 890 | # CONFIG_INFINIBAND_USER_MAD is not set |
891 | CONFIG_INFINIBAND_USER_ACCESS=m | ||
828 | CONFIG_INFINIBAND_MTHCA=m | 892 | CONFIG_INFINIBAND_MTHCA=m |
829 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | 893 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set |
830 | CONFIG_INFINIBAND_IPOIB=m | 894 | CONFIG_INFINIBAND_IPOIB=m |
831 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | 895 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set |
896 | CONFIG_INFINIBAND_SRP=m | ||
832 | 897 | ||
833 | # | 898 | # |
834 | # SN Devices | 899 | # SN Devices |
@@ -858,16 +923,12 @@ CONFIG_REISERFS_FS_POSIX_ACL=y | |||
858 | CONFIG_REISERFS_FS_SECURITY=y | 923 | CONFIG_REISERFS_FS_SECURITY=y |
859 | # CONFIG_JFS_FS is not set | 924 | # CONFIG_JFS_FS is not set |
860 | CONFIG_FS_POSIX_ACL=y | 925 | CONFIG_FS_POSIX_ACL=y |
861 | |||
862 | # | ||
863 | # XFS support | ||
864 | # | ||
865 | CONFIG_XFS_FS=y | 926 | CONFIG_XFS_FS=y |
866 | CONFIG_XFS_EXPORT=y | 927 | CONFIG_XFS_EXPORT=y |
867 | CONFIG_XFS_RT=y | ||
868 | CONFIG_XFS_QUOTA=y | 928 | CONFIG_XFS_QUOTA=y |
869 | # CONFIG_XFS_SECURITY is not set | 929 | # CONFIG_XFS_SECURITY is not set |
870 | CONFIG_XFS_POSIX_ACL=y | 930 | CONFIG_XFS_POSIX_ACL=y |
931 | CONFIG_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 |
873 | CONFIG_INOTIFY=y | 934 | CONFIG_INOTIFY=y |
@@ -878,6 +939,7 @@ CONFIG_QUOTACTL=y | |||
878 | CONFIG_DNOTIFY=y | 939 | CONFIG_DNOTIFY=y |
879 | CONFIG_AUTOFS_FS=m | 940 | CONFIG_AUTOFS_FS=m |
880 | CONFIG_AUTOFS4_FS=m | 941 | CONFIG_AUTOFS4_FS=m |
942 | CONFIG_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" | |||
904 | CONFIG_PROC_FS=y | 966 | CONFIG_PROC_FS=y |
905 | CONFIG_PROC_KCORE=y | 967 | CONFIG_PROC_KCORE=y |
906 | CONFIG_SYSFS=y | 968 | CONFIG_SYSFS=y |
907 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
908 | CONFIG_TMPFS=y | 969 | CONFIG_TMPFS=y |
909 | CONFIG_TMPFS_XATTR=y | ||
910 | CONFIG_TMPFS_SECURITY=y | ||
911 | CONFIG_HUGETLBFS=y | 970 | CONFIG_HUGETLBFS=y |
912 | CONFIG_HUGETLB_PAGE=y | 971 | CONFIG_HUGETLB_PAGE=y |
913 | CONFIG_RAMFS=y | 972 | CONFIG_RAMFS=y |
973 | CONFIG_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 |
1092 | CONFIG_CRC16=m | ||
1031 | CONFIG_CRC32=y | 1093 | CONFIG_CRC32=y |
1032 | # CONFIG_LIBCRC32C is not set | 1094 | CONFIG_LIBCRC32C=m |
1033 | CONFIG_ZLIB_INFLATE=m | 1095 | CONFIG_ZLIB_INFLATE=m |
1034 | CONFIG_ZLIB_DEFLATE=m | 1096 | CONFIG_ZLIB_DEFLATE=m |
1035 | CONFIG_GENERIC_ALLOCATOR=y | 1097 | CONFIG_GENERIC_ALLOCATOR=y |
1036 | CONFIG_GENERIC_HARDIRQS=y | 1098 | CONFIG_GENERIC_HARDIRQS=y |
1037 | CONFIG_GENERIC_IRQ_PROBE=y | 1099 | CONFIG_GENERIC_IRQ_PROBE=y |
1100 | CONFIG_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 | |||
1048 | CONFIG_DEBUG_KERNEL=y | 1112 | CONFIG_DEBUG_KERNEL=y |
1049 | CONFIG_MAGIC_SYSRQ=y | 1113 | CONFIG_MAGIC_SYSRQ=y |
1050 | CONFIG_LOG_BUF_SHIFT=20 | 1114 | CONFIG_LOG_BUF_SHIFT=20 |
1115 | CONFIG_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 |
1053 | CONFIG_DEBUG_PREEMPT=y | 1118 | CONFIG_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 |
1057 | CONFIG_DEBUG_INFO=y | 1122 | CONFIG_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 | ||
1060 | CONFIG_IA64_GRANULE_16MB=y | 1126 | CONFIG_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 |
1098 | CONFIG_CRYPTO_DEFLATE=m | 1164 | CONFIG_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 | 1166 | CONFIG_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 | |||
59 | CONFIG_STOP_MACHINE=y | 59 | CONFIG_STOP_MACHINE=y |
60 | 60 | ||
61 | # | 61 | # |
62 | # Block layer | ||
63 | # | ||
64 | |||
65 | # | ||
66 | # IO Schedulers | ||
67 | # | ||
68 | CONFIG_IOSCHED_NOOP=y | ||
69 | CONFIG_IOSCHED_AS=y | ||
70 | CONFIG_IOSCHED_DEADLINE=y | ||
71 | CONFIG_IOSCHED_CFQ=y | ||
72 | CONFIG_DEFAULT_AS=y | ||
73 | # CONFIG_DEFAULT_DEADLINE is not set | ||
74 | # CONFIG_DEFAULT_CFQ is not set | ||
75 | # CONFIG_DEFAULT_NOOP is not set | ||
76 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
77 | |||
78 | # | ||
62 | # Processor type and features | 79 | # Processor type and features |
63 | # | 80 | # |
64 | CONFIG_IA64=y | 81 | CONFIG_IA64=y |
65 | CONFIG_64BIT=y | 82 | CONFIG_64BIT=y |
66 | CONFIG_MMU=y | 83 | CONFIG_MMU=y |
84 | CONFIG_SWIOTLB=y | ||
67 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 85 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
68 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 86 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
69 | CONFIG_TIME_INTERPOLATION=y | 87 | CONFIG_TIME_INTERPOLATION=y |
70 | CONFIG_EFI=y | 88 | CONFIG_EFI=y |
71 | CONFIG_GENERIC_IOMAP=y | 89 | CONFIG_GENERIC_IOMAP=y |
72 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 90 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
91 | CONFIG_ZONE_DMA_IS_DMA32=y | ||
73 | # CONFIG_IA64_GENERIC is not set | 92 | # CONFIG_IA64_GENERIC is not set |
74 | CONFIG_IA64_DIG=y | 93 | CONFIG_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 |
83 | CONFIG_IA64_PAGE_SIZE_16KB=y | 102 | CONFIG_IA64_PAGE_SIZE_16KB=y |
84 | # CONFIG_IA64_PAGE_SIZE_64KB is not set | 103 | # CONFIG_IA64_PAGE_SIZE_64KB is not set |
104 | CONFIG_PGTABLE_3=y | ||
105 | # CONFIG_PGTABLE_4 is not set | ||
85 | # CONFIG_HZ_100 is not set | 106 | # CONFIG_HZ_100 is not set |
86 | CONFIG_HZ_250=y | 107 | CONFIG_HZ_250=y |
87 | # CONFIG_HZ_1000 is not set | 108 | # CONFIG_HZ_1000 is not set |
88 | CONFIG_HZ=250 | 109 | CONFIG_HZ=250 |
89 | CONFIG_IA64_L1_CACHE_SHIFT=7 | 110 | CONFIG_IA64_L1_CACHE_SHIFT=7 |
90 | # CONFIG_NUMA is not set | ||
91 | CONFIG_VIRTUAL_MEM_MAP=y | ||
92 | CONFIG_HOLES_IN_ZONE=y | ||
93 | CONFIG_IA64_CYCLONE=y | 111 | CONFIG_IA64_CYCLONE=y |
94 | CONFIG_IOSAPIC=y | 112 | CONFIG_IOSAPIC=y |
95 | # CONFIG_IA64_SGI_SN_XP is not set | 113 | CONFIG_FORCE_MAX_ZONEORDER=17 |
96 | CONFIG_FORCE_MAX_ZONEORDER=18 | ||
97 | CONFIG_SMP=y | 114 | CONFIG_SMP=y |
98 | CONFIG_NR_CPUS=4 | 115 | CONFIG_NR_CPUS=4 |
99 | CONFIG_HOTPLUG_CPU=y | 116 | CONFIG_HOTPLUG_CPU=y |
@@ -106,7 +123,13 @@ CONFIG_FLATMEM_MANUAL=y | |||
106 | CONFIG_FLATMEM=y | 123 | CONFIG_FLATMEM=y |
107 | CONFIG_FLAT_NODE_MEM_MAP=y | 124 | CONFIG_FLAT_NODE_MEM_MAP=y |
108 | # CONFIG_SPARSEMEM_STATIC is not set | 125 | # CONFIG_SPARSEMEM_STATIC is not set |
109 | CONFIG_HAVE_DEC_LOCK=y | 126 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
127 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
128 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | ||
129 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
130 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
131 | CONFIG_VIRTUAL_MEM_MAP=y | ||
132 | CONFIG_HOLES_IN_ZONE=y | ||
110 | CONFIG_IA32_SUPPORT=y | 133 | CONFIG_IA32_SUPPORT=y |
111 | CONFIG_COMPAT=y | 134 | CONFIG_COMPAT=y |
112 | CONFIG_IA64_MCA_RECOVERY=y | 135 | CONFIG_IA64_MCA_RECOVERY=y |
@@ -118,7 +141,6 @@ CONFIG_IA64_PALINFO=y | |||
118 | # | 141 | # |
119 | CONFIG_EFI_VARS=y | 142 | CONFIG_EFI_VARS=y |
120 | CONFIG_EFI_PCDP=y | 143 | CONFIG_EFI_PCDP=y |
121 | # CONFIG_DELL_RBU is not set | ||
122 | CONFIG_BINFMT_ELF=y | 144 | CONFIG_BINFMT_ELF=y |
123 | CONFIG_BINFMT_MISC=m | 145 | CONFIG_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 | # |
128 | CONFIG_PM=y | 150 | CONFIG_PM=y |
151 | CONFIG_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 | |||
295 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 320 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
296 | CONFIG_BLK_DEV_INITRD=y | 321 | CONFIG_BLK_DEV_INITRD=y |
297 | # CONFIG_CDROM_PKTCDVD is not set | 322 | # CONFIG_CDROM_PKTCDVD is not set |
298 | |||
299 | # | ||
300 | # IO Schedulers | ||
301 | # | ||
302 | CONFIG_IOSCHED_NOOP=y | ||
303 | CONFIG_IOSCHED_AS=y | ||
304 | CONFIG_IOSCHED_DEADLINE=y | ||
305 | CONFIG_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 | |||
424 | CONFIG_SCSI_QLOGIC_FC=y | 443 | CONFIG_SCSI_QLOGIC_FC=y |
425 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set | 444 | # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set |
426 | CONFIG_SCSI_QLOGIC_1280=y | 445 | CONFIG_SCSI_QLOGIC_1280=y |
427 | # CONFIG_SCSI_QLOGIC_1280_1040 is not set | ||
428 | CONFIG_SCSI_QLA2XXX=y | 446 | CONFIG_SCSI_QLA2XXX=y |
429 | CONFIG_SCSI_QLA21XX=m | 447 | CONFIG_SCSI_QLA21XX=m |
430 | CONFIG_SCSI_QLA22XX=m | 448 | CONFIG_SCSI_QLA22XX=m |
@@ -463,6 +481,7 @@ CONFIG_DM_ZERO=m | |||
463 | CONFIG_FUSION=y | 481 | CONFIG_FUSION=y |
464 | CONFIG_FUSION_SPI=y | 482 | CONFIG_FUSION_SPI=y |
465 | CONFIG_FUSION_FC=y | 483 | CONFIG_FUSION_FC=y |
484 | # CONFIG_FUSION_SAS is not set | ||
466 | CONFIG_FUSION_MAX_SGE=128 | 485 | CONFIG_FUSION_MAX_SGE=128 |
467 | CONFIG_FUSION_CTL=y | 486 | CONFIG_FUSION_CTL=y |
468 | 487 | ||
@@ -503,6 +522,7 @@ CONFIG_NET_ETHERNET=y | |||
503 | CONFIG_MII=m | 522 | CONFIG_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 | # |
822 | CONFIG_USB_STORAGE=m | 846 | CONFIG_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 | |||
1123 | CONFIG_GENERIC_PENDING_IRQ=y | 1147 | CONFIG_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 | ||
1146 | CONFIG_IA64_GRANULE_16MB=y | 1172 | CONFIG_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 | ||
268 | static unsigned long | 266 | static 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 | */ | ||
153 | inline struct pcidev_info * | ||
154 | sn_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 | */ | ||
257 | static void | ||
258 | sn_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 | |||
232 | void sn_pci_unfixup_slot(struct pci_dev *dev) | 294 | void 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 | */ |
247 | void sn_pci_fixup_slot(struct pci_dev *dev) | 309 | void 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 | ||
422 | error_return: | 531 | error_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 | ||
41 | 1: | 41 | 1: |
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 | ||
46 | 5: ld8.acq scr1=[piowc];; // Wait for PIOs to complete. | 50 | 5: 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 | ||
229 | config NR_CPUS | 229 | config 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; | |||
102 | dev_t boot_dev; | 102 | dev_t boot_dev; |
103 | u64 ppc64_pft_size; | 103 | u64 ppc64_pft_size; |
104 | 104 | ||
105 | struct 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 | */ | ||
108 | struct ppc64_caches ppc64_caches = { | ||
109 | .dline_size = 0x80, | ||
110 | .log_dline_size = 7, | ||
111 | .iline_size = 0x80, | ||
112 | .log_iline_size = 7 | ||
113 | }; | ||
106 | EXPORT_SYMBOL_GPL(ppc64_caches); | 114 | EXPORT_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 | ||
151 | struct slb_flush_info { | ||
152 | struct mm_struct *mm; | ||
153 | u16 newareas; | ||
154 | }; | ||
155 | |||
151 | static void flush_low_segments(void *parm) | 156 | static 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 | ||
170 | static void flush_high_segments(void *parm) | 182 | static 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) | |||
229 | static int open_low_hpage_areas(struct mm_struct *mm, u16 newareas) | 249 | static 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 | ||
258 | static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas) | 279 | static 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 | */ | ||
670 | static 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 | |||
642 | int hash_huge_page(struct mm_struct *mm, unsigned long access, | 694 | int 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 | ||
131 | static inline void map_cpu_to_node(int cpu, int node) | 131 | static 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 | ||
769 | config PPC_CHRP | 769 | config 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 | ||
776 | config PPC_PMAC | 776 | config 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 | ||
787 | config PPC_PREP | 787 | config 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-) |
35 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) | 35 | INIT_Y := $(patsubst %/, %/built-in.o, $(init-y)) |
36 | CORE_Y := $(core-y) | 36 | CORE_Y := $(core-y) |
37 | CORE_Y += kernel/ mm/ fs/ ipc/ security/ crypto/ | 37 | CORE_Y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ |
38 | CORE_Y := $(patsubst %/, %/built-in.o, $(CORE_Y)) | 38 | CORE_Y := $(patsubst %/, %/built-in.o, $(CORE_Y)) |
39 | DRIVERS_Y := $(patsubst %/, %/built-in.o, $(drivers-y)) | 39 | DRIVERS_Y := $(patsubst %/, %/built-in.o, $(drivers-y)) |
40 | NET_Y := $(patsubst %/, %/built-in.o, $(net-y)) | 40 | NET_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 | ||
69 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | ||
70 | /* Atomic operations are already serializing */ | 69 | /* Atomic operations are already serializing */ |
71 | void atomic_set(atomic_t *v, int i) | 70 | void 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; | |||
59 | unsigned int cpu_khz; /* TSC clocks / usec, not used here */ | 59 | unsigned int cpu_khz; /* TSC clocks / usec, not used here */ |
60 | static unsigned long hpet_period; /* fsecs / HPET clock */ | 60 | static unsigned long hpet_period; /* fsecs / HPET clock */ |
61 | unsigned long hpet_tick; /* HPET clocks / interrupt */ | 61 | unsigned long hpet_tick; /* HPET clocks / interrupt */ |
62 | static int hpet_use_timer; | 62 | static int hpet_use_timer; /* Use counter of hpet for time keeping, otherwise PIT */ |
63 | unsigned long vxtime_hz = PIT_TICK_RATE; | 63 | unsigned long vxtime_hz = PIT_TICK_RATE; |
64 | int report_lost_ticks; /* command line option */ | 64 | int report_lost_ticks; /* command line option */ |
65 | unsigned long long monotonic_base; | 65 | unsigned 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 | */ | ||
250 | void iounmap(volatile void __iomem *addr) | 256 | void 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 | ||
16 | static DECLARE_BITMAP(fallback_slots, 32); | ||
17 | |||
15 | /* Static virtual mapping of the MMCONFIG aperture */ | 18 | /* Static virtual mapping of the MMCONFIG aperture */ |
16 | struct mmcfg_virt { | 19 | struct 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 | }; |
20 | static struct mmcfg_virt *pci_mmcfg_virt; | 23 | static struct mmcfg_virt *pci_mmcfg_virt; |
21 | 24 | ||
22 | static char *get_virt(unsigned int seg, int bus) | 25 | static 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 | ||
44 | static inline char *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) | 46 | static 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 | ||
50 | static int pci_mmcfg_read(unsigned int seg, unsigned int bus, | 57 | static 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, | |||
73 | static int pci_mmcfg_write(unsigned int seg, unsigned int bus, | 85 | static 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 */ | ||
125 | static __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 | |||
101 | static int __init pci_mmcfg_init(void) | 142 | static 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 | ||