diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-13 03:34:07 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-13 03:34:07 -0500 |
commit | e9c4ffb11f0b19005b5b9dc8481687a3637e5887 (patch) | |
tree | 7007f2ff846b9b057c5cd7c25e8b82e49f9b4b63 /arch | |
parent | 4bcf349a0f90d1e69eb35c6df0fa285c886c1cd6 (diff) | |
parent | 071a0bc2ceace31266836801510879407a3701fa (diff) |
Merge branch 'linus' into perfcounters/core
Conflicts:
arch/x86/kernel/acpi/boot.c
Diffstat (limited to 'arch')
69 files changed, 431 insertions, 326 deletions
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 440dc62cdc3a..598ca61e7bca 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
@@ -13,8 +13,8 @@ | |||
13 | #include <asm/cacheflush.h> | 13 | #include <asm/cacheflush.h> |
14 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
15 | 15 | ||
16 | const extern unsigned char relocate_new_kernel[]; | 16 | extern const unsigned char relocate_new_kernel[]; |
17 | const extern unsigned int relocate_new_kernel_size; | 17 | extern const unsigned int relocate_new_kernel_size; |
18 | 18 | ||
19 | extern void setup_mm_for_reboot(char mode); | 19 | extern void setup_mm_for_reboot(char mode); |
20 | 20 | ||
diff --git a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c index b1514fb20d3a..7de17fc5d54b 100644 --- a/arch/arm/mach-pxa/dma.c +++ b/arch/arm/mach-pxa/dma.c | |||
@@ -121,20 +121,22 @@ int __init pxa_init_dma(int num_ch) | |||
121 | if (dma_channels == NULL) | 121 | if (dma_channels == NULL) |
122 | return -ENOMEM; | 122 | return -ENOMEM; |
123 | 123 | ||
124 | ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL); | ||
125 | if (ret) { | ||
126 | printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n"); | ||
127 | kfree(dma_channels); | ||
128 | return ret; | ||
129 | } | ||
130 | |||
131 | /* dma channel priorities on pxa2xx processors: | 124 | /* dma channel priorities on pxa2xx processors: |
132 | * ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH | 125 | * ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH |
133 | * ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM | 126 | * ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM |
134 | * ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW | 127 | * ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW |
135 | */ | 128 | */ |
136 | for (i = 0; i < num_ch; i++) | 129 | for (i = 0; i < num_ch; i++) { |
130 | DCSR(i) = 0; | ||
137 | dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW); | 131 | dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW); |
132 | } | ||
133 | |||
134 | ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL); | ||
135 | if (ret) { | ||
136 | printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n"); | ||
137 | kfree(dma_channels); | ||
138 | return ret; | ||
139 | } | ||
138 | 140 | ||
139 | num_dma_channels = num_ch; | 141 | num_dma_channels = num_ch; |
140 | return 0; | 142 | return 0; |
diff --git a/arch/arm/mach-pxa/include/mach/regs-ac97.h b/arch/arm/mach-pxa/include/mach/regs-ac97.h index e41b9d202b8c..b8d14bd9ae59 100644 --- a/arch/arm/mach-pxa/include/mach/regs-ac97.h +++ b/arch/arm/mach-pxa/include/mach/regs-ac97.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_ARCH_REGS_AC97_H | 1 | #ifndef __ASM_ARCH_REGS_AC97_H |
2 | #define __ASM_ARCH_REGS_AC97_H | 2 | #define __ASM_ARCH_REGS_AC97_H |
3 | 3 | ||
4 | #include <mach/hardware.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * AC97 Controller registers | 7 | * AC97 Controller registers |
6 | */ | 8 | */ |
diff --git a/arch/arm/mach-pxa/include/mach/regs-ssp.h b/arch/arm/mach-pxa/include/mach/regs-ssp.h index 3c04cde2cf1f..cf31986f6f05 100644 --- a/arch/arm/mach-pxa/include/mach/regs-ssp.h +++ b/arch/arm/mach-pxa/include/mach/regs-ssp.h | |||
@@ -41,6 +41,9 @@ | |||
41 | #elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) | 41 | #elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) |
42 | #define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */ | 42 | #define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */ |
43 | #define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */ | 43 | #define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */ |
44 | #endif | ||
45 | |||
46 | #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) | ||
44 | #define SSCR0_EDSS (1 << 20) /* Extended data size select */ | 47 | #define SSCR0_EDSS (1 << 20) /* Extended data size select */ |
45 | #define SSCR0_NCS (1 << 21) /* Network clock select */ | 48 | #define SSCR0_NCS (1 << 21) /* Network clock select */ |
46 | #define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */ | 49 | #define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */ |
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index f735e58e6669..83fb609b6eb7 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c | |||
@@ -88,13 +88,13 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = { | |||
88 | static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0); | 88 | static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0); |
89 | 89 | ||
90 | static struct clk_lookup common_clkregs[] = { | 90 | static struct clk_lookup common_clkregs[] = { |
91 | INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", "NANDCLK"), | 91 | INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL), |
92 | }; | 92 | }; |
93 | 93 | ||
94 | static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0); | 94 | static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0); |
95 | 95 | ||
96 | static struct clk_lookup pxa310_clkregs[] = { | 96 | static struct clk_lookup pxa310_clkregs[] = { |
97 | INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", "MMCCLK"), | 97 | INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", NULL), |
98 | }; | 98 | }; |
99 | 99 | ||
100 | static int __init pxa300_init(void) | 100 | static int __init pxa300_init(void) |
diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c index effe408c186f..36f066196fa2 100644 --- a/arch/arm/mach-pxa/pxa320.c +++ b/arch/arm/mach-pxa/pxa320.c | |||
@@ -83,7 +83,7 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = { | |||
83 | static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0); | 83 | static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0); |
84 | 84 | ||
85 | static struct clk_lookup pxa320_clkregs[] = { | 85 | static struct clk_lookup pxa320_clkregs[] = { |
86 | INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", "NANDCLK"), | 86 | INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL), |
87 | }; | 87 | }; |
88 | 88 | ||
89 | static int __init pxa320_init(void) | 89 | static int __init pxa320_init(void) |
diff --git a/arch/frv/mm/dma-alloc.c b/arch/frv/mm/dma-alloc.c index dc6522c464d4..44840e73e907 100644 --- a/arch/frv/mm/dma-alloc.c +++ b/arch/frv/mm/dma-alloc.c | |||
@@ -36,10 +36,10 @@ | |||
36 | #include <linux/vmalloc.h> | 36 | #include <linux/vmalloc.h> |
37 | #include <linux/init.h> | 37 | #include <linux/init.h> |
38 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
39 | #include <linux/hardirq.h> | ||
39 | 40 | ||
40 | #include <asm/pgalloc.h> | 41 | #include <asm/pgalloc.h> |
41 | #include <asm/io.h> | 42 | #include <asm/io.h> |
42 | #include <asm/hardirq.h> | ||
43 | #include <asm/mmu_context.h> | 43 | #include <asm/mmu_context.h> |
44 | #include <asm/pgtable.h> | 44 | #include <asm/pgtable.h> |
45 | #include <asm/mmu.h> | 45 | #include <asm/mmu.h> |
diff --git a/arch/mips/include/asm/spinlock.h b/arch/mips/include/asm/spinlock.h index 1a1f320c30d8..0884947ebe27 100644 --- a/arch/mips/include/asm/spinlock.h +++ b/arch/mips/include/asm/spinlock.h | |||
@@ -51,6 +51,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock) | |||
51 | 51 | ||
52 | return (((counters >> 14) - counters) & 0x1fff) > 1; | 52 | return (((counters >> 14) - counters) & 0x1fff) > 1; |
53 | } | 53 | } |
54 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
54 | 55 | ||
55 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 56 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
56 | { | 57 | { |
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts index 909a89cab9ac..3ebf7ec0484c 100644 --- a/arch/powerpc/boot/dts/mpc8313erdb.dts +++ b/arch/powerpc/boot/dts/mpc8313erdb.dts | |||
@@ -191,7 +191,8 @@ | |||
191 | interrupts = <37 0x8 36 0x8 35 0x8>; | 191 | interrupts = <37 0x8 36 0x8 35 0x8>; |
192 | interrupt-parent = <&ipic>; | 192 | interrupt-parent = <&ipic>; |
193 | tbi-handle = < &tbi0 >; | 193 | tbi-handle = < &tbi0 >; |
194 | phy-handle = < &phy1 >; | 194 | /* Vitesse 7385 isn't on the MDIO bus */ |
195 | fixed-link = <1 1 1000 0 0>; | ||
195 | fsl,magic-packet; | 196 | fsl,magic-packet; |
196 | 197 | ||
197 | mdio@24520 { | 198 | mdio@24520 { |
@@ -199,12 +200,6 @@ | |||
199 | #size-cells = <0>; | 200 | #size-cells = <0>; |
200 | compatible = "fsl,gianfar-mdio"; | 201 | compatible = "fsl,gianfar-mdio"; |
201 | reg = <0x24520 0x20>; | 202 | reg = <0x24520 0x20>; |
202 | phy1: ethernet-phy@1 { | ||
203 | interrupt-parent = <&ipic>; | ||
204 | interrupts = <19 0x8>; | ||
205 | reg = <0x1>; | ||
206 | device_type = "ethernet-phy"; | ||
207 | }; | ||
208 | phy4: ethernet-phy@4 { | 203 | phy4: ethernet-phy@4 { |
209 | interrupt-parent = <&ipic>; | 204 | interrupt-parent = <&ipic>; |
210 | interrupts = <20 0x8>; | 205 | interrupts = <20 0x8>; |
@@ -219,6 +214,8 @@ | |||
219 | }; | 214 | }; |
220 | 215 | ||
221 | enet1: ethernet@25000 { | 216 | enet1: ethernet@25000 { |
217 | #address-cells = <1>; | ||
218 | #size-cells = <1>; | ||
222 | cell-index = <1>; | 219 | cell-index = <1>; |
223 | device_type = "network"; | 220 | device_type = "network"; |
224 | model = "eTSEC"; | 221 | model = "eTSEC"; |
diff --git a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig index 9e47ae957e2e..409d017621a8 100644 --- a/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig +++ b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig | |||
@@ -651,7 +651,7 @@ CONFIG_CICADA_PHY=y | |||
651 | # CONFIG_NATIONAL_PHY is not set | 651 | # CONFIG_NATIONAL_PHY is not set |
652 | # CONFIG_STE10XP is not set | 652 | # CONFIG_STE10XP is not set |
653 | # CONFIG_LSI_ET1011C_PHY is not set | 653 | # CONFIG_LSI_ET1011C_PHY is not set |
654 | # CONFIG_FIXED_PHY is not set | 654 | CONFIG_FIXED_PHY=y |
655 | # CONFIG_MDIO_BITBANG is not set | 655 | # CONFIG_MDIO_BITBANG is not set |
656 | CONFIG_NET_ETHERNET=y | 656 | CONFIG_NET_ETHERNET=y |
657 | CONFIG_MII=y | 657 | CONFIG_MII=y |
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index 5355244c99ff..60c60ccf5e3c 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c | |||
@@ -195,8 +195,9 @@ __ftrace_make_nop(struct module *mod, | |||
195 | return -EINVAL; | 195 | return -EINVAL; |
196 | } | 196 | } |
197 | 197 | ||
198 | offset = (unsigned)((unsigned short)jmp[0]) << 16 | | 198 | /* The bottom half is signed extended */ |
199 | (unsigned)((unsigned short)jmp[1]); | 199 | offset = ((unsigned)((unsigned short)jmp[0]) << 16) + |
200 | (int)((short)jmp[1]); | ||
200 | 201 | ||
201 | DEBUGP(" %x ", offset); | 202 | DEBUGP(" %x ", offset); |
202 | 203 | ||
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 19b12d2cbb4b..0f4181272311 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -561,8 +561,21 @@ int pci_mmap_legacy_page_range(struct pci_bus *bus, | |||
561 | (unsigned long long)(offset + size - 1)); | 561 | (unsigned long long)(offset + size - 1)); |
562 | 562 | ||
563 | if (mmap_state == pci_mmap_mem) { | 563 | if (mmap_state == pci_mmap_mem) { |
564 | if ((offset + size) > hose->isa_mem_size) | 564 | /* Hack alert ! |
565 | return -ENXIO; | 565 | * |
566 | * Because X is lame and can fail starting if it gets an error trying | ||
567 | * to mmap legacy_mem (instead of just moving on without legacy memory | ||
568 | * access) we fake it here by giving it anonymous memory, effectively | ||
569 | * behaving just like /dev/zero | ||
570 | */ | ||
571 | if ((offset + size) > hose->isa_mem_size) { | ||
572 | printk(KERN_DEBUG | ||
573 | "Process %s (pid:%d) mapped non-existing PCI legacy memory for 0%04x:%02x\n", | ||
574 | current->comm, current->pid, pci_domain_nr(bus), bus->number); | ||
575 | if (vma->vm_flags & VM_SHARED) | ||
576 | return shmem_zero_setup(vma); | ||
577 | return 0; | ||
578 | } | ||
566 | offset += hose->isa_mem_phys; | 579 | offset += hose->isa_mem_phys; |
567 | } else { | 580 | } else { |
568 | unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; | 581 | unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; |
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index 4aae0c387645..13b7d54f185b 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c | |||
@@ -172,6 +172,8 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) | |||
172 | } | 172 | } |
173 | break; | 173 | break; |
174 | case 0x378: /* orx */ | 174 | case 0x378: /* orx */ |
175 | if (instr & 1) | ||
176 | break; | ||
175 | rs = (instr >> 21) & 0x1f; | 177 | rs = (instr >> 21) & 0x1f; |
176 | rb = (instr >> 11) & 0x1f; | 178 | rb = (instr >> 11) & 0x1f; |
177 | if (rs == rb) { /* mr */ | 179 | if (rs == rb) { /* mr */ |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index 1971e4ee3d6e..ea6e41e39d9f 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
@@ -73,7 +73,7 @@ extern unsigned int tlbcam_index; | |||
73 | /* | 73 | /* |
74 | * Return PA for this VA if it is mapped by a CAM, or 0 | 74 | * Return PA for this VA if it is mapped by a CAM, or 0 |
75 | */ | 75 | */ |
76 | unsigned long v_mapped_by_tlbcam(unsigned long va) | 76 | phys_addr_t v_mapped_by_tlbcam(unsigned long va) |
77 | { | 77 | { |
78 | int b; | 78 | int b; |
79 | for (b = 0; b < tlbcam_index; ++b) | 79 | for (b = 0; b < tlbcam_index; ++b) |
@@ -85,7 +85,7 @@ unsigned long v_mapped_by_tlbcam(unsigned long va) | |||
85 | /* | 85 | /* |
86 | * Return VA for a given PA or 0 if not mapped | 86 | * Return VA for a given PA or 0 if not mapped |
87 | */ | 87 | */ |
88 | unsigned long p_mapped_by_tlbcam(unsigned long pa) | 88 | unsigned long p_mapped_by_tlbcam(phys_addr_t pa) |
89 | { | 89 | { |
90 | int b; | 90 | int b; |
91 | for (b = 0; b < tlbcam_index; ++b) | 91 | for (b = 0; b < tlbcam_index; ++b) |
diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S index 67850ec9feb3..14af8cedab70 100644 --- a/arch/powerpc/mm/hash_low_32.S +++ b/arch/powerpc/mm/hash_low_32.S | |||
@@ -320,7 +320,7 @@ _GLOBAL(create_hpte) | |||
320 | and r8,r8,r0 /* writable if _RW & _DIRTY */ | 320 | and r8,r8,r0 /* writable if _RW & _DIRTY */ |
321 | rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */ | 321 | rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */ |
322 | rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */ | 322 | rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */ |
323 | ori r8,r8,0xe14 /* clear out reserved bits and M */ | 323 | ori r8,r8,0xe04 /* clear out reserved bits */ |
324 | andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */ | 324 | andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */ |
325 | BEGIN_FTR_SECTION | 325 | BEGIN_FTR_SECTION |
326 | rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */ | 326 | rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */ |
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 22972cd83cc9..58bcaeba728d 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -61,8 +61,8 @@ void setbat(int index, unsigned long virt, phys_addr_t phys, | |||
61 | 61 | ||
62 | #ifdef HAVE_TLBCAM | 62 | #ifdef HAVE_TLBCAM |
63 | extern unsigned int tlbcam_index; | 63 | extern unsigned int tlbcam_index; |
64 | extern unsigned long v_mapped_by_tlbcam(unsigned long va); | 64 | extern phys_addr_t v_mapped_by_tlbcam(unsigned long va); |
65 | extern unsigned long p_mapped_by_tlbcam(unsigned long pa); | 65 | extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa); |
66 | #else /* !HAVE_TLBCAM */ | 66 | #else /* !HAVE_TLBCAM */ |
67 | #define v_mapped_by_tlbcam(x) (0UL) | 67 | #define v_mapped_by_tlbcam(x) (0UL) |
68 | #define p_mapped_by_tlbcam(x) (0UL) | 68 | #define p_mapped_by_tlbcam(x) (0UL) |
diff --git a/arch/powerpc/oprofile/cell/spu_profiler.c b/arch/powerpc/oprofile/cell/spu_profiler.c index 9305ddaac512..b129d007e7fe 100644 --- a/arch/powerpc/oprofile/cell/spu_profiler.c +++ b/arch/powerpc/oprofile/cell/spu_profiler.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
18 | #include <asm/cell-pmu.h> | 18 | #include <asm/cell-pmu.h> |
19 | #include <asm/time.h> | ||
19 | #include "pr_util.h" | 20 | #include "pr_util.h" |
20 | 21 | ||
21 | #define SCALE_SHIFT 14 | 22 | #define SCALE_SHIFT 14 |
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c index 9876d7e072f4..ddf0bdc0fc8b 100644 --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | |||
@@ -186,7 +186,7 @@ out_unmap_regs: | |||
186 | iounmap(priv->regs); | 186 | iounmap(priv->regs); |
187 | out_free_bootmem: | 187 | out_free_bootmem: |
188 | free_bootmem((unsigned long)priv, | 188 | free_bootmem((unsigned long)priv, |
189 | sizeof(sizeof(struct pq2ads_pci_pic))); | 189 | sizeof(struct pq2ads_pci_pic)); |
190 | of_node_put(np); | 190 | of_node_put(np); |
191 | out_unmap_irq: | 191 | out_unmap_irq: |
192 | irq_dispose_mapping(irq); | 192 | irq_dispose_mapping(irq); |
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index a623ad256e9e..9b21ee68ea50 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <asm/firmware.h> | 14 | #include <asm/firmware.h> |
15 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
16 | #include <asm/pSeries_reconfig.h> | 16 | #include <asm/pSeries_reconfig.h> |
17 | #include <asm/sparsemem.h> | ||
17 | 18 | ||
18 | static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size) | 19 | static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size) |
19 | { | 20 | { |
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c index b16ca3ed65d2..78f1f7cca0a0 100644 --- a/arch/powerpc/sysdev/cpm2_pic.c +++ b/arch/powerpc/sysdev/cpm2_pic.c | |||
@@ -165,7 +165,7 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) | |||
165 | edibit = (14 - (src - CPM2_IRQ_EXT1)); | 165 | edibit = (14 - (src - CPM2_IRQ_EXT1)); |
166 | else | 166 | else |
167 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) | 167 | if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0) |
168 | edibit = (31 - (src - CPM2_IRQ_PORTC15)); | 168 | edibit = (31 - (CPM2_IRQ_PORTC0 - src)); |
169 | else | 169 | else |
170 | return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL; | 170 | return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL; |
171 | 171 | ||
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 88a983ece5c9..9a89cd3e80a2 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -890,7 +890,7 @@ unsigned int ipic_get_irq(void) | |||
890 | return irq_linear_revmap(primary_ipic->irqhost, irq); | 890 | return irq_linear_revmap(primary_ipic->irqhost, irq); |
891 | } | 891 | } |
892 | 892 | ||
893 | #ifdef CONFIG_PM | 893 | #ifdef CONFIG_SUSPEND |
894 | static struct { | 894 | static struct { |
895 | u32 sicfr; | 895 | u32 sicfr; |
896 | u32 siprr[2]; | 896 | u32 siprr[2]; |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index a0e748da9909..31e809c77790 100644 --- a/arch/s390/defconfig +++ b/arch/s390/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.28-rc6 | 3 | # Linux kernel version: 2.6.29-rc4 |
4 | # Thu Nov 27 11:00:49 2008 | 4 | # Wed Feb 11 10:07:16 2009 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,12 +14,14 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y | |||
14 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 14 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
15 | CONFIG_GENERIC_HWEIGHT=y | 15 | CONFIG_GENERIC_HWEIGHT=y |
16 | CONFIG_GENERIC_TIME=y | 16 | CONFIG_GENERIC_TIME=y |
17 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
17 | CONFIG_GENERIC_CLOCKEVENTS=y | 18 | CONFIG_GENERIC_CLOCKEVENTS=y |
18 | CONFIG_GENERIC_BUG=y | 19 | CONFIG_GENERIC_BUG=y |
19 | CONFIG_NO_IOMEM=y | 20 | CONFIG_NO_IOMEM=y |
20 | CONFIG_NO_DMA=y | 21 | CONFIG_NO_DMA=y |
21 | CONFIG_GENERIC_LOCKBREAK=y | 22 | CONFIG_GENERIC_LOCKBREAK=y |
22 | CONFIG_PGSTE=y | 23 | CONFIG_PGSTE=y |
24 | CONFIG_VIRT_CPU_ACCOUNTING=y | ||
23 | CONFIG_S390=y | 25 | CONFIG_S390=y |
24 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
25 | 27 | ||
@@ -39,20 +41,29 @@ CONFIG_POSIX_MQUEUE=y | |||
39 | # CONFIG_TASKSTATS is not set | 41 | # CONFIG_TASKSTATS is not set |
40 | CONFIG_AUDIT=y | 42 | CONFIG_AUDIT=y |
41 | # CONFIG_AUDITSYSCALL is not set | 43 | # CONFIG_AUDITSYSCALL is not set |
44 | |||
45 | # | ||
46 | # RCU Subsystem | ||
47 | # | ||
48 | CONFIG_CLASSIC_RCU=y | ||
49 | # CONFIG_TREE_RCU is not set | ||
50 | # CONFIG_PREEMPT_RCU is not set | ||
51 | # CONFIG_TREE_RCU_TRACE is not set | ||
52 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
42 | CONFIG_IKCONFIG=y | 53 | CONFIG_IKCONFIG=y |
43 | CONFIG_IKCONFIG_PROC=y | 54 | CONFIG_IKCONFIG_PROC=y |
44 | CONFIG_LOG_BUF_SHIFT=17 | 55 | CONFIG_LOG_BUF_SHIFT=17 |
56 | CONFIG_GROUP_SCHED=y | ||
57 | CONFIG_FAIR_GROUP_SCHED=y | ||
58 | # CONFIG_RT_GROUP_SCHED is not set | ||
59 | CONFIG_USER_SCHED=y | ||
60 | # CONFIG_CGROUP_SCHED is not set | ||
45 | CONFIG_CGROUPS=y | 61 | CONFIG_CGROUPS=y |
46 | # CONFIG_CGROUP_DEBUG is not set | 62 | # CONFIG_CGROUP_DEBUG is not set |
47 | CONFIG_CGROUP_NS=y | 63 | CONFIG_CGROUP_NS=y |
48 | # CONFIG_CGROUP_FREEZER is not set | 64 | # CONFIG_CGROUP_FREEZER is not set |
49 | # CONFIG_CGROUP_DEVICE is not set | 65 | # CONFIG_CGROUP_DEVICE is not set |
50 | # CONFIG_CPUSETS is not set | 66 | # CONFIG_CPUSETS is not set |
51 | CONFIG_GROUP_SCHED=y | ||
52 | CONFIG_FAIR_GROUP_SCHED=y | ||
53 | # CONFIG_RT_GROUP_SCHED is not set | ||
54 | CONFIG_USER_SCHED=y | ||
55 | # CONFIG_CGROUP_SCHED is not set | ||
56 | # CONFIG_CGROUP_CPUACCT is not set | 67 | # CONFIG_CGROUP_CPUACCT is not set |
57 | # CONFIG_RESOURCE_COUNTERS is not set | 68 | # CONFIG_RESOURCE_COUNTERS is not set |
58 | CONFIG_SYSFS_DEPRECATED=y | 69 | CONFIG_SYSFS_DEPRECATED=y |
@@ -63,6 +74,7 @@ CONFIG_UTS_NS=y | |||
63 | CONFIG_IPC_NS=y | 74 | CONFIG_IPC_NS=y |
64 | # CONFIG_USER_NS is not set | 75 | # CONFIG_USER_NS is not set |
65 | # CONFIG_PID_NS is not set | 76 | # CONFIG_PID_NS is not set |
77 | # CONFIG_NET_NS is not set | ||
66 | CONFIG_BLK_DEV_INITRD=y | 78 | CONFIG_BLK_DEV_INITRD=y |
67 | CONFIG_INITRAMFS_SOURCE="" | 79 | CONFIG_INITRAMFS_SOURCE="" |
68 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 80 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
@@ -91,17 +103,17 @@ CONFIG_SLAB=y | |||
91 | # CONFIG_SLUB is not set | 103 | # CONFIG_SLUB is not set |
92 | # CONFIG_SLOB is not set | 104 | # CONFIG_SLOB is not set |
93 | # CONFIG_PROFILING is not set | 105 | # CONFIG_PROFILING is not set |
94 | # CONFIG_MARKERS is not set | ||
95 | CONFIG_HAVE_OPROFILE=y | 106 | CONFIG_HAVE_OPROFILE=y |
96 | CONFIG_KPROBES=y | 107 | CONFIG_KPROBES=y |
108 | CONFIG_HAVE_SYSCALL_WRAPPERS=y | ||
97 | CONFIG_KRETPROBES=y | 109 | CONFIG_KRETPROBES=y |
98 | CONFIG_HAVE_KPROBES=y | 110 | CONFIG_HAVE_KPROBES=y |
99 | CONFIG_HAVE_KRETPROBES=y | 111 | CONFIG_HAVE_KRETPROBES=y |
100 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 112 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
113 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
101 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 114 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
102 | CONFIG_SLABINFO=y | 115 | CONFIG_SLABINFO=y |
103 | CONFIG_RT_MUTEXES=y | 116 | CONFIG_RT_MUTEXES=y |
104 | # CONFIG_TINY_SHMEM is not set | ||
105 | CONFIG_BASE_SMALL=0 | 117 | CONFIG_BASE_SMALL=0 |
106 | CONFIG_MODULES=y | 118 | CONFIG_MODULES=y |
107 | # CONFIG_MODULE_FORCE_LOAD is not set | 119 | # CONFIG_MODULE_FORCE_LOAD is not set |
@@ -109,7 +121,7 @@ CONFIG_MODULE_UNLOAD=y | |||
109 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 121 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
110 | CONFIG_MODVERSIONS=y | 122 | CONFIG_MODVERSIONS=y |
111 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 123 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
112 | CONFIG_KMOD=y | 124 | CONFIG_INIT_ALL_POSSIBLE=y |
113 | CONFIG_STOP_MACHINE=y | 125 | CONFIG_STOP_MACHINE=y |
114 | CONFIG_BLOCK=y | 126 | CONFIG_BLOCK=y |
115 | # CONFIG_BLK_DEV_IO_TRACE is not set | 127 | # CONFIG_BLK_DEV_IO_TRACE is not set |
@@ -130,7 +142,6 @@ CONFIG_DEFAULT_DEADLINE=y | |||
130 | # CONFIG_DEFAULT_NOOP is not set | 142 | # CONFIG_DEFAULT_NOOP is not set |
131 | CONFIG_DEFAULT_IOSCHED="deadline" | 143 | CONFIG_DEFAULT_IOSCHED="deadline" |
132 | CONFIG_PREEMPT_NOTIFIERS=y | 144 | CONFIG_PREEMPT_NOTIFIERS=y |
133 | CONFIG_CLASSIC_RCU=y | ||
134 | # CONFIG_FREEZER is not set | 145 | # CONFIG_FREEZER is not set |
135 | 146 | ||
136 | # | 147 | # |
@@ -161,6 +172,7 @@ CONFIG_S390_EXEC_PROTECT=y | |||
161 | CONFIG_MARCH_Z900=y | 172 | CONFIG_MARCH_Z900=y |
162 | # CONFIG_MARCH_Z990 is not set | 173 | # CONFIG_MARCH_Z990 is not set |
163 | # CONFIG_MARCH_Z9_109 is not set | 174 | # CONFIG_MARCH_Z9_109 is not set |
175 | # CONFIG_MARCH_Z10 is not set | ||
164 | CONFIG_PACK_STACK=y | 176 | CONFIG_PACK_STACK=y |
165 | # CONFIG_SMALL_STACK is not set | 177 | # CONFIG_SMALL_STACK is not set |
166 | CONFIG_CHECK_STACK=y | 178 | CONFIG_CHECK_STACK=y |
@@ -174,7 +186,6 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y | |||
174 | # CONFIG_PREEMPT_NONE is not set | 186 | # CONFIG_PREEMPT_NONE is not set |
175 | # CONFIG_PREEMPT_VOLUNTARY is not set | 187 | # CONFIG_PREEMPT_VOLUNTARY is not set |
176 | CONFIG_PREEMPT=y | 188 | CONFIG_PREEMPT=y |
177 | # CONFIG_PREEMPT_RCU is not set | ||
178 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 189 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
179 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 190 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
180 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 191 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
@@ -195,7 +206,6 @@ CONFIG_MEMORY_HOTREMOVE=y | |||
195 | CONFIG_PAGEFLAGS_EXTENDED=y | 206 | CONFIG_PAGEFLAGS_EXTENDED=y |
196 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 207 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
197 | CONFIG_MIGRATION=y | 208 | CONFIG_MIGRATION=y |
198 | CONFIG_RESOURCES_64BIT=y | ||
199 | CONFIG_PHYS_ADDR_T_64BIT=y | 209 | CONFIG_PHYS_ADDR_T_64BIT=y |
200 | CONFIG_ZONE_DMA_FLAG=1 | 210 | CONFIG_ZONE_DMA_FLAG=1 |
201 | CONFIG_BOUNCE=y | 211 | CONFIG_BOUNCE=y |
@@ -207,7 +217,6 @@ CONFIG_UNEVICTABLE_LRU=y | |||
207 | # | 217 | # |
208 | CONFIG_MACHCHK_WARNING=y | 218 | CONFIG_MACHCHK_WARNING=y |
209 | CONFIG_QDIO=y | 219 | CONFIG_QDIO=y |
210 | # CONFIG_QDIO_DEBUG is not set | ||
211 | CONFIG_CHSC_SCH=m | 220 | CONFIG_CHSC_SCH=m |
212 | 221 | ||
213 | # | 222 | # |
@@ -227,15 +236,13 @@ CONFIG_PFAULT=y | |||
227 | # CONFIG_SHARED_KERNEL is not set | 236 | # CONFIG_SHARED_KERNEL is not set |
228 | # CONFIG_CMM is not set | 237 | # CONFIG_CMM is not set |
229 | # CONFIG_PAGE_STATES is not set | 238 | # CONFIG_PAGE_STATES is not set |
230 | CONFIG_VIRT_TIMER=y | ||
231 | CONFIG_VIRT_CPU_ACCOUNTING=y | ||
232 | # CONFIG_APPLDATA_BASE is not set | 239 | # CONFIG_APPLDATA_BASE is not set |
233 | CONFIG_HZ_100=y | 240 | CONFIG_HZ_100=y |
234 | # CONFIG_HZ_250 is not set | 241 | # CONFIG_HZ_250 is not set |
235 | # CONFIG_HZ_300 is not set | 242 | # CONFIG_HZ_300 is not set |
236 | # CONFIG_HZ_1000 is not set | 243 | # CONFIG_HZ_1000 is not set |
237 | CONFIG_HZ=100 | 244 | CONFIG_HZ=100 |
238 | # CONFIG_SCHED_HRTICK is not set | 245 | CONFIG_SCHED_HRTICK=y |
239 | CONFIG_S390_HYPFS_FS=y | 246 | CONFIG_S390_HYPFS_FS=y |
240 | CONFIG_KEXEC=y | 247 | CONFIG_KEXEC=y |
241 | # CONFIG_ZFCPDUMP is not set | 248 | # CONFIG_ZFCPDUMP is not set |
@@ -245,6 +252,7 @@ CONFIG_NET=y | |||
245 | # | 252 | # |
246 | # Networking options | 253 | # Networking options |
247 | # | 254 | # |
255 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
248 | CONFIG_PACKET=y | 256 | CONFIG_PACKET=y |
249 | # CONFIG_PACKET_MMAP is not set | 257 | # CONFIG_PACKET_MMAP is not set |
250 | CONFIG_UNIX=y | 258 | CONFIG_UNIX=y |
@@ -383,6 +391,7 @@ CONFIG_NET_SCH_TBF=m | |||
383 | CONFIG_NET_SCH_GRED=m | 391 | CONFIG_NET_SCH_GRED=m |
384 | CONFIG_NET_SCH_DSMARK=m | 392 | CONFIG_NET_SCH_DSMARK=m |
385 | # CONFIG_NET_SCH_NETEM is not set | 393 | # CONFIG_NET_SCH_NETEM is not set |
394 | # CONFIG_NET_SCH_DRR is not set | ||
386 | # CONFIG_NET_SCH_INGRESS is not set | 395 | # CONFIG_NET_SCH_INGRESS is not set |
387 | 396 | ||
388 | # | 397 | # |
@@ -400,6 +409,7 @@ CONFIG_CLS_U32_MARK=y | |||
400 | CONFIG_NET_CLS_RSVP=m | 409 | CONFIG_NET_CLS_RSVP=m |
401 | CONFIG_NET_CLS_RSVP6=m | 410 | CONFIG_NET_CLS_RSVP6=m |
402 | CONFIG_NET_CLS_FLOW=m | 411 | CONFIG_NET_CLS_FLOW=m |
412 | # CONFIG_NET_CLS_CGROUP is not set | ||
403 | # CONFIG_NET_EMATCH is not set | 413 | # CONFIG_NET_EMATCH is not set |
404 | CONFIG_NET_CLS_ACT=y | 414 | CONFIG_NET_CLS_ACT=y |
405 | CONFIG_NET_ACT_POLICE=y | 415 | CONFIG_NET_ACT_POLICE=y |
@@ -411,6 +421,7 @@ CONFIG_NET_ACT_NAT=m | |||
411 | # CONFIG_NET_ACT_SKBEDIT is not set | 421 | # CONFIG_NET_ACT_SKBEDIT is not set |
412 | # CONFIG_NET_CLS_IND is not set | 422 | # CONFIG_NET_CLS_IND is not set |
413 | CONFIG_NET_SCH_FIFO=y | 423 | CONFIG_NET_SCH_FIFO=y |
424 | # CONFIG_DCB is not set | ||
414 | 425 | ||
415 | # | 426 | # |
416 | # Network testing | 427 | # Network testing |
@@ -428,6 +439,7 @@ CONFIG_CAN_VCAN=m | |||
428 | # CONFIG_CAN_DEBUG_DEVICES is not set | 439 | # CONFIG_CAN_DEBUG_DEVICES is not set |
429 | # CONFIG_AF_RXRPC is not set | 440 | # CONFIG_AF_RXRPC is not set |
430 | # CONFIG_PHONET is not set | 441 | # CONFIG_PHONET is not set |
442 | # CONFIG_WIMAX is not set | ||
431 | # CONFIG_RFKILL is not set | 443 | # CONFIG_RFKILL is not set |
432 | # CONFIG_NET_9P is not set | 444 | # CONFIG_NET_9P is not set |
433 | # CONFIG_PCMCIA is not set | 445 | # CONFIG_PCMCIA is not set |
@@ -475,11 +487,15 @@ CONFIG_DASD_DIAG=y | |||
475 | CONFIG_DASD_EER=y | 487 | CONFIG_DASD_EER=y |
476 | CONFIG_VIRTIO_BLK=m | 488 | CONFIG_VIRTIO_BLK=m |
477 | CONFIG_MISC_DEVICES=y | 489 | CONFIG_MISC_DEVICES=y |
478 | # CONFIG_EEPROM_93CX6 is not set | ||
479 | # CONFIG_ENCLOSURE_SERVICES is not set | 490 | # CONFIG_ENCLOSURE_SERVICES is not set |
480 | # CONFIG_C2PORT is not set | 491 | # CONFIG_C2PORT is not set |
481 | 492 | ||
482 | # | 493 | # |
494 | # EEPROM support | ||
495 | # | ||
496 | # CONFIG_EEPROM_93CX6 is not set | ||
497 | |||
498 | # | ||
483 | # SCSI device support | 499 | # SCSI device support |
484 | # | 500 | # |
485 | # CONFIG_RAID_ATTRS is not set | 501 | # CONFIG_RAID_ATTRS is not set |
@@ -520,6 +536,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
520 | # CONFIG_SCSI_SRP_ATTRS is not set | 536 | # CONFIG_SCSI_SRP_ATTRS is not set |
521 | CONFIG_SCSI_LOWLEVEL=y | 537 | CONFIG_SCSI_LOWLEVEL=y |
522 | # CONFIG_ISCSI_TCP is not set | 538 | # CONFIG_ISCSI_TCP is not set |
539 | # CONFIG_LIBFC is not set | ||
523 | # CONFIG_SCSI_DEBUG is not set | 540 | # CONFIG_SCSI_DEBUG is not set |
524 | CONFIG_ZFCP=y | 541 | CONFIG_ZFCP=y |
525 | CONFIG_SCSI_DH=m | 542 | CONFIG_SCSI_DH=m |
@@ -566,6 +583,10 @@ CONFIG_NET_ETHERNET=y | |||
566 | CONFIG_NETDEV_1000=y | 583 | CONFIG_NETDEV_1000=y |
567 | CONFIG_NETDEV_10000=y | 584 | CONFIG_NETDEV_10000=y |
568 | # CONFIG_TR is not set | 585 | # CONFIG_TR is not set |
586 | |||
587 | # | ||
588 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
589 | # | ||
569 | # CONFIG_WAN is not set | 590 | # CONFIG_WAN is not set |
570 | 591 | ||
571 | # | 592 | # |
@@ -593,9 +614,11 @@ CONFIG_VIRTIO_NET=m | |||
593 | # | 614 | # |
594 | CONFIG_DEVKMEM=y | 615 | CONFIG_DEVKMEM=y |
595 | CONFIG_UNIX98_PTYS=y | 616 | CONFIG_UNIX98_PTYS=y |
617 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
596 | CONFIG_LEGACY_PTYS=y | 618 | CONFIG_LEGACY_PTYS=y |
597 | CONFIG_LEGACY_PTY_COUNT=256 | 619 | CONFIG_LEGACY_PTY_COUNT=256 |
598 | CONFIG_HVC_DRIVER=y | 620 | CONFIG_HVC_DRIVER=y |
621 | CONFIG_HVC_IUCV=y | ||
599 | CONFIG_VIRTIO_CONSOLE=y | 622 | CONFIG_VIRTIO_CONSOLE=y |
600 | CONFIG_HW_RANDOM=m | 623 | CONFIG_HW_RANDOM=m |
601 | CONFIG_HW_RANDOM_VIRTIO=m | 624 | CONFIG_HW_RANDOM_VIRTIO=m |
@@ -645,7 +668,6 @@ CONFIG_S390_VMUR=m | |||
645 | # CONFIG_NEW_LEDS is not set | 668 | # CONFIG_NEW_LEDS is not set |
646 | CONFIG_ACCESSIBILITY=y | 669 | CONFIG_ACCESSIBILITY=y |
647 | # CONFIG_STAGING is not set | 670 | # CONFIG_STAGING is not set |
648 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
649 | 671 | ||
650 | # | 672 | # |
651 | # File systems | 673 | # File systems |
@@ -668,6 +690,7 @@ CONFIG_FILE_LOCKING=y | |||
668 | # CONFIG_XFS_FS is not set | 690 | # CONFIG_XFS_FS is not set |
669 | # CONFIG_GFS2_FS is not set | 691 | # CONFIG_GFS2_FS is not set |
670 | # CONFIG_OCFS2_FS is not set | 692 | # CONFIG_OCFS2_FS is not set |
693 | # CONFIG_BTRFS_FS is not set | ||
671 | CONFIG_DNOTIFY=y | 694 | CONFIG_DNOTIFY=y |
672 | CONFIG_INOTIFY=y | 695 | CONFIG_INOTIFY=y |
673 | CONFIG_INOTIFY_USER=y | 696 | CONFIG_INOTIFY_USER=y |
@@ -703,10 +726,7 @@ CONFIG_TMPFS_POSIX_ACL=y | |||
703 | # CONFIG_HUGETLBFS is not set | 726 | # CONFIG_HUGETLBFS is not set |
704 | # CONFIG_HUGETLB_PAGE is not set | 727 | # CONFIG_HUGETLB_PAGE is not set |
705 | CONFIG_CONFIGFS_FS=m | 728 | CONFIG_CONFIGFS_FS=m |
706 | 729 | CONFIG_MISC_FILESYSTEMS=y | |
707 | # | ||
708 | # Miscellaneous filesystems | ||
709 | # | ||
710 | # CONFIG_ADFS_FS is not set | 730 | # CONFIG_ADFS_FS is not set |
711 | # CONFIG_AFFS_FS is not set | 731 | # CONFIG_AFFS_FS is not set |
712 | # CONFIG_HFS_FS is not set | 732 | # CONFIG_HFS_FS is not set |
@@ -715,6 +735,7 @@ CONFIG_CONFIGFS_FS=m | |||
715 | # CONFIG_BFS_FS is not set | 735 | # CONFIG_BFS_FS is not set |
716 | # CONFIG_EFS_FS is not set | 736 | # CONFIG_EFS_FS is not set |
717 | # CONFIG_CRAMFS is not set | 737 | # CONFIG_CRAMFS is not set |
738 | # CONFIG_SQUASHFS is not set | ||
718 | # CONFIG_VXFS_FS is not set | 739 | # CONFIG_VXFS_FS is not set |
719 | # CONFIG_MINIX_FS is not set | 740 | # CONFIG_MINIX_FS is not set |
720 | # CONFIG_OMFS_FS is not set | 741 | # CONFIG_OMFS_FS is not set |
@@ -808,6 +829,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
808 | CONFIG_DEBUG_MEMORY_INIT=y | 829 | CONFIG_DEBUG_MEMORY_INIT=y |
809 | # CONFIG_DEBUG_LIST is not set | 830 | # CONFIG_DEBUG_LIST is not set |
810 | # CONFIG_DEBUG_SG is not set | 831 | # CONFIG_DEBUG_SG is not set |
832 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
811 | # CONFIG_FRAME_POINTER is not set | 833 | # CONFIG_FRAME_POINTER is not set |
812 | # CONFIG_RCU_TORTURE_TEST is not set | 834 | # CONFIG_RCU_TORTURE_TEST is not set |
813 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 835 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
@@ -818,15 +840,19 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
818 | # CONFIG_FAULT_INJECTION is not set | 840 | # CONFIG_FAULT_INJECTION is not set |
819 | # CONFIG_LATENCYTOP is not set | 841 | # CONFIG_LATENCYTOP is not set |
820 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 842 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
843 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
821 | 844 | ||
822 | # | 845 | # |
823 | # Tracers | 846 | # Tracers |
824 | # | 847 | # |
848 | # CONFIG_FUNCTION_TRACER is not set | ||
825 | # CONFIG_IRQSOFF_TRACER is not set | 849 | # CONFIG_IRQSOFF_TRACER is not set |
826 | # CONFIG_PREEMPT_TRACER is not set | 850 | # CONFIG_PREEMPT_TRACER is not set |
827 | # CONFIG_SCHED_TRACER is not set | 851 | # CONFIG_SCHED_TRACER is not set |
828 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 852 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
829 | # CONFIG_BOOT_TRACER is not set | 853 | # CONFIG_BOOT_TRACER is not set |
854 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
855 | # CONFIG_STACK_TRACER is not set | ||
830 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 856 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set |
831 | CONFIG_SAMPLES=y | 857 | CONFIG_SAMPLES=y |
832 | # CONFIG_SAMPLE_KOBJECT is not set | 858 | # CONFIG_SAMPLE_KOBJECT is not set |
@@ -847,11 +873,17 @@ CONFIG_CRYPTO=y | |||
847 | # | 873 | # |
848 | CONFIG_CRYPTO_FIPS=y | 874 | CONFIG_CRYPTO_FIPS=y |
849 | CONFIG_CRYPTO_ALGAPI=y | 875 | CONFIG_CRYPTO_ALGAPI=y |
850 | CONFIG_CRYPTO_AEAD=y | 876 | CONFIG_CRYPTO_ALGAPI2=y |
877 | CONFIG_CRYPTO_AEAD=m | ||
878 | CONFIG_CRYPTO_AEAD2=y | ||
851 | CONFIG_CRYPTO_BLKCIPHER=y | 879 | CONFIG_CRYPTO_BLKCIPHER=y |
852 | CONFIG_CRYPTO_HASH=y | 880 | CONFIG_CRYPTO_BLKCIPHER2=y |
853 | CONFIG_CRYPTO_RNG=y | 881 | CONFIG_CRYPTO_HASH=m |
882 | CONFIG_CRYPTO_HASH2=y | ||
883 | CONFIG_CRYPTO_RNG=m | ||
884 | CONFIG_CRYPTO_RNG2=y | ||
854 | CONFIG_CRYPTO_MANAGER=y | 885 | CONFIG_CRYPTO_MANAGER=y |
886 | CONFIG_CRYPTO_MANAGER2=y | ||
855 | CONFIG_CRYPTO_GF128MUL=m | 887 | CONFIG_CRYPTO_GF128MUL=m |
856 | # CONFIG_CRYPTO_NULL is not set | 888 | # CONFIG_CRYPTO_NULL is not set |
857 | # CONFIG_CRYPTO_CRYPTD is not set | 889 | # CONFIG_CRYPTO_CRYPTD is not set |
@@ -885,7 +917,7 @@ CONFIG_CRYPTO_HMAC=m | |||
885 | # | 917 | # |
886 | # Digest | 918 | # Digest |
887 | # | 919 | # |
888 | # CONFIG_CRYPTO_CRC32C is not set | 920 | CONFIG_CRYPTO_CRC32C=m |
889 | # CONFIG_CRYPTO_MD4 is not set | 921 | # CONFIG_CRYPTO_MD4 is not set |
890 | CONFIG_CRYPTO_MD5=m | 922 | CONFIG_CRYPTO_MD5=m |
891 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 923 | # CONFIG_CRYPTO_MICHAEL_MIC is not set |
@@ -942,6 +974,7 @@ CONFIG_S390_PRNG=m | |||
942 | # Library routines | 974 | # Library routines |
943 | # | 975 | # |
944 | CONFIG_BITREVERSE=m | 976 | CONFIG_BITREVERSE=m |
977 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
945 | # CONFIG_CRC_CCITT is not set | 978 | # CONFIG_CRC_CCITT is not set |
946 | # CONFIG_CRC16 is not set | 979 | # CONFIG_CRC16 is not set |
947 | CONFIG_CRC_T10DIF=y | 980 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index ffdef5fe8587..f3720defdd16 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h | |||
@@ -384,8 +384,8 @@ struct _lowcore | |||
384 | __u32 panic_magic; /* 0xe00 */ | 384 | __u32 panic_magic; /* 0xe00 */ |
385 | 385 | ||
386 | /* Per cpu primary space access list */ | 386 | /* Per cpu primary space access list */ |
387 | __u8 pad_0xe04[0xe3c-0xe04]; /* 0xe04 */ | 387 | __u8 pad_0xe04[0xe38-0xe04]; /* 0xe04 */ |
388 | __u32 vdso_per_cpu_data; /* 0xe3c */ | 388 | __u64 vdso_per_cpu_data; /* 0xe38 */ |
389 | __u32 paste[16]; /* 0xe40 */ | 389 | __u32 paste[16]; /* 0xe40 */ |
390 | 390 | ||
391 | __u8 pad13[0x11b8-0xe80]; /* 0xe80 */ | 391 | __u8 pad13[0x11b8-0xe80]; /* 0xe80 */ |
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index e7c5bfb7c755..026a37a94fc9 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
@@ -95,6 +95,7 @@ asmlinkage void do_softirq(void) | |||
95 | local_irq_restore(flags); | 95 | local_irq_restore(flags); |
96 | } | 96 | } |
97 | 97 | ||
98 | #ifdef CONFIG_PROC_FS | ||
98 | void init_irq_proc(void) | 99 | void init_irq_proc(void) |
99 | { | 100 | { |
100 | struct proc_dir_entry *root_irq_dir; | 101 | struct proc_dir_entry *root_irq_dir; |
@@ -102,3 +103,4 @@ void init_irq_proc(void) | |||
102 | root_irq_dir = proc_mkdir("irq", NULL); | 103 | root_irq_dir = proc_mkdir("irq", NULL); |
103 | create_prof_cpu_mask(root_irq_dir); | 104 | create_prof_cpu_mask(root_irq_dir); |
104 | } | 105 | } |
106 | #endif | ||
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 8ffee714f932..a46c3a21e26d 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
@@ -891,10 +891,35 @@ prom_tba: .xword 0 | |||
891 | tlb_type: .word 0 /* Must NOT end up in BSS */ | 891 | tlb_type: .word 0 /* Must NOT end up in BSS */ |
892 | .section ".fixup",#alloc,#execinstr | 892 | .section ".fixup",#alloc,#execinstr |
893 | 893 | ||
894 | .globl __ret_efault, __retl_efault | 894 | .globl __ret_efault, __retl_efault, __ret_one, __retl_one |
895 | __ret_efault: | 895 | ENTRY(__ret_efault) |
896 | ret | 896 | ret |
897 | restore %g0, -EFAULT, %o0 | 897 | restore %g0, -EFAULT, %o0 |
898 | __retl_efault: | 898 | ENDPROC(__ret_efault) |
899 | |||
900 | ENTRY(__retl_efault) | ||
899 | retl | 901 | retl |
900 | mov -EFAULT, %o0 | 902 | mov -EFAULT, %o0 |
903 | ENDPROC(__retl_efault) | ||
904 | |||
905 | ENTRY(__retl_one) | ||
906 | retl | ||
907 | mov 1, %o0 | ||
908 | ENDPROC(__retl_one) | ||
909 | |||
910 | ENTRY(__ret_one_asi) | ||
911 | wr %g0, ASI_AIUS, %asi | ||
912 | ret | ||
913 | restore %g0, 1, %o0 | ||
914 | ENDPROC(__ret_one_asi) | ||
915 | |||
916 | ENTRY(__retl_one_asi) | ||
917 | wr %g0, ASI_AIUS, %asi | ||
918 | retl | ||
919 | mov 1, %o0 | ||
920 | ENDPROC(__retl_one_asi) | ||
921 | |||
922 | ENTRY(__retl_o1) | ||
923 | retl | ||
924 | mov %o1, %o0 | ||
925 | ENDPROC(__retl_o1) | ||
diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c index 09f088ed4a64..f3577223c863 100644 --- a/arch/sparc/kernel/nmi.c +++ b/arch/sparc/kernel/nmi.c | |||
@@ -70,6 +70,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic) | |||
70 | printk(" on CPU%d, ip %08lx, registers:\n", | 70 | printk(" on CPU%d, ip %08lx, registers:\n", |
71 | smp_processor_id(), regs->tpc); | 71 | smp_processor_id(), regs->tpc); |
72 | show_regs(regs); | 72 | show_regs(regs); |
73 | dump_stack(); | ||
73 | 74 | ||
74 | bust_spinlocks(0); | 75 | bust_spinlocks(0); |
75 | 76 | ||
diff --git a/arch/sparc/kernel/pcr.c b/arch/sparc/kernel/pcr.c index 92e0dda141a4..1ae8cdd7e703 100644 --- a/arch/sparc/kernel/pcr.c +++ b/arch/sparc/kernel/pcr.c | |||
@@ -133,11 +133,16 @@ int __init pcr_arch_init(void) | |||
133 | 133 | ||
134 | case cheetah: | 134 | case cheetah: |
135 | case cheetah_plus: | 135 | case cheetah_plus: |
136 | case spitfire: | ||
137 | pcr_ops = &direct_pcr_ops; | 136 | pcr_ops = &direct_pcr_ops; |
138 | pcr_enable = PCR_SUN4U_ENABLE; | 137 | pcr_enable = PCR_SUN4U_ENABLE; |
139 | break; | 138 | break; |
140 | 139 | ||
140 | case spitfire: | ||
141 | /* UltraSPARC-I/II and derivatives lack a profile | ||
142 | * counter overflow interrupt so we can't make use of | ||
143 | * their hardware currently. | ||
144 | */ | ||
145 | /* fallthrough */ | ||
141 | default: | 146 | default: |
142 | err = -ENODEV; | 147 | err = -ENODEV; |
143 | goto out_unregister; | 148 | goto out_unregister; |
diff --git a/arch/sparc/lib/GENbzero.S b/arch/sparc/lib/GENbzero.S index 6a4f956a2f7a..8e7a843ddd88 100644 --- a/arch/sparc/lib/GENbzero.S +++ b/arch/sparc/lib/GENbzero.S | |||
@@ -6,13 +6,9 @@ | |||
6 | 6 | ||
7 | #define EX_ST(x,y) \ | 7 | #define EX_ST(x,y) \ |
8 | 98: x,y; \ | 8 | 98: x,y; \ |
9 | .section .fixup; \ | ||
10 | .align 4; \ | ||
11 | 99: retl; \ | ||
12 | mov %o1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 9 | .section __ex_table,"a";\ |
14 | .align 4; \ | 10 | .align 4; \ |
15 | .word 98b, 99b; \ | 11 | .word 98b, __retl_o1; \ |
16 | .text; \ | 12 | .text; \ |
17 | .align 4; | 13 | .align 4; |
18 | 14 | ||
diff --git a/arch/sparc/lib/GENcopy_from_user.S b/arch/sparc/lib/GENcopy_from_user.S index 2b9df99e87f9..b7d0bd6b1406 100644 --- a/arch/sparc/lib/GENcopy_from_user.S +++ b/arch/sparc/lib/GENcopy_from_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
@@ -27,7 +23,7 @@ | |||
27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
31 | nop | 27 | nop |
32 | #endif | 28 | #endif |
33 | 29 | ||
diff --git a/arch/sparc/lib/GENcopy_to_user.S b/arch/sparc/lib/GENcopy_to_user.S index bb3f7084daf9..780550e1afc7 100644 --- a/arch/sparc/lib/GENcopy_to_user.S +++ b/arch/sparc/lib/GENcopy_to_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
@@ -31,7 +27,7 @@ | |||
31 | #define PREAMBLE \ | 27 | #define PREAMBLE \ |
32 | rd %asi, %g1; \ | 28 | rd %asi, %g1; \ |
33 | cmp %g1, ASI_AIUS; \ | 29 | cmp %g1, ASI_AIUS; \ |
34 | bne,pn %icc, memcpy_user_stub; \ | 30 | bne,pn %icc, ___copy_in_user; \ |
35 | nop | 31 | nop |
36 | #endif | 32 | #endif |
37 | 33 | ||
diff --git a/arch/sparc/lib/NG2copy_from_user.S b/arch/sparc/lib/NG2copy_from_user.S index c77ef5f22102..119ccb9a54f4 100644 --- a/arch/sparc/lib/NG2copy_from_user.S +++ b/arch/sparc/lib/NG2copy_from_user.S | |||
@@ -5,14 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
11 | retl; \ | ||
12 | mov 1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
14 | .align 4; \ | 9 | .align 4; \ |
15 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one_asi;\ |
16 | .text; \ | 11 | .text; \ |
17 | .align 4; | 12 | .align 4; |
18 | 13 | ||
@@ -33,7 +28,7 @@ | |||
33 | #define PREAMBLE \ | 28 | #define PREAMBLE \ |
34 | rd %asi, %g1; \ | 29 | rd %asi, %g1; \ |
35 | cmp %g1, ASI_AIUS; \ | 30 | cmp %g1, ASI_AIUS; \ |
36 | bne,pn %icc, memcpy_user_stub; \ | 31 | bne,pn %icc, ___copy_in_user; \ |
37 | nop | 32 | nop |
38 | #endif | 33 | #endif |
39 | 34 | ||
diff --git a/arch/sparc/lib/NG2copy_to_user.S b/arch/sparc/lib/NG2copy_to_user.S index 4bd4093acbbd..7fe1ccefd9d0 100644 --- a/arch/sparc/lib/NG2copy_to_user.S +++ b/arch/sparc/lib/NG2copy_to_user.S | |||
@@ -5,14 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
11 | retl; \ | ||
12 | mov 1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
14 | .align 4; \ | 9 | .align 4; \ |
15 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one_asi;\ |
16 | .text; \ | 11 | .text; \ |
17 | .align 4; | 12 | .align 4; |
18 | 13 | ||
@@ -42,7 +37,7 @@ | |||
42 | #define PREAMBLE \ | 37 | #define PREAMBLE \ |
43 | rd %asi, %g1; \ | 38 | rd %asi, %g1; \ |
44 | cmp %g1, ASI_AIUS; \ | 39 | cmp %g1, ASI_AIUS; \ |
45 | bne,pn %icc, memcpy_user_stub; \ | 40 | bne,pn %icc, ___copy_in_user; \ |
46 | nop | 41 | nop |
47 | #endif | 42 | #endif |
48 | 43 | ||
diff --git a/arch/sparc/lib/NGbzero.S b/arch/sparc/lib/NGbzero.S index 814d5f7a45e1..beab29bf419b 100644 --- a/arch/sparc/lib/NGbzero.S +++ b/arch/sparc/lib/NGbzero.S | |||
@@ -6,13 +6,9 @@ | |||
6 | 6 | ||
7 | #define EX_ST(x,y) \ | 7 | #define EX_ST(x,y) \ |
8 | 98: x,y; \ | 8 | 98: x,y; \ |
9 | .section .fixup; \ | ||
10 | .align 4; \ | ||
11 | 99: retl; \ | ||
12 | mov %o1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 9 | .section __ex_table,"a";\ |
14 | .align 4; \ | 10 | .align 4; \ |
15 | .word 98b, 99b; \ | 11 | .word 98b, __retl_o1; \ |
16 | .text; \ | 12 | .text; \ |
17 | .align 4; | 13 | .align 4; |
18 | 14 | ||
diff --git a/arch/sparc/lib/NGcopy_from_user.S b/arch/sparc/lib/NGcopy_from_user.S index e7f433f71b42..5d1e4d1ac21e 100644 --- a/arch/sparc/lib/NGcopy_from_user.S +++ b/arch/sparc/lib/NGcopy_from_user.S | |||
@@ -5,14 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
11 | ret; \ | ||
12 | restore %g0, 1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
14 | .align 4; \ | 9 | .align 4; \ |
15 | .word 98b, 99b; \ | 10 | .word 98b, __ret_one_asi;\ |
16 | .text; \ | 11 | .text; \ |
17 | .align 4; | 12 | .align 4; |
18 | 13 | ||
@@ -30,7 +25,7 @@ | |||
30 | #define PREAMBLE \ | 25 | #define PREAMBLE \ |
31 | rd %asi, %g1; \ | 26 | rd %asi, %g1; \ |
32 | cmp %g1, ASI_AIUS; \ | 27 | cmp %g1, ASI_AIUS; \ |
33 | bne,pn %icc, memcpy_user_stub; \ | 28 | bne,pn %icc, ___copy_in_user; \ |
34 | nop | 29 | nop |
35 | #endif | 30 | #endif |
36 | 31 | ||
diff --git a/arch/sparc/lib/NGcopy_to_user.S b/arch/sparc/lib/NGcopy_to_user.S index 6ea01c5532a0..ff630dcb273c 100644 --- a/arch/sparc/lib/NGcopy_to_user.S +++ b/arch/sparc/lib/NGcopy_to_user.S | |||
@@ -5,14 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: wr %g0, ASI_AIUS, %asi;\ | ||
11 | ret; \ | ||
12 | restore %g0, 1, %o0; \ | ||
13 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
14 | .align 4; \ | 9 | .align 4; \ |
15 | .word 98b, 99b; \ | 10 | .word 98b, __ret_one_asi;\ |
16 | .text; \ | 11 | .text; \ |
17 | .align 4; | 12 | .align 4; |
18 | 13 | ||
@@ -33,7 +28,7 @@ | |||
33 | #define PREAMBLE \ | 28 | #define PREAMBLE \ |
34 | rd %asi, %g1; \ | 29 | rd %asi, %g1; \ |
35 | cmp %g1, ASI_AIUS; \ | 30 | cmp %g1, ASI_AIUS; \ |
36 | bne,pn %icc, memcpy_user_stub; \ | 31 | bne,pn %icc, ___copy_in_user; \ |
37 | nop | 32 | nop |
38 | #endif | 33 | #endif |
39 | 34 | ||
diff --git a/arch/sparc/lib/U1copy_from_user.S b/arch/sparc/lib/U1copy_from_user.S index 3192b0bf4fab..a6ae2ea04bf5 100644 --- a/arch/sparc/lib/U1copy_from_user.S +++ b/arch/sparc/lib/U1copy_from_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
@@ -27,7 +23,7 @@ | |||
27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
31 | nop; \ | 27 | nop; \ |
32 | 28 | ||
33 | #include "U1memcpy.S" | 29 | #include "U1memcpy.S" |
diff --git a/arch/sparc/lib/U1copy_to_user.S b/arch/sparc/lib/U1copy_to_user.S index d1210ffb0b82..f4b970eeb485 100644 --- a/arch/sparc/lib/U1copy_to_user.S +++ b/arch/sparc/lib/U1copy_to_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
@@ -27,7 +23,7 @@ | |||
27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
31 | nop; \ | 27 | nop; \ |
32 | 28 | ||
33 | #include "U1memcpy.S" | 29 | #include "U1memcpy.S" |
diff --git a/arch/sparc/lib/U3copy_from_user.S b/arch/sparc/lib/U3copy_from_user.S index f5bfc8d9d216..b1acd1331c33 100644 --- a/arch/sparc/lib/U3copy_from_user.S +++ b/arch/sparc/lib/U3copy_from_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
diff --git a/arch/sparc/lib/U3copy_to_user.S b/arch/sparc/lib/U3copy_to_user.S index 2334f111bb0c..ef1e493afdfa 100644 --- a/arch/sparc/lib/U3copy_to_user.S +++ b/arch/sparc/lib/U3copy_to_user.S | |||
@@ -5,13 +5,9 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | ||
9 | .align 4; \ | ||
10 | 99: retl; \ | ||
11 | mov 1, %o0; \ | ||
12 | .section __ex_table,"a";\ | 8 | .section __ex_table,"a";\ |
13 | .align 4; \ | 9 | .align 4; \ |
14 | .word 98b, 99b; \ | 10 | .word 98b, __retl_one; \ |
15 | .text; \ | 11 | .text; \ |
16 | .align 4; | 12 | .align 4; |
17 | 13 | ||
@@ -27,7 +23,7 @@ | |||
27 | #define PREAMBLE \ | 23 | #define PREAMBLE \ |
28 | rd %asi, %g1; \ | 24 | rd %asi, %g1; \ |
29 | cmp %g1, ASI_AIUS; \ | 25 | cmp %g1, ASI_AIUS; \ |
30 | bne,pn %icc, memcpy_user_stub; \ | 26 | bne,pn %icc, ___copy_in_user; \ |
31 | nop; \ | 27 | nop; \ |
32 | 28 | ||
33 | #include "U3memcpy.S" | 29 | #include "U3memcpy.S" |
diff --git a/arch/sparc/lib/bzero.S b/arch/sparc/lib/bzero.S index c7bbae8c590f..b6557297440f 100644 --- a/arch/sparc/lib/bzero.S +++ b/arch/sparc/lib/bzero.S | |||
@@ -88,13 +88,9 @@ __bzero_done: | |||
88 | 88 | ||
89 | #define EX_ST(x,y) \ | 89 | #define EX_ST(x,y) \ |
90 | 98: x,y; \ | 90 | 98: x,y; \ |
91 | .section .fixup; \ | ||
92 | .align 4; \ | ||
93 | 99: retl; \ | ||
94 | mov %o1, %o0; \ | ||
95 | .section __ex_table,"a";\ | 91 | .section __ex_table,"a";\ |
96 | .align 4; \ | 92 | .align 4; \ |
97 | .word 98b, 99b; \ | 93 | .word 98b, __retl_o1; \ |
98 | .text; \ | 94 | .text; \ |
99 | .align 4; | 95 | .align 4; |
100 | 96 | ||
diff --git a/arch/sparc/lib/copy_in_user.S b/arch/sparc/lib/copy_in_user.S index 650af3f21f78..302c0e60dc2c 100644 --- a/arch/sparc/lib/copy_in_user.S +++ b/arch/sparc/lib/copy_in_user.S | |||
@@ -3,19 +3,16 @@ | |||
3 | * Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com) | 3 | * Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com) |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/linkage.h> | ||
6 | #include <asm/asi.h> | 7 | #include <asm/asi.h> |
7 | 8 | ||
8 | #define XCC xcc | 9 | #define XCC xcc |
9 | 10 | ||
10 | #define EX(x,y) \ | 11 | #define EX(x,y) \ |
11 | 98: x,y; \ | 12 | 98: x,y; \ |
12 | .section .fixup; \ | ||
13 | .align 4; \ | ||
14 | 99: retl; \ | ||
15 | mov 1, %o0; \ | ||
16 | .section __ex_table,"a";\ | 13 | .section __ex_table,"a";\ |
17 | .align 4; \ | 14 | .align 4; \ |
18 | .word 98b, 99b; \ | 15 | .word 98b, __retl_one; \ |
19 | .text; \ | 16 | .text; \ |
20 | .align 4; | 17 | .align 4; |
21 | 18 | ||
@@ -31,18 +28,7 @@ | |||
31 | * to copy register windows around during thread cloning. | 28 | * to copy register windows around during thread cloning. |
32 | */ | 29 | */ |
33 | 30 | ||
34 | .globl ___copy_in_user | 31 | ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */ |
35 | .type ___copy_in_user,#function | ||
36 | ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | ||
37 | /* Writing to %asi is _expensive_ so we hardcode it. | ||
38 | * Reading %asi to check for KERNEL_DS is comparatively | ||
39 | * cheap. | ||
40 | */ | ||
41 | rd %asi, %g1 | ||
42 | cmp %g1, ASI_AIUS | ||
43 | bne,pn %icc, memcpy_user_stub | ||
44 | nop | ||
45 | |||
46 | cmp %o2, 0 | 32 | cmp %o2, 0 |
47 | be,pn %XCC, 85f | 33 | be,pn %XCC, 85f |
48 | or %o0, %o1, %o3 | 34 | or %o0, %o1, %o3 |
@@ -53,22 +39,24 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
53 | /* 16 < len <= 64 */ | 39 | /* 16 < len <= 64 */ |
54 | andcc %o3, 0x7, %g0 | 40 | andcc %o3, 0x7, %g0 |
55 | bne,pn %XCC, 90f | 41 | bne,pn %XCC, 90f |
56 | sub %o0, %o1, %o3 | 42 | nop |
57 | 43 | ||
58 | andn %o2, 0x7, %o4 | 44 | andn %o2, 0x7, %o4 |
59 | and %o2, 0x7, %o2 | 45 | and %o2, 0x7, %o2 |
60 | 1: subcc %o4, 0x8, %o4 | 46 | 1: subcc %o4, 0x8, %o4 |
61 | EX(ldxa [%o1] %asi, %o5) | 47 | EX(ldxa [%o1] %asi, %o5) |
62 | EX(stxa %o5, [%o1 + %o3] ASI_AIUS) | 48 | EX(stxa %o5, [%o0] %asi) |
49 | add %o1, 0x8, %o1 | ||
63 | bgu,pt %XCC, 1b | 50 | bgu,pt %XCC, 1b |
64 | add %o1, 0x8, %o1 | 51 | add %o0, 0x8, %o0 |
65 | andcc %o2, 0x4, %g0 | 52 | andcc %o2, 0x4, %g0 |
66 | be,pt %XCC, 1f | 53 | be,pt %XCC, 1f |
67 | nop | 54 | nop |
68 | sub %o2, 0x4, %o2 | 55 | sub %o2, 0x4, %o2 |
69 | EX(lduwa [%o1] %asi, %o5) | 56 | EX(lduwa [%o1] %asi, %o5) |
70 | EX(stwa %o5, [%o1 + %o3] ASI_AIUS) | 57 | EX(stwa %o5, [%o0] %asi) |
71 | add %o1, 0x4, %o1 | 58 | add %o1, 0x4, %o1 |
59 | add %o0, 0x4, %o0 | ||
72 | 1: cmp %o2, 0 | 60 | 1: cmp %o2, 0 |
73 | be,pt %XCC, 85f | 61 | be,pt %XCC, 85f |
74 | nop | 62 | nop |
@@ -78,14 +66,15 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
78 | 80: /* 0 < len <= 16 */ | 66 | 80: /* 0 < len <= 16 */ |
79 | andcc %o3, 0x3, %g0 | 67 | andcc %o3, 0x3, %g0 |
80 | bne,pn %XCC, 90f | 68 | bne,pn %XCC, 90f |
81 | sub %o0, %o1, %o3 | 69 | nop |
82 | 70 | ||
83 | 82: | 71 | 82: |
84 | subcc %o2, 4, %o2 | 72 | subcc %o2, 4, %o2 |
85 | EX(lduwa [%o1] %asi, %g1) | 73 | EX(lduwa [%o1] %asi, %g1) |
86 | EX(stwa %g1, [%o1 + %o3] ASI_AIUS) | 74 | EX(stwa %g1, [%o0] %asi) |
75 | add %o1, 4, %o1 | ||
87 | bgu,pt %XCC, 82b | 76 | bgu,pt %XCC, 82b |
88 | add %o1, 4, %o1 | 77 | add %o0, 4, %o0 |
89 | 78 | ||
90 | 85: retl | 79 | 85: retl |
91 | clr %o0 | 80 | clr %o0 |
@@ -94,26 +83,10 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */ | |||
94 | 90: | 83 | 90: |
95 | subcc %o2, 1, %o2 | 84 | subcc %o2, 1, %o2 |
96 | EX(lduba [%o1] %asi, %g1) | 85 | EX(lduba [%o1] %asi, %g1) |
97 | EX(stba %g1, [%o1 + %o3] ASI_AIUS) | 86 | EX(stba %g1, [%o0] %asi) |
87 | add %o1, 1, %o1 | ||
98 | bgu,pt %XCC, 90b | 88 | bgu,pt %XCC, 90b |
99 | add %o1, 1, %o1 | 89 | add %o0, 1, %o0 |
100 | retl | 90 | retl |
101 | clr %o0 | 91 | clr %o0 |
102 | 92 | ENDPROC(___copy_in_user) | |
103 | .size ___copy_in_user, .-___copy_in_user | ||
104 | |||
105 | /* Act like copy_{to,in}_user(), ie. return zero instead | ||
106 | * of original destination pointer. This is invoked when | ||
107 | * copy_{to,in}_user() finds that %asi is kernel space. | ||
108 | */ | ||
109 | .globl memcpy_user_stub | ||
110 | .type memcpy_user_stub,#function | ||
111 | memcpy_user_stub: | ||
112 | save %sp, -192, %sp | ||
113 | mov %i0, %o0 | ||
114 | mov %i1, %o1 | ||
115 | call memcpy | ||
116 | mov %i2, %o2 | ||
117 | ret | ||
118 | restore %g0, %g0, %o0 | ||
119 | .size memcpy_user_stub, .-memcpy_user_stub | ||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 2a75931567c4..97d3bd17b7df 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -1807,6 +1807,17 @@ config DMAR | |||
1807 | and include PCI device scope covered by these DMA | 1807 | and include PCI device scope covered by these DMA |
1808 | remapping devices. | 1808 | remapping devices. |
1809 | 1809 | ||
1810 | config DMAR_DEFAULT_ON | ||
1811 | def_bool n | ||
1812 | prompt "Enable DMA Remapping Devices by default" | ||
1813 | depends on DMAR | ||
1814 | help | ||
1815 | Selecting this option will enable a DMAR device at boot time if | ||
1816 | one is found. If this option is not selected, DMAR support can | ||
1817 | be enabled by passing intel_iommu=on to the kernel. It is | ||
1818 | recommended you say N here while the DMAR code remains | ||
1819 | experimental. | ||
1820 | |||
1810 | config DMAR_GFX_WA | 1821 | config DMAR_GFX_WA |
1811 | def_bool y | 1822 | def_bool y |
1812 | prompt "Support for Graphics workaround" | 1823 | prompt "Support for Graphics workaround" |
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 8eb50ba9161e..085fef4d8660 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
@@ -167,9 +167,9 @@ config MK7 | |||
167 | config MK8 | 167 | config MK8 |
168 | bool "Opteron/Athlon64/Hammer/K8" | 168 | bool "Opteron/Athlon64/Hammer/K8" |
169 | help | 169 | help |
170 | Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables | 170 | Select this for an AMD Opteron or Athlon64 Hammer-family processor. |
171 | use of some extended instructions, and passes appropriate optimization | 171 | Enables use of some extended instructions, and passes appropriate |
172 | flags to GCC. | 172 | optimization flags to GCC. |
173 | 173 | ||
174 | config MCRUSOE | 174 | config MCRUSOE |
175 | bool "Crusoe" | 175 | bool "Crusoe" |
@@ -256,9 +256,11 @@ config MPSC | |||
256 | config MCORE2 | 256 | config MCORE2 |
257 | bool "Core 2/newer Xeon" | 257 | bool "Core 2/newer Xeon" |
258 | help | 258 | help |
259 | Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx) | 259 | |
260 | CPUs. You can distinguish newer from older Xeons by the CPU family | 260 | Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and |
261 | in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo) | 261 | 53xx) CPUs. You can distinguish newer from older Xeons by the CPU |
262 | family in /proc/cpuinfo. Newer ones have 6 and older ones 15 | ||
263 | (not a typo) | ||
262 | 264 | ||
263 | config GENERIC_CPU | 265 | config GENERIC_CPU |
264 | bool "Generic-x86-64" | 266 | bool "Generic-x86-64" |
@@ -318,14 +320,14 @@ config X86_PPRO_FENCE | |||
318 | bool "PentiumPro memory ordering errata workaround" | 320 | bool "PentiumPro memory ordering errata workaround" |
319 | depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1 | 321 | depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1 |
320 | help | 322 | help |
321 | Old PentiumPro multiprocessor systems had errata that could cause memory | 323 | Old PentiumPro multiprocessor systems had errata that could cause |
322 | operations to violate the x86 ordering standard in rare cases. Enabling this | 324 | memory operations to violate the x86 ordering standard in rare cases. |
323 | option will attempt to work around some (but not all) occurances of | 325 | Enabling this option will attempt to work around some (but not all) |
324 | this problem, at the cost of much heavier spinlock and memory barrier | 326 | occurances of this problem, at the cost of much heavier spinlock and |
325 | operations. | 327 | memory barrier operations. |
326 | 328 | ||
327 | If unsure, say n here. Even distro kernels should think twice before enabling | 329 | If unsure, say n here. Even distro kernels should think twice before |
328 | this: there are few systems, and an unlikely bug. | 330 | enabling this: there are few systems, and an unlikely bug. |
329 | 331 | ||
330 | config X86_F00F_BUG | 332 | config X86_F00F_BUG |
331 | def_bool y | 333 | def_bool y |
diff --git a/arch/x86/include/asm/a.out-core.h b/arch/x86/include/asm/a.out-core.h index 37822206083e..3c601f8224be 100644 --- a/arch/x86/include/asm/a.out-core.h +++ b/arch/x86/include/asm/a.out-core.h | |||
@@ -23,8 +23,6 @@ | |||
23 | */ | 23 | */ |
24 | static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | 24 | static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) |
25 | { | 25 | { |
26 | u16 gs; | ||
27 | |||
28 | /* changed the size calculations - should hopefully work better. lbt */ | 26 | /* changed the size calculations - should hopefully work better. lbt */ |
29 | dump->magic = CMAGIC; | 27 | dump->magic = CMAGIC; |
30 | dump->start_code = 0; | 28 | dump->start_code = 0; |
@@ -57,7 +55,7 @@ static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | |||
57 | dump->regs.ds = (u16)regs->ds; | 55 | dump->regs.ds = (u16)regs->ds; |
58 | dump->regs.es = (u16)regs->es; | 56 | dump->regs.es = (u16)regs->es; |
59 | dump->regs.fs = (u16)regs->fs; | 57 | dump->regs.fs = (u16)regs->fs; |
60 | savesegment(gs, gs); | 58 | savesegment(gs, dump->regs.gs); |
61 | dump->regs.orig_ax = regs->orig_ax; | 59 | dump->regs.orig_ax = regs->orig_ax; |
62 | dump->regs.ip = regs->ip; | 60 | dump->regs.ip = regs->ip; |
63 | dump->regs.cs = (u16)regs->cs; | 61 | dump->regs.cs = (u16)regs->cs; |
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index ea408dcba513..7301e60dc4a8 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
@@ -93,6 +93,7 @@ | |||
93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ | 93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ |
94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ | 94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ |
95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ | 95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ |
96 | #define X86_FEATURE_CLFLUSH_MONITOR (3*32+25) /* "" clflush reqd with monitor */ | ||
96 | 97 | ||
97 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 98 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
98 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ | 99 | #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ |
diff --git a/arch/x86/include/asm/math_emu.h b/arch/x86/include/asm/math_emu.h index 5a65b107ad58..031f6266f425 100644 --- a/arch/x86/include/asm/math_emu.h +++ b/arch/x86/include/asm/math_emu.h | |||
@@ -1,31 +1,18 @@ | |||
1 | #ifndef _ASM_X86_MATH_EMU_H | 1 | #ifndef _ASM_X86_MATH_EMU_H |
2 | #define _ASM_X86_MATH_EMU_H | 2 | #define _ASM_X86_MATH_EMU_H |
3 | 3 | ||
4 | #include <asm/ptrace.h> | ||
5 | #include <asm/vm86.h> | ||
6 | |||
4 | /* This structure matches the layout of the data saved to the stack | 7 | /* This structure matches the layout of the data saved to the stack |
5 | following a device-not-present interrupt, part of it saved | 8 | following a device-not-present interrupt, part of it saved |
6 | automatically by the 80386/80486. | 9 | automatically by the 80386/80486. |
7 | */ | 10 | */ |
8 | struct info { | 11 | struct math_emu_info { |
9 | long ___orig_eip; | 12 | long ___orig_eip; |
10 | long ___ebx; | 13 | union { |
11 | long ___ecx; | 14 | struct pt_regs *regs; |
12 | long ___edx; | 15 | struct kernel_vm86_regs *vm86; |
13 | long ___esi; | 16 | }; |
14 | long ___edi; | ||
15 | long ___ebp; | ||
16 | long ___eax; | ||
17 | long ___ds; | ||
18 | long ___es; | ||
19 | long ___fs; | ||
20 | long ___orig_eax; | ||
21 | long ___eip; | ||
22 | long ___cs; | ||
23 | long ___eflags; | ||
24 | long ___esp; | ||
25 | long ___ss; | ||
26 | long ___vm86_es; /* This and the following only in vm86 mode */ | ||
27 | long ___vm86_ds; | ||
28 | long ___vm86_fs; | ||
29 | long ___vm86_gs; | ||
30 | }; | 17 | }; |
31 | #endif /* _ASM_X86_MATH_EMU_H */ | 18 | #endif /* _ASM_X86_MATH_EMU_H */ |
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h index 62d14ce3cd00..bd22f2a3713f 100644 --- a/arch/x86/include/asm/mpspec.h +++ b/arch/x86/include/asm/mpspec.h | |||
@@ -60,6 +60,7 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, | |||
60 | u32 gsi); | 60 | u32 gsi); |
61 | extern void mp_config_acpi_legacy_irqs(void); | 61 | extern void mp_config_acpi_legacy_irqs(void); |
62 | extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); | 62 | extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low); |
63 | extern int acpi_probe_gsi(void); | ||
63 | #ifdef CONFIG_X86_IO_APIC | 64 | #ifdef CONFIG_X86_IO_APIC |
64 | extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, | 65 | extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, |
65 | u32 gsi, int triggering, int polarity); | 66 | u32 gsi, int triggering, int polarity); |
@@ -71,6 +72,11 @@ mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, | |||
71 | return 0; | 72 | return 0; |
72 | } | 73 | } |
73 | #endif | 74 | #endif |
75 | #else /* !CONFIG_ACPI: */ | ||
76 | static inline int acpi_probe_gsi(void) | ||
77 | { | ||
78 | return 0; | ||
79 | } | ||
74 | #endif /* CONFIG_ACPI */ | 80 | #endif /* CONFIG_ACPI */ |
75 | 81 | ||
76 | #define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) | 82 | #define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index c26c6bf4da00..ccd59f00fd5c 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -1404,6 +1404,7 @@ static inline int __raw_spin_is_contended(struct raw_spinlock *lock) | |||
1404 | { | 1404 | { |
1405 | return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock); | 1405 | return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock); |
1406 | } | 1406 | } |
1407 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
1407 | 1408 | ||
1408 | static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) | 1409 | static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) |
1409 | { | 1410 | { |
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 06bbcbd66e9c..4f5af8447d54 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
@@ -302,16 +302,30 @@ static inline pte_t pte_mkspecial(pte_t pte) | |||
302 | 302 | ||
303 | extern pteval_t __supported_pte_mask; | 303 | extern pteval_t __supported_pte_mask; |
304 | 304 | ||
305 | /* | ||
306 | * Mask out unsupported bits in a present pgprot. Non-present pgprots | ||
307 | * can use those bits for other purposes, so leave them be. | ||
308 | */ | ||
309 | static inline pgprotval_t massage_pgprot(pgprot_t pgprot) | ||
310 | { | ||
311 | pgprotval_t protval = pgprot_val(pgprot); | ||
312 | |||
313 | if (protval & _PAGE_PRESENT) | ||
314 | protval &= __supported_pte_mask; | ||
315 | |||
316 | return protval; | ||
317 | } | ||
318 | |||
305 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) | 319 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) |
306 | { | 320 | { |
307 | return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) | | 321 | return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) | |
308 | pgprot_val(pgprot)) & __supported_pte_mask); | 322 | massage_pgprot(pgprot)); |
309 | } | 323 | } |
310 | 324 | ||
311 | static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) | 325 | static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) |
312 | { | 326 | { |
313 | return __pmd((((phys_addr_t)page_nr << PAGE_SHIFT) | | 327 | return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) | |
314 | pgprot_val(pgprot)) & __supported_pte_mask); | 328 | massage_pgprot(pgprot)); |
315 | } | 329 | } |
316 | 330 | ||
317 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 331 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
@@ -323,7 +337,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
323 | * the newprot (if present): | 337 | * the newprot (if present): |
324 | */ | 338 | */ |
325 | val &= _PAGE_CHG_MASK; | 339 | val &= _PAGE_CHG_MASK; |
326 | val |= pgprot_val(newprot) & (~_PAGE_CHG_MASK) & __supported_pte_mask; | 340 | val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK; |
327 | 341 | ||
328 | return __pte(val); | 342 | return __pte(val); |
329 | } | 343 | } |
@@ -339,7 +353,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) | |||
339 | 353 | ||
340 | #define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK) | 354 | #define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK) |
341 | 355 | ||
342 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) | 356 | #define canon_pgprot(p) __pgprot(massage_pgprot(p)) |
343 | 357 | ||
344 | static inline int is_new_memtype_allowed(unsigned long flags, | 358 | static inline int is_new_memtype_allowed(unsigned long flags, |
345 | unsigned long new_flags) | 359 | unsigned long new_flags) |
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 48676b943b92..c15766a2969f 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
@@ -353,7 +353,7 @@ struct i387_soft_struct { | |||
353 | u8 no_update; | 353 | u8 no_update; |
354 | u8 rm; | 354 | u8 rm; |
355 | u8 alimit; | 355 | u8 alimit; |
356 | struct info *info; | 356 | struct math_emu_info *info; |
357 | u32 entry_eip; | 357 | u32 entry_eip; |
358 | }; | 358 | }; |
359 | 359 | ||
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h index d17c91981da2..8247e94ac6b1 100644 --- a/arch/x86/include/asm/spinlock.h +++ b/arch/x86/include/asm/spinlock.h | |||
@@ -245,6 +245,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock) | |||
245 | { | 245 | { |
246 | return __ticket_spin_is_contended(lock); | 246 | return __ticket_spin_is_contended(lock); |
247 | } | 247 | } |
248 | #define __raw_spin_is_contended __raw_spin_is_contended | ||
248 | 249 | ||
249 | static __always_inline void __raw_spin_lock(raw_spinlock_t *lock) | 250 | static __always_inline void __raw_spin_lock(raw_spinlock_t *lock) |
250 | { | 251 | { |
diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h index 2ee0a3bceedf..cf3bb053da0b 100644 --- a/arch/x86/include/asm/traps.h +++ b/arch/x86/include/asm/traps.h | |||
@@ -41,7 +41,7 @@ dotraplinkage void do_int3(struct pt_regs *, long); | |||
41 | dotraplinkage void do_overflow(struct pt_regs *, long); | 41 | dotraplinkage void do_overflow(struct pt_regs *, long); |
42 | dotraplinkage void do_bounds(struct pt_regs *, long); | 42 | dotraplinkage void do_bounds(struct pt_regs *, long); |
43 | dotraplinkage void do_invalid_op(struct pt_regs *, long); | 43 | dotraplinkage void do_invalid_op(struct pt_regs *, long); |
44 | dotraplinkage void do_device_not_available(struct pt_regs *, long); | 44 | dotraplinkage void do_device_not_available(struct pt_regs); |
45 | dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long); | 45 | dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long); |
46 | dotraplinkage void do_invalid_TSS(struct pt_regs *, long); | 46 | dotraplinkage void do_invalid_TSS(struct pt_regs *, long); |
47 | dotraplinkage void do_segment_not_present(struct pt_regs *, long); | 47 | dotraplinkage void do_segment_not_present(struct pt_regs *, long); |
@@ -77,7 +77,7 @@ extern int panic_on_unrecovered_nmi; | |||
77 | extern int kstack_depth_to_print; | 77 | extern int kstack_depth_to_print; |
78 | 78 | ||
79 | void math_error(void __user *); | 79 | void math_error(void __user *); |
80 | asmlinkage void math_emulate(long); | 80 | void math_emulate(struct math_emu_info *); |
81 | #ifdef CONFIG_X86_32 | 81 | #ifdef CONFIG_X86_32 |
82 | unsigned long patch_espfix_desc(unsigned long, unsigned long); | 82 | unsigned long patch_espfix_desc(unsigned long, unsigned long); |
83 | #else | 83 | #else |
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h index 7ef617ef1df3..4bd990ee43df 100644 --- a/arch/x86/include/asm/xen/page.h +++ b/arch/x86/include/asm/xen/page.h | |||
@@ -137,7 +137,7 @@ static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot) | |||
137 | pte_t pte; | 137 | pte_t pte; |
138 | 138 | ||
139 | pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) | | 139 | pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) | |
140 | (pgprot_val(pgprot) & __supported_pte_mask); | 140 | massage_pgprot(pgprot); |
141 | 141 | ||
142 | return pte; | 142 | return pte; |
143 | } | 143 | } |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 4cb5964f1499..c193ec3c695e 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -973,6 +973,29 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | |||
973 | nr_ioapics++; | 973 | nr_ioapics++; |
974 | } | 974 | } |
975 | 975 | ||
976 | int __init acpi_probe_gsi(void) | ||
977 | { | ||
978 | int idx; | ||
979 | int gsi; | ||
980 | int max_gsi = 0; | ||
981 | |||
982 | if (acpi_disabled) | ||
983 | return 0; | ||
984 | |||
985 | if (!acpi_ioapic) | ||
986 | return 0; | ||
987 | |||
988 | max_gsi = 0; | ||
989 | for (idx = 0; idx < nr_ioapics; idx++) { | ||
990 | gsi = mp_ioapic_routing[idx].gsi_end; | ||
991 | |||
992 | if (gsi > max_gsi) | ||
993 | max_gsi = gsi; | ||
994 | } | ||
995 | |||
996 | return max_gsi + 1; | ||
997 | } | ||
998 | |||
976 | static void assign_to_mp_irq(struct mpc_intsrc *m, | 999 | static void assign_to_mp_irq(struct mpc_intsrc *m, |
977 | struct mpc_intsrc *mp_irq) | 1000 | struct mpc_intsrc *mp_irq) |
978 | { | 1001 | { |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 5c28b37dea11..fb039cd345d8 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -939,10 +939,25 @@ static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) | |||
939 | free_cpumask_var(data->acpi_data.shared_cpu_map); | 939 | free_cpumask_var(data->acpi_data.shared_cpu_map); |
940 | } | 940 | } |
941 | 941 | ||
942 | static int get_transition_latency(struct powernow_k8_data *data) | ||
943 | { | ||
944 | int max_latency = 0; | ||
945 | int i; | ||
946 | for (i = 0; i < data->acpi_data.state_count; i++) { | ||
947 | int cur_latency = data->acpi_data.states[i].transition_latency | ||
948 | + data->acpi_data.states[i].bus_master_latency; | ||
949 | if (cur_latency > max_latency) | ||
950 | max_latency = cur_latency; | ||
951 | } | ||
952 | /* value in usecs, needs to be in nanoseconds */ | ||
953 | return 1000 * max_latency; | ||
954 | } | ||
955 | |||
942 | #else | 956 | #else |
943 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } | 957 | static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; } |
944 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } | 958 | static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; } |
945 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } | 959 | static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; } |
960 | static int get_transition_latency(struct powernow_k8_data *data) { return 0; } | ||
946 | #endif /* CONFIG_X86_POWERNOW_K8_ACPI */ | 961 | #endif /* CONFIG_X86_POWERNOW_K8_ACPI */ |
947 | 962 | ||
948 | /* Take a frequency, and issue the fid/vid transition command */ | 963 | /* Take a frequency, and issue the fid/vid transition command */ |
@@ -1173,7 +1188,13 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1173 | if (rc) { | 1188 | if (rc) { |
1174 | goto err_out; | 1189 | goto err_out; |
1175 | } | 1190 | } |
1176 | } | 1191 | /* Take a crude guess here. |
1192 | * That guess was in microseconds, so multiply with 1000 */ | ||
1193 | pol->cpuinfo.transition_latency = ( | ||
1194 | ((data->rvo + 8) * data->vstable * VST_UNITS_20US) + | ||
1195 | ((1 << data->irt) * 30)) * 1000; | ||
1196 | } else /* ACPI _PSS objects available */ | ||
1197 | pol->cpuinfo.transition_latency = get_transition_latency(data); | ||
1177 | 1198 | ||
1178 | /* only run on specific CPU from here on */ | 1199 | /* only run on specific CPU from here on */ |
1179 | oldmask = current->cpus_allowed; | 1200 | oldmask = current->cpus_allowed; |
@@ -1204,11 +1225,6 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1204 | cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu)); | 1225 | cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu)); |
1205 | data->available_cores = pol->cpus; | 1226 | data->available_cores = pol->cpus; |
1206 | 1227 | ||
1207 | /* Take a crude guess here. | ||
1208 | * That guess was in microseconds, so multiply with 1000 */ | ||
1209 | pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US) | ||
1210 | + (3 * (1 << data->irt) * 10)) * 1000; | ||
1211 | |||
1212 | if (cpu_family == CPU_HW_PSTATE) | 1228 | if (cpu_family == CPU_HW_PSTATE) |
1213 | pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate); | 1229 | pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate); |
1214 | else | 1230 | else |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 430e5c38a544..24ff26a38ade 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
@@ -291,6 +291,9 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
291 | ds_init_intel(c); | 291 | ds_init_intel(c); |
292 | } | 292 | } |
293 | 293 | ||
294 | if (c->x86 == 6 && c->x86_model == 29 && cpu_has_clflush) | ||
295 | set_cpu_cap(c, X86_FEATURE_CLFLUSH_MONITOR); | ||
296 | |||
294 | #ifdef CONFIG_X86_64 | 297 | #ifdef CONFIG_X86_64 |
295 | if (c->x86 == 15) | 298 | if (c->x86 == 15) |
296 | c->x86_cache_alignment = c->x86_clflush_size * 2; | 299 | c->x86_cache_alignment = c->x86_clflush_size * 2; |
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c index 1b43086b097a..231bdd3c5b1c 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c | |||
@@ -488,20 +488,21 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
488 | * ignore such a protection. | 488 | * ignore such a protection. |
489 | */ | 489 | */ |
490 | asm volatile( | 490 | asm volatile( |
491 | "1: " _ASM_MOV " (%[parent_old]), %[old]\n" | 491 | "1: " _ASM_MOV " (%[parent]), %[old]\n" |
492 | "2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n" | 492 | "2: " _ASM_MOV " %[return_hooker], (%[parent])\n" |
493 | " movl $0, %[faulted]\n" | 493 | " movl $0, %[faulted]\n" |
494 | "3:\n" | ||
494 | 495 | ||
495 | ".section .fixup, \"ax\"\n" | 496 | ".section .fixup, \"ax\"\n" |
496 | "3: movl $1, %[faulted]\n" | 497 | "4: movl $1, %[faulted]\n" |
498 | " jmp 3b\n" | ||
497 | ".previous\n" | 499 | ".previous\n" |
498 | 500 | ||
499 | _ASM_EXTABLE(1b, 3b) | 501 | _ASM_EXTABLE(1b, 4b) |
500 | _ASM_EXTABLE(2b, 3b) | 502 | _ASM_EXTABLE(2b, 4b) |
501 | 503 | ||
502 | : [parent_replaced] "=r" (parent), [old] "=r" (old), | 504 | : [old] "=r" (old), [faulted] "=r" (faulted) |
503 | [faulted] "=r" (faulted) | 505 | : [parent] "r" (parent), [return_hooker] "r" (return_hooker) |
504 | : [parent_old] "0" (parent), [return_hooker] "r" (return_hooker) | ||
505 | : "memory" | 506 | : "memory" |
506 | ); | 507 | ); |
507 | 508 | ||
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 64d5ad0b8add..388254f69a2a 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -897,7 +897,7 @@ static unsigned long hpet_rtc_flags; | |||
897 | static int hpet_prev_update_sec; | 897 | static int hpet_prev_update_sec; |
898 | static struct rtc_time hpet_alarm_time; | 898 | static struct rtc_time hpet_alarm_time; |
899 | static unsigned long hpet_pie_count; | 899 | static unsigned long hpet_pie_count; |
900 | static unsigned long hpet_t1_cmp; | 900 | static u32 hpet_t1_cmp; |
901 | static unsigned long hpet_default_delta; | 901 | static unsigned long hpet_default_delta; |
902 | static unsigned long hpet_pie_delta; | 902 | static unsigned long hpet_pie_delta; |
903 | static unsigned long hpet_pie_limit; | 903 | static unsigned long hpet_pie_limit; |
@@ -905,6 +905,14 @@ static unsigned long hpet_pie_limit; | |||
905 | static rtc_irq_handler irq_handler; | 905 | static rtc_irq_handler irq_handler; |
906 | 906 | ||
907 | /* | 907 | /* |
908 | * Check that the hpet counter c1 is ahead of the c2 | ||
909 | */ | ||
910 | static inline int hpet_cnt_ahead(u32 c1, u32 c2) | ||
911 | { | ||
912 | return (s32)(c2 - c1) < 0; | ||
913 | } | ||
914 | |||
915 | /* | ||
908 | * Registers a IRQ handler. | 916 | * Registers a IRQ handler. |
909 | */ | 917 | */ |
910 | int hpet_register_irq_handler(rtc_irq_handler handler) | 918 | int hpet_register_irq_handler(rtc_irq_handler handler) |
@@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void) | |||
1075 | hpet_t1_cmp += delta; | 1083 | hpet_t1_cmp += delta; |
1076 | hpet_writel(hpet_t1_cmp, HPET_T1_CMP); | 1084 | hpet_writel(hpet_t1_cmp, HPET_T1_CMP); |
1077 | lost_ints++; | 1085 | lost_ints++; |
1078 | } while ((long)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0); | 1086 | } while (!hpet_cnt_ahead(hpet_t1_cmp, hpet_readl(HPET_COUNTER))); |
1079 | 1087 | ||
1080 | if (lost_ints) { | 1088 | if (lost_ints) { |
1081 | if (hpet_rtc_flags & RTC_PIE) | 1089 | if (hpet_rtc_flags & RTC_PIE) |
diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index dbd6c1d1b638..b42ca694dc68 100644 --- a/arch/x86/kernel/i8237.c +++ b/arch/x86/kernel/i8237.c | |||
@@ -28,10 +28,10 @@ static int i8237A_resume(struct sys_device *dev) | |||
28 | 28 | ||
29 | flags = claim_dma_lock(); | 29 | flags = claim_dma_lock(); |
30 | 30 | ||
31 | dma_outb(DMA1_RESET_REG, 0); | 31 | dma_outb(0, DMA1_RESET_REG); |
32 | dma_outb(DMA2_RESET_REG, 0); | 32 | dma_outb(0, DMA2_RESET_REG); |
33 | 33 | ||
34 | for (i = 0;i < 8;i++) { | 34 | for (i = 0; i < 8; i++) { |
35 | set_dma_addr(i, 0x000000); | 35 | set_dma_addr(i, 0x000000); |
36 | /* DMA count is a bit weird so this is not 0 */ | 36 | /* DMA count is a bit weird so this is not 0 */ |
37 | set_dma_count(i, 1); | 37 | set_dma_count(i, 1); |
@@ -51,14 +51,14 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state) | |||
51 | } | 51 | } |
52 | 52 | ||
53 | static struct sysdev_class i8237_sysdev_class = { | 53 | static struct sysdev_class i8237_sysdev_class = { |
54 | .name = "i8237", | 54 | .name = "i8237", |
55 | .suspend = i8237A_suspend, | 55 | .suspend = i8237A_suspend, |
56 | .resume = i8237A_resume, | 56 | .resume = i8237A_resume, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | static struct sys_device device_i8237A = { | 59 | static struct sys_device device_i8237A = { |
60 | .id = 0, | 60 | .id = 0, |
61 | .cls = &i8237_sysdev_class, | 61 | .cls = &i8237_sysdev_class, |
62 | }; | 62 | }; |
63 | 63 | ||
64 | static int __init i8237A_init_sysfs(void) | 64 | static int __init i8237A_init_sysfs(void) |
@@ -68,5 +68,4 @@ static int __init i8237A_init_sysfs(void) | |||
68 | error = sysdev_register(&device_i8237A); | 68 | error = sysdev_register(&device_i8237A); |
69 | return error; | 69 | return error; |
70 | } | 70 | } |
71 | |||
72 | device_initcall(i8237A_init_sysfs); | 71 | device_initcall(i8237A_init_sysfs); |
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index 0a7f6d6b1206..f61d945620b3 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c | |||
@@ -3846,14 +3846,24 @@ int __init io_apic_get_redir_entries (int ioapic) | |||
3846 | 3846 | ||
3847 | void __init probe_nr_irqs_gsi(void) | 3847 | void __init probe_nr_irqs_gsi(void) |
3848 | { | 3848 | { |
3849 | int idx; | ||
3850 | int nr = 0; | 3849 | int nr = 0; |
3851 | 3850 | ||
3852 | for (idx = 0; idx < nr_ioapics; idx++) | 3851 | nr = acpi_probe_gsi(); |
3853 | nr += io_apic_get_redir_entries(idx) + 1; | 3852 | if (nr > nr_irqs_gsi) { |
3854 | |||
3855 | if (nr > nr_irqs_gsi) | ||
3856 | nr_irqs_gsi = nr; | 3853 | nr_irqs_gsi = nr; |
3854 | } else { | ||
3855 | /* for acpi=off or acpi is not compiled in */ | ||
3856 | int idx; | ||
3857 | |||
3858 | nr = 0; | ||
3859 | for (idx = 0; idx < nr_ioapics; idx++) | ||
3860 | nr += io_apic_get_redir_entries(idx) + 1; | ||
3861 | |||
3862 | if (nr > nr_irqs_gsi) | ||
3863 | nr_irqs_gsi = nr; | ||
3864 | } | ||
3865 | |||
3866 | printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi); | ||
3857 | } | 3867 | } |
3858 | 3868 | ||
3859 | #ifdef CONFIG_SPARSE_IRQ | 3869 | #ifdef CONFIG_SPARSE_IRQ |
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index e68bb9e30864..6d12f7e37f8c 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -180,6 +180,9 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx) | |||
180 | 180 | ||
181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); | 181 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); |
182 | if (!need_resched()) { | 182 | if (!need_resched()) { |
183 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
184 | clflush((void *)¤t_thread_info()->flags); | ||
185 | |||
183 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 186 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
184 | smp_mb(); | 187 | smp_mb(); |
185 | if (!need_resched()) | 188 | if (!need_resched()) |
@@ -194,6 +197,9 @@ static void mwait_idle(void) | |||
194 | struct power_trace it; | 197 | struct power_trace it; |
195 | if (!need_resched()) { | 198 | if (!need_resched()) { |
196 | trace_power_start(&it, POWER_CSTATE, 1); | 199 | trace_power_start(&it, POWER_CSTATE, 1); |
200 | if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR)) | ||
201 | clflush((void *)¤t_thread_info()->flags); | ||
202 | |||
197 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 203 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
198 | smp_mb(); | 204 | smp_mb(); |
199 | if (!need_resched()) | 205 | if (!need_resched()) |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index c422eebb0c58..8eb169e45584 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/uaccess.h> | 41 | #include <linux/uaccess.h> |
42 | #include <linux/io.h> | 42 | #include <linux/io.h> |
43 | #include <linux/ftrace.h> | 43 | #include <linux/ftrace.h> |
44 | #include <linux/dmi.h> | ||
44 | 45 | ||
45 | #include <asm/pgtable.h> | 46 | #include <asm/pgtable.h> |
46 | #include <asm/system.h> | 47 | #include <asm/system.h> |
@@ -168,14 +169,18 @@ void __show_regs(struct pt_regs *regs, int all) | |||
168 | unsigned long d0, d1, d2, d3, d6, d7; | 169 | unsigned long d0, d1, d2, d3, d6, d7; |
169 | unsigned int fsindex, gsindex; | 170 | unsigned int fsindex, gsindex; |
170 | unsigned int ds, cs, es; | 171 | unsigned int ds, cs, es; |
172 | const char *board; | ||
171 | 173 | ||
172 | printk("\n"); | 174 | printk("\n"); |
173 | print_modules(); | 175 | print_modules(); |
174 | printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s\n", | 176 | board = dmi_get_system_info(DMI_PRODUCT_NAME); |
177 | if (!board) | ||
178 | board = ""; | ||
179 | printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s %s\n", | ||
175 | current->pid, current->comm, print_tainted(), | 180 | current->pid, current->comm, print_tainted(), |
176 | init_utsname()->release, | 181 | init_utsname()->release, |
177 | (int)strcspn(init_utsname()->version, " "), | 182 | (int)strcspn(init_utsname()->version, " "), |
178 | init_utsname()->version); | 183 | init_utsname()->version, board); |
179 | printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip); | 184 | printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip); |
180 | printk_address(regs->ip, 1); | 185 | printk_address(regs->ip, 1); |
181 | printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, | 186 | printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index f41c4486c270..d5d6693b706d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -607,7 +607,7 @@ struct x86_quirks *x86_quirks __initdata = &default_x86_quirks; | |||
607 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) | 607 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) |
608 | { | 608 | { |
609 | printk(KERN_NOTICE | 609 | printk(KERN_NOTICE |
610 | "%s detected: BIOS may corrupt low RAM, working it around.\n", | 610 | "%s detected: BIOS may corrupt low RAM, working around it.\n", |
611 | d->ident); | 611 | d->ident); |
612 | 612 | ||
613 | e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED); | 613 | e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED); |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index d36a502d87ab..17483fe98e9c 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -895,7 +895,7 @@ asmlinkage void math_state_restore(void) | |||
895 | EXPORT_SYMBOL_GPL(math_state_restore); | 895 | EXPORT_SYMBOL_GPL(math_state_restore); |
896 | 896 | ||
897 | #ifndef CONFIG_MATH_EMULATION | 897 | #ifndef CONFIG_MATH_EMULATION |
898 | asmlinkage void math_emulate(long arg) | 898 | void math_emulate(struct math_emu_info *info) |
899 | { | 899 | { |
900 | printk(KERN_EMERG | 900 | printk(KERN_EMERG |
901 | "math-emulation not enabled and no coprocessor found.\n"); | 901 | "math-emulation not enabled and no coprocessor found.\n"); |
@@ -905,16 +905,19 @@ asmlinkage void math_emulate(long arg) | |||
905 | } | 905 | } |
906 | #endif /* CONFIG_MATH_EMULATION */ | 906 | #endif /* CONFIG_MATH_EMULATION */ |
907 | 907 | ||
908 | dotraplinkage void __kprobes | 908 | dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs) |
909 | do_device_not_available(struct pt_regs *regs, long error) | ||
910 | { | 909 | { |
911 | #ifdef CONFIG_X86_32 | 910 | #ifdef CONFIG_X86_32 |
912 | if (read_cr0() & X86_CR0_EM) { | 911 | if (read_cr0() & X86_CR0_EM) { |
913 | conditional_sti(regs); | 912 | struct math_emu_info info = { }; |
914 | math_emulate(0); | 913 | |
914 | conditional_sti(®s); | ||
915 | |||
916 | info.regs = ®s; | ||
917 | math_emulate(&info); | ||
915 | } else { | 918 | } else { |
916 | math_state_restore(); /* interrupts still off */ | 919 | math_state_restore(); /* interrupts still off */ |
917 | conditional_sti(regs); | 920 | conditional_sti(®s); |
918 | } | 921 | } |
919 | #else | 922 | #else |
920 | math_state_restore(); | 923 | math_state_restore(); |
diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c index 1d3302cc2ddf..bef58b4982db 100644 --- a/arch/x86/kernel/vmi_32.c +++ b/arch/x86/kernel/vmi_32.c | |||
@@ -321,6 +321,16 @@ static void vmi_release_pmd(unsigned long pfn) | |||
321 | } | 321 | } |
322 | 322 | ||
323 | /* | 323 | /* |
324 | * We use the pgd_free hook for releasing the pgd page: | ||
325 | */ | ||
326 | static void vmi_pgd_free(struct mm_struct *mm, pgd_t *pgd) | ||
327 | { | ||
328 | unsigned long pfn = __pa(pgd) >> PAGE_SHIFT; | ||
329 | |||
330 | vmi_ops.release_page(pfn, VMI_PAGE_L2); | ||
331 | } | ||
332 | |||
333 | /* | ||
324 | * Helper macros for MMU update flags. We can defer updates until a flush | 334 | * Helper macros for MMU update flags. We can defer updates until a flush |
325 | * or page invalidation only if the update is to the current address space | 335 | * or page invalidation only if the update is to the current address space |
326 | * (otherwise, there is no flush). We must check against init_mm, since | 336 | * (otherwise, there is no flush). We must check against init_mm, since |
@@ -762,6 +772,7 @@ static inline int __init activate_vmi(void) | |||
762 | if (vmi_ops.release_page) { | 772 | if (vmi_ops.release_page) { |
763 | pv_mmu_ops.release_pte = vmi_release_pte; | 773 | pv_mmu_ops.release_pte = vmi_release_pte; |
764 | pv_mmu_ops.release_pmd = vmi_release_pmd; | 774 | pv_mmu_ops.release_pmd = vmi_release_pmd; |
775 | pv_mmu_ops.pgd_free = vmi_pgd_free; | ||
765 | } | 776 | } |
766 | 777 | ||
767 | /* Set linear is needed in all cases */ | 778 | /* Set linear is needed in all cases */ |
diff --git a/arch/x86/math-emu/fpu_entry.c b/arch/x86/math-emu/fpu_entry.c index c7b06feb139b..5d87f586f8d7 100644 --- a/arch/x86/math-emu/fpu_entry.c +++ b/arch/x86/math-emu/fpu_entry.c | |||
@@ -131,7 +131,7 @@ u_char emulating = 0; | |||
131 | static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip, | 131 | static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip, |
132 | overrides * override); | 132 | overrides * override); |
133 | 133 | ||
134 | asmlinkage void math_emulate(long arg) | 134 | void math_emulate(struct math_emu_info *info) |
135 | { | 135 | { |
136 | u_char FPU_modrm, byte1; | 136 | u_char FPU_modrm, byte1; |
137 | unsigned short code; | 137 | unsigned short code; |
@@ -161,7 +161,7 @@ asmlinkage void math_emulate(long arg) | |||
161 | RE_ENTRANT_CHECK_ON; | 161 | RE_ENTRANT_CHECK_ON; |
162 | #endif /* RE_ENTRANT_CHECKING */ | 162 | #endif /* RE_ENTRANT_CHECKING */ |
163 | 163 | ||
164 | SETUP_DATA_AREA(arg); | 164 | FPU_info = info; |
165 | 165 | ||
166 | FPU_ORIG_EIP = FPU_EIP; | 166 | FPU_ORIG_EIP = FPU_EIP; |
167 | 167 | ||
@@ -659,7 +659,7 @@ static int valid_prefix(u_char *Byte, u_char __user **fpu_eip, | |||
659 | } | 659 | } |
660 | } | 660 | } |
661 | 661 | ||
662 | void math_abort(struct info *info, unsigned int signal) | 662 | void math_abort(struct math_emu_info *info, unsigned int signal) |
663 | { | 663 | { |
664 | FPU_EIP = FPU_ORIG_EIP; | 664 | FPU_EIP = FPU_ORIG_EIP; |
665 | current->thread.trap_no = 16; | 665 | current->thread.trap_no = 16; |
diff --git a/arch/x86/math-emu/fpu_proto.h b/arch/x86/math-emu/fpu_proto.h index aa49b6a0d850..9779df436b7d 100644 --- a/arch/x86/math-emu/fpu_proto.h +++ b/arch/x86/math-emu/fpu_proto.h | |||
@@ -51,8 +51,8 @@ extern void ffreep(void); | |||
51 | extern void fst_i_(void); | 51 | extern void fst_i_(void); |
52 | extern void fstp_i(void); | 52 | extern void fstp_i(void); |
53 | /* fpu_entry.c */ | 53 | /* fpu_entry.c */ |
54 | asmlinkage extern void math_emulate(long arg); | 54 | extern void math_emulate(struct math_emu_info *info); |
55 | extern void math_abort(struct info *info, unsigned int signal); | 55 | extern void math_abort(struct math_emu_info *info, unsigned int signal); |
56 | /* fpu_etc.c */ | 56 | /* fpu_etc.c */ |
57 | extern void FPU_etc(void); | 57 | extern void FPU_etc(void); |
58 | /* fpu_tags.c */ | 58 | /* fpu_tags.c */ |
diff --git a/arch/x86/math-emu/fpu_system.h b/arch/x86/math-emu/fpu_system.h index 13488fa153e0..50fa0ec2c8a5 100644 --- a/arch/x86/math-emu/fpu_system.h +++ b/arch/x86/math-emu/fpu_system.h | |||
@@ -16,10 +16,6 @@ | |||
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
18 | 18 | ||
19 | /* This sets the pointer FPU_info to point to the argument part | ||
20 | of the stack frame of math_emulate() */ | ||
21 | #define SETUP_DATA_AREA(arg) FPU_info = (struct info *) &arg | ||
22 | |||
23 | /* s is always from a cpu register, and the cpu does bounds checking | 19 | /* s is always from a cpu register, and the cpu does bounds checking |
24 | * during register load --> no further bounds checks needed */ | 20 | * during register load --> no further bounds checks needed */ |
25 | #define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3]) | 21 | #define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3]) |
@@ -38,12 +34,12 @@ | |||
38 | #define I387 (current->thread.xstate) | 34 | #define I387 (current->thread.xstate) |
39 | #define FPU_info (I387->soft.info) | 35 | #define FPU_info (I387->soft.info) |
40 | 36 | ||
41 | #define FPU_CS (*(unsigned short *) &(FPU_info->___cs)) | 37 | #define FPU_CS (*(unsigned short *) &(FPU_info->regs->cs)) |
42 | #define FPU_SS (*(unsigned short *) &(FPU_info->___ss)) | 38 | #define FPU_SS (*(unsigned short *) &(FPU_info->regs->ss)) |
43 | #define FPU_DS (*(unsigned short *) &(FPU_info->___ds)) | 39 | #define FPU_DS (*(unsigned short *) &(FPU_info->regs->ds)) |
44 | #define FPU_EAX (FPU_info->___eax) | 40 | #define FPU_EAX (FPU_info->regs->ax) |
45 | #define FPU_EFLAGS (FPU_info->___eflags) | 41 | #define FPU_EFLAGS (FPU_info->regs->flags) |
46 | #define FPU_EIP (FPU_info->___eip) | 42 | #define FPU_EIP (FPU_info->regs->ip) |
47 | #define FPU_ORIG_EIP (FPU_info->___orig_eip) | 43 | #define FPU_ORIG_EIP (FPU_info->___orig_eip) |
48 | 44 | ||
49 | #define FPU_lookahead (I387->soft.lookahead) | 45 | #define FPU_lookahead (I387->soft.lookahead) |
diff --git a/arch/x86/math-emu/get_address.c b/arch/x86/math-emu/get_address.c index d701e2b39e44..420b3b6e3915 100644 --- a/arch/x86/math-emu/get_address.c +++ b/arch/x86/math-emu/get_address.c | |||
@@ -29,46 +29,43 @@ | |||
29 | #define FPU_WRITE_BIT 0x10 | 29 | #define FPU_WRITE_BIT 0x10 |
30 | 30 | ||
31 | static int reg_offset[] = { | 31 | static int reg_offset[] = { |
32 | offsetof(struct info, ___eax), | 32 | offsetof(struct pt_regs, ax), |
33 | offsetof(struct info, ___ecx), | 33 | offsetof(struct pt_regs, cx), |
34 | offsetof(struct info, ___edx), | 34 | offsetof(struct pt_regs, dx), |
35 | offsetof(struct info, ___ebx), | 35 | offsetof(struct pt_regs, bx), |
36 | offsetof(struct info, ___esp), | 36 | offsetof(struct pt_regs, sp), |
37 | offsetof(struct info, ___ebp), | 37 | offsetof(struct pt_regs, bp), |
38 | offsetof(struct info, ___esi), | 38 | offsetof(struct pt_regs, si), |
39 | offsetof(struct info, ___edi) | 39 | offsetof(struct pt_regs, di) |
40 | }; | 40 | }; |
41 | 41 | ||
42 | #define REG_(x) (*(long *)(reg_offset[(x)]+(u_char *) FPU_info)) | 42 | #define REG_(x) (*(long *)(reg_offset[(x)] + (u_char *)FPU_info->regs)) |
43 | 43 | ||
44 | static int reg_offset_vm86[] = { | 44 | static int reg_offset_vm86[] = { |
45 | offsetof(struct info, ___cs), | 45 | offsetof(struct pt_regs, cs), |
46 | offsetof(struct info, ___vm86_ds), | 46 | offsetof(struct kernel_vm86_regs, ds), |
47 | offsetof(struct info, ___vm86_es), | 47 | offsetof(struct kernel_vm86_regs, es), |
48 | offsetof(struct info, ___vm86_fs), | 48 | offsetof(struct kernel_vm86_regs, fs), |
49 | offsetof(struct info, ___vm86_gs), | 49 | offsetof(struct kernel_vm86_regs, gs), |
50 | offsetof(struct info, ___ss), | 50 | offsetof(struct pt_regs, ss), |
51 | offsetof(struct info, ___vm86_ds) | 51 | offsetof(struct kernel_vm86_regs, ds) |
52 | }; | 52 | }; |
53 | 53 | ||
54 | #define VM86_REG_(x) (*(unsigned short *) \ | 54 | #define VM86_REG_(x) (*(unsigned short *) \ |
55 | (reg_offset_vm86[((unsigned)x)]+(u_char *) FPU_info)) | 55 | (reg_offset_vm86[((unsigned)x)] + (u_char *)FPU_info->regs)) |
56 | |||
57 | /* This dummy, gs is not saved on the stack. */ | ||
58 | #define ___GS ___ds | ||
59 | 56 | ||
60 | static int reg_offset_pm[] = { | 57 | static int reg_offset_pm[] = { |
61 | offsetof(struct info, ___cs), | 58 | offsetof(struct pt_regs, cs), |
62 | offsetof(struct info, ___ds), | 59 | offsetof(struct pt_regs, ds), |
63 | offsetof(struct info, ___es), | 60 | offsetof(struct pt_regs, es), |
64 | offsetof(struct info, ___fs), | 61 | offsetof(struct pt_regs, fs), |
65 | offsetof(struct info, ___GS), | 62 | offsetof(struct pt_regs, ds), /* dummy, not saved on stack */ |
66 | offsetof(struct info, ___ss), | 63 | offsetof(struct pt_regs, ss), |
67 | offsetof(struct info, ___ds) | 64 | offsetof(struct pt_regs, ds) |
68 | }; | 65 | }; |
69 | 66 | ||
70 | #define PM_REG_(x) (*(unsigned short *) \ | 67 | #define PM_REG_(x) (*(unsigned short *) \ |
71 | (reg_offset_pm[((unsigned)x)]+(u_char *) FPU_info)) | 68 | (reg_offset_pm[((unsigned)x)] + (u_char *)FPU_info->regs)) |
72 | 69 | ||
73 | /* Decode the SIB byte. This function assumes mod != 0 */ | 70 | /* Decode the SIB byte. This function assumes mod != 0 */ |
74 | static int sib(int mod, unsigned long *fpu_eip) | 71 | static int sib(int mod, unsigned long *fpu_eip) |
@@ -349,34 +346,34 @@ void __user *FPU_get_address_16(u_char FPU_modrm, unsigned long *fpu_eip, | |||
349 | } | 346 | } |
350 | switch (rm) { | 347 | switch (rm) { |
351 | case 0: | 348 | case 0: |
352 | address += FPU_info->___ebx + FPU_info->___esi; | 349 | address += FPU_info->regs->bx + FPU_info->regs->si; |
353 | break; | 350 | break; |
354 | case 1: | 351 | case 1: |
355 | address += FPU_info->___ebx + FPU_info->___edi; | 352 | address += FPU_info->regs->bx + FPU_info->regs->di; |
356 | break; | 353 | break; |
357 | case 2: | 354 | case 2: |
358 | address += FPU_info->___ebp + FPU_info->___esi; | 355 | address += FPU_info->regs->bp + FPU_info->regs->si; |
359 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 356 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
360 | addr_modes.override.segment = PREFIX_SS_; | 357 | addr_modes.override.segment = PREFIX_SS_; |
361 | break; | 358 | break; |
362 | case 3: | 359 | case 3: |
363 | address += FPU_info->___ebp + FPU_info->___edi; | 360 | address += FPU_info->regs->bp + FPU_info->regs->di; |
364 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 361 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
365 | addr_modes.override.segment = PREFIX_SS_; | 362 | addr_modes.override.segment = PREFIX_SS_; |
366 | break; | 363 | break; |
367 | case 4: | 364 | case 4: |
368 | address += FPU_info->___esi; | 365 | address += FPU_info->regs->si; |
369 | break; | 366 | break; |
370 | case 5: | 367 | case 5: |
371 | address += FPU_info->___edi; | 368 | address += FPU_info->regs->di; |
372 | break; | 369 | break; |
373 | case 6: | 370 | case 6: |
374 | address += FPU_info->___ebp; | 371 | address += FPU_info->regs->bp; |
375 | if (addr_modes.override.segment == PREFIX_DEFAULT) | 372 | if (addr_modes.override.segment == PREFIX_DEFAULT) |
376 | addr_modes.override.segment = PREFIX_SS_; | 373 | addr_modes.override.segment = PREFIX_SS_; |
377 | break; | 374 | break; |
378 | case 7: | 375 | case 7: |
379 | address += FPU_info->___ebx; | 376 | address += FPU_info->regs->bx; |
380 | break; | 377 | break; |
381 | } | 378 | } |
382 | 379 | ||