diff options
58 files changed, 256 insertions, 128 deletions
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 03e37af315d7..0453dcc757b4 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -839,8 +839,11 @@ static int __init topology_init(void) | |||
839 | { | 839 | { |
840 | int cpu; | 840 | int cpu; |
841 | 841 | ||
842 | for_each_possible_cpu(cpu) | 842 | for_each_possible_cpu(cpu) { |
843 | register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu); | 843 | struct cpuinfo_arm *cpuinfo = &per_cpu(cpu_data, cpu); |
844 | cpuinfo->cpu.hotpluggable = 1; | ||
845 | register_cpu(&cpuinfo->cpu, cpu); | ||
846 | } | ||
844 | 847 | ||
845 | return 0; | 848 | return 0; |
846 | } | 849 | } |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 5f29018a6533..656f0ca52782 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -542,6 +542,8 @@ config QEMU | |||
542 | select SYS_SUPPORTS_LITTLE_ENDIAN | 542 | select SYS_SUPPORTS_LITTLE_ENDIAN |
543 | select ARCH_SPARSEMEM_ENABLE | 543 | select ARCH_SPARSEMEM_ENABLE |
544 | select GENERIC_HARDIRQS_NO__DO_IRQ | 544 | select GENERIC_HARDIRQS_NO__DO_IRQ |
545 | select NR_CPUS_DEFAULT_1 | ||
546 | select SYS_SUPPORTS_SMP | ||
545 | help | 547 | help |
546 | Qemu is a software emulator which among other architectures also | 548 | Qemu is a software emulator which among other architectures also |
547 | can simulate a MIPS32 4Kc system. This patch adds support for the | 549 | can simulate a MIPS32 4Kc system. This patch adds support for the |
@@ -1805,6 +1807,9 @@ config SMP | |||
1805 | config SYS_SUPPORTS_SMP | 1807 | config SYS_SUPPORTS_SMP |
1806 | bool | 1808 | bool |
1807 | 1809 | ||
1810 | config NR_CPUS_DEFAULT_1 | ||
1811 | bool | ||
1812 | |||
1808 | config NR_CPUS_DEFAULT_2 | 1813 | config NR_CPUS_DEFAULT_2 |
1809 | bool | 1814 | bool |
1810 | 1815 | ||
@@ -1825,8 +1830,9 @@ config NR_CPUS_DEFAULT_64 | |||
1825 | 1830 | ||
1826 | config NR_CPUS | 1831 | config NR_CPUS |
1827 | int "Maximum number of CPUs (2-64)" | 1832 | int "Maximum number of CPUs (2-64)" |
1828 | range 2 64 | 1833 | range 1 64 if NR_CPUS_DEFAULT_1 |
1829 | depends on SMP | 1834 | depends on SMP |
1835 | default "1" if NR_CPUS_DEFAULT_1 | ||
1830 | default "2" if NR_CPUS_DEFAULT_2 | 1836 | default "2" if NR_CPUS_DEFAULT_2 |
1831 | default "4" if NR_CPUS_DEFAULT_4 | 1837 | default "4" if NR_CPUS_DEFAULT_4 |
1832 | default "8" if NR_CPUS_DEFAULT_8 | 1838 | default "8" if NR_CPUS_DEFAULT_8 |
@@ -1837,10 +1843,13 @@ config NR_CPUS | |||
1837 | This allows you to specify the maximum number of CPUs which this | 1843 | This allows you to specify the maximum number of CPUs which this |
1838 | kernel will support. The maximum supported value is 32 for 32-bit | 1844 | kernel will support. The maximum supported value is 32 for 32-bit |
1839 | kernel and 64 for 64-bit kernels; the minimum value which makes | 1845 | kernel and 64 for 64-bit kernels; the minimum value which makes |
1840 | sense is 2. | 1846 | sense is 1 for Qemu (useful only for kernel debugging purposes) |
1847 | and 2 for all others. | ||
1841 | 1848 | ||
1842 | This is purely to save memory - each supported CPU adds | 1849 | This is purely to save memory - each supported CPU adds |
1843 | approximately eight kilobytes to the kernel image. | 1850 | approximately eight kilobytes to the kernel image. For best |
1851 | performance should round up your number of processors to the next | ||
1852 | power of two. | ||
1844 | 1853 | ||
1845 | # | 1854 | # |
1846 | # Timer Interrupt Frequency Configuration | 1855 | # Timer Interrupt Frequency Configuration |
diff --git a/arch/mips/ddb5xxx/ddb5477/irq.c b/arch/mips/ddb5xxx/ddb5477/irq.c index 2b23234a5b95..faa4a506bf82 100644 --- a/arch/mips/ddb5xxx/ddb5477/irq.c +++ b/arch/mips/ddb5xxx/ddb5477/irq.c | |||
@@ -194,7 +194,7 @@ static void vrc5477_irq_dispatch(void) | |||
194 | 194 | ||
195 | asmlinkage void plat_irq_dispatch(void) | 195 | asmlinkage void plat_irq_dispatch(void) |
196 | { | 196 | { |
197 | unsigned int pending = read_c0_cause() & read_c0_status(); | 197 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
198 | 198 | ||
199 | if (pending & STATUSF_IP7) | 199 | if (pending & STATUSF_IP7) |
200 | do_IRQ(CPU_IRQ_BASE + 7); | 200 | do_IRQ(CPU_IRQ_BASE + 7); |
diff --git a/arch/mips/emma2rh/markeins/irq.c b/arch/mips/emma2rh/markeins/irq.c index e26630026375..6bcf6a06367a 100644 --- a/arch/mips/emma2rh/markeins/irq.c +++ b/arch/mips/emma2rh/markeins/irq.c | |||
@@ -115,7 +115,7 @@ void __init arch_init_irq(void) | |||
115 | 115 | ||
116 | asmlinkage void plat_irq_dispatch(void) | 116 | asmlinkage void plat_irq_dispatch(void) |
117 | { | 117 | { |
118 | unsigned int pending = read_c0_status() & read_c0_cause(); | 118 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
119 | 119 | ||
120 | if (pending & STATUSF_IP7) | 120 | if (pending & STATUSF_IP7) |
121 | do_IRQ(CPU_IRQ_BASE + 7); | 121 | do_IRQ(CPU_IRQ_BASE + 7); |
diff --git a/arch/mips/gt64120/ev64120/irq.c b/arch/mips/gt64120/ev64120/irq.c index 04572b9c9642..64e4c80b6139 100644 --- a/arch/mips/gt64120/ev64120/irq.c +++ b/arch/mips/gt64120/ev64120/irq.c | |||
@@ -48,7 +48,7 @@ | |||
48 | 48 | ||
49 | asmlinkage void plat_irq_dispatch(void) | 49 | asmlinkage void plat_irq_dispatch(void) |
50 | { | 50 | { |
51 | unsigned int pending = read_c0_status() & read_c0_cause(); | 51 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
52 | 52 | ||
53 | if (pending & STATUSF_IP4) /* int2 hardware line (timer) */ | 53 | if (pending & STATUSF_IP4) /* int2 hardware line (timer) */ |
54 | do_IRQ(4); | 54 | do_IRQ(4); |
diff --git a/arch/mips/gt64120/wrppmc/irq.c b/arch/mips/gt64120/wrppmc/irq.c index d3d96591780e..06177bf5b1d6 100644 --- a/arch/mips/gt64120/wrppmc/irq.c +++ b/arch/mips/gt64120/wrppmc/irq.c | |||
@@ -32,7 +32,7 @@ | |||
32 | 32 | ||
33 | asmlinkage void plat_irq_dispatch(void) | 33 | asmlinkage void plat_irq_dispatch(void) |
34 | { | 34 | { |
35 | unsigned int pending = read_c0_status() & read_c0_cause(); | 35 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
36 | 36 | ||
37 | if (pending & STATUSF_IP7) | 37 | if (pending & STATUSF_IP7) |
38 | do_IRQ(WRPPMC_MIPS_TIMER_IRQ); /* CPU Compare/Count internal timer */ | 38 | do_IRQ(WRPPMC_MIPS_TIMER_IRQ); /* CPU Compare/Count internal timer */ |
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index 295892e4ce53..015cf4bb51dd 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
@@ -122,7 +122,7 @@ static void ll_local_dev(void) | |||
122 | 122 | ||
123 | asmlinkage void plat_irq_dispatch(void) | 123 | asmlinkage void plat_irq_dispatch(void) |
124 | { | 124 | { |
125 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; | 125 | unsigned int pending = read_c0_cause() & read_c0_status(); |
126 | 126 | ||
127 | if (pending & IE_IRQ5) | 127 | if (pending & IE_IRQ5) |
128 | write_c0_compare(0); | 128 | write_c0_compare(0); |
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index aacd4a005c5f..83843a229be7 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -181,13 +181,13 @@ NESTED(except_vec_vi, 0, sp) | |||
181 | * during service by SMTC kernel, we also want to | 181 | * during service by SMTC kernel, we also want to |
182 | * pass the IM value to be cleared. | 182 | * pass the IM value to be cleared. |
183 | */ | 183 | */ |
184 | EXPORT(except_vec_vi_mori) | 184 | FEXPORT(except_vec_vi_mori) |
185 | ori a0, $0, 0 | 185 | ori a0, $0, 0 |
186 | #endif /* CONFIG_MIPS_MT_SMTC */ | 186 | #endif /* CONFIG_MIPS_MT_SMTC */ |
187 | EXPORT(except_vec_vi_lui) | 187 | FEXPORT(except_vec_vi_lui) |
188 | lui v0, 0 /* Patched */ | 188 | lui v0, 0 /* Patched */ |
189 | j except_vec_vi_handler | 189 | j except_vec_vi_handler |
190 | EXPORT(except_vec_vi_ori) | 190 | FEXPORT(except_vec_vi_ori) |
191 | ori v0, 0 /* Patched */ | 191 | ori v0, 0 /* Patched */ |
192 | .set pop | 192 | .set pop |
193 | END(except_vec_vi) | 193 | END(except_vec_vi) |
@@ -220,7 +220,17 @@ NESTED(except_vec_vi_handler, 0, sp) | |||
220 | _ehb | 220 | _ehb |
221 | #endif /* CONFIG_MIPS_MT_SMTC */ | 221 | #endif /* CONFIG_MIPS_MT_SMTC */ |
222 | CLI | 222 | CLI |
223 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
224 | move s0, v0 | ||
225 | #ifdef CONFIG_MIPS_MT_SMTC | ||
226 | move s1, a0 | ||
227 | #endif | ||
223 | TRACE_IRQS_OFF | 228 | TRACE_IRQS_OFF |
229 | #ifdef CONFIG_MIPS_MT_SMTC | ||
230 | move a0, s1 | ||
231 | #endif | ||
232 | move v0, s0 | ||
233 | #endif | ||
224 | 234 | ||
225 | LONG_L s0, TI_REGS($28) | 235 | LONG_L s0, TI_REGS($28) |
226 | LONG_S sp, TI_REGS($28) | 236 | LONG_S sp, TI_REGS($28) |
diff --git a/arch/mips/mips-boards/generic/init.c b/arch/mips/mips-boards/generic/init.c index 1acdf091c258..88e9c2a7a2f9 100644 --- a/arch/mips/mips-boards/generic/init.c +++ b/arch/mips/mips-boards/generic/init.c | |||
@@ -145,7 +145,7 @@ static void __init console_config(void) | |||
145 | char parity = '\0', bits = '\0', flow = '\0'; | 145 | char parity = '\0', bits = '\0', flow = '\0'; |
146 | char *s; | 146 | char *s; |
147 | 147 | ||
148 | if ((strstr(prom_getcmdline(), "console=ttyS")) == NULL) { | 148 | if ((strstr(prom_getcmdline(), "console=")) == NULL) { |
149 | s = prom_getenv("modetty0"); | 149 | s = prom_getenv("modetty0"); |
150 | if (s) { | 150 | if (s) { |
151 | while (*s >= '0' && *s <= '9') | 151 | while (*s >= '0' && *s <= '9') |
diff --git a/arch/mips/momentum/ocelot_c/irq.c b/arch/mips/momentum/ocelot_c/irq.c index 40472f7944d7..844d566c9de3 100644 --- a/arch/mips/momentum/ocelot_c/irq.c +++ b/arch/mips/momentum/ocelot_c/irq.c | |||
@@ -64,7 +64,7 @@ extern void ll_cpci_irq(void); | |||
64 | 64 | ||
65 | asmlinkage void plat_irq_dispatch(void) | 65 | asmlinkage void plat_irq_dispatch(void) |
66 | { | 66 | { |
67 | unsigned int pending = read_c0_cause() & read_c0_status(); | 67 | unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM; |
68 | 68 | ||
69 | if (pending & STATUSF_IP0) | 69 | if (pending & STATUSF_IP0) |
70 | do_IRQ(0); | 70 | do_IRQ(0); |
diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c index b1c4805a0b92..aad03429a5e3 100644 --- a/arch/mips/philips/pnx8550/common/int.c +++ b/arch/mips/philips/pnx8550/common/int.c | |||
@@ -83,16 +83,15 @@ static void timer_irqdispatch(int irq) | |||
83 | 83 | ||
84 | asmlinkage void plat_irq_dispatch(void) | 84 | asmlinkage void plat_irq_dispatch(void) |
85 | { | 85 | { |
86 | unsigned int pending = read_c0_status() & read_c0_cause(); | 86 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
87 | 87 | ||
88 | if (pending & STATUSF_IP2) | 88 | if (pending & STATUSF_IP2) |
89 | hw0_irqdispatch(2); | 89 | hw0_irqdispatch(2); |
90 | else if (pending & STATUSF_IP7) { | 90 | else if (pending & STATUSF_IP7) { |
91 | if (read_c0_config7() & 0x01c0) | 91 | if (read_c0_config7() & 0x01c0) |
92 | timer_irqdispatch(7); | 92 | timer_irqdispatch(7); |
93 | } | 93 | } else |
94 | 94 | spurious_interrupt(); | |
95 | spurious_interrupt(); | ||
96 | } | 95 | } |
97 | 96 | ||
98 | static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask) | 97 | static inline void modify_cp0_intmask(unsigned clr_mask, unsigned set_mask) |
diff --git a/arch/mips/qemu/q-smp.c b/arch/mips/qemu/q-smp.c index 5a12354cd576..786bbfa214d1 100644 --- a/arch/mips/qemu/q-smp.c +++ b/arch/mips/qemu/q-smp.c | |||
@@ -46,3 +46,10 @@ void __init prom_prepare_cpus(unsigned int max_cpus) | |||
46 | void prom_boot_secondary(int cpu, struct task_struct *idle) | 46 | void prom_boot_secondary(int cpu, struct task_struct *idle) |
47 | { | 47 | { |
48 | } | 48 | } |
49 | |||
50 | void __init plat_smp_setup(void) | ||
51 | { | ||
52 | } | ||
53 | void __init plat_prepare_cpus(unsigned int max_cpus) | ||
54 | { | ||
55 | } | ||
diff --git a/arch/mips/sgi-ip22/ip22-int.c b/arch/mips/sgi-ip22/ip22-int.c index b454924aeb56..18348321795d 100644 --- a/arch/mips/sgi-ip22/ip22-int.c +++ b/arch/mips/sgi-ip22/ip22-int.c | |||
@@ -237,7 +237,7 @@ extern void indy_8254timer_irq(void); | |||
237 | 237 | ||
238 | asmlinkage void plat_irq_dispatch(void) | 238 | asmlinkage void plat_irq_dispatch(void) |
239 | { | 239 | { |
240 | unsigned int pending = read_c0_cause(); | 240 | unsigned int pending = read_c0_status() & read_c0_cause(); |
241 | 241 | ||
242 | /* | 242 | /* |
243 | * First we check for r4k counter/timer IRQ. | 243 | * First we check for r4k counter/timer IRQ. |
diff --git a/arch/mips/sgi-ip32/ip32-irq.c b/arch/mips/sgi-ip32/ip32-irq.c index 8c450d9e8696..fb9da9acf53f 100644 --- a/arch/mips/sgi-ip32/ip32-irq.c +++ b/arch/mips/sgi-ip32/ip32-irq.c | |||
@@ -454,7 +454,7 @@ static void ip32_irq5(void) | |||
454 | 454 | ||
455 | asmlinkage void plat_irq_dispatch(void) | 455 | asmlinkage void plat_irq_dispatch(void) |
456 | { | 456 | { |
457 | unsigned int pending = read_c0_cause(); | 457 | unsigned int pending = read_c0_status() & read_c0_cause(); |
458 | 458 | ||
459 | if (likely(pending & IE_IRQ0)) | 459 | if (likely(pending & IE_IRQ0)) |
460 | ip32_irq0(); | 460 | ip32_irq0(); |
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c index 148239446e6e..0e6a13c0bd0e 100644 --- a/arch/mips/sibyte/sb1250/irq.c +++ b/arch/mips/sibyte/sb1250/irq.c | |||
@@ -421,7 +421,7 @@ asmlinkage void plat_irq_dispatch(void) | |||
421 | * blasting the high 32 bits. | 421 | * blasting the high 32 bits. |
422 | */ | 422 | */ |
423 | 423 | ||
424 | pending = read_c0_cause() & read_c0_status(); | 424 | pending = read_c0_cause() & read_c0_status() & ST0_IM; |
425 | 425 | ||
426 | #ifdef CONFIG_SIBYTE_SB1250_PROF | 426 | #ifdef CONFIG_SIBYTE_SB1250_PROF |
427 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ | 427 | if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ |
diff --git a/arch/mips/sni/pcimt.c b/arch/mips/sni/pcimt.c index 39e5b4abc555..8e8593b64f6a 100644 --- a/arch/mips/sni/pcimt.c +++ b/arch/mips/sni/pcimt.c | |||
@@ -333,7 +333,7 @@ static void pcimt_hwint3(void) | |||
333 | 333 | ||
334 | static void sni_pcimt_hwint(void) | 334 | static void sni_pcimt_hwint(void) |
335 | { | 335 | { |
336 | u32 pending = (read_c0_cause() & read_c0_status()); | 336 | u32 pending = read_c0_cause() & read_c0_status(); |
337 | 337 | ||
338 | if (pending & C_IRQ5) | 338 | if (pending & C_IRQ5) |
339 | do_IRQ (MIPS_CPU_IRQ_BASE + 7); | 339 | do_IRQ (MIPS_CPU_IRQ_BASE + 7); |
diff --git a/arch/mips/sni/pcit.c b/arch/mips/sni/pcit.c index 8d6b3d5b13a1..1dfc3f00bbd3 100644 --- a/arch/mips/sni/pcit.c +++ b/arch/mips/sni/pcit.c | |||
@@ -271,7 +271,7 @@ static void pcit_hwint0(void) | |||
271 | 271 | ||
272 | static void sni_pcit_hwint(void) | 272 | static void sni_pcit_hwint(void) |
273 | { | 273 | { |
274 | u32 pending = (read_c0_cause() & read_c0_status()); | 274 | u32 pending = read_c0_cause() & read_c0_status(); |
275 | 275 | ||
276 | if (pending & C_IRQ1) | 276 | if (pending & C_IRQ1) |
277 | pcit_hwint1(); | 277 | pcit_hwint1(); |
@@ -285,7 +285,7 @@ static void sni_pcit_hwint(void) | |||
285 | 285 | ||
286 | static void sni_pcit_hwint_cplus(void) | 286 | static void sni_pcit_hwint_cplus(void) |
287 | { | 287 | { |
288 | u32 pending = (read_c0_cause() & read_c0_status()); | 288 | u32 pending = read_c0_cause() & read_c0_status(); |
289 | 289 | ||
290 | if (pending & C_IRQ0) | 290 | if (pending & C_IRQ0) |
291 | pcit_hwint0(); | 291 | pcit_hwint0(); |
diff --git a/arch/mips/tx4927/common/tx4927_irq.c b/arch/mips/tx4927/common/tx4927_irq.c index e7f3e5b84dcf..3d25d010f3d5 100644 --- a/arch/mips/tx4927/common/tx4927_irq.c +++ b/arch/mips/tx4927/common/tx4927_irq.c | |||
@@ -416,7 +416,7 @@ static int tx4927_irq_nested(void) | |||
416 | 416 | ||
417 | asmlinkage void plat_irq_dispatch(void) | 417 | asmlinkage void plat_irq_dispatch(void) |
418 | { | 418 | { |
419 | unsigned int pending = read_c0_status() & read_c0_cause(); | 419 | unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; |
420 | 420 | ||
421 | if (pending & STATUSF_IP7) /* cpu timer */ | 421 | if (pending & STATUSF_IP7) /* cpu timer */ |
422 | do_IRQ(TX4927_IRQ_CPU_TIMER); | 422 | do_IRQ(TX4927_IRQ_CPU_TIMER); |
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index 97901296894e..32a69a18a796 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
@@ -1665,3 +1665,20 @@ sys_getcpu_wrapper: | |||
1665 | llgtr %r3,%r3 # unsigned * | 1665 | llgtr %r3,%r3 # unsigned * |
1666 | llgtr %r4,%r4 # struct getcpu_cache * | 1666 | llgtr %r4,%r4 # struct getcpu_cache * |
1667 | jg sys_getcpu | 1667 | jg sys_getcpu |
1668 | |||
1669 | .globl compat_sys_epoll_pwait_wrapper | ||
1670 | compat_sys_epoll_pwait_wrapper: | ||
1671 | lgfr %r2,%r2 # int | ||
1672 | llgtr %r3,%r3 # struct compat_epoll_event * | ||
1673 | lgfr %r4,%r4 # int | ||
1674 | lgfr %r5,%r5 # int | ||
1675 | llgtr %r6,%r6 # compat_sigset_t * | ||
1676 | llgf %r0,164(%r15) # compat_size_t | ||
1677 | stg %r0,160(%r15) | ||
1678 | jg compat_sys_epoll_pwait | ||
1679 | |||
1680 | .globl compat_sys_utimes_wrapper | ||
1681 | compat_sys_utimes_wrapper: | ||
1682 | llgtr %r2,%r2 # char * | ||
1683 | llgtr %r3,%r3 # struct compat_timeval * | ||
1684 | jg compat_sys_utimes | ||
diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c index eca3fe595ff4..dca6eaf82c80 100644 --- a/arch/s390/kernel/debug.c +++ b/arch/s390/kernel/debug.c | |||
@@ -268,7 +268,7 @@ debug_info_alloc(char *name, int pages_per_area, int nr_areas, int buf_size, | |||
268 | rc->level = level; | 268 | rc->level = level; |
269 | rc->buf_size = buf_size; | 269 | rc->buf_size = buf_size; |
270 | rc->entry_size = sizeof(debug_entry_t) + buf_size; | 270 | rc->entry_size = sizeof(debug_entry_t) + buf_size; |
271 | strlcpy(rc->name, name, sizeof(rc->name)-1); | 271 | strlcpy(rc->name, name, sizeof(rc->name)); |
272 | memset(rc->views, 0, DEBUG_MAX_VIEWS * sizeof(struct debug_view *)); | 272 | memset(rc->views, 0, DEBUG_MAX_VIEWS * sizeof(struct debug_view *)); |
273 | memset(rc->debugfs_entries, 0 ,DEBUG_MAX_VIEWS * | 273 | memset(rc->debugfs_entries, 0 ,DEBUG_MAX_VIEWS * |
274 | sizeof(struct dentry*)); | 274 | sizeof(struct dentry*)); |
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c index afca1c6f4d21..5e47936573f2 100644 --- a/arch/s390/kernel/early.c +++ b/arch/s390/kernel/early.c | |||
@@ -141,9 +141,9 @@ static noinline __init void detect_machine_type(void) | |||
141 | machine_flags |= 4; | 141 | machine_flags |= 4; |
142 | } | 142 | } |
143 | 143 | ||
144 | #ifdef CONFIG_64BIT | ||
144 | static noinline __init int memory_fast_detect(void) | 145 | static noinline __init int memory_fast_detect(void) |
145 | { | 146 | { |
146 | |||
147 | unsigned long val0 = 0; | 147 | unsigned long val0 = 0; |
148 | unsigned long val1 = 0xc; | 148 | unsigned long val1 = 0xc; |
149 | int ret = -ENOSYS; | 149 | int ret = -ENOSYS; |
@@ -161,9 +161,15 @@ static noinline __init int memory_fast_detect(void) | |||
161 | if (ret || val0 != val1) | 161 | if (ret || val0 != val1) |
162 | return -ENOSYS; | 162 | return -ENOSYS; |
163 | 163 | ||
164 | memory_chunk[0].size = val0; | 164 | memory_chunk[0].size = val0 + 1; |
165 | return 0; | 165 | return 0; |
166 | } | 166 | } |
167 | #else | ||
168 | static inline int memory_fast_detect(void) | ||
169 | { | ||
170 | return -ENOSYS; | ||
171 | } | ||
172 | #endif | ||
167 | 173 | ||
168 | #define ADDR2G (1UL << 31) | 174 | #define ADDR2G (1UL << 31) |
169 | 175 | ||
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index d125a4ead08d..f731185bf2bd 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -839,7 +839,7 @@ static int __init reipl_ccw_init(void) | |||
839 | } | 839 | } |
840 | reipl_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN; | 840 | reipl_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN; |
841 | reipl_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; | 841 | reipl_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; |
842 | reipl_block_ccw->hdr.blk0_len = sizeof(reipl_block_ccw->ipl_info.ccw); | 842 | reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; |
843 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; | 843 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; |
844 | /* check if read scp info worked and set loadparm */ | 844 | /* check if read scp info worked and set loadparm */ |
845 | if (SCCB_VALID) | 845 | if (SCCB_VALID) |
@@ -880,8 +880,7 @@ static int __init reipl_fcp_init(void) | |||
880 | } else { | 880 | } else { |
881 | reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; | 881 | reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; |
882 | reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; | 882 | reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; |
883 | reipl_block_fcp->hdr.blk0_len = | 883 | reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN; |
884 | sizeof(reipl_block_fcp->ipl_info.fcp); | ||
885 | reipl_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; | 884 | reipl_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; |
886 | reipl_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_IPL; | 885 | reipl_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_IPL; |
887 | } | 886 | } |
@@ -930,7 +929,7 @@ static int __init dump_ccw_init(void) | |||
930 | } | 929 | } |
931 | dump_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN; | 930 | dump_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN; |
932 | dump_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; | 931 | dump_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; |
933 | dump_block_ccw->hdr.blk0_len = sizeof(reipl_block_ccw->ipl_info.ccw); | 932 | dump_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; |
934 | dump_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; | 933 | dump_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; |
935 | dump_capabilities |= IPL_TYPE_CCW; | 934 | dump_capabilities |= IPL_TYPE_CCW; |
936 | return 0; | 935 | return 0; |
@@ -954,7 +953,7 @@ static int __init dump_fcp_init(void) | |||
954 | } | 953 | } |
955 | dump_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; | 954 | dump_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; |
956 | dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; | 955 | dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; |
957 | dump_block_fcp->hdr.blk0_len = sizeof(dump_block_fcp->ipl_info.fcp); | 956 | dump_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN; |
958 | dump_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; | 957 | dump_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; |
959 | dump_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_DUMP; | 958 | dump_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_DUMP; |
960 | dump_capabilities |= IPL_TYPE_FCP; | 959 | dump_capabilities |= IPL_TYPE_FCP; |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index a52c44455bf0..c774f1069e10 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -320,4 +320,5 @@ SYSCALL(sys_tee,sys_tee,sys_tee_wrapper) | |||
320 | SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) | 320 | SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) |
321 | NI_SYSCALL /* 310 sys_move_pages */ | 321 | NI_SYSCALL /* 310 sys_move_pages */ |
322 | SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) | 322 | SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) |
323 | SYSCALL(sys_epoll_pwait,sys_epoll_pwait,sys_ni_syscall) | 323 | SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait_wrapper) |
324 | SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper) | ||
diff --git a/arch/sh/drivers/pci/pci-auto.c b/arch/sh/drivers/pci/pci-auto.c index ecf16344f94a..224e007736fb 100644 --- a/arch/sh/drivers/pci/pci-auto.c +++ b/arch/sh/drivers/pci/pci-auto.c | |||
@@ -214,6 +214,12 @@ retry: | |||
214 | continue; | 214 | continue; |
215 | } | 215 | } |
216 | 216 | ||
217 | if (bar_value < *lower_limit || (bar_value + bar_size) >= *upper_limit) { | ||
218 | DBG(" unavailable -- skipping, value %x size %x\n", | ||
219 | bar_value, bar_size); | ||
220 | continue; | ||
221 | } | ||
222 | |||
217 | #ifdef CONFIG_PCI_AUTO_UPDATE_RESOURCES | 223 | #ifdef CONFIG_PCI_AUTO_UPDATE_RESOURCES |
218 | /* Write it out and update our limit */ | 224 | /* Write it out and update our limit */ |
219 | early_write_config_dword(hose, top_bus, current_bus, pci_devfn, | 225 | early_write_config_dword(hose, top_bus, current_bus, pci_devfn, |
diff --git a/arch/sh/kernel/cpu/init.c b/arch/sh/kernel/cpu/init.c index 4b339a640b13..726acfcb9b77 100644 --- a/arch/sh/kernel/cpu/init.c +++ b/arch/sh/kernel/cpu/init.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * CPU init code | 4 | * CPU init code |
5 | * | 5 | * |
6 | * Copyright (C) 2002 - 2006 Paul Mundt | 6 | * Copyright (C) 2002 - 2007 Paul Mundt |
7 | * Copyright (C) 2003 Richard Curnow | 7 | * Copyright (C) 2003 Richard Curnow |
8 | * | 8 | * |
9 | * This file is subject to the terms and conditions of the GNU General Public | 9 | * This file is subject to the terms and conditions of the GNU General Public |
@@ -48,8 +48,19 @@ static void __init cache_init(void) | |||
48 | { | 48 | { |
49 | unsigned long ccr, flags; | 49 | unsigned long ccr, flags; |
50 | 50 | ||
51 | if (current_cpu_data.type == CPU_SH_NONE) | 51 | /* First setup the rest of the I-cache info */ |
52 | panic("Unknown CPU"); | 52 | current_cpu_data.icache.entry_mask = current_cpu_data.icache.way_incr - |
53 | current_cpu_data.icache.linesz; | ||
54 | |||
55 | current_cpu_data.icache.way_size = current_cpu_data.icache.sets * | ||
56 | current_cpu_data.icache.linesz; | ||
57 | |||
58 | /* And the D-cache too */ | ||
59 | current_cpu_data.dcache.entry_mask = current_cpu_data.dcache.way_incr - | ||
60 | current_cpu_data.dcache.linesz; | ||
61 | |||
62 | current_cpu_data.dcache.way_size = current_cpu_data.dcache.sets * | ||
63 | current_cpu_data.dcache.linesz; | ||
53 | 64 | ||
54 | jump_to_P2(); | 65 | jump_to_P2(); |
55 | ccr = ctrl_inl(CCR); | 66 | ccr = ctrl_inl(CCR); |
@@ -200,6 +211,9 @@ asmlinkage void __init sh_cpu_init(void) | |||
200 | /* First, probe the CPU */ | 211 | /* First, probe the CPU */ |
201 | detect_cpu_and_cache_system(); | 212 | detect_cpu_and_cache_system(); |
202 | 213 | ||
214 | if (current_cpu_data.type == CPU_SH_NONE) | ||
215 | panic("Unknown CPU"); | ||
216 | |||
203 | /* Init the cache */ | 217 | /* Init the cache */ |
204 | cache_init(); | 218 | cache_init(); |
205 | 219 | ||
diff --git a/arch/sh/kernel/cpu/sh2/entry.S b/arch/sh/kernel/cpu/sh2/entry.S index 7f7d292f36ec..c16dc8fec489 100644 --- a/arch/sh/kernel/cpu/sh2/entry.S +++ b/arch/sh/kernel/cpu/sh2/entry.S | |||
@@ -165,6 +165,7 @@ ENTRY(exception_handler) | |||
165 | 165 | ||
166 | interrupt_entry: | 166 | interrupt_entry: |
167 | mov r9,r4 | 167 | mov r9,r4 |
168 | mov r15,r5 | ||
168 | mov.l 6f,r9 | 169 | mov.l 6f,r9 |
169 | mov.l 7f,r8 | 170 | mov.l 7f,r8 |
170 | jmp @r8 | 171 | jmp @r8 |
diff --git a/arch/sh/kernel/cpu/sh3/entry.S b/arch/sh/kernel/cpu/sh3/entry.S index c19205b0f2c0..f3e827f29a46 100644 --- a/arch/sh/kernel/cpu/sh3/entry.S +++ b/arch/sh/kernel/cpu/sh3/entry.S | |||
@@ -514,13 +514,16 @@ skip_save: | |||
514 | 514 | ||
515 | interrupt_exception: | 515 | interrupt_exception: |
516 | mov.l 1f, r9 | 516 | mov.l 1f, r9 |
517 | mov.l 2f, r4 | ||
518 | mov.l @r4, r4 | ||
517 | jmp @r9 | 519 | jmp @r9 |
518 | nop | 520 | mov r15, r5 |
519 | rts | 521 | rts |
520 | nop | 522 | nop |
521 | 523 | ||
522 | .align 2 | 524 | .align 2 |
523 | 1: .long do_IRQ | 525 | 1: .long do_IRQ |
526 | 2: .long INTEVT | ||
524 | 527 | ||
525 | .align 2 | 528 | .align 2 |
526 | ENTRY(exception_none) | 529 | ENTRY(exception_none) |
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index 9d28c88d2f9d..58950de2696d 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c | |||
@@ -195,13 +195,6 @@ int __init detect_cpu_and_cache_system(void) | |||
195 | 195 | ||
196 | } | 196 | } |
197 | 197 | ||
198 | /* Setup the rest of the I-cache info */ | ||
199 | current_cpu_data.icache.entry_mask = current_cpu_data.icache.way_incr - | ||
200 | current_cpu_data.icache.linesz; | ||
201 | |||
202 | current_cpu_data.icache.way_size = current_cpu_data.icache.sets * | ||
203 | current_cpu_data.icache.linesz; | ||
204 | |||
205 | /* And the rest of the D-cache */ | 198 | /* And the rest of the D-cache */ |
206 | if (current_cpu_data.dcache.ways > 1) { | 199 | if (current_cpu_data.dcache.ways > 1) { |
207 | size = sizes[(cvr >> 16) & 0xf]; | 200 | size = sizes[(cvr >> 16) & 0xf]; |
@@ -209,12 +202,6 @@ int __init detect_cpu_and_cache_system(void) | |||
209 | current_cpu_data.dcache.sets = (size >> 6); | 202 | current_cpu_data.dcache.sets = (size >> 6); |
210 | } | 203 | } |
211 | 204 | ||
212 | current_cpu_data.dcache.entry_mask = current_cpu_data.dcache.way_incr - | ||
213 | current_cpu_data.dcache.linesz; | ||
214 | |||
215 | current_cpu_data.dcache.way_size = current_cpu_data.dcache.sets * | ||
216 | current_cpu_data.dcache.linesz; | ||
217 | |||
218 | /* | 205 | /* |
219 | * Setup the L2 cache desc | 206 | * Setup the L2 cache desc |
220 | * | 207 | * |
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 67be2b6e8cd1..9bdd8a00cd4a 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/kernel_stat.h> | 12 | #include <linux/kernel_stat.h> |
13 | #include <linux/seq_file.h> | 13 | #include <linux/seq_file.h> |
14 | #include <linux/io.h> | ||
15 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
16 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
17 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
@@ -82,13 +81,9 @@ static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly; | |||
82 | static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; | 81 | static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; |
83 | #endif | 82 | #endif |
84 | 83 | ||
85 | asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, | 84 | asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) |
86 | unsigned long r6, unsigned long r7, | ||
87 | struct pt_regs __regs) | ||
88 | { | 85 | { |
89 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); | ||
90 | struct pt_regs *old_regs = set_irq_regs(regs); | 86 | struct pt_regs *old_regs = set_irq_regs(regs); |
91 | int irq; | ||
92 | #ifdef CONFIG_4KSTACKS | 87 | #ifdef CONFIG_4KSTACKS |
93 | union irq_ctx *curctx, *irqctx; | 88 | union irq_ctx *curctx, *irqctx; |
94 | #endif | 89 | #endif |
@@ -111,13 +106,7 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, | |||
111 | } | 106 | } |
112 | #endif | 107 | #endif |
113 | 108 | ||
114 | #ifdef CONFIG_CPU_HAS_INTEVT | 109 | irq = irq_demux(evt2irq(irq)); |
115 | irq = evt2irq(ctrl_inl(INTEVT)); | ||
116 | #else | ||
117 | irq = r4; | ||
118 | #endif | ||
119 | |||
120 | irq = irq_demux(irq); | ||
121 | 110 | ||
122 | #ifdef CONFIG_4KSTACKS | 111 | #ifdef CONFIG_4KSTACKS |
123 | curctx = (union irq_ctx *)current_thread_info(); | 112 | curctx = (union irq_ctx *)current_thread_info(); |
diff --git a/arch/sparc64/kernel/tsb.S b/arch/sparc64/kernel/tsb.S index eedf94fa5664..10adb2fb8ffe 100644 --- a/arch/sparc64/kernel/tsb.S +++ b/arch/sparc64/kernel/tsb.S | |||
@@ -546,6 +546,7 @@ NGtsb_init: | |||
546 | subcc %o1, 0x100, %o1 | 546 | subcc %o1, 0x100, %o1 |
547 | bne,pt %xcc, 1b | 547 | bne,pt %xcc, 1b |
548 | add %o0, 0x100, %o0 | 548 | add %o0, 0x100, %o0 |
549 | membar #Sync | ||
549 | retl | 550 | retl |
550 | wr %g2, 0x0, %asi | 551 | wr %g2, 0x0, %asi |
551 | .size NGtsb_init, .-NGtsb_init | 552 | .size NGtsb_init, .-NGtsb_init |
diff --git a/arch/sparc64/lib/NGbzero.S b/arch/sparc64/lib/NGbzero.S index e86baece5cc8..f10e4529ee37 100644 --- a/arch/sparc64/lib/NGbzero.S +++ b/arch/sparc64/lib/NGbzero.S | |||
@@ -88,6 +88,7 @@ NGbzero_loop: | |||
88 | bne,pt %xcc, NGbzero_loop | 88 | bne,pt %xcc, NGbzero_loop |
89 | add %o0, 64, %o0 | 89 | add %o0, 64, %o0 |
90 | 90 | ||
91 | membar #Sync | ||
91 | wr %o4, 0x0, %asi | 92 | wr %o4, 0x0, %asi |
92 | brz,pn %o1, NGbzero_done | 93 | brz,pn %o1, NGbzero_done |
93 | NGbzero_medium: | 94 | NGbzero_medium: |
diff --git a/arch/sparc64/lib/NGmemcpy.S b/arch/sparc64/lib/NGmemcpy.S index 8e522b3dc095..66063a9a66b8 100644 --- a/arch/sparc64/lib/NGmemcpy.S +++ b/arch/sparc64/lib/NGmemcpy.S | |||
@@ -247,6 +247,8 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */ | |||
247 | /* fall through */ | 247 | /* fall through */ |
248 | 248 | ||
249 | 60: | 249 | 60: |
250 | membar #Sync | ||
251 | |||
250 | /* %o2 contains any final bytes still needed to be copied | 252 | /* %o2 contains any final bytes still needed to be copied |
251 | * over. If anything is left, we copy it one byte at a time. | 253 | * over. If anything is left, we copy it one byte at a time. |
252 | */ | 254 | */ |
diff --git a/arch/sparc64/lib/NGpage.S b/arch/sparc64/lib/NGpage.S index 7d7c3bb8dcbf..8ce3a0c9c537 100644 --- a/arch/sparc64/lib/NGpage.S +++ b/arch/sparc64/lib/NGpage.S | |||
@@ -41,6 +41,7 @@ NGcopy_user_page: /* %o0=dest, %o1=src, %o2=vaddr */ | |||
41 | subcc %g7, 64, %g7 | 41 | subcc %g7, 64, %g7 |
42 | bne,pt %xcc, 1b | 42 | bne,pt %xcc, 1b |
43 | add %o0, 32, %o0 | 43 | add %o0, 32, %o0 |
44 | membar #Sync | ||
44 | retl | 45 | retl |
45 | nop | 46 | nop |
46 | 47 | ||
@@ -63,6 +64,7 @@ NGclear_user_page: /* %o0=dest, %o1=vaddr */ | |||
63 | subcc %g7, 64, %g7 | 64 | subcc %g7, 64, %g7 |
64 | bne,pt %xcc, 1b | 65 | bne,pt %xcc, 1b |
65 | add %o0, 32, %o0 | 66 | add %o0, 32, %o0 |
67 | membar #Sync | ||
66 | retl | 68 | retl |
67 | nop | 69 | nop |
68 | 70 | ||
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index d16b5b0c8b76..7bdbe5a914d0 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig | |||
@@ -564,7 +564,7 @@ config PATA_IXP4XX_CF | |||
564 | 564 | ||
565 | config PATA_SCC | 565 | config PATA_SCC |
566 | tristate "Toshiba's Cell Reference Set IDE support" | 566 | tristate "Toshiba's Cell Reference Set IDE support" |
567 | depends on PCI && PPC_IBM_CELL_BLADE | 567 | depends on PCI && PPC_CELLEB |
568 | help | 568 | help |
569 | This option enables support for the built-in IDE controller on | 569 | This option enables support for the built-in IDE controller on |
570 | Toshiba Cell Reference Board. | 570 | Toshiba Cell Reference Board. |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 3c1f8830ac8b..bf327d473ce9 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -826,7 +826,7 @@ static u64 ata_id_n_sectors(const u16 *id) | |||
826 | /** | 826 | /** |
827 | * ata_id_to_dma_mode - Identify DMA mode from id block | 827 | * ata_id_to_dma_mode - Identify DMA mode from id block |
828 | * @dev: device to identify | 828 | * @dev: device to identify |
829 | * @mode: mode to assume if we cannot tell | 829 | * @unknown: mode to assume if we cannot tell |
830 | * | 830 | * |
831 | * Set up the timing values for the device based upon the identify | 831 | * Set up the timing values for the device based upon the identify |
832 | * reported values for the DMA mode. This function is used by drivers | 832 | * reported values for the DMA mode. This function is used by drivers |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 7349c3dbf774..361953a50203 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -1625,8 +1625,14 @@ static int ata_eh_reset(struct ata_port *ap, int classify, | |||
1625 | rc = prereset(ap); | 1625 | rc = prereset(ap); |
1626 | if (rc) { | 1626 | if (rc) { |
1627 | if (rc == -ENOENT) { | 1627 | if (rc == -ENOENT) { |
1628 | ata_port_printk(ap, KERN_DEBUG, "port disabled. ignoring.\n"); | 1628 | ata_port_printk(ap, KERN_DEBUG, |
1629 | "port disabled. ignoring.\n"); | ||
1629 | ap->eh_context.i.action &= ~ATA_EH_RESET_MASK; | 1630 | ap->eh_context.i.action &= ~ATA_EH_RESET_MASK; |
1631 | |||
1632 | for (i = 0; i < ATA_MAX_DEVICES; i++) | ||
1633 | classes[i] = ATA_DEV_NONE; | ||
1634 | |||
1635 | rc = 0; | ||
1630 | } else | 1636 | } else |
1631 | ata_port_printk(ap, KERN_ERR, | 1637 | ata_port_printk(ap, KERN_ERR, |
1632 | "prereset failed (errno=%d)\n", rc); | 1638 | "prereset failed (errno=%d)\n", rc); |
diff --git a/drivers/ata/pata_ixp4xx_cf.c b/drivers/ata/pata_ixp4xx_cf.c index 9a0523b5c947..c6f0e1927551 100644 --- a/drivers/ata/pata_ixp4xx_cf.c +++ b/drivers/ata/pata_ixp4xx_cf.c | |||
@@ -193,7 +193,7 @@ static __devinit int ixp4xx_pata_probe(struct platform_device *pdev) | |||
193 | 193 | ||
194 | irq = platform_get_irq(pdev, 0); | 194 | irq = platform_get_irq(pdev, 0); |
195 | if (irq) | 195 | if (irq) |
196 | set_irq_type(irq, IRQT_HIGH); | 196 | set_irq_type(irq, IRQT_RISING); |
197 | 197 | ||
198 | /* Setup expansion bus chip selects */ | 198 | /* Setup expansion bus chip selects */ |
199 | *data->cs0_cfg = data->cs0_bits; | 199 | *data->cs0_cfg = data->cs0_bits; |
@@ -232,7 +232,6 @@ static __devexit int ixp4xx_pata_remove(struct platform_device *dev) | |||
232 | struct ata_host *host = platform_get_drvdata(dev); | 232 | struct ata_host *host = platform_get_drvdata(dev); |
233 | 233 | ||
234 | ata_host_detach(host); | 234 | ata_host_detach(host); |
235 | platform_set_drvdata(dev, NULL); | ||
236 | 235 | ||
237 | return 0; | 236 | return 0; |
238 | } | 237 | } |
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 3193a603d1a1..1e21688bfcf2 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
@@ -672,10 +672,6 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
672 | if (rc) | 672 | if (rc) |
673 | return rc; | 673 | return rc; |
674 | 674 | ||
675 | rc = pci_request_regions(pdev, DRV_NAME); | ||
676 | if (rc) | ||
677 | return rc; | ||
678 | |||
679 | rc = pcim_iomap_regions(pdev, 0x3f, DRV_NAME); | 675 | rc = pcim_iomap_regions(pdev, 0x3f, DRV_NAME); |
680 | if (rc) | 676 | if (rc) |
681 | return rc; | 677 | return rc; |
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index 75d961599651..5614df8c1ce2 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
@@ -346,6 +346,7 @@ static const struct pci_device_id sil24_pci_tbl[] = { | |||
346 | { PCI_VDEVICE(CMD, 0x3124), BID_SIL3124 }, | 346 | { PCI_VDEVICE(CMD, 0x3124), BID_SIL3124 }, |
347 | { PCI_VDEVICE(INTEL, 0x3124), BID_SIL3124 }, | 347 | { PCI_VDEVICE(INTEL, 0x3124), BID_SIL3124 }, |
348 | { PCI_VDEVICE(CMD, 0x3132), BID_SIL3132 }, | 348 | { PCI_VDEVICE(CMD, 0x3132), BID_SIL3132 }, |
349 | { PCI_VDEVICE(CMD, 0x0242), BID_SIL3132 }, | ||
349 | { PCI_VDEVICE(CMD, 0x3131), BID_SIL3131 }, | 350 | { PCI_VDEVICE(CMD, 0x3131), BID_SIL3131 }, |
350 | { PCI_VDEVICE(CMD, 0x3531), BID_SIL3131 }, | 351 | { PCI_VDEVICE(CMD, 0x3531), BID_SIL3131 }, |
351 | 352 | ||
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index 5b1e3ff26c0b..05fac0733f3d 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
@@ -210,9 +210,11 @@ again: | |||
210 | goto again; | 210 | goto again; |
211 | } | 211 | } |
212 | if (rc < 0) { | 212 | if (rc < 0) { |
213 | QDIO_DBF_TEXT3(1,trace,"sqberr"); | 213 | QDIO_DBF_TEXT3(1,trace,"sqberr"); |
214 | sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no); | 214 | sprintf(dbf_text,"%2x,%2x",tmp_cnt,*cnt); |
215 | QDIO_DBF_TEXT3(1,trace,dbf_text); | 215 | QDIO_DBF_TEXT3(1,trace,dbf_text); |
216 | sprintf(dbf_text,"%d,%d",ccq,q_no); | ||
217 | QDIO_DBF_TEXT3(1,trace,dbf_text); | ||
216 | q->handler(q->cdev,QDIO_STATUS_ACTIVATE_CHECK_CONDITION| | 218 | q->handler(q->cdev,QDIO_STATUS_ACTIVATE_CHECK_CONDITION| |
217 | QDIO_STATUS_LOOK_FOR_ERROR, | 219 | QDIO_STATUS_LOOK_FOR_ERROR, |
218 | 0, 0, 0, -1, -1, q->int_parm); | 220 | 0, 0, 0, -1, -1, q->int_parm); |
@@ -1250,7 +1252,6 @@ qdio_is_inbound_q_done(struct qdio_q *q) | |||
1250 | if (!no_used) { | 1252 | if (!no_used) { |
1251 | QDIO_DBF_TEXT4(0,trace,"inqisdnA"); | 1253 | QDIO_DBF_TEXT4(0,trace,"inqisdnA"); |
1252 | QDIO_DBF_HEX4(0,trace,&q,sizeof(void*)); | 1254 | QDIO_DBF_HEX4(0,trace,&q,sizeof(void*)); |
1253 | QDIO_DBF_TEXT4(0,trace,dbf_text); | ||
1254 | return 1; | 1255 | return 1; |
1255 | } | 1256 | } |
1256 | if (irq->is_qebsm) { | 1257 | if (irq->is_qebsm) { |
@@ -3371,10 +3372,15 @@ qdio_do_qdio_fill_input(struct qdio_q *q, unsigned int qidx, | |||
3371 | unsigned int count, struct qdio_buffer *buffers) | 3372 | unsigned int count, struct qdio_buffer *buffers) |
3372 | { | 3373 | { |
3373 | struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr; | 3374 | struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr; |
3375 | int tmp = 0; | ||
3376 | |||
3374 | qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1); | 3377 | qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1); |
3375 | if (irq->is_qebsm) { | 3378 | if (irq->is_qebsm) { |
3376 | while (count) | 3379 | while (count) { |
3377 | set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count); | 3380 | tmp = set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count); |
3381 | if (!tmp) | ||
3382 | return; | ||
3383 | } | ||
3378 | return; | 3384 | return; |
3379 | } | 3385 | } |
3380 | for (;;) { | 3386 | for (;;) { |
@@ -3390,11 +3396,15 @@ qdio_do_qdio_fill_output(struct qdio_q *q, unsigned int qidx, | |||
3390 | unsigned int count, struct qdio_buffer *buffers) | 3396 | unsigned int count, struct qdio_buffer *buffers) |
3391 | { | 3397 | { |
3392 | struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr; | 3398 | struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr; |
3399 | int tmp = 0; | ||
3393 | 3400 | ||
3394 | qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1); | 3401 | qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1); |
3395 | if (irq->is_qebsm) { | 3402 | if (irq->is_qebsm) { |
3396 | while (count) | 3403 | while (count) { |
3397 | set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count); | 3404 | tmp = set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count); |
3405 | if (!tmp) | ||
3406 | return; | ||
3407 | } | ||
3398 | return; | 3408 | return; |
3399 | } | 3409 | } |
3400 | 3410 | ||
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index c7d1355237b6..181b51772b1b 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -65,6 +65,8 @@ module_param_named(poll_thread, ap_thread_flag, int, 0000); | |||
65 | MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 1 (on)."); | 65 | MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 1 (on)."); |
66 | 66 | ||
67 | static struct device *ap_root_device = NULL; | 67 | static struct device *ap_root_device = NULL; |
68 | static DEFINE_SPINLOCK(ap_device_lock); | ||
69 | static LIST_HEAD(ap_device_list); | ||
68 | 70 | ||
69 | /** | 71 | /** |
70 | * Workqueue & timer for bus rescan. | 72 | * Workqueue & timer for bus rescan. |
@@ -457,6 +459,9 @@ static int ap_device_probe(struct device *dev) | |||
457 | int rc; | 459 | int rc; |
458 | 460 | ||
459 | ap_dev->drv = ap_drv; | 461 | ap_dev->drv = ap_drv; |
462 | spin_lock_bh(&ap_device_lock); | ||
463 | list_add(&ap_dev->list, &ap_device_list); | ||
464 | spin_unlock_bh(&ap_device_lock); | ||
460 | rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV; | 465 | rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV; |
461 | return rc; | 466 | return rc; |
462 | } | 467 | } |
@@ -497,6 +502,9 @@ static int ap_device_remove(struct device *dev) | |||
497 | ap_flush_queue(ap_dev); | 502 | ap_flush_queue(ap_dev); |
498 | if (ap_drv->remove) | 503 | if (ap_drv->remove) |
499 | ap_drv->remove(ap_dev); | 504 | ap_drv->remove(ap_dev); |
505 | spin_lock_bh(&ap_device_lock); | ||
506 | list_del_init(&ap_dev->list); | ||
507 | spin_unlock_bh(&ap_device_lock); | ||
500 | return 0; | 508 | return 0; |
501 | } | 509 | } |
502 | 510 | ||
@@ -772,6 +780,7 @@ static void ap_scan_bus(struct work_struct *unused) | |||
772 | spin_lock_init(&ap_dev->lock); | 780 | spin_lock_init(&ap_dev->lock); |
773 | INIT_LIST_HEAD(&ap_dev->pendingq); | 781 | INIT_LIST_HEAD(&ap_dev->pendingq); |
774 | INIT_LIST_HEAD(&ap_dev->requestq); | 782 | INIT_LIST_HEAD(&ap_dev->requestq); |
783 | INIT_LIST_HEAD(&ap_dev->list); | ||
775 | if (device_type == 0) | 784 | if (device_type == 0) |
776 | ap_probe_device_type(ap_dev); | 785 | ap_probe_device_type(ap_dev); |
777 | else | 786 | else |
@@ -1033,14 +1042,13 @@ static void ap_poll_timeout(unsigned long unused) | |||
1033 | * polling until bit 2^0 of the control flags is not set. If bit 2^1 | 1042 | * polling until bit 2^0 of the control flags is not set. If bit 2^1 |
1034 | * of the control flags has been set arm the poll timer. | 1043 | * of the control flags has been set arm the poll timer. |
1035 | */ | 1044 | */ |
1036 | static int __ap_poll_all(struct device *dev, void *data) | 1045 | static int __ap_poll_all(struct ap_device *ap_dev, unsigned long *flags) |
1037 | { | 1046 | { |
1038 | struct ap_device *ap_dev = to_ap_dev(dev); | ||
1039 | int rc; | 1047 | int rc; |
1040 | 1048 | ||
1041 | spin_lock(&ap_dev->lock); | 1049 | spin_lock(&ap_dev->lock); |
1042 | if (!ap_dev->unregistered) { | 1050 | if (!ap_dev->unregistered) { |
1043 | rc = ap_poll_queue(to_ap_dev(dev), (unsigned long *) data); | 1051 | rc = ap_poll_queue(ap_dev, flags); |
1044 | if (rc) | 1052 | if (rc) |
1045 | ap_dev->unregistered = 1; | 1053 | ap_dev->unregistered = 1; |
1046 | } else | 1054 | } else |
@@ -1054,10 +1062,15 @@ static int __ap_poll_all(struct device *dev, void *data) | |||
1054 | static void ap_poll_all(unsigned long dummy) | 1062 | static void ap_poll_all(unsigned long dummy) |
1055 | { | 1063 | { |
1056 | unsigned long flags; | 1064 | unsigned long flags; |
1065 | struct ap_device *ap_dev; | ||
1057 | 1066 | ||
1058 | do { | 1067 | do { |
1059 | flags = 0; | 1068 | flags = 0; |
1060 | bus_for_each_dev(&ap_bus_type, NULL, &flags, __ap_poll_all); | 1069 | spin_lock(&ap_device_lock); |
1070 | list_for_each_entry(ap_dev, &ap_device_list, list) { | ||
1071 | __ap_poll_all(ap_dev, &flags); | ||
1072 | } | ||
1073 | spin_unlock(&ap_device_lock); | ||
1061 | } while (flags & 1); | 1074 | } while (flags & 1); |
1062 | if (flags & 2) | 1075 | if (flags & 2) |
1063 | ap_schedule_poll_timer(); | 1076 | ap_schedule_poll_timer(); |
@@ -1075,6 +1088,7 @@ static int ap_poll_thread(void *data) | |||
1075 | DECLARE_WAITQUEUE(wait, current); | 1088 | DECLARE_WAITQUEUE(wait, current); |
1076 | unsigned long flags; | 1089 | unsigned long flags; |
1077 | int requests; | 1090 | int requests; |
1091 | struct ap_device *ap_dev; | ||
1078 | 1092 | ||
1079 | set_user_nice(current, 19); | 1093 | set_user_nice(current, 19); |
1080 | while (1) { | 1094 | while (1) { |
@@ -1092,10 +1106,12 @@ static int ap_poll_thread(void *data) | |||
1092 | set_current_state(TASK_RUNNING); | 1106 | set_current_state(TASK_RUNNING); |
1093 | remove_wait_queue(&ap_poll_wait, &wait); | 1107 | remove_wait_queue(&ap_poll_wait, &wait); |
1094 | 1108 | ||
1095 | local_bh_disable(); | ||
1096 | flags = 0; | 1109 | flags = 0; |
1097 | bus_for_each_dev(&ap_bus_type, NULL, &flags, __ap_poll_all); | 1110 | spin_lock_bh(&ap_device_lock); |
1098 | local_bh_enable(); | 1111 | list_for_each_entry(ap_dev, &ap_device_list, list) { |
1112 | __ap_poll_all(ap_dev, &flags); | ||
1113 | } | ||
1114 | spin_unlock_bh(&ap_device_lock); | ||
1099 | } | 1115 | } |
1100 | set_current_state(TASK_RUNNING); | 1116 | set_current_state(TASK_RUNNING); |
1101 | remove_wait_queue(&ap_poll_wait, &wait); | 1117 | remove_wait_queue(&ap_poll_wait, &wait); |
diff --git a/drivers/s390/crypto/ap_bus.h b/drivers/s390/crypto/ap_bus.h index 83b69c01cd6e..008559ea742b 100644 --- a/drivers/s390/crypto/ap_bus.h +++ b/drivers/s390/crypto/ap_bus.h | |||
@@ -106,6 +106,7 @@ struct ap_device { | |||
106 | struct device device; | 106 | struct device device; |
107 | struct ap_driver *drv; /* Pointer to AP device driver. */ | 107 | struct ap_driver *drv; /* Pointer to AP device driver. */ |
108 | spinlock_t lock; /* Per device lock. */ | 108 | spinlock_t lock; /* Per device lock. */ |
109 | struct list_head list; /* private list of all AP devices. */ | ||
109 | 110 | ||
110 | ap_qid_t qid; /* AP queue id. */ | 111 | ap_qid_t qid; /* AP queue id. */ |
111 | int queue_depth; /* AP queue depth.*/ | 112 | int queue_depth; /* AP queue depth.*/ |
diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c index 99761391f340..e3625a47a596 100644 --- a/drivers/s390/crypto/zcrypt_api.c +++ b/drivers/s390/crypto/zcrypt_api.c | |||
@@ -298,14 +298,14 @@ static long zcrypt_rsa_modexpo(struct ica_rsa_modexpo *mex) | |||
298 | get_device(&zdev->ap_dev->device); | 298 | get_device(&zdev->ap_dev->device); |
299 | zdev->request_count++; | 299 | zdev->request_count++; |
300 | __zcrypt_decrease_preference(zdev); | 300 | __zcrypt_decrease_preference(zdev); |
301 | spin_unlock_bh(&zcrypt_device_lock); | ||
302 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { | 301 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { |
302 | spin_unlock_bh(&zcrypt_device_lock); | ||
303 | rc = zdev->ops->rsa_modexpo(zdev, mex); | 303 | rc = zdev->ops->rsa_modexpo(zdev, mex); |
304 | spin_lock_bh(&zcrypt_device_lock); | ||
304 | module_put(zdev->ap_dev->drv->driver.owner); | 305 | module_put(zdev->ap_dev->drv->driver.owner); |
305 | } | 306 | } |
306 | else | 307 | else |
307 | rc = -EAGAIN; | 308 | rc = -EAGAIN; |
308 | spin_lock_bh(&zcrypt_device_lock); | ||
309 | zdev->request_count--; | 309 | zdev->request_count--; |
310 | __zcrypt_increase_preference(zdev); | 310 | __zcrypt_increase_preference(zdev); |
311 | put_device(&zdev->ap_dev->device); | 311 | put_device(&zdev->ap_dev->device); |
@@ -373,14 +373,14 @@ static long zcrypt_rsa_crt(struct ica_rsa_modexpo_crt *crt) | |||
373 | get_device(&zdev->ap_dev->device); | 373 | get_device(&zdev->ap_dev->device); |
374 | zdev->request_count++; | 374 | zdev->request_count++; |
375 | __zcrypt_decrease_preference(zdev); | 375 | __zcrypt_decrease_preference(zdev); |
376 | spin_unlock_bh(&zcrypt_device_lock); | ||
377 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { | 376 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { |
377 | spin_unlock_bh(&zcrypt_device_lock); | ||
378 | rc = zdev->ops->rsa_modexpo_crt(zdev, crt); | 378 | rc = zdev->ops->rsa_modexpo_crt(zdev, crt); |
379 | spin_lock_bh(&zcrypt_device_lock); | ||
379 | module_put(zdev->ap_dev->drv->driver.owner); | 380 | module_put(zdev->ap_dev->drv->driver.owner); |
380 | } | 381 | } |
381 | else | 382 | else |
382 | rc = -EAGAIN; | 383 | rc = -EAGAIN; |
383 | spin_lock_bh(&zcrypt_device_lock); | ||
384 | zdev->request_count--; | 384 | zdev->request_count--; |
385 | __zcrypt_increase_preference(zdev); | 385 | __zcrypt_increase_preference(zdev); |
386 | put_device(&zdev->ap_dev->device); | 386 | put_device(&zdev->ap_dev->device); |
@@ -408,14 +408,14 @@ static long zcrypt_send_cprb(struct ica_xcRB *xcRB) | |||
408 | get_device(&zdev->ap_dev->device); | 408 | get_device(&zdev->ap_dev->device); |
409 | zdev->request_count++; | 409 | zdev->request_count++; |
410 | __zcrypt_decrease_preference(zdev); | 410 | __zcrypt_decrease_preference(zdev); |
411 | spin_unlock_bh(&zcrypt_device_lock); | ||
412 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { | 411 | if (try_module_get(zdev->ap_dev->drv->driver.owner)) { |
412 | spin_unlock_bh(&zcrypt_device_lock); | ||
413 | rc = zdev->ops->send_cprb(zdev, xcRB); | 413 | rc = zdev->ops->send_cprb(zdev, xcRB); |
414 | spin_lock_bh(&zcrypt_device_lock); | ||
414 | module_put(zdev->ap_dev->drv->driver.owner); | 415 | module_put(zdev->ap_dev->drv->driver.owner); |
415 | } | 416 | } |
416 | else | 417 | else |
417 | rc = -EAGAIN; | 418 | rc = -EAGAIN; |
418 | spin_lock_bh(&zcrypt_device_lock); | ||
419 | zdev->request_count--; | 419 | zdev->request_count--; |
420 | __zcrypt_increase_preference(zdev); | 420 | __zcrypt_increase_preference(zdev); |
421 | put_device(&zdev->ap_dev->device); | 421 | put_device(&zdev->ap_dev->device); |
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index c53b69610a51..46c40bbc4bc6 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c | |||
@@ -17,6 +17,9 @@ | |||
17 | * License. See the file "COPYING" in the main directory of this archive | 17 | * License. See the file "COPYING" in the main directory of this archive |
18 | * for more details. | 18 | * for more details. |
19 | */ | 19 | */ |
20 | #if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) | ||
21 | #define SUPPORT_SYSRQ | ||
22 | #endif | ||
20 | 23 | ||
21 | #undef DEBUG | 24 | #undef DEBUG |
22 | 25 | ||
@@ -49,11 +52,6 @@ | |||
49 | #endif | 52 | #endif |
50 | 53 | ||
51 | #include <asm/sci.h> | 54 | #include <asm/sci.h> |
52 | |||
53 | #if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) | ||
54 | #define SUPPORT_SYSRQ | ||
55 | #endif | ||
56 | |||
57 | #include "sh-sci.h" | 55 | #include "sh-sci.h" |
58 | 56 | ||
59 | struct sci_port { | 57 | struct sci_port { |
@@ -645,6 +643,9 @@ static inline int sci_handle_breaks(struct uart_port *port) | |||
645 | struct tty_struct *tty = port->info->tty; | 643 | struct tty_struct *tty = port->info->tty; |
646 | struct sci_port *s = &sci_ports[port->line]; | 644 | struct sci_port *s = &sci_ports[port->line]; |
647 | 645 | ||
646 | if (uart_handle_break(port)) | ||
647 | return 0; | ||
648 | |||
648 | if (!s->break_flag && status & SCxSR_BRK(port)) { | 649 | if (!s->break_flag && status & SCxSR_BRK(port)) { |
649 | #if defined(CONFIG_CPU_SH3) | 650 | #if defined(CONFIG_CPU_SH3) |
650 | /* Debounce break */ | 651 | /* Debounce break */ |
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 63e50a1f1396..6584cf00f7f3 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c | |||
@@ -202,6 +202,7 @@ struct quirk_printer_struct { | |||
202 | 202 | ||
203 | #define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires unidirectional mode (no INs/reads) */ | 203 | #define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires unidirectional mode (no INs/reads) */ |
204 | #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ | 204 | #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ |
205 | #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific Class or SubClass */ | ||
205 | 206 | ||
206 | static const struct quirk_printer_struct quirk_printers[] = { | 207 | static const struct quirk_printer_struct quirk_printers[] = { |
207 | { 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */ | 208 | { 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */ |
@@ -218,6 +219,7 @@ static const struct quirk_printer_struct quirk_printers[] = { | |||
218 | { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ | 219 | { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ |
219 | { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ | 220 | { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ |
220 | { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, by zut <kernel@zut.de> */ | 221 | { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, by zut <kernel@zut.de> */ |
222 | { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt Printer M129C */ | ||
221 | { 0, 0 } | 223 | { 0, 0 } |
222 | }; | 224 | }; |
223 | 225 | ||
@@ -1048,7 +1050,8 @@ static int usblp_select_alts(struct usblp *usblp) | |||
1048 | ifd = &if_alt->altsetting[i]; | 1050 | ifd = &if_alt->altsetting[i]; |
1049 | 1051 | ||
1050 | if (ifd->desc.bInterfaceClass != 7 || ifd->desc.bInterfaceSubClass != 1) | 1052 | if (ifd->desc.bInterfaceClass != 7 || ifd->desc.bInterfaceSubClass != 1) |
1051 | continue; | 1053 | if (!(usblp->quirks & USBLP_QUIRK_BAD_CLASS)) |
1054 | continue; | ||
1052 | 1055 | ||
1053 | if (ifd->desc.bInterfaceProtocol < USBLP_FIRST_PROTOCOL || | 1056 | if (ifd->desc.bInterfaceProtocol < USBLP_FIRST_PROTOCOL || |
1054 | ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL) | 1057 | ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL) |
@@ -1232,6 +1235,7 @@ static struct usb_device_id usblp_ids [] = { | |||
1232 | { USB_INTERFACE_INFO(7, 1, 1) }, | 1235 | { USB_INTERFACE_INFO(7, 1, 1) }, |
1233 | { USB_INTERFACE_INFO(7, 1, 2) }, | 1236 | { USB_INTERFACE_INFO(7, 1, 2) }, |
1234 | { USB_INTERFACE_INFO(7, 1, 3) }, | 1237 | { USB_INTERFACE_INFO(7, 1, 3) }, |
1238 | { USB_DEVICE(0x04b8, 0x0202) }, /* Seiko Epson Receipt Printer M129C */ | ||
1235 | { } /* Terminating entry */ | 1239 | { } /* Terminating entry */ |
1236 | }; | 1240 | }; |
1237 | 1241 | ||
diff --git a/drivers/usb/misc/berry_charge.c b/drivers/usb/misc/berry_charge.c index 60893c6c8221..b15f2fd8dab4 100644 --- a/drivers/usb/misc/berry_charge.c +++ b/drivers/usb/misc/berry_charge.c | |||
@@ -69,7 +69,7 @@ static int magic_charge(struct usb_device *udev) | |||
69 | return retval; | 69 | return retval; |
70 | } | 70 | } |
71 | 71 | ||
72 | dbg(&udev->dev, "Sending first magic command\n"); | 72 | dbg(&udev->dev, "Sending second magic command\n"); |
73 | retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), | 73 | retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), |
74 | 0xa2, 0x40, 0, 1, dummy_buffer, 0, 100); | 74 | 0xa2, 0x40, 0, 1, dummy_buffer, 0, 100); |
75 | if (retval != 0) { | 75 | if (retval != 0) { |
diff --git a/drivers/usb/net/dm9601.c b/drivers/usb/net/dm9601.c index c0bc52be5e10..5130cc7eb314 100644 --- a/drivers/usb/net/dm9601.c +++ b/drivers/usb/net/dm9601.c | |||
@@ -578,6 +578,14 @@ static const struct usb_device_id products[] = { | |||
578 | USB_DEVICE(0x0a46, 0x9601), /* Davicom USB-100 */ | 578 | USB_DEVICE(0x0a46, 0x9601), /* Davicom USB-100 */ |
579 | .driver_info = (unsigned long)&dm9601_info, | 579 | .driver_info = (unsigned long)&dm9601_info, |
580 | }, | 580 | }, |
581 | { | ||
582 | USB_DEVICE(0x0a46, 0x6688), /* ZT6688 USB NIC */ | ||
583 | .driver_info = (unsigned long)&dm9601_info, | ||
584 | }, | ||
585 | { | ||
586 | USB_DEVICE(0x0a46, 0x0268), /* ShanTou ST268 USB NIC */ | ||
587 | .driver_info = (unsigned long)&dm9601_info, | ||
588 | }, | ||
581 | {}, // END | 589 | {}, // END |
582 | }; | 590 | }; |
583 | 591 | ||
diff --git a/drivers/usb/serial/airprime.c b/drivers/usb/serial/airprime.c index 310a8b5f5906..7538c64a5097 100644 --- a/drivers/usb/serial/airprime.c +++ b/drivers/usb/serial/airprime.c | |||
@@ -18,10 +18,6 @@ | |||
18 | 18 | ||
19 | static struct usb_device_id id_table [] = { | 19 | static struct usb_device_id id_table [] = { |
20 | { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */ | 20 | { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */ |
21 | { USB_DEVICE(0x1410, 0x1110) }, /* Novatel Wireless Merlin CDMA */ | ||
22 | { USB_DEVICE(0x1410, 0x1130) }, /* Novatel Wireless S720 CDMA/EV-DO */ | ||
23 | { USB_DEVICE(0x1410, 0x2110) }, /* Novatel Wireless U720 CDMA/EV-DO */ | ||
24 | { USB_DEVICE(0x1410, 0x1430) }, /* Novatel Merlin XU870 HSDPA/3G */ | ||
25 | { USB_DEVICE(0x1410, 0x1100) }, /* ExpressCard34 Qualcomm 3G CDMA */ | 21 | { USB_DEVICE(0x1410, 0x1100) }, /* ExpressCard34 Qualcomm 3G CDMA */ |
26 | { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */ | 22 | { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */ |
27 | { }, | 23 | { }, |
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c index 2d588fb82573..19bf403f9db2 100644 --- a/drivers/usb/serial/mos7720.c +++ b/drivers/usb/serial/mos7720.c | |||
@@ -1628,6 +1628,7 @@ static struct usb_serial_driver moschip7720_2port_driver = { | |||
1628 | .chars_in_buffer = mos7720_chars_in_buffer, | 1628 | .chars_in_buffer = mos7720_chars_in_buffer, |
1629 | .break_ctl = mos7720_break, | 1629 | .break_ctl = mos7720_break, |
1630 | .read_bulk_callback = mos7720_bulk_in_callback, | 1630 | .read_bulk_callback = mos7720_bulk_in_callback, |
1631 | .read_int_callback = mos7720_interrupt_callback, | ||
1631 | }; | 1632 | }; |
1632 | 1633 | ||
1633 | static int __init moschip7720_init(void) | 1634 | static int __init moschip7720_init(void) |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index db92a7fb1f7c..e178e6f40319 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -109,7 +109,6 @@ static int option_send_setup(struct usb_serial_port *port); | |||
109 | #define HUAWEI_PRODUCT_E220 0x1003 | 109 | #define HUAWEI_PRODUCT_E220 0x1003 |
110 | 110 | ||
111 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 | 111 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 |
112 | #define NOVATELWIRELESS_PRODUCT_U740 0x1400 | ||
113 | 112 | ||
114 | #define ANYDATA_VENDOR_ID 0x16d5 | 113 | #define ANYDATA_VENDOR_ID 0x16d5 |
115 | #define ANYDATA_PRODUCT_ID 0x6501 | 114 | #define ANYDATA_PRODUCT_ID 0x6501 |
@@ -152,7 +151,19 @@ static struct usb_device_id option_ids[] = { | |||
152 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, | 151 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, |
153 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, | 152 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, |
154 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) }, | 153 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) }, |
155 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID,NOVATELWIRELESS_PRODUCT_U740) }, | 154 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1100) }, /* Novatel Merlin XS620/S640 */ |
155 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1110) }, /* Novatel Merlin S620 */ | ||
156 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1120) }, /* Novatel Merlin EX720 */ | ||
157 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1130) }, /* Novatel Merlin S720 */ | ||
158 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1400) }, /* Novatel U730 */ | ||
159 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1410) }, /* Novatel U740 */ | ||
160 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1420) }, /* Novatel EU870 */ | ||
161 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1430) }, /* Novatel Merlin XU870 HSDPA/3G */ | ||
162 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1430) }, /* Novatel XU870 */ | ||
163 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2100) }, /* Novatel EV620 CDMA/EV-DO */ | ||
164 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2110) }, /* Novatel Merlin ES620 / Merlin ES720 / Ovation U720 */ | ||
165 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */ | ||
166 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */ | ||
156 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) }, | 167 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) }, |
157 | { } /* Terminating entry */ | 168 | { } /* Terminating entry */ |
158 | }; | 169 | }; |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 8511352251f3..7639022cdf84 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -138,6 +138,11 @@ static void destroy_serial(struct kref *kref) | |||
138 | 138 | ||
139 | dbg("%s - %s", __FUNCTION__, serial->type->description); | 139 | dbg("%s - %s", __FUNCTION__, serial->type->description); |
140 | 140 | ||
141 | serial->type->shutdown(serial); | ||
142 | |||
143 | /* return the minor range that this device had */ | ||
144 | return_serial(serial); | ||
145 | |||
141 | for (i = 0; i < serial->num_ports; ++i) | 146 | for (i = 0; i < serial->num_ports; ++i) |
142 | serial->port[i]->open_count = 0; | 147 | serial->port[i]->open_count = 0; |
143 | 148 | ||
@@ -148,12 +153,6 @@ static void destroy_serial(struct kref *kref) | |||
148 | serial->port[i] = NULL; | 153 | serial->port[i] = NULL; |
149 | } | 154 | } |
150 | 155 | ||
151 | if (serial->type->shutdown) | ||
152 | serial->type->shutdown(serial); | ||
153 | |||
154 | /* return the minor range that this device had */ | ||
155 | return_serial(serial); | ||
156 | |||
157 | /* If this is a "fake" port, we have to clean it up here, as it will | 156 | /* If this is a "fake" port, we have to clean it up here, as it will |
158 | * not get cleaned up in port_release() as it was never registered with | 157 | * not get cleaned up in port_release() as it was never registered with |
159 | * the driver core */ | 158 | * the driver core */ |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 2dd31e3f5107..e13637dfb642 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -1411,6 +1411,16 @@ UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001, | |||
1411 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1411 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1412 | US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), | 1412 | US_FL_FIX_CAPACITY | US_FL_IGNORE_RESIDUE ), |
1413 | 1413 | ||
1414 | /* | ||
1415 | * Patch by Pete Zaitcev <zaitcev@redhat.com> | ||
1416 | * Report by Mark Patton. Red Hat bz#208928. | ||
1417 | */ | ||
1418 | UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0001, | ||
1419 | "Motorola", | ||
1420 | "RAZR V3i", | ||
1421 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
1422 | US_FL_FIX_CAPACITY), | ||
1423 | |||
1414 | /* Reported by Radovan Garabik <garabik@kassiopeia.juls.savba.sk> */ | 1424 | /* Reported by Radovan Garabik <garabik@kassiopeia.juls.savba.sk> */ |
1415 | UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, | 1425 | UNUSUAL_DEV( 0x2735, 0x100b, 0x0000, 0x9999, |
1416 | "MPIO", | 1426 | "MPIO", |
diff --git a/include/asm-arm/atomic.h b/include/asm-arm/atomic.h index ea88aa6bfc78..f266c2795124 100644 --- a/include/asm-arm/atomic.h +++ b/include/asm-arm/atomic.h | |||
@@ -103,9 +103,9 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | |||
103 | unsigned long tmp, tmp2; | 103 | unsigned long tmp, tmp2; |
104 | 104 | ||
105 | __asm__ __volatile__("@ atomic_clear_mask\n" | 105 | __asm__ __volatile__("@ atomic_clear_mask\n" |
106 | "1: ldrex %0, %2\n" | 106 | "1: ldrex %0, [%2]\n" |
107 | " bic %0, %0, %3\n" | 107 | " bic %0, %0, %3\n" |
108 | " strex %1, %0, %2\n" | 108 | " strex %1, %0, [%2]\n" |
109 | " teq %1, #0\n" | 109 | " teq %1, #0\n" |
110 | " bne 1b" | 110 | " bne 1b" |
111 | : "=&r" (tmp), "=&r" (tmp2) | 111 | : "=&r" (tmp), "=&r" (tmp2) |
diff --git a/include/asm-s390/ipl.h b/include/asm-s390/ipl.h index 660f78271a93..0eb64083480a 100644 --- a/include/asm-s390/ipl.h +++ b/include/asm-s390/ipl.h | |||
@@ -14,9 +14,13 @@ | |||
14 | #define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \ | 14 | #define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \ |
15 | sizeof(struct ipl_block_fcp)) | 15 | sizeof(struct ipl_block_fcp)) |
16 | 16 | ||
17 | #define IPL_PARM_BLK0_FCP_LEN (sizeof(struct ipl_block_fcp) + 8) | ||
18 | |||
17 | #define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \ | 19 | #define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \ |
18 | sizeof(struct ipl_block_ccw)) | 20 | sizeof(struct ipl_block_ccw)) |
19 | 21 | ||
22 | #define IPL_PARM_BLK0_CCW_LEN (sizeof(struct ipl_block_ccw) + 8) | ||
23 | |||
20 | #define IPL_MAX_SUPPORTED_VERSION (0) | 24 | #define IPL_MAX_SUPPORTED_VERSION (0) |
21 | 25 | ||
22 | #define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \ | 26 | #define IPL_PARMBLOCK_START ((struct ipl_parameter_block *) \ |
@@ -58,6 +62,7 @@ struct ipl_block_ccw { | |||
58 | u8 vm_flags; | 62 | u8 vm_flags; |
59 | u8 reserved3[3]; | 63 | u8 reserved3[3]; |
60 | u32 vm_parm_len; | 64 | u32 vm_parm_len; |
65 | u8 reserved4[80]; | ||
61 | } __attribute__((packed)); | 66 | } __attribute__((packed)); |
62 | 67 | ||
63 | struct ipl_parameter_block { | 68 | struct ipl_parameter_block { |
diff --git a/include/asm-s390/unistd.h b/include/asm-s390/unistd.h index fb6fef97d739..5c6f00d62df8 100644 --- a/include/asm-s390/unistd.h +++ b/include/asm-s390/unistd.h | |||
@@ -250,8 +250,9 @@ | |||
250 | /* Number 310 is reserved for new sys_move_pages */ | 250 | /* Number 310 is reserved for new sys_move_pages */ |
251 | #define __NR_getcpu 311 | 251 | #define __NR_getcpu 311 |
252 | #define __NR_epoll_pwait 312 | 252 | #define __NR_epoll_pwait 312 |
253 | #define __NR_utimes 313 | ||
253 | 254 | ||
254 | #define NR_syscalls 313 | 255 | #define NR_syscalls 314 |
255 | 256 | ||
256 | /* | 257 | /* |
257 | * There are some system calls that are not present on 64 bit, some | 258 | * There are some system calls that are not present on 64 bit, some |
diff --git a/include/asm-sh/ioctls.h b/include/asm-sh/ioctls.h index 9d84a2d445a2..35805df010a0 100644 --- a/include/asm-sh/ioctls.h +++ b/include/asm-sh/ioctls.h | |||
@@ -16,17 +16,17 @@ | |||
16 | #define TCSETSW 0x5403 | 16 | #define TCSETSW 0x5403 |
17 | #define TCSETSF 0x5404 | 17 | #define TCSETSF 0x5404 |
18 | 18 | ||
19 | #define TCGETA _IOR('t', 23, struct termio) | 19 | #define TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */ |
20 | #define TCSETA _IOW('t', 24, struct termio) | 20 | #define TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */ |
21 | #define TCSETAW _IOW('t', 25, struct termio) | 21 | #define TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */ |
22 | #define TCSETAF _IOW('t', 28, struct termio) | 22 | #define TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */ |
23 | 23 | ||
24 | #define TCSBRK _IO('t', 29) | 24 | #define TCSBRK _IO('t', 29) |
25 | #define TCXONC _IO('t', 30) | 25 | #define TCXONC _IO('t', 30) |
26 | #define TCFLSH _IO('t', 31) | 26 | #define TCFLSH _IO('t', 31) |
27 | 27 | ||
28 | #define TIOCSWINSZ _IOW('t', 103, struct winsize) | 28 | #define TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */ |
29 | #define TIOCGWINSZ _IOR('t', 104, struct winsize) | 29 | #define TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */ |
30 | #define TIOCSTART _IO('t', 110) /* start output, like ^Q */ | 30 | #define TIOCSTART _IO('t', 110) /* start output, like ^Q */ |
31 | #define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ | 31 | #define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ |
32 | #define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ | 32 | #define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ |
@@ -59,8 +59,8 @@ | |||
59 | #define TIOCSSOFTCAR _IOW('T', 26, unsigned int) /* 0x541A */ | 59 | #define TIOCSSOFTCAR _IOW('T', 26, unsigned int) /* 0x541A */ |
60 | #define TIOCLINUX _IOW('T', 28, char) /* 0x541C */ | 60 | #define TIOCLINUX _IOW('T', 28, char) /* 0x541C */ |
61 | #define TIOCCONS _IO('T', 29) /* 0x541D */ | 61 | #define TIOCCONS _IO('T', 29) /* 0x541D */ |
62 | #define TIOCGSERIAL _IOR('T', 30, struct serial_struct) /* 0x541E */ | 62 | #define TIOCGSERIAL 0x803C541E /* _IOR('T', 30, struct serial_struct) 0x541E */ |
63 | #define TIOCSSERIAL _IOW('T', 31, struct serial_struct) /* 0x541F */ | 63 | #define TIOCSSERIAL 0x403C541F /* _IOW('T', 31, struct serial_struct) 0x541F */ |
64 | #define TIOCPKT _IOW('T', 32, int) /* 0x5420 */ | 64 | #define TIOCPKT _IOW('T', 32, int) /* 0x5420 */ |
65 | # define TIOCPKT_DATA 0 | 65 | # define TIOCPKT_DATA 0 |
66 | # define TIOCPKT_FLUSHREAD 1 | 66 | # define TIOCPKT_FLUSHREAD 1 |
@@ -86,12 +86,12 @@ | |||
86 | #define TIOCSERSWILD _IOW('T', 85, int) /* 0x5455 */ | 86 | #define TIOCSERSWILD _IOW('T', 85, int) /* 0x5455 */ |
87 | #define TIOCGLCKTRMIOS 0x5456 | 87 | #define TIOCGLCKTRMIOS 0x5456 |
88 | #define TIOCSLCKTRMIOS 0x5457 | 88 | #define TIOCSLCKTRMIOS 0x5457 |
89 | #define TIOCSERGSTRUCT _IOR('T', 88, struct async_struct) /* 0x5458 */ /* For debugging only */ | 89 | #define TIOCSERGSTRUCT 0x80d85458 /* _IOR('T', 88, struct async_struct) 0x5458 */ /* For debugging only */ |
90 | #define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* 0x5459 */ /* Get line status register */ | 90 | #define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* 0x5459 */ /* Get line status register */ |
91 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | 91 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ |
92 | # define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | 92 | # define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ |
93 | #define TIOCSERGETMULTI _IOR('T', 90, struct serial_multiport_struct) /* 0x545A */ /* Get multiport config */ | 93 | #define TIOCSERGETMULTI 0x80A8545A /* _IOR('T', 90, struct serial_multiport_struct) 0x545A */ /* Get multiport config */ |
94 | #define TIOCSERSETMULTI _IOW('T', 91, struct serial_multiport_struct) /* 0x545B */ /* Set multiport config */ | 94 | #define TIOCSERSETMULTI 0x40A8545B /* _IOW('T', 91, struct serial_multiport_struct) 0x545B */ /* Set multiport config */ |
95 | 95 | ||
96 | #define TIOCMIWAIT _IO('T', 92) /* 0x545C */ /* wait for a change on serial input line(s) */ | 96 | #define TIOCMIWAIT _IO('T', 92) /* 0x545C */ /* wait for a change on serial input line(s) */ |
97 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ | 97 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ |
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index 8ccf7ae593ef..afe188f0ad5f 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
@@ -94,8 +94,13 @@ | |||
94 | /* | 94 | /* |
95 | * Convert back and forth between INTEVT and IRQ values. | 95 | * Convert back and forth between INTEVT and IRQ values. |
96 | */ | 96 | */ |
97 | #ifdef CONFIG_CPU_HAS_INTEVT | ||
97 | #define evt2irq(evt) (((evt) >> 5) - 16) | 98 | #define evt2irq(evt) (((evt) >> 5) - 16) |
98 | #define irq2evt(irq) (((irq) + 16) << 5) | 99 | #define irq2evt(irq) (((irq) + 16) << 5) |
100 | #else | ||
101 | #define evt2irq(evt) (evt) | ||
102 | #define irq2evt(irq) (irq) | ||
103 | #endif | ||
99 | 104 | ||
100 | /* | 105 | /* |
101 | * Simple Mask Register Support | 106 | * Simple Mask Register Support |
diff --git a/include/asm-sh/unistd.h b/include/asm-sh/unistd.h index 17f527bfd455..49be50a36b77 100644 --- a/include/asm-sh/unistd.h +++ b/include/asm-sh/unistd.h | |||
@@ -233,6 +233,7 @@ | |||
233 | #define __NR_fcntl64 221 | 233 | #define __NR_fcntl64 221 |
234 | /* 223 is unused */ | 234 | /* 223 is unused */ |
235 | #define __NR_gettid 224 | 235 | #define __NR_gettid 224 |
236 | #define __NR_readahead 225 | ||
236 | #define __NR_setxattr 226 | 237 | #define __NR_setxattr 226 |
237 | #define __NR_lsetxattr 227 | 238 | #define __NR_lsetxattr 227 |
238 | #define __NR_fsetxattr 228 | 239 | #define __NR_fsetxattr 228 |