Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'v3.7-rc4' into next to sync up Wacom bits

Linux 3.7-rc4

+2181 -1167
+19
Documentation/devicetree/bindings/input/touchscreen/egalax-ts.txt
··· 1 + * EETI eGalax Multiple Touch Controller 2 + 3 + Required properties: 4 + - compatible: must be "eeti,egalax_ts" 5 + - reg: i2c slave address 6 + - interrupt-parent: the phandle for the interrupt controller 7 + - interrupts: touch controller interrupt 8 + - wakeup-gpios: the gpio pin to be used for waking up the controller 9 + as well as uased as irq pin 10 + 11 + Example: 12 + 13 + egalax_ts@04 { 14 + compatible = "eeti,egalax_ts"; 15 + reg = <0x04>; 16 + interrupt-parent = <&gpio1>; 17 + interrupts = <9 2>; 18 + wakeup-gpios = <&gpio1 9 0>; 19 + };
+1 -1
Documentation/hwmon/fam15h_power
··· 10 10 BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors 11 11 (not yet published) 12 12 13 - Author: Andreas Herrmann <andreas.herrmann3@amd.com> 13 + Author: Andreas Herrmann <herrmann.der.user@googlemail.com> 14 14 15 15 Description 16 16 -----------
+3 -2
MAINTAINERS
··· 503 503 F: include/linux/altera_jtaguart.h 504 504 505 505 AMD FAM15H PROCESSOR POWER MONITORING DRIVER 506 - M: Andreas Herrmann <andreas.herrmann3@amd.com> 506 + M: Andreas Herrmann <herrmann.der.user@googlemail.com> 507 507 L: lm-sensors@lm-sensors.org 508 508 S: Maintained 509 509 F: Documentation/hwmon/fam15h_power ··· 2507 2507 M: Seung-Woo Kim <sw0312.kim@samsung.com> 2508 2508 M: Kyungmin Park <kyungmin.park@samsung.com> 2509 2509 L: dri-devel@lists.freedesktop.org 2510 + T: git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git 2510 2511 S: Supported 2511 2512 F: drivers/gpu/drm/exynos 2512 2513 F: include/drm/exynos* ··· 5648 5647 F: drivers/pinctrl/spear/ 5649 5648 5650 5649 PKTCDVD DRIVER 5651 - M: Peter Osterlund <petero2@telia.com> 5650 + M: Jiri Kosina <jkosina@suse.cz> 5652 5651 S: Maintained 5653 5652 F: drivers/block/pktcdvd.c 5654 5653 F: include/linux/pktcdvd.h
+1 -1
Makefile
··· 1 1 VERSION = 3 2 2 PATCHLEVEL = 7 3 3 SUBLEVEL = 0 4 - EXTRAVERSION = -rc3 4 + EXTRAVERSION = -rc4 5 5 NAME = Terrified Chipmunk 6 6 7 7 # *DOCUMENTATION*
+5 -9
arch/arm/xen/hypercall.S
··· 48 48 49 49 #include <linux/linkage.h> 50 50 #include <asm/assembler.h> 51 + #include <asm/opcodes-virt.h> 51 52 #include <xen/interface/xen.h> 52 53 53 54 54 - /* HVC 0xEA1 */ 55 - #ifdef CONFIG_THUMB2_KERNEL 56 - #define xen_hvc .word 0xf7e08ea1 57 - #else 58 - #define xen_hvc .word 0xe140ea71 59 - #endif 55 + #define XEN_IMM 0xEA1 60 56 61 57 #define HYPERCALL_SIMPLE(hypercall) \ 62 58 ENTRY(HYPERVISOR_##hypercall) \ 63 59 mov r12, #__HYPERVISOR_##hypercall; \ 64 - xen_hvc; \ 60 + __HVC(XEN_IMM); \ 65 61 mov pc, lr; \ 66 62 ENDPROC(HYPERVISOR_##hypercall) 67 63 ··· 72 76 stmdb sp!, {r4} \ 73 77 ldr r4, [sp, #4] \ 74 78 mov r12, #__HYPERVISOR_##hypercall; \ 75 - xen_hvc \ 79 + __HVC(XEN_IMM); \ 76 80 ldm sp!, {r4} \ 77 81 mov pc, lr \ 78 82 ENDPROC(HYPERVISOR_##hypercall) ··· 96 100 mov r2, r3 97 101 ldr r3, [sp, #8] 98 102 ldr r4, [sp, #4] 99 - xen_hvc 103 + __HVC(XEN_IMM) 100 104 ldm sp!, {r4} 101 105 mov pc, lr 102 106 ENDPROC(privcmd_call);
+1
arch/frv/Kconfig
··· 13 13 select GENERIC_CPU_DEVICES 14 14 select ARCH_WANT_IPC_PARSE_VERSION 15 15 select GENERIC_KERNEL_THREAD 16 + select GENERIC_KERNEL_EXECVE 16 17 17 18 config ZONE_DMA 18 19 bool
+6 -4
arch/frv/boot/Makefile
··· 17 17 INITRD_PHYS = 0x02180000 18 18 INITRD_VIRT = 0x02180000 19 19 20 + OBJCOPYFLAGS :=-O binary -R .note -R .note.gnu.build-id -R .comment 21 + 20 22 # 21 23 # If you don't define ZRELADDR above, 22 24 # then it defaults to ZTEXTADDR ··· 34 32 targets: $(obj)/Image 35 33 36 34 $(obj)/Image: vmlinux FORCE 37 - $(OBJCOPY) -O binary -R .note -R .comment -S vmlinux $@ 35 + $(OBJCOPY) $(OBJCOPYFLAGS) -S vmlinux $@ 38 36 39 37 #$(obj)/Image: $(CONFIGURE) $(SYSTEM) 40 - # $(OBJCOPY) -O binary -R .note -R .comment -g -S $(SYSTEM) $@ 38 + # $(OBJCOPY) $(OBJCOPYFLAGS) -g -S $(SYSTEM) $@ 41 39 42 40 bzImage: zImage 43 41 44 42 zImage: $(CONFIGURE) compressed/$(LINUX) 45 - $(OBJCOPY) -O binary -R .note -R .comment -S compressed/$(LINUX) $@ 43 + $(OBJCOPY) $(OBJCOPYFLAGS) -S compressed/$(LINUX) $@ 46 44 47 45 bootpImage: bootp/bootp 48 - $(OBJCOPY) -O binary -R .note -R .comment -S bootp/bootp $@ 46 + $(OBJCOPY) $(OBJCOPYFLAGS) -S bootp/bootp $@ 49 47 50 48 compressed/$(LINUX): $(LINUX) dep 51 49 @$(MAKE) -C compressed $(LINUX)
-1
arch/frv/include/asm/unistd.h
··· 30 30 #define __ARCH_WANT_SYS_RT_SIGACTION 31 31 #define __ARCH_WANT_SYS_RT_SIGSUSPEND 32 32 #define __ARCH_WANT_SYS_EXECVE 33 - #define __ARCH_WANT_KERNEL_EXECVE 34 33 35 34 /* 36 35 * "Conditional" syscalls
+3 -25
arch/frv/kernel/entry.S
··· 869 869 call schedule_tail 870 870 calll.p @(gr21,gr0) 871 871 or gr20,gr20,gr8 872 - bra sys_exit 873 - 874 - .globl ret_from_kernel_execve 875 - ret_from_kernel_execve: 876 - ori gr28,0,sp 877 872 bra __syscall_exit 878 873 879 874 ################################################################################################### ··· 1075 1080 subicc gr5,#0,gr0,icc0 1076 1081 beq icc0,#0,__entry_return_direct 1077 1082 1078 - __entry_preempt_need_resched: 1079 - ldi @(gr15,#TI_FLAGS),gr4 1080 - andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0 1081 - beq icc0,#1,__entry_return_direct 1082 - 1083 - setlos #PREEMPT_ACTIVE,gr5 1084 - sti gr5,@(gr15,#TI_FLAGS) 1085 - 1086 - andi gr23,#~PSR_PIL,gr23 1087 - movgs gr23,psr 1088 - 1089 - call schedule 1090 - sti gr0,@(gr15,#TI_PRE_COUNT) 1091 - 1092 - movsg psr,gr23 1093 - ori gr23,#PSR_PIL_14,gr23 1094 - movgs gr23,psr 1095 - bra __entry_preempt_need_resched 1096 - #else 1097 - bra __entry_return_direct 1083 + subcc gr0,gr0,gr0,icc2 /* set Z and clear C */ 1084 + call preempt_schedule_irq 1098 1085 #endif 1086 + bra __entry_return_direct 1099 1087 1100 1088 1101 1089 ###############################################################################
+3 -2
arch/frv/kernel/process.c
··· 181 181 childregs = (struct pt_regs *) 182 182 (task_stack_page(p) + THREAD_SIZE - FRV_FRAME0_SIZE); 183 183 184 + /* set up the userspace frame (the only place that the USP is stored) */ 185 + *childregs = *__kernel_frame0_ptr; 186 + 184 187 p->set_child_tid = p->clear_child_tid = NULL; 185 188 186 189 p->thread.frame = childregs; ··· 194 191 p->thread.frame0 = childregs; 195 192 196 193 if (unlikely(!regs)) { 197 - memset(childregs, 0, sizeof(struct pt_regs)); 198 194 childregs->gr9 = usp; /* function */ 199 195 childregs->gr8 = arg; 200 - childregs->psr = PSR_S; 201 196 p->thread.pc = (unsigned long) ret_from_kernel_thread; 202 197 save_user_regs(p->thread.user); 203 198 return 0;
+1
arch/frv/mb93090-mb00/pci-dma-nommu.c
··· 11 11 12 12 #include <linux/types.h> 13 13 #include <linux/slab.h> 14 + #include <linux/export.h> 14 15 #include <linux/dma-mapping.h> 15 16 #include <linux/list.h> 16 17 #include <linux/pci.h>
-1
arch/x86/include/asm/xen/hypervisor.h
··· 33 33 #ifndef _ASM_X86_XEN_HYPERVISOR_H 34 34 #define _ASM_X86_XEN_HYPERVISOR_H 35 35 36 - /* arch/i386/kernel/setup.c */ 37 36 extern struct shared_info *HYPERVISOR_shared_info; 38 37 extern struct start_info *xen_start_info; 39 38
+34 -26
arch/x86/kvm/x86.c
··· 3779 3779 { 3780 3780 struct kvm_mmio_fragment *frag = &vcpu->mmio_fragments[0]; 3781 3781 3782 - memcpy(vcpu->run->mmio.data, frag->data, frag->len); 3782 + memcpy(vcpu->run->mmio.data, frag->data, min(8u, frag->len)); 3783 3783 return X86EMUL_CONTINUE; 3784 3784 } 3785 3785 ··· 3832 3832 bytes -= handled; 3833 3833 val += handled; 3834 3834 3835 - while (bytes) { 3836 - unsigned now = min(bytes, 8U); 3837 - 3838 - frag = &vcpu->mmio_fragments[vcpu->mmio_nr_fragments++]; 3839 - frag->gpa = gpa; 3840 - frag->data = val; 3841 - frag->len = now; 3842 - 3843 - gpa += now; 3844 - val += now; 3845 - bytes -= now; 3846 - } 3835 + WARN_ON(vcpu->mmio_nr_fragments >= KVM_MAX_MMIO_FRAGMENTS); 3836 + frag = &vcpu->mmio_fragments[vcpu->mmio_nr_fragments++]; 3837 + frag->gpa = gpa; 3838 + frag->data = val; 3839 + frag->len = bytes; 3847 3840 return X86EMUL_CONTINUE; 3848 3841 } 3849 3842 ··· 3883 3890 vcpu->mmio_needed = 1; 3884 3891 vcpu->mmio_cur_fragment = 0; 3885 3892 3886 - vcpu->run->mmio.len = vcpu->mmio_fragments[0].len; 3893 + vcpu->run->mmio.len = min(8u, vcpu->mmio_fragments[0].len); 3887 3894 vcpu->run->mmio.is_write = vcpu->mmio_is_write = ops->write; 3888 3895 vcpu->run->exit_reason = KVM_EXIT_MMIO; 3889 3896 vcpu->run->mmio.phys_addr = gpa; ··· 5515 5522 * 5516 5523 * read: 5517 5524 * for each fragment 5518 - * write gpa, len 5519 - * exit 5520 - * copy data 5525 + * for each mmio piece in the fragment 5526 + * write gpa, len 5527 + * exit 5528 + * copy data 5521 5529 * execute insn 5522 5530 * 5523 5531 * write: 5524 5532 * for each fragment 5525 - * write gpa, len 5526 - * copy data 5527 - * exit 5533 + * for each mmio piece in the fragment 5534 + * write gpa, len 5535 + * copy data 5536 + * exit 5528 5537 */ 5529 5538 static int complete_emulated_mmio(struct kvm_vcpu *vcpu) 5530 5539 { 5531 5540 struct kvm_run *run = vcpu->run; 5532 5541 struct kvm_mmio_fragment *frag; 5542 + unsigned len; 5533 5543 5534 5544 BUG_ON(!vcpu->mmio_needed); 5535 5545 5536 5546 /* Complete previous fragment */ 5537 - frag = &vcpu->mmio_fragments[vcpu->mmio_cur_fragment++]; 5547 + frag = &vcpu->mmio_fragments[vcpu->mmio_cur_fragment]; 5548 + len = min(8u, frag->len); 5538 5549 if (!vcpu->mmio_is_write) 5539 - memcpy(frag->data, run->mmio.data, frag->len); 5550 + memcpy(frag->data, run->mmio.data, len); 5551 + 5552 + if (frag->len <= 8) { 5553 + /* Switch to the next fragment. */ 5554 + frag++; 5555 + vcpu->mmio_cur_fragment++; 5556 + } else { 5557 + /* Go forward to the next mmio piece. */ 5558 + frag->data += len; 5559 + frag->gpa += len; 5560 + frag->len -= len; 5561 + } 5562 + 5540 5563 if (vcpu->mmio_cur_fragment == vcpu->mmio_nr_fragments) { 5541 5564 vcpu->mmio_needed = 0; 5542 5565 if (vcpu->mmio_is_write) ··· 5560 5551 vcpu->mmio_read_completed = 1; 5561 5552 return complete_emulated_io(vcpu); 5562 5553 } 5563 - /* Initiate next fragment */ 5564 - ++frag; 5554 + 5565 5555 run->exit_reason = KVM_EXIT_MMIO; 5566 5556 run->mmio.phys_addr = frag->gpa; 5567 5557 if (vcpu->mmio_is_write) 5568 - memcpy(run->mmio.data, frag->data, frag->len); 5569 - run->mmio.len = frag->len; 5558 + memcpy(run->mmio.data, frag->data, min(8u, frag->len)); 5559 + run->mmio.len = min(8u, frag->len); 5570 5560 run->mmio.is_write = vcpu->mmio_is_write; 5571 5561 vcpu->arch.complete_userspace_io = complete_emulated_mmio; 5572 5562 return 0;
+20 -1
arch/x86/xen/mmu.c
··· 1288 1288 return this_cpu_read(xen_vcpu_info.arch.cr2); 1289 1289 } 1290 1290 1291 + void xen_flush_tlb_all(void) 1292 + { 1293 + struct mmuext_op *op; 1294 + struct multicall_space mcs; 1295 + 1296 + trace_xen_mmu_flush_tlb_all(0); 1297 + 1298 + preempt_disable(); 1299 + 1300 + mcs = xen_mc_entry(sizeof(*op)); 1301 + 1302 + op = mcs.args; 1303 + op->cmd = MMUEXT_TLB_FLUSH_ALL; 1304 + MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); 1305 + 1306 + xen_mc_issue(PARAVIRT_LAZY_MMU); 1307 + 1308 + preempt_enable(); 1309 + } 1291 1310 static void xen_flush_tlb(void) 1292 1311 { 1293 1312 struct mmuext_op *op; ··· 2537 2518 err = 0; 2538 2519 out: 2539 2520 2540 - flush_tlb_all(); 2521 + xen_flush_tlb_all(); 2541 2522 2542 2523 return err; 2543 2524 }
+2
arch/xtensa/Kconfig
··· 13 13 select GENERIC_CPU_DEVICES 14 14 select MODULES_USE_ELF_RELA 15 15 select GENERIC_PCI_IOMAP 16 + select GENERIC_KERNEL_THREAD 17 + select GENERIC_KERNEL_EXECVE 16 18 select ARCH_WANT_OPTIONAL_GPIOLIB 17 19 help 18 20 Xtensa processors are 32-bit RISC machines designed by Tensilica
+4
arch/xtensa/include/asm/io.h
··· 62 62 static inline void iounmap(volatile void __iomem *addr) 63 63 { 64 64 } 65 + 66 + #define virt_to_bus virt_to_phys 67 + #define bus_to_virt phys_to_virt 68 + 65 69 #endif /* CONFIG_MMU */ 66 70 67 71 /*
+1 -3
arch/xtensa/include/asm/processor.h
··· 152 152 153 153 /* Clearing a0 terminates the backtrace. */ 154 154 #define start_thread(regs, new_pc, new_sp) \ 155 + memset(regs, 0, sizeof(*regs)); \ 155 156 regs->pc = new_pc; \ 156 157 regs->ps = USER_PS_VALUE; \ 157 158 regs->areg[1] = new_sp; \ ··· 168 167 169 168 /* Free all resources held by a thread. */ 170 169 #define release_thread(thread) do { } while(0) 171 - 172 - /* Create a kernel thread without removing it from tasklists */ 173 - extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); 174 170 175 171 /* Copy and release all segment info associated with a VM */ 176 172 #define copy_segments(p, mm) do { } while(0)
+1 -1
arch/xtensa/include/asm/syscall.h
··· 10 10 11 11 struct pt_regs; 12 12 struct sigaction; 13 - asmlinkage long xtensa_execve(char*, char**, char**, struct pt_regs*); 13 + asmlinkage long sys_execve(char*, char**, char**, struct pt_regs*); 14 14 asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*); 15 15 asmlinkage long xtensa_ptrace(long, long, long, long); 16 16 asmlinkage long xtensa_sigreturn(struct pt_regs*);
+5 -10
arch/xtensa/include/asm/unistd.h
··· 1 - /* 2 - * include/asm-xtensa/unistd.h 3 - * 4 - * This file is subject to the terms and conditions of the GNU General Public 5 - * License. See the file "COPYING" in the main directory of this archive 6 - * for more details. 7 - * 8 - * Copyright (C) 2001 - 2005 Tensilica Inc. 9 - */ 1 + #ifndef _XTENSA_UNISTD_H 2 + #define _XTENSA_UNISTD_H 10 3 4 + #define __ARCH_WANT_SYS_EXECVE 11 5 #include <uapi/asm/unistd.h> 12 - 13 6 14 7 /* 15 8 * "Conditional" syscalls ··· 30 37 #define __IGNORE_mmap /* use mmap2 */ 31 38 #define __IGNORE_vfork /* use clone */ 32 39 #define __IGNORE_fadvise64 /* use fadvise64_64 */ 40 + 41 + #endif /* _XTENSA_UNISTD_H */
+4 -12
arch/xtensa/include/uapi/asm/unistd.h
··· 1 - /* 2 - * include/asm-xtensa/unistd.h 3 - * 4 - * This file is subject to the terms and conditions of the GNU General Public 5 - * License. See the file "COPYING" in the main directory of this archive 6 - * for more details. 7 - * 8 - * Copyright (C) 2001 - 2012 Tensilica Inc. 9 - */ 10 - 11 - #ifndef _UAPI_XTENSA_UNISTD_H 1 + #if !defined(_UAPI_XTENSA_UNISTD_H) || defined(__SYSCALL) 12 2 #define _UAPI_XTENSA_UNISTD_H 13 3 14 4 #ifndef __SYSCALL ··· 262 272 #define __NR_clone 116 263 273 __SYSCALL(116, xtensa_clone, 5) 264 274 #define __NR_execve 117 265 - __SYSCALL(117, xtensa_execve, 3) 275 + __SYSCALL(117, sys_execve, 3) 266 276 #define __NR_exit 118 267 277 __SYSCALL(118, sys_exit, 1) 268 278 #define __NR_exit_group 119 ··· 748 758 #define SYS_XTENSA_ATOMIC_CMP_SWP 4 /* compare and swap */ 749 759 750 760 #define SYS_XTENSA_COUNT 5 /* count */ 761 + 762 + #undef __SYSCALL 751 763 752 764 #endif /* _UAPI_XTENSA_UNISTD_H */
+13 -44
arch/xtensa/kernel/entry.S
··· 1833 1833 1834 1834 1835 1835 /* 1836 - * Create a kernel thread 1837 - * 1838 - * int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) 1839 - * a2 a2 a3 a4 1840 - */ 1841 - 1842 - ENTRY(kernel_thread) 1843 - entry a1, 16 1844 - 1845 - mov a5, a2 # preserve fn over syscall 1846 - mov a7, a3 # preserve args over syscall 1847 - 1848 - movi a3, _CLONE_VM | _CLONE_UNTRACED 1849 - movi a2, __NR_clone 1850 - or a6, a4, a3 # arg0: flags 1851 - mov a3, a1 # arg1: sp 1852 - syscall 1853 - 1854 - beq a3, a1, 1f # branch if parent 1855 - mov a6, a7 # args 1856 - callx4 a5 # fn(args) 1857 - 1858 - movi a2, __NR_exit 1859 - syscall # return value of fn(args) still in a6 1860 - 1861 - 1: retw 1862 - 1863 - /* 1864 - * Do a system call from kernel instead of calling sys_execve, so we end up 1865 - * with proper pt_regs. 1866 - * 1867 - * int kernel_execve(const char *fname, char *const argv[], charg *const envp[]) 1868 - * a2 a2 a3 a4 1869 - */ 1870 - 1871 - ENTRY(kernel_execve) 1872 - entry a1, 16 1873 - mov a6, a2 # arg0 is in a6 1874 - movi a2, __NR_execve 1875 - syscall 1876 - 1877 - retw 1878 - 1879 - /* 1880 1836 * Task switch. 1881 1837 * 1882 1838 * struct task* _switch_to (struct task* prev, struct task* next) ··· 1914 1958 1915 1959 j common_exception_return 1916 1960 1961 + /* 1962 + * Kernel thread creation helper 1963 + * On entry, set up by copy_thread: a2 = thread_fn, a3 = thread_fn arg 1964 + * left from _switch_to: a6 = prev 1965 + */ 1966 + ENTRY(ret_from_kernel_thread) 1967 + 1968 + call4 schedule_tail 1969 + mov a6, a3 1970 + callx4 a2 1971 + j common_exception_return 1972 + 1973 + ENDPROC(ret_from_kernel_thread)
+71 -57
arch/xtensa/kernel/process.c
··· 45 45 #include <asm/regs.h> 46 46 47 47 extern void ret_from_fork(void); 48 + extern void ret_from_kernel_thread(void); 48 49 49 50 struct task_struct *current_set[NR_CPUS] = {&init_task, }; 50 51 ··· 159 158 /* 160 159 * Copy thread. 161 160 * 161 + * There are two modes in which this function is called: 162 + * 1) Userspace thread creation, 163 + * regs != NULL, usp_thread_fn is userspace stack pointer. 164 + * It is expected to copy parent regs (in case CLONE_VM is not set 165 + * in the clone_flags) and set up passed usp in the childregs. 166 + * 2) Kernel thread creation, 167 + * regs == NULL, usp_thread_fn is the function to run in the new thread 168 + * and thread_fn_arg is its parameter. 169 + * childregs are not used for the kernel threads. 170 + * 162 171 * The stack layout for the new thread looks like this: 163 172 * 164 - * +------------------------+ <- sp in childregs (= tos) 173 + * +------------------------+ 165 174 * | childregs | 166 175 * +------------------------+ <- thread.sp = sp in dummy-frame 167 176 * | dummy-frame | (saved in dummy-frame spill-area) 168 177 * +------------------------+ 169 178 * 170 - * We create a dummy frame to return to ret_from_fork: 171 - * a0 points to ret_from_fork (simulating a call4) 179 + * We create a dummy frame to return to either ret_from_fork or 180 + * ret_from_kernel_thread: 181 + * a0 points to ret_from_fork/ret_from_kernel_thread (simulating a call4) 172 182 * sp points to itself (thread.sp) 173 - * a2, a3 are unused. 183 + * a2, a3 are unused for userspace threads, 184 + * a2 points to thread_fn, a3 holds thread_fn arg for kernel threads. 174 185 * 175 186 * Note: This is a pristine frame, so we don't need any spill region on top of 176 187 * childregs. ··· 198 185 * involved. Much simpler to just not copy those live frames across. 199 186 */ 200 187 201 - int copy_thread(unsigned long clone_flags, unsigned long usp, 202 - unsigned long unused, 203 - struct task_struct * p, struct pt_regs * regs) 188 + int copy_thread(unsigned long clone_flags, unsigned long usp_thread_fn, 189 + unsigned long thread_fn_arg, 190 + struct task_struct *p, struct pt_regs *unused) 204 191 { 205 - struct pt_regs *childregs; 206 - unsigned long tos; 207 - int user_mode = user_mode(regs); 192 + struct pt_regs *childregs = task_pt_regs(p); 208 193 209 194 #if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS) 210 195 struct thread_info *ti; 211 196 #endif 212 197 213 - /* Set up new TSS. */ 214 - tos = (unsigned long)task_stack_page(p) + THREAD_SIZE; 215 - if (user_mode) 216 - childregs = (struct pt_regs*)(tos - PT_USER_SIZE); 217 - else 218 - childregs = (struct pt_regs*)tos - 1; 219 - 220 - /* This does not copy all the regs. In a bout of brilliance or madness, 221 - ARs beyond a0-a15 exist past the end of the struct. */ 222 - *childregs = *regs; 223 - 224 198 /* Create a call4 dummy-frame: a0 = 0, a1 = childregs. */ 225 199 *((int*)childregs - 3) = (unsigned long)childregs; 226 200 *((int*)childregs - 4) = 0; 227 201 228 - childregs->areg[2] = 0; 229 - p->set_child_tid = p->clear_child_tid = NULL; 230 - p->thread.ra = MAKE_RA_FOR_CALL((unsigned long)ret_from_fork, 0x1); 231 202 p->thread.sp = (unsigned long)childregs; 232 203 233 - if (user_mode(regs)) { 204 + if (!(p->flags & PF_KTHREAD)) { 205 + struct pt_regs *regs = current_pt_regs(); 206 + unsigned long usp = usp_thread_fn ? 207 + usp_thread_fn : regs->areg[1]; 234 208 209 + p->thread.ra = MAKE_RA_FOR_CALL( 210 + (unsigned long)ret_from_fork, 0x1); 211 + 212 + /* This does not copy all the regs. 213 + * In a bout of brilliance or madness, 214 + * ARs beyond a0-a15 exist past the end of the struct. 215 + */ 216 + *childregs = *regs; 235 217 childregs->areg[1] = usp; 218 + childregs->areg[2] = 0; 219 + 220 + /* When sharing memory with the parent thread, the child 221 + usually starts on a pristine stack, so we have to reset 222 + windowbase, windowstart and wmask. 223 + (Note that such a new thread is required to always create 224 + an initial call4 frame) 225 + The exception is vfork, where the new thread continues to 226 + run on the parent's stack until it calls execve. This could 227 + be a call8 or call12, which requires a legal stack frame 228 + of the previous caller for the overflow handlers to work. 229 + (Note that it's always legal to overflow live registers). 230 + In this case, ensure to spill at least the stack pointer 231 + of that frame. */ 232 + 236 233 if (clone_flags & CLONE_VM) { 237 - childregs->wmask = 1; /* can't share live windows */ 234 + /* check that caller window is live and same stack */ 235 + int len = childregs->wmask & ~0xf; 236 + if (regs->areg[1] == usp && len != 0) { 237 + int callinc = (regs->areg[0] >> 30) & 3; 238 + int caller_ars = XCHAL_NUM_AREGS - callinc * 4; 239 + put_user(regs->areg[caller_ars+1], 240 + (unsigned __user*)(usp - 12)); 241 + } 242 + childregs->wmask = 1; 243 + childregs->windowstart = 1; 244 + childregs->windowbase = 0; 238 245 } else { 239 246 int len = childregs->wmask & ~0xf; 240 247 memcpy(&childregs->areg[XCHAL_NUM_AREGS - len/4], ··· 263 230 // FIXME: we need to set THREADPTR in thread_info... 264 231 if (clone_flags & CLONE_SETTLS) 265 232 childregs->areg[2] = childregs->areg[6]; 266 - 267 233 } else { 268 - /* In kernel space, we start a new thread with a new stack. */ 269 - childregs->wmask = 1; 270 - childregs->areg[1] = tos; 234 + p->thread.ra = MAKE_RA_FOR_CALL( 235 + (unsigned long)ret_from_kernel_thread, 1); 236 + 237 + /* pass parameters to ret_from_kernel_thread: 238 + * a2 = thread_fn, a3 = thread_fn arg 239 + */ 240 + *((int *)childregs - 1) = thread_fn_arg; 241 + *((int *)childregs - 2) = usp_thread_fn; 242 + 243 + /* Childregs are only used when we're going to userspace 244 + * in which case start_thread will set them up. 245 + */ 271 246 } 272 247 273 248 #if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS) ··· 371 330 void __user *child_tid, long a5, 372 331 struct pt_regs *regs) 373 332 { 374 - if (!newsp) 375 - newsp = regs->areg[1]; 376 333 return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); 377 334 } 378 - 379 - /* 380 - * xtensa_execve() executes a new program. 381 - */ 382 - 383 - asmlinkage 384 - long xtensa_execve(const char __user *name, 385 - const char __user *const __user *argv, 386 - const char __user *const __user *envp, 387 - long a3, long a4, long a5, 388 - struct pt_regs *regs) 389 - { 390 - long error; 391 - struct filename *filename; 392 - 393 - filename = getname(name); 394 - error = PTR_ERR(filename); 395 - if (IS_ERR(filename)) 396 - goto out; 397 - error = do_execve(filename->name, argv, envp, regs); 398 - putname(filename); 399 - out: 400 - return error; 401 - } 402 -
+3 -4
arch/xtensa/kernel/syscall.c
··· 32 32 syscall_t sys_call_table[__NR_syscall_count] /* FIXME __cacheline_aligned */= { 33 33 [0 ... __NR_syscall_count - 1] = (syscall_t)&sys_ni_syscall, 34 34 35 - #undef __SYSCALL 36 35 #define __SYSCALL(nr,symbol,nargs) [ nr ] = (syscall_t)symbol, 37 - #undef __KERNEL_SYSCALLS__ 38 - #include <asm/unistd.h> 36 + #include <uapi/asm/unistd.h> 39 37 }; 40 38 41 39 asmlinkage long xtensa_shmat(int shmid, char __user *shmaddr, int shmflg) ··· 47 49 return (long)ret; 48 50 } 49 51 50 - asmlinkage long xtensa_fadvise64_64(int fd, int advice, unsigned long long offset, unsigned long long len) 52 + asmlinkage long xtensa_fadvise64_64(int fd, int advice, 53 + unsigned long long offset, unsigned long long len) 51 54 { 52 55 return sys_fadvise64_64(fd, offset, len, advice); 53 56 }
-1
arch/xtensa/kernel/xtensa_ksyms.c
··· 43 43 EXPORT_SYMBOL(clear_page); 44 44 EXPORT_SYMBOL(copy_page); 45 45 46 - EXPORT_SYMBOL(kernel_thread); 47 46 EXPORT_SYMBOL(empty_zero_page); 48 47 49 48 /*
+1 -1
block/Kconfig
··· 89 89 90 90 config BLK_DEV_THROTTLING 91 91 bool "Block layer bio throttling support" 92 - depends on BLK_CGROUP=y && EXPERIMENTAL 92 + depends on BLK_CGROUP=y 93 93 default n 94 94 ---help--- 95 95 Block layer bio throttling support. It can be used to limit
+10
block/blk-cgroup.c
··· 285 285 blkg_destroy(blkg); 286 286 spin_unlock(&blkcg->lock); 287 287 } 288 + 289 + /* 290 + * root blkg is destroyed. Just clear the pointer since 291 + * root_rl does not take reference on root blkg. 292 + */ 293 + q->root_blkg = NULL; 294 + q->root_rl.blkg = NULL; 288 295 } 289 296 290 297 static void blkg_rcu_free(struct rcu_head *rcu_head) ··· 333 326 */ 334 327 if (rl == &q->root_rl) { 335 328 ent = &q->blkg_list; 329 + /* There are no more block groups, hence no request lists */ 330 + if (list_empty(ent)) 331 + return NULL; 336 332 } else { 337 333 blkg = container_of(rl, struct blkcg_gq, rl); 338 334 ent = &blkg->q_node;
+2 -1
block/blk-core.c
··· 2868 2868 struct request *rqa = container_of(a, struct request, queuelist); 2869 2869 struct request *rqb = container_of(b, struct request, queuelist); 2870 2870 2871 - return !(rqa->q <= rqb->q); 2871 + return !(rqa->q < rqb->q || 2872 + (rqa->q == rqb->q && blk_rq_pos(rqa) < blk_rq_pos(rqb))); 2872 2873 } 2873 2874 2874 2875 /*
+7 -4
drivers/acpi/video.c
··· 1345 1345 acpi_video_bus_get_devices(struct acpi_video_bus *video, 1346 1346 struct acpi_device *device) 1347 1347 { 1348 - int status; 1348 + int status = 0; 1349 1349 struct acpi_device *dev; 1350 1350 1351 - status = acpi_video_device_enumerate(video); 1352 - if (status) 1353 - return status; 1351 + /* 1352 + * There are systems where video module known to work fine regardless 1353 + * of broken _DOD and ignoring returned value here doesn't cause 1354 + * any issues later. 1355 + */ 1356 + acpi_video_device_enumerate(video); 1354 1357 1355 1358 list_for_each_entry(dev, &device->children, node) { 1356 1359
+8 -7
drivers/block/Kconfig
··· 131 131 config BLK_CPQ_CISS_DA 132 132 tristate "Compaq Smart Array 5xxx support" 133 133 depends on PCI 134 + select CHECK_SIGNATURE 134 135 help 135 136 This is the driver for Compaq Smart Array 5xxx controllers. 136 137 Everyone using these boards should say Y here. ··· 167 166 module will be called DAC960. 168 167 169 168 config BLK_DEV_UMEM 170 - tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)" 171 - depends on PCI && EXPERIMENTAL 169 + tristate "Micro Memory MM5415 Battery Backed RAM support" 170 + depends on PCI 172 171 ---help--- 173 172 Saying Y here will include support for the MM5415 family of 174 173 battery backed (Non-volatile) RAM cards. ··· 431 430 a disc is opened for writing. 432 431 433 432 config CDROM_PKTCDVD_WCACHE 434 - bool "Enable write caching (EXPERIMENTAL)" 435 - depends on CDROM_PKTCDVD && EXPERIMENTAL 433 + bool "Enable write caching" 434 + depends on CDROM_PKTCDVD 436 435 help 437 436 If enabled, write caching will be set for the CD-R/W device. For now 438 437 this option is dangerous unless the CD-RW media is known good, as we ··· 509 508 510 509 511 510 config VIRTIO_BLK 512 - tristate "Virtio block driver (EXPERIMENTAL)" 513 - depends on EXPERIMENTAL && VIRTIO 511 + tristate "Virtio block driver" 512 + depends on VIRTIO 514 513 ---help--- 515 514 This is the virtual block driver for virtio. It can be used with 516 515 lguest or QEMU based VMMs (like KVM or Xen). Say Y or M. ··· 529 528 530 529 config BLK_DEV_RBD 531 530 tristate "Rados block device (RBD)" 532 - depends on INET && EXPERIMENTAL && BLOCK 531 + depends on INET && BLOCK 533 532 select CEPH_LIB 534 533 select LIBCRC32C 535 534 select CRYPTO_AES
-1
drivers/block/cciss.c
··· 5205 5205 return; 5206 5206 } 5207 5207 /* write all data in the battery backed cache to disk */ 5208 - memset(flush_buf, 0, 4); 5209 5208 return_code = sendcmd_withirq(h, CCISS_CACHE_FLUSH, flush_buf, 5210 5209 4, 0, CTLR_LUNID, TYPE_CMD); 5211 5210 kfree(flush_buf);
+48 -42
drivers/block/floppy.c
··· 4109 4109 4110 4110 static struct platform_device floppy_device[N_DRIVE]; 4111 4111 4112 + static bool floppy_available(int drive) 4113 + { 4114 + if (!(allowed_drive_mask & (1 << drive))) 4115 + return false; 4116 + if (fdc_state[FDC(drive)].version == FDC_NONE) 4117 + return false; 4118 + return true; 4119 + } 4120 + 4112 4121 static struct kobject *floppy_find(dev_t dev, int *part, void *data) 4113 4122 { 4114 4123 int drive = (*part & 3) | ((*part & 0x80) >> 5); 4115 - if (drive >= N_DRIVE || 4116 - !(allowed_drive_mask & (1 << drive)) || 4117 - fdc_state[FDC(drive)].version == FDC_NONE) 4124 + if (drive >= N_DRIVE || !floppy_available(drive)) 4118 4125 return NULL; 4119 4126 if (((*part >> 2) & 0x1f) >= ARRAY_SIZE(floppy_type)) 4120 4127 return NULL; ··· 4131 4124 4132 4125 static int __init do_floppy_init(void) 4133 4126 { 4134 - int i, unit, drive; 4135 - int err, dr; 4127 + int i, unit, drive, err; 4136 4128 4137 4129 set_debugt(); 4138 4130 interruptjiffies = resultjiffies = jiffies; ··· 4143 4137 4144 4138 raw_cmd = NULL; 4145 4139 4146 - for (dr = 0; dr < N_DRIVE; dr++) { 4147 - disks[dr] = alloc_disk(1); 4148 - if (!disks[dr]) { 4140 + floppy_wq = alloc_ordered_workqueue("floppy", 0); 4141 + if (!floppy_wq) 4142 + return -ENOMEM; 4143 + 4144 + for (drive = 0; drive < N_DRIVE; drive++) { 4145 + disks[drive] = alloc_disk(1); 4146 + if (!disks[drive]) { 4149 4147 err = -ENOMEM; 4150 4148 goto out_put_disk; 4151 4149 } 4152 4150 4153 - floppy_wq = alloc_ordered_workqueue("floppy", 0); 4154 - if (!floppy_wq) { 4151 + disks[drive]->queue = blk_init_queue(do_fd_request, &floppy_lock); 4152 + if (!disks[drive]->queue) { 4155 4153 err = -ENOMEM; 4156 4154 goto out_put_disk; 4157 4155 } 4158 4156 4159 - disks[dr]->queue = blk_init_queue(do_fd_request, &floppy_lock); 4160 - if (!disks[dr]->queue) { 4161 - err = -ENOMEM; 4162 - goto out_destroy_workq; 4163 - } 4157 + blk_queue_max_hw_sectors(disks[drive]->queue, 64); 4158 + disks[drive]->major = FLOPPY_MAJOR; 4159 + disks[drive]->first_minor = TOMINOR(drive); 4160 + disks[drive]->fops = &floppy_fops; 4161 + sprintf(disks[drive]->disk_name, "fd%d", drive); 4164 4162 4165 - blk_queue_max_hw_sectors(disks[dr]->queue, 64); 4166 - disks[dr]->major = FLOPPY_MAJOR; 4167 - disks[dr]->first_minor = TOMINOR(dr); 4168 - disks[dr]->fops = &floppy_fops; 4169 - sprintf(disks[dr]->disk_name, "fd%d", dr); 4170 - 4171 - init_timer(&motor_off_timer[dr]); 4172 - motor_off_timer[dr].data = dr; 4173 - motor_off_timer[dr].function = motor_off_callback; 4163 + init_timer(&motor_off_timer[drive]); 4164 + motor_off_timer[drive].data = drive; 4165 + motor_off_timer[drive].function = motor_off_callback; 4174 4166 } 4175 4167 4176 4168 err = register_blkdev(FLOPPY_MAJOR, "fd"); ··· 4286 4282 } 4287 4283 4288 4284 for (drive = 0; drive < N_DRIVE; drive++) { 4289 - if (!(allowed_drive_mask & (1 << drive))) 4290 - continue; 4291 - if (fdc_state[FDC(drive)].version == FDC_NONE) 4285 + if (!floppy_available(drive)) 4292 4286 continue; 4293 4287 4294 4288 floppy_device[drive].name = floppy_device_name; ··· 4295 4293 4296 4294 err = platform_device_register(&floppy_device[drive]); 4297 4295 if (err) 4298 - goto out_release_dma; 4296 + goto out_remove_drives; 4299 4297 4300 4298 err = device_create_file(&floppy_device[drive].dev, 4301 4299 &dev_attr_cmos); ··· 4313 4311 4314 4312 out_unreg_platform_dev: 4315 4313 platform_device_unregister(&floppy_device[drive]); 4314 + out_remove_drives: 4315 + while (drive--) { 4316 + if (floppy_available(drive)) { 4317 + del_gendisk(disks[drive]); 4318 + device_remove_file(&floppy_device[drive].dev, &dev_attr_cmos); 4319 + platform_device_unregister(&floppy_device[drive]); 4320 + } 4321 + } 4316 4322 out_release_dma: 4317 4323 if (atomic_read(&usage_count)) 4318 4324 floppy_release_irq_and_dma(); 4319 4325 out_unreg_region: 4320 4326 blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); 4321 4327 platform_driver_unregister(&floppy_driver); 4322 - out_destroy_workq: 4323 - destroy_workqueue(floppy_wq); 4324 4328 out_unreg_blkdev: 4325 4329 unregister_blkdev(FLOPPY_MAJOR, "fd"); 4326 4330 out_put_disk: 4327 - while (dr--) { 4328 - del_timer_sync(&motor_off_timer[dr]); 4329 - if (disks[dr]->queue) { 4330 - blk_cleanup_queue(disks[dr]->queue); 4331 - /* 4332 - * put_disk() is not paired with add_disk() and 4333 - * will put queue reference one extra time. fix it. 4334 - */ 4335 - disks[dr]->queue = NULL; 4331 + for (drive = 0; drive < N_DRIVE; drive++) { 4332 + if (!disks[drive]) 4333 + break; 4334 + if (disks[drive]->queue) { 4335 + del_timer_sync(&motor_off_timer[drive]); 4336 + blk_cleanup_queue(disks[drive]->queue); 4337 + disks[drive]->queue = NULL; 4336 4338 } 4337 - put_disk(disks[dr]); 4339 + put_disk(disks[drive]); 4338 4340 } 4341 + destroy_workqueue(floppy_wq); 4339 4342 return err; 4340 4343 } 4341 4344 ··· 4558 4551 for (drive = 0; drive < N_DRIVE; drive++) { 4559 4552 del_timer_sync(&motor_off_timer[drive]); 4560 4553 4561 - if ((allowed_drive_mask & (1 << drive)) && 4562 - fdc_state[FDC(drive)].version != FDC_NONE) { 4554 + if (floppy_available(drive)) { 4563 4555 del_gendisk(disks[drive]); 4564 4556 device_remove_file(&floppy_device[drive].dev, &dev_attr_cmos); 4565 4557 platform_device_unregister(&floppy_device[drive]);
+15 -2
drivers/block/loop.c
··· 976 976 if (lo->lo_state != Lo_bound) 977 977 return -ENXIO; 978 978 979 - if (lo->lo_refcnt > 1) /* we needed one fd for the ioctl */ 980 - return -EBUSY; 979 + /* 980 + * If we've explicitly asked to tear down the loop device, 981 + * and it has an elevated reference count, set it for auto-teardown when 982 + * the last reference goes away. This stops $!~#$@ udev from 983 + * preventing teardown because it decided that it needs to run blkid on 984 + * the loopback device whenever they appear. xfstests is notorious for 985 + * failing tests because blkid via udev races with a losetup 986 + * <dev>/do something like mkfs/losetup -d <dev> causing the losetup -d 987 + * command to fail with EBUSY. 988 + */ 989 + if (lo->lo_refcnt > 1) { 990 + lo->lo_flags |= LO_FLAGS_AUTOCLEAR; 991 + mutex_unlock(&lo->lo_ctl_mutex); 992 + return 0; 993 + } 981 994 982 995 if (filp == NULL) 983 996 return -EINVAL;
+15 -4
drivers/block/mtip32xx/mtip32xx.c
··· 2035 2035 } 2036 2036 return rv; 2037 2037 } 2038 - 2039 - static void mtip_set_timeout(struct host_to_dev_fis *fis, unsigned int *timeout) 2038 + static void mtip_set_timeout(struct driver_data *dd, 2039 + struct host_to_dev_fis *fis, 2040 + unsigned int *timeout, u8 erasemode) 2040 2041 { 2041 2042 switch (fis->command) { 2042 2043 case ATA_CMD_DOWNLOAD_MICRO: ··· 2045 2044 break; 2046 2045 case ATA_CMD_SEC_ERASE_UNIT: 2047 2046 case 0xFC: 2048 - *timeout = 240000; /* 4 minutes */ 2047 + if (erasemode) 2048 + *timeout = ((*(dd->port->identify + 90) * 2) * 60000); 2049 + else 2050 + *timeout = ((*(dd->port->identify + 89) * 2) * 60000); 2049 2051 break; 2050 2052 case ATA_CMD_STANDBYNOW1: 2051 2053 *timeout = 120000; /* 2 minutes */ ··· 2091 2087 unsigned int transfer_size; 2092 2088 unsigned long task_file_data; 2093 2089 int intotal = outtotal + req_task->out_size; 2090 + int erasemode = 0; 2094 2091 2095 2092 taskout = req_task->out_size; 2096 2093 taskin = req_task->in_size; ··· 2217 2212 fis.lba_hi, 2218 2213 fis.device); 2219 2214 2220 - mtip_set_timeout(&fis, &timeout); 2215 + /* check for erase mode support during secure erase.*/ 2216 + if ((fis.command == ATA_CMD_SEC_ERASE_UNIT) 2217 + && (outbuf[0] & MTIP_SEC_ERASE_MODE)) { 2218 + erasemode = 1; 2219 + } 2220 + 2221 + mtip_set_timeout(dd, &fis, &timeout, erasemode); 2221 2222 2222 2223 /* Determine the correct transfer size.*/ 2223 2224 if (force_single_sector)
+3
drivers/block/mtip32xx/mtip32xx.h
··· 33 33 /* offset of Device Control register in PCIe extended capabilites space */ 34 34 #define PCIE_CONFIG_EXT_DEVICE_CONTROL_OFFSET 0x48 35 35 36 + /* check for erase mode support during secure erase */ 37 + #define MTIP_SEC_ERASE_MODE 0x3 38 + 36 39 /* # of times to retry timed out/failed IOs */ 37 40 #define MTIP_MAX_RETRIES 2 38 41
+2 -2
drivers/block/xen-blkback/common.h
··· 158 158 struct block_device *bdev; 159 159 /* Cached size parameter. */ 160 160 sector_t size; 161 - bool flush_support; 162 - bool discard_secure; 161 + unsigned int flush_support:1; 162 + unsigned int discard_secure:1; 163 163 }; 164 164 165 165 struct backend_info;
+4 -5
drivers/block/xen-blkback/xenbus.c
··· 105 105 { 106 106 struct xen_blkif *blkif; 107 107 108 - blkif = kmem_cache_alloc(xen_blkif_cachep, GFP_KERNEL); 108 + blkif = kmem_cache_zalloc(xen_blkif_cachep, GFP_KERNEL); 109 109 if (!blkif) 110 110 return ERR_PTR(-ENOMEM); 111 111 112 - memset(blkif, 0, sizeof(*blkif)); 113 112 blkif->domid = domid; 114 113 spin_lock_init(&blkif->blk_ring_lock); 115 114 atomic_set(&blkif->refcnt, 1); ··· 195 196 } 196 197 } 197 198 198 - void xen_blkif_free(struct xen_blkif *blkif) 199 + static void xen_blkif_free(struct xen_blkif *blkif) 199 200 { 200 201 if (!atomic_dec_and_test(&blkif->refcnt)) 201 202 BUG(); ··· 256 257 VBD_SHOW(physical_device, "%x:%x\n", be->major, be->minor); 257 258 VBD_SHOW(mode, "%s\n", be->mode); 258 259 259 - int xenvbd_sysfs_addif(struct xenbus_device *dev) 260 + static int xenvbd_sysfs_addif(struct xenbus_device *dev) 260 261 { 261 262 int error; 262 263 ··· 280 281 return error; 281 282 } 282 283 283 - void xenvbd_sysfs_delif(struct xenbus_device *dev) 284 + static void xenvbd_sysfs_delif(struct xenbus_device *dev) 284 285 { 285 286 sysfs_remove_group(&dev->dev.kobj, &xen_vbdstat_group); 286 287 device_remove_file(&dev->dev, &dev_attr_mode);
+1 -1
drivers/cpufreq/powernow-k8.c
··· 5 5 * http://www.gnu.org/licenses/gpl.html 6 6 * 7 7 * Maintainer: 8 - * Andreas Herrmann <andreas.herrmann3@amd.com> 8 + * Andreas Herrmann <herrmann.der.user@googlemail.com> 9 9 * 10 10 * Based on the powernow-k7.c module written by Dave Jones. 11 11 * (C) 2003 Dave Jones on behalf of SuSE Labs
+1 -1
drivers/gpio/gpio-74x164.c
··· 153 153 } 154 154 155 155 chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers; 156 - chip->buffer = devm_kzalloc(&spi->dev, chip->gpio_chip.ngpio, GFP_KERNEL); 156 + chip->buffer = devm_kzalloc(&spi->dev, chip->registers, GFP_KERNEL); 157 157 if (!chip->buffer) { 158 158 ret = -ENOMEM; 159 159 goto exit_destroy;
+3 -1
drivers/gpio/gpio-mvebu.c
··· 244 244 if (ret) 245 245 return ret; 246 246 247 + mvebu_gpio_set(chip, pin, value); 248 + 247 249 spin_lock_irqsave(&mvchip->lock, flags); 248 250 u = readl_relaxed(mvebu_gpioreg_io_conf(mvchip)); 249 251 u &= ~(1 << pin); ··· 646 644 ct->handler = handle_edge_irq; 647 645 ct->chip.name = mvchip->chip.label; 648 646 649 - irq_setup_generic_chip(gc, IRQ_MSK(ngpios), IRQ_GC_INIT_MASK_CACHE, 647 + irq_setup_generic_chip(gc, IRQ_MSK(ngpios), 0, 650 648 IRQ_NOREQUEST, IRQ_LEVEL | IRQ_NOPROBE); 651 649 652 650 /* Setup irq domain on top of the generic chip. */
+35
drivers/gpio/gpio-omap.c
··· 251 251 } 252 252 } 253 253 254 + /** 255 + * _clear_gpio_debounce - clear debounce settings for a gpio 256 + * @bank: the gpio bank we're acting upon 257 + * @gpio: the gpio number on this @gpio 258 + * 259 + * If a gpio is using debounce, then clear the debounce enable bit and if 260 + * this is the only gpio in this bank using debounce, then clear the debounce 261 + * time too. The debounce clock will also be disabled when calling this function 262 + * if this is the only gpio in the bank using debounce. 263 + */ 264 + static void _clear_gpio_debounce(struct gpio_bank *bank, unsigned gpio) 265 + { 266 + u32 gpio_bit = GPIO_BIT(bank, gpio); 267 + 268 + if (!bank->dbck_flag) 269 + return; 270 + 271 + if (!(bank->dbck_enable_mask & gpio_bit)) 272 + return; 273 + 274 + bank->dbck_enable_mask &= ~gpio_bit; 275 + bank->context.debounce_en &= ~gpio_bit; 276 + __raw_writel(bank->context.debounce_en, 277 + bank->base + bank->regs->debounce_en); 278 + 279 + if (!bank->dbck_enable_mask) { 280 + bank->context.debounce = 0; 281 + __raw_writel(bank->context.debounce, bank->base + 282 + bank->regs->debounce); 283 + clk_disable(bank->dbck); 284 + bank->dbck_enabled = false; 285 + } 286 + } 287 + 254 288 static inline void set_gpio_trigger(struct gpio_bank *bank, int gpio, 255 289 unsigned trigger) 256 290 { ··· 573 539 _set_gpio_irqenable(bank, gpio, 0); 574 540 _clear_gpio_irqstatus(bank, gpio); 575 541 _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), IRQ_TYPE_NONE); 542 + _clear_gpio_debounce(bank, gpio); 576 543 } 577 544 578 545 /* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
+2 -2
drivers/gpio/gpio-timberdale.c
··· 116 116 unsigned long flags; 117 117 118 118 spin_lock_irqsave(&tgpio->lock, flags); 119 - tgpio->last_ier &= ~(1 << offset); 119 + tgpio->last_ier &= ~(1UL << offset); 120 120 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); 121 121 spin_unlock_irqrestore(&tgpio->lock, flags); 122 122 } ··· 128 128 unsigned long flags; 129 129 130 130 spin_lock_irqsave(&tgpio->lock, flags); 131 - tgpio->last_ier |= 1 << offset; 131 + tgpio->last_ier |= 1UL << offset; 132 132 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); 133 133 spin_unlock_irqrestore(&tgpio->lock, flags); 134 134 }
+7 -3
drivers/gpio/gpiolib.c
··· 623 623 */ 624 624 625 625 status = gpio_request(gpio, "sysfs"); 626 - if (status < 0) 626 + if (status < 0) { 627 + if (status == -EPROBE_DEFER) 628 + status = -ENODEV; 627 629 goto done; 628 - 630 + } 629 631 status = gpio_export(gpio, true); 630 632 if (status < 0) 631 633 gpio_free(gpio); ··· 1193 1191 1194 1192 spin_lock_irqsave(&gpio_lock, flags); 1195 1193 1196 - if (!gpio_is_valid(gpio)) 1194 + if (!gpio_is_valid(gpio)) { 1195 + status = -EINVAL; 1197 1196 goto done; 1197 + } 1198 1198 desc = &gpio_desc[gpio]; 1199 1199 chip = desc->chip; 1200 1200 if (chip == NULL)
+1 -1
drivers/gpu/drm/exynos/Kconfig
··· 1 1 config DRM_EXYNOS 2 2 tristate "DRM Support for Samsung SoC EXYNOS Series" 3 - depends on DRM && PLAT_SAMSUNG 3 + depends on DRM && (PLAT_SAMSUNG || ARCH_MULTIPLATFORM) 4 4 select DRM_KMS_HELPER 5 5 select FB_CFB_FILLRECT 6 6 select FB_CFB_COPYAREA
+1
drivers/gpu/drm/exynos/exynos_drm_connector.c
··· 374 374 exynos_connector->encoder_id = encoder->base.id; 375 375 exynos_connector->manager = manager; 376 376 exynos_connector->dpms = DRM_MODE_DPMS_OFF; 377 + connector->dpms = DRM_MODE_DPMS_OFF; 377 378 connector->encoder = encoder; 378 379 379 380 err = drm_mode_connector_attach_encoder(connector, encoder);
+17 -16
drivers/gpu/drm/exynos/exynos_drm_encoder.c
··· 43 43 * @manager: specific encoder has its own manager to control a hardware 44 44 * appropriately and we can access a hardware drawing on this manager. 45 45 * @dpms: store the encoder dpms value. 46 + * @updated: indicate whether overlay data updating is needed or not. 46 47 */ 47 48 struct exynos_drm_encoder { 48 49 struct drm_crtc *old_crtc; 49 50 struct drm_encoder drm_encoder; 50 51 struct exynos_drm_manager *manager; 51 - int dpms; 52 + int dpms; 53 + bool updated; 52 54 }; 53 55 54 56 static void exynos_drm_connector_power(struct drm_encoder *encoder, int mode) ··· 87 85 switch (mode) { 88 86 case DRM_MODE_DPMS_ON: 89 87 if (manager_ops && manager_ops->apply) 90 - manager_ops->apply(manager->dev); 88 + if (!exynos_encoder->updated) 89 + manager_ops->apply(manager->dev); 90 + 91 91 exynos_drm_connector_power(encoder, mode); 92 92 exynos_encoder->dpms = mode; 93 93 break; ··· 98 94 case DRM_MODE_DPMS_OFF: 99 95 exynos_drm_connector_power(encoder, mode); 100 96 exynos_encoder->dpms = mode; 97 + exynos_encoder->updated = false; 101 98 break; 102 99 default: 103 100 DRM_ERROR("unspecified mode %d\n", mode); ··· 210 205 211 206 static void exynos_drm_encoder_commit(struct drm_encoder *encoder) 212 207 { 213 - struct exynos_drm_manager *manager = exynos_drm_get_manager(encoder); 208 + struct exynos_drm_encoder *exynos_encoder = to_exynos_encoder(encoder); 209 + struct exynos_drm_manager *manager = exynos_encoder->manager; 214 210 struct exynos_drm_manager_ops *manager_ops = manager->ops; 215 211 216 212 DRM_DEBUG_KMS("%s\n", __FILE__); 217 213 218 214 if (manager_ops && manager_ops->commit) 219 215 manager_ops->commit(manager->dev); 216 + 217 + /* 218 + * this will avoid one issue that overlay data is updated to 219 + * real hardware two times. 220 + * And this variable will be used to check if the data was 221 + * already updated or not by exynos_drm_encoder_dpms function. 222 + */ 223 + exynos_encoder->updated = true; 220 224 } 221 225 222 226 static void exynos_drm_encoder_disable(struct drm_encoder *encoder) ··· 413 399 414 400 if (manager_ops && manager_ops->dpms) 415 401 manager_ops->dpms(manager->dev, mode); 416 - 417 - /* 418 - * set current mode to new one so that data aren't updated into 419 - * registers by drm_helper_connector_dpms two times. 420 - * 421 - * in case that drm_crtc_helper_set_mode() is called, 422 - * overlay_ops->commit() and manager_ops->commit() callbacks 423 - * can be called two times, first at drm_crtc_helper_set_mode() 424 - * and second at drm_helper_connector_dpms(). 425 - * so with this setting, when drm_helper_connector_dpms() is called 426 - * encoder->funcs->dpms() will be ignored. 427 - */ 428 - exynos_encoder->dpms = mode; 429 402 430 403 /* 431 404 * if this condition is ok then it means that the crtc is already
+1 -1
drivers/gpu/drm/exynos/exynos_mixer.c
··· 1142 1142 const struct of_device_id *match; 1143 1143 match = of_match_node(of_match_ptr(mixer_match_types), 1144 1144 pdev->dev.of_node); 1145 - drv = match->data; 1145 + drv = (struct mixer_drv_data *)match->data; 1146 1146 } else { 1147 1147 drv = (struct mixer_drv_data *) 1148 1148 platform_get_device_id(pdev)->driver_data;
+2 -1
drivers/gpu/drm/i915/i915_dma.c
··· 1505 1505 goto put_gmch; 1506 1506 } 1507 1507 1508 - i915_kick_out_firmware_fb(dev_priv); 1508 + if (drm_core_check_feature(dev, DRIVER_MODESET)) 1509 + i915_kick_out_firmware_fb(dev_priv); 1509 1510 1510 1511 pci_set_master(dev->pdev); 1511 1512
+1 -1
drivers/gpu/drm/i915/intel_crt.c
··· 729 729 730 730 crt->base.type = INTEL_OUTPUT_ANALOG; 731 731 crt->base.cloneable = true; 732 - if (IS_HASWELL(dev)) 732 + if (IS_HASWELL(dev) || IS_I830(dev)) 733 733 crt->base.crtc_mask = (1 << 0); 734 734 else 735 735 crt->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+11 -3
drivers/gpu/drm/i915/intel_overlay.c
··· 341 341 intel_ring_emit(ring, flip_addr); 342 342 intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); 343 343 /* turn overlay off */ 344 - intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_OFF); 345 - intel_ring_emit(ring, flip_addr); 346 - intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); 344 + if (IS_I830(dev)) { 345 + /* Workaround: Don't disable the overlay fully, since otherwise 346 + * it dies on the next OVERLAY_ON cmd. */ 347 + intel_ring_emit(ring, MI_NOOP); 348 + intel_ring_emit(ring, MI_NOOP); 349 + intel_ring_emit(ring, MI_NOOP); 350 + } else { 351 + intel_ring_emit(ring, MI_OVERLAY_FLIP | MI_OVERLAY_OFF); 352 + intel_ring_emit(ring, flip_addr); 353 + intel_ring_emit(ring, MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); 354 + } 347 355 intel_ring_advance(ring); 348 356 349 357 return intel_overlay_do_wait_request(overlay, intel_overlay_off_tail);
+1 -1
drivers/gpu/drm/i915/intel_panel.c
··· 435 435 props.type = BACKLIGHT_RAW; 436 436 props.max_brightness = _intel_panel_get_max_backlight(dev); 437 437 if (props.max_brightness == 0) { 438 - DRM_ERROR("Failed to get maximum backlight value\n"); 438 + DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n"); 439 439 return -ENODEV; 440 440 } 441 441 dev_priv->backlight =
+42 -20
drivers/gpu/drm/i915/intel_sdvo.c
··· 894 894 } 895 895 #endif 896 896 897 + static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, 898 + unsigned if_index, uint8_t tx_rate, 899 + uint8_t *data, unsigned length) 900 + { 901 + uint8_t set_buf_index[2] = { if_index, 0 }; 902 + uint8_t hbuf_size, tmp[8]; 903 + int i; 904 + 905 + if (!intel_sdvo_set_value(intel_sdvo, 906 + SDVO_CMD_SET_HBUF_INDEX, 907 + set_buf_index, 2)) 908 + return false; 909 + 910 + if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HBUF_INFO, 911 + &hbuf_size, 1)) 912 + return false; 913 + 914 + /* Buffer size is 0 based, hooray! */ 915 + hbuf_size++; 916 + 917 + DRM_DEBUG_KMS("writing sdvo hbuf: %i, hbuf_size %i, hbuf_size: %i\n", 918 + if_index, length, hbuf_size); 919 + 920 + for (i = 0; i < hbuf_size; i += 8) { 921 + memset(tmp, 0, 8); 922 + if (i < length) 923 + memcpy(tmp, data + i, min_t(unsigned, 8, length - i)); 924 + 925 + if (!intel_sdvo_set_value(intel_sdvo, 926 + SDVO_CMD_SET_HBUF_DATA, 927 + tmp, 8)) 928 + return false; 929 + } 930 + 931 + return intel_sdvo_set_value(intel_sdvo, 932 + SDVO_CMD_SET_HBUF_TXRATE, 933 + &tx_rate, 1); 934 + } 935 + 897 936 static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo) 898 937 { 899 938 struct dip_infoframe avi_if = { ··· 940 901 .ver = DIP_VERSION_AVI, 941 902 .len = DIP_LEN_AVI, 942 903 }; 943 - uint8_t tx_rate = SDVO_HBUF_TX_VSYNC; 944 - uint8_t set_buf_index[2] = { 1, 0 }; 945 904 uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)]; 946 - uint64_t *data = (uint64_t *)sdvo_data; 947 - unsigned i; 948 905 949 906 intel_dip_infoframe_csum(&avi_if); 950 907 ··· 950 915 sdvo_data[3] = avi_if.checksum; 951 916 memcpy(&sdvo_data[4], &avi_if.body, sizeof(avi_if.body.avi)); 952 917 953 - if (!intel_sdvo_set_value(intel_sdvo, 954 - SDVO_CMD_SET_HBUF_INDEX, 955 - set_buf_index, 2)) 956 - return false; 957 - 958 - for (i = 0; i < sizeof(sdvo_data); i += 8) { 959 - if (!intel_sdvo_set_value(intel_sdvo, 960 - SDVO_CMD_SET_HBUF_DATA, 961 - data, 8)) 962 - return false; 963 - data++; 964 - } 965 - 966 - return intel_sdvo_set_value(intel_sdvo, 967 - SDVO_CMD_SET_HBUF_TXRATE, 968 - &tx_rate, 1); 918 + return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, 919 + SDVO_HBUF_TX_VSYNC, 920 + sdvo_data, sizeof(sdvo_data)); 969 921 } 970 922 971 923 static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo)
+2
drivers/gpu/drm/i915/intel_sdvo_regs.h
··· 708 708 #define SDVO_CMD_SET_AUDIO_STAT 0x91 709 709 #define SDVO_CMD_GET_AUDIO_STAT 0x92 710 710 #define SDVO_CMD_SET_HBUF_INDEX 0x93 711 + #define SDVO_HBUF_INDEX_ELD 0 712 + #define SDVO_HBUF_INDEX_AVI_IF 1 711 713 #define SDVO_CMD_GET_HBUF_INDEX 0x94 712 714 #define SDVO_CMD_GET_HBUF_INFO 0x95 713 715 #define SDVO_CMD_SET_HBUF_AV_SPLIT 0x96
+6 -3
drivers/gpu/drm/nouveau/core/core/mm.c
··· 218 218 node = kzalloc(sizeof(*node), GFP_KERNEL); 219 219 if (!node) 220 220 return -ENOMEM; 221 - node->offset = roundup(offset, mm->block_size); 222 - node->length = rounddown(offset + length, mm->block_size) - node->offset; 221 + 222 + if (length) { 223 + node->offset = roundup(offset, mm->block_size); 224 + node->length = rounddown(offset + length, mm->block_size); 225 + node->length -= node->offset; 226 + } 223 227 224 228 list_add_tail(&node->nl_entry, &mm->nodes); 225 229 list_add_tail(&node->fl_entry, &mm->free); 226 230 mm->heap_nodes++; 227 - mm->heap_size += length; 228 231 return 0; 229 232 } 230 233
-1
drivers/gpu/drm/nouveau/core/include/core/mm.h
··· 19 19 20 20 u32 block_size; 21 21 int heap_nodes; 22 - u32 heap_size; 23 22 }; 24 23 25 24 int nouveau_mm_init(struct nouveau_mm *, u32 offset, u32 length, u32 block);
+4 -6
drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c
··· 219 219 ((priv->base.ram.size & 0x000000ff) << 32); 220 220 221 221 tags = nv_rd32(priv, 0x100320); 222 - if (tags) { 223 - ret = nouveau_mm_init(&priv->base.tags, 0, tags, 1); 224 - if (ret) 225 - return ret; 222 + ret = nouveau_mm_init(&priv->base.tags, 0, tags, 1); 223 + if (ret) 224 + return ret; 226 225 227 - nv_debug(priv, "%d compression tags\n", tags); 228 - } 226 + nv_debug(priv, "%d compression tags\n", tags); 229 227 230 228 size = (priv->base.ram.size >> 12) - rsvd_head - rsvd_tail; 231 229 switch (device->chipset) {
+1 -1
drivers/gpu/drm/nouveau/core/subdev/i2c/base.c
··· 292 292 case DCB_I2C_NVIO_BIT: 293 293 port->drive = info.drive & 0x0f; 294 294 if (device->card_type < NV_D0) { 295 - if (info.drive >= ARRAY_SIZE(nv50_i2c_port)) 295 + if (port->drive >= ARRAY_SIZE(nv50_i2c_port)) 296 296 break; 297 297 port->drive = nv50_i2c_port[port->drive]; 298 298 port->sense = port->drive;
+21 -15
drivers/gpu/drm/nouveau/nouveau_display.c
··· 290 290 struct nouveau_drm *drm = nouveau_drm(dev); 291 291 struct nouveau_disp *pdisp = nouveau_disp(drm->device); 292 292 struct nouveau_display *disp; 293 + u32 pclass = dev->pdev->class >> 8; 293 294 int ret, gen; 294 295 295 296 disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL); ··· 361 360 drm_kms_helper_poll_init(dev); 362 361 drm_kms_helper_poll_disable(dev); 363 362 364 - if (nv_device(drm->device)->card_type < NV_50) 365 - ret = nv04_display_create(dev); 366 - else 367 - if (nv_device(drm->device)->card_type < NV_D0) 368 - ret = nv50_display_create(dev); 369 - else 370 - ret = nvd0_display_create(dev); 371 - if (ret) 372 - goto disp_create_err; 373 - 374 - if (dev->mode_config.num_crtc) { 375 - ret = drm_vblank_init(dev, dev->mode_config.num_crtc); 363 + if (nouveau_modeset == 1 || 364 + (nouveau_modeset < 0 && pclass == PCI_CLASS_DISPLAY_VGA)) { 365 + if (nv_device(drm->device)->card_type < NV_50) 366 + ret = nv04_display_create(dev); 367 + else 368 + if (nv_device(drm->device)->card_type < NV_D0) 369 + ret = nv50_display_create(dev); 370 + else 371 + ret = nvd0_display_create(dev); 376 372 if (ret) 377 - goto vblank_err; 373 + goto disp_create_err; 374 + 375 + if (dev->mode_config.num_crtc) { 376 + ret = drm_vblank_init(dev, dev->mode_config.num_crtc); 377 + if (ret) 378 + goto vblank_err; 379 + } 380 + 381 + nouveau_backlight_init(dev); 378 382 } 379 383 380 - nouveau_backlight_init(dev); 381 384 return 0; 382 385 383 386 vblank_err: ··· 400 395 nouveau_backlight_exit(dev); 401 396 drm_vblank_cleanup(dev); 402 397 403 - disp->dtor(dev); 398 + if (disp->dtor) 399 + disp->dtor(dev); 404 400 405 401 drm_kms_helper_poll_fini(dev); 406 402 drm_mode_config_cleanup(dev);
+21 -15
drivers/gpu/drm/nouveau/nouveau_drm.c
··· 63 63 static int nouveau_noaccel = 0; 64 64 module_param_named(noaccel, nouveau_noaccel, int, 0400); 65 65 66 - MODULE_PARM_DESC(modeset, "enable driver"); 67 - static int nouveau_modeset = -1; 66 + MODULE_PARM_DESC(modeset, "enable driver (default: auto, " 67 + "0 = disabled, 1 = enabled, 2 = headless)"); 68 + int nouveau_modeset = -1; 68 69 module_param_named(modeset, nouveau_modeset, int, 0400); 69 70 70 71 static struct drm_driver driver; ··· 364 363 365 364 nouveau_pm_fini(dev); 366 365 367 - nouveau_display_fini(dev); 366 + if (dev->mode_config.num_crtc) 367 + nouveau_display_fini(dev); 368 368 nouveau_display_destroy(dev); 369 369 370 370 nouveau_irq_fini(dev); ··· 405 403 pm_state.event == PM_EVENT_PRETHAW) 406 404 return 0; 407 405 408 - NV_INFO(drm, "suspending fbcon...\n"); 409 - nouveau_fbcon_set_suspend(dev, 1); 406 + if (dev->mode_config.num_crtc) { 407 + NV_INFO(drm, "suspending fbcon...\n"); 408 + nouveau_fbcon_set_suspend(dev, 1); 410 409 411 - NV_INFO(drm, "suspending display...\n"); 412 - ret = nouveau_display_suspend(dev); 413 - if (ret) 414 - return ret; 410 + NV_INFO(drm, "suspending display...\n"); 411 + ret = nouveau_display_suspend(dev); 412 + if (ret) 413 + return ret; 414 + } 415 415 416 416 NV_INFO(drm, "evicting buffers...\n"); 417 417 ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); ··· 449 445 nouveau_client_init(&cli->base); 450 446 } 451 447 452 - NV_INFO(drm, "resuming display...\n"); 453 - nouveau_display_resume(dev); 448 + if (dev->mode_config.num_crtc) { 449 + NV_INFO(drm, "resuming display...\n"); 450 + nouveau_display_resume(dev); 451 + } 454 452 return ret; 455 453 } 456 454 ··· 492 486 nouveau_irq_postinstall(dev); 493 487 nouveau_pm_resume(dev); 494 488 495 - NV_INFO(drm, "resuming display...\n"); 496 - nouveau_display_resume(dev); 489 + if (dev->mode_config.num_crtc) { 490 + NV_INFO(drm, "resuming display...\n"); 491 + nouveau_display_resume(dev); 492 + } 497 493 return 0; 498 494 } 499 495 ··· 670 662 #ifdef CONFIG_VGA_CONSOLE 671 663 if (vgacon_text_force()) 672 664 nouveau_modeset = 0; 673 - else 674 665 #endif 675 - nouveau_modeset = 1; 676 666 } 677 667 678 668 if (!nouveau_modeset)
+2
drivers/gpu/drm/nouveau/nouveau_drm.h
··· 141 141 nv_info((cli), fmt, ##args); \ 142 142 } while (0) 143 143 144 + extern int nouveau_modeset; 145 + 144 146 #endif
+9 -7
drivers/gpu/drm/nouveau/nouveau_irq.c
··· 61 61 62 62 nv_subdev(pmc)->intr(nv_subdev(pmc)); 63 63 64 - if (device->card_type >= NV_D0) { 65 - if (nv_rd32(device, 0x000100) & 0x04000000) 66 - nvd0_display_intr(dev); 67 - } else 68 - if (device->card_type >= NV_50) { 69 - if (nv_rd32(device, 0x000100) & 0x04000000) 70 - nv50_display_intr(dev); 64 + if (dev->mode_config.num_crtc) { 65 + if (device->card_type >= NV_D0) { 66 + if (nv_rd32(device, 0x000100) & 0x04000000) 67 + nvd0_display_intr(dev); 68 + } else 69 + if (device->card_type >= NV_50) { 70 + if (nv_rd32(device, 0x000100) & 0x04000000) 71 + nv50_display_intr(dev); 72 + } 71 73 } 72 74 73 75 return IRQ_HANDLED;
+8 -8
drivers/gpu/drm/nouveau/nv04_dac.c
··· 220 220 NVWriteVgaCrtc(dev, 0, NV_CIO_CR_MODE_INDEX, saved_cr_mode); 221 221 222 222 if (blue == 0x18) { 223 - NV_INFO(drm, "Load detected on head A\n"); 223 + NV_DEBUG(drm, "Load detected on head A\n"); 224 224 return connector_status_connected; 225 225 } 226 226 ··· 338 338 339 339 if (nv17_dac_sample_load(encoder) & 340 340 NV_PRAMDAC_TEST_CONTROL_SENSEB_ALLHI) { 341 - NV_INFO(drm, "Load detected on output %c\n", 342 - '@' + ffs(dcb->or)); 341 + NV_DEBUG(drm, "Load detected on output %c\n", 342 + '@' + ffs(dcb->or)); 343 343 return connector_status_connected; 344 344 } else { 345 345 return connector_status_disconnected; ··· 413 413 414 414 helper->dpms(encoder, DRM_MODE_DPMS_ON); 415 415 416 - NV_INFO(drm, "Output %s is running on CRTC %d using output %c\n", 417 - drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), 418 - nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); 416 + NV_DEBUG(drm, "Output %s is running on CRTC %d using output %c\n", 417 + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), 418 + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); 419 419 } 420 420 421 421 void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable) ··· 461 461 return; 462 462 nv_encoder->last_dpms = mode; 463 463 464 - NV_INFO(drm, "Setting dpms mode %d on vga encoder (output %d)\n", 465 - mode, nv_encoder->dcb->index); 464 + NV_DEBUG(drm, "Setting dpms mode %d on vga encoder (output %d)\n", 465 + mode, nv_encoder->dcb->index); 466 466 467 467 nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON); 468 468 }
+7 -7
drivers/gpu/drm/nouveau/nv04_dfp.c
··· 476 476 477 477 helper->dpms(encoder, DRM_MODE_DPMS_ON); 478 478 479 - NV_INFO(drm, "Output %s is running on CRTC %d using output %c\n", 480 - drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), 481 - nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); 479 + NV_DEBUG(drm, "Output %s is running on CRTC %d using output %c\n", 480 + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), 481 + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); 482 482 } 483 483 484 484 static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode) ··· 520 520 return; 521 521 nv_encoder->last_dpms = mode; 522 522 523 - NV_INFO(drm, "Setting dpms mode %d on lvds encoder (output %d)\n", 524 - mode, nv_encoder->dcb->index); 523 + NV_DEBUG(drm, "Setting dpms mode %d on lvds encoder (output %d)\n", 524 + mode, nv_encoder->dcb->index); 525 525 526 526 if (was_powersaving && is_powersaving_dpms(mode)) 527 527 return; ··· 565 565 return; 566 566 nv_encoder->last_dpms = mode; 567 567 568 - NV_INFO(drm, "Setting dpms mode %d on tmds encoder (output %d)\n", 569 - mode, nv_encoder->dcb->index); 568 + NV_DEBUG(drm, "Setting dpms mode %d on tmds encoder (output %d)\n", 569 + mode, nv_encoder->dcb->index); 570 570 571 571 nv04_dfp_update_backlight(encoder, mode); 572 572 nv04_dfp_update_fp_control(encoder, mode);
+4 -5
drivers/gpu/drm/nouveau/nv04_tv.c
··· 75 75 struct nv04_mode_state *state = &nv04_display(dev)->mode_reg; 76 76 uint8_t crtc1A; 77 77 78 - NV_INFO(drm, "Setting dpms mode %d on TV encoder (output %d)\n", 79 - mode, nv_encoder->dcb->index); 78 + NV_DEBUG(drm, "Setting dpms mode %d on TV encoder (output %d)\n", 79 + mode, nv_encoder->dcb->index); 80 80 81 81 state->pllsel &= ~(PLLSEL_TV_CRTC1_MASK | PLLSEL_TV_CRTC2_MASK); 82 82 ··· 167 167 168 168 helper->dpms(encoder, DRM_MODE_DPMS_ON); 169 169 170 - NV_INFO(drm, "Output %s is running on CRTC %d using output %c\n", 171 - drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), nv_crtc->index, 172 - '@' + ffs(nv_encoder->dcb->or)); 170 + NV_DEBUG(drm, "Output %s is running on CRTC %d using output %c\n", 171 + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); 173 172 } 174 173 175 174 static void nv04_tv_destroy(struct drm_encoder *encoder)
+1 -1
drivers/gpu/drm/radeon/evergreen_cs.c
··· 264 264 /* macro tile width & height */ 265 265 palign = (8 * surf->bankw * track->npipes) * surf->mtilea; 266 266 halign = (8 * surf->bankh * surf->nbanks) / surf->mtilea; 267 - mtileb = (palign / 8) * (halign / 8) * tileb;; 267 + mtileb = (palign / 8) * (halign / 8) * tileb; 268 268 mtile_pr = surf->nbx / palign; 269 269 mtile_ps = (mtile_pr * surf->nby) / halign; 270 270 surf->layer_size = mtile_ps * mtileb * slice_pt;
+2 -2
drivers/gpu/drm/radeon/radeon_atpx_handler.c
··· 352 352 } 353 353 354 354 /** 355 - * radeon_atpx_switchto - switch to the requested GPU 355 + * radeon_atpx_power_state - power down/up the requested GPU 356 356 * 357 - * @id: GPU to switch to 357 + * @id: GPU to power down/up 358 358 * @state: requested power state (0 = off, 1 = on) 359 359 * 360 360 * Execute the necessary ATPX function to power down/up the discrete GPU
+21 -7
drivers/gpu/drm/radeon/radeon_connectors.c
··· 941 941 struct drm_mode_object *obj; 942 942 int i; 943 943 enum drm_connector_status ret = connector_status_disconnected; 944 - bool dret = false; 944 + bool dret = false, broken_edid = false; 945 945 946 946 if (!force && radeon_check_hpd_status_unchanged(connector)) 947 947 return connector->status; ··· 965 965 ret = connector_status_disconnected; 966 966 DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector)); 967 967 radeon_connector->ddc_bus = NULL; 968 + } else { 969 + ret = connector_status_connected; 970 + broken_edid = true; /* defer use_digital to later */ 968 971 } 969 972 } else { 970 973 radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL); ··· 1050 1047 1051 1048 encoder_funcs = encoder->helper_private; 1052 1049 if (encoder_funcs->detect) { 1053 - if (ret != connector_status_connected) { 1054 - ret = encoder_funcs->detect(encoder, connector); 1055 - if (ret == connector_status_connected) { 1056 - radeon_connector->use_digital = false; 1050 + if (!broken_edid) { 1051 + if (ret != connector_status_connected) { 1052 + /* deal with analog monitors without DDC */ 1053 + ret = encoder_funcs->detect(encoder, connector); 1054 + if (ret == connector_status_connected) { 1055 + radeon_connector->use_digital = false; 1056 + } 1057 + if (ret != connector_status_disconnected) 1058 + radeon_connector->detected_by_load = true; 1057 1059 } 1058 - if (ret != connector_status_disconnected) 1059 - radeon_connector->detected_by_load = true; 1060 + } else { 1061 + enum drm_connector_status lret; 1062 + /* assume digital unless load detected otherwise */ 1063 + radeon_connector->use_digital = true; 1064 + lret = encoder_funcs->detect(encoder, connector); 1065 + DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret); 1066 + if (lret == connector_status_connected) 1067 + radeon_connector->use_digital = false; 1060 1068 } 1061 1069 break; 1062 1070 }
+13 -2
drivers/gpu/drm/radeon/radeon_legacy_crtc.c
··· 295 295 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); 296 296 struct drm_device *dev = crtc->dev; 297 297 struct radeon_device *rdev = dev->dev_private; 298 + uint32_t crtc_ext_cntl = 0; 298 299 uint32_t mask; 299 300 300 301 if (radeon_crtc->crtc_id) ··· 308 307 RADEON_CRTC_VSYNC_DIS | 309 308 RADEON_CRTC_HSYNC_DIS); 310 309 310 + /* 311 + * On all dual CRTC GPUs this bit controls the CRTC of the primary DAC. 312 + * Therefore it is set in the DAC DMPS function. 313 + * This is different for GPU's with a single CRTC but a primary and a 314 + * TV DAC: here it controls the single CRTC no matter where it is 315 + * routed. Therefore we set it here. 316 + */ 317 + if (rdev->flags & RADEON_SINGLE_CRTC) 318 + crtc_ext_cntl = RADEON_CRTC_CRT_ON; 319 + 311 320 switch (mode) { 312 321 case DRM_MODE_DPMS_ON: 313 322 radeon_crtc->enabled = true; ··· 328 317 else { 329 318 WREG32_P(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_EN, ~(RADEON_CRTC_EN | 330 319 RADEON_CRTC_DISP_REQ_EN_B)); 331 - WREG32_P(RADEON_CRTC_EXT_CNTL, 0, ~mask); 320 + WREG32_P(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl, ~(mask | crtc_ext_cntl)); 332 321 } 333 322 drm_vblank_post_modeset(dev, radeon_crtc->crtc_id); 334 323 radeon_crtc_load_lut(crtc); ··· 342 331 else { 343 332 WREG32_P(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_DISP_REQ_EN_B, ~(RADEON_CRTC_EN | 344 333 RADEON_CRTC_DISP_REQ_EN_B)); 345 - WREG32_P(RADEON_CRTC_EXT_CNTL, mask, ~mask); 334 + WREG32_P(RADEON_CRTC_EXT_CNTL, mask, ~(mask | crtc_ext_cntl)); 346 335 } 347 336 radeon_crtc->enabled = false; 348 337 /* adjust pm to dpms changes AFTER disabling crtcs */
+147 -28
drivers/gpu/drm/radeon/radeon_legacy_encoders.c
··· 537 537 break; 538 538 } 539 539 540 - WREG32(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl); 540 + /* handled in radeon_crtc_dpms() */ 541 + if (!(rdev->flags & RADEON_SINGLE_CRTC)) 542 + WREG32(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl); 541 543 WREG32(RADEON_DAC_CNTL, dac_cntl); 542 544 WREG32(RADEON_DAC_MACRO_CNTL, dac_macro_cntl); 543 545 ··· 664 662 665 663 if (ASIC_IS_R300(rdev)) 666 664 tmp |= (0x1b6 << RADEON_DAC_FORCE_DATA_SHIFT); 665 + else if (ASIC_IS_RV100(rdev)) 666 + tmp |= (0x1ac << RADEON_DAC_FORCE_DATA_SHIFT); 667 667 else 668 668 tmp |= (0x180 << RADEON_DAC_FORCE_DATA_SHIFT); 669 669 ··· 675 671 tmp |= RADEON_DAC_RANGE_CNTL_PS2 | RADEON_DAC_CMP_EN; 676 672 WREG32(RADEON_DAC_CNTL, tmp); 677 673 674 + tmp = dac_macro_cntl; 678 675 tmp &= ~(RADEON_DAC_PDWN_R | 679 676 RADEON_DAC_PDWN_G | 680 677 RADEON_DAC_PDWN_B); ··· 1097 1092 } else { 1098 1093 if (is_tv) 1099 1094 WREG32(RADEON_TV_MASTER_CNTL, tv_master_cntl); 1100 - else 1095 + /* handled in radeon_crtc_dpms() */ 1096 + else if (!(rdev->flags & RADEON_SINGLE_CRTC)) 1101 1097 WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 1102 1098 WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl); 1103 1099 } ··· 1422 1416 return found; 1423 1417 } 1424 1418 1419 + static bool radeon_legacy_ext_dac_detect(struct drm_encoder *encoder, 1420 + struct drm_connector *connector) 1421 + { 1422 + struct drm_device *dev = encoder->dev; 1423 + struct radeon_device *rdev = dev->dev_private; 1424 + uint32_t gpio_monid, fp2_gen_cntl, disp_output_cntl, crtc2_gen_cntl; 1425 + uint32_t disp_lin_trans_grph_a, disp_lin_trans_grph_b, disp_lin_trans_grph_c; 1426 + uint32_t disp_lin_trans_grph_d, disp_lin_trans_grph_e, disp_lin_trans_grph_f; 1427 + uint32_t tmp, crtc2_h_total_disp, crtc2_v_total_disp; 1428 + uint32_t crtc2_h_sync_strt_wid, crtc2_v_sync_strt_wid; 1429 + bool found = false; 1430 + int i; 1431 + 1432 + /* save the regs we need */ 1433 + gpio_monid = RREG32(RADEON_GPIO_MONID); 1434 + fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL); 1435 + disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL); 1436 + crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL); 1437 + disp_lin_trans_grph_a = RREG32(RADEON_DISP_LIN_TRANS_GRPH_A); 1438 + disp_lin_trans_grph_b = RREG32(RADEON_DISP_LIN_TRANS_GRPH_B); 1439 + disp_lin_trans_grph_c = RREG32(RADEON_DISP_LIN_TRANS_GRPH_C); 1440 + disp_lin_trans_grph_d = RREG32(RADEON_DISP_LIN_TRANS_GRPH_D); 1441 + disp_lin_trans_grph_e = RREG32(RADEON_DISP_LIN_TRANS_GRPH_E); 1442 + disp_lin_trans_grph_f = RREG32(RADEON_DISP_LIN_TRANS_GRPH_F); 1443 + crtc2_h_total_disp = RREG32(RADEON_CRTC2_H_TOTAL_DISP); 1444 + crtc2_v_total_disp = RREG32(RADEON_CRTC2_V_TOTAL_DISP); 1445 + crtc2_h_sync_strt_wid = RREG32(RADEON_CRTC2_H_SYNC_STRT_WID); 1446 + crtc2_v_sync_strt_wid = RREG32(RADEON_CRTC2_V_SYNC_STRT_WID); 1447 + 1448 + tmp = RREG32(RADEON_GPIO_MONID); 1449 + tmp &= ~RADEON_GPIO_A_0; 1450 + WREG32(RADEON_GPIO_MONID, tmp); 1451 + 1452 + WREG32(RADEON_FP2_GEN_CNTL, (RADEON_FP2_ON | 1453 + RADEON_FP2_PANEL_FORMAT | 1454 + R200_FP2_SOURCE_SEL_TRANS_UNIT | 1455 + RADEON_FP2_DVO_EN | 1456 + R200_FP2_DVO_RATE_SEL_SDR)); 1457 + 1458 + WREG32(RADEON_DISP_OUTPUT_CNTL, (RADEON_DISP_DAC_SOURCE_RMX | 1459 + RADEON_DISP_TRANS_MATRIX_GRAPHICS)); 1460 + 1461 + WREG32(RADEON_CRTC2_GEN_CNTL, (RADEON_CRTC2_EN | 1462 + RADEON_CRTC2_DISP_REQ_EN_B)); 1463 + 1464 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_A, 0x00000000); 1465 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_B, 0x000003f0); 1466 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_C, 0x00000000); 1467 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_D, 0x000003f0); 1468 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_E, 0x00000000); 1469 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_F, 0x000003f0); 1470 + 1471 + WREG32(RADEON_CRTC2_H_TOTAL_DISP, 0x01000008); 1472 + WREG32(RADEON_CRTC2_H_SYNC_STRT_WID, 0x00000800); 1473 + WREG32(RADEON_CRTC2_V_TOTAL_DISP, 0x00080001); 1474 + WREG32(RADEON_CRTC2_V_SYNC_STRT_WID, 0x00000080); 1475 + 1476 + for (i = 0; i < 200; i++) { 1477 + tmp = RREG32(RADEON_GPIO_MONID); 1478 + if (tmp & RADEON_GPIO_Y_0) 1479 + found = true; 1480 + 1481 + if (found) 1482 + break; 1483 + 1484 + if (!drm_can_sleep()) 1485 + mdelay(1); 1486 + else 1487 + msleep(1); 1488 + } 1489 + 1490 + /* restore the regs we used */ 1491 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_A, disp_lin_trans_grph_a); 1492 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_B, disp_lin_trans_grph_b); 1493 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_C, disp_lin_trans_grph_c); 1494 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_D, disp_lin_trans_grph_d); 1495 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_E, disp_lin_trans_grph_e); 1496 + WREG32(RADEON_DISP_LIN_TRANS_GRPH_F, disp_lin_trans_grph_f); 1497 + WREG32(RADEON_CRTC2_H_TOTAL_DISP, crtc2_h_total_disp); 1498 + WREG32(RADEON_CRTC2_V_TOTAL_DISP, crtc2_v_total_disp); 1499 + WREG32(RADEON_CRTC2_H_SYNC_STRT_WID, crtc2_h_sync_strt_wid); 1500 + WREG32(RADEON_CRTC2_V_SYNC_STRT_WID, crtc2_v_sync_strt_wid); 1501 + WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 1502 + WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl); 1503 + WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl); 1504 + WREG32(RADEON_GPIO_MONID, gpio_monid); 1505 + 1506 + return found; 1507 + } 1508 + 1425 1509 static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder *encoder, 1426 1510 struct drm_connector *connector) 1427 1511 { 1428 1512 struct drm_device *dev = encoder->dev; 1429 1513 struct radeon_device *rdev = dev->dev_private; 1430 - uint32_t crtc2_gen_cntl, tv_dac_cntl, dac_cntl2, dac_ext_cntl; 1431 - uint32_t disp_hw_debug, disp_output_cntl, gpiopad_a, pixclks_cntl, tmp; 1514 + uint32_t crtc2_gen_cntl = 0, tv_dac_cntl, dac_cntl2, dac_ext_cntl; 1515 + uint32_t gpiopad_a = 0, pixclks_cntl, tmp; 1516 + uint32_t disp_output_cntl = 0, disp_hw_debug = 0, crtc_ext_cntl = 0; 1432 1517 enum drm_connector_status found = connector_status_disconnected; 1433 1518 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 1434 1519 struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv; ··· 1556 1459 return connector_status_disconnected; 1557 1460 } 1558 1461 1462 + /* R200 uses an external DAC for secondary DAC */ 1463 + if (rdev->family == CHIP_R200) { 1464 + if (radeon_legacy_ext_dac_detect(encoder, connector)) 1465 + found = connector_status_connected; 1466 + return found; 1467 + } 1468 + 1559 1469 /* save the regs we need */ 1560 1470 pixclks_cntl = RREG32_PLL(RADEON_PIXCLKS_CNTL); 1561 - gpiopad_a = ASIC_IS_R300(rdev) ? RREG32(RADEON_GPIOPAD_A) : 0; 1562 - disp_output_cntl = ASIC_IS_R300(rdev) ? RREG32(RADEON_DISP_OUTPUT_CNTL) : 0; 1563 - disp_hw_debug = ASIC_IS_R300(rdev) ? 0 : RREG32(RADEON_DISP_HW_DEBUG); 1564 - crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL); 1471 + 1472 + if (rdev->flags & RADEON_SINGLE_CRTC) { 1473 + crtc_ext_cntl = RREG32(RADEON_CRTC_EXT_CNTL); 1474 + } else { 1475 + if (ASIC_IS_R300(rdev)) { 1476 + gpiopad_a = RREG32(RADEON_GPIOPAD_A); 1477 + disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL); 1478 + } else { 1479 + disp_hw_debug = RREG32(RADEON_DISP_HW_DEBUG); 1480 + } 1481 + crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL); 1482 + } 1565 1483 tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL); 1566 1484 dac_ext_cntl = RREG32(RADEON_DAC_EXT_CNTL); 1567 1485 dac_cntl2 = RREG32(RADEON_DAC_CNTL2); ··· 1585 1473 | RADEON_PIX2CLK_DAC_ALWAYS_ONb); 1586 1474 WREG32_PLL(RADEON_PIXCLKS_CNTL, tmp); 1587 1475 1588 - if (ASIC_IS_R300(rdev)) 1589 - WREG32_P(RADEON_GPIOPAD_A, 1, ~1); 1590 - 1591 - tmp = crtc2_gen_cntl & ~RADEON_CRTC2_PIX_WIDTH_MASK; 1592 - tmp |= RADEON_CRTC2_CRT2_ON | 1593 - (2 << RADEON_CRTC2_PIX_WIDTH_SHIFT); 1594 - 1595 - WREG32(RADEON_CRTC2_GEN_CNTL, tmp); 1596 - 1597 - if (ASIC_IS_R300(rdev)) { 1598 - tmp = disp_output_cntl & ~RADEON_DISP_TVDAC_SOURCE_MASK; 1599 - tmp |= RADEON_DISP_TVDAC_SOURCE_CRTC2; 1600 - WREG32(RADEON_DISP_OUTPUT_CNTL, tmp); 1476 + if (rdev->flags & RADEON_SINGLE_CRTC) { 1477 + tmp = crtc_ext_cntl | RADEON_CRTC_CRT_ON; 1478 + WREG32(RADEON_CRTC_EXT_CNTL, tmp); 1601 1479 } else { 1602 - tmp = disp_hw_debug & ~RADEON_CRT2_DISP1_SEL; 1603 - WREG32(RADEON_DISP_HW_DEBUG, tmp); 1480 + tmp = crtc2_gen_cntl & ~RADEON_CRTC2_PIX_WIDTH_MASK; 1481 + tmp |= RADEON_CRTC2_CRT2_ON | 1482 + (2 << RADEON_CRTC2_PIX_WIDTH_SHIFT); 1483 + WREG32(RADEON_CRTC2_GEN_CNTL, tmp); 1484 + 1485 + if (ASIC_IS_R300(rdev)) { 1486 + WREG32_P(RADEON_GPIOPAD_A, 1, ~1); 1487 + tmp = disp_output_cntl & ~RADEON_DISP_TVDAC_SOURCE_MASK; 1488 + tmp |= RADEON_DISP_TVDAC_SOURCE_CRTC2; 1489 + WREG32(RADEON_DISP_OUTPUT_CNTL, tmp); 1490 + } else { 1491 + tmp = disp_hw_debug & ~RADEON_CRT2_DISP1_SEL; 1492 + WREG32(RADEON_DISP_HW_DEBUG, tmp); 1493 + } 1604 1494 } 1605 1495 1606 1496 tmp = RADEON_TV_DAC_NBLANK | ··· 1644 1530 WREG32(RADEON_DAC_CNTL2, dac_cntl2); 1645 1531 WREG32(RADEON_DAC_EXT_CNTL, dac_ext_cntl); 1646 1532 WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl); 1647 - WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 1648 1533 1649 - if (ASIC_IS_R300(rdev)) { 1650 - WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl); 1651 - WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1); 1534 + if (rdev->flags & RADEON_SINGLE_CRTC) { 1535 + WREG32(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl); 1652 1536 } else { 1653 - WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); 1537 + WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl); 1538 + if (ASIC_IS_R300(rdev)) { 1539 + WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl); 1540 + WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1); 1541 + } else { 1542 + WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); 1543 + } 1654 1544 } 1545 + 1655 1546 WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl); 1656 1547 1657 1548 return found;
+1 -1
drivers/gpu/drm/udl/udl_drv.h
··· 104 104 105 105 int udl_render_hline(struct drm_device *dev, int bpp, struct urb **urb_ptr, 106 106 const char *front, char **urb_buf_ptr, 107 - u32 byte_offset, u32 byte_width, 107 + u32 byte_offset, u32 device_byte_offset, u32 byte_width, 108 108 int *ident_ptr, int *sent_ptr); 109 109 110 110 int udl_dumb_create(struct drm_file *file_priv,
+7 -5
drivers/gpu/drm/udl/udl_fb.c
··· 114 114 list_for_each_entry(cur, &fbdefio->pagelist, lru) { 115 115 116 116 if (udl_render_hline(dev, (ufbdev->ufb.base.bits_per_pixel / 8), 117 - &urb, (char *) info->fix.smem_start, 118 - &cmd, cur->index << PAGE_SHIFT, 119 - PAGE_SIZE, &bytes_identical, &bytes_sent)) 117 + &urb, (char *) info->fix.smem_start, 118 + &cmd, cur->index << PAGE_SHIFT, 119 + cur->index << PAGE_SHIFT, 120 + PAGE_SIZE, &bytes_identical, &bytes_sent)) 120 121 goto error; 121 122 bytes_rendered += PAGE_SIZE; 122 123 } ··· 188 187 for (i = y; i < y + height ; i++) { 189 188 const int line_offset = fb->base.pitches[0] * i; 190 189 const int byte_offset = line_offset + (x * bpp); 191 - 190 + const int dev_byte_offset = (fb->base.width * bpp * i) + (x * bpp); 192 191 if (udl_render_hline(dev, bpp, &urb, 193 192 (char *) fb->obj->vmapping, 194 - &cmd, byte_offset, width * bpp, 193 + &cmd, byte_offset, dev_byte_offset, 194 + width * bpp, 195 195 &bytes_identical, &bytes_sent)) 196 196 goto error; 197 197 }
+3 -2
drivers/gpu/drm/udl/udl_transfer.c
··· 213 213 */ 214 214 int udl_render_hline(struct drm_device *dev, int bpp, struct urb **urb_ptr, 215 215 const char *front, char **urb_buf_ptr, 216 - u32 byte_offset, u32 byte_width, 216 + u32 byte_offset, u32 device_byte_offset, 217 + u32 byte_width, 217 218 int *ident_ptr, int *sent_ptr) 218 219 { 219 220 const u8 *line_start, *line_end, *next_pixel; 220 - u32 base16 = 0 + (byte_offset / bpp) * 2; 221 + u32 base16 = 0 + (device_byte_offset / bpp) * 2; 221 222 struct urb *urb = *urb_ptr; 222 223 u8 *cmd = *urb_buf_ptr; 223 224 u8 *cmd_end = (u8 *) urb->transfer_buffer + urb->transfer_buffer_length;
+6
drivers/hid/hid-apple.c
··· 522 522 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, 523 523 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS), 524 524 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, 525 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI), 526 + .driver_data = APPLE_HAS_FN }, 527 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO), 528 + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, 529 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS), 530 + .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, 525 531 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), 526 532 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, 527 533 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
+6
drivers/hid/hid-core.c
··· 1532 1532 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) }, 1533 1533 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) }, 1534 1534 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) }, 1535 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) }, 1536 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) }, 1537 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) }, 1535 1538 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, 1536 1539 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, 1537 1540 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, ··· 2142 2139 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) }, 2143 2140 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) }, 2144 2141 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) }, 2142 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) }, 2143 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) }, 2144 + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) }, 2145 2145 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, 2146 2146 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, 2147 2147 { }
+3
drivers/hid/hid-ids.h
··· 118 118 #define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252 119 119 #define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253 120 120 #define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254 121 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI 0x0259 122 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO 0x025a 123 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS 0x025b 121 124 #define USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI 0x0249 122 125 #define USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO 0x024a 123 126 #define USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS 0x024b
+13 -5
drivers/hid/hid-microsoft.c
··· 28 28 #define MS_RDESC 0x08 29 29 #define MS_NOGET 0x10 30 30 #define MS_DUPLICATE_USAGES 0x20 31 + #define MS_RDESC_3K 0x40 31 32 32 - /* 33 - * Microsoft Wireless Desktop Receiver (Model 1028) has 34 - * 'Usage Min/Max' where it ought to have 'Physical Min/Max' 35 - */ 36 33 static __u8 *ms_report_fixup(struct hid_device *hdev, __u8 *rdesc, 37 34 unsigned int *rsize) 38 35 { 39 36 unsigned long quirks = (unsigned long)hid_get_drvdata(hdev); 40 37 38 + /* 39 + * Microsoft Wireless Desktop Receiver (Model 1028) has 40 + * 'Usage Min/Max' where it ought to have 'Physical Min/Max' 41 + */ 41 42 if ((quirks & MS_RDESC) && *rsize == 571 && rdesc[557] == 0x19 && 42 43 rdesc[559] == 0x29) { 43 44 hid_info(hdev, "fixing up Microsoft Wireless Receiver Model 1028 report descriptor\n"); 44 45 rdesc[557] = 0x35; 45 46 rdesc[559] = 0x45; 47 + } 48 + /* the same as above (s/usage/physical/) */ 49 + if ((quirks & MS_RDESC_3K) && *rsize == 106 && 50 + !memcmp((char []){ 0x19, 0x00, 0x29, 0xff }, 51 + &rdesc[94], 4)) { 52 + rdesc[94] = 0x35; 53 + rdesc[96] = 0x45; 46 54 } 47 55 return rdesc; 48 56 } ··· 200 192 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB), 201 193 .driver_data = MS_PRESENTER }, 202 194 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K), 203 - .driver_data = MS_ERGONOMY }, 195 + .driver_data = MS_ERGONOMY | MS_RDESC_3K }, 204 196 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0), 205 197 .driver_data = MS_NOGET }, 206 198 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
+2 -3
drivers/hid/hid-multitouch.c
··· 210 210 }, 211 211 { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS, 212 212 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP | 213 - MT_QUIRK_SLOT_IS_CONTACTNUMBER, 214 - .maxcontacts = 10 213 + MT_QUIRK_SLOT_IS_CONTACTNUMBER 215 214 }, 216 215 217 216 { .name = MT_CLS_FLATFROG, ··· 420 421 * contact max are global to the report */ 421 422 td->last_field_index = field->index; 422 423 return -1; 423 - } 424 424 case HID_DG_TOUCH: 425 425 /* Legacy devices use TIPSWITCH and not TOUCH. 426 426 * Let's just ignore this field. */ 427 427 return -1; 428 + } 428 429 /* let hid-input decide for the others */ 429 430 return 0; 430 431
+2 -2
drivers/hwmon/fam15h_power.c
··· 2 2 * fam15h_power.c - AMD Family 15h processor power monitoring 3 3 * 4 4 * Copyright (c) 2011 Advanced Micro Devices, Inc. 5 - * Author: Andreas Herrmann <andreas.herrmann3@amd.com> 5 + * Author: Andreas Herrmann <herrmann.der.user@googlemail.com> 6 6 * 7 7 * 8 8 * This driver is free software; you can redistribute it and/or ··· 28 28 #include <asm/processor.h> 29 29 30 30 MODULE_DESCRIPTION("AMD Family 15h CPU processor power monitor"); 31 - MODULE_AUTHOR("Andreas Herrmann <andreas.herrmann3@amd.com>"); 31 + MODULE_AUTHOR("Andreas Herrmann <herrmann.der.user@googlemail.com>"); 32 32 MODULE_LICENSE("GPL"); 33 33 34 34 /* D18F3 */
+2
drivers/hwmon/gpio-fan.c
··· 630 630 .driver = { 631 631 .name = "gpio-fan", 632 632 .pm = GPIO_FAN_PM, 633 + #ifdef CONFIG_OF_GPIO 633 634 .of_match_table = of_match_ptr(of_gpio_fan_match), 635 + #endif 634 636 }, 635 637 }; 636 638
+1
drivers/i2c/Makefile
··· 8 8 obj-$(CONFIG_I2C_CHARDEV) += i2c-dev.o 9 9 obj-$(CONFIG_I2C_MUX) += i2c-mux.o 10 10 obj-y += algos/ busses/ muxes/ 11 + obj-$(CONFIG_I2C_STUB) += i2c-stub.o 11 12 12 13 ccflags-$(CONFIG_I2C_DEBUG_CORE) := -DDEBUG 13 14 CFLAGS_i2c-core.o := -Wno-deprecated-declarations
-1
drivers/i2c/busses/Kconfig
··· 81 81 tristate "Intel 82801 (ICH/PCH)" 82 82 depends on PCI 83 83 select CHECK_SIGNATURE if X86 && DMI 84 - select GPIOLIB if I2C_MUX 85 84 help 86 85 If you say yes to this option, support will be included for the Intel 87 86 801 family of mainboard I2C interfaces. Specifically, the following
-1
drivers/i2c/busses/Makefile
··· 85 85 obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o 86 86 obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o 87 87 obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o 88 - obj-$(CONFIG_I2C_STUB) += i2c-stub.o 89 88 obj-$(CONFIG_SCx200_ACB) += scx200_acb.o 90 89 obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o 91 90
+7 -4
drivers/i2c/busses/i2c-i801.c
··· 82 82 #include <linux/wait.h> 83 83 #include <linux/err.h> 84 84 85 - #if defined CONFIG_I2C_MUX || defined CONFIG_I2C_MUX_MODULE 85 + #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \ 86 + defined CONFIG_DMI 86 87 #include <linux/gpio.h> 87 88 #include <linux/i2c-mux-gpio.h> 88 89 #include <linux/platform_device.h> ··· 193 192 int len; 194 193 u8 *data; 195 194 196 - #if defined CONFIG_I2C_MUX || defined CONFIG_I2C_MUX_MODULE 195 + #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \ 196 + defined CONFIG_DMI 197 197 const struct i801_mux_config *mux_drvdata; 198 198 struct platform_device *mux_pdev; 199 199 #endif ··· 923 921 static void __devinit i801_probe_optional_slaves(struct i801_priv *priv) {} 924 922 #endif /* CONFIG_X86 && CONFIG_DMI */ 925 923 926 - #if defined CONFIG_I2C_MUX || defined CONFIG_I2C_MUX_MODULE 924 + #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \ 925 + defined CONFIG_DMI 927 926 static struct i801_mux_config i801_mux_config_asus_z8_d12 = { 928 927 .gpio_chip = "gpio_ich", 929 928 .values = { 0x02, 0x03 }, ··· 1062 1059 1063 1060 id = dmi_first_match(mux_dmi_table); 1064 1061 if (id) { 1065 - /* Remove from branch classes from trunk */ 1062 + /* Remove branch classes from trunk */ 1066 1063 mux_config = id->driver_data; 1067 1064 for (i = 0; i < mux_config->n_values; i++) 1068 1065 class &= ~mux_config->classes[i];
+14 -172
drivers/i2c/busses/i2c-mxs.c
··· 1 1 /* 2 2 * Freescale MXS I2C bus driver 3 3 * 4 - * Copyright (C) 2011 Wolfram Sang, Pengutronix e.K. 4 + * Copyright (C) 2011-2012 Wolfram Sang, Pengutronix e.K. 5 5 * 6 6 * based on a (non-working) driver which was: 7 7 * ··· 34 34 #include <linux/fsl/mxs-dma.h> 35 35 36 36 #define DRIVER_NAME "mxs-i2c" 37 - 38 - static bool use_pioqueue; 39 - module_param(use_pioqueue, bool, 0); 40 - MODULE_PARM_DESC(use_pioqueue, "Use PIOQUEUE mode for transfer instead of DMA"); 41 37 42 38 #define MXS_I2C_CTRL0 (0x00) 43 39 #define MXS_I2C_CTRL0_SET (0x04) ··· 70 74 MXS_I2C_CTRL1_MASTER_LOSS_IRQ | \ 71 75 MXS_I2C_CTRL1_SLAVE_STOP_IRQ | \ 72 76 MXS_I2C_CTRL1_SLAVE_IRQ) 73 - 74 - #define MXS_I2C_QUEUECTRL (0x60) 75 - #define MXS_I2C_QUEUECTRL_SET (0x64) 76 - #define MXS_I2C_QUEUECTRL_CLR (0x68) 77 - 78 - #define MXS_I2C_QUEUECTRL_QUEUE_RUN 0x20 79 - #define MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE 0x04 80 - 81 - #define MXS_I2C_QUEUESTAT (0x70) 82 - #define MXS_I2C_QUEUESTAT_RD_QUEUE_EMPTY 0x00002000 83 - #define MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK 0x0000001F 84 - 85 - #define MXS_I2C_QUEUECMD (0x80) 86 - 87 - #define MXS_I2C_QUEUEDATA (0x90) 88 - 89 - #define MXS_I2C_DATA (0xa0) 90 77 91 78 92 79 #define MXS_CMD_I2C_SELECT (MXS_I2C_CTRL0_RETAIN_CLOCK | \ ··· 132 153 const struct mxs_i2c_speed_config *speed; 133 154 134 155 /* DMA support components */ 135 - bool dma_mode; 136 156 int dma_channel; 137 157 struct dma_chan *dmach; 138 158 struct mxs_dma_data dma_data; ··· 150 172 writel(i2c->speed->timing2, i2c->regs + MXS_I2C_TIMING2); 151 173 152 174 writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET); 153 - if (i2c->dma_mode) 154 - writel(MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE, 155 - i2c->regs + MXS_I2C_QUEUECTRL_CLR); 156 - else 157 - writel(MXS_I2C_QUEUECTRL_PIO_QUEUE_MODE, 158 - i2c->regs + MXS_I2C_QUEUECTRL_SET); 159 - } 160 - 161 - static void mxs_i2c_pioq_setup_read(struct mxs_i2c_dev *i2c, u8 addr, int len, 162 - int flags) 163 - { 164 - u32 data; 165 - 166 - writel(MXS_CMD_I2C_SELECT, i2c->regs + MXS_I2C_QUEUECMD); 167 - 168 - data = (addr << 1) | I2C_SMBUS_READ; 169 - writel(data, i2c->regs + MXS_I2C_DATA); 170 - 171 - data = MXS_CMD_I2C_READ | MXS_I2C_CTRL0_XFER_COUNT(len) | flags; 172 - writel(data, i2c->regs + MXS_I2C_QUEUECMD); 173 - } 174 - 175 - static void mxs_i2c_pioq_setup_write(struct mxs_i2c_dev *i2c, 176 - u8 addr, u8 *buf, int len, int flags) 177 - { 178 - u32 data; 179 - int i, shifts_left; 180 - 181 - data = MXS_CMD_I2C_WRITE | MXS_I2C_CTRL0_XFER_COUNT(len + 1) | flags; 182 - writel(data, i2c->regs + MXS_I2C_QUEUECMD); 183 - 184 - /* 185 - * We have to copy the slave address (u8) and buffer (arbitrary number 186 - * of u8) into the data register (u32). To achieve that, the u8 are put 187 - * into the MSBs of 'data' which is then shifted for the next u8. When 188 - * appropriate, 'data' is written to MXS_I2C_DATA. So, the first u32 189 - * looks like this: 190 - * 191 - * 3 2 1 0 192 - * 10987654|32109876|54321098|76543210 193 - * --------+--------+--------+-------- 194 - * buffer+2|buffer+1|buffer+0|slave_addr 195 - */ 196 - 197 - data = ((addr << 1) | I2C_SMBUS_WRITE) << 24; 198 - 199 - for (i = 0; i < len; i++) { 200 - data >>= 8; 201 - data |= buf[i] << 24; 202 - if ((i & 3) == 2) 203 - writel(data, i2c->regs + MXS_I2C_DATA); 204 - } 205 - 206 - /* Write out the remaining bytes if any */ 207 - shifts_left = 24 - (i & 3) * 8; 208 - if (shifts_left) 209 - writel(data >> shifts_left, i2c->regs + MXS_I2C_DATA); 210 - } 211 - 212 - /* 213 - * TODO: should be replaceable with a waitqueue and RD_QUEUE_IRQ (setting the 214 - * rd_threshold to 1). Couldn't get this to work, though. 215 - */ 216 - static int mxs_i2c_wait_for_data(struct mxs_i2c_dev *i2c) 217 - { 218 - unsigned long timeout = jiffies + msecs_to_jiffies(1000); 219 - 220 - while (readl(i2c->regs + MXS_I2C_QUEUESTAT) 221 - & MXS_I2C_QUEUESTAT_RD_QUEUE_EMPTY) { 222 - if (time_after(jiffies, timeout)) 223 - return -ETIMEDOUT; 224 - cond_resched(); 225 - } 226 - 227 - return 0; 228 - } 229 - 230 - static int mxs_i2c_finish_read(struct mxs_i2c_dev *i2c, u8 *buf, int len) 231 - { 232 - u32 uninitialized_var(data); 233 - int i; 234 - 235 - for (i = 0; i < len; i++) { 236 - if ((i & 3) == 0) { 237 - if (mxs_i2c_wait_for_data(i2c)) 238 - return -ETIMEDOUT; 239 - data = readl(i2c->regs + MXS_I2C_QUEUEDATA); 240 - } 241 - buf[i] = data & 0xff; 242 - data >>= 8; 243 - } 244 - 245 - return 0; 246 175 } 247 176 248 177 static void mxs_i2c_dma_finish(struct mxs_i2c_dev *i2c) ··· 317 432 init_completion(&i2c->cmd_complete); 318 433 i2c->cmd_err = 0; 319 434 320 - if (i2c->dma_mode) { 321 - ret = mxs_i2c_dma_setup_xfer(adap, msg, flags); 322 - if (ret) 323 - return ret; 324 - } else { 325 - if (msg->flags & I2C_M_RD) { 326 - mxs_i2c_pioq_setup_read(i2c, msg->addr, 327 - msg->len, flags); 328 - } else { 329 - mxs_i2c_pioq_setup_write(i2c, msg->addr, msg->buf, 330 - msg->len, flags); 331 - } 332 - 333 - writel(MXS_I2C_QUEUECTRL_QUEUE_RUN, 334 - i2c->regs + MXS_I2C_QUEUECTRL_SET); 335 - } 435 + ret = mxs_i2c_dma_setup_xfer(adap, msg, flags); 436 + if (ret) 437 + return ret; 336 438 337 439 ret = wait_for_completion_timeout(&i2c->cmd_complete, 338 440 msecs_to_jiffies(1000)); 339 441 if (ret == 0) 340 442 goto timeout; 341 443 342 - if (!i2c->dma_mode && !i2c->cmd_err && (msg->flags & I2C_M_RD)) { 343 - ret = mxs_i2c_finish_read(i2c, msg->buf, msg->len); 344 - if (ret) 345 - goto timeout; 346 - } 347 - 348 444 if (i2c->cmd_err == -ENXIO) 349 445 mxs_i2c_reset(i2c); 350 - else 351 - writel(MXS_I2C_QUEUECTRL_QUEUE_RUN, 352 - i2c->regs + MXS_I2C_QUEUECTRL_CLR); 353 446 354 447 dev_dbg(i2c->dev, "Done with err=%d\n", i2c->cmd_err); 355 448 ··· 335 472 336 473 timeout: 337 474 dev_dbg(i2c->dev, "Timeout!\n"); 338 - if (i2c->dma_mode) 339 - mxs_i2c_dma_finish(i2c); 475 + mxs_i2c_dma_finish(i2c); 340 476 mxs_i2c_reset(i2c); 341 477 return -ETIMEDOUT; 342 478 } ··· 364 502 { 365 503 struct mxs_i2c_dev *i2c = dev_id; 366 504 u32 stat = readl(i2c->regs + MXS_I2C_CTRL1) & MXS_I2C_IRQ_MASK; 367 - bool is_last_cmd; 368 505 369 506 if (!stat) 370 507 return IRQ_NONE; ··· 375 514 MXS_I2C_CTRL1_SLAVE_STOP_IRQ | MXS_I2C_CTRL1_SLAVE_IRQ)) 376 515 /* MXS_I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ is only for slaves */ 377 516 i2c->cmd_err = -EIO; 378 - 379 - if (!i2c->dma_mode) { 380 - is_last_cmd = (readl(i2c->regs + MXS_I2C_QUEUESTAT) & 381 - MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK) == 0; 382 - 383 - if (is_last_cmd || i2c->cmd_err) 384 - complete(&i2c->cmd_complete); 385 - } 386 517 387 518 writel(stat, i2c->regs + MXS_I2C_CTRL1_CLR); 388 519 ··· 409 556 int ret; 410 557 411 558 /* 412 - * The MXS I2C DMA mode is prefered and enabled by default. 413 - * The PIO mode is still supported, but should be used only 414 - * for debuging purposes etc. 415 - */ 416 - i2c->dma_mode = !use_pioqueue; 417 - if (!i2c->dma_mode) 418 - dev_info(dev, "Using PIOQUEUE mode for I2C transfers!\n"); 419 - 420 - /* 421 559 * TODO: This is a temporary solution and should be changed 422 560 * to use generic DMA binding later when the helpers get in. 423 561 */ 424 562 ret = of_property_read_u32(node, "fsl,i2c-dma-channel", 425 563 &i2c->dma_channel); 426 564 if (ret) { 427 - dev_warn(dev, "Failed to get DMA channel, using PIOQUEUE!\n"); 428 - i2c->dma_mode = 0; 565 + dev_err(dev, "Failed to get DMA channel!\n"); 566 + return -ENODEV; 429 567 } 430 568 431 569 ret = of_property_read_u32(node, "clock-frequency", &speed); ··· 478 634 } 479 635 480 636 /* Setup the DMA */ 481 - if (i2c->dma_mode) { 482 - dma_cap_zero(mask); 483 - dma_cap_set(DMA_SLAVE, mask); 484 - i2c->dma_data.chan_irq = dmairq; 485 - i2c->dmach = dma_request_channel(mask, mxs_i2c_dma_filter, i2c); 486 - if (!i2c->dmach) { 487 - dev_err(dev, "Failed to request dma\n"); 488 - return -ENODEV; 489 - } 637 + dma_cap_zero(mask); 638 + dma_cap_set(DMA_SLAVE, mask); 639 + i2c->dma_data.chan_irq = dmairq; 640 + i2c->dmach = dma_request_channel(mask, mxs_i2c_dma_filter, i2c); 641 + if (!i2c->dmach) { 642 + dev_err(dev, "Failed to request dma\n"); 643 + return -ENODEV; 490 644 } 491 645 492 646 platform_set_drvdata(pdev, i2c);
+7 -2
drivers/i2c/busses/i2c-nomadik.c
··· 644 644 645 645 pm_runtime_get_sync(&dev->adev->dev); 646 646 647 - clk_enable(dev->clk); 647 + status = clk_prepare_enable(dev->clk); 648 + if (status) { 649 + dev_err(&dev->adev->dev, "can't prepare_enable clock\n"); 650 + goto out_clk; 651 + } 648 652 649 653 status = init_hw(dev); 650 654 if (status) ··· 675 671 } 676 672 677 673 out: 678 - clk_disable(dev->clk); 674 + clk_disable_unprepare(dev->clk); 675 + out_clk: 679 676 pm_runtime_put_sync(&dev->adev->dev); 680 677 681 678 dev->busy = false;
+32 -34
drivers/i2c/busses/i2c-stub.c drivers/i2c/i2c-stub.c
··· 2 2 i2c-stub.c - I2C/SMBus chip emulator 3 3 4 4 Copyright (c) 2004 Mark M. Hoffman <mhoffman@lightlink.com> 5 - Copyright (C) 2007 Jean Delvare <khali@linux-fr.org> 5 + Copyright (C) 2007, 2012 Jean Delvare <khali@linux-fr.org> 6 6 7 7 This program is free software; you can redistribute it and/or modify 8 8 it under the terms of the GNU General Public License as published by ··· 51 51 static struct stub_chip *stub_chips; 52 52 53 53 /* Return negative errno on error. */ 54 - static s32 stub_xfer(struct i2c_adapter * adap, u16 addr, unsigned short flags, 55 - char read_write, u8 command, int size, union i2c_smbus_data * data) 54 + static s32 stub_xfer(struct i2c_adapter *adap, u16 addr, unsigned short flags, 55 + char read_write, u8 command, int size, union i2c_smbus_data *data) 56 56 { 57 57 s32 ret; 58 58 int i, len; ··· 78 78 case I2C_SMBUS_BYTE: 79 79 if (read_write == I2C_SMBUS_WRITE) { 80 80 chip->pointer = command; 81 - dev_dbg(&adap->dev, "smbus byte - addr 0x%02x, " 82 - "wrote 0x%02x.\n", 83 - addr, command); 81 + dev_dbg(&adap->dev, 82 + "smbus byte - addr 0x%02x, wrote 0x%02x.\n", 83 + addr, command); 84 84 } else { 85 85 data->byte = chip->words[chip->pointer++] & 0xff; 86 - dev_dbg(&adap->dev, "smbus byte - addr 0x%02x, " 87 - "read 0x%02x.\n", 88 - addr, data->byte); 86 + dev_dbg(&adap->dev, 87 + "smbus byte - addr 0x%02x, read 0x%02x.\n", 88 + addr, data->byte); 89 89 } 90 90 91 91 ret = 0; ··· 95 95 if (read_write == I2C_SMBUS_WRITE) { 96 96 chip->words[command] &= 0xff00; 97 97 chip->words[command] |= data->byte; 98 - dev_dbg(&adap->dev, "smbus byte data - addr 0x%02x, " 99 - "wrote 0x%02x at 0x%02x.\n", 100 - addr, data->byte, command); 98 + dev_dbg(&adap->dev, 99 + "smbus byte data - addr 0x%02x, wrote 0x%02x at 0x%02x.\n", 100 + addr, data->byte, command); 101 101 } else { 102 102 data->byte = chip->words[command] & 0xff; 103 - dev_dbg(&adap->dev, "smbus byte data - addr 0x%02x, " 104 - "read 0x%02x at 0x%02x.\n", 105 - addr, data->byte, command); 103 + dev_dbg(&adap->dev, 104 + "smbus byte data - addr 0x%02x, read 0x%02x at 0x%02x.\n", 105 + addr, data->byte, command); 106 106 } 107 107 chip->pointer = command + 1; 108 108 ··· 112 112 case I2C_SMBUS_WORD_DATA: 113 113 if (read_write == I2C_SMBUS_WRITE) { 114 114 chip->words[command] = data->word; 115 - dev_dbg(&adap->dev, "smbus word data - addr 0x%02x, " 116 - "wrote 0x%04x at 0x%02x.\n", 117 - addr, data->word, command); 115 + dev_dbg(&adap->dev, 116 + "smbus word data - addr 0x%02x, wrote 0x%04x at 0x%02x.\n", 117 + addr, data->word, command); 118 118 } else { 119 119 data->word = chip->words[command]; 120 - dev_dbg(&adap->dev, "smbus word data - addr 0x%02x, " 121 - "read 0x%04x at 0x%02x.\n", 122 - addr, data->word, command); 120 + dev_dbg(&adap->dev, 121 + "smbus word data - addr 0x%02x, read 0x%04x at 0x%02x.\n", 122 + addr, data->word, command); 123 123 } 124 124 125 125 ret = 0; ··· 132 132 chip->words[command + i] &= 0xff00; 133 133 chip->words[command + i] |= data->block[1 + i]; 134 134 } 135 - dev_dbg(&adap->dev, "i2c block data - addr 0x%02x, " 136 - "wrote %d bytes at 0x%02x.\n", 137 - addr, len, command); 135 + dev_dbg(&adap->dev, 136 + "i2c block data - addr 0x%02x, wrote %d bytes at 0x%02x.\n", 137 + addr, len, command); 138 138 } else { 139 139 for (i = 0; i < len; i++) { 140 140 data->block[1 + i] = 141 141 chip->words[command + i] & 0xff; 142 142 } 143 - dev_dbg(&adap->dev, "i2c block data - addr 0x%02x, " 144 - "read %d bytes at 0x%02x.\n", 145 - addr, len, command); 143 + dev_dbg(&adap->dev, 144 + "i2c block data - addr 0x%02x, read %d bytes at 0x%02x.\n", 145 + addr, len, command); 146 146 } 147 147 148 148 ret = 0; ··· 179 179 int i, ret; 180 180 181 181 if (!chip_addr[0]) { 182 - printk(KERN_ERR "i2c-stub: Please specify a chip address\n"); 182 + pr_err("i2c-stub: Please specify a chip address\n"); 183 183 return -ENODEV; 184 184 } 185 185 186 186 for (i = 0; i < MAX_CHIPS && chip_addr[i]; i++) { 187 187 if (chip_addr[i] < 0x03 || chip_addr[i] > 0x77) { 188 - printk(KERN_ERR "i2c-stub: Invalid chip address " 189 - "0x%02x\n", chip_addr[i]); 188 + pr_err("i2c-stub: Invalid chip address 0x%02x\n", 189 + chip_addr[i]); 190 190 return -EINVAL; 191 191 } 192 192 193 - printk(KERN_INFO "i2c-stub: Virtual chip at 0x%02x\n", 194 - chip_addr[i]); 193 + pr_info("i2c-stub: Virtual chip at 0x%02x\n", chip_addr[i]); 195 194 } 196 195 197 196 /* Allocate memory for all chips at once */ 198 197 stub_chips = kzalloc(i * sizeof(struct stub_chip), GFP_KERNEL); 199 198 if (!stub_chips) { 200 - printk(KERN_ERR "i2c-stub: Out of memory\n"); 199 + pr_err("i2c-stub: Out of memory\n"); 201 200 return -ENOMEM; 202 201 } 203 202 ··· 218 219 219 220 module_init(i2c_stub_init); 220 221 module_exit(i2c_stub_exit); 221 -
+1 -1
drivers/i2c/busses/i2c-tegra.c
··· 742 742 } 743 743 744 744 ret = devm_request_irq(&pdev->dev, i2c_dev->irq, 745 - tegra_i2c_isr, 0, pdev->name, i2c_dev); 745 + tegra_i2c_isr, 0, dev_name(&pdev->dev), i2c_dev); 746 746 if (ret) { 747 747 dev_err(&pdev->dev, "Failed to request irq %i\n", i2c_dev->irq); 748 748 return ret;
+1
drivers/input/keyboard/Kconfig
··· 335 335 config KEYBOARD_LPC32XX 336 336 tristate "LPC32XX matrix key scanner support" 337 337 depends on ARCH_LPC32XX && OF 338 + select INPUT_MATRIXKMAP 338 339 help 339 340 Say Y here if you want to use NXP LPC32XX SoC key scanner interface, 340 341 connected to a key matrix.
+3
drivers/input/keyboard/pxa27x_keypad.c
··· 368 368 unsigned int mask = 0, direct_key_num = 0; 369 369 unsigned long kpc = 0; 370 370 371 + /* clear pending interrupt bit */ 372 + keypad_readl(KPC); 373 + 371 374 /* enable matrix keys with automatic scan */ 372 375 if (pdata->matrix_key_rows && pdata->matrix_key_cols) { 373 376 kpc |= KPC_ASACT | KPC_MIE | KPC_ME | KPC_MS_ALL;
+4 -1
drivers/input/misc/xen-kbdfront.c
··· 311 311 case XenbusStateReconfiguring: 312 312 case XenbusStateReconfigured: 313 313 case XenbusStateUnknown: 314 - case XenbusStateClosed: 315 314 break; 316 315 317 316 case XenbusStateInitWait: ··· 349 350 350 351 break; 351 352 353 + case XenbusStateClosed: 354 + if (dev->state == XenbusStateClosed) 355 + break; 356 + /* Missed the backend's CLOSING state -- fallthrough */ 352 357 case XenbusStateClosing: 353 358 xenbus_frontend_closed(dev); 354 359 break;
+21
drivers/input/mouse/bcm5974.c
··· 84 84 #define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262 85 85 #define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263 86 86 #define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264 87 + /* MacbookPro10,2 (unibody, October 2012) */ 88 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI 0x0259 89 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO 0x025a 90 + #define USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS 0x025b 87 91 88 92 #define BCM5974_DEVICE(prod) { \ 89 93 .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ ··· 141 137 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI), 142 138 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ISO), 143 139 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS), 140 + /* MacbookPro10,2 */ 141 + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI), 142 + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO), 143 + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS), 144 144 /* Terminating entry */ 145 145 {} 146 146 }; ··· 378 370 USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI, 379 371 USB_DEVICE_ID_APPLE_WELLSPRING7_ISO, 380 372 USB_DEVICE_ID_APPLE_WELLSPRING7_JIS, 373 + HAS_INTEGRATED_BUTTON, 374 + 0x84, sizeof(struct bt_data), 375 + 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, 376 + { SN_PRESSURE, 0, 300 }, 377 + { SN_WIDTH, 0, 2048 }, 378 + { SN_COORD, -4750, 5280 }, 379 + { SN_COORD, -150, 6730 }, 380 + { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION } 381 + }, 382 + { 383 + USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI, 384 + USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO, 385 + USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS, 381 386 HAS_INTEGRATED_BUTTON, 382 387 0x84, sizeof(struct bt_data), 383 388 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
+1 -1
drivers/input/tablet/wacom_sys.c
··· 391 391 features->pktlen = WACOM_PKGLEN_TPC2FG; 392 392 } 393 393 394 - if (features->type == MTSCREEN || WACOM_24HDT) 394 + if (features->type == MTSCREEN || features->type == WACOM_24HDT) 395 395 features->pktlen = WACOM_PKGLEN_MTOUCH; 396 396 397 397 if (features->type == BAMBOO_PT) {
+3
drivers/input/tablet/wacom_wac.c
··· 1518 1518 1519 1519 input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); 1520 1520 input_set_abs_params(input_dev, ABS_THROTTLE, 0, 71, 0, 0); 1521 + 1522 + __set_bit(INPUT_PROP_DIRECT, input_dev->propbit); 1523 + 1521 1524 wacom_setup_cintiq(wacom_wac); 1522 1525 break; 1523 1526
+1 -1
drivers/input/touchscreen/Kconfig
··· 239 239 240 240 config TOUCHSCREEN_EGALAX 241 241 tristate "EETI eGalax multi-touch panel support" 242 - depends on I2C 242 + depends on I2C && OF 243 243 help 244 244 Say Y here to enable support for I2C connected EETI 245 245 eGalax multi-touch panels.
+21 -2
drivers/input/touchscreen/egalax_ts.c
··· 28 28 #include <linux/slab.h> 29 29 #include <linux/bitops.h> 30 30 #include <linux/input/mt.h> 31 + #include <linux/of_gpio.h> 31 32 32 33 /* 33 34 * Mouse Mode: some panel may configure the controller to mouse mode, ··· 123 122 /* wake up controller by an falling edge of interrupt gpio. */ 124 123 static int egalax_wake_up_device(struct i2c_client *client) 125 124 { 126 - int gpio = irq_to_gpio(client->irq); 125 + struct device_node *np = client->dev.of_node; 126 + int gpio; 127 127 int ret; 128 + 129 + if (!np) 130 + return -ENODEV; 131 + 132 + gpio = of_get_named_gpio(np, "wakeup-gpios", 0); 133 + if (!gpio_is_valid(gpio)) 134 + return -ENODEV; 128 135 129 136 ret = gpio_request(gpio, "egalax_irq"); 130 137 if (ret < 0) { ··· 190 181 ts->input_dev = input_dev; 191 182 192 183 /* controller may be in sleep, wake it up. */ 193 - egalax_wake_up_device(client); 184 + error = egalax_wake_up_device(client); 185 + if (error) { 186 + dev_err(&client->dev, "Failed to wake up the controller\n"); 187 + goto err_free_dev; 188 + } 194 189 195 190 ret = egalax_firmware_version(client); 196 191 if (ret < 0) { ··· 287 274 288 275 static SIMPLE_DEV_PM_OPS(egalax_ts_pm_ops, egalax_ts_suspend, egalax_ts_resume); 289 276 277 + static struct of_device_id egalax_ts_dt_ids[] = { 278 + { .compatible = "eeti,egalax_ts" }, 279 + { /* sentinel */ } 280 + }; 281 + 290 282 static struct i2c_driver egalax_ts_driver = { 291 283 .driver = { 292 284 .name = "egalax_ts", 293 285 .owner = THIS_MODULE, 294 286 .pm = &egalax_ts_pm_ops, 287 + .of_match_table = of_match_ptr(egalax_ts_dt_ids), 295 288 }, 296 289 .id_table = egalax_ts_id, 297 290 .probe = egalax_ts_probe,
-1
drivers/input/touchscreen/tsc40.c
··· 107 107 __set_bit(BTN_TOUCH, input_dev->keybit); 108 108 input_set_abs_params(ptsc->dev, ABS_X, 0, 0x3ff, 0, 0); 109 109 input_set_abs_params(ptsc->dev, ABS_Y, 0, 0x3ff, 0, 0); 110 - input_set_abs_params(ptsc->dev, ABS_PRESSURE, 0, 0, 0, 0); 111 110 112 111 serio_set_drvdata(serio, ptsc); 113 112
+4 -1
drivers/md/faulty.c
··· 315 315 } 316 316 conf->nfaults = 0; 317 317 318 - rdev_for_each(rdev, mddev) 318 + rdev_for_each(rdev, mddev) { 319 319 conf->rdev = rdev; 320 + disk_stack_limits(mddev->gendisk, rdev->bdev, 321 + rdev->data_offset << 9); 322 + } 320 323 321 324 md_set_array_sectors(mddev, faulty_size(mddev, 0, 0)); 322 325 mddev->private = conf;
+1 -1
drivers/md/raid1.c
··· 2710 2710 || disk_idx < 0) 2711 2711 continue; 2712 2712 if (test_bit(Replacement, &rdev->flags)) 2713 - disk = conf->mirrors + conf->raid_disks + disk_idx; 2713 + disk = conf->mirrors + mddev->raid_disks + disk_idx; 2714 2714 else 2715 2715 disk = conf->mirrors + disk_idx; 2716 2716
+9 -6
drivers/md/raid10.c
··· 1783 1783 clear_bit(Unmerged, &rdev->flags); 1784 1784 } 1785 1785 md_integrity_add_rdev(rdev, mddev); 1786 - if (blk_queue_discard(bdev_get_queue(rdev->bdev))) 1786 + if (mddev->queue && blk_queue_discard(bdev_get_queue(rdev->bdev))) 1787 1787 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 1788 1788 1789 1789 print_conf(conf); ··· 3613 3613 discard_supported = true; 3614 3614 } 3615 3615 3616 - if (discard_supported) 3617 - queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 3618 - else 3619 - queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); 3620 - 3616 + if (mddev->queue) { 3617 + if (discard_supported) 3618 + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, 3619 + mddev->queue); 3620 + else 3621 + queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, 3622 + mddev->queue); 3623 + } 3621 3624 /* need to check that every block has at least one working mirror */ 3622 3625 if (!enough(conf, -1)) { 3623 3626 printk(KERN_ERR "md/raid10:%s: not enough operational mirrors.\n",
+2 -2
drivers/net/bonding/bond_sysfs.c
··· 1060 1060 goto out; 1061 1061 } 1062 1062 1063 - sscanf(buf, "%16s", ifname); /* IFNAMSIZ */ 1063 + sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1064 1064 1065 1065 /* check to see if we are clearing primary */ 1066 1066 if (!strlen(ifname) || buf[0] == '\n') { ··· 1237 1237 goto out; 1238 1238 } 1239 1239 1240 - sscanf(buf, "%16s", ifname); /* IFNAMSIZ */ 1240 + sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1241 1241 1242 1242 /* check to see if we are clearing active */ 1243 1243 if (!strlen(ifname) || buf[0] == '\n') {
+113 -45
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
··· 137 137 #define LINK_20GTFD LINK_STATUS_SPEED_AND_DUPLEX_20GTFD 138 138 #define LINK_20GXFD LINK_STATUS_SPEED_AND_DUPLEX_20GXFD 139 139 140 - 140 + #define LINK_UPDATE_MASK \ 141 + (LINK_STATUS_SPEED_AND_DUPLEX_MASK | \ 142 + LINK_STATUS_LINK_UP | \ 143 + LINK_STATUS_PHYSICAL_LINK_FLAG | \ 144 + LINK_STATUS_AUTO_NEGOTIATE_COMPLETE | \ 145 + LINK_STATUS_RX_FLOW_CONTROL_FLAG_MASK | \ 146 + LINK_STATUS_TX_FLOW_CONTROL_FLAG_MASK | \ 147 + LINK_STATUS_PARALLEL_DETECTION_FLAG_MASK | \ 148 + LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE | \ 149 + LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE) 141 150 142 151 #define SFP_EEPROM_CON_TYPE_ADDR 0x2 143 152 #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7 ··· 3304 3295 DEFAULT_PHY_DEV_ADDR); 3305 3296 } 3306 3297 3298 + static void bnx2x_xgxs_specific_func(struct bnx2x_phy *phy, 3299 + struct link_params *params, 3300 + u32 action) 3301 + { 3302 + struct bnx2x *bp = params->bp; 3303 + switch (action) { 3304 + case PHY_INIT: 3305 + /* Set correct devad */ 3306 + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_ST + params->port*0x18, 0); 3307 + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_DEVAD + params->port*0x18, 3308 + phy->def_md_devad); 3309 + break; 3310 + } 3311 + } 3312 + 3307 3313 static void bnx2x_xgxs_deassert(struct link_params *params) 3308 3314 { 3309 3315 struct bnx2x *bp = params->bp; ··· 3333 3309 REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, val); 3334 3310 udelay(500); 3335 3311 REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_SET, val); 3336 - 3337 - REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_ST + port*0x18, 0); 3338 - REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18, 3339 - params->phy[INT_PHY].def_md_devad); 3312 + bnx2x_xgxs_specific_func(&params->phy[INT_PHY], params, 3313 + PHY_INIT); 3340 3314 } 3341 3315 3342 3316 static void bnx2x_calc_ieee_aneg_adv(struct bnx2x_phy *phy, ··· 3567 3545 static void bnx2x_warpcore_enable_AN_KR(struct bnx2x_phy *phy, 3568 3546 struct link_params *params, 3569 3547 struct link_vars *vars) { 3570 - u16 val16 = 0, lane, i; 3548 + u16 lane, i, cl72_ctrl, an_adv = 0; 3549 + u16 ucode_ver; 3571 3550 struct bnx2x *bp = params->bp; 3572 3551 static struct bnx2x_reg_set reg_set[] = { 3573 3552 {MDIO_WC_DEVAD, MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X2, 0x7}, 3574 - {MDIO_AN_DEVAD, MDIO_WC_REG_PAR_DET_10G_CTRL, 0}, 3575 - {MDIO_WC_DEVAD, MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL, 0}, 3576 - {MDIO_WC_DEVAD, MDIO_WC_REG_XGXSBLK1_LANECTRL0, 0xff}, 3577 - {MDIO_WC_DEVAD, MDIO_WC_REG_XGXSBLK1_LANECTRL1, 0x5555}, 3578 3553 {MDIO_PMA_DEVAD, MDIO_WC_REG_IEEE0BLK_AUTONEGNP, 0x0}, 3579 3554 {MDIO_WC_DEVAD, MDIO_WC_REG_RX66_CONTROL, 0x7415}, 3580 3555 {MDIO_WC_DEVAD, MDIO_WC_REG_SERDESDIGITAL_MISC2, 0x6190}, ··· 3584 3565 bnx2x_cl45_write(bp, phy, reg_set[i].devad, reg_set[i].reg, 3585 3566 reg_set[i].val); 3586 3567 3568 + bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 3569 + MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL, &cl72_ctrl); 3570 + cl72_ctrl &= 0xf8ff; 3571 + cl72_ctrl |= 0x3800; 3572 + bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 3573 + MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL, cl72_ctrl); 3574 + 3587 3575 /* Check adding advertisement for 1G KX */ 3588 3576 if (((vars->line_speed == SPEED_AUTO_NEG) && 3589 3577 (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) || 3590 3578 (vars->line_speed == SPEED_1000)) { 3591 3579 u32 addr = MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X2; 3592 - val16 |= (1<<5); 3580 + an_adv |= (1<<5); 3593 3581 3594 3582 /* Enable CL37 1G Parallel Detect */ 3595 3583 bnx2x_cl45_read_or_write(bp, phy, MDIO_WC_DEVAD, addr, 0x1); ··· 3606 3580 (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) || 3607 3581 (vars->line_speed == SPEED_10000)) { 3608 3582 /* Check adding advertisement for 10G KR */ 3609 - val16 |= (1<<7); 3583 + an_adv |= (1<<7); 3610 3584 /* Enable 10G Parallel Detect */ 3585 + CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK, 3586 + MDIO_AER_BLOCK_AER_REG, 0); 3587 + 3611 3588 bnx2x_cl45_write(bp, phy, MDIO_AN_DEVAD, 3612 3589 MDIO_WC_REG_PAR_DET_10G_CTRL, 1); 3613 - 3590 + bnx2x_set_aer_mmd(params, phy); 3614 3591 DP(NETIF_MSG_LINK, "Advertize 10G\n"); 3615 3592 } 3616 3593 ··· 3633 3604 3634 3605 /* Advertised speeds */ 3635 3606 bnx2x_cl45_write(bp, phy, MDIO_AN_DEVAD, 3636 - MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT1, val16); 3607 + MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT1, an_adv); 3637 3608 3638 3609 /* Advertised and set FEC (Forward Error Correction) */ 3639 3610 bnx2x_cl45_write(bp, phy, MDIO_AN_DEVAD, ··· 3657 3628 /* Set KR Autoneg Work-Around flag for Warpcore version older than D108 3658 3629 */ 3659 3630 bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 3660 - MDIO_WC_REG_UC_INFO_B1_VERSION, &val16); 3661 - if (val16 < 0xd108) { 3662 - DP(NETIF_MSG_LINK, "Enable AN KR work-around\n"); 3631 + MDIO_WC_REG_UC_INFO_B1_VERSION, &ucode_ver); 3632 + if (ucode_ver < 0xd108) { 3633 + DP(NETIF_MSG_LINK, "Enable AN KR work-around. WC ver:0x%x\n", 3634 + ucode_ver); 3663 3635 vars->rx_tx_asic_rst = MAX_KR_LINK_RETRY; 3664 3636 } 3665 3637 bnx2x_cl45_read_or_write(bp, phy, MDIO_WC_DEVAD, ··· 3681 3651 struct link_vars *vars) 3682 3652 { 3683 3653 struct bnx2x *bp = params->bp; 3684 - u16 i; 3654 + u16 val16, i, lane; 3685 3655 static struct bnx2x_reg_set reg_set[] = { 3686 3656 /* Disable Autoneg */ 3687 3657 {MDIO_WC_DEVAD, MDIO_WC_REG_SERDESDIGITAL_CONTROL1000X2, 0x7}, 3688 - {MDIO_AN_DEVAD, MDIO_WC_REG_PAR_DET_10G_CTRL, 0}, 3689 3658 {MDIO_WC_DEVAD, MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL, 3690 3659 0x3f00}, 3691 3660 {MDIO_AN_DEVAD, MDIO_WC_REG_AN_IEEE1BLK_AN_ADVERTISEMENT1, 0}, 3692 3661 {MDIO_AN_DEVAD, MDIO_WC_REG_IEEE0BLK_MIICNTL, 0x0}, 3693 3662 {MDIO_WC_DEVAD, MDIO_WC_REG_DIGITAL3_UP1, 0x1}, 3694 3663 {MDIO_WC_DEVAD, MDIO_WC_REG_DIGITAL5_MISC7, 0xa}, 3695 - /* Disable CL36 PCS Tx */ 3696 - {MDIO_WC_DEVAD, MDIO_WC_REG_XGXSBLK1_LANECTRL0, 0x0}, 3697 - /* Double Wide Single Data Rate @ pll rate */ 3698 - {MDIO_WC_DEVAD, MDIO_WC_REG_XGXSBLK1_LANECTRL1, 0xFFFF}, 3699 3664 /* Leave cl72 training enable, needed for KR */ 3700 3665 {MDIO_PMA_DEVAD, 3701 3666 MDIO_WC_REG_PMD_IEEE9BLK_TENGBASE_KR_PMD_CONTROL_REGISTER_150, ··· 3701 3676 bnx2x_cl45_write(bp, phy, reg_set[i].devad, reg_set[i].reg, 3702 3677 reg_set[i].val); 3703 3678 3704 - /* Leave CL72 enabled */ 3705 - bnx2x_cl45_read_or_write(bp, phy, MDIO_WC_DEVAD, 3706 - MDIO_WC_REG_CL72_USERB0_CL72_MISC1_CONTROL, 3707 - 0x3800); 3679 + lane = bnx2x_get_warpcore_lane(phy, params); 3680 + /* Global registers */ 3681 + CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK, 3682 + MDIO_AER_BLOCK_AER_REG, 0); 3683 + /* Disable CL36 PCS Tx */ 3684 + bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 3685 + MDIO_WC_REG_XGXSBLK1_LANECTRL0, &val16); 3686 + val16 &= ~(0x0011 << lane); 3687 + bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 3688 + MDIO_WC_REG_XGXSBLK1_LANECTRL0, val16); 3708 3689 3690 + bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 3691 + MDIO_WC_REG_XGXSBLK1_LANECTRL1, &val16); 3692 + val16 |= (0x0303 << (lane << 1)); 3693 + bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 3694 + MDIO_WC_REG_XGXSBLK1_LANECTRL1, val16); 3695 + /* Restore AER */ 3696 + bnx2x_set_aer_mmd(params, phy); 3709 3697 /* Set speed via PMA/PMD register */ 3710 3698 bnx2x_cl45_write(bp, phy, MDIO_PMA_DEVAD, 3711 3699 MDIO_WC_REG_IEEE0BLK_MIICNTL, 0x2040); ··· 4341 4303 struct link_params *params) 4342 4304 { 4343 4305 struct bnx2x *bp = params->bp; 4344 - u16 val16; 4306 + u16 val16, lane; 4345 4307 bnx2x_sfp_e3_set_transmitter(params, phy, 0); 4346 4308 bnx2x_set_mdio_clk(bp, params->chip_id, params->port); 4347 4309 bnx2x_set_aer_mmd(params, phy); ··· 4377 4339 bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 4378 4340 MDIO_WC_REG_XGXSBLK1_LANECTRL2, 4379 4341 val16 & 0xff00); 4342 + 4343 + lane = bnx2x_get_warpcore_lane(phy, params); 4344 + /* Disable CL36 PCS Tx */ 4345 + bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 4346 + MDIO_WC_REG_XGXSBLK1_LANECTRL0, &val16); 4347 + val16 |= (0x11 << lane); 4348 + if (phy->flags & FLAGS_WC_DUAL_MODE) 4349 + val16 |= (0x22 << lane); 4350 + bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 4351 + MDIO_WC_REG_XGXSBLK1_LANECTRL0, val16); 4352 + 4353 + bnx2x_cl45_read(bp, phy, MDIO_WC_DEVAD, 4354 + MDIO_WC_REG_XGXSBLK1_LANECTRL1, &val16); 4355 + val16 &= ~(0x0303 << (lane << 1)); 4356 + val16 |= (0x0101 << (lane << 1)); 4357 + if (phy->flags & FLAGS_WC_DUAL_MODE) { 4358 + val16 &= ~(0x0c0c << (lane << 1)); 4359 + val16 |= (0x0404 << (lane << 1)); 4360 + } 4361 + 4362 + bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD, 4363 + MDIO_WC_REG_XGXSBLK1_LANECTRL1, val16); 4364 + /* Restore AER */ 4365 + bnx2x_set_aer_mmd(params, phy); 4380 4366 4381 4367 } 4382 4368 ··· 6358 6296 vars->mac_type = MAC_TYPE_NONE; 6359 6297 6360 6298 /* Update shared memory */ 6361 - vars->link_status &= ~(LINK_STATUS_SPEED_AND_DUPLEX_MASK | 6362 - LINK_STATUS_LINK_UP | 6363 - LINK_STATUS_PHYSICAL_LINK_FLAG | 6364 - LINK_STATUS_AUTO_NEGOTIATE_COMPLETE | 6365 - LINK_STATUS_RX_FLOW_CONTROL_FLAG_MASK | 6366 - LINK_STATUS_TX_FLOW_CONTROL_FLAG_MASK | 6367 - LINK_STATUS_PARALLEL_DETECTION_FLAG_MASK | 6368 - LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE | 6369 - LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE); 6299 + vars->link_status &= ~LINK_UPDATE_MASK; 6370 6300 vars->line_speed = 0; 6371 6301 bnx2x_update_mng(params, vars->link_status); 6372 6302 ··· 6506 6452 u16 ext_phy_line_speed = 0, prev_line_speed = vars->line_speed; 6507 6453 u8 active_external_phy = INT_PHY; 6508 6454 vars->phy_flags &= ~PHY_HALF_OPEN_CONN_FLAG; 6455 + vars->link_status &= ~LINK_UPDATE_MASK; 6509 6456 for (phy_index = INT_PHY; phy_index < params->num_phys; 6510 6457 phy_index++) { 6511 6458 phy_vars[phy_index].flow_ctrl = 0; ··· 7634 7579 static int bnx2x_warpcore_read_sfp_module_eeprom(struct bnx2x_phy *phy, 7635 7580 struct link_params *params, 7636 7581 u16 addr, u8 byte_cnt, 7637 - u8 *o_buf) 7582 + u8 *o_buf, u8 is_init) 7638 7583 { 7639 7584 int rc = 0; 7640 7585 u8 i, j = 0, cnt = 0; ··· 7651 7596 /* 4 byte aligned address */ 7652 7597 addr32 = addr & (~0x3); 7653 7598 do { 7654 - if (cnt == I2C_WA_PWR_ITER) { 7599 + if ((!is_init) && (cnt == I2C_WA_PWR_ITER)) { 7655 7600 bnx2x_warpcore_power_module(params, phy, 0); 7656 7601 /* Note that 100us are not enough here */ 7657 - usleep_range(1000,1000); 7602 + usleep_range(1000, 2000); 7658 7603 bnx2x_warpcore_power_module(params, phy, 1); 7659 7604 } 7660 7605 rc = bnx2x_bsc_read(params, phy, 0xa0, addr32, 0, byte_cnt, ··· 7774 7719 break; 7775 7720 case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: 7776 7721 rc = bnx2x_warpcore_read_sfp_module_eeprom(phy, params, addr, 7777 - byte_cnt, o_buf); 7722 + byte_cnt, o_buf, 0); 7778 7723 break; 7779 7724 } 7780 7725 return rc; ··· 7978 7923 7979 7924 { 7980 7925 u8 val; 7926 + int rc; 7981 7927 struct bnx2x *bp = params->bp; 7982 7928 u16 timeout; 7983 7929 /* Initialization time after hot-plug may take up to 300ms for ··· 7986 7930 */ 7987 7931 7988 7932 for (timeout = 0; timeout < 60; timeout++) { 7989 - if (bnx2x_read_sfp_module_eeprom(phy, params, 1, 1, &val) 7990 - == 0) { 7933 + if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) 7934 + rc = bnx2x_warpcore_read_sfp_module_eeprom(phy, 7935 + params, 1, 7936 + 1, &val, 1); 7937 + else 7938 + rc = bnx2x_read_sfp_module_eeprom(phy, params, 1, 1, 7939 + &val); 7940 + if (rc == 0) { 7991 7941 DP(NETIF_MSG_LINK, 7992 7942 "SFP+ module initialization took %d ms\n", 7993 7943 timeout * 5); ··· 8001 7939 } 8002 7940 usleep_range(5000, 10000); 8003 7941 } 8004 - return -EINVAL; 7942 + rc = bnx2x_read_sfp_module_eeprom(phy, params, 1, 1, &val); 7943 + return rc; 8005 7944 } 8006 7945 8007 7946 static void bnx2x_8727_power_module(struct bnx2x *bp, ··· 11056 10993 .format_fw_ver = (format_fw_ver_t)NULL, 11057 10994 .hw_reset = (hw_reset_t)NULL, 11058 10995 .set_link_led = (set_link_led_t)NULL, 11059 - .phy_specific_func = (phy_specific_func_t)NULL 10996 + .phy_specific_func = (phy_specific_func_t)bnx2x_xgxs_specific_func 11060 10997 }; 11061 10998 static struct bnx2x_phy phy_warpcore = { 11062 10999 .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT, ··· 11528 11465 phy->media_type = ETH_PHY_BASE_T; 11529 11466 break; 11530 11467 case PORT_HW_CFG_NET_SERDES_IF_XFI: 11468 + phy->supported &= (SUPPORTED_1000baseT_Full | 11469 + SUPPORTED_10000baseT_Full | 11470 + SUPPORTED_FIBRE | 11471 + SUPPORTED_Pause | 11472 + SUPPORTED_Asym_Pause); 11531 11473 phy->media_type = ETH_PHY_XFP_FIBER; 11532 11474 break; 11533 11475 case PORT_HW_CFG_NET_SERDES_IF_SFI:
+11 -2
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
··· 6794 6794 6795 6795 bnx2x_init_block(bp, BLOCK_DORQ, init_phase); 6796 6796 6797 + bnx2x_init_block(bp, BLOCK_BRB1, init_phase); 6798 + 6797 6799 if (CHIP_IS_E1(bp) || CHIP_IS_E1H(bp)) { 6798 - bnx2x_init_block(bp, BLOCK_BRB1, init_phase); 6799 6800 6800 6801 if (IS_MF(bp)) 6801 6802 low = ((bp->flags & ONE_PORT_FLAG) ? 160 : 246); ··· 11903 11902 /* disable FCOE L2 queue for E1x */ 11904 11903 if (CHIP_IS_E1x(bp)) 11905 11904 bp->flags |= NO_FCOE_FLAG; 11906 - 11905 + /* disable FCOE for 57840 device, until FW supports it */ 11906 + switch (ent->driver_data) { 11907 + case BCM57840_O: 11908 + case BCM57840_4_10: 11909 + case BCM57840_2_20: 11910 + case BCM57840_MFO: 11911 + case BCM57840_MF: 11912 + bp->flags |= NO_FCOE_FLAG; 11913 + } 11907 11914 #endif 11908 11915 11909 11916
-10
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
··· 3416 3416 finicsum, cfcsum); 3417 3417 3418 3418 /* 3419 - * If we're a pure NIC driver then disable all offloading facilities. 3420 - * This will allow the firmware to optimize aspects of the hardware 3421 - * configuration which will result in improved performance. 3422 - */ 3423 - caps_cmd.ofldcaps = 0; 3424 - caps_cmd.iscsicaps = 0; 3425 - caps_cmd.rdmacaps = 0; 3426 - caps_cmd.fcoecaps = 0; 3427 - 3428 - /* 3429 3419 * And now tell the firmware to use the configuration we just loaded. 3430 3420 */ 3431 3421 caps_cmd.op_to_write =
+3
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
··· 2673 2673 case ixgbe_mac_X540: 2674 2674 case ixgbe_mac_82599EB: 2675 2675 info->so_timestamping = 2676 + SOF_TIMESTAMPING_TX_SOFTWARE | 2677 + SOF_TIMESTAMPING_RX_SOFTWARE | 2678 + SOF_TIMESTAMPING_SOFTWARE | 2676 2679 SOF_TIMESTAMPING_TX_HARDWARE | 2677 2680 SOF_TIMESTAMPING_RX_HARDWARE | 2678 2681 SOF_TIMESTAMPING_RAW_HARDWARE;
+1
drivers/net/ethernet/nxp/lpc_eth.c
··· 1524 1524 pldat->dma_buff_base_p); 1525 1525 free_irq(ndev->irq, ndev); 1526 1526 iounmap(pldat->net_base); 1527 + mdiobus_unregister(pldat->mii_bus); 1527 1528 mdiobus_free(pldat->mii_bus); 1528 1529 clk_disable(pldat->clk); 1529 1530 clk_put(pldat->clk);
+1
drivers/net/phy/mdio-bitbang.c
··· 234 234 struct mdiobb_ctrl *ctrl = bus->priv; 235 235 236 236 module_put(ctrl->ops->owner); 237 + mdiobus_unregister(bus); 237 238 mdiobus_free(bus); 238 239 } 239 240 EXPORT_SYMBOL(free_mdio_bitbang);
+45 -20
drivers/net/vmxnet3/vmxnet3_drv.c
··· 744 744 745 745 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 746 746 const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; 747 + u32 buf_size; 747 748 748 - tbi = tq->buf_info + tq->tx_ring.next2fill; 749 - tbi->map_type = VMXNET3_MAP_PAGE; 750 - tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, 751 - 0, skb_frag_size(frag), 752 - DMA_TO_DEVICE); 749 + buf_offset = 0; 750 + len = skb_frag_size(frag); 751 + while (len) { 752 + tbi = tq->buf_info + tq->tx_ring.next2fill; 753 + if (len < VMXNET3_MAX_TX_BUF_SIZE) { 754 + buf_size = len; 755 + dw2 |= len; 756 + } else { 757 + buf_size = VMXNET3_MAX_TX_BUF_SIZE; 758 + /* spec says that for TxDesc.len, 0 == 2^14 */ 759 + } 760 + tbi->map_type = VMXNET3_MAP_PAGE; 761 + tbi->dma_addr = skb_frag_dma_map(&adapter->pdev->dev, frag, 762 + buf_offset, buf_size, 763 + DMA_TO_DEVICE); 753 764 754 - tbi->len = skb_frag_size(frag); 765 + tbi->len = buf_size; 755 766 756 - gdesc = tq->tx_ring.base + tq->tx_ring.next2fill; 757 - BUG_ON(gdesc->txd.gen == tq->tx_ring.gen); 767 + gdesc = tq->tx_ring.base + tq->tx_ring.next2fill; 768 + BUG_ON(gdesc->txd.gen == tq->tx_ring.gen); 758 769 759 - gdesc->txd.addr = cpu_to_le64(tbi->dma_addr); 760 - gdesc->dword[2] = cpu_to_le32(dw2 | skb_frag_size(frag)); 761 - gdesc->dword[3] = 0; 770 + gdesc->txd.addr = cpu_to_le64(tbi->dma_addr); 771 + gdesc->dword[2] = cpu_to_le32(dw2); 772 + gdesc->dword[3] = 0; 762 773 763 - dev_dbg(&adapter->netdev->dev, 764 - "txd[%u]: 0x%llu %u %u\n", 765 - tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr), 766 - le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]); 767 - vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring); 768 - dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT; 774 + dev_dbg(&adapter->netdev->dev, 775 + "txd[%u]: 0x%llu %u %u\n", 776 + tq->tx_ring.next2fill, le64_to_cpu(gdesc->txd.addr), 777 + le32_to_cpu(gdesc->dword[2]), gdesc->dword[3]); 778 + vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring); 779 + dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT; 780 + 781 + len -= buf_size; 782 + buf_offset += buf_size; 783 + } 769 784 } 770 785 771 786 ctx->eop_txd = gdesc; ··· 901 886 } 902 887 } 903 888 889 + static int txd_estimate(const struct sk_buff *skb) 890 + { 891 + int count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1; 892 + int i; 893 + 894 + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 895 + const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; 896 + 897 + count += VMXNET3_TXD_NEEDED(skb_frag_size(frag)); 898 + } 899 + return count; 900 + } 904 901 905 902 /* 906 903 * Transmits a pkt thru a given tq ··· 941 914 union Vmxnet3_GenericDesc tempTxDesc; 942 915 #endif 943 916 944 - /* conservatively estimate # of descriptors to use */ 945 - count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 946 - skb_shinfo(skb)->nr_frags + 1; 917 + count = txd_estimate(skb); 947 918 948 919 ctx.ipv4 = (vlan_get_protocol(skb) == cpu_to_be16(ETH_P_IP)); 949 920
+1 -1
drivers/net/vxlan.c
··· 816 816 = container_of(p, struct vxlan_fdb, hlist); 817 817 unsigned long timeout; 818 818 819 - if (f->state == NUD_PERMANENT) 819 + if (f->state & NUD_PERMANENT) 820 820 continue; 821 821 822 822 timeout = f->used + vxlan->age_interval * HZ;
+8 -2
drivers/net/wireless/ath/ath9k/xmit.c
··· 312 312 } 313 313 314 314 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); 315 + bf->bf_next = NULL; 315 316 list_del(&bf->list); 316 317 317 318 spin_unlock_bh(&sc->tx.txbuflock); ··· 394 393 u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first; 395 394 u32 ba[WME_BA_BMP_SIZE >> 5]; 396 395 int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0; 397 - bool rc_update = true; 396 + bool rc_update = true, isba; 398 397 struct ieee80211_tx_rate rates[4]; 399 398 struct ath_frame_info *fi; 400 399 int nframes; ··· 438 437 tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; 439 438 tid = ATH_AN_2_TID(an, tidno); 440 439 seq_first = tid->seq_start; 440 + isba = ts->ts_flags & ATH9K_TX_BA; 441 441 442 442 /* 443 443 * The hardware occasionally sends a tx status for the wrong TID. 444 444 * In this case, the BA status cannot be considered valid and all 445 445 * subframes need to be retransmitted 446 + * 447 + * Only BlockAcks have a TID and therefore normal Acks cannot be 448 + * checked 446 449 */ 447 - if (tidno != ts->tid) 450 + if (isba && tidno != ts->tid) 448 451 txok = false; 449 452 450 453 isaggr = bf_isaggr(bf); ··· 1779 1774 list_add_tail(&bf->list, &bf_head); 1780 1775 bf->bf_state.bf_type = 0; 1781 1776 1777 + bf->bf_next = NULL; 1782 1778 bf->bf_lastbf = bf; 1783 1779 ath_tx_fill_desc(sc, bf, txq, fi->framelen); 1784 1780 ath_tx_txqaddbuf(sc, txq, &bf_head, false);
+1 -1
drivers/net/wireless/rt2x00/rt2800lib.c
··· 2449 2449 /* 2450 2450 * Check if temperature compensation is supported. 2451 2451 */ 2452 - if (tssi_bounds[4] == 0xff) 2452 + if (tssi_bounds[4] == 0xff || step == 0xff) 2453 2453 return 0; 2454 2454 2455 2455 /*
+3
drivers/scsi/qla2xxx/qla_mid.c
··· 149 149 int 150 150 qla24xx_disable_vp(scsi_qla_host_t *vha) 151 151 { 152 + unsigned long flags; 152 153 int ret; 153 154 154 155 ret = qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); ··· 157 156 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); 158 157 159 158 /* Remove port id from vp target map */ 159 + spin_lock_irqsave(&vha->hw->vport_slock, flags); 160 160 qlt_update_vp_map(vha, RESET_AL_PA); 161 + spin_unlock_irqrestore(&vha->hw->vport_slock, flags); 161 162 162 163 qla2x00_mark_vp_devices_dead(vha); 163 164 atomic_set(&vha->vp_state, VP_FAILED);
+11 -14
drivers/scsi/qla2xxx/qla_target.c
··· 557 557 int pmap_len; 558 558 fc_port_t *fcport; 559 559 int global_resets; 560 + unsigned long flags; 560 561 561 562 retry: 562 563 global_resets = atomic_read(&ha->tgt.qla_tgt->tgt_global_resets_count); ··· 626 625 sess->s_id.b.area, sess->loop_id, fcport->d_id.b.domain, 627 626 fcport->d_id.b.al_pa, fcport->d_id.b.area, fcport->loop_id); 628 627 629 - sess->s_id = fcport->d_id; 630 - sess->loop_id = fcport->loop_id; 631 - sess->conf_compl_supported = !!(fcport->flags & 632 - FCF_CONF_COMP_SUPPORTED); 628 + spin_lock_irqsave(&ha->hardware_lock, flags); 629 + ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, 630 + (fcport->flags & FCF_CONF_COMP_SUPPORTED)); 631 + spin_unlock_irqrestore(&ha->hardware_lock, flags); 633 632 634 633 res = true; 635 634 ··· 741 740 qlt_undelete_sess(sess); 742 741 743 742 kref_get(&sess->se_sess->sess_kref); 744 - sess->s_id = fcport->d_id; 745 - sess->loop_id = fcport->loop_id; 746 - sess->conf_compl_supported = !!(fcport->flags & 747 - FCF_CONF_COMP_SUPPORTED); 743 + ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, 744 + (fcport->flags & FCF_CONF_COMP_SUPPORTED)); 745 + 748 746 if (sess->local && !local) 749 747 sess->local = 0; 750 748 spin_unlock_irqrestore(&ha->hardware_lock, flags); ··· 796 796 */ 797 797 kref_get(&sess->se_sess->sess_kref); 798 798 799 - sess->conf_compl_supported = !!(fcport->flags & 800 - FCF_CONF_COMP_SUPPORTED); 799 + sess->conf_compl_supported = (fcport->flags & FCF_CONF_COMP_SUPPORTED); 801 800 BUILD_BUG_ON(sizeof(sess->port_name) != sizeof(fcport->port_name)); 802 801 memcpy(sess->port_name, fcport->port_name, sizeof(sess->port_name)); 803 802 ··· 868 869 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf007, 869 870 "Reappeared sess %p\n", sess); 870 871 } 871 - sess->s_id = fcport->d_id; 872 - sess->loop_id = fcport->loop_id; 873 - sess->conf_compl_supported = !!(fcport->flags & 874 - FCF_CONF_COMP_SUPPORTED); 872 + ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, 873 + (fcport->flags & FCF_CONF_COMP_SUPPORTED)); 875 874 } 876 875 877 876 if (sess && sess->local) {
+1
drivers/scsi/qla2xxx/qla_target.h
··· 648 648 649 649 int (*check_initiator_node_acl)(struct scsi_qla_host *, unsigned char *, 650 650 void *, uint8_t *, uint16_t); 651 + void (*update_sess)(struct qla_tgt_sess *, port_id_t, uint16_t, bool); 651 652 struct qla_tgt_sess *(*find_sess_by_loop_id)(struct scsi_qla_host *, 652 653 const uint16_t); 653 654 struct qla_tgt_sess *(*find_sess_by_s_id)(struct scsi_qla_host *,
+76 -1
drivers/scsi/qla2xxx/tcm_qla2xxx.c
··· 237 237 struct tcm_qla2xxx_tpg, se_tpg); 238 238 struct tcm_qla2xxx_lport *lport = tpg->lport; 239 239 240 - return &lport->lport_name[0]; 240 + return lport->lport_naa_name; 241 241 } 242 242 243 243 static char *tcm_qla2xxx_npiv_get_fabric_wwn(struct se_portal_group *se_tpg) ··· 1457 1457 return 0; 1458 1458 } 1459 1459 1460 + static void tcm_qla2xxx_update_sess(struct qla_tgt_sess *sess, port_id_t s_id, 1461 + uint16_t loop_id, bool conf_compl_supported) 1462 + { 1463 + struct qla_tgt *tgt = sess->tgt; 1464 + struct qla_hw_data *ha = tgt->ha; 1465 + struct tcm_qla2xxx_lport *lport = ha->tgt.target_lport_ptr; 1466 + struct se_node_acl *se_nacl = sess->se_sess->se_node_acl; 1467 + struct tcm_qla2xxx_nacl *nacl = container_of(se_nacl, 1468 + struct tcm_qla2xxx_nacl, se_node_acl); 1469 + u32 key; 1470 + 1471 + 1472 + if (sess->loop_id != loop_id || sess->s_id.b24 != s_id.b24) 1473 + pr_info("Updating session %p from port %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x loop_id %d -> %d s_id %x:%x:%x -> %x:%x:%x\n", 1474 + sess, 1475 + sess->port_name[0], sess->port_name[1], 1476 + sess->port_name[2], sess->port_name[3], 1477 + sess->port_name[4], sess->port_name[5], 1478 + sess->port_name[6], sess->port_name[7], 1479 + sess->loop_id, loop_id, 1480 + sess->s_id.b.domain, sess->s_id.b.area, sess->s_id.b.al_pa, 1481 + s_id.b.domain, s_id.b.area, s_id.b.al_pa); 1482 + 1483 + if (sess->loop_id != loop_id) { 1484 + /* 1485 + * Because we can shuffle loop IDs around and we 1486 + * update different sessions non-atomically, we might 1487 + * have overwritten this session's old loop ID 1488 + * already, and we might end up overwriting some other 1489 + * session that will be updated later. So we have to 1490 + * be extra careful and we can't warn about those things... 1491 + */ 1492 + if (lport->lport_loopid_map[sess->loop_id].se_nacl == se_nacl) 1493 + lport->lport_loopid_map[sess->loop_id].se_nacl = NULL; 1494 + 1495 + lport->lport_loopid_map[loop_id].se_nacl = se_nacl; 1496 + 1497 + sess->loop_id = loop_id; 1498 + } 1499 + 1500 + if (sess->s_id.b24 != s_id.b24) { 1501 + key = (((u32) sess->s_id.b.domain << 16) | 1502 + ((u32) sess->s_id.b.area << 8) | 1503 + ((u32) sess->s_id.b.al_pa)); 1504 + 1505 + if (btree_lookup32(&lport->lport_fcport_map, key)) 1506 + WARN(btree_remove32(&lport->lport_fcport_map, key) != se_nacl, 1507 + "Found wrong se_nacl when updating s_id %x:%x:%x\n", 1508 + sess->s_id.b.domain, sess->s_id.b.area, sess->s_id.b.al_pa); 1509 + else 1510 + WARN(1, "No lport_fcport_map entry for s_id %x:%x:%x\n", 1511 + sess->s_id.b.domain, sess->s_id.b.area, sess->s_id.b.al_pa); 1512 + 1513 + key = (((u32) s_id.b.domain << 16) | 1514 + ((u32) s_id.b.area << 8) | 1515 + ((u32) s_id.b.al_pa)); 1516 + 1517 + if (btree_lookup32(&lport->lport_fcport_map, key)) { 1518 + WARN(1, "Already have lport_fcport_map entry for s_id %x:%x:%x\n", 1519 + s_id.b.domain, s_id.b.area, s_id.b.al_pa); 1520 + btree_update32(&lport->lport_fcport_map, key, se_nacl); 1521 + } else { 1522 + btree_insert32(&lport->lport_fcport_map, key, se_nacl, GFP_ATOMIC); 1523 + } 1524 + 1525 + sess->s_id = s_id; 1526 + nacl->nport_id = key; 1527 + } 1528 + 1529 + sess->conf_compl_supported = conf_compl_supported; 1530 + } 1531 + 1460 1532 /* 1461 1533 * Calls into tcm_qla2xxx used by qla2xxx LLD I/O path. 1462 1534 */ ··· 1539 1467 .free_cmd = tcm_qla2xxx_free_cmd, 1540 1468 .free_mcmd = tcm_qla2xxx_free_mcmd, 1541 1469 .free_session = tcm_qla2xxx_free_session, 1470 + .update_sess = tcm_qla2xxx_update_sess, 1542 1471 .check_initiator_node_acl = tcm_qla2xxx_check_initiator_node_acl, 1543 1472 .find_sess_by_s_id = tcm_qla2xxx_find_sess_by_s_id, 1544 1473 .find_sess_by_loop_id = tcm_qla2xxx_find_sess_by_loop_id, ··· 1607 1534 lport->lport_wwpn = wwpn; 1608 1535 tcm_qla2xxx_format_wwn(&lport->lport_name[0], TCM_QLA2XXX_NAMELEN, 1609 1536 wwpn); 1537 + sprintf(lport->lport_naa_name, "naa.%016llx", (unsigned long long) wwpn); 1610 1538 1611 1539 ret = tcm_qla2xxx_init_lport(lport); 1612 1540 if (ret != 0) ··· 1675 1601 lport->lport_npiv_wwnn = npiv_wwnn; 1676 1602 tcm_qla2xxx_npiv_format_wwn(&lport->lport_npiv_name[0], 1677 1603 TCM_QLA2XXX_NAMELEN, npiv_wwpn, npiv_wwnn); 1604 + sprintf(lport->lport_naa_name, "naa.%016llx", (unsigned long long) npiv_wwpn); 1678 1605 1679 1606 /* FIXME: tcm_qla2xxx_npiv_make_lport */ 1680 1607 ret = -ENOSYS;
+2
drivers/scsi/qla2xxx/tcm_qla2xxx.h
··· 61 61 u64 lport_npiv_wwnn; 62 62 /* ASCII formatted WWPN for FC Target Lport */ 63 63 char lport_name[TCM_QLA2XXX_NAMELEN]; 64 + /* ASCII formatted naa WWPN for VPD page 83 etc */ 65 + char lport_naa_name[TCM_QLA2XXX_NAMELEN]; 64 66 /* ASCII formatted WWPN+WWNN for NPIV FC Target Lport */ 65 67 char lport_npiv_name[TCM_QLA2XXX_NPIV_NAMELEN]; 66 68 /* map for fc_port pointers in 24-bit FC Port ID space */
+3 -1
drivers/target/iscsi/iscsi_target.c
··· 3719 3719 */ 3720 3720 iscsit_thread_check_cpumask(conn, current, 1); 3721 3721 3722 - schedule_timeout_interruptible(MAX_SCHEDULE_TIMEOUT); 3722 + wait_event_interruptible(conn->queues_wq, 3723 + !iscsit_conn_all_queues_empty(conn) || 3724 + ts->status == ISCSI_THREAD_SET_RESET); 3723 3725 3724 3726 if ((ts->status == ISCSI_THREAD_SET_RESET) || 3725 3727 signal_pending(current))
+1
drivers/target/iscsi/iscsi_target_core.h
··· 486 486 }; 487 487 488 488 struct iscsi_conn { 489 + wait_queue_head_t queues_wq; 489 490 /* Authentication Successful for this connection */ 490 491 u8 auth_complete; 491 492 /* State connection is currently in */
+1
drivers/target/iscsi/iscsi_target_login.c
··· 41 41 42 42 static int iscsi_login_init_conn(struct iscsi_conn *conn) 43 43 { 44 + init_waitqueue_head(&conn->queues_wq); 44 45 INIT_LIST_HEAD(&conn->conn_list); 45 46 INIT_LIST_HEAD(&conn->conn_cmd_list); 46 47 INIT_LIST_HEAD(&conn->immed_queue_list);
+20 -2
drivers/target/iscsi/iscsi_target_util.c
··· 488 488 atomic_set(&conn->check_immediate_queue, 1); 489 489 spin_unlock_bh(&conn->immed_queue_lock); 490 490 491 - wake_up_process(conn->thread_set->tx_thread); 491 + wake_up(&conn->queues_wq); 492 492 } 493 493 494 494 struct iscsi_queue_req *iscsit_get_cmd_from_immediate_queue(struct iscsi_conn *conn) ··· 562 562 atomic_inc(&cmd->response_queue_count); 563 563 spin_unlock_bh(&conn->response_queue_lock); 564 564 565 - wake_up_process(conn->thread_set->tx_thread); 565 + wake_up(&conn->queues_wq); 566 566 } 567 567 568 568 struct iscsi_queue_req *iscsit_get_cmd_from_response_queue(struct iscsi_conn *conn) ··· 614 614 cmd->init_task_tag, 615 615 atomic_read(&cmd->response_queue_count)); 616 616 } 617 + } 618 + 619 + bool iscsit_conn_all_queues_empty(struct iscsi_conn *conn) 620 + { 621 + bool empty; 622 + 623 + spin_lock_bh(&conn->immed_queue_lock); 624 + empty = list_empty(&conn->immed_queue_list); 625 + spin_unlock_bh(&conn->immed_queue_lock); 626 + 627 + if (!empty) 628 + return empty; 629 + 630 + spin_lock_bh(&conn->response_queue_lock); 631 + empty = list_empty(&conn->response_queue_list); 632 + spin_unlock_bh(&conn->response_queue_lock); 633 + 634 + return empty; 617 635 } 618 636 619 637 void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *conn)
+1
drivers/target/iscsi/iscsi_target_util.h
··· 25 25 extern void iscsit_add_cmd_to_response_queue(struct iscsi_cmd *, struct iscsi_conn *, u8); 26 26 extern struct iscsi_queue_req *iscsit_get_cmd_from_response_queue(struct iscsi_conn *); 27 27 extern void iscsit_remove_cmd_from_tx_queues(struct iscsi_cmd *, struct iscsi_conn *); 28 + extern bool iscsit_conn_all_queues_empty(struct iscsi_conn *); 28 29 extern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *); 29 30 extern void iscsit_release_cmd(struct iscsi_cmd *); 30 31 extern void iscsit_free_cmd(struct iscsi_cmd *);
+2 -1
drivers/target/target_core_configfs.c
··· 3206 3206 if (ret < 0) 3207 3207 goto out; 3208 3208 3209 - if (core_dev_setup_virtual_lun0() < 0) 3209 + ret = core_dev_setup_virtual_lun0(); 3210 + if (ret < 0) 3210 3211 goto out; 3211 3212 3212 3213 return 0;
+9 -9
drivers/target/target_core_device.c
··· 850 850 851 851 static u32 se_dev_align_max_sectors(u32 max_sectors, u32 block_size) 852 852 { 853 - u32 tmp, aligned_max_sectors; 853 + u32 aligned_max_sectors; 854 + u32 alignment; 854 855 /* 855 856 * Limit max_sectors to a PAGE_SIZE aligned value for modern 856 857 * transport_allocate_data_tasks() operation. 857 858 */ 858 - tmp = rounddown((max_sectors * block_size), PAGE_SIZE); 859 - aligned_max_sectors = (tmp / block_size); 860 - if (max_sectors != aligned_max_sectors) { 861 - printk(KERN_INFO "Rounding down aligned max_sectors from %u" 862 - " to %u\n", max_sectors, aligned_max_sectors); 863 - return aligned_max_sectors; 864 - } 859 + alignment = max(1ul, PAGE_SIZE / block_size); 860 + aligned_max_sectors = rounddown(max_sectors, alignment); 865 861 866 - return max_sectors; 862 + if (max_sectors != aligned_max_sectors) 863 + pr_info("Rounding down aligned max_sectors from %u to %u\n", 864 + max_sectors, aligned_max_sectors); 865 + 866 + return aligned_max_sectors; 867 867 } 868 868 869 869 void se_dev_set_default_attribs(
+18
drivers/target/target_core_sbc.c
··· 135 135 return 0; 136 136 } 137 137 138 + static int sbc_emulate_noop(struct se_cmd *cmd) 139 + { 140 + target_complete_cmd(cmd, GOOD); 141 + return 0; 142 + } 143 + 138 144 static inline u32 sbc_get_size(struct se_cmd *cmd, u32 sectors) 139 145 { 140 146 return cmd->se_dev->se_sub_dev->se_dev_attrib.block_size * sectors; ··· 536 530 case VERIFY: 537 531 size = 0; 538 532 cmd->execute_cmd = sbc_emulate_verify; 533 + break; 534 + case REZERO_UNIT: 535 + case SEEK_6: 536 + case SEEK_10: 537 + /* 538 + * There are still clients out there which use these old SCSI-2 539 + * commands. This mainly happens when running VMs with legacy 540 + * guest systems, connected via SCSI command pass-through to 541 + * iSCSI targets. Make them happy and return status GOOD. 542 + */ 543 + size = 0; 544 + cmd->execute_cmd = sbc_emulate_noop; 539 545 break; 540 546 default: 541 547 ret = spc_parse_cdb(cmd, &size);
+2
drivers/target/target_core_spc.c
··· 605 605 unsigned char buf[SE_INQUIRY_BUF]; 606 606 int p, ret; 607 607 608 + memset(buf, 0, SE_INQUIRY_BUF); 609 + 608 610 if (dev == tpg->tpg_virt_lun0.lun_se_dev) 609 611 buf[0] = 0x3f; /* Not connected */ 610 612 else
+3 -3
drivers/target/target_core_tmr.c
··· 140 140 printk("ABORT_TASK: Found referenced %s task_tag: %u\n", 141 141 se_cmd->se_tfo->get_fabric_name(), ref_tag); 142 142 143 - spin_lock_irq(&se_cmd->t_state_lock); 143 + spin_lock(&se_cmd->t_state_lock); 144 144 if (se_cmd->transport_state & CMD_T_COMPLETE) { 145 145 printk("ABORT_TASK: ref_tag: %u already complete, skipping\n", ref_tag); 146 - spin_unlock_irq(&se_cmd->t_state_lock); 146 + spin_unlock(&se_cmd->t_state_lock); 147 147 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); 148 148 goto out; 149 149 } 150 150 se_cmd->transport_state |= CMD_T_ABORTED; 151 - spin_unlock_irq(&se_cmd->t_state_lock); 151 + spin_unlock(&se_cmd->t_state_lock); 152 152 153 153 list_del_init(&se_cmd->se_cmd_list); 154 154 kref_get(&se_cmd->cmd_kref);
-1
drivers/target/target_core_transport.c
··· 1616 1616 1617 1617 se_cmd->se_tmr_req->response = TMR_LUN_DOES_NOT_EXIST; 1618 1618 se_cmd->se_tfo->queue_tm_rsp(se_cmd); 1619 - transport_generic_free_cmd(se_cmd, 0); 1620 1619 } 1621 1620 1622 1621 /**
+1 -1
drivers/thermal/exynos_thermal.c
··· 815 815 }, 816 816 { }, 817 817 }; 818 - MODULE_DEVICE_TABLE(platform, exynos4_tmu_driver_ids); 818 + MODULE_DEVICE_TABLE(platform, exynos_tmu_driver_ids); 819 819 820 820 static inline struct exynos_tmu_platform_data *exynos_get_driver_data( 821 821 struct platform_device *pdev)
+1 -1
drivers/thermal/rcar_thermal.c
··· 210 210 goto error_free_priv; 211 211 } 212 212 213 - zone = thermal_zone_device_register("rcar_thermal", 0, priv, 213 + zone = thermal_zone_device_register("rcar_thermal", 0, 0, priv, 214 214 &rcar_thermal_zone_ops, 0, 0); 215 215 if (IS_ERR(zone)) { 216 216 dev_err(&pdev->dev, "thermal zone device is NULL\n");
+4 -1
drivers/video/xen-fbfront.c
··· 641 641 case XenbusStateReconfiguring: 642 642 case XenbusStateReconfigured: 643 643 case XenbusStateUnknown: 644 - case XenbusStateClosed: 645 644 break; 646 645 647 646 case XenbusStateInitWait: ··· 669 670 info->feature_resize = val; 670 671 break; 671 672 673 + case XenbusStateClosed: 674 + if (dev->state == XenbusStateClosed) 675 + break; 676 + /* Missed the backend's CLOSING state -- fallthrough */ 672 677 case XenbusStateClosing: 673 678 xenbus_frontend_closed(dev); 674 679 break;
+19 -17
drivers/xen/gntdev.c
··· 105 105 #endif 106 106 } 107 107 108 + static void gntdev_free_map(struct grant_map *map) 109 + { 110 + if (map == NULL) 111 + return; 112 + 113 + if (map->pages) 114 + free_xenballooned_pages(map->count, map->pages); 115 + kfree(map->pages); 116 + kfree(map->grants); 117 + kfree(map->map_ops); 118 + kfree(map->unmap_ops); 119 + kfree(map->kmap_ops); 120 + kfree(map); 121 + } 122 + 108 123 static struct grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count) 109 124 { 110 125 struct grant_map *add; ··· 157 142 return add; 158 143 159 144 err: 160 - kfree(add->pages); 161 - kfree(add->grants); 162 - kfree(add->map_ops); 163 - kfree(add->unmap_ops); 164 - kfree(add->kmap_ops); 165 - kfree(add); 145 + gntdev_free_map(add); 166 146 return NULL; 167 147 } 168 148 ··· 208 198 evtchn_put(map->notify.event); 209 199 } 210 200 211 - if (map->pages) { 212 - if (!use_ptemod) 213 - unmap_grant_pages(map, 0, map->count); 214 - 215 - free_xenballooned_pages(map->count, map->pages); 216 - } 217 - kfree(map->pages); 218 - kfree(map->grants); 219 - kfree(map->map_ops); 220 - kfree(map->unmap_ops); 221 - kfree(map); 201 + if (map->pages && !use_ptemod) 202 + unmap_grant_pages(map, 0, map->count); 203 + gntdev_free_map(map); 222 204 } 223 205 224 206 /* ------------------------------------------------------------------ */
+1 -1
drivers/xen/xenbus/xenbus_dev_frontend.c
··· 458 458 goto out; 459 459 460 460 /* Can't write a xenbus message larger we can buffer */ 461 - if ((len + u->len) > sizeof(u->u.buffer)) { 461 + if (len > sizeof(u->u.buffer) - u->len) { 462 462 /* On error, dump existing buffer */ 463 463 u->len = 0; 464 464 rc = -EINVAL;
+4 -2
fs/bio.c
··· 75 75 unsigned int sz = sizeof(struct bio) + extra_size; 76 76 struct kmem_cache *slab = NULL; 77 77 struct bio_slab *bslab, *new_bio_slabs; 78 + unsigned int new_bio_slab_max; 78 79 unsigned int i, entry = -1; 79 80 80 81 mutex_lock(&bio_slab_lock); ··· 98 97 goto out_unlock; 99 98 100 99 if (bio_slab_nr == bio_slab_max && entry == -1) { 101 - bio_slab_max <<= 1; 100 + new_bio_slab_max = bio_slab_max << 1; 102 101 new_bio_slabs = krealloc(bio_slabs, 103 - bio_slab_max * sizeof(struct bio_slab), 102 + new_bio_slab_max * sizeof(struct bio_slab), 104 103 GFP_KERNEL); 105 104 if (!new_bio_slabs) 106 105 goto out_unlock; 106 + bio_slab_max = new_bio_slab_max; 107 107 bio_slabs = new_bio_slabs; 108 108 } 109 109 if (entry == -1)
+2
fs/ceph/export.c
··· 90 90 *max_len = handle_length; 91 91 type = 255; 92 92 } 93 + if (dentry) 94 + dput(dentry); 93 95 return type; 94 96 } 95 97
+9 -10
fs/ext4/ialloc.c
··· 725 725 "inode=%lu", ino + 1); 726 726 continue; 727 727 } 728 + BUFFER_TRACE(inode_bitmap_bh, "get_write_access"); 729 + err = ext4_journal_get_write_access(handle, inode_bitmap_bh); 730 + if (err) 731 + goto fail; 728 732 ext4_lock_group(sb, group); 729 733 ret2 = ext4_test_and_set_bit(ino, inode_bitmap_bh->b_data); 730 734 ext4_unlock_group(sb, group); ··· 742 738 goto out; 743 739 744 740 got: 741 + BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); 742 + err = ext4_handle_dirty_metadata(handle, NULL, inode_bitmap_bh); 743 + if (err) 744 + goto fail; 745 + 745 746 /* We may have to initialize the block bitmap if it isn't already */ 746 747 if (ext4_has_group_desc_csum(sb) && 747 748 gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) { ··· 779 770 if (err) 780 771 goto fail; 781 772 } 782 - 783 - BUFFER_TRACE(inode_bitmap_bh, "get_write_access"); 784 - err = ext4_journal_get_write_access(handle, inode_bitmap_bh); 785 - if (err) 786 - goto fail; 787 773 788 774 BUFFER_TRACE(group_desc_bh, "get_write_access"); 789 775 err = ext4_journal_get_write_access(handle, group_desc_bh); ··· 826 822 ext4_group_desc_csum_set(sb, group, gdp); 827 823 } 828 824 ext4_unlock_group(sb, group); 829 - 830 - BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); 831 - err = ext4_handle_dirty_metadata(handle, NULL, inode_bitmap_bh); 832 - if (err) 833 - goto fail; 834 825 835 826 BUFFER_TRACE(group_desc_bh, "call ext4_handle_dirty_metadata"); 836 827 err = ext4_handle_dirty_metadata(handle, NULL, group_desc_bh);
+2 -2
fs/file.c
··· 900 900 return __close_fd(files, fd); 901 901 902 902 if (fd >= rlimit(RLIMIT_NOFILE)) 903 - return -EMFILE; 903 + return -EBADF; 904 904 905 905 spin_lock(&files->file_lock); 906 906 err = expand_files(files, fd); ··· 926 926 return -EINVAL; 927 927 928 928 if (newfd >= rlimit(RLIMIT_NOFILE)) 929 - return -EMFILE; 929 + return -EBADF; 930 930 931 931 spin_lock(&files->file_lock); 932 932 err = expand_files(files, newfd);
+3 -2
fs/nfs/dns_resolve.c
··· 217 217 { 218 218 char buf1[NFS_DNS_HOSTNAME_MAXLEN+1]; 219 219 struct nfs_dns_ent key, *item; 220 - unsigned long ttl; 220 + unsigned int ttl; 221 221 ssize_t len; 222 222 int ret = -EINVAL; 223 223 ··· 240 240 key.namelen = len; 241 241 memset(&key.h, 0, sizeof(key.h)); 242 242 243 - ttl = get_expiry(&buf); 243 + if (get_uint(&buf, &ttl) < 0) 244 + goto out; 244 245 if (ttl == 0) 245 246 goto out; 246 247 key.h.expiry_time = ttl + seconds_since_boot();
+4 -1
fs/nfs/inode.c
··· 685 685 if (ctx->cred != NULL) 686 686 put_rpccred(ctx->cred); 687 687 dput(ctx->dentry); 688 - nfs_sb_deactive(sb); 688 + if (is_sync) 689 + nfs_sb_deactive(sb); 690 + else 691 + nfs_sb_deactive_async(sb); 689 692 kfree(ctx->mdsthreshold); 690 693 kfree(ctx); 691 694 }
+4 -2
fs/nfs/internal.h
··· 351 351 extern void __exit unregister_nfs_fs(void); 352 352 extern void nfs_sb_active(struct super_block *sb); 353 353 extern void nfs_sb_deactive(struct super_block *sb); 354 + extern void nfs_sb_deactive_async(struct super_block *sb); 354 355 355 356 /* namespace.c */ 357 + #define NFS_PATH_CANONICAL 1 356 358 extern char *nfs_path(char **p, struct dentry *dentry, 357 - char *buffer, ssize_t buflen); 359 + char *buffer, ssize_t buflen, unsigned flags); 358 360 extern struct vfsmount *nfs_d_automount(struct path *path); 359 361 struct vfsmount *nfs_submount(struct nfs_server *, struct dentry *, 360 362 struct nfs_fh *, struct nfs_fattr *); ··· 500 498 char *buffer, ssize_t buflen) 501 499 { 502 500 char *dummy; 503 - return nfs_path(&dummy, dentry, buffer, buflen); 501 + return nfs_path(&dummy, dentry, buffer, buflen, NFS_PATH_CANONICAL); 504 502 } 505 503 506 504 /*
+1 -1
fs/nfs/mount_clnt.c
··· 181 181 else 182 182 msg.rpc_proc = &mnt_clnt->cl_procinfo[MOUNTPROC_MNT]; 183 183 184 - status = rpc_call_sync(mnt_clnt, &msg, 0); 184 + status = rpc_call_sync(mnt_clnt, &msg, RPC_TASK_SOFT|RPC_TASK_TIMEOUT); 185 185 rpc_shutdown_client(mnt_clnt); 186 186 187 187 if (status < 0)
+14 -5
fs/nfs/namespace.c
··· 33 33 * @dentry - pointer to dentry 34 34 * @buffer - result buffer 35 35 * @buflen - length of buffer 36 + * @flags - options (see below) 36 37 * 37 38 * Helper function for constructing the server pathname 38 39 * by arbitrary hashed dentry. ··· 41 40 * This is mainly for use in figuring out the path on the 42 41 * server side when automounting on top of an existing partition 43 42 * and in generating /proc/mounts and friends. 43 + * 44 + * Supported flags: 45 + * NFS_PATH_CANONICAL: ensure there is exactly one slash after 46 + * the original device (export) name 47 + * (if unset, the original name is returned verbatim) 44 48 */ 45 - char *nfs_path(char **p, struct dentry *dentry, char *buffer, ssize_t buflen) 49 + char *nfs_path(char **p, struct dentry *dentry, char *buffer, ssize_t buflen, 50 + unsigned flags) 46 51 { 47 52 char *end; 48 53 int namelen; ··· 81 74 rcu_read_unlock(); 82 75 goto rename_retry; 83 76 } 84 - if (*end != '/') { 77 + if ((flags & NFS_PATH_CANONICAL) && *end != '/') { 85 78 if (--buflen < 0) { 86 79 spin_unlock(&dentry->d_lock); 87 80 rcu_read_unlock(); ··· 98 91 return end; 99 92 } 100 93 namelen = strlen(base); 101 - /* Strip off excess slashes in base string */ 102 - while (namelen > 0 && base[namelen - 1] == '/') 103 - namelen--; 94 + if (flags & NFS_PATH_CANONICAL) { 95 + /* Strip off excess slashes in base string */ 96 + while (namelen > 0 && base[namelen - 1] == '/') 97 + namelen--; 98 + } 104 99 buflen -= namelen; 105 100 if (buflen < 0) { 106 101 spin_unlock(&dentry->d_lock);
+2 -1
fs/nfs/nfs4namespace.c
··· 81 81 static char *nfs4_path(struct dentry *dentry, char *buffer, ssize_t buflen) 82 82 { 83 83 char *limit; 84 - char *path = nfs_path(&limit, dentry, buffer, buflen); 84 + char *path = nfs_path(&limit, dentry, buffer, buflen, 85 + NFS_PATH_CANONICAL); 85 86 if (!IS_ERR(path)) { 86 87 char *path_component = nfs_path_component(path, limit); 87 88 if (path_component)
+28 -18
fs/nfs/nfs4proc.c
··· 339 339 dprintk("%s ERROR: %d Reset session\n", __func__, 340 340 errorcode); 341 341 nfs4_schedule_session_recovery(clp->cl_session, errorcode); 342 - exception->retry = 1; 343 - break; 342 + goto wait_on_recovery; 344 343 #endif /* defined(CONFIG_NFS_V4_1) */ 345 344 case -NFS4ERR_FILE_OPEN: 346 345 if (exception->timeout > HZ) { ··· 1571 1572 data->timestamp = jiffies; 1572 1573 if (nfs4_setup_sequence(data->o_arg.server, 1573 1574 &data->o_arg.seq_args, 1574 - &data->o_res.seq_res, task)) 1575 - return; 1576 - rpc_call_start(task); 1575 + &data->o_res.seq_res, 1576 + task) != 0) 1577 + nfs_release_seqid(data->o_arg.seqid); 1578 + else 1579 + rpc_call_start(task); 1577 1580 return; 1578 1581 unlock_no_action: 1579 1582 rcu_read_unlock(); ··· 1749 1748 1750 1749 /* even though OPEN succeeded, access is denied. Close the file */ 1751 1750 nfs4_close_state(state, fmode); 1752 - return -NFS4ERR_ACCESS; 1751 + return -EACCES; 1753 1752 } 1754 1753 1755 1754 /* ··· 2197 2196 nfs4_put_open_state(calldata->state); 2198 2197 nfs_free_seqid(calldata->arg.seqid); 2199 2198 nfs4_put_state_owner(sp); 2200 - nfs_sb_deactive(sb); 2199 + nfs_sb_deactive_async(sb); 2201 2200 kfree(calldata); 2202 2201 } 2203 2202 ··· 2297 2296 if (nfs4_setup_sequence(NFS_SERVER(inode), 2298 2297 &calldata->arg.seq_args, 2299 2298 &calldata->res.seq_res, 2300 - task)) 2301 - goto out; 2302 - rpc_call_start(task); 2299 + task) != 0) 2300 + nfs_release_seqid(calldata->arg.seqid); 2301 + else 2302 + rpc_call_start(task); 2303 2303 out: 2304 2304 dprintk("%s: done!\n", __func__); 2305 2305 } ··· 4531 4529 if (nfs4_async_handle_error(task, calldata->server, NULL) == -EAGAIN) 4532 4530 rpc_restart_call_prepare(task); 4533 4531 } 4532 + nfs_release_seqid(calldata->arg.seqid); 4534 4533 } 4535 4534 4536 4535 static void nfs4_locku_prepare(struct rpc_task *task, void *data) ··· 4548 4545 calldata->timestamp = jiffies; 4549 4546 if (nfs4_setup_sequence(calldata->server, 4550 4547 &calldata->arg.seq_args, 4551 - &calldata->res.seq_res, task)) 4552 - return; 4553 - rpc_call_start(task); 4548 + &calldata->res.seq_res, 4549 + task) != 0) 4550 + nfs_release_seqid(calldata->arg.seqid); 4551 + else 4552 + rpc_call_start(task); 4554 4553 } 4555 4554 4556 4555 static const struct rpc_call_ops nfs4_locku_ops = { ··· 4697 4692 /* Do we need to do an open_to_lock_owner? */ 4698 4693 if (!(data->arg.lock_seqid->sequence->flags & NFS_SEQID_CONFIRMED)) { 4699 4694 if (nfs_wait_on_sequence(data->arg.open_seqid, task) != 0) 4700 - return; 4695 + goto out_release_lock_seqid; 4701 4696 data->arg.open_stateid = &state->stateid; 4702 4697 data->arg.new_lock_owner = 1; 4703 4698 data->res.open_seqid = data->arg.open_seqid; ··· 4706 4701 data->timestamp = jiffies; 4707 4702 if (nfs4_setup_sequence(data->server, 4708 4703 &data->arg.seq_args, 4709 - &data->res.seq_res, task)) 4704 + &data->res.seq_res, 4705 + task) == 0) { 4706 + rpc_call_start(task); 4710 4707 return; 4711 - rpc_call_start(task); 4712 - dprintk("%s: done!, ret = %d\n", __func__, data->rpc_status); 4708 + } 4709 + nfs_release_seqid(data->arg.open_seqid); 4710 + out_release_lock_seqid: 4711 + nfs_release_seqid(data->arg.lock_seqid); 4712 + dprintk("%s: done!, ret = %d\n", __func__, task->tk_status); 4713 4713 } 4714 4714 4715 4715 static void nfs4_recover_lock_prepare(struct rpc_task *task, void *calldata) ··· 5677 5667 tbl->slots = new; 5678 5668 tbl->max_slots = max_slots; 5679 5669 } 5680 - tbl->highest_used_slotid = -1; /* no slot is currently used */ 5670 + tbl->highest_used_slotid = NFS4_NO_SLOT; 5681 5671 for (i = 0; i < tbl->max_slots; i++) 5682 5672 tbl->slots[i].seq_nr = ivalue; 5683 5673 spin_unlock(&tbl->slot_tbl_lock);
+2 -2
fs/nfs/pnfs.c
··· 925 925 if (likely(nfsi->layout == NULL)) { /* Won the race? */ 926 926 nfsi->layout = new; 927 927 return new; 928 - } 929 - pnfs_free_layout_hdr(new); 928 + } else if (new != NULL) 929 + pnfs_free_layout_hdr(new); 930 930 out_existing: 931 931 pnfs_get_layout_hdr(nfsi->layout); 932 932 return nfsi->layout;
+50 -1
fs/nfs/super.c
··· 54 54 #include <linux/parser.h> 55 55 #include <linux/nsproxy.h> 56 56 #include <linux/rcupdate.h> 57 + #include <linux/kthread.h> 57 58 58 59 #include <asm/uaccess.h> 59 60 ··· 416 415 } 417 416 EXPORT_SYMBOL_GPL(nfs_sb_deactive); 418 417 418 + static int nfs_deactivate_super_async_work(void *ptr) 419 + { 420 + struct super_block *sb = ptr; 421 + 422 + deactivate_super(sb); 423 + module_put_and_exit(0); 424 + return 0; 425 + } 426 + 427 + /* 428 + * same effect as deactivate_super, but will do final unmount in kthread 429 + * context 430 + */ 431 + static void nfs_deactivate_super_async(struct super_block *sb) 432 + { 433 + struct task_struct *task; 434 + char buf[INET6_ADDRSTRLEN + 1]; 435 + struct nfs_server *server = NFS_SB(sb); 436 + struct nfs_client *clp = server->nfs_client; 437 + 438 + if (!atomic_add_unless(&sb->s_active, -1, 1)) { 439 + rcu_read_lock(); 440 + snprintf(buf, sizeof(buf), 441 + rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR)); 442 + rcu_read_unlock(); 443 + 444 + __module_get(THIS_MODULE); 445 + task = kthread_run(nfs_deactivate_super_async_work, sb, 446 + "%s-deactivate-super", buf); 447 + if (IS_ERR(task)) { 448 + pr_err("%s: kthread_run: %ld\n", 449 + __func__, PTR_ERR(task)); 450 + /* make synchronous call and hope for the best */ 451 + deactivate_super(sb); 452 + module_put(THIS_MODULE); 453 + } 454 + } 455 + } 456 + 457 + void nfs_sb_deactive_async(struct super_block *sb) 458 + { 459 + struct nfs_server *server = NFS_SB(sb); 460 + 461 + if (atomic_dec_and_test(&server->active)) 462 + nfs_deactivate_super_async(sb); 463 + } 464 + EXPORT_SYMBOL_GPL(nfs_sb_deactive_async); 465 + 419 466 /* 420 467 * Deliver file system statistics to userspace 421 468 */ ··· 820 771 int err = 0; 821 772 if (!page) 822 773 return -ENOMEM; 823 - devname = nfs_path(&dummy, root, page, PAGE_SIZE); 774 + devname = nfs_path(&dummy, root, page, PAGE_SIZE, 0); 824 775 if (IS_ERR(devname)) 825 776 err = PTR_ERR(devname); 826 777 else
+1 -1
fs/nfs/unlink.c
··· 95 95 96 96 nfs_dec_sillycount(data->dir); 97 97 nfs_free_unlinkdata(data); 98 - nfs_sb_deactive(sb); 98 + nfs_sb_deactive_async(sb); 99 99 } 100 100 101 101 static void nfs_unlink_prepare(struct rpc_task *task, void *calldata)
+192
include/linux/hashtable.h
··· 1 + /* 2 + * Statically sized hash table implementation 3 + * (C) 2012 Sasha Levin <levinsasha928@gmail.com> 4 + */ 5 + 6 + #ifndef _LINUX_HASHTABLE_H 7 + #define _LINUX_HASHTABLE_H 8 + 9 + #include <linux/list.h> 10 + #include <linux/types.h> 11 + #include <linux/kernel.h> 12 + #include <linux/hash.h> 13 + #include <linux/rculist.h> 14 + 15 + #define DEFINE_HASHTABLE(name, bits) \ 16 + struct hlist_head name[1 << (bits)] = \ 17 + { [0 ... ((1 << (bits)) - 1)] = HLIST_HEAD_INIT } 18 + 19 + #define DECLARE_HASHTABLE(name, bits) \ 20 + struct hlist_head name[1 << (bits)] 21 + 22 + #define HASH_SIZE(name) (ARRAY_SIZE(name)) 23 + #define HASH_BITS(name) ilog2(HASH_SIZE(name)) 24 + 25 + /* Use hash_32 when possible to allow for fast 32bit hashing in 64bit kernels. */ 26 + #define hash_min(val, bits) \ 27 + (sizeof(val) <= 4 ? hash_32(val, bits) : hash_long(val, bits)) 28 + 29 + static inline void __hash_init(struct hlist_head *ht, unsigned int sz) 30 + { 31 + unsigned int i; 32 + 33 + for (i = 0; i < sz; i++) 34 + INIT_HLIST_HEAD(&ht[i]); 35 + } 36 + 37 + /** 38 + * hash_init - initialize a hash table 39 + * @hashtable: hashtable to be initialized 40 + * 41 + * Calculates the size of the hashtable from the given parameter, otherwise 42 + * same as hash_init_size. 43 + * 44 + * This has to be a macro since HASH_BITS() will not work on pointers since 45 + * it calculates the size during preprocessing. 46 + */ 47 + #define hash_init(hashtable) __hash_init(hashtable, HASH_SIZE(hashtable)) 48 + 49 + /** 50 + * hash_add - add an object to a hashtable 51 + * @hashtable: hashtable to add to 52 + * @node: the &struct hlist_node of the object to be added 53 + * @key: the key of the object to be added 54 + */ 55 + #define hash_add(hashtable, node, key) \ 56 + hlist_add_head(node, &hashtable[hash_min(key, HASH_BITS(hashtable))]) 57 + 58 + /** 59 + * hash_add_rcu - add an object to a rcu enabled hashtable 60 + * @hashtable: hashtable to add to 61 + * @node: the &struct hlist_node of the object to be added 62 + * @key: the key of the object to be added 63 + */ 64 + #define hash_add_rcu(hashtable, node, key) \ 65 + hlist_add_head_rcu(node, &hashtable[hash_min(key, HASH_BITS(hashtable))]) 66 + 67 + /** 68 + * hash_hashed - check whether an object is in any hashtable 69 + * @node: the &struct hlist_node of the object to be checked 70 + */ 71 + static inline bool hash_hashed(struct hlist_node *node) 72 + { 73 + return !hlist_unhashed(node); 74 + } 75 + 76 + static inline bool __hash_empty(struct hlist_head *ht, unsigned int sz) 77 + { 78 + unsigned int i; 79 + 80 + for (i = 0; i < sz; i++) 81 + if (!hlist_empty(&ht[i])) 82 + return false; 83 + 84 + return true; 85 + } 86 + 87 + /** 88 + * hash_empty - check whether a hashtable is empty 89 + * @hashtable: hashtable to check 90 + * 91 + * This has to be a macro since HASH_BITS() will not work on pointers since 92 + * it calculates the size during preprocessing. 93 + */ 94 + #define hash_empty(hashtable) __hash_empty(hashtable, HASH_SIZE(hashtable)) 95 + 96 + /** 97 + * hash_del - remove an object from a hashtable 98 + * @node: &struct hlist_node of the object to remove 99 + */ 100 + static inline void hash_del(struct hlist_node *node) 101 + { 102 + hlist_del_init(node); 103 + } 104 + 105 + /** 106 + * hash_del_rcu - remove an object from a rcu enabled hashtable 107 + * @node: &struct hlist_node of the object to remove 108 + */ 109 + static inline void hash_del_rcu(struct hlist_node *node) 110 + { 111 + hlist_del_init_rcu(node); 112 + } 113 + 114 + /** 115 + * hash_for_each - iterate over a hashtable 116 + * @name: hashtable to iterate 117 + * @bkt: integer to use as bucket loop cursor 118 + * @node: the &struct list_head to use as a loop cursor for each entry 119 + * @obj: the type * to use as a loop cursor for each entry 120 + * @member: the name of the hlist_node within the struct 121 + */ 122 + #define hash_for_each(name, bkt, node, obj, member) \ 123 + for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ 124 + hlist_for_each_entry(obj, node, &name[bkt], member) 125 + 126 + /** 127 + * hash_for_each_rcu - iterate over a rcu enabled hashtable 128 + * @name: hashtable to iterate 129 + * @bkt: integer to use as bucket loop cursor 130 + * @node: the &struct list_head to use as a loop cursor for each entry 131 + * @obj: the type * to use as a loop cursor for each entry 132 + * @member: the name of the hlist_node within the struct 133 + */ 134 + #define hash_for_each_rcu(name, bkt, node, obj, member) \ 135 + for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ 136 + hlist_for_each_entry_rcu(obj, node, &name[bkt], member) 137 + 138 + /** 139 + * hash_for_each_safe - iterate over a hashtable safe against removal of 140 + * hash entry 141 + * @name: hashtable to iterate 142 + * @bkt: integer to use as bucket loop cursor 143 + * @node: the &struct list_head to use as a loop cursor for each entry 144 + * @tmp: a &struct used for temporary storage 145 + * @obj: the type * to use as a loop cursor for each entry 146 + * @member: the name of the hlist_node within the struct 147 + */ 148 + #define hash_for_each_safe(name, bkt, node, tmp, obj, member) \ 149 + for ((bkt) = 0, node = NULL; node == NULL && (bkt) < HASH_SIZE(name); (bkt)++)\ 150 + hlist_for_each_entry_safe(obj, node, tmp, &name[bkt], member) 151 + 152 + /** 153 + * hash_for_each_possible - iterate over all possible objects hashing to the 154 + * same bucket 155 + * @name: hashtable to iterate 156 + * @obj: the type * to use as a loop cursor for each entry 157 + * @node: the &struct list_head to use as a loop cursor for each entry 158 + * @member: the name of the hlist_node within the struct 159 + * @key: the key of the objects to iterate over 160 + */ 161 + #define hash_for_each_possible(name, obj, node, member, key) \ 162 + hlist_for_each_entry(obj, node, &name[hash_min(key, HASH_BITS(name))], member) 163 + 164 + /** 165 + * hash_for_each_possible_rcu - iterate over all possible objects hashing to the 166 + * same bucket in an rcu enabled hashtable 167 + * in a rcu enabled hashtable 168 + * @name: hashtable to iterate 169 + * @obj: the type * to use as a loop cursor for each entry 170 + * @node: the &struct list_head to use as a loop cursor for each entry 171 + * @member: the name of the hlist_node within the struct 172 + * @key: the key of the objects to iterate over 173 + */ 174 + #define hash_for_each_possible_rcu(name, obj, node, member, key) \ 175 + hlist_for_each_entry_rcu(obj, node, &name[hash_min(key, HASH_BITS(name))], member) 176 + 177 + /** 178 + * hash_for_each_possible_safe - iterate over all possible objects hashing to the 179 + * same bucket safe against removals 180 + * @name: hashtable to iterate 181 + * @obj: the type * to use as a loop cursor for each entry 182 + * @node: the &struct list_head to use as a loop cursor for each entry 183 + * @tmp: a &struct used for temporary storage 184 + * @member: the name of the hlist_node within the struct 185 + * @key: the key of the objects to iterate over 186 + */ 187 + #define hash_for_each_possible_safe(name, obj, node, tmp, member, key) \ 188 + hlist_for_each_entry_safe(obj, node, tmp, \ 189 + &name[hash_min(key, HASH_BITS(name))], member) 190 + 191 + 192 + #endif
+2 -13
include/linux/kvm_host.h
··· 42 42 */ 43 43 #define KVM_MEMSLOT_INVALID (1UL << 16) 44 44 45 - /* 46 - * If we support unaligned MMIO, at most one fragment will be split into two: 47 - */ 48 - #ifdef KVM_UNALIGNED_MMIO 49 - # define KVM_EXTRA_MMIO_FRAGMENTS 1 50 - #else 51 - # define KVM_EXTRA_MMIO_FRAGMENTS 0 52 - #endif 53 - 54 - #define KVM_USER_MMIO_SIZE 8 55 - 56 - #define KVM_MAX_MMIO_FRAGMENTS \ 57 - (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) 45 + /* Two fragments for cross MMIO pages. */ 46 + #define KVM_MAX_MMIO_FRAGMENTS 2 58 47 59 48 /* 60 49 * For the normal pfn, the highest 12 bits should be zero,
-2
include/linux/raid/Kbuild
··· 1 - header-y += md_p.h 2 - header-y += md_u.h
include/linux/raid/md_p.h include/uapi/linux/raid/md_p.h
+1 -140
include/linux/raid/md_u.h
··· 11 11 (for example /usr/src/linux/COPYING); if not, write to the Free 12 12 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 13 13 */ 14 - 15 14 #ifndef _MD_U_H 16 15 #define _MD_U_H 17 16 18 - /* 19 - * Different major versions are not compatible. 20 - * Different minor versions are only downward compatible. 21 - * Different patchlevel versions are downward and upward compatible. 22 - */ 23 - #define MD_MAJOR_VERSION 0 24 - #define MD_MINOR_VERSION 90 25 - /* 26 - * MD_PATCHLEVEL_VERSION indicates kernel functionality. 27 - * >=1 means different superblock formats are selectable using SET_ARRAY_INFO 28 - * and major_version/minor_version accordingly 29 - * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT 30 - * in the super status byte 31 - * >=3 means that bitmap superblock version 4 is supported, which uses 32 - * little-ending representation rather than host-endian 33 - */ 34 - #define MD_PATCHLEVEL_VERSION 3 17 + #include <uapi/linux/raid/md_u.h> 35 18 36 - /* ioctls */ 37 - 38 - /* status */ 39 - #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) 40 - #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) 41 - #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) 42 - #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) 43 - #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) 44 - #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) 45 - 46 - /* configuration */ 47 - #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) 48 - #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) 49 - #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) 50 - #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) 51 - #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) 52 - #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) 53 - #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) 54 - #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) 55 - #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) 56 - #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) 57 - #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) 58 - #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) 59 - 60 - /* usage */ 61 - #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) 62 - /* 0x31 was START_ARRAY */ 63 - #define STOP_ARRAY _IO (MD_MAJOR, 0x32) 64 - #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) 65 - #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) 66 - 67 - /* 63 partitions with the alternate major number (mdp) */ 68 - #define MdpMinorShift 6 69 - #ifdef __KERNEL__ 70 19 extern int mdp_major; 71 - #endif 72 - 73 - typedef struct mdu_version_s { 74 - int major; 75 - int minor; 76 - int patchlevel; 77 - } mdu_version_t; 78 - 79 - typedef struct mdu_array_info_s { 80 - /* 81 - * Generic constant information 82 - */ 83 - int major_version; 84 - int minor_version; 85 - int patch_version; 86 - int ctime; 87 - int level; 88 - int size; 89 - int nr_disks; 90 - int raid_disks; 91 - int md_minor; 92 - int not_persistent; 93 - 94 - /* 95 - * Generic state information 96 - */ 97 - int utime; /* 0 Superblock update time */ 98 - int state; /* 1 State bits (clean, ...) */ 99 - int active_disks; /* 2 Number of currently active disks */ 100 - int working_disks; /* 3 Number of working disks */ 101 - int failed_disks; /* 4 Number of failed disks */ 102 - int spare_disks; /* 5 Number of spare disks */ 103 - 104 - /* 105 - * Personality information 106 - */ 107 - int layout; /* 0 the array's physical layout */ 108 - int chunk_size; /* 1 chunk size in bytes */ 109 - 110 - } mdu_array_info_t; 111 - 112 - /* non-obvious values for 'level' */ 113 - #define LEVEL_MULTIPATH (-4) 114 - #define LEVEL_LINEAR (-1) 115 - #define LEVEL_FAULTY (-5) 116 - 117 - /* we need a value for 'no level specified' and 0 118 - * means 'raid0', so we need something else. This is 119 - * for internal use only 120 - */ 121 - #define LEVEL_NONE (-1000000) 122 - 123 - typedef struct mdu_disk_info_s { 124 - /* 125 - * configuration/status of one particular disk 126 - */ 127 - int number; 128 - int major; 129 - int minor; 130 - int raid_disk; 131 - int state; 132 - 133 - } mdu_disk_info_t; 134 - 135 - typedef struct mdu_start_info_s { 136 - /* 137 - * configuration/status of one particular disk 138 - */ 139 - int major; 140 - int minor; 141 - int raid_disk; 142 - int state; 143 - 144 - } mdu_start_info_t; 145 - 146 - typedef struct mdu_bitmap_file_s 147 - { 148 - char pathname[4096]; 149 - } mdu_bitmap_file_t; 150 - 151 - typedef struct mdu_param_s 152 - { 153 - int personality; /* 1,2,3,4 */ 154 - int chunk_size; /* in bytes */ 155 - int max_fault; /* unused for now */ 156 - } mdu_param_t; 157 - 158 20 #endif 159 -
+9
include/net/cfg80211.h
··· 2652 2652 unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc); 2653 2653 2654 2654 /** 2655 + * ieee80211_get_mesh_hdrlen - get mesh extension header length 2656 + * @meshhdr: the mesh extension header, only the flags field 2657 + * (first byte) will be accessed 2658 + * Returns the length of the extension header, which is always at 2659 + * least 6 bytes and at most 18 if address 5 and 6 are present. 2660 + */ 2661 + unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr); 2662 + 2663 + /** 2655 2664 * DOC: Data path helpers 2656 2665 * 2657 2666 * In addition to generic utilities, cfg80211 also offers
+3
include/sound/core.h
··· 132 132 int shutdown; /* this card is going down */ 133 133 int free_on_last_close; /* free in context of file_release */ 134 134 wait_queue_head_t shutdown_sleep; 135 + atomic_t refcount; /* refcount for disconnection */ 135 136 struct device *dev; /* device assigned to this card */ 136 137 struct device *card_dev; /* cardX object for sysfs */ 137 138 ··· 190 189 const struct file_operations *f_ops; /* file operations */ 191 190 void *private_data; /* private data for f_ops->open */ 192 191 struct device *dev; /* device for sysfs */ 192 + struct snd_card *card_ptr; /* assigned card instance */ 193 193 }; 194 194 195 195 /* return a device pointer linked to each sound device as a parent */ ··· 297 295 int snd_component_add(struct snd_card *card, const char *component); 298 296 int snd_card_file_add(struct snd_card *card, struct file *file); 299 297 int snd_card_file_remove(struct snd_card *card, struct file *file); 298 + void snd_card_unref(struct snd_card *card); 300 299 301 300 #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) 302 301
+8
include/trace/events/xen.h
··· 377 377 DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin); 378 378 DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin); 379 379 380 + TRACE_EVENT(xen_mmu_flush_tlb_all, 381 + TP_PROTO(int x), 382 + TP_ARGS(x), 383 + TP_STRUCT__entry(__array(char, x, 0)), 384 + TP_fast_assign((void)x), 385 + TP_printk("%s", "") 386 + ); 387 + 380 388 TRACE_EVENT(xen_mmu_flush_tlb, 381 389 TP_PROTO(int x), 382 390 TP_ARGS(x),
+2
include/uapi/linux/raid/Kbuild
··· 1 1 # UAPI Header export list 2 + header-y += md_p.h 3 + header-y += md_u.h
+155
include/uapi/linux/raid/md_u.h
··· 1 + /* 2 + md_u.h : user <=> kernel API between Linux raidtools and RAID drivers 3 + Copyright (C) 1998 Ingo Molnar 4 + 5 + This program is free software; you can redistribute it and/or modify 6 + it under the terms of the GNU General Public License as published by 7 + the Free Software Foundation; either version 2, or (at your option) 8 + any later version. 9 + 10 + You should have received a copy of the GNU General Public License 11 + (for example /usr/src/linux/COPYING); if not, write to the Free 12 + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 13 + */ 14 + 15 + #ifndef _UAPI_MD_U_H 16 + #define _UAPI_MD_U_H 17 + 18 + /* 19 + * Different major versions are not compatible. 20 + * Different minor versions are only downward compatible. 21 + * Different patchlevel versions are downward and upward compatible. 22 + */ 23 + #define MD_MAJOR_VERSION 0 24 + #define MD_MINOR_VERSION 90 25 + /* 26 + * MD_PATCHLEVEL_VERSION indicates kernel functionality. 27 + * >=1 means different superblock formats are selectable using SET_ARRAY_INFO 28 + * and major_version/minor_version accordingly 29 + * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT 30 + * in the super status byte 31 + * >=3 means that bitmap superblock version 4 is supported, which uses 32 + * little-ending representation rather than host-endian 33 + */ 34 + #define MD_PATCHLEVEL_VERSION 3 35 + 36 + /* ioctls */ 37 + 38 + /* status */ 39 + #define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) 40 + #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) 41 + #define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) 42 + #define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) 43 + #define RAID_AUTORUN _IO (MD_MAJOR, 0x14) 44 + #define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) 45 + 46 + /* configuration */ 47 + #define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) 48 + #define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) 49 + #define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) 50 + #define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) 51 + #define SET_DISK_INFO _IO (MD_MAJOR, 0x24) 52 + #define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) 53 + #define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) 54 + #define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) 55 + #define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) 56 + #define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) 57 + #define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) 58 + #define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) 59 + 60 + /* usage */ 61 + #define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) 62 + /* 0x31 was START_ARRAY */ 63 + #define STOP_ARRAY _IO (MD_MAJOR, 0x32) 64 + #define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) 65 + #define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) 66 + 67 + /* 63 partitions with the alternate major number (mdp) */ 68 + #define MdpMinorShift 6 69 + 70 + typedef struct mdu_version_s { 71 + int major; 72 + int minor; 73 + int patchlevel; 74 + } mdu_version_t; 75 + 76 + typedef struct mdu_array_info_s { 77 + /* 78 + * Generic constant information 79 + */ 80 + int major_version; 81 + int minor_version; 82 + int patch_version; 83 + int ctime; 84 + int level; 85 + int size; 86 + int nr_disks; 87 + int raid_disks; 88 + int md_minor; 89 + int not_persistent; 90 + 91 + /* 92 + * Generic state information 93 + */ 94 + int utime; /* 0 Superblock update time */ 95 + int state; /* 1 State bits (clean, ...) */ 96 + int active_disks; /* 2 Number of currently active disks */ 97 + int working_disks; /* 3 Number of working disks */ 98 + int failed_disks; /* 4 Number of failed disks */ 99 + int spare_disks; /* 5 Number of spare disks */ 100 + 101 + /* 102 + * Personality information 103 + */ 104 + int layout; /* 0 the array's physical layout */ 105 + int chunk_size; /* 1 chunk size in bytes */ 106 + 107 + } mdu_array_info_t; 108 + 109 + /* non-obvious values for 'level' */ 110 + #define LEVEL_MULTIPATH (-4) 111 + #define LEVEL_LINEAR (-1) 112 + #define LEVEL_FAULTY (-5) 113 + 114 + /* we need a value for 'no level specified' and 0 115 + * means 'raid0', so we need something else. This is 116 + * for internal use only 117 + */ 118 + #define LEVEL_NONE (-1000000) 119 + 120 + typedef struct mdu_disk_info_s { 121 + /* 122 + * configuration/status of one particular disk 123 + */ 124 + int number; 125 + int major; 126 + int minor; 127 + int raid_disk; 128 + int state; 129 + 130 + } mdu_disk_info_t; 131 + 132 + typedef struct mdu_start_info_s { 133 + /* 134 + * configuration/status of one particular disk 135 + */ 136 + int major; 137 + int minor; 138 + int raid_disk; 139 + int state; 140 + 141 + } mdu_start_info_t; 142 + 143 + typedef struct mdu_bitmap_file_s 144 + { 145 + char pathname[4096]; 146 + } mdu_bitmap_file_t; 147 + 148 + typedef struct mdu_param_s 149 + { 150 + int personality; /* 1,2,3,4 */ 151 + int chunk_size; /* in bytes */ 152 + int max_fault; /* unused for now */ 153 + } mdu_param_t; 154 + 155 + #endif /* _UAPI_MD_U_H */
+2
init/main.c
··· 442 442 { 443 443 } 444 444 445 + # if THREAD_SIZE >= PAGE_SIZE 445 446 void __init __weak thread_info_cache_init(void) 446 447 { 447 448 } 449 + #endif 448 450 449 451 /* 450 452 * Set up kernel memory allocators
+4 -2
net/ceph/messenger.c
··· 2300 2300 mutex_unlock(&con->mutex); 2301 2301 return; 2302 2302 } else { 2303 - con->ops->put(con); 2304 2303 dout("con_work %p FAILED to back off %lu\n", con, 2305 2304 con->delay); 2305 + set_bit(CON_FLAG_BACKOFF, &con->flags); 2306 2306 } 2307 + goto done; 2307 2308 } 2308 2309 2309 2310 if (con->state == CON_STATE_STANDBY) { ··· 2750 2749 msg = con->ops->alloc_msg(con, hdr, skip); 2751 2750 mutex_lock(&con->mutex); 2752 2751 if (con->state != CON_STATE_OPEN) { 2753 - ceph_msg_put(msg); 2752 + if (msg) 2753 + ceph_msg_put(msg); 2754 2754 return -EAGAIN; 2755 2755 } 2756 2756 con->in_msg = msg;
+3 -1
net/ipv4/netfilter/iptable_nat.c
··· 184 184 185 185 if ((ct->tuplehash[dir].tuple.src.u3.ip != 186 186 ct->tuplehash[!dir].tuple.dst.u3.ip) || 187 - (ct->tuplehash[dir].tuple.src.u.all != 187 + (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && 188 + ct->tuplehash[dir].tuple.src.u.all != 188 189 ct->tuplehash[!dir].tuple.dst.u.all)) 189 190 if (nf_xfrm_me_harder(skb, AF_INET) < 0) 190 191 ret = NF_DROP; ··· 222 221 } 223 222 #ifdef CONFIG_XFRM 224 223 else if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && 224 + ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && 225 225 ct->tuplehash[dir].tuple.dst.u.all != 226 226 ct->tuplehash[!dir].tuple.src.u.all) 227 227 if (nf_xfrm_me_harder(skb, AF_INET) < 0)
+5 -3
net/ipv4/tcp_illinois.c
··· 313 313 .tcpv_rttcnt = ca->cnt_rtt, 314 314 .tcpv_minrtt = ca->base_rtt, 315 315 }; 316 - u64 t = ca->sum_rtt; 317 316 318 - do_div(t, ca->cnt_rtt); 319 - info.tcpv_rtt = t; 317 + if (info.tcpv_rttcnt > 0) { 318 + u64 t = ca->sum_rtt; 320 319 320 + do_div(t, info.tcpv_rttcnt); 321 + info.tcpv_rtt = t; 322 + } 321 323 nla_put(skb, INET_DIAG_VEGASINFO, sizeof(info), &info); 322 324 } 323 325 }
+3
net/ipv4/tcp_input.c
··· 4529 4529 struct tcphdr *th; 4530 4530 bool fragstolen; 4531 4531 4532 + if (size == 0) 4533 + return 0; 4534 + 4532 4535 skb = alloc_skb(size + sizeof(*th), sk->sk_allocation); 4533 4536 if (!skb) 4534 4537 goto err;
+1 -1
net/ipv4/tcp_metrics.c
··· 864 864 } 865 865 a = info->attrs[TCP_METRICS_ATTR_ADDR_IPV6]; 866 866 if (a) { 867 - if (nla_len(a) != sizeof(sizeof(struct in6_addr))) 867 + if (nla_len(a) != sizeof(struct in6_addr)) 868 868 return -EINVAL; 869 869 addr->family = AF_INET6; 870 870 memcpy(addr->addr.a6, nla_data(a), sizeof(addr->addr.a6));
+3 -1
net/ipv6/netfilter/ip6table_nat.c
··· 186 186 187 187 if (!nf_inet_addr_cmp(&ct->tuplehash[dir].tuple.src.u3, 188 188 &ct->tuplehash[!dir].tuple.dst.u3) || 189 - (ct->tuplehash[dir].tuple.src.u.all != 189 + (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMPV6 && 190 + ct->tuplehash[dir].tuple.src.u.all != 190 191 ct->tuplehash[!dir].tuple.dst.u.all)) 191 192 if (nf_xfrm_me_harder(skb, AF_INET6) < 0) 192 193 ret = NF_DROP; ··· 223 222 } 224 223 #ifdef CONFIG_XFRM 225 224 else if (!(IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED) && 225 + ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMPV6 && 226 226 ct->tuplehash[dir].tuple.dst.u.all != 227 227 ct->tuplehash[!dir].tuple.src.u.all) 228 228 if (nf_xfrm_me_harder(skb, AF_INET6))
+2 -2
net/ipv6/netfilter/nf_conntrack_reasm.c
··· 85 85 { } 86 86 }; 87 87 88 - static int __net_init nf_ct_frag6_sysctl_register(struct net *net) 88 + static int nf_ct_frag6_sysctl_register(struct net *net) 89 89 { 90 90 struct ctl_table *table; 91 91 struct ctl_table_header *hdr; ··· 127 127 } 128 128 129 129 #else 130 - static int __net_init nf_ct_frag6_sysctl_register(struct net *net) 130 + static int nf_ct_frag6_sysctl_register(struct net *net) 131 131 { 132 132 return 0; 133 133 }
+1
net/l2tp/l2tp_eth.c
··· 291 291 292 292 out_del_dev: 293 293 free_netdev(dev); 294 + spriv->dev = NULL; 294 295 out_del_session: 295 296 l2tp_session_delete(session); 296 297 out:
+1 -1
net/mac80211/ibss.c
··· 1108 1108 sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; 1109 1109 sdata->u.ibss.ibss_join_req = jiffies; 1110 1110 1111 - memcpy(sdata->u.ibss.ssid, params->ssid, IEEE80211_MAX_SSID_LEN); 1111 + memcpy(sdata->u.ibss.ssid, params->ssid, params->ssid_len); 1112 1112 sdata->u.ibss.ssid_len = params->ssid_len; 1113 1113 1114 1114 mutex_unlock(&sdata->u.ibss.mtx);
+55 -17
net/mac80211/rx.c
··· 531 531 532 532 if (ieee80211_is_action(hdr->frame_control)) { 533 533 u8 category; 534 + 535 + /* make sure category field is present */ 536 + if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) 537 + return RX_DROP_MONITOR; 538 + 534 539 mgmt = (struct ieee80211_mgmt *)hdr; 535 540 category = mgmt->u.action.category; 536 541 if (category != WLAN_CATEGORY_MESH_ACTION && ··· 888 883 */ 889 884 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && 890 885 ieee80211_is_data_present(hdr->frame_control)) { 891 - u16 ethertype; 892 - u8 *payload; 886 + unsigned int hdrlen; 887 + __be16 ethertype; 893 888 894 - payload = rx->skb->data + 895 - ieee80211_hdrlen(hdr->frame_control); 896 - ethertype = (payload[6] << 8) | payload[7]; 897 - if (cpu_to_be16(ethertype) == 898 - rx->sdata->control_port_protocol) 889 + hdrlen = ieee80211_hdrlen(hdr->frame_control); 890 + 891 + if (rx->skb->len < hdrlen + 8) 892 + return RX_DROP_MONITOR; 893 + 894 + skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2); 895 + if (ethertype == rx->sdata->control_port_protocol) 899 896 return RX_CONTINUE; 900 897 } 901 898 ··· 1469 1462 1470 1463 hdr = (struct ieee80211_hdr *)rx->skb->data; 1471 1464 fc = hdr->frame_control; 1465 + 1466 + if (ieee80211_is_ctl(fc)) 1467 + return RX_CONTINUE; 1468 + 1472 1469 sc = le16_to_cpu(hdr->seq_ctrl); 1473 1470 frag = sc & IEEE80211_SCTL_FRAG; 1474 1471 1475 1472 if (likely((!ieee80211_has_morefrags(fc) && frag == 0) || 1476 - (rx->skb)->len < 24 || 1477 1473 is_multicast_ether_addr(hdr->addr1))) { 1478 1474 /* not fragmented */ 1479 1475 goto out; ··· 1899 1889 1900 1890 hdr = (struct ieee80211_hdr *) skb->data; 1901 1891 hdrlen = ieee80211_hdrlen(hdr->frame_control); 1892 + 1893 + /* make sure fixed part of mesh header is there, also checks skb len */ 1894 + if (!pskb_may_pull(rx->skb, hdrlen + 6)) 1895 + return RX_DROP_MONITOR; 1896 + 1897 + mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); 1898 + 1899 + /* make sure full mesh header is there, also checks skb len */ 1900 + if (!pskb_may_pull(rx->skb, 1901 + hdrlen + ieee80211_get_mesh_hdrlen(mesh_hdr))) 1902 + return RX_DROP_MONITOR; 1903 + 1904 + /* reload pointers */ 1905 + hdr = (struct ieee80211_hdr *) skb->data; 1902 1906 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); 1903 1907 1904 1908 /* frame is in RMC, don't forward */ ··· 1921 1897 mesh_rmc_check(hdr->addr3, mesh_hdr, rx->sdata)) 1922 1898 return RX_DROP_MONITOR; 1923 1899 1924 - if (!ieee80211_is_data(hdr->frame_control)) 1900 + if (!ieee80211_is_data(hdr->frame_control) || 1901 + !(status->rx_flags & IEEE80211_RX_RA_MATCH)) 1925 1902 return RX_CONTINUE; 1926 1903 1927 1904 if (!mesh_hdr->ttl) ··· 1936 1911 if (is_multicast_ether_addr(hdr->addr1)) { 1937 1912 mpp_addr = hdr->addr3; 1938 1913 proxied_addr = mesh_hdr->eaddr1; 1939 - } else { 1914 + } else if (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6) { 1915 + /* has_a4 already checked in ieee80211_rx_mesh_check */ 1940 1916 mpp_addr = hdr->addr4; 1941 1917 proxied_addr = mesh_hdr->eaddr2; 1918 + } else { 1919 + return RX_DROP_MONITOR; 1942 1920 } 1943 1921 1944 1922 rcu_read_lock(); ··· 1969 1941 } 1970 1942 skb_set_queue_mapping(skb, q); 1971 1943 1972 - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) 1973 - goto out; 1974 - 1975 1944 if (!--mesh_hdr->ttl) { 1976 1945 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl); 1977 - return RX_DROP_MONITOR; 1946 + goto out; 1978 1947 } 1979 1948 1980 1949 if (!ifmsh->mshcfg.dot11MeshForwarding) ··· 2378 2353 } 2379 2354 break; 2380 2355 case WLAN_CATEGORY_SELF_PROTECTED: 2356 + if (len < (IEEE80211_MIN_ACTION_SIZE + 2357 + sizeof(mgmt->u.action.u.self_prot.action_code))) 2358 + break; 2359 + 2381 2360 switch (mgmt->u.action.u.self_prot.action_code) { 2382 2361 case WLAN_SP_MESH_PEERING_OPEN: 2383 2362 case WLAN_SP_MESH_PEERING_CLOSE: ··· 2400 2371 } 2401 2372 break; 2402 2373 case WLAN_CATEGORY_MESH_ACTION: 2374 + if (len < (IEEE80211_MIN_ACTION_SIZE + 2375 + sizeof(mgmt->u.action.u.mesh_action.action_code))) 2376 + break; 2377 + 2403 2378 if (!ieee80211_vif_is_mesh(&sdata->vif)) 2404 2379 break; 2405 2380 if (mesh_action_is_path_sel(mgmt) && ··· 2946 2913 if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) 2947 2914 local->dot11ReceivedFragmentCount++; 2948 2915 2949 - if (ieee80211_is_mgmt(fc)) 2950 - err = skb_linearize(skb); 2951 - else 2916 + if (ieee80211_is_mgmt(fc)) { 2917 + /* drop frame if too short for header */ 2918 + if (skb->len < ieee80211_hdrlen(fc)) 2919 + err = -ENOBUFS; 2920 + else 2921 + err = skb_linearize(skb); 2922 + } else { 2952 2923 err = !pskb_may_pull(skb, ieee80211_hdrlen(fc)); 2924 + } 2953 2925 2954 2926 if (err) { 2955 2927 dev_kfree_skb(skb);
+35 -7
net/mac80211/util.c
··· 643 643 break; 644 644 } 645 645 646 - if (id != WLAN_EID_VENDOR_SPECIFIC && 647 - id != WLAN_EID_QUIET && 648 - test_bit(id, seen_elems)) { 649 - elems->parse_error = true; 650 - left -= elen; 651 - pos += elen; 652 - continue; 646 + switch (id) { 647 + case WLAN_EID_SSID: 648 + case WLAN_EID_SUPP_RATES: 649 + case WLAN_EID_FH_PARAMS: 650 + case WLAN_EID_DS_PARAMS: 651 + case WLAN_EID_CF_PARAMS: 652 + case WLAN_EID_TIM: 653 + case WLAN_EID_IBSS_PARAMS: 654 + case WLAN_EID_CHALLENGE: 655 + case WLAN_EID_RSN: 656 + case WLAN_EID_ERP_INFO: 657 + case WLAN_EID_EXT_SUPP_RATES: 658 + case WLAN_EID_HT_CAPABILITY: 659 + case WLAN_EID_HT_OPERATION: 660 + case WLAN_EID_VHT_CAPABILITY: 661 + case WLAN_EID_VHT_OPERATION: 662 + case WLAN_EID_MESH_ID: 663 + case WLAN_EID_MESH_CONFIG: 664 + case WLAN_EID_PEER_MGMT: 665 + case WLAN_EID_PREQ: 666 + case WLAN_EID_PREP: 667 + case WLAN_EID_PERR: 668 + case WLAN_EID_RANN: 669 + case WLAN_EID_CHANNEL_SWITCH: 670 + case WLAN_EID_EXT_CHANSWITCH_ANN: 671 + case WLAN_EID_COUNTRY: 672 + case WLAN_EID_PWR_CONSTRAINT: 673 + case WLAN_EID_TIMEOUT_INTERVAL: 674 + if (test_bit(id, seen_elems)) { 675 + elems->parse_error = true; 676 + left -= elen; 677 + pos += elen; 678 + continue; 679 + } 680 + break; 653 681 } 654 682 655 683 if (calc_crc && id < 64 && (filter & (1ULL << id)))
+2 -1
net/netfilter/nf_conntrack_h323_main.c
··· 753 753 flowi4_to_flowi(&fl1), false)) { 754 754 if (!afinfo->route(&init_net, (struct dst_entry **)&rt2, 755 755 flowi4_to_flowi(&fl2), false)) { 756 - if (rt1->rt_gateway == rt2->rt_gateway && 756 + if (rt_nexthop(rt1, fl1.daddr) == 757 + rt_nexthop(rt2, fl2.daddr) && 757 758 rt1->dst.dev == rt2->dst.dev) 758 759 ret = 1; 759 760 dst_release(&rt2->dst);
+1 -1
net/sctp/socket.c
··· 974 974 void *addr_buf; 975 975 struct sctp_af *af; 976 976 977 - SCTP_DEBUG_PRINTK("sctp_setsocktopt_bindx: sk %p addrs %p" 977 + SCTP_DEBUG_PRINTK("sctp_setsockopt_bindx: sk %p addrs %p" 978 978 " addrs_size %d opt %d\n", sk, addrs, addrs_size, op); 979 979 980 980 if (unlikely(addrs_size <= 0))
+1 -1
net/sunrpc/backchannel_rqst.c
··· 172 172 xprt_free_allocation(req); 173 173 174 174 dprintk("RPC: setup backchannel transport failed\n"); 175 - return -1; 175 + return -ENOMEM; 176 176 } 177 177 EXPORT_SYMBOL_GPL(xprt_setup_backchannel); 178 178
+1 -2
net/wireless/core.c
··· 526 526 for (i = 0; i < sband->n_channels; i++) { 527 527 sband->channels[i].orig_flags = 528 528 sband->channels[i].flags; 529 - sband->channels[i].orig_mag = 530 - sband->channels[i].max_antenna_gain; 529 + sband->channels[i].orig_mag = INT_MAX; 531 530 sband->channels[i].orig_mpwr = 532 531 sband->channels[i].max_power; 533 532 sband->channels[i].band = band;
+3 -2
net/wireless/reg.c
··· 908 908 map_regdom_flags(reg_rule->flags) | bw_flags; 909 909 chan->max_antenna_gain = chan->orig_mag = 910 910 (int) MBI_TO_DBI(power_rule->max_antenna_gain); 911 - chan->max_power = chan->orig_mpwr = 911 + chan->max_reg_power = chan->max_power = chan->orig_mpwr = 912 912 (int) MBM_TO_DBM(power_rule->max_eirp); 913 913 return; 914 914 } ··· 1331 1331 1332 1332 chan->flags |= map_regdom_flags(reg_rule->flags) | bw_flags; 1333 1333 chan->max_antenna_gain = (int) MBI_TO_DBI(power_rule->max_antenna_gain); 1334 - chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp); 1334 + chan->max_reg_power = chan->max_power = 1335 + (int) MBM_TO_DBM(power_rule->max_eirp); 1335 1336 } 1336 1337 1337 1338 static void handle_band_custom(struct wiphy *wiphy, enum ieee80211_band band,
+8 -6
net/wireless/util.c
··· 309 309 } 310 310 EXPORT_SYMBOL(ieee80211_get_hdrlen_from_skb); 311 311 312 - static int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) 312 + unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) 313 313 { 314 314 int ae = meshhdr->flags & MESH_FLAGS_AE; 315 - /* 7.1.3.5a.2 */ 315 + /* 802.11-2012, 8.2.4.7.3 */ 316 316 switch (ae) { 317 + default: 317 318 case 0: 318 319 return 6; 319 320 case MESH_FLAGS_AE_A4: 320 321 return 12; 321 322 case MESH_FLAGS_AE_A5_A6: 322 323 return 18; 323 - case (MESH_FLAGS_AE_A4 | MESH_FLAGS_AE_A5_A6): 324 - return 24; 325 - default: 326 - return 6; 327 324 } 328 325 } 326 + EXPORT_SYMBOL(ieee80211_get_mesh_hdrlen); 329 327 330 328 int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, 331 329 enum nl80211_iftype iftype) ··· 371 373 /* make sure meshdr->flags is on the linear part */ 372 374 if (!pskb_may_pull(skb, hdrlen + 1)) 373 375 return -1; 376 + if (meshdr->flags & MESH_FLAGS_AE_A4) 377 + return -1; 374 378 if (meshdr->flags & MESH_FLAGS_AE_A5_A6) { 375 379 skb_copy_bits(skb, hdrlen + 376 380 offsetof(struct ieee80211s_hdr, eaddr1), ··· 396 396 (struct ieee80211s_hdr *) (skb->data + hdrlen); 397 397 /* make sure meshdr->flags is on the linear part */ 398 398 if (!pskb_may_pull(skb, hdrlen + 1)) 399 + return -1; 400 + if (meshdr->flags & MESH_FLAGS_AE_A5_A6) 399 401 return -1; 400 402 if (meshdr->flags & MESH_FLAGS_AE_A4) 401 403 skb_copy_bits(skb, hdrlen +
+7 -2
sound/core/compress_offload.c
··· 100 100 101 101 if (dirn != compr->direction) { 102 102 pr_err("this device doesn't support this direction\n"); 103 + snd_card_unref(compr->card); 103 104 return -EINVAL; 104 105 } 105 106 106 107 data = kzalloc(sizeof(*data), GFP_KERNEL); 107 - if (!data) 108 + if (!data) { 109 + snd_card_unref(compr->card); 108 110 return -ENOMEM; 111 + } 109 112 data->stream.ops = compr->ops; 110 113 data->stream.direction = dirn; 111 114 data->stream.private_data = compr->private_data; ··· 116 113 runtime = kzalloc(sizeof(*runtime), GFP_KERNEL); 117 114 if (!runtime) { 118 115 kfree(data); 116 + snd_card_unref(compr->card); 119 117 return -ENOMEM; 120 118 } 121 119 runtime->state = SNDRV_PCM_STATE_OPEN; ··· 130 126 kfree(runtime); 131 127 kfree(data); 132 128 } 133 - return ret; 129 + snd_card_unref(compr->card); 130 + return 0; 134 131 } 135 132 136 133 static int snd_compr_free(struct inode *inode, struct file *f)
+5
sound/core/control.c
··· 86 86 write_lock_irqsave(&card->ctl_files_rwlock, flags); 87 87 list_add_tail(&ctl->list, &card->ctl_files); 88 88 write_unlock_irqrestore(&card->ctl_files_rwlock, flags); 89 + snd_card_unref(card); 89 90 return 0; 90 91 91 92 __error: ··· 94 93 __error2: 95 94 snd_card_file_remove(card, file); 96 95 __error1: 96 + if (card) 97 + snd_card_unref(card); 97 98 return err; 98 99 } 99 100 ··· 1437 1434 spin_unlock_irq(&ctl->read_lock); 1438 1435 schedule(); 1439 1436 remove_wait_queue(&ctl->change_sleep, &wait); 1437 + if (ctl->card->shutdown) 1438 + return -ENODEV; 1440 1439 if (signal_pending(current)) 1441 1440 return -ERESTARTSYS; 1442 1441 spin_lock_irq(&ctl->read_lock);
+11 -1
sound/core/hwdep.c
··· 100 100 if (hw == NULL) 101 101 return -ENODEV; 102 102 103 - if (!try_module_get(hw->card->module)) 103 + if (!try_module_get(hw->card->module)) { 104 + snd_card_unref(hw->card); 104 105 return -EFAULT; 106 + } 105 107 106 108 init_waitqueue_entry(&wait, current); 107 109 add_wait_queue(&hw->open_wait, &wait); ··· 131 129 mutex_unlock(&hw->open_mutex); 132 130 schedule(); 133 131 mutex_lock(&hw->open_mutex); 132 + if (hw->card->shutdown) { 133 + err = -ENODEV; 134 + break; 135 + } 134 136 if (signal_pending(current)) { 135 137 err = -ERESTARTSYS; 136 138 break; ··· 154 148 mutex_unlock(&hw->open_mutex); 155 149 if (err < 0) 156 150 module_put(hw->card->module); 151 + snd_card_unref(hw->card); 157 152 return err; 158 153 } 159 154 ··· 466 459 mutex_unlock(&register_mutex); 467 460 return -EINVAL; 468 461 } 462 + mutex_lock(&hwdep->open_mutex); 463 + wake_up(&hwdep->open_wait); 469 464 #ifdef CONFIG_SND_OSSEMUL 470 465 if (hwdep->ossreg) 471 466 snd_unregister_oss_device(hwdep->oss_type, hwdep->card, hwdep->device); 472 467 #endif 473 468 snd_unregister_device(SNDRV_DEVICE_TYPE_HWDEP, hwdep->card, hwdep->device); 474 469 list_del_init(&hwdep->list); 470 + mutex_unlock(&hwdep->open_mutex); 475 471 mutex_unlock(&register_mutex); 476 472 return 0; 477 473 }
+30 -20
sound/core/init.c
··· 213 213 spin_lock_init(&card->files_lock); 214 214 INIT_LIST_HEAD(&card->files_list); 215 215 init_waitqueue_head(&card->shutdown_sleep); 216 + atomic_set(&card->refcount, 0); 216 217 #ifdef CONFIG_PM 217 218 mutex_init(&card->power_lock); 218 219 init_waitqueue_head(&card->power_sleep); ··· 447 446 return 0; 448 447 } 449 448 449 + /** 450 + * snd_card_unref - release the reference counter 451 + * @card: the card instance 452 + * 453 + * Decrements the reference counter. When it reaches to zero, wake up 454 + * the sleeper and call the destructor if needed. 455 + */ 456 + void snd_card_unref(struct snd_card *card) 457 + { 458 + if (atomic_dec_and_test(&card->refcount)) { 459 + wake_up(&card->shutdown_sleep); 460 + if (card->free_on_last_close) 461 + snd_card_do_free(card); 462 + } 463 + } 464 + EXPORT_SYMBOL(snd_card_unref); 465 + 450 466 int snd_card_free_when_closed(struct snd_card *card) 451 467 { 452 - int free_now = 0; 453 - int ret = snd_card_disconnect(card); 454 - if (ret) 468 + int ret; 469 + 470 + atomic_inc(&card->refcount); 471 + ret = snd_card_disconnect(card); 472 + if (ret) { 473 + atomic_dec(&card->refcount); 455 474 return ret; 475 + } 456 476 457 - spin_lock(&card->files_lock); 458 - if (list_empty(&card->files_list)) 459 - free_now = 1; 460 - else 461 - card->free_on_last_close = 1; 462 - spin_unlock(&card->files_lock); 463 - 464 - if (free_now) 477 + card->free_on_last_close = 1; 478 + if (atomic_dec_and_test(&card->refcount)) 465 479 snd_card_do_free(card); 466 480 return 0; 467 481 } ··· 490 474 return ret; 491 475 492 476 /* wait, until all devices are ready for the free operation */ 493 - wait_event(card->shutdown_sleep, list_empty(&card->files_list)); 477 + wait_event(card->shutdown_sleep, !atomic_read(&card->refcount)); 494 478 snd_card_do_free(card); 495 479 return 0; 496 480 } ··· 902 886 return -ENODEV; 903 887 } 904 888 list_add(&mfile->list, &card->files_list); 889 + atomic_inc(&card->refcount); 905 890 spin_unlock(&card->files_lock); 906 891 return 0; 907 892 } ··· 925 908 int snd_card_file_remove(struct snd_card *card, struct file *file) 926 909 { 927 910 struct snd_monitor_file *mfile, *found = NULL; 928 - int last_close = 0; 929 911 930 912 spin_lock(&card->files_lock); 931 913 list_for_each_entry(mfile, &card->files_list, list) { ··· 939 923 break; 940 924 } 941 925 } 942 - if (list_empty(&card->files_list)) 943 - last_close = 1; 944 926 spin_unlock(&card->files_lock); 945 - if (last_close) { 946 - wake_up(&card->shutdown_sleep); 947 - if (card->free_on_last_close) 948 - snd_card_do_free(card); 949 - } 950 927 if (!found) { 951 928 snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file); 952 929 return -ENOENT; 953 930 } 954 931 kfree(found); 932 + snd_card_unref(card); 955 933 return 0; 956 934 } 957 935
+8 -2
sound/core/oss/mixer_oss.c
··· 52 52 SNDRV_OSS_DEVICE_TYPE_MIXER); 53 53 if (card == NULL) 54 54 return -ENODEV; 55 - if (card->mixer_oss == NULL) 55 + if (card->mixer_oss == NULL) { 56 + snd_card_unref(card); 56 57 return -ENODEV; 58 + } 57 59 err = snd_card_file_add(card, file); 58 - if (err < 0) 60 + if (err < 0) { 61 + snd_card_unref(card); 59 62 return err; 63 + } 60 64 fmixer = kzalloc(sizeof(*fmixer), GFP_KERNEL); 61 65 if (fmixer == NULL) { 62 66 snd_card_file_remove(card, file); 67 + snd_card_unref(card); 63 68 return -ENOMEM; 64 69 } 65 70 fmixer->card = card; ··· 73 68 if (!try_module_get(card->module)) { 74 69 kfree(fmixer); 75 70 snd_card_file_remove(card, file); 71 + snd_card_unref(card); 76 72 return -EFAULT; 77 73 } 78 74 return 0;
+6
sound/core/oss/pcm_oss.c
··· 2441 2441 mutex_unlock(&pcm->open_mutex); 2442 2442 schedule(); 2443 2443 mutex_lock(&pcm->open_mutex); 2444 + if (pcm->card->shutdown) { 2445 + err = -ENODEV; 2446 + break; 2447 + } 2444 2448 if (signal_pending(current)) { 2445 2449 err = -ERESTARTSYS; 2446 2450 break; ··· 2461 2457 __error2: 2462 2458 snd_card_file_remove(pcm->card, file); 2463 2459 __error1: 2460 + if (pcm) 2461 + snd_card_unref(pcm->card); 2464 2462 return err; 2465 2463 } 2466 2464
+11 -2
sound/core/pcm.c
··· 1086 1086 if (list_empty(&pcm->list)) 1087 1087 goto unlock; 1088 1088 1089 + mutex_lock(&pcm->open_mutex); 1090 + wake_up(&pcm->open_wait); 1089 1091 list_del_init(&pcm->list); 1090 1092 for (cidx = 0; cidx < 2; cidx++) 1091 - for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) 1092 - if (substream->runtime) 1093 + for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) { 1094 + snd_pcm_stream_lock_irq(substream); 1095 + if (substream->runtime) { 1093 1096 substream->runtime->status->state = SNDRV_PCM_STATE_DISCONNECTED; 1097 + wake_up(&substream->runtime->sleep); 1098 + wake_up(&substream->runtime->tsleep); 1099 + } 1100 + snd_pcm_stream_unlock_irq(substream); 1101 + } 1094 1102 list_for_each_entry(notify, &snd_pcm_notify_list, list) { 1095 1103 notify->n_disconnect(pcm); 1096 1104 } ··· 1118 1110 pcm->streams[cidx].chmap_kctl = NULL; 1119 1111 } 1120 1112 } 1113 + mutex_unlock(&pcm->open_mutex); 1121 1114 unlock: 1122 1115 mutex_unlock(&register_mutex); 1123 1116 return 0;
+27 -6
sound/core/pcm_native.c
··· 369 369 return usecs; 370 370 } 371 371 372 + static void snd_pcm_set_state(struct snd_pcm_substream *substream, int state) 373 + { 374 + snd_pcm_stream_lock_irq(substream); 375 + if (substream->runtime->status->state != SNDRV_PCM_STATE_DISCONNECTED) 376 + substream->runtime->status->state = state; 377 + snd_pcm_stream_unlock_irq(substream); 378 + } 379 + 372 380 static int snd_pcm_hw_params(struct snd_pcm_substream *substream, 373 381 struct snd_pcm_hw_params *params) 374 382 { ··· 460 452 runtime->boundary *= 2; 461 453 462 454 snd_pcm_timer_resolution_change(substream); 463 - runtime->status->state = SNDRV_PCM_STATE_SETUP; 455 + snd_pcm_set_state(substream, SNDRV_PCM_STATE_SETUP); 464 456 465 457 if (pm_qos_request_active(&substream->latency_pm_qos_req)) 466 458 pm_qos_remove_request(&substream->latency_pm_qos_req); ··· 472 464 /* hardware might be unusable from this time, 473 465 so we force application to retry to set 474 466 the correct hardware parameter settings */ 475 - runtime->status->state = SNDRV_PCM_STATE_OPEN; 467 + snd_pcm_set_state(substream, SNDRV_PCM_STATE_OPEN); 476 468 if (substream->ops->hw_free != NULL) 477 469 substream->ops->hw_free(substream); 478 470 return err; ··· 520 512 return -EBADFD; 521 513 if (substream->ops->hw_free) 522 514 result = substream->ops->hw_free(substream); 523 - runtime->status->state = SNDRV_PCM_STATE_OPEN; 515 + snd_pcm_set_state(substream, SNDRV_PCM_STATE_OPEN); 524 516 pm_qos_remove_request(&substream->latency_pm_qos_req); 525 517 return result; 526 518 } ··· 1328 1320 { 1329 1321 struct snd_pcm_runtime *runtime = substream->runtime; 1330 1322 runtime->control->appl_ptr = runtime->status->hw_ptr; 1331 - runtime->status->state = SNDRV_PCM_STATE_PREPARED; 1323 + snd_pcm_set_state(substream, SNDRV_PCM_STATE_PREPARED); 1332 1324 } 1333 1325 1334 1326 static struct action_ops snd_pcm_action_prepare = { ··· 1518 1510 down_read(&snd_pcm_link_rwsem); 1519 1511 snd_pcm_stream_lock_irq(substream); 1520 1512 remove_wait_queue(&to_check->sleep, &wait); 1513 + if (card->shutdown) { 1514 + result = -ENODEV; 1515 + break; 1516 + } 1521 1517 if (tout == 0) { 1522 1518 if (substream->runtime->status->state == SNDRV_PCM_STATE_SUSPENDED) 1523 1519 result = -ESTRPIPE; ··· 1646 1634 write_unlock_irq(&snd_pcm_link_rwlock); 1647 1635 up_write(&snd_pcm_link_rwsem); 1648 1636 _nolock: 1637 + snd_card_unref(substream1->pcm->card); 1649 1638 fput_light(file, fput_needed); 1650 1639 if (res < 0) 1651 1640 kfree(group); ··· 2121 2108 return err; 2122 2109 pcm = snd_lookup_minor_data(iminor(inode), 2123 2110 SNDRV_DEVICE_TYPE_PCM_PLAYBACK); 2124 - return snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK); 2111 + err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_PLAYBACK); 2112 + snd_card_unref(pcm->card); 2113 + return err; 2125 2114 } 2126 2115 2127 2116 static int snd_pcm_capture_open(struct inode *inode, struct file *file) ··· 2134 2119 return err; 2135 2120 pcm = snd_lookup_minor_data(iminor(inode), 2136 2121 SNDRV_DEVICE_TYPE_PCM_CAPTURE); 2137 - return snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE); 2122 + err = snd_pcm_open(file, pcm, SNDRV_PCM_STREAM_CAPTURE); 2123 + snd_card_unref(pcm->card); 2124 + return err; 2138 2125 } 2139 2126 2140 2127 static int snd_pcm_open(struct file *file, struct snd_pcm *pcm, int stream) ··· 2173 2156 mutex_unlock(&pcm->open_mutex); 2174 2157 schedule(); 2175 2158 mutex_lock(&pcm->open_mutex); 2159 + if (pcm->card->shutdown) { 2160 + err = -ENODEV; 2161 + break; 2162 + } 2176 2163 if (signal_pending(current)) { 2177 2164 err = -ERESTARTSYS; 2178 2165 break;
+25 -1
sound/core/rawmidi.c
··· 379 379 if (rmidi == NULL) 380 380 return -ENODEV; 381 381 382 - if (!try_module_get(rmidi->card->module)) 382 + if (!try_module_get(rmidi->card->module)) { 383 + snd_card_unref(rmidi->card); 383 384 return -ENXIO; 385 + } 384 386 385 387 mutex_lock(&rmidi->open_mutex); 386 388 card = rmidi->card; ··· 424 422 mutex_unlock(&rmidi->open_mutex); 425 423 schedule(); 426 424 mutex_lock(&rmidi->open_mutex); 425 + if (rmidi->card->shutdown) { 426 + err = -ENODEV; 427 + break; 428 + } 427 429 if (signal_pending(current)) { 428 430 err = -ERESTARTSYS; 429 431 break; ··· 446 440 #endif 447 441 file->private_data = rawmidi_file; 448 442 mutex_unlock(&rmidi->open_mutex); 443 + snd_card_unref(rmidi->card); 449 444 return 0; 450 445 451 446 __error: ··· 454 447 __error_card: 455 448 mutex_unlock(&rmidi->open_mutex); 456 449 module_put(rmidi->card->module); 450 + snd_card_unref(rmidi->card); 457 451 return err; 458 452 } 459 453 ··· 999 991 spin_unlock_irq(&runtime->lock); 1000 992 schedule(); 1001 993 remove_wait_queue(&runtime->sleep, &wait); 994 + if (rfile->rmidi->card->shutdown) 995 + return -ENODEV; 1002 996 if (signal_pending(current)) 1003 997 return result > 0 ? result : -ERESTARTSYS; 1004 998 if (!runtime->avail) ··· 1244 1234 spin_unlock_irq(&runtime->lock); 1245 1235 timeout = schedule_timeout(30 * HZ); 1246 1236 remove_wait_queue(&runtime->sleep, &wait); 1237 + if (rfile->rmidi->card->shutdown) 1238 + return -ENODEV; 1247 1239 if (signal_pending(current)) 1248 1240 return result > 0 ? result : -ERESTARTSYS; 1249 1241 if (!runtime->avail && !timeout) ··· 1621 1609 static int snd_rawmidi_dev_disconnect(struct snd_device *device) 1622 1610 { 1623 1611 struct snd_rawmidi *rmidi = device->device_data; 1612 + int dir; 1624 1613 1625 1614 mutex_lock(&register_mutex); 1615 + mutex_lock(&rmidi->open_mutex); 1616 + wake_up(&rmidi->open_wait); 1626 1617 list_del_init(&rmidi->list); 1618 + for (dir = 0; dir < 2; dir++) { 1619 + struct snd_rawmidi_substream *s; 1620 + list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { 1621 + if (s->runtime) 1622 + wake_up(&s->runtime->sleep); 1623 + } 1624 + } 1625 + 1627 1626 #ifdef CONFIG_SND_OSSEMUL 1628 1627 if (rmidi->ossreg) { 1629 1628 if ((int)rmidi->device == midi_map[rmidi->card->number]) { ··· 1649 1626 } 1650 1627 #endif /* CONFIG_SND_OSSEMUL */ 1651 1628 snd_unregister_device(SNDRV_DEVICE_TYPE_RAWMIDI, rmidi->card, rmidi->device); 1629 + mutex_unlock(&rmidi->open_mutex); 1652 1630 mutex_unlock(&register_mutex); 1653 1631 return 0; 1654 1632 }
+9 -2
sound/core/sound.c
··· 98 98 * 99 99 * Checks that a minor device with the specified type is registered, and returns 100 100 * its user data pointer. 101 + * 102 + * This function increments the reference counter of the card instance 103 + * if an associated instance with the given minor number and type is found. 104 + * The caller must call snd_card_unref() appropriately later. 101 105 */ 102 106 void *snd_lookup_minor_data(unsigned int minor, int type) 103 107 { ··· 112 108 return NULL; 113 109 mutex_lock(&sound_mutex); 114 110 mreg = snd_minors[minor]; 115 - if (mreg && mreg->type == type) 111 + if (mreg && mreg->type == type) { 116 112 private_data = mreg->private_data; 117 - else 113 + if (mreg->card_ptr) 114 + atomic_inc(&mreg->card_ptr->refcount); 115 + } else 118 116 private_data = NULL; 119 117 mutex_unlock(&sound_mutex); 120 118 return private_data; ··· 281 275 preg->device = dev; 282 276 preg->f_ops = f_ops; 283 277 preg->private_data = private_data; 278 + preg->card_ptr = card; 284 279 mutex_lock(&sound_mutex); 285 280 #ifdef CONFIG_SND_DYNAMIC_MINORS 286 281 minor = snd_find_free_minor(type);
+8 -2
sound/core/sound_oss.c
··· 40 40 static struct snd_minor *snd_oss_minors[SNDRV_OSS_MINORS]; 41 41 static DEFINE_MUTEX(sound_oss_mutex); 42 42 43 + /* NOTE: This function increments the refcount of the associated card like 44 + * snd_lookup_minor_data(); the caller must call snd_card_unref() appropriately 45 + */ 43 46 void *snd_lookup_oss_minor_data(unsigned int minor, int type) 44 47 { 45 48 struct snd_minor *mreg; ··· 52 49 return NULL; 53 50 mutex_lock(&sound_oss_mutex); 54 51 mreg = snd_oss_minors[minor]; 55 - if (mreg && mreg->type == type) 52 + if (mreg && mreg->type == type) { 56 53 private_data = mreg->private_data; 57 - else 54 + if (mreg->card_ptr) 55 + atomic_inc(&mreg->card_ptr->refcount); 56 + } else 58 57 private_data = NULL; 59 58 mutex_unlock(&sound_oss_mutex); 60 59 return private_data; ··· 128 123 preg->device = dev; 129 124 preg->f_ops = f_ops; 130 125 preg->private_data = private_data; 126 + preg->card_ptr = card; 131 127 mutex_lock(&sound_oss_mutex); 132 128 snd_oss_minors[minor] = preg; 133 129 minor_unit = SNDRV_MINOR_OSS_DEVICE(minor);
+2
sound/pci/hda/patch_sigmatel.c
··· 1763 1763 "HP", STAC_HP_ZEPHYR), 1764 1764 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3660, 1765 1765 "HP Mini", STAC_92HD83XXX_HP_LED), 1766 + SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x144E, 1767 + "HP Pavilion dv5", STAC_92HD83XXX_HP_INV_LED), 1766 1768 {} /* terminator */ 1767 1769 }; 1768 1770
+6 -1
sound/pci/ice1712/ice1724.c
··· 2859 2859 ice->set_spdif_clock(ice, 0); 2860 2860 } else { 2861 2861 /* internal on-card clock */ 2862 - snd_vt1724_set_pro_rate(ice, ice->pro_rate_default, 1); 2862 + int rate; 2863 + if (ice->cur_rate) 2864 + rate = ice->cur_rate; 2865 + else 2866 + rate = ice->pro_rate_default; 2867 + snd_vt1724_set_pro_rate(ice, rate, 1); 2863 2868 } 2864 2869 2865 2870 update_spdif_bits(ice, ice->pm_saved_spdif_ctrl);
+2 -2
sound/soc/omap/omap-dmic.c
··· 464 464 465 465 mutex_init(&dmic->mutex); 466 466 467 - dmic->fclk = clk_get(dmic->dev, "dmic_fck"); 467 + dmic->fclk = clk_get(dmic->dev, "fck"); 468 468 if (IS_ERR(dmic->fclk)) { 469 - dev_err(dmic->dev, "cant get dmic_fck\n"); 469 + dev_err(dmic->dev, "cant get fck\n"); 470 470 return -ENODEV; 471 471 } 472 472
+2 -3
sound/soc/omap/zoom2.c
··· 21 21 22 22 #include <linux/clk.h> 23 23 #include <linux/platform_device.h> 24 + #include <linux/gpio.h> 24 25 #include <sound/core.h> 25 26 #include <sound/pcm.h> 26 27 #include <sound/soc.h> 27 28 28 29 #include <asm/mach-types.h> 29 - #include <mach/hardware.h> 30 - #include <mach/gpio.h> 31 - #include <mach/board-zoom.h> 32 30 #include <linux/platform_data/asoc-ti-mcbsp.h> 31 + #include <linux/platform_data/gpio-omap.h> 33 32 34 33 /* Register descriptions for twl4030 codec part */ 35 34 #include <linux/mfd/twl4030-audio.h>
+8 -4
sound/usb/card.c
··· 339 339 } 340 340 341 341 mutex_init(&chip->mutex); 342 - mutex_init(&chip->shutdown_mutex); 342 + init_rwsem(&chip->shutdown_rwsem); 343 343 chip->index = idx; 344 344 chip->dev = dev; 345 345 chip->card = card; ··· 560 560 561 561 card = chip->card; 562 562 mutex_lock(&register_mutex); 563 - mutex_lock(&chip->shutdown_mutex); 563 + down_write(&chip->shutdown_rwsem); 564 564 chip->shutdown = 1; 565 565 chip->num_interfaces--; 566 566 if (chip->num_interfaces <= 0) { ··· 582 582 snd_usb_mixer_disconnect(p); 583 583 } 584 584 usb_chip[chip->index] = NULL; 585 - mutex_unlock(&chip->shutdown_mutex); 585 + up_write(&chip->shutdown_rwsem); 586 586 mutex_unlock(&register_mutex); 587 587 snd_card_free_when_closed(card); 588 588 } else { 589 - mutex_unlock(&chip->shutdown_mutex); 589 + up_write(&chip->shutdown_rwsem); 590 590 mutex_unlock(&register_mutex); 591 591 } 592 592 } ··· 618 618 { 619 619 int err = -ENODEV; 620 620 621 + down_read(&chip->shutdown_rwsem); 621 622 if (!chip->shutdown && !chip->probing) 622 623 err = usb_autopm_get_interface(chip->pm_intf); 624 + up_read(&chip->shutdown_rwsem); 623 625 624 626 return err; 625 627 } 626 628 627 629 void snd_usb_autosuspend(struct snd_usb_audio *chip) 628 630 { 631 + down_read(&chip->shutdown_rwsem); 629 632 if (!chip->shutdown && !chip->probing) 630 633 usb_autopm_put_interface(chip->pm_intf); 634 + up_read(&chip->shutdown_rwsem); 631 635 } 632 636 633 637 static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)
+1
sound/usb/card.h
··· 126 126 struct snd_usb_endpoint *sync_endpoint; 127 127 unsigned long flags; 128 128 bool need_setup_ep; /* (re)configure EP at prepare? */ 129 + unsigned int speed; /* USB_SPEED_XXX */ 129 130 130 131 u64 formats; /* format bitmasks (all or'ed) */ 131 132 unsigned int num_formats; /* number of supported audio formats (list) */
+43 -22
sound/usb/mixer.c
··· 287 287 unsigned char buf[2]; 288 288 int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; 289 289 int timeout = 10; 290 - int err; 290 + int idx = 0, err; 291 291 292 292 err = snd_usb_autoresume(cval->mixer->chip); 293 293 if (err < 0) 294 294 return -EIO; 295 + down_read(&chip->shutdown_rwsem); 295 296 while (timeout-- > 0) { 297 + if (chip->shutdown) 298 + break; 299 + idx = snd_usb_ctrl_intf(chip) | (cval->id << 8); 296 300 if (snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request, 297 301 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, 298 - validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), 299 - buf, val_len) >= val_len) { 302 + validx, idx, buf, val_len) >= val_len) { 300 303 *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); 301 - snd_usb_autosuspend(cval->mixer->chip); 302 - return 0; 304 + err = 0; 305 + goto out; 303 306 } 304 307 } 305 - snd_usb_autosuspend(cval->mixer->chip); 306 308 snd_printdd(KERN_ERR "cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n", 307 - request, validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), cval->val_type); 308 - return -EINVAL; 309 + request, validx, idx, cval->val_type); 310 + err = -EINVAL; 311 + 312 + out: 313 + up_read(&chip->shutdown_rwsem); 314 + snd_usb_autosuspend(cval->mixer->chip); 315 + return err; 309 316 } 310 317 311 318 static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, int validx, int *value_ret) ··· 320 313 struct snd_usb_audio *chip = cval->mixer->chip; 321 314 unsigned char buf[2 + 3*sizeof(__u16)]; /* enough space for one range */ 322 315 unsigned char *val; 323 - int ret, size; 316 + int idx = 0, ret, size; 324 317 __u8 bRequest; 325 318 326 319 if (request == UAC_GET_CUR) { ··· 337 330 if (ret) 338 331 goto error; 339 332 340 - ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), bRequest, 333 + down_read(&chip->shutdown_rwsem); 334 + if (chip->shutdown) 335 + ret = -ENODEV; 336 + else { 337 + idx = snd_usb_ctrl_intf(chip) | (cval->id << 8); 338 + ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), bRequest, 341 339 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, 342 - validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), 343 - buf, size); 340 + validx, idx, buf, size); 341 + } 342 + up_read(&chip->shutdown_rwsem); 344 343 snd_usb_autosuspend(chip); 345 344 346 345 if (ret < 0) { 347 346 error: 348 347 snd_printk(KERN_ERR "cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n", 349 - request, validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), cval->val_type); 348 + request, validx, idx, cval->val_type); 350 349 return ret; 351 350 } 352 351 ··· 430 417 { 431 418 struct snd_usb_audio *chip = cval->mixer->chip; 432 419 unsigned char buf[2]; 433 - int val_len, err, timeout = 10; 420 + int idx = 0, val_len, err, timeout = 10; 434 421 435 422 if (cval->mixer->protocol == UAC_VERSION_1) { 436 423 val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; ··· 453 440 err = snd_usb_autoresume(chip); 454 441 if (err < 0) 455 442 return -EIO; 456 - while (timeout-- > 0) 443 + down_read(&chip->shutdown_rwsem); 444 + while (timeout-- > 0) { 445 + if (chip->shutdown) 446 + break; 447 + idx = snd_usb_ctrl_intf(chip) | (cval->id << 8); 457 448 if (snd_usb_ctl_msg(chip->dev, 458 449 usb_sndctrlpipe(chip->dev, 0), request, 459 450 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, 460 - validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), 461 - buf, val_len) >= 0) { 462 - snd_usb_autosuspend(chip); 463 - return 0; 451 + validx, idx, buf, val_len) >= 0) { 452 + err = 0; 453 + goto out; 464 454 } 465 - snd_usb_autosuspend(chip); 455 + } 466 456 snd_printdd(KERN_ERR "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n", 467 - request, validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), cval->val_type, buf[0], buf[1]); 468 - return -EINVAL; 457 + request, validx, idx, cval->val_type, buf[0], buf[1]); 458 + err = -EINVAL; 459 + 460 + out: 461 + up_read(&chip->shutdown_rwsem); 462 + snd_usb_autosuspend(chip); 463 + return err; 469 464 } 470 465 471 466 static int set_cur_ctl_value(struct usb_mixer_elem_info *cval, int validx, int value)
+51 -7
sound/usb/mixer_quirks.c
··· 283 283 if (value > 1) 284 284 return -EINVAL; 285 285 changed = value != mixer->audigy2nx_leds[index]; 286 + down_read(&mixer->chip->shutdown_rwsem); 287 + if (mixer->chip->shutdown) { 288 + err = -ENODEV; 289 + goto out; 290 + } 286 291 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3042)) 287 292 err = snd_usb_ctl_msg(mixer->chip->dev, 288 293 usb_sndctrlpipe(mixer->chip->dev, 0), 0x24, ··· 304 299 usb_sndctrlpipe(mixer->chip->dev, 0), 0x24, 305 300 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER, 306 301 value, index + 2, NULL, 0); 302 + out: 303 + up_read(&mixer->chip->shutdown_rwsem); 307 304 if (err < 0) 308 305 return err; 309 306 mixer->audigy2nx_leds[index] = value; ··· 399 392 400 393 for (i = 0; jacks[i].name; ++i) { 401 394 snd_iprintf(buffer, "%s: ", jacks[i].name); 402 - err = snd_usb_ctl_msg(mixer->chip->dev, 395 + down_read(&mixer->chip->shutdown_rwsem); 396 + if (mixer->chip->shutdown) 397 + err = 0; 398 + else 399 + err = snd_usb_ctl_msg(mixer->chip->dev, 403 400 usb_rcvctrlpipe(mixer->chip->dev, 0), 404 401 UAC_GET_MEM, USB_DIR_IN | USB_TYPE_CLASS | 405 402 USB_RECIP_INTERFACE, 0, 406 403 jacks[i].unitid << 8, buf, 3); 404 + up_read(&mixer->chip->shutdown_rwsem); 407 405 if (err == 3 && (buf[0] == 3 || buf[0] == 6)) 408 406 snd_iprintf(buffer, "%02x %02x\n", buf[1], buf[2]); 409 407 else ··· 438 426 else 439 427 new_status = old_status & ~0x02; 440 428 changed = new_status != old_status; 441 - err = snd_usb_ctl_msg(mixer->chip->dev, 429 + down_read(&mixer->chip->shutdown_rwsem); 430 + if (mixer->chip->shutdown) 431 + err = -ENODEV; 432 + else 433 + err = snd_usb_ctl_msg(mixer->chip->dev, 442 434 usb_sndctrlpipe(mixer->chip->dev, 0), 0x08, 443 435 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER, 444 436 50, 0, &new_status, 1); 437 + up_read(&mixer->chip->shutdown_rwsem); 445 438 if (err < 0) 446 439 return err; 447 440 mixer->xonar_u1_status = new_status; ··· 485 468 u8 bRequest = (kcontrol->private_value >> 16) & 0xff; 486 469 u16 wIndex = kcontrol->private_value & 0xffff; 487 470 u8 tmp; 471 + int ret; 488 472 489 - int ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), bRequest, 473 + down_read(&mixer->chip->shutdown_rwsem); 474 + if (mixer->chip->shutdown) 475 + ret = -ENODEV; 476 + else 477 + ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), bRequest, 490 478 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 491 479 0, cpu_to_le16(wIndex), 492 480 &tmp, sizeof(tmp), 1000); 481 + up_read(&mixer->chip->shutdown_rwsem); 493 482 494 483 if (ret < 0) { 495 484 snd_printk(KERN_ERR ··· 516 493 u8 bRequest = (kcontrol->private_value >> 16) & 0xff; 517 494 u16 wIndex = kcontrol->private_value & 0xffff; 518 495 u16 wValue = ucontrol->value.integer.value[0]; 496 + int ret; 519 497 520 - int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), bRequest, 498 + down_read(&mixer->chip->shutdown_rwsem); 499 + if (mixer->chip->shutdown) 500 + ret = -ENODEV; 501 + else 502 + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), bRequest, 521 503 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, 522 504 cpu_to_le16(wValue), cpu_to_le16(wIndex), 523 505 NULL, 0, 1000); 506 + up_read(&mixer->chip->shutdown_rwsem); 524 507 525 508 if (ret < 0) { 526 509 snd_printk(KERN_ERR ··· 685 656 return -EINVAL; 686 657 687 658 688 - err = snd_usb_ctl_msg(chip->dev, 659 + down_read(&mixer->chip->shutdown_rwsem); 660 + if (mixer->chip->shutdown) 661 + err = -ENODEV; 662 + else 663 + err = snd_usb_ctl_msg(chip->dev, 689 664 usb_rcvctrlpipe(chip->dev, 0), UAC_GET_CUR, 690 665 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, 691 666 validx << 8, snd_usb_ctrl_intf(chip) | (id << 8), 692 667 value, val_len); 668 + up_read(&mixer->chip->shutdown_rwsem); 693 669 if (err < 0) 694 670 return err; 695 671 ··· 737 703 738 704 if (!pval->is_cached) { 739 705 /* Read current value */ 740 - err = snd_usb_ctl_msg(chip->dev, 706 + down_read(&mixer->chip->shutdown_rwsem); 707 + if (mixer->chip->shutdown) 708 + err = -ENODEV; 709 + else 710 + err = snd_usb_ctl_msg(chip->dev, 741 711 usb_rcvctrlpipe(chip->dev, 0), UAC_GET_CUR, 742 712 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, 743 713 validx << 8, snd_usb_ctrl_intf(chip) | (id << 8), 744 714 value, val_len); 715 + up_read(&mixer->chip->shutdown_rwsem); 745 716 if (err < 0) 746 717 return err; 747 718 ··· 758 719 if (cur_val != new_val) { 759 720 value[0] = new_val; 760 721 value[1] = 0; 761 - err = snd_usb_ctl_msg(chip->dev, 722 + down_read(&mixer->chip->shutdown_rwsem); 723 + if (mixer->chip->shutdown) 724 + err = -ENODEV; 725 + else 726 + err = snd_usb_ctl_msg(chip->dev, 762 727 usb_sndctrlpipe(chip->dev, 0), UAC_SET_CUR, 763 728 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, 764 729 validx << 8, snd_usb_ctrl_intf(chip) | (id << 8), 765 730 value, val_len); 731 + up_read(&mixer->chip->shutdown_rwsem); 766 732 if (err < 0) 767 733 return err; 768 734
+34 -19
sound/usb/pcm.c
··· 71 71 unsigned int hwptr_done; 72 72 73 73 subs = (struct snd_usb_substream *)substream->runtime->private_data; 74 + if (subs->stream->chip->shutdown) 75 + return SNDRV_PCM_POS_XRUN; 74 76 spin_lock(&subs->lock); 75 77 hwptr_done = subs->hwptr_done; 76 78 substream->runtime->delay = snd_usb_pcm_delay(subs, ··· 446 444 { 447 445 int ret; 448 446 449 - mutex_lock(&subs->stream->chip->shutdown_mutex); 450 447 /* format changed */ 451 448 stop_endpoints(subs, 0, 0, 0); 452 449 ret = snd_usb_endpoint_set_params(subs->data_endpoint, ··· 456 455 subs->cur_audiofmt, 457 456 subs->sync_endpoint); 458 457 if (ret < 0) 459 - goto unlock; 458 + return ret; 460 459 461 460 if (subs->sync_endpoint) 462 461 ret = snd_usb_endpoint_set_params(subs->data_endpoint, ··· 466 465 subs->cur_rate, 467 466 subs->cur_audiofmt, 468 467 NULL); 469 - 470 - unlock: 471 - mutex_unlock(&subs->stream->chip->shutdown_mutex); 472 468 return ret; 473 469 } 474 470 ··· 503 505 return -EINVAL; 504 506 } 505 507 506 - if ((ret = set_format(subs, fmt)) < 0) 508 + down_read(&subs->stream->chip->shutdown_rwsem); 509 + if (subs->stream->chip->shutdown) 510 + ret = -ENODEV; 511 + else 512 + ret = set_format(subs, fmt); 513 + up_read(&subs->stream->chip->shutdown_rwsem); 514 + if (ret < 0) 507 515 return ret; 508 516 509 517 subs->interface = fmt->iface; ··· 531 527 subs->cur_audiofmt = NULL; 532 528 subs->cur_rate = 0; 533 529 subs->period_bytes = 0; 534 - mutex_lock(&subs->stream->chip->shutdown_mutex); 535 - stop_endpoints(subs, 0, 1, 1); 536 - deactivate_endpoints(subs); 537 - mutex_unlock(&subs->stream->chip->shutdown_mutex); 530 + down_read(&subs->stream->chip->shutdown_rwsem); 531 + if (!subs->stream->chip->shutdown) { 532 + stop_endpoints(subs, 0, 1, 1); 533 + deactivate_endpoints(subs); 534 + } 535 + up_read(&subs->stream->chip->shutdown_rwsem); 538 536 return snd_pcm_lib_free_vmalloc_buffer(substream); 539 537 } 540 538 ··· 558 552 return -ENXIO; 559 553 } 560 554 561 - if (snd_BUG_ON(!subs->data_endpoint)) 562 - return -EIO; 555 + down_read(&subs->stream->chip->shutdown_rwsem); 556 + if (subs->stream->chip->shutdown) { 557 + ret = -ENODEV; 558 + goto unlock; 559 + } 560 + if (snd_BUG_ON(!subs->data_endpoint)) { 561 + ret = -EIO; 562 + goto unlock; 563 + } 563 564 564 565 ret = set_format(subs, subs->cur_audiofmt); 565 566 if (ret < 0) 566 - return ret; 567 + goto unlock; 567 568 568 569 iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface); 569 570 alts = &iface->altsetting[subs->cur_audiofmt->altset_idx]; ··· 580 567 subs->cur_audiofmt, 581 568 subs->cur_rate); 582 569 if (ret < 0) 583 - return ret; 570 + goto unlock; 584 571 585 572 if (subs->need_setup_ep) { 586 573 ret = configure_endpoint(subs); 587 574 if (ret < 0) 588 - return ret; 575 + goto unlock; 589 576 subs->need_setup_ep = false; 590 577 } 591 578 ··· 605 592 /* for playback, submit the URBs now; otherwise, the first hwptr_done 606 593 * updates for all URBs would happen at the same time when starting */ 607 594 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) 608 - return start_endpoints(subs, 1); 595 + ret = start_endpoints(subs, 1); 609 596 610 - return 0; 597 + unlock: 598 + up_read(&subs->stream->chip->shutdown_rwsem); 599 + return ret; 611 600 } 612 601 613 602 static struct snd_pcm_hardware snd_usb_hardware = ··· 662 647 return 0; 663 648 } 664 649 /* check whether the period time is >= the data packet interval */ 665 - if (snd_usb_get_speed(subs->dev) != USB_SPEED_FULL) { 650 + if (subs->speed != USB_SPEED_FULL) { 666 651 ptime = 125 * (1 << fp->datainterval); 667 652 if (ptime > pt->max || (ptime == pt->max && pt->openmax)) { 668 653 hwc_debug(" > check: ptime %u > max %u\n", ptime, pt->max); ··· 940 925 return err; 941 926 942 927 param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME; 943 - if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL) 928 + if (subs->speed == USB_SPEED_FULL) 944 929 /* full speed devices have fixed data packet interval */ 945 930 ptmin = 1000; 946 931 if (ptmin == 1000)
+2 -2
sound/usb/proc.c
··· 108 108 } 109 109 snd_iprintf(buffer, "\n"); 110 110 } 111 - if (snd_usb_get_speed(subs->dev) != USB_SPEED_FULL) 111 + if (subs->speed != USB_SPEED_FULL) 112 112 snd_iprintf(buffer, " Data packet interval: %d us\n", 113 113 125 * (1 << fp->datainterval)); 114 114 // snd_iprintf(buffer, " Max Packet Size = %d\n", fp->maxpacksize); ··· 124 124 return; 125 125 snd_iprintf(buffer, " Packet Size = %d\n", ep->curpacksize); 126 126 snd_iprintf(buffer, " Momentary freq = %u Hz (%#x.%04x)\n", 127 - snd_usb_get_speed(subs->dev) == USB_SPEED_FULL 127 + subs->speed == USB_SPEED_FULL 128 128 ? get_full_speed_hz(ep->freqm) 129 129 : get_high_speed_hz(ep->freqm), 130 130 ep->freqm >> 16, ep->freqm & 0xffff);
+1
sound/usb/stream.c
··· 90 90 subs->direction = stream; 91 91 subs->dev = as->chip->dev; 92 92 subs->txfr_quirk = as->chip->txfr_quirk; 93 + subs->speed = snd_usb_get_speed(subs->dev); 93 94 94 95 snd_usb_set_pcm_ops(as->pcm, stream); 95 96
+1 -1
sound/usb/usbaudio.h
··· 37 37 struct usb_interface *pm_intf; 38 38 u32 usb_id; 39 39 struct mutex mutex; 40 - struct mutex shutdown_mutex; 40 + struct rw_semaphore shutdown_rwsem; 41 41 unsigned int shutdown:1; 42 42 unsigned int probing:1; 43 43 unsigned int autosuspended:1;