Linux 3.7.10
Greg KH
maintainerI'm announcing the release of the 3.7.10 kernel.
All users of the 3.7 kernel series must upgrade.
Note, this is the LAST 3.7 kernel to be released, it is now end-of-life and all users of the 3.7 kernel series should be moving to the 3.8 series at this point in time.
The updated 3.7.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.7.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/s390/kvm/kvm-s390.c | 8 + arch/sparc/Kconfig | 1 arch/sparc/include/asm/hugetlb.h | 1 arch/sparc/include/asm/page_64.h | 4 arch/sparc/include/asm/pgtable_64.h | 14 -- arch/sparc/include/asm/tsb.h | 28 +++- arch/sparc/kernel/tsb.S | 39 +++++- arch/sparc/mm/fault_64.c | 9 + arch/sparc/mm/gup.c | 59 +++++++++ arch/sparc/mm/init_64.c | 62 ++++++---- arch/sparc/mm/tlb.c | 11 + arch/sparc/mm/tsb.c | 2 arch/x86/Kconfig | 4 arch/x86/include/asm/mmzone_32.h | 6 arch/x86/kernel/cpu/mshyperv.c | 3 arch/x86/mm/numa.c | 32 +---- arch/x86/mm/numa_32.c | 161 -------------------------- arch/x86/mm/numa_internal.h | 6 arch/x86/power/hibernate_32.c | 2 arch/x86/xen/spinlock.c | 1 drivers/base/bus.c | 4 drivers/base/dd.c | 2 drivers/block/sunvdc.c | 2 drivers/gpu/drm/i915/intel_pm.c | 2 drivers/gpu/drm/nouveau/core/subdev/vm/base.c | 4 drivers/net/wireless/b43/dma.h | 2 drivers/net/wireless/p54/p54usb.c | 2 drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 1 drivers/net/wireless/rtlwifi/usb.c | 44 ++++--- drivers/s390/kvm/kvm_virtio.c | 38 ++++-- drivers/staging/zram/zram_drv.c | 9 - drivers/target/target_core_device.c | 8 + drivers/tty/n_gsm.c | 42 ++++++ drivers/tty/serial/imx.c | 11 + drivers/tty/tty_ioctl.c | 4 drivers/tty/vt/vt.c | 2 drivers/usb/serial/ftdi_sio.c | 20 +-- drivers/usb/serial/mct_u232.c | 22 +-- drivers/usb/serial/quatech2.c | 18 +- drivers/usb/serial/sierra.c | 8 - drivers/usb/serial/ssu100.c | 19 +-- drivers/usb/serial/usb-serial.c | 14 +- drivers/usb/serial/usb_wwan.c | 8 - drivers/video/backlight/adp8860_bl.c | 2 drivers/video/backlight/adp8870_bl.c | 2 drivers/xen/evtchn.c | 10 + drivers/xen/xen-pciback/pciback_ops.c | 14 +- fs/block_dev.c | 1 fs/gfs2/bmap.c | 4 fs/lockd/clntproc.c | 3 fs/nfs/blocklayout/blocklayout.c | 1 fs/nfs/nfs4proc.c | 3 fs/nfs/objlayout/objio_osd.c | 1 fs/notify/inotify/inotify_user.c | 4 fs/ocfs2/dlmglue.c | 5 include/uapi/linux/serial_core.h | 2 include/uapi/linux/usb/audio.h | 6 kernel/futex.c | 2 kernel/futex_compat.c | 2 kernel/hrtimer.c | 36 ++--- kernel/irq/spurious.c | 7 - kernel/posix-cpu-timers.c | 23 +++ kernel/timeconst.pl | 6 kernel/workqueue.c | 2 mm/fadvise.c | 18 ++ mm/mmu_notifier.c | 82 ++++++------- mm/page_alloc.c | 15 +- mm/shmem.c | 10 + net/core/sock_diag.c | 3 sound/pci/ali5451/ali5451.c | 2 sound/pci/hda/patch_hdmi.c | 18 ++ sound/pci/hda/patch_realtek.c | 1 sound/pci/rme32.c | 2 sound/usb/quirks-table.h | 2 tools/perf/Makefile | 4 tools/perf/ui/hist.c | 6 tools/perf/util/parse-events.y | 1 tools/perf/util/pmu.y | 1 79 files changed, 572 insertions(+), 470 deletions(-)
Adam Jackson (1):
drm/i915: Fix up mismerge of 3490ea5d in 3.7.y
Anssi Hannula (1):
ALSA: hda - Fix default multichannel HDMI mapping regression
Bjorn Helgaas (1):
Driver core: treat unregistered bus_types as having no devices
Bob Peterson (1):
GFS2: Get a block reservation before resizing a file
Christian Borntraeger (1):
s390/kvm: Fix store status for ACRS/FPRS
Clemens Ladisch (1):
ALSA: usb-audio: fix Roland A-PRO support
Cornelia Huck (1):
KVM: s390: Handle hosts not supporting s390-virtio.
Dave Hansen (1):
x86-32, mm: Rip out x86_32 NUMA remapping code
David Henningsson (1):
ALSA: hda - hdmi: ELD shouldn't be valid after unplug
David S. Miller (7):
sunvdc: Fix off-by-one in generic_request().
sparc64: Add missing HAVE_ARCH_TRANSPARENT_HUGEPAGE.
sparc64: Fix get_user_pages_fast() wrt. THP.
sparc64: Fix gfp_flags setting in tsb_grow().
sparc64: Handle hugepage TSB being NULL.
sparc64: Fix tsb_grow() in atomic context.
sparc64: Fix huge PMD to PTE translation for sun4u in TLB miss handler.
Denis Efremov (2):
ALSA: ali5451: remove irq enabling in pointer callback
ALSA: rme32.c irq enabling after spin_lock_irq
Dirkjan Bussink (1):
tty: Prevent deadlock in n_gsm driver
Fernando Luis Vazquez Cao (1):
ALSA: hda - Workaround for silent output on Sony Vaio VGC-LN51JGB with ALC889
Grant Likely (1):
drivercore: Fix ordering between deferred_probe and exiting initcalls
Greg Kroah-Hartman (1):
Linux 3.7.10
Greg Thelen (1):
tmpfs: fix use-after-free of mempolicy object
H. Peter Anvin (3):
x86-32, mm: Remove reference to resume_map_numa_kva() x86-32, mm: Remove reference to alloc_remap() timeconst.pl: Eliminate Perl warning
Jan Beulich (1):
xen-pciback: rate limit error messages from xen_pcibk_enable_msi{,x}()
Jim Somerville (1):
inotify: remove broken mask checks causing unmount to be EINVAL
Jiri Olsa (1):
perf hists: Fix period symbol_conf.field_sep display
Johan Hovold (1):
USB: serial: fix null-pointer dereferences on disconnect
Junxiao Bi (1):
ocfs2: unlock super lock if lockres refresh failed
Jussi Kivilinna (1):
rtlwifi: usb: allocate URB control message setup_packet and data buffer separately
Konstantin Khlebnikov (1):
workqueue: un-GPL function delayed_work_timer_fn()
Larry Finger (2):
b43: Increase number of RX DMA slots
rtlwifi: rtl8192cu: Add new USB ID
Lars-Peter Clausen (1):
drivers/video/backlight/adp88?0_bl.c: fix resume
Leonid Shatz (1):
hrtimer: Prevent hrtimer_enqueue_reprogram race
Linus Torvalds (1):
mm: fix pageblock bitmap allocation
MITSUNARI Shigeo (1):
fs/block_dev.c: page cache wrongly left invalidated after revalidate_disk()
Marcin Slusarz (1):
drm/nouveau/vm: fix memory corruption when pgt allocation fails
Mathias Krause (1):
sock_diag: Fix out-of-bounds access to sock_diag_handlers[]
Mel Gorman (1):
mm/fadvise.c: drain all pagevecs if POSIX_FADV_DONTNEED fails to discard all pages
Michael Chan (1):
serial_core: Fix type definition for PORT_BRCM_TRUMANAGE.
Minchan Kim (1):
zram: Fix deadlock bug in partial read/write
Nicholas Bellinger (1):
target: Fix divide by zero bug in fabric_max_sectors for unconfigured devices
Nicolas Pitre (1):
tty vt: fix character insertion overflow
Olaf Hering (1):
x86: Hyper-V: register clocksource only if its advertised
Oleg Nesterov (1):
tty: set_termios/set_termiox should not return -EINTR
Pawel Moll (1):
ALSA: usb: Fix Processing Unit Descriptor parsers
Robin Holt (1):
mmu_notifier_unregister NULL Pointer deref and multiple ->release() callouts
Stanislaw Gruszka (1):
posix-cpu-timers: Fix nanosleep task_struct leak
Stefan Bader (1):
xen: Send spinlock IPI to all waiters
Takashi Iwai (1):
ALSA: hda - Release assigned pin/cvt at error path of hdmi_pcm_open()
Thomas Gleixner (3):
genirq: Avoid deadlock in spurious handling
serial: imx: Fix recursive locking bug
futex: Revert "futex: Mark get_robust_list as deprecated"
Tomasz Guszkowski (1):
p54usb: corrected USB ID for T-Com Sinus 154 data II
Trond Myklebust (1):
NLM: Ensure that we resend all pending blocking locks after a reclaim
Vinson Lee (1):
perf tools: Fix build with bison 2.3 and older.
Wei Liu (1):
xen: close evtchn port if binding to irq fails
Weston Andros Adamson (1):
NFSv4.1: Don't decode skipped layoutgets
fanchaoting (1):
umount oops when remove blocklayoutdriver first
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 7 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Terrified Chipmunk
arch/s390/kvm/kvm-s390.c +8 -0
@@ -763,6 +763,14 @@ int kvm_s390_vcpu_store_status(struct kvm_vcpu *vcpu, unsigned long addr) }else prefix =0 ; +/* +* The guest FPRS and ACRS are in the host FPRS/ACRS due to the lazy +* copying in vcpu load/put. Lets update our copies before we save +* it into the save area +*/ +save_fp_regs (&vcpu->arch.guest_fpregs); +save_access_regs (vcpu->run->s.regs.acrs); +if (__guestcopy (vcpu, addr + offsetof(struct save_area , fp_regs), vcpu->arch.guest_fpregs.fprs,128 , prefix))return -EFAULT ;
arch/sparc/Kconfig +1 -0
@@ -61,6 +61,7 @@ config SPARC64 select HAVE_MEMBLOCK select HAVE_MEMBLOCK_NODE_MAP select HAVE_SYSCALL_WRAPPERS + select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_DYNAMIC_FTRACE select HAVE_FTRACE_MCOUNT_RECORD select HAVE_SYSCALL_TRACEPOINTS
arch/sparc/include/asm/hugetlb.h +0 -1
@@ -12,7 +12,6 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,static inline void hugetlb_prefault_arch_hook (struct mm_struct *mm) { -hugetlb_setup (mm); } static inline int is_hugepage_only_range(struct mm_struct *mm,
arch/sparc/include/asm/page_64.h +2 -2
@@ -27,8 +27,8 @@#ifndef __ASSEMBLY__#if defined(CONFIG_HUGETLB_PAGE ) || defined(CONFIG_TRANSPARENT_HUGEPAGE ) -struct mm_struct ; -extern void hugetlb_setup (struct mm_struct *mm); +struct pt_regs ; +extern void hugetlb_setup (struct pt_regs *regs);#endif #define WANT_PAGE_VIRTUAL
arch/sparc/include/asm/pgtable_64.h +6 -8
@@ -71,7 +71,6 @@#define PMD_PADDR _AC(0xfffffffe,UL)#define PMD_PADDR_SHIFT _AC(11,UL) -#ifdef CONFIG_TRANSPARENT_HUGEPAGE #define PMD_ISHUGE _AC(0x00000001,UL)/* This is the PMD layout when PMD_ISHUGE is set. With 4MB huge
@@ -86,7 +85,6 @@#define PMD_HUGE_ACCESSED _AC(0x00000080,UL)#define PMD_HUGE_EXEC _AC(0x00000040,UL)#define PMD_HUGE_SPLITTING _AC(0x00000020,UL) -#endif /* PGDs point to PMD tables which are 8K aligned. */ #define PGD_PADDR _AC(0xfffffffc,UL)
@@ -622,6 +620,12 @@ static inline unsigned long pte_special(pte_t pte)return pte_val (pte) & _PAGE_SPECIAL; } +static inline int pmd_large (pmd_t pmd) +{ +return (pmd_val (pmd) & (PMD_ISHUGE |PMD_HUGE_PRESENT )) == + (PMD_ISHUGE |PMD_HUGE_PRESENT ); +} +#ifdef CONFIG_TRANSPARENT_HUGEPAGE static inline int pmd_young (pmd_t pmd) {
@@ -640,12 +644,6 @@ static inline unsigned long pmd_pfn(pmd_t pmd)return val >> (PAGE_SHIFT -PMD_PADDR_SHIFT ); } -static inline int pmd_large (pmd_t pmd) -{ -return (pmd_val (pmd) & (PMD_ISHUGE |PMD_HUGE_PRESENT )) == - (PMD_ISHUGE |PMD_HUGE_PRESENT ); -} -static inline int pmd_trans_splitting (pmd_t pmd) { return (pmd_val(pmd) & (PMD_ISHUGE|PMD_HUGE_SPLITTING)) ==
arch/sparc/include/asm/tsb.h +19 -9
@@ -157,17 +157,26 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end; andn REG2, 0x7, REG2; \add REG1 ,REG2 ,REG1 ; -/* This macro exists only to make the PMD translator below easier -* to read. It hides the ELF section switch for the sun4v code -* patching. +/* These macros exists only to make the PMD translator below +* easier to read. It hides the ELF section switch for the +* sun4v code patching. */ -#define OR_PTE_BIT (REG ,NAME ) \ +#define OR_PTE_BIT_1INSN (REG ,NAME ) \ 661: or REG, _PAGE_##NAME##_4U, REG; \ .section .sun4v_1insn_patch, "ax"; \ .word 661b; \ or REG, _PAGE_##NAME##_4V, REG; \ .previous; +#define OR_PTE_BIT_2INSN (REG ,TMP ,NAME ) \ +661: sethi %hi(_PAGE_##NAME##_4U), TMP; \ + or REG, TMP, REG; \ + .section .sun4v_2insn_patch, "ax"; \ + .word 661b; \ + mov -1, TMP; \ + or REG, _PAGE_##NAME##_4V, REG; \ + .previous; +/* Load into REG the PTE value for VALID, CACHE, and SZHUGE. */ #define BUILD_PTE_VALID_SZHUGE_CACHE (REG ) \ 661: sethi %uhi(_PAGE_VALID|_PAGE_SZHUGE_4U), REG; \
@@ -214,12 +223,13 @@ extern struct tsb_phys_patch_entry __tsb_phys_patch, __tsb_phys_patch_end;andn REG1 ,PMD_HUGE_PROTBITS ,REG2 ; \sllx REG2 ,PMD_PADDR_SHIFT ,REG2 ; \/* REG2 now holds PFN << PAGE_SHIFT */ \ - andcc REG1, PMD_HUGE_EXEC, %g0; \ - bne,a,pt %xcc,1f ; \ -OR_PTE_BIT (REG2 ,EXEC ); \ -1: andcc REG1, PMD_HUGE_WRITE, %g0; \ + andcc REG1, PMD_HUGE_WRITE, %g0; \ bne,a,pt %xcc,1f ; \ -OR_PTE_BIT (REG2 ,W ); \ +OR_PTE_BIT_1INSN (REG2 ,W ); \ +1: andcc REG1, PMD_HUGE_EXEC, %g0; \ + be,pt %xcc,1f ; \ + nop; \ +OR_PTE_BIT_2INSN (REG2 ,REG1 ,EXEC ); \/* REG1 can now be clobbered, build final PTE */ \ 1: BUILD_PTE_VALID_SZHUGE_CACHE(REG1); \ ba,pt %xcc,PTE_LABEL ; \
arch/sparc/kernel/tsb.S +35 -4
@@ -136,12 +136,43 @@ tsb_miss_page_table_walk_sun4v_fastpath: nop /* It is a huge page, use huge page TSB entry address we - * calculated above. + * calculated above. If the huge page TSB has not been + * allocated, setup a trap stack and call hugetlb_setup() + * to do so, then return from the trap to replay the TLB + * miss. + * + * This is necessary to handle the case of transparent huge + * pages where we don't really have a non-atomic context + * in which to allocate the hugepage TSB hash table. When + * the 'mm' faults in the hugepage for the first time, we + * thus handle it here. This also makes sure that we can + * allocate the TSB hash table on the correct NUMA node. */ TRAP_LOAD_TRAP_BLOCK(%g7, %g2) - ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g2 - cmp %g2, -1 - movne %xcc, %g2, %g1 + ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g1 + cmp %g1, -1 + bne,pt %xcc, 60f + nop + +661: rdpr %pstate, %g5 + wrpr %g5, PSTATE_AG | PSTATE_MG, %pstate + .section .sun4v_2insn_patch, "ax" + .word 661b + SET_GL(1) + nop + .previous + + rdpr %tl, %g3 + cmp %g3, 1 + bne,pn %xcc, winfix_trampoline + nop + ba,pt %xcc, etrap + rd %pc, %g7 + call hugetlb_setup + add %sp, PTREGS_OFF, %o0 + ba,pt %xcc, rtrap + nop + 60: #endif
arch/sparc/mm/fault_64.c +7 -2
@@ -472,8 +472,13 @@ good_area:#if defined(CONFIG_HUGETLB_PAGE ) || defined(CONFIG_TRANSPARENT_HUGEPAGE ) mm_rss = mm->context.huge_pte_count;if (unlikely (mm_rss > - mm->context.tsb_block[MM_TSB_HUGE ].tsb_rss_limit)) -tsb_grow (mm,MM_TSB_HUGE , mm_rss); + mm->context.tsb_block[MM_TSB_HUGE ].tsb_rss_limit)) { +if (mm->context.tsb_block[MM_TSB_HUGE ].tsb) +tsb_grow (mm,MM_TSB_HUGE , mm_rss); +else +hugetlb_setup (regs); + + }#endif return ;
arch/sparc/mm/gup.c +57 -2
72 lines not on this page · raw message
arch/sparc/mm/init_64.c +41 -21
96 lines not on this page · raw message
arch/sparc/mm/tlb.c +9 -2
@@ -135,8 +135,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr, mm->context.huge_pte_count++; else mm->context.huge_pte_count--; -if (mm->context.huge_pte_count ==1 ) -hugetlb_setup (mm); + +/* Do not try to allocate the TSB hash table if we +* don't have one already. We have various locks held +* and thus we'll end up doing a GFP_KERNEL allocation +* in an atomic context. +* +* Instead, we let the first TLB miss on a hugepage +* take care of this. +*/ }if (!pmd_none (orig)) {
arch/sparc/mm/tsb.c +1 -1
@@ -314,7 +314,7 @@ void tsb_grow(struct mm_struct *mm, unsigned long tsb_index, unsigned long rss) retry_tsb_alloc: gfp_flags =GFP_KERNEL ;if (new_size > (PAGE_SIZE *2 )) - gfp_flags = __GFP_NOWARN | __GFP_NORETRY; + gfp_flags |= __GFP_NOWARN | __GFP_NORETRY; new_tsb =kmem_cache_alloc_node (tsb_caches[new_cache_index], gfp_flags,numa_node_id ());
arch/x86/Kconfig +0 -4
@@ -1255,10 +1255,6 @@ config NODES_SHIFT Specify the maximum number of NUMA Nodes available on the target system. Increases memory reserved to accommodate various tables. -config HAVE_ARCH_ALLOC_REMAP - def_bool y - depends on X86_32 && NUMA - config ARCH_HAVE_MEMORY_PRESENT def_bool y depends on X86_32 && DISCONTIGMEM
arch/x86/include/asm/mmzone_32.h +0 -6
@@ -14,12 +14,6 @@ extern struct pglist_data *node_data[];#include <asm/numaq.h> -extern void resume_map_numa_kva (pgd_t *pgd); - -#else /* !CONFIG_NUMA */ - -static inline void resume_map_numa_kva (pgd_t *pgd) {} -#endif /* CONFIG_NUMA */ #ifdef CONFIG_DISCONTIGMEM
arch/x86/kernel/cpu/mshyperv.c +2 -1
@@ -68,7 +68,8 @@ static void __init ms_hyperv_init_platform(void)printk (KERN_INFO "HyperV: features 0x%x, hints 0x%x\n" , ms_hyperv.features, ms_hyperv.hints); -clocksource_register_hz (&hyperv_cs,NSEC_PER_SEC /100 ); +if (ms_hyperv.features &HV_X64_MSR_TIME_REF_COUNT_AVAILABLE ) +clocksource_register_hz (&hyperv_cs,NSEC_PER_SEC /100 ); }const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
arch/x86/mm/numa.c +11 -21
@@ -193,7 +193,6 @@ int __init numa_add_memblk(int nid, u64 start, u64 end)static void __init setup_node_data (int nid,u64 start,u64 end) {const size_t nd_size =roundup (sizeof (pg_data_t),PAGE_SIZE ); -bool remapped = false;u64 nd_pa;void *nd;int tnid;
@@ -205,37 +204,28 @@ static void __init setup_node_data(int nid, u64 start, u64 end)if (end && (end - start) <NODE_MIN_SIZE )return ; -/* initialize remap allocator before aligning to ZONE_ALIGN */ -init_alloc_remap (nid, start, end); - start =roundup (start,ZONE_ALIGN );printk (KERN_INFO "Initmem setup node %d [mem %#010Lx-%#010Lx]\n" , nid, start, end -1 );/* -* Allocate node data. Try remap allocator first, node-local -* memory and then any node. Never allocate in DMA zone. +* Allocate node data. Try node-local memory and then any node. +* Never allocate in DMA zone. */ - nd =alloc_remap (nid, nd_size); -if (nd) { - nd_pa =__pa (nd); - remapped = true; - }else { - nd_pa =memblock_alloc_nid (nd_size,SMP_CACHE_BYTES , nid); -if (!nd_pa) { -pr_err ("Cannot find %zu bytes in node %d\n" , - nd_size, nid); -return ; - } - nd =__va (nd_pa); + nd_pa =memblock_alloc_nid (nd_size,SMP_CACHE_BYTES , nid); +if (!nd_pa) { +pr_err ("Cannot find %zu bytes in node %d\n" , + nd_size, nid); +return ; } + nd =__va (nd_pa);/* report and initialize */ -printk (KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]%s\n" , - nd_pa, nd_pa + nd_size -1 , remapped ?" (remapped)" :"" ); +printk (KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]\n" , + nd_pa, nd_pa + nd_size -1 ); tnid =early_pfn_to_nid (nd_pa >>PAGE_SHIFT ); -if (!remapped && tnid != nid) +if (tnid != nid)printk (KERN_INFO " NODE_DATA(%d) on node %d\n" , nid, tnid); node_data[nid] = nd;
arch/x86/mm/numa_32.c +0 -161
167 lines not on this page · raw message
arch/x86/mm/numa_internal.h +0 -6
@@ -21,12 +21,6 @@ void __init numa_reset_distance(void);void __init x86_numa_init (void ); -#ifdef CONFIG_X86_64 -static inline void init_alloc_remap (int nid,u64 start,u64 end) { } -#else -void __init init_alloc_remap (int nid,u64 start,u64 end); -#endif -#ifdef CONFIG_NUMA_EMU void __init numa_emulation (struct numa_meminfo *numa_meminfo,int numa_dist_cnt);
arch/x86/power/hibernate_32.c +0 -2
@@ -129,8 +129,6 @@ static int resume_physical_mapping_init(pgd_t *pgd_base) } } -resume_map_numa_kva (pgd_base); -return 0 ; }
arch/x86/xen/spinlock.c +0 -1
@@ -328,7 +328,6 @@ static noinline void xen_spin_unlock_slow(struct xen_spinlock *xl)if (per_cpu (lock_spinners, cpu) == xl) {ADD_STATS (released_slow_kicked,1 );xen_send_IPI_one (cpu,XEN_SPIN_UNLOCK_VECTOR ); -break ; } } }
drivers/base/bus.c +2 -2
@@ -293,7 +293,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,struct device *dev;int error =0 ; -if (!bus) +if (!bus || !bus->p)return -EINVAL ; klist_iter_init_node(&bus->p->klist_devices, &i,
@@ -327,7 +327,7 @@ struct device *bus_find_device(struct bus_type *bus,struct klist_iter i;struct device *dev; -if (!bus) +if (!bus || !bus->p)return NULL ; klist_iter_init_node(&bus->p->klist_devices, &i,
drivers/base/dd.c +2 -0
@@ -172,6 +172,8 @@ static int deferred_probe_initcall(void) driver_deferred_probe_enable = true;driver_deferred_probe_trigger (); +/* Sort as many dependencies as possible before exiting initcalls */ +flush_workqueue (deferred_wq);return 0 ; }late_initcall (deferred_probe_initcall);
drivers/block/sunvdc.c +1 -1
@@ -461,7 +461,7 @@ static int generic_request(struct vdc_port *port, u8 op, void *buf, int len)int op_len, err;void *req_buf; -if (!(((u64 )1 << ((u64 )op -1 )) & port->operations)) +if (!(((u64 )1 << (u64 )op) & port->operations))return -EOPNOTSUPP ;switch (op) {
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -1474,7 +1474,7 @@ static void i9xx_update_wm(struct drm_device *dev) fifo_size = dev_priv->display.get_fifo_size (dev,0 ); crtc =intel_get_crtc_for_plane (dev,0 ); -if (crtc->enabled && crtc->fb) { +if (intel_crtc_active (crtc)) { planea_wm = intel_calculate_wm(crtc->mode.clock, wm_info, fifo_size, crtc->fb->bits_per_pixel / 8,
drivers/gpu/drm/nouveau/core/subdev/vm/base.c +3 -1
@@ -352,7 +352,7 @@ nouveau_vm_create(struct nouveau_vmmgr *vmm, u64 offset, u64 length,u64 mm_length = (offset + length) - mm_offset;int ret; - vm = *pvm =kzalloc (sizeof (*vm),GFP_KERNEL ); + vm =kzalloc (sizeof (*vm),GFP_KERNEL );if (!vm)return -ENOMEM ;
@@ -376,6 +376,8 @@ nouveau_vm_create(struct nouveau_vmmgr *vmm, u64 offset, u64 length,return ret; } + *pvm = vm; +return 0 ; }
drivers/net/wireless/b43/dma.h +1 -1
@@ -169,7 +169,7 @@ struct b43_dmadesc_generic {/* DMA engine tuning knobs */ #define B43_TXRING_SLOTS 256 -#define B43_RXRING_SLOTS 64 +#define B43_RXRING_SLOTS 256#define B43_DMA0_RX_FW598_BUFSIZE (B43_DMA0_RX_FW598_FO + IEEE80211_MAX_FRAME_LEN)#define B43_DMA0_RX_FW351_BUFSIZE (B43_DMA0_RX_FW351_FO + IEEE80211_MAX_FRAME_LEN)
drivers/net/wireless/p54/p54usb.c +1 -1
@@ -84,8 +84,8 @@ static struct usb_device_id p54u_table[] = { {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */ {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */ {USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */ - {USB_DEVICE(0x083a, 0x4503)}, /* T-Com Sinus 154 data II */ {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */ + {USB_DEVICE(0x083a, 0x4531)}, /* T-Com Sinus 154 data II */ {USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */ {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */ {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */
drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +1 -0
@@ -285,6 +285,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = { {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)},/* RTL8188CUS-VL */ {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818a, rtl92cu_hal_cfg)}, + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x819a, rtl92cu_hal_cfg)},/* 8188 Combo for BC4 */ {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)},
drivers/net/wireless/rtlwifi/usb.c +28 -16
75 lines not on this page · raw message
drivers/s390/kvm/kvm_virtio.c +30 -8
@@ -422,6 +422,26 @@ static void kvm_extint_handler(struct ext_code ext_code, }/* +* For s390-virtio, we expect a page above main storage containing +* the virtio configuration. Try to actually load from this area +* in order to figure out if the host provides this page. +*/ +static int __init test_devices_support (unsigned long addr) +{ +int ret = -EIO ; + + asmvolatile ( +"0: lura 0,%1\n" +"1: xgr %0,%0\n" +"2:\n" + EX_TABLE(0b,2b) +EX_TABLE (1b ,2b ) + : "+d" (ret) + : "a" (addr) + : "0", "cc"); + return ret; +} +/* * Init function for virtio * devices are in a single page above top of "normal" mem */
@@ -432,21 +452,23 @@ static int __init kvm_devices_init(void)if (!MACHINE_IS_KVM )return -ENODEV ; +if (test_devices_support (real_memory_size) <0 ) +return -ENODEV ; + + rc =vmem_add_mapping (real_memory_size,PAGE_SIZE ); +if (rc) +return rc; + + kvm_devices = (void *) real_memory_size; + kvm_root =root_device_register ("kvm_s390" );if (IS_ERR (kvm_root)) { rc =PTR_ERR (kvm_root);printk (KERN_ERR "Could not register kvm_s390 root device" ); +vmem_remove_mapping (real_memory_size,PAGE_SIZE );return rc; } - rc =vmem_add_mapping (real_memory_size,PAGE_SIZE ); -if (rc) { -root_device_unregister (kvm_root); -return rc; - } - - kvm_devices = (void *) real_memory_size; -INIT_WORK (&hotplug_work, hotplug_devices);service_subclass_irq_register ();
drivers/staging/zram/zram_drv.c +5 -4
@@ -228,11 +228,12 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,return 0 ; } - user_mem =kmap_atomic (page);if (is_partial_io (bvec))/* Use a temporary buffer to decompress the page */ - uncmem =kmalloc (PAGE_SIZE ,GFP_KERNEL ); -else + uncmem =kmalloc (PAGE_SIZE ,GFP_NOIO ); + + user_mem =kmap_atomic (page); +if (!is_partial_io (bvec)) uncmem = user_mem;if (!uncmem) {
@@ -279,7 +280,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index,* This is a partial IO. We need to read the full page * before to write the changes. */ - uncmem =kmalloc (PAGE_SIZE ,GFP_KERNEL ); + uncmem =kmalloc (PAGE_SIZE ,GFP_NOIO );if (!uncmem) {pr_info ("Error allocating temp memory!\n" ); ret = -ENOMEM ;
drivers/target/target_core_device.c +7 -1
@@ -1195,6 +1195,8 @@ int se_dev_set_queue_depth(struct se_device *dev, u32 queue_depth)int se_dev_set_fabric_max_sectors (struct se_device *dev,u32 fabric_max_sectors) { +int block_size = dev->se_sub_dev->se_dev_attrib.block_size; +if (atomic_read (&dev->dev_export_obj.obj_access_count)) { pr_err("dev[%p]: Unable to change SE Device" " fabric_max_sectors while dev_export_obj: %d count exists\n",
@@ -1232,8 +1234,12 @@ int se_dev_set_fabric_max_sectors(struct se_device *dev, u32 fabric_max_sectors)/* * Align max_sectors down to PAGE_SIZE to follow transport_allocate_data_tasks() */ +if (!block_size) { + block_size =512 ; +pr_warn ("Defaulting to 512 for zero block_size\n" ); + } fabric_max_sectors =se_dev_align_max_sectors (fabric_max_sectors, - dev->se_sub_dev->se_dev_attrib.block_size); + block_size); dev->se_sub_dev->se_dev_attrib.fabric_max_sectors = fabric_max_sectors; pr_debug("dev[%p]: SE Device max_sectors changed to %u\n",
drivers/tty/n_gsm.c +41 -1
137 lines not on this page · raw message
drivers/tty/serial/imx.c +9 -2
@@ -1213,8 +1213,14 @@ imx_console_write(struct console *co, const char *s, unsigned int count)struct imx_port_ucrs old_ucr;unsigned int ucr1;unsigned long flags; +int locked =1 ; -spin_lock_irqsave (&sport->port.lock, flags); +if (sport->port.sysrq) + locked =0 ; +else if (oops_in_progress) + locked =spin_trylock_irqsave (&sport->port.lock, flags); +else +spin_lock_irqsave (&sport->port.lock, flags);/* * First, save UCR1/2/3 and then disable interrupts
@@ -1241,7 +1247,8 @@ imx_console_write(struct console *co, const char *s, unsigned int count)imx_port_ucrs_restore (&sport->port, &old_ucr); -spin_unlock_irqrestore (&sport->port.lock, flags); +if (locked) +spin_unlock_irqrestore (&sport->port.lock, flags); }/*
drivers/tty/tty_ioctl.c +2 -2
@@ -617,7 +617,7 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)if (opt &TERMIOS_WAIT ) {tty_wait_until_sent (tty,0 );if (signal_pending (current)) -return -EINTR ; +return -ERESTARTSYS ; }tty_set_termios (tty, &tmp_termios);
@@ -684,7 +684,7 @@ static int set_termiox(struct tty_struct *tty, void __user *arg, int opt)if (opt &TERMIOS_WAIT ) {tty_wait_until_sent (tty,0 );if (signal_pending (current)) -return -EINTR ; +return -ERESTARTSYS ; }mutex_lock (&tty->termios_mutex);
drivers/tty/vt/vt.c +1 -1
@@ -539,7 +539,7 @@ static void insert_char(struct vc_data *vc, unsigned int nr) {unsigned short *p = (unsigned short *) vc->vc_pos; -scr_memmovew (p + nr, p, (vc->vc_cols - vc->vc_x) *2 ); +scr_memmovew (p + nr, p, (vc->vc_cols - vc->vc_x - nr) *2 );scr_memsetw (p, vc->vc_video_erase_char, nr *2 ); vc->vc_need_wrap =0 ;if (DO_UPDATE (vc))
drivers/usb/serial/ftdi_sio.c +9 -11
@@ -1884,24 +1884,22 @@ static void ftdi_dtr_rts(struct usb_serial_port *port, int on) {struct ftdi_private *priv =usb_get_serial_port_data (port); -mutex_lock (&port->serial->disc_mutex); -if (!port->serial->disconnected) { -/* Disable flow control */ -if (!on &&usb_control_msg (port->serial->dev, +/* Disable flow control */ +if (!on) { +if (usb_control_msg (port->serial->dev,usb_sndctrlpipe (port->serial->dev,0 ),FTDI_SIO_SET_FLOW_CTRL_REQUEST ,FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE ,0 , priv->interface,NULL ,0 ,WDR_TIMEOUT ) <0 ) { -dev_err (&port->dev,"error from flowcontrol urb\n" ); +dev_err (&port->dev,"error from flowcontrol urb\n" ); } -/* drop RTS and DTR */ -if (on) -set_mctrl (port,TIOCM_DTR |TIOCM_RTS ); -else -clear_mctrl (port,TIOCM_DTR |TIOCM_RTS ); } -mutex_unlock (&port->serial->disc_mutex); +/* drop RTS and DTR */ +if (on) +set_mctrl (port,TIOCM_DTR |TIOCM_RTS ); +else +clear_mctrl (port,TIOCM_DTR |TIOCM_RTS ); }/*
drivers/usb/serial/mct_u232.c +9 -13
@@ -503,19 +503,15 @@ static void mct_u232_dtr_rts(struct usb_serial_port *port, int on)unsigned int control_state;struct mct_u232_private *priv =usb_get_serial_port_data (port); -mutex_lock (&port->serial->disc_mutex); -if (!port->serial->disconnected) { -/* drop DTR and RTS */ -spin_lock_irq (&priv->lock); -if (on) - priv->control_state |=TIOCM_DTR |TIOCM_RTS ; -else - priv->control_state &= ~(TIOCM_DTR |TIOCM_RTS ); - control_state = priv->control_state; -spin_unlock_irq (&priv->lock); -mct_u232_set_modem_ctrl (port, control_state); - } -mutex_unlock (&port->serial->disc_mutex); +spin_lock_irq (&priv->lock); +if (on) + priv->control_state |=TIOCM_DTR |TIOCM_RTS ; +else + priv->control_state &= ~(TIOCM_DTR |TIOCM_RTS ); + control_state = priv->control_state; +spin_unlock_irq (&priv->lock); + +mct_u232_set_modem_ctrl (port, control_state); }static void mct_u232_close (struct usb_serial_port *port)
drivers/usb/serial/quatech2.c +8 -10
@@ -947,19 +947,17 @@ static void qt2_dtr_rts(struct usb_serial_port *port, int on)struct usb_device *dev = port->serial->dev;struct qt2_port_private *port_priv =usb_get_serial_port_data (port); -mutex_lock (&port->serial->disc_mutex); -if (!port->serial->disconnected) { -/* Disable flow control */ -if (!on &&qt2_setregister (dev, port_priv->device_port, +/* Disable flow control */ +if (!on) { +if (qt2_setregister (dev, port_priv->device_port,UART_MCR ,0 ) <0 )dev_warn (&port->dev,"error from flowcontrol urb\n" ); -/* drop RTS and DTR */ -if (on) -update_mctrl (port_priv,TIOCM_DTR |TIOCM_RTS ,0 ); -else -update_mctrl (port_priv,0 ,TIOCM_DTR |TIOCM_RTS ); } -mutex_unlock (&port->serial->disc_mutex); +/* drop RTS and DTR */ +if (on) +update_mctrl (port_priv,TIOCM_DTR |TIOCM_RTS ,0 ); +else +update_mctrl (port_priv,0 ,TIOCM_DTR |TIOCM_RTS ); }static void qt2_update_msr (struct usb_serial_port *port,unsigned char *ch)
drivers/usb/serial/sierra.c +1 -7
@@ -861,19 +861,13 @@ static int sierra_open(struct tty_struct *tty, struct usb_serial_port *port)static void sierra_dtr_rts (struct usb_serial_port *port,int on) { -struct usb_serial *serial = port->serial;struct sierra_port_private *portdata; portdata =usb_get_serial_port_data (port); portdata->rts_state = on; portdata->dtr_state = on; -if (serial->dev) { -mutex_lock (&serial->disc_mutex); -if (!serial->disconnected) -sierra_send_setup (port); -mutex_unlock (&serial->disc_mutex); - } +sierra_send_setup (port); }static int sierra_startup (struct usb_serial *serial)
drivers/usb/serial/ssu100.c +8 -11
@@ -508,19 +508,16 @@ static void ssu100_dtr_rts(struct usb_serial_port *port, int on) {struct usb_device *dev = port->serial->dev; -mutex_lock (&port->serial->disc_mutex); -if (!port->serial->disconnected) { -/* Disable flow control */ -if (!on && -ssu100_setregister (dev,0 ,UART_MCR ,0 ) <0 ) +/* Disable flow control */ +if (!on) { +if (ssu100_setregister (dev,0 ,UART_MCR ,0 ) <0 )dev_err (&port->dev,"error from flowcontrol urb\n" ); -/* drop RTS and DTR */ -if (on) -set_mctrl (dev,TIOCM_DTR |TIOCM_RTS ); -else -clear_mctrl (dev,TIOCM_DTR |TIOCM_RTS ); } -mutex_unlock (&port->serial->disc_mutex); +/* drop RTS and DTR */ +if (on) +set_mctrl (dev,TIOCM_DTR |TIOCM_RTS ); +else +clear_mctrl (dev,TIOCM_DTR |TIOCM_RTS ); }static void ssu100_update_msr (struct usb_serial_port *port,u8 msr)
drivers/usb/serial/usb-serial.c +12 -2
@@ -687,10 +687,20 @@ static int serial_carrier_raised(struct tty_port *port)static void serial_dtr_rts (struct tty_port *port,int on) { struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); -struct usb_serial_driver *drv = p->serial->type; +struct usb_serial *serial = p->serial; +struct usb_serial_driver *drv = serial->type; -if (drv->dtr_rts) +if (!drv->dtr_rts) +return ; +/* +* Work-around bug in the tty-layer which can result in dtr_rts +* being called after a disconnect (and tty_unregister_device +* has returned). Remove once bug has been squashed. +*/ +mutex_lock (&serial->disc_mutex); +if (!serial->disconnected) drv->dtr_rts (p, on); +mutex_unlock (&serial->disc_mutex); }static const struct tty_port_operations serial_port_ops = {
drivers/usb/serial/usb_wwan.c +3 -5
@@ -39,7 +39,6 @@void usb_wwan_dtr_rts (struct usb_serial_port *port,int on) { -struct usb_serial *serial = port->serial;struct usb_wwan_port_private *portdata;struct usb_wwan_intf_private *intfdata;
@@ -49,12 +48,11 @@ void usb_wwan_dtr_rts(struct usb_serial_port *port, int on)return ; portdata =usb_get_serial_port_data (port); -mutex_lock (&serial->disc_mutex); +/* FIXME: locking */ portdata->rts_state = on; portdata->dtr_state = on; -if (serial->dev) - intfdata->send_setup (port); -mutex_unlock (&serial->disc_mutex); + + intfdata->send_setup (port); }EXPORT_SYMBOL (usb_wwan_dtr_rts);
drivers/video/backlight/adp8860_bl.c +1 -1
@@ -783,7 +783,7 @@ static int adp8860_i2c_suspend(struct i2c_client *client, pm_message_t message)static int adp8860_i2c_resume (struct i2c_client *client) { -adp8860_set_bits (client,ADP8860_MDCR ,NSTBY ); +adp8860_set_bits (client,ADP8860_MDCR ,NSTBY |BLEN );return 0 ; }
drivers/video/backlight/adp8870_bl.c +1 -1
@@ -957,7 +957,7 @@ static int adp8870_i2c_suspend(struct i2c_client *client, pm_message_t message)static int adp8870_i2c_resume (struct i2c_client *client) { -adp8870_set_bits (client,ADP8870_MDCR ,NSTBY ); +adp8870_set_bits (client,ADP8870_MDCR ,NSTBY |BLEN );return 0 ; }
drivers/xen/evtchn.c +10 -0
@@ -269,6 +269,14 @@ static int evtchn_bind_to_user(struct per_user_data *u, int port) u->name, (void *)(unsigned long)port);if (rc >=0 ) rc =evtchn_make_refcounted (port); +else { +/* bind failed, should close the port now */ +struct evtchn_close close; + close.port = port; +if (HYPERVISOR_event_channel_op (EVTCHNOP_close, &close) !=0 ) +BUG (); +set_port_user (port,NULL ); + }return rc; }
@@ -277,6 +285,8 @@ static void evtchn_unbind_from_user(struct per_user_data *u, int port) {int irq =irq_from_evtchn (port); +BUG_ON (irq <0 ); +unbind_from_irqhandler (irq, (void *)(unsigned long )port);set_port_user (port,NULL );
drivers/xen/xen-pciback/pciback_ops.c +7 -7
@@ -135,7 +135,6 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev, struct pci_dev *dev, struct xen_pci_op *op) { struct xen_pcibk_dev_data *dev_data; -int otherend = pdev->xdev->otherend_id;int status;if (unlikely (verbose_request))
@@ -144,8 +143,9 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev, status =pci_enable_msi (dev);if (status) { -printk (KERN_ERR "error enable msi for guest %x status %x\n" , - otherend, status); +pr_warn_ratelimited (DRV_NAME ": %s: error enabling MSI for guest %u: err %d\n" , +pci_name (dev), pdev->xdev->otherend_id, + status); op->value =0 ;return XEN_PCI_ERR_op_failed; }
@@ -223,10 +223,10 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,pci_name (dev), i, op->msix_entries[i].vector); } - }else { - printk(KERN_WARNING DRV_NAME ": %s: failed to enable MSI-X: err %d!\n", - pci_name(dev), result); - } + }else +pr_warn_ratelimited (DRV_NAME ": %s: error enabling MSI-X for guest %u: err %d!\n" , +pci_name (dev), pdev->xdev->otherend_id, + result);kfree (entries); op->value = result;
fs/block_dev.c +1 -0
@@ -994,6 +994,7 @@ int revalidate_disk(struct gendisk *disk)mutex_lock (&bdev->bd_mutex);check_disk_size_change (disk, bdev); + bdev->bd_invalidated =0 ;mutex_unlock (&bdev->bd_mutex);bdput (bdev);return ret;
fs/gfs2/bmap.c +4 -0
@@ -1240,6 +1240,10 @@ int gfs2_setattr_size(struct inode *inode, u64 newsize)inode_dio_wait (inode); + ret =gfs2_rs_alloc (GFS2_I (inode)); +if (ret) +return ret; + oldsize = inode->i_size;if (newsize >= oldsize)return do_grow (inode, newsize);
fs/lockd/clntproc.c +3 -0
@@ -551,6 +551,9 @@ again: status =nlmclnt_block (block, req,NLMCLNT_POLL_TIMEOUT );if (status <0 )break ; +/* Resend the blocking lock request after a server reboot */ +if (resp->status == nlm_lck_denied_grace_period) +continue ;if (resp->status != nlm_lck_blocked)break ; }
fs/nfs/blocklayout/blocklayout.c +1 -0
@@ -1272,6 +1272,7 @@ static const struct nfs_pageio_ops bl_pg_write_ops = {static struct pnfs_layoutdriver_type blocklayout_type = { .id =LAYOUT_BLOCK_VOLUME , .name ="LAYOUT_BLOCK_VOLUME" , + .owner =THIS_MODULE , .read_pagelist = bl_read_pagelist, .write_pagelist = bl_write_pagelist, .alloc_layout_hdr = bl_alloc_layout_hdr,
fs/nfs/nfs4proc.c +2 -1
@@ -6517,7 +6517,8 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags) status =nfs4_wait_for_completion_rpc_task (task);if (status ==0 ) status = task->tk_status; -if (status ==0 ) +/* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */ +if (status ==0 && lgp->res.layoutp->len) lseg =pnfs_layout_process (lgp);rpc_put_task (task);dprintk ("<-- %s status=%d\n" , __func__, status);
fs/nfs/objlayout/objio_osd.c +1 -0
@@ -647,6 +647,7 @@ static struct pnfs_layoutdriver_type objlayout_type = { .flags = PNFS_LAYOUTRET_ON_SETATTR | PNFS_LAYOUTRET_ON_ERROR, + .owner = THIS_MODULE, .alloc_layout_hdr = objlayout_alloc_layout_hdr, .free_layout_hdr = objlayout_free_layout_hdr,
fs/notify/inotify/inotify_user.c +0 -4
@@ -579,8 +579,6 @@ static int inotify_update_existing_watch(struct fsnotify_group *group,/* don't allow invalid bits: we don't want flags set */ mask =inotify_arg_to_mask (arg); -if (unlikely (!(mask &IN_ALL_EVENTS ))) -return -EINVAL ; fsn_mark =fsnotify_find_inode_mark (group, inode);if (!fsn_mark)
@@ -632,8 +630,6 @@ static int inotify_new_watch(struct fsnotify_group *group,/* don't allow invalid bits: we don't want flags set */ mask =inotify_arg_to_mask (arg); -if (unlikely (!(mask &IN_ALL_EVENTS ))) -return -EINVAL ; tmp_i_mark =kmem_cache_alloc (inotify_inode_mark_cachep,GFP_KERNEL );if (unlikely (!tmp_i_mark))
fs/ocfs2/dlmglue.c +4 -1
@@ -2545,6 +2545,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb,* everything is up to the caller :) */ status =ocfs2_should_refresh_lock_res (lockres);if (status <0 ) { +ocfs2_cluster_unlock (osb, lockres, level);mlog_errno (status); goto bail; }
@@ -2553,8 +2554,10 @@ int ocfs2_super_lock(struct ocfs2_super *osb,ocfs2_complete_lock_res_refresh (lockres, status); -if (status <0 ) +if (status <0 ) { +ocfs2_cluster_unlock (osb, lockres, level);mlog_errno (status); + }ocfs2_track_lock_refresh (lockres); } bail:
include/uapi/linux/serial_core.h +1 -1
@@ -50,7 +50,7 @@#define PORT_LPC3220 22/* NXP LPC32xx SoC "Standard" UART */ #define PORT_8250_CIR 23/* CIR infrared port, has its own driver */ #define PORT_XR17V35X 24/* Exar XR17V35x UARTs */ -#define PORT_BRCM_TRUMANAGE 24 +#define PORT_BRCM_TRUMANAGE 25#define PORT_MAX_8250 25/* max port ID */ /*
include/uapi/linux/usb/audio.h +4 -2
@@ -384,14 +384,16 @@ static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_de int protocol) {__u8 control_size =uac_processing_unit_bControlSize (desc, protocol); -return desc->baSourceID[desc->bNrInPins + control_size]; +return *(uac_processing_unit_bmControls (desc, protocol) + + control_size); }static inline __u8 *uac_processing_unit_specific (struct uac_processing_unit_descriptor *desc,int protocol) {__u8 control_size =uac_processing_unit_bControlSize (desc, protocol); -return &desc->baSourceID[desc->bNrInPins + control_size +1 ]; +return uac_processing_unit_bmControls (desc, protocol) + + control_size +1 ; }/* 4.5.2 Class-Specific AS Interface Descriptor */
kernel/futex.c +0 -2
@@ -2471,8 +2471,6 @@ SYSCALL_DEFINE3(get_robust_list, int, pid,if (!futex_cmpxchg_enabled)return -ENOSYS ; -WARN_ONCE (1 ,"deprecated: get_robust_list will be deleted in 2013.\n" ); -rcu_read_lock (); ret = -ESRCH ;
kernel/futex_compat.c +0 -2
@@ -142,8 +142,6 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,if (!futex_cmpxchg_enabled)return -ENOSYS ; -WARN_ONCE (1 ,"deprecated: get_robust_list will be deleted in 2013.\n" ); -rcu_read_lock (); ret = -ESRCH ;
kernel/hrtimer.c +18 -18
@@ -640,21 +640,9 @@ static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)* and expiry check is done in the hrtimer_interrupt or in the softirq. */ static inline int hrtimer_enqueue_reprogram (struct hrtimer *timer, -struct hrtimer_clock_base *base, -int wakeup) +struct hrtimer_clock_base *base) { -if (base->cpu_base->hres_active &&hrtimer_reprogram (timer, base)) { -if (wakeup) { -raw_spin_unlock (&base->cpu_base->lock); -raise_softirq_irqoff (HRTIMER_SOFTIRQ ); -raw_spin_lock (&base->cpu_base->lock); - }else -__raise_softirq_irqoff (HRTIMER_SOFTIRQ ); - -return 1 ; - } - -return 0 ; +return base->cpu_base->hres_active &&hrtimer_reprogram (timer, base); }static inline ktime_t hrtimer_update_base (struct hrtimer_cpu_base *base)
@@ -735,8 +723,7 @@ static inline int hrtimer_switch_to_hres(void) { return 0; }static inline void hrtimer_force_reprogram (struct hrtimer_cpu_base *base,int skip_equal) { }static inline int hrtimer_enqueue_reprogram (struct hrtimer *timer, -struct hrtimer_clock_base *base, -int wakeup) +struct hrtimer_clock_base *base) {return 0 ; }
@@ -995,8 +982,21 @@ int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,* * XXX send_remote_softirq() ? */ -if (leftmost && new_base->cpu_base == &__get_cpu_var (hrtimer_bases)) -hrtimer_enqueue_reprogram (timer, new_base, wakeup); +if (leftmost && new_base->cpu_base == &__get_cpu_var (hrtimer_bases) + &&hrtimer_enqueue_reprogram (timer, new_base)) { +if (wakeup) { +/* +* We need to drop cpu_base->lock to avoid a +* lock ordering issue vs. rq->lock. +*/ +raw_spin_unlock (&new_base->cpu_base->lock); +raise_softirq_irqoff (HRTIMER_SOFTIRQ ); +local_irq_restore (flags); +return ret; + }else { +__raise_softirq_irqoff (HRTIMER_SOFTIRQ ); + } + }unlock_hrtimer_base (timer, &flags);
kernel/irq/spurious.c +3 -4
@@ -80,13 +80,11 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)/* * All handlers must agree on IRQF_SHARED, so we test just the -* first. Check for action->next as well. +* first. */ action = desc->action;if (!action || !(action->flags &IRQF_SHARED ) || - (action->flags & __IRQF_TIMER) || - (action->handler (irq, action->dev_id) ==IRQ_HANDLED ) || - !action->next) + (action->flags & __IRQF_TIMER)) goto out;/* Already running on another processor */
@@ -104,6 +102,7 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)do {if (handle_irq_event (desc) ==IRQ_HANDLED ) ret =IRQ_HANDLED ; +/* Make sure that there is still a valid action */ action = desc->action; }while ((desc->istate &IRQS_PENDING ) && action); desc->istate &= ~IRQS_POLL_INPROGRESS ;
kernel/posix-cpu-timers.c +21 -2
@@ -1422,8 +1422,10 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags,while (!signal_pending (current)) {if (timer.it.cpu.expires.sched ==0 ) {/* -* Our timer fired and was reset. +* Our timer fired and was reset, below +* deletion can not fail. */ +posix_cpu_timer_del (&timer);spin_unlock_irq (&timer.it_lock);return 0 ; }
@@ -1441,9 +1443,26 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags,* We were interrupted by a signal. */ sample_to_timespec (which_clock, timer.it.cpu.expires, rqtp); -posix_cpu_timer_set (&timer,0 , &zero_it, it); + error =posix_cpu_timer_set (&timer,0 , &zero_it, it); +if (!error) { +/* +* Timer is now unarmed, deletion can not fail. +*/ +posix_cpu_timer_del (&timer); + }spin_unlock_irq (&timer.it_lock); +while (error ==TIMER_RETRY ) { +/* +* We need to handle case when timer was or is in the +* middle of firing. In other cases we already freed +* resources. +*/ +spin_lock_irq (&timer.it_lock); + error =posix_cpu_timer_del (&timer); +spin_unlock_irq (&timer.it_lock); + } +if ((it->it_value.tv_sec | it->it_value.tv_nsec) ==0 ) {/* * It actually did fire already.
kernel/timeconst.pl +2 -4
@@ -369,10 +369,8 @@ if ($hz eq '--can') { die "Usage: $0 HZ\n"; } - @val = @{$canned_values{$hz}}; - if (!defined(@val)) { - @val = compute_values($hz); - } + $cv = $canned_values{$hz}; + @val = defined($cv) ? @$cv : compute_values($hz); output($hz, @val); } exit 0;
kernel/workqueue.c +1 -1
@@ -1350,7 +1350,7 @@ void delayed_work_timer_fn(unsigned long __data)/* should have been called from irqsafe timer with irq already off */ __queue_work (dwork->cpu, cwq->wq, &dwork->work); } -EXPORT_SYMBOL_GPL (delayed_work_timer_fn); +EXPORT_SYMBOL (delayed_work_timer_fn);static void __queue_delayed_work (int cpu,struct workqueue_struct *wq,struct delayed_work *dwork,unsigned long delay)
mm/fadvise.c +16 -2
@@ -17,6 +17,7 @@#include <linux/fadvise.h> #include <linux/writeback.h> #include <linux/syscalls.h> +#include <linux/swap.h> #include <asm/unistd.h>
@@ -120,9 +121,22 @@ SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice) start_index = (offset+(PAGE_CACHE_SIZE -1 )) >>PAGE_CACHE_SHIFT ; end_index = (endbyte >>PAGE_CACHE_SHIFT ); -if (end_index >= start_index) -invalidate_mapping_pages (mapping, start_index, +if (end_index >= start_index) { +unsigned long count =invalidate_mapping_pages (mapping, + start_index, end_index); + +/* +* If fewer pages were invalidated than expected then +* it is possible that some of the pages were on +* a per-cpu pagevec for a remote CPU. Drain all +* pagevecs and try again. +*/ +if (count < (end_index - start_index +1 )) { +lru_add_drain_all (); +invalidate_mapping_pages (mapping, start_index, end_index); + } + }break ;default : ret = -EINVAL ;
mm/mmu_notifier.c +42 -40
122 lines not on this page · raw message
mm/page_alloc.c +9 -6
@@ -4351,10 +4351,11 @@ static void __meminit calculate_node_totalpages(struct pglist_data *pgdat,* round what is now in bits to nearest long in bits, then return it in * bytes. */ -static unsigned long __init usemap_size (unsigned long zonesize) +static unsigned long __init usemap_size (unsigned long zone_start_pfn,unsigned long zonesize) {unsigned long usemapsize; + zonesize += zone_start_pfn & (pageblock_nr_pages-1 ); usemapsize =roundup (zonesize, pageblock_nr_pages); usemapsize = usemapsize >> pageblock_order; usemapsize *=NR_PAGEBLOCK_BITS ;
@@ -4364,17 +4365,19 @@ static unsigned long __init usemap_size(unsigned long zonesize) }static void __init setup_usemap (struct pglist_data *pgdat, -struct zone *zone,unsigned long zonesize) +struct zone *zone, +unsigned long zone_start_pfn, +unsigned long zonesize) { -unsigned long usemapsize =usemap_size (zonesize); +unsigned long usemapsize =usemap_size (zone_start_pfn, zonesize); zone->pageblock_flags =NULL ;if (usemapsize) zone->pageblock_flags =alloc_bootmem_node_nopanic (pgdat, usemapsize); }#else -static inline void setup_usemap (struct pglist_data *pgdat, -struct zone *zone,unsigned long zonesize) {} +static inline void setup_usemap (struct pglist_data *pgdat,struct zone *zone, +unsigned long zone_start_pfn,unsigned long zonesize) {}#endif /* CONFIG_SPARSEMEM */ #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
@@ -4492,7 +4495,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,continue ;set_pageblock_order (); -setup_usemap (pgdat, zone, size); +setup_usemap (pgdat, zone, zone_start_pfn, size); ret =init_currently_empty_zone (zone, zone_start_pfn, size,MEMMAP_EARLY );BUG_ON (ret);
mm/shmem.c +8 -2
@@ -2397,6 +2397,7 @@ static int shmem_remount_fs(struct super_block *sb, int *flags, char *data)unsigned long inodes;int error = -EINVAL ; + config.mpol =NULL ;if (shmem_parse_options (data, &config, true))return error;
@@ -2421,8 +2422,13 @@ static int shmem_remount_fs(struct super_block *sb, int *flags, char *data) sbinfo->max_inodes = config.max_inodes; sbinfo->free_inodes = config.max_inodes - inodes; -mpol_put (sbinfo->mpol); - sbinfo->mpol = config.mpol;/* transfers initial ref */ +/* +* Preserve previous mempolicy unless mpol remount option was specified. +*/ +if (config.mpol) { +mpol_put (sbinfo->mpol); + sbinfo->mpol = config.mpol;/* transfers initial ref */ + } out:spin_unlock (&sbinfo->stat_lock);return error;
net/core/sock_diag.c +3 -0
@@ -121,6 +121,9 @@ static int __sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)if (nlmsg_len (nlh) <sizeof (*req))return -EINVAL ; +if (req->sdiag_family >=AF_MAX ) +return -EINVAL ; + hndl =sock_diag_lock_handler (req->sdiag_family);if (hndl ==NULL ) err = -ENOENT ;
sound/pci/ali5451/ali5451.c +1 -1
@@ -1435,7 +1435,7 @@ static snd_pcm_uframes_t snd_ali_pointer(struct snd_pcm_substream *substream)spin_lock (&codec->reg_lock);if (!pvoice->running) { -spin_unlock_irq (&codec->reg_lock); +spin_unlock (&codec->reg_lock);return 0 ; }outb (pvoice->number,ALI_REG (codec,ALI_GC_CIR ));
sound/pci/hda/patch_hdmi.c +13 -5
@@ -714,9 +714,10 @@ static void hdmi_setup_fake_chmap(unsigned char *map, int ca)static void hdmi_setup_channel_mapping (struct hda_codec *codec,hda_nid_t pin_nid,bool non_pcm,int ca, -int channels,unsigned char *map) +int channels,unsigned char *map, +bool chmap_set) { -if (!non_pcm && map) { +if (!non_pcm && chmap_set) {hdmi_manual_setup_channel_mapping (codec, pin_nid, channels, map); }else {
@@ -905,7 +906,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx, pin_nid, channels);hdmi_setup_channel_mapping (codec, pin_nid, non_pcm, ca, - channels, per_pin->chmap); + channels, per_pin->chmap, + per_pin->chmap_set);hdmi_stop_infoframe_trans (codec, pin_nid);hdmi_fill_audio_infoframe (codec, pin_nid, ai.bytes,sizeof (ai));
@@ -915,7 +917,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx,* accordingly */ if (per_pin->non_pcm != non_pcm)hdmi_setup_channel_mapping (codec, pin_nid, non_pcm, ca, - channels, per_pin->chmap); + channels, per_pin->chmap, + per_pin->chmap_set); } per_pin->non_pcm = non_pcm;
@@ -1100,8 +1103,12 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,if (!static_hdmi_pcm && eld->eld_valid) {snd_hdmi_eld_update_pcm_info (eld, hinfo);if (hinfo->channels_min > hinfo->channels_max || - !hinfo->rates || !hinfo->formats) + !hinfo->rates || !hinfo->formats) { + per_cvt->assigned =0 ; + hinfo->nid =0 ; +snd_hda_spdif_ctls_unassign (codec, pin_idx);return -ENODEV ; + } }/* Store the updated parameters */
@@ -1165,6 +1172,7 @@ static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)"HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n" , codec->addr, pin_nid, eld->monitor_present, eld_valid); + eld->eld_valid = false;if (eld_valid) {if (!snd_hdmi_get_eld (eld, codec, pin_nid))snd_hdmi_show_eld (eld);
sound/pci/hda/patch_realtek.c +1 -0
@@ -5388,6 +5388,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {SND_PCI_QUIRK (0x1043 ,0x835f ,"Asus Eee 1601" ,ALC888_FIXUP_EEE1601 ),SND_PCI_QUIRK (0x104d ,0x9047 ,"Sony Vaio TT" ,ALC889_FIXUP_VAIO_TT ),SND_PCI_QUIRK (0x104d ,0x905a ,"Sony Vaio Z" ,ALC882_FIXUP_NO_PRIMARY_HP ), +SND_PCI_QUIRK (0x104d ,0x9043 ,"Sony Vaio VGC-LN51JGB" ,ALC882_FIXUP_NO_PRIMARY_HP ),/* All Apple entries are in codec SSIDs */ SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
sound/pci/rme32.c +1 -1
@@ -1017,7 +1017,7 @@ static int snd_rme32_capture_close(struct snd_pcm_substream *substream)spin_lock_irq (&rme32->lock); rme32->capture_substream =NULL ; rme32->capture_periodsize =0 ; -spin_unlock (&rme32->lock); +spin_unlock_irq (&rme32->lock);return 0 ; }
sound/usb/quirks-table.h +1 -1
@@ -1658,7 +1658,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {/* .vendor_name = "Roland", */ /* .product_name = "A-PRO", */ - .ifnum =1 , + .ifnum =0 , .type =QUIRK_MIDI_FIXED_ENDPOINT , .data = & (const struct snd_usb_midi_endpoint_info ) { .out_cables =0x0003 ,
tools/perf/Makefile +2 -2
@@ -268,13 +268,13 @@ $(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-event $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c: util/parse-events.y - $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c + $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_ $(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c: util/pmu.y - $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c + $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_ $(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c $(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
tools/perf/ui/hist.c +5 -1
@@ -363,11 +363,15 @@ int hist_entry__period_snprintf(struct perf_hpp *hpp, struct hist_entry *he,if (!perf_hpp__format[i].cond)continue ; +/* +* If there's no field_sep, we still need +* to display initial ' '. +*/ if (!sep || !first) { ret =scnprintf (hpp->buf, hpp->size,"%s" , sep ?:" " );advance_hpp (hpp, ret); + }else first = false; - }if (color && perf_hpp__format[i].color) ret = perf_hpp__format[i].color (hpp, he);
tools/perf/util/parse-events.y +0 -1
@@ -1,5 +1,4 @@ %pure-parser -%name-prefix "parse_events_" %parse-param {void *_data} %parse-param {void *scanner} %lex-param {void* scanner}
tools/perf/util/pmu.y +0 -1
@@ -1,5 +1,4 @@ -%name-prefix "perf_pmu_" %parse-param {struct list_head *format} %parse-param {char *name}