diff options
29 files changed, 158 insertions, 90 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/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/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/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 |
