Linux 4.4.262
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
I'm announcing the release of the 4.4.262 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/alpha/include/asm/Kbuild | 1 arch/alpha/include/asm/uaccess.h | 76 +------- arch/alpha/kernel/Makefile | 2 arch/alpha/kernel/alpha_ksyms.c | 102 ---------- arch/alpha/kernel/machvec_impl.h | 6 arch/alpha/kernel/setup.c | 1 arch/alpha/lib/Makefile | 33 ++- arch/alpha/lib/callback_srm.S | 5 arch/alpha/lib/checksum.c | 3 arch/alpha/lib/clear_page.S | 3 arch/alpha/lib/clear_user.S | 66 ++---- arch/alpha/lib/copy_page.S | 3 arch/alpha/lib/copy_user.S | 101 ++++------ arch/alpha/lib/csum_ipv6_magic.S | 2 arch/alpha/lib/csum_partial_copy.c | 2 arch/alpha/lib/dec_and_lock.c | 2 arch/alpha/lib/divide.S | 3 arch/alpha/lib/ev6-clear_page.S | 3 arch/alpha/lib/ev6-clear_user.S | 85 +++----- arch/alpha/lib/ev6-copy_page.S | 3 arch/alpha/lib/ev6-copy_user.S | 130 +++++-------- arch/alpha/lib/ev6-csum_ipv6_magic.S | 2 arch/alpha/lib/ev6-divide.S | 3 arch/alpha/lib/ev6-memchr.S | 3 arch/alpha/lib/ev6-memcpy.S | 3 arch/alpha/lib/ev6-memset.S | 7 arch/alpha/lib/ev67-strcat.S | 3 arch/alpha/lib/ev67-strchr.S | 3 arch/alpha/lib/ev67-strlen.S | 3 arch/alpha/lib/ev67-strncat.S | 3 arch/alpha/lib/ev67-strrchr.S | 3 arch/alpha/lib/fpreg.c | 7 arch/alpha/lib/memchr.S | 3 arch/alpha/lib/memcpy.c | 5 arch/alpha/lib/memmove.S | 3 arch/alpha/lib/memset.S | 7 arch/alpha/lib/strcat.S | 2 arch/alpha/lib/strchr.S | 3 arch/alpha/lib/strcpy.S | 3 arch/alpha/lib/strlen.S | 3 arch/alpha/lib/strncat.S | 3 arch/alpha/lib/strncpy.S | 3 arch/alpha/lib/strrchr.S | 3 arch/arm/kvm/mmu.c | 2 arch/powerpc/include/asm/code-patching.h | 2 arch/powerpc/perf/core-book3s.c | 19 +- arch/s390/kernel/smp.c | 2 drivers/block/floppy.c | 35 ++- drivers/block/rsxx/core.c | 1 drivers/iio/imu/adis16400_buffer.c | 5 drivers/iio/imu/adis_buffer.c | 5 drivers/media/usb/hdpvr/hdpvr-core.c | 33 ++- drivers/media/usb/usbtv/usbtv-audio.c | 2 drivers/mmc/core/mmc.c | 15 + drivers/mmc/host/mtk-sd.c | 18 + drivers/mmc/host/mxs-mmc.c | 2 drivers/net/can/flexcan.c | 12 - drivers/net/ethernet/davicom/dm9000.c | 21 +- drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 drivers/net/wan/lapbether.c | 3 drivers/net/wireless/ath/ath9k/ath9k.h | 3 drivers/net/wireless/ath/ath9k/xmit.c | 6 drivers/net/wireless/libertas/if_sdio.c | 5 drivers/pci/host/pci-xgene-msi.c | 10 - drivers/s390/block/dasd.c | 3 drivers/scsi/libiscsi.c | 11 - drivers/staging/comedi/drivers/addi_apci_1032.c | 4 drivers/staging/comedi/drivers/addi_apci_1500.c | 18 - drivers/staging/comedi/drivers/adv_pci1710.c | 10 - drivers/staging/comedi/drivers/das6402.c | 2 drivers/staging/comedi/drivers/das800.c | 2 drivers/staging/comedi/drivers/dmm32at.c | 2 drivers/staging/comedi/drivers/me4000.c | 2 drivers/staging/comedi/drivers/pcl711.c | 2 drivers/staging/comedi/drivers/pcl818.c | 2 drivers/staging/rtl8188eu/core/rtw_ap.c | 5 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6 drivers/staging/rtl8192e/rtl8192e/rtl_wx.c | 7 drivers/staging/rtl8192u/r8192U_wx.c | 6 drivers/staging/rtl8712/rtl871x_cmd.c | 6 drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 2 drivers/usb/class/cdc-acm.c | 5 drivers/usb/gadget/function/f_uac2.c | 2 drivers/usb/host/xhci.c | 16 + drivers/usb/renesas_usbhs/pipe.c | 2 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/cp210x.c | 3 drivers/usb/serial/io_edgeport.c | 26 +- drivers/usb/usbip/stub_dev.c | 42 +++- drivers/usb/usbip/vhci_sysfs.c | 10 - drivers/xen/events/events_2l.c | 22 +- drivers/xen/events/events_base.c | 130 ++++++++++--- drivers/xen/events/events_fifo.c | 7 drivers/xen/events/events_internal.h | 22 +- fs/cifs/cifsfs.c | 2 fs/nfs/nfs4proc.c | 2 include/linux/can/skb.h | 8 include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2 kernel/futex.c | 209 ++++++++++++++++++---- mm/slub.c | 2 net/ipv4/udp_offload.c | 2 net/netfilter/x_tables.c | 6 scripts/recordmcount.c | 2 scripts/recordmcount.pl | 13 + sound/pci/hda/hda_bind.c | 4 sound/pci/hda/patch_hdmi.c | 13 + sound/usb/quirks.c | 1 110 files changed, 893 insertions(+), 669 deletions(-)
Adrian Hunter (1):
mmc: core: Fix partition switch time for eMMC
Al Viro (3):
alpha: move exports to actual definitions
alpha: get rid of tail-zeroing in __copy_user()
alpha: switch __copy_user() and __do_clean_user() to normal calling conventions
Allen Pais (1):
libertas: fix a potential NULL pointer dereference
Arvind Yadav (1):
media: hdpvr: Fix an error handling path in hdpvr_probe()
Athira Rajeev (1):
powerpc/perf: Record counter overflow always if SAMPLE_IP is unset
Chaotian Jing (1):
mmc: mediatek: fix race condition between msdc_request_timeout and irq
Christophe JAILLET (1):
mmc: mxs-mmc: Fix a resource leak in an error handling path in 'mxs_mmc_probe()'
Dan Carpenter (4):
staging: rtl8192u: fix ->ssid overflow in r8192_wx_set_scan()
staging: rtl8188eu: prevent ->ssid overflow in rtw_wx_set_scan()
staging: rtl8712: unterminated string leads to read overflow
staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
Daniel Borkmann (1):
net: Fix gro aggregation for udp encaps with zero csum
Dmitry V. Levin (1):
uapi: nfnetlink_cthelper.h: fix userspace compilation error
Felix Fietkau (1):
ath9k: fix transmitting to stations in dynamic SMPS mode
Greg Kroah-Hartman (1):
Linux 4.4.262
Heiko Carstens (1):
s390/smp: __smp_rescan_cpus() - move cpumask away from stack
Ian Abbott (9):
staging: comedi: addi_apci_1032: Fix endian problem for COS sample
staging: comedi: addi_apci_1500: Fix endian problem for command sample
staging: comedi: adv_pci1710: Fix endian problem for AI command data
staging: comedi: das6402: Fix endian problem for AI command data
staging: comedi: das800: Fix endian problem for AI command data
staging: comedi: dmm32at: Fix endian problem for AI command data
staging: comedi: me4000: Fix endian problem for AI command data
staging: comedi: pcl711: Fix endian problem for AI command data
staging: comedi: pcl818: Fix endian problem for AI command data
Jia-Ju Bai (1):
block: rsxx: fix error return code of rsxx_pci_probe()
Jiri Kosina (1):
floppy: fix lock_fdc() signal handling
Joakim Zhang (2):
can: flexcan: assert FRZ bit in flexcan_chip_freeze()
can: flexcan: enable RX FIFO after FRZ/HALT valid
Joe Lawrence (1):
scripts/recordmcount.{c,pl}: support -ffunction-sections .text.* section names
Juergen Gross (3):
xen/events: reset affinity of 2-level event when tearing it down xen/events: don't unmask an event channel when an eoi is pending xen/events: avoid handling the same event on two cpus at the same time
Karan Singhal (1):
USB: serial: cp210x: add ID for Acuity Brands nLight Air Adapter
Kevin(Yudong) Yang (1):
net/mlx4_en: update moderation when config reset
Lee Gibson (2):
staging: rtl8712: Fix possible buffer overflow in r8712_sitesurvey_cmd
staging: rtl8192e: Fix possible buffer overflow in _rtl92e_wx_set_scan
Linus Torvalds (1):
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
Marc Zyngier (1):
KVM: arm64: Fix exclusive limit for IPA size
Martin Kaiser (1):
PCI: xgene-msi: Fix race in installing chained irq handler
Masahiro Yamada (3):
alpha: add $(src)/ rather than $(obj)/ to make source file path
alpha: merge build rules of division routines
alpha: make short build log available for division routines
Mathias Nyman (1):
xhci: Improve detection of device initiated wake signal.
Maxim Mikityanskiy (1):
media: usbtv: Fix deadlock on suspend
Mike Christie (1):
scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling
Naveen N. Rao (1):
powerpc/64s: Fix instruction encoding for lis in ppc_function_entry()
Navid Emamdoost (2):
iio: imu: adis16400: release allocated memory on failure
iio: imu: adis16400: fix memory leak
Niv Sardi (1):
USB: serial: ch341: add new Product ID
Oleksij Rempel (1):
can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership
Ondrej Mosnacek (1):
NFSv4.2: fix return value of _nfs4_get_security_label()
Paul Cercueil (2):
net: davicom: Fix regulator not turned off on failed probe
net: davicom: Fix regulator not turned off on driver removal
Paulo Alcantara (1):
cifs: return proper error code in statfs(2)
Pavel Skripkin (1):
USB: serial: io_edgeport: fix memory leak in edge_startup
Peter Zijlstra (1):
futex: Change locking rules
Richard Henderson (1):
alpha: Package string routines together
Ruslan Bilovol (1):
usb: gadget: f_uac2: always increase endpoint max_packet_size by one audio slot
Sebastian Reichel (1):
USB: serial: cp210x: add some more GE USB IDs
Shuah Khan (3):
usbip: fix stub_dev to check for stream socket
usbip: fix vhci_hcd to check for stream socket
usbip: fix stub_dev usbip_sockfd_store() races leading to gpf
Stefan Haberland (1):
s390/dasd: fix hanging DASD driver unbind
Takashi Iwai (3):
ALSA: hda/hdmi: Cancel pending works before suspend
ALSA: hda: Avoid spurious unsol event handling during S3/S4
ALSA: usb-audio: Fix "cannot get freq eq" errors on Dell AE515 sound bar
Thomas Gleixner (2):
futex: Cure exit race
futex: fix dead code in attach_to_pi_owner()
Vasily Averin (1):
netfilter: x_tables: gpf inside xt_find_revision()
Xie He (1):
net: lapbether: Remove netif_start_queue / netif_stop_queue
Yorick de Wid (1):
Goodix Fingerprint device is not a modem
Yoshihiro Shimoda (1):
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 261 +SUBLEVEL = 262 EXTRAVERSION = NAME = Blurry Fish Butt
arch/alpha/include/asm/Kbuild +1 -0
@@ -3,6 +3,7 @@ generic-y += clkdev.h generic-y += cputime.h generic-y += exec.h +generic-y += export.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h
arch/alpha/include/asm/uaccess.h +16 -60
105 lines not on this page · raw message
arch/alpha/kernel/Makefile +1 -1
@@ -8,7 +8,7 @@ ccflags-y := -Wno-sign-compare obj-y := entry.o traps.o process.o osf_sys.o irq.o \ irq_alpha.o signal.o setup.o ptrace.o time.o \ - alpha_ksyms.o systbls.o err_common.o io.o + systbls.o err_common.o io.o obj-$(CONFIG_VGA_HOSE) += console.o obj-$(CONFIG_SMP) += smp.o
arch/alpha/kernel/alpha_ksyms.c deleted +0 -102
102 lines not on this page · raw message
arch/alpha/kernel/machvec_impl.h +4 -2
@@ -144,9 +144,11 @@else beforehand. Fine. We'll do it ourselves. */ #if 0 #define ALIAS_MV (system) \ - struct alpha_machine_vector alpha_mv __attribute__((alias(#system "_mv"))); + struct alpha_machine_vector alpha_mv __attribute__((alias(#system "_mv"))); \ + EXPORT_SYMBOL(alpha_mv);#else #define ALIAS_MV (system) \ - asm(".global alpha_mv\nalpha_mv = " #system "_mv"); + asm(".global alpha_mv\nalpha_mv = " #system "_mv"); \ + EXPORT_SYMBOL(alpha_mv);#endif #endif /* GENERIC */
arch/alpha/kernel/setup.c +1 -0
@@ -115,6 +115,7 @@ unsigned long alpha_agpgart_size = DEFAULT_AGP_APER_SIZE;#ifdef CONFIG_ALPHA_GENERIC struct alpha_machine_vector alpha_mv; +EXPORT_SYMBOL (alpha_mv);#endif #ifndef alpha_using_srm
arch/alpha/lib/Makefile +19 -14
@@ -20,12 +20,8 @@ lib-y = __divqu.o __remqu.o __divlu.o __remlu.o \ checksum.o \ csum_partial_copy.o \ $(ev67-y)strlen.o \ - $(ev67-y)strcat.o \ - strcpy.o \ - $(ev67-y)strncat.o \ - strncpy.o \ - $(ev6-y)stxcpy.o \ - $(ev6-y)stxncpy.o \ + stycpy.o \ + styncpy.o \ $(ev67-y)strchr.o \ $(ev67-y)strrchr.o \ $(ev6-y)memchr.o \
@@ -46,11 +42,20 @@ AFLAGS___remqu.o = -DREM AFLAGS___divlu.o = -DDIV -DINTSIZE AFLAGS___remlu.o = -DREM -DINTSIZE -$(obj)/__divqu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__remqu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__divlu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) -$(obj)/__remlu.o: $(obj)/$(ev6-y)divide.S - $(cmd_as_o_S) +$(addprefix $(obj)/,__divqu.o __remqu.o __divlu.o __remlu.o): \ + $(src)/$(ev6-y)divide.S FORCE + $(call if_changed_rule,as_o_S) + +# There are direct branches between {str*cpy,str*cat} and stx*cpy. +# Ensure the branches are within range by merging these objects. + +LDFLAGS_stycpy.o := -r +LDFLAGS_styncpy.o := -r + +$(obj)/stycpy.o: $(obj)/strcpy.o $(obj)/$(ev67-y)strcat.o \ + $(obj)/$(ev6-y)stxcpy.o FORCE + $(call if_changed,ld) + +$(obj)/styncpy.o: $(obj)/strncpy.o $(obj)/$(ev67-y)strncat.o \ + $(obj)/$(ev6-y)stxncpy.o FORCE + $(call if_changed,ld)
arch/alpha/lib/callback_srm.S +5 -0
@@ -3,6 +3,7 @@ */ #include <asm/console.h> +#include <asm/export.h> .text #define HWRPB_CRB_OFFSET 0xc0
@@ -92,6 +93,10 @@ CALLBACK(reset_env, CCB_RESET_ENV, 4) CALLBACK(save_env, CCB_SAVE_ENV, 1) CALLBACK(pswitch, CCB_PSWITCH, 3) CALLBACK(bios_emul, CCB_BIOS_EMUL, 5) + +EXPORT_SYMBOL(callback_getenv) +EXPORT_SYMBOL(callback_setenv) +EXPORT_SYMBOL(callback_save_env) .data __alpha_using_srm: # For use by bootpheader
arch/alpha/lib/checksum.c +3 -0
@@ -50,6 +50,7 @@ __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, (__force u64 )saddr + (__force u64 )daddr + (__force u64)sum + ((len + proto) << 8)); } +EXPORT_SYMBOL (csum_tcpudp_magic); __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
@@ -148,6 +149,7 @@ __sum16 ip_fast_csum(const void *iph, unsigned int ihl) {return (__force __sum16 )~do_csum (iph,ihl*4 ); } +EXPORT_SYMBOL (ip_fast_csum);/* * computes the checksum of a memory block at buff, length len,
@@ -182,3 +184,4 @@ __sum16 ip_compute_csum(const void *buff, int len) {return (__force __sum16 )~from64to16 (do_csum (buff,len)); } +EXPORT_SYMBOL (ip_compute_csum);
arch/alpha/lib/clear_page.S +2 -1
@@ -3,7 +3,7 @@ * * Zero an entire page. */ - +#include <asm/export.h> .text .align 4 .global clear_page
@@ -37,3 +37,4 @@ clear_page: nop .end clear_page + EXPORT_SYMBOL(clear_page)
arch/alpha/lib/clear_user.S +27 -39
125 lines not on this page · raw message
arch/alpha/lib/copy_page.S +2 -1
@@ -3,7 +3,7 @@ * * Copy an entire page. */ - +#include <asm/export.h> .text .align 4 .global copy_page
@@ -47,3 +47,4 @@ copy_page: nop .end copy_page + EXPORT_SYMBOL(copy_page)
arch/alpha/lib/copy_user.S +38 -63
159 lines not on this page · raw message
arch/alpha/lib/csum_ipv6_magic.S +2 -0
@@ -12,6 +12,7 @@ * added by Ivan Kokshaysky <[email protected]> */ +#include <asm/export.h> .globl csum_ipv6_magic .align 4 .ent csum_ipv6_magic
@@ -113,3 +114,4 @@ csum_ipv6_magic: ret # .. e1 : .end csum_ipv6_magic + EXPORT_SYMBOL(csum_ipv6_magic)
arch/alpha/lib/csum_partial_copy.c +2 -0
@@ -374,6 +374,7 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len, }return (__force __wsum )checksum; } +EXPORT_SYMBOL (csum_partial_copy_from_user);__wsum csum_partial_copy_nocheck (const void *src,void *dst,int len,__wsum sum)
@@ -386,3 +387,4 @@ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)set_fs (oldfs);return checksum; } +EXPORT_SYMBOL (csum_partial_copy_nocheck);
arch/alpha/lib/dec_and_lock.c +2 -0
@@ -7,6 +7,7 @@#include <linux/spinlock.h> #include <linux/atomic.h> +#include <linux/export.h> asm (".text \n\ .global _atomic_dec_and_lock \n\
@@ -39,3 +40,4 @@ static int __used atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)spin_unlock (lock);return 0 ; } +EXPORT_SYMBOL (_atomic_dec_and_lock);
arch/alpha/lib/divide.S +3 -0
@@ -45,6 +45,7 @@ * $28 - compare status */ +#include <asm/export.h> #define halt .long 0 /*
@@ -151,6 +152,7 @@ ufunction: addq $30,STACK,$30 ret $31,($23),1 .end ufunction +EXPORT_SYMBOL(ufunction) /* * Uhh.. Ugly signed division. I'd rather not have it at all, but
@@ -193,3 +195,4 @@ sfunction: addq $30,STACK,$30 ret $31,($23),1 .end sfunction +EXPORT_SYMBOL(sfunction)
arch/alpha/lib/ev6-clear_page.S +2 -1
@@ -3,7 +3,7 @@ * * Zero an entire page. */ - +#include <asm/export.h> .text .align 4 .global clear_page
@@ -52,3 +52,4 @@ clear_page: nop .end clear_page + EXPORT_SYMBOL(clear_page)
arch/alpha/lib/ev6-clear_user.S +36 -49
191 lines not on this page · raw message
arch/alpha/lib/ev6-copy_page.S +2 -1
@@ -56,7 +56,7 @@ destination pages are in the dcache, but it is my guess that this is less important than the dcache miss case. */ - +#include <asm/export.h> .text .align 4 .global copy_page
@@ -201,3 +201,4 @@ copy_page: nop .end copy_page + EXPORT_SYMBOL(copy_page)
arch/alpha/lib/ev6-copy_user.S +48 -82
244 lines not on this page · raw message
arch/alpha/lib/ev6-csum_ipv6_magic.S +2 -0
@@ -52,6 +52,7 @@ * may cause additional delay in rare cases (load-load replay traps). */ +#include <asm/export.h> .globl csum_ipv6_magic .align 4 .ent csum_ipv6_magic
@@ -148,3 +149,4 @@ csum_ipv6_magic: ret # L0 : L U L U .end csum_ipv6_magic + EXPORT_SYMBOL(csum_ipv6_magic)
arch/alpha/lib/ev6-divide.S +3 -0
@@ -55,6 +55,7 @@ * Try not to change the actual algorithm if possible for consistency. */ +#include <asm/export.h> #define halt .long 0 /*
@@ -205,6 +206,7 @@ ufunction: addq $30,STACK,$30 # E : ret $31,($23),1 # L0 : L U U L .end ufunction +EXPORT_SYMBOL(ufunction) /* * Uhh.. Ugly signed division. I'd rather not have it at all, but
@@ -257,3 +259,4 @@ sfunction: addq $30,STACK,$30 # E : ret $31,($23),1 # L0 : L U U L .end sfunction +EXPORT_SYMBOL(sfunction)
arch/alpha/lib/ev6-memchr.S +2 -1
@@ -27,7 +27,7 @@ * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 * Try not to change the actual algorithm if possible for consistency. */ - +#include <asm/export.h> .set noreorder .set noat
@@ -189,3 +189,4 @@ $not_found: ret # L0 : .end memchr + EXPORT_SYMBOL(memchr)
arch/alpha/lib/ev6-memcpy.S +2 -1
@@ -19,7 +19,7 @@ * Temp usage notes: * $1,$2, - scratch */ - +#include <asm/export.h> .set noreorder .set noat
@@ -242,6 +242,7 @@ $nomoredata: nop # E : .end memcpy + EXPORT_SYMBOL(memcpy) /* For backwards module compatibility. */ __memcpy = memcpy
arch/alpha/lib/ev6-memset.S +6 -1
@@ -26,7 +26,7 @@ * as fixes will need to be made in multiple places. The performance gain * is worth it. */ - +#include <asm/export.h> .set noat .set noreorder .text
@@ -229,6 +229,7 @@ end_b: nop ret $31,($26),1 # L0 : .end ___memset + EXPORT_SYMBOL(___memset) /* * This is the original body of code, prior to replication and
@@ -406,6 +407,7 @@ end: nop ret $31,($26),1 # L0 : .end __constant_c_memset + EXPORT_SYMBOL(__constant_c_memset) /* * This is a replicant of the __constant_c_memset code, rescheduled
@@ -594,6 +596,9 @@ end_w: ret $31,($26),1 # L0 : .end __memsetw + EXPORT_SYMBOL(__memsetw) memset = ___memset __memset = ___memset + EXPORT_SYMBOL(memset) + EXPORT_SYMBOL(__memset)
arch/alpha/lib/ev67-strcat.S +2 -1
@@ -19,7 +19,7 @@ * string once. */ - +#include <asm/export.h> .text .align 4
@@ -52,3 +52,4 @@ $found: cttz $2, $3 # U0 : br __stxcpy # L0 : .end strcat + EXPORT_SYMBOL(strcat)
arch/alpha/lib/ev67-strchr.S +2 -1
@@ -15,7 +15,7 @@ * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 * Try not to change the actual algorithm if possible for consistency. */ - +#include <asm/export.h> #include <asm/regdef.h> .set noreorder
@@ -86,3 +86,4 @@ $found: negq t0, t1 # E : clear all but least set bit ret # L0 : .end strchr + EXPORT_SYMBOL(strchr)
arch/alpha/lib/ev67-strlen.S +2 -1
@@ -17,7 +17,7 @@ * U - upper subcluster; U0 - subcluster U0; U1 - subcluster U1 * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 */ - +#include <asm/export.h> .set noreorder .set noat
@@ -47,3 +47,4 @@ $found: ret $31, ($26) # L0 : .end strlen + EXPORT_SYMBOL(strlen)
arch/alpha/lib/ev67-strncat.S +2 -1
@@ -20,7 +20,7 @@ * Try not to change the actual algorithm if possible for consistency. */ - +#include <asm/export.h> .text .align 4
@@ -92,3 +92,4 @@ $zerocount: ret # L0 : .end strncat + EXPORT_SYMBOL(strncat)
arch/alpha/lib/ev67-strrchr.S +2 -1
@@ -18,7 +18,7 @@ * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 */ - +#include <asm/export.h> #include <asm/regdef.h> .set noreorder
@@ -107,3 +107,4 @@ $eos: nop .end strrchr + EXPORT_SYMBOL(strrchr)
arch/alpha/lib/fpreg.c +7 -0
@@ -4,6 +4,9 @@* (C) Copyright 1998 Linus Torvalds */ +#include <linux/compiler.h> +#include <linux/export.h> +#if defined(CONFIG_ALPHA_EV6 ) || defined(CONFIG_ALPHA_EV67 )#define STT (reg,val) asm volatile ("ftoit $f"#reg",%0" : "=r"(val));#else
@@ -52,6 +55,7 @@ alpha_read_fp_reg (unsigned long reg) }return val; } +EXPORT_SYMBOL (alpha_read_fp_reg);#if defined(CONFIG_ALPHA_EV6 ) || defined(CONFIG_ALPHA_EV67 )#define LDT (reg,val) asm volatile ("itoft %0,$f"#reg : : "r"(val));
@@ -97,6 +101,7 @@ alpha_write_fp_reg (unsigned long reg, unsigned long val)case 31 :LDT (31 , val);break ; } } +EXPORT_SYMBOL (alpha_write_fp_reg);#if defined(CONFIG_ALPHA_EV6 ) || defined(CONFIG_ALPHA_EV67 )#define STS (reg,val) asm volatile ("ftois $f"#reg",%0" : "=r"(val));
@@ -146,6 +151,7 @@ alpha_read_fp_reg_s (unsigned long reg) }return val; } +EXPORT_SYMBOL (alpha_read_fp_reg_s);#if defined(CONFIG_ALPHA_EV6 ) || defined(CONFIG_ALPHA_EV67 )#define LDS (reg,val) asm volatile ("itofs %0,$f"#reg : : "r"(val));
@@ -191,3 +197,4 @@ alpha_write_fp_reg_s (unsigned long reg, unsigned long val)case 31 :LDS (31 , val);break ; } } +EXPORT_SYMBOL (alpha_write_fp_reg_s);
arch/alpha/lib/memchr.S +2 -1
@@ -31,7 +31,7 @@ For correctness consider that: - only minimum number of quadwords may be accessed - the third argument is an unsigned long */ - +#include <asm/export.h> .set noreorder .set noat
@@ -162,3 +162,4 @@ $not_found: ret # .. e1 : .end memchr + EXPORT_SYMBOL(memchr)
arch/alpha/lib/memcpy.c +2 -3
@@ -16,6 +16,7 @@*/ #include <linux/types.h> +#include <linux/export.h> /* * This should be done in one go with ldq_u*2/mask/stq_u. Do it
@@ -158,6 +159,4 @@ void * memcpy(void * dest, const void *src, size_t n)__memcpy_unaligned_up ((unsigned long ) dest, (unsigned long ) src, n);return dest; } - -/* For backward modules compatibility, define __memcpy. */ -asm("__memcpy = memcpy; .globl __memcpy" ); +EXPORT_SYMBOL (memcpy);
arch/alpha/lib/memmove.S +2 -1
@@ -6,7 +6,7 @@ * This is hand-massaged output from the original memcpy.c. We defer to * memcpy whenever possible; the backwards copy loops are not unrolled. */ - +#include <asm/export.h> .set noat .set noreorder .text
@@ -179,3 +179,4 @@ $egress: nop .end memmove + EXPORT_SYMBOL(memmove)
arch/alpha/lib/memset.S +6 -1
@@ -13,7 +13,7 @@ * The scheduling comments are according to the EV5 documentation (and done by * hand, so they might well be incorrect, please do tell me about it..) */ - +#include <asm/export.h> .set noat .set noreorder .text
@@ -106,6 +106,8 @@ within_one_quad: end: ret $31,($26),1 /* E1 */ .end ___memset +EXPORT_SYMBOL(___memset) +EXPORT_SYMBOL(__constant_c_memset) .align 5 .ent __memsetw
@@ -122,6 +124,9 @@ __memsetw: br __constant_c_memset /* .. E1 */ .end __memsetw +EXPORT_SYMBOL(__memsetw) memset = ___memset __memset = ___memset + EXPORT_SYMBOL(memset) + EXPORT_SYMBOL(__memset)
arch/alpha/lib/strcat.S +2 -0
@@ -4,6 +4,7 @@ * * Append a null-terminated string from SRC to DST. */ +#include <asm/export.h> .text
@@ -50,3 +51,4 @@ $found: negq $2, $3 # clear all but least set bit br __stxcpy .end strcat +EXPORT_SYMBOL(strcat);
arch/alpha/lib/strchr.S +2 -1
@@ -5,7 +5,7 @@ * Return the address of a given character within a null-terminated * string, or null if it is not found. */ - +#include <asm/export.h> #include <asm/regdef.h> .set noreorder
@@ -68,3 +68,4 @@ $retnull: ret # .. e1 : .end strchr + EXPORT_SYMBOL(strchr)
arch/alpha/lib/strcpy.S +2 -1
@@ -5,7 +5,7 @@ * Copy a null-terminated string from SRC to DST. Return a pointer * to the null-terminator in the source. */ - +#include <asm/export.h> .text .align 3
@@ -21,3 +21,4 @@ strcpy: br __stxcpy # do the copy .end strcpy + EXPORT_SYMBOL(strcpy)
arch/alpha/lib/strlen.S +2 -1
@@ -11,7 +11,7 @@ * do this instead of the 9 instructions that * binary search needs). */ - +#include <asm/export.h> .set noreorder .set noat
@@ -55,3 +55,4 @@ done: subq $0, $16, $0 ret $31, ($26) .end strlen + EXPORT_SYMBOL(strlen)
arch/alpha/lib/strncat.S +2 -1
@@ -9,7 +9,7 @@ * past count, whereas libc may write to count+1. This follows the generic * implementation in lib/string.c and is, IMHO, more sensible. */ - +#include <asm/export.h> .text .align 3
@@ -82,3 +82,4 @@ $zerocount: ret .end strncat + EXPORT_SYMBOL(strncat)
arch/alpha/lib/strncpy.S +2 -1
@@ -10,7 +10,7 @@ * version has cropped that bit o' nastiness as well as assuming that * __stxncpy is in range of a branch. */ - +#include <asm/export.h> .set noat .set noreorder
@@ -79,3 +79,4 @@ $zerolen: ret .end strncpy + EXPORT_SYMBOL(strncpy)
arch/alpha/lib/strrchr.S +2 -1
@@ -5,7 +5,7 @@ * Return the address of the last occurrence of a given character * within a null-terminated string, or null if it is not found. */ - +#include <asm/export.h> #include <asm/regdef.h> .set noreorder
@@ -85,3 +85,4 @@ $retnull: ret # .. e1 : .end strrchr + EXPORT_SYMBOL(strrchr)
arch/arm/kvm/mmu.c +1 -1
@@ -1789,7 +1789,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,* Prevent userspace from creating a memory region outside of the IPA * space addressable by the KVM guest IPA space. */ -if (memslot->base_gfn + memslot->npages >= +if (memslot->base_gfn + memslot->npages > (KVM_PHYS_SIZE >>PAGE_SHIFT ))return -EFAULT ;
arch/powerpc/include/asm/code-patching.h +1 -1
@@ -45,7 +45,7 @@ void __patch_exception(int exc, unsigned long addr);#endif #define OP_RT_RA_MASK 0xffff0000UL -#define LIS_R2 0x3c020000UL +#define LIS_R2 0x3c400000UL#define ADDIS_R2_R12 0x3c4c0000UL#define ADDI_R2_R2 0x38420000UL
arch/powerpc/perf/core-book3s.c +15 -4
@@ -2008,7 +2008,17 @@ static void record_and_restart(struct perf_event *event, unsigned long val, left += period;if (left <=0 ) left = period; - record =siar_valid (regs); + +/* +* If address is not requested in the sample via +* PERF_SAMPLE_IP, just record that sample irrespective +* of SIAR valid check. +*/ +if (event->attr.sample_type &PERF_SAMPLE_IP ) + record =siar_valid (regs); +else + record =1 ; + event->hw.last_period = event->hw.sample_period; }if (left <0x80000000LL )
@@ -2026,9 +2036,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,* MMCR2. Check attr.exclude_kernel and address to drop the sample in * these cases. */ -if (event->attr.exclude_kernel && record) -if (is_kernel_addr (mfspr (SPRN_SIAR ))) - record =0 ; +if (event->attr.exclude_kernel && + (event->attr.sample_type &PERF_SAMPLE_IP ) && +is_kernel_addr (mfspr (SPRN_SIAR ))) + record =0 ;/* * Finally record data if requested.
arch/s390/kernel/smp.c +1 -1
@@ -738,7 +738,7 @@ static int smp_add_core(struct sclp_core_entry *core, cpumask_t *avail,static int __smp_rescan_cpus (struct sclp_core_info *info,bool early) {struct sclp_core_entry *core; -cpumask_t avail; +static cpumask_t avail;bool configured;u16 core_id;int nr, i;
drivers/block/floppy.c +19 -16
@@ -870,7 +870,7 @@ static void set_fdc(int drive) }/* locks the driver */ -static int lock_fdc (int drive,bool interruptible) +static int lock_fdc (int drive) {if (WARN (atomic_read (&usage_count) ==0 ,"Trying to lock fdc while usage count=0\n" ))
@@ -2180,7 +2180,7 @@ static int do_format(int drive, struct format_descr *tmp_format_req) {int ret; -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;set_floppy (drive);
@@ -2967,7 +2967,7 @@ static int user_reset_fdc(int drive, int arg, bool interruptible) {int ret; -if (lock_fdc (drive, interruptible)) +if (lock_fdc (drive))return -EINTR ;if (arg ==FD_RESET_ALWAYS )
@@ -3254,7 +3254,7 @@ static int set_geometry(unsigned int cmd, struct floppy_struct *g,if (!capable (CAP_SYS_ADMIN ))return -EPERM ;mutex_lock (&open_lock); -if (lock_fdc (drive, true)) { +if (lock_fdc (drive)) {mutex_unlock (&open_lock);return -EINTR ; }
@@ -3274,7 +3274,7 @@ static int set_geometry(unsigned int cmd, struct floppy_struct *g, }else {int oldStretch; -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;if (cmd !=FDDEFPRM ) {/* notice a disk change immediately, else
@@ -3360,7 +3360,7 @@ static int get_floppy_geometry(int drive, int type, struct floppy_struct **g)if (type) *g = &floppy_type[type];else { -if (lock_fdc (drive, false)) +if (lock_fdc (drive))return -EINTR ;if (poll_drive (false,0 ) == -EINTR )return -EINTR ;
@@ -3462,7 +3462,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intif (UDRS ->fd_ref !=1 )/* somebody else has this drive open */ return -EBUSY ; -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;/* do the actual eject. Fails on
@@ -3474,7 +3474,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intprocess_fd_request ();return ret;case FDCLRPRM : -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ; current_type[drive] =NULL ; floppy_sizes[drive] =MAX_DISK_SIZE <<1 ;
@@ -3499,7 +3499,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intUDP ->flags &= ~FTD_MSG ;return 0 ;case FDFMTBEG : -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;if (poll_drive (true,FD_RAW_NEED_DISK ) == -EINTR )return -EINTR ;
@@ -3516,7 +3516,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intreturn do_format (drive, &inparam.f);case FDFMTEND :case FDFLUSH : -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;return invalidate_drive (bdev);case FDSETEMSGTRESH :
@@ -3542,7 +3542,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int outparam =UDP ;break ;case FDPOLLDRVSTAT : -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;if (poll_drive (true,FD_RAW_NEED_DISK ) == -EINTR )return -EINTR ;
@@ -3565,7 +3565,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intcase FDRAWCMD :if (type)return -EINVAL ; -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;set_floppy (drive); i =raw_cmd_ioctl (cmd, (void __user *)param);
@@ -3574,7 +3574,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned intprocess_fd_request ();return i;case FDTWADDLE : -if (lock_fdc (drive, true)) +if (lock_fdc (drive))return -EINTR ;twaddle ();process_fd_request ();
@@ -3801,7 +3801,7 @@ static int compat_getdrvstat(int drive, bool poll,mutex_lock (&floppy_mutex);if (poll) { -if (lock_fdc (drive, true)) +if (lock_fdc (drive)) goto Eintr;if (poll_drive (true,FD_RAW_NEED_DISK ) == -EINTR ) goto Eintr;
@@ -4109,7 +4109,8 @@ static unsigned int floppy_check_events(struct gendisk *disk,return DISK_EVENT_MEDIA_CHANGE ;if (time_after (jiffies,UDRS ->last_checked +UDP ->checkfreq)) { -lock_fdc (drive, false); +if (lock_fdc (drive)) +return -EINTR ;poll_drive (false,0 );process_fd_request (); }
@@ -4208,7 +4209,9 @@ static int floppy_revalidate(struct gendisk *disk) "VFS: revalidate called on non-open device.\n"))return -EFAULT ; -lock_fdc (drive, false); + res =lock_fdc (drive); +if (res) +return res; cf = (test_bit (FD_DISK_CHANGED_BIT , &UDRS ->flags) ||test_bit (FD_VERIFY_BIT , &UDRS ->flags));if (!(cf ||test_bit (drive, &fake_change) ||drive_no_geom (drive))) {
drivers/block/rsxx/core.c +1 -0
@@ -895,6 +895,7 @@ static int rsxx_pci_probe(struct pci_dev *dev, card->event_wq =create_singlethread_workqueue (DRIVER_NAME "_event" );if (!card->event_wq) {dev_err (CARD_TO_DEV (card),"Failed card event setup.\n" ); + st = -ENOMEM ; goto failed_event_handler; }
drivers/iio/imu/adis16400_buffer.c +4 -1
@@ -37,8 +37,11 @@ int adis16400_update_scan_mode(struct iio_dev *indio_dev,return -ENOMEM ; adis->buffer =kzalloc (burst_length +sizeof (u16),GFP_KERNEL ); -if (!adis->buffer) +if (!adis->buffer) { +kfree (adis->xfer); + adis->xfer =NULL ;return -ENOMEM ; + } tx = adis->buffer + burst_length; tx[0 ] =ADIS_READ_REG (ADIS16400_GLOB_CMD );
drivers/iio/imu/adis_buffer.c +4 -1
@@ -39,8 +39,11 @@ int adis_update_scan_mode(struct iio_dev *indio_dev,return -ENOMEM ; adis->buffer =kzalloc (indio_dev->scan_bytes *2 ,GFP_KERNEL ); -if (!adis->buffer) +if (!adis->buffer) { +kfree (adis->xfer); + adis->xfer =NULL ;return -ENOMEM ; + } rx = adis->buffer; tx = rx + scan_count;
drivers/media/usb/hdpvr/hdpvr-core.c +19 -14
@@ -297,7 +297,7 @@ static int hdpvr_probe(struct usb_interface *interface,/* register v4l2_device early so it can be used for printks */ if (v4l2_device_register (&interface->dev, &dev->v4l2_dev)) {dev_err (&interface->dev,"v4l2_device_register failed\n" ); - goto error; + goto error_free_dev; }mutex_init (&dev->io_mutex);
@@ -306,7 +306,7 @@ static int hdpvr_probe(struct usb_interface *interface, dev->usbc_buf =kmalloc (64 ,GFP_KERNEL );if (!dev->usbc_buf) {v4l2_err (&dev->v4l2_dev,"Out of memory\n" ); - goto error; + goto error_v4l2_unregister; }init_waitqueue_head (&dev->wait_buffer);
@@ -314,7 +314,7 @@ static int hdpvr_probe(struct usb_interface *interface, dev->workqueue =create_singlethread_workqueue ("hdpvr_buffer" );if (!dev->workqueue) - goto error; + goto err_free_usbc; dev->options = hdpvr_default_options;
@@ -348,13 +348,13 @@ static int hdpvr_probe(struct usb_interface *interface, }if (!dev->bulk_in_endpointAddr) {v4l2_err (&dev->v4l2_dev,"Could not find bulk-in endpoint\n" ); - goto error; + goto error_put_usb; }/* init the device */ if (hdpvr_device_init (dev)) {v4l2_err (&dev->v4l2_dev,"device init failed\n" ); - goto error; + goto error_put_usb; }mutex_lock (&dev->io_mutex);
@@ -362,7 +362,7 @@ static int hdpvr_probe(struct usb_interface *interface,mutex_unlock (&dev->io_mutex);v4l2_err (&dev->v4l2_dev,"allocating transfer buffers failed\n" ); - goto error; + goto error_put_usb; }mutex_unlock (&dev->io_mutex);
@@ -370,7 +370,7 @@ static int hdpvr_probe(struct usb_interface *interface, retval =hdpvr_register_i2c_adapter (dev);if (retval <0 ) {v4l2_err (&dev->v4l2_dev,"i2c adapter register failed\n" ); - goto error; + goto error_free_buffers; } client =hdpvr_register_ir_rx_i2c (dev);
@@ -412,15 +412,20 @@ static int hdpvr_probe(struct usb_interface *interface, reg_fail:#if IS_ENABLED (CONFIG_I2C )i2c_del_adapter (&dev->i2c_adapter); +error_free_buffers:#endif +hdpvr_free_buffers (dev); +error_put_usb: +usb_put_dev (dev->udev); +/* Destroy single thread */ +destroy_workqueue (dev->workqueue); +err_free_usbc: +kfree (dev->usbc_buf); +error_v4l2_unregister: +v4l2_device_unregister (&dev->v4l2_dev); +error_free_dev: +kfree (dev); error: -if (dev) { -/* Destroy single thread */ -if (dev->workqueue) -destroy_workqueue (dev->workqueue); -/* this frees allocated memory */ -hdpvr_delete (dev); - }return retval; }
drivers/media/usb/usbtv/usbtv-audio.c +1 -1
@@ -384,7 +384,7 @@ void usbtv_audio_free(struct usbtv *usbtv)cancel_work_sync (&usbtv->snd_trigger);if (usbtv->snd && usbtv->udev) { -snd_card_free (usbtv->snd); +snd_card_free_when_closed (usbtv->snd); usbtv->snd =NULL ; } }
drivers/mmc/core/mmc.c +11 -4
@@ -400,10 +400,6 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)/* EXT_CSD value is in units of 10ms, but we store in ms */ card->ext_csd.part_time =10 * ext_csd[EXT_CSD_PART_SWITCH_TIME ]; -/* Some eMMC set the value too low so set a minimum */ -if (card->ext_csd.part_time && - card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) - card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ;/* Sleep / awake timeout in 100ns units */ if (sa_shift >0 && sa_shift <=0x17 )
@@ -585,6 +581,17 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd) card->ext_csd.data_sector_size =512 ; } +/* +* GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined +* when accessing a specific field", so use it here if there is no +* PARTITION_SWITCH_TIME. +*/ +if (!card->ext_csd.part_time) + card->ext_csd.part_time = card->ext_csd.generic_cmd6_time; +/* Some eMMC set the value too low so set a minimum */ +if (card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) + card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ; +/* eMMC v5 or later */ if (card->ext_csd.rev >=7 ) { memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
drivers/mmc/host/mtk-sd.c +10 -8
@@ -720,13 +720,13 @@ static void msdc_track_cmd_data(struct msdc_host *host,static void msdc_request_done (struct msdc_host *host,struct mmc_request *mrq) {unsigned long flags; -bool ret; - ret =cancel_delayed_work (&host->req_timeout); -if (!ret) { -/* delay work already running */ -return ; - } +/* +* No need check the return value of cancel_delayed_work, as only ONE +* path will go here! +*/ +cancel_delayed_work (&host->req_timeout); +spin_lock_irqsave (&host->lock, flags); host->mrq =NULL ;spin_unlock_irqrestore (&host->lock, flags);
@@ -747,7 +747,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,bool done = false;bool sbc_error;unsigned long flags; -u32 *rsp = cmd->resp; +u32 *rsp; if (mrq->sbc && cmd == mrq->cmd && (events & (MSDC_INT_ACMDRDY | MSDC_INT_ACMDCRCERR
@@ -768,6 +768,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,if (done)return true; + rsp = cmd->resp;sdr_clr_bits (host->base +MSDC_INTEN , cmd_ints_mask);
@@ -942,7 +943,7 @@ static void msdc_data_xfer_next(struct msdc_host *host,static bool msdc_data_xfer_done (struct msdc_host *host,u32 events,struct mmc_request *mrq,struct mmc_data *data) { -struct mmc_command *stop = data->stop; +struct mmc_command *stop;unsigned long flags;bool done; unsigned int check_data = events &
@@ -958,6 +959,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,if (done)return true; + stop = data->stop;if (check_data || (stop && stop->error)) { dev_dbg(host->dev, "DMA status: 0x%8X\n",
drivers/mmc/host/mxs-mmc.c +1 -1
@@ -651,7 +651,7 @@ static int mxs_mmc_probe(struct platform_device *pdev) ret =mmc_of_parse (mmc);if (ret) - goto out_clk_disable; + goto out_free_dma; mmc->ocr_avail =MMC_VDD_32_33 |MMC_VDD_33_34 ;
drivers/net/can/flexcan.c +8 -4
@@ -383,7 +383,7 @@ static int flexcan_chip_freeze(struct flexcan_priv *priv)u32 reg; reg =flexcan_read (®s->mcr); - reg |=FLEXCAN_MCR_HALT ; + reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT ;flexcan_write (reg, ®s->mcr);while (timeout-- && !(flexcan_read (®s->mcr) &FLEXCAN_MCR_FRZ_ACK ))
@@ -1098,10 +1098,14 @@ static int register_flexcandev(struct net_device *dev)if (err) goto out_chip_disable; -/* set freeze, halt and activate FIFO, restrict register access */ +/* set freeze, halt */ + err =flexcan_chip_freeze (priv); +if (err) + goto out_chip_disable; + +/* activate FIFO, restrict register access */ reg =flexcan_read (®s->mcr); - reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT | -FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ; + reg |=FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ;flexcan_write (reg, ®s->mcr);/* Currently we only support newer versions of this core
drivers/net/ethernet/davicom/dm9000.c +17 -4
@@ -144,6 +144,8 @@ struct board_info {u32 wake_state;int ip_summed; + +struct regulator *power_supply; };/* debug code */
@@ -1462,7 +1464,7 @@ dm9000_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to request reset gpio %d: %d\n" , reset_gpios, ret); -return -ENODEV ; + goto out_regulator_disable; }/* According to manual PWRST# Low Period Min 1ms */
@@ -1474,8 +1476,10 @@ dm9000_probe(struct platform_device *pdev)if (!pdata) { pdata =dm9000_parse_dt (&pdev->dev); -if (IS_ERR (pdata)) -return PTR_ERR (pdata); +if (IS_ERR (pdata)) { + ret =PTR_ERR (pdata); + goto out_regulator_disable; + } }/* Init network device */
@@ -1492,6 +1496,8 @@ dm9000_probe(struct platform_device *pdev) db->dev = &pdev->dev; db->ndev = ndev; +if (!IS_ERR (power)) + db->power_supply = power;spin_lock_init (&db->lock);mutex_init (&db->addr_lock);
@@ -1710,6 +1716,10 @@ out:dm9000_release_board (pdev, db);free_netdev (ndev); +out_regulator_disable: +if (!IS_ERR (power)) +regulator_disable (power); +return ret; }
@@ -1769,10 +1779,13 @@ static int dm9000_drv_remove(struct platform_device *pdev) {struct net_device *ndev =platform_get_drvdata (pdev); +struct board_info *dm =to_dm9000_board (ndev);unregister_netdev (ndev); -dm9000_release_board (pdev,netdev_priv (ndev)); +dm9000_release_board (pdev, dm);free_netdev (ndev);/* free device structure */ +if (dm->power_supply) +regulator_disable (dm->power_supply);dev_dbg (&pdev->dev,"released and freed device\n" );return 0 ;
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -1
@@ -47,7 +47,7 @@#define EN_ETHTOOL_SHORT_MASK cpu_to_be16(0xffff)#define EN_ETHTOOL_WORD_MASK cpu_to_be32(0xffffffff) -static int mlx4_en_moderation_update (struct mlx4_en_priv *priv) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv) {int i;int err =0 ;
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +2 -0
@@ -3188,6 +3188,8 @@ int mlx4_en_reset_config(struct net_device *dev,en_err (priv,"Failed starting port\n" ); } +if (!err) + err =mlx4_en_moderation_update (priv); out:mutex_unlock (&mdev->state_lock);netdev_features_change (dev);
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +1 -0
@@ -839,6 +839,7 @@ void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev);#define DEV_FEATURE_CHANGED (dev, new_features, feature) \ ((dev->features & feature) ^ (new_features & feature)) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv);int mlx4_en_reset_config (struct net_device *dev,struct hwtstamp_config ts_config,netdev_features_t new_features);
drivers/net/wan/lapbether.c +0 -3
@@ -286,7 +286,6 @@ static int lapbeth_open(struct net_device *dev)return -ENODEV ; } -netif_start_queue (dev);return 0 ; }
@@ -294,8 +293,6 @@ static int lapbeth_close(struct net_device *dev) {int err; -netif_stop_queue (dev); -if ((err =lapb_unregister (dev)) !=LAPB_OK )pr_err ("lapb_unregister error: %d\n" , err);
drivers/net/wireless/ath/ath9k/ath9k.h +2 -1
@@ -178,7 +178,8 @@ struct ath_frame_info {s8 txq;u8 keyix;u8 rtscts_rate; - u8 retries : 7; + u8 retries : 6; + u8 dyn_smps : 1; u8 baw_tracked : 1;u8 tx_power; enum ath9k_key_type keytype:2;
drivers/net/wireless/ath/ath9k/xmit.c +6 -0
@@ -1228,6 +1228,11 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, is_40, is_sgi, is_sp);if (rix <8 && (tx_info->flags &IEEE80211_TX_CTL_STBC )) info->rates[i].RateFlags |=ATH9K_RATESERIES_STBC ; +if (rix >=8 && fi->dyn_smps) { + info->rates[i].RateFlags |= +ATH9K_RATESERIES_RTS_CTS ; + info->flags |=ATH9K_TXDESC_CTSENA ; + } info->txpower[i] =ath_get_rate_txpower (sc, bf, rix, is_40, false);
@@ -2114,6 +2119,7 @@ static void setup_frame_info(struct ieee80211_hw *hw, fi->keyix = an->ps_key; else fi->keyix = ATH9K_TXKEYIX_INVALID; + fi->dyn_smps = sta && sta->smps_mode ==IEEE80211_SMPS_DYNAMIC ; fi->keytype = keytype; fi->framelen = framelen; fi->tx_power = txpower;
drivers/net/wireless/libertas/if_sdio.c +5 -0
@@ -1229,6 +1229,10 @@ static int if_sdio_probe(struct sdio_func *func,spin_lock_init (&card->lock); card->workqueue =create_workqueue ("libertas_sdio" ); +if (unlikely (!card->workqueue)) { + ret = -ENOMEM ; + goto err_queue; + }INIT_WORK (&card->packet_worker, if_sdio_host_to_card_worker);init_waitqueue_head (&card->pwron_waitq);
@@ -1282,6 +1286,7 @@ err_activate_card:lbs_remove_card (priv); free:destroy_workqueue (card->workqueue); +err_queue:while (card->packets) { packet = card->packets; card->packets = card->packets->next;
drivers/pci/host/pci-xgene-msi.c +3 -7
@@ -393,13 +393,9 @@ static int xgene_msi_hwirq_alloc(unsigned int cpu)if (!msi_group->gic_irq)continue ; -irq_set_chained_handler (msi_group->gic_irq, - xgene_msi_isr); - err =irq_set_handler_data (msi_group->gic_irq, msi_group); -if (err) { -pr_err ("failed to register GIC IRQ handler\n" ); -return -EINVAL ; - } +irq_set_chained_handler_and_data (msi_group->gic_irq, + xgene_msi_isr, msi_group); +/* * Statically allocate MSI GIC IRQs to each CPU core. * With 8-core X-Gene v1, 2 MSI GIC IRQs are allocated
drivers/s390/block/dasd.c +1 -2
@@ -3286,8 +3286,6 @@ void dasd_generic_remove(struct ccw_device *cdev)struct dasd_device *device;struct dasd_block *block; - cdev->handler =NULL ; - device =dasd_device_from_cdev (cdev);if (IS_ERR (device)) {dasd_remove_sysfs_files (cdev);
@@ -3306,6 +3304,7 @@ void dasd_generic_remove(struct ccw_device *cdev)* no quite down yet. */ dasd_set_target_state (device,DASD_STATE_NEW ); + cdev->handler =NULL ;/* dasd_delete_device destroys the device reference. */ block = device->block;dasd_delete_device (device);
drivers/scsi/libiscsi.c +3 -8
@@ -1568,14 +1568,9 @@ check_mgmt: } rc =iscsi_prep_scsi_cmd_pdu (conn->task);if (rc) { -if (rc == -ENOMEM || rc == -EACCES ) { -spin_lock_bh (&conn->taskqueuelock); -list_add_tail (&conn->task->running, - &conn->cmdqueue); - conn->task =NULL ; -spin_unlock_bh (&conn->taskqueuelock); - goto done; - }else +if (rc == -ENOMEM || rc == -EACCES ) +fail_scsi_task (conn->task,DID_IMM_RETRY ); +else fail_scsi_task (conn->task,DID_ABORT );spin_lock_bh (&conn->taskqueuelock);continue ;
drivers/staging/comedi/drivers/addi_apci_1032.c +3 -1
@@ -269,6 +269,7 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)struct apci1032_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev;unsigned int ctrl; +unsigned short val;/* check interrupt is from this device */ if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) &
@@ -284,7 +285,8 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)outl (ctrl & ~APCI1032_CTRL_INT_ENA , dev->iobase +APCI1032_CTRL_REG ); s->state =inl (dev->iobase +APCI1032_STATUS_REG ) &0xffff ; -comedi_buf_write_samples (s, &s->state,1 ); + val = s->state; +comedi_buf_write_samples (s, &val,1 );comedi_handle_events (dev, s);/* enable the interrupt */
drivers/staging/comedi/drivers/addi_apci_1500.c +9 -9
@@ -217,7 +217,7 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)struct comedi_device *dev = d;struct apci1500_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev; -unsigned int status =0 ; +unsigned short status =0 ;unsigned int val; val =inl (devpriv->amcc +AMCC_OP_REG_INTCSR );
@@ -247,14 +247,14 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)* * Mask Meaning * ---------- ------------------------------------------ -* 0x00000001 Event 1 has occurred -* 0x00000010 Event 2 has occurred -* 0x00000100 Counter/timer 1 has run down (not implemented) -* 0x00001000 Counter/timer 2 has run down (not implemented) -* 0x00010000 Counter 3 has run down (not implemented) -* 0x00100000 Watchdog has run down (not implemented) -* 0x01000000 Voltage error -* 0x10000000 Short-circuit error +* 0b00000001 Event 1 has occurred +* 0b00000010 Event 2 has occurred +* 0b00000100 Counter/timer 1 has run down (not implemented) +* 0b00001000 Counter/timer 2 has run down (not implemented) +* 0b00010000 Counter 3 has run down (not implemented) +* 0b00100000 Watchdog has run down (not implemented) +* 0b01000000 Voltage error +* 0b10000000 Short-circuit error */ comedi_buf_write_samples (s, &status,1 );comedi_handle_events (dev, s);
drivers/staging/comedi/drivers/adv_pci1710.c +5 -5
@@ -351,11 +351,11 @@ static int pci171x_ai_eoc(struct comedi_device *dev,static int pci171x_ai_read_sample (struct comedi_device *dev,struct comedi_subdevice *s,unsigned int cur_chan, -unsigned int *val) +unsigned short *val) {const struct boardtype *board = dev->board_ptr;struct pci1710_private *devpriv = dev->private; -unsigned int sample; +unsigned short sample;unsigned int chan; sample =inw (dev->iobase +PCI171X_AD_DATA_REG );
@@ -395,7 +395,7 @@ static int pci171x_ai_insn_read(struct comedi_device *dev,pci171x_ai_setup_chanlist (dev, s, &insn->chanspec,1 ,1 );for (i =0 ; i < insn->n; i++) { -unsigned int val; +unsigned short val;/* start conversion */ outw (0 , dev->iobase +PCI171X_SOFTTRG_REG );
@@ -516,7 +516,7 @@ static void pci1710_handle_every_sample(struct comedi_device *dev, {struct comedi_cmd *cmd = &s->async->cmd;unsigned int status; -unsigned int val; +unsigned short val;int ret; status =inw (dev->iobase +PCI171X_STATUS_REG );
@@ -576,7 +576,7 @@ static void pci1710_handle_fifo(struct comedi_device *dev, }for (i =0 ; i < devpriv->max_samples; i++) { -unsigned int val; +unsigned short val;int ret; ret =pci171x_ai_read_sample (dev, s, s->async->cur_chan, &val);
drivers/staging/comedi/drivers/das6402.c +1 -1
@@ -193,7 +193,7 @@ static irqreturn_t das6402_interrupt(int irq, void *d)if (status &DAS6402_STATUS_FFULL ) { async->events |=COMEDI_CB_OVERFLOW ; }else if (status &DAS6402_STATUS_FFNE ) { -unsigned int val; +unsigned short val; val =das6402_ai_read_sample (dev, s);comedi_buf_write_samples (s, &val,1 );
drivers/staging/comedi/drivers/das800.c +1 -1
@@ -436,7 +436,7 @@ static irqreturn_t das800_interrupt(int irq, void *d)struct comedi_cmd *cmd;unsigned long irq_flags;unsigned int status; -unsigned int val; +unsigned short val;bool fifo_empty;bool fifo_overflow;int i;
drivers/staging/comedi/drivers/dmm32at.c +1 -1
@@ -411,7 +411,7 @@ static irqreturn_t dmm32at_isr(int irq, void *d) {struct comedi_device *dev = d;unsigned char intstat; -unsigned int val; +unsigned short val;int i;if (!dev->attached) {
drivers/staging/comedi/drivers/me4000.c +1 -1
@@ -933,7 +933,7 @@ static irqreturn_t me4000_ai_isr(int irq, void *dev_id)struct comedi_subdevice *s = dev->read_subdev;int i;int c =0 ; -unsigned int lval; +unsigned short lval;if (!dev->attached)return IRQ_NONE ;
drivers/staging/comedi/drivers/pcl711.c +1 -1
@@ -193,7 +193,7 @@ static irqreturn_t pcl711_interrupt(int irq, void *d)struct comedi_device *dev = d;struct comedi_subdevice *s = dev->read_subdev;struct comedi_cmd *cmd = &s->async->cmd; -unsigned int data; +unsigned short data;if (!dev->attached) {dev_err (dev->class_dev,"spurious interrupt\n" );
drivers/staging/comedi/drivers/pcl818.c +1 -1
@@ -422,7 +422,7 @@ static int pcl818_ai_eoc(struct comedi_device *dev,static bool pcl818_ai_write_sample (struct comedi_device *dev,struct comedi_subdevice *s, -unsigned int chan,unsigned int val) +unsigned int chan,unsigned short val) {struct pcl818_private *devpriv = dev->private;struct comedi_cmd *cmd = &s->async->cmd;
drivers/staging/rtl8188eu/core/rtw_ap.c +5 -0
@@ -921,6 +921,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* SSID */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));if (p && ie_len >0 ) { + ie_len =min_t (int, ie_len,sizeof (pbss_network->Ssid.Ssid));memset (&pbss_network->Ssid,0 ,sizeof (struct ndis_802_11_ssid ));memcpy (pbss_network->Ssid.Ssid, (p +2 ), ie_len); pbss_network->Ssid.SsidLength = ie_len;
@@ -939,6 +940,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));if (p !=NULL ) { + ie_len =min_t (int, ie_len,NDIS_802_11_LENGTH_RATES_EX );memcpy (supportRate, p+2 , ie_len); supportRateNum = ie_len; }
@@ -946,6 +948,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get ext_supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);if (p !=NULL ) { + ie_len =min_t (int, ie_len, +NDIS_802_11_LENGTH_RATES_EX - supportRateNum);memcpy (supportRate+supportRateNum, p+2 , ie_len); supportRateNum += ie_len; }
@@ -1061,6 +1065,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pht_cap->supp_mcs_set[0 ] =0xff ; pht_cap->supp_mcs_set[1 ] =0x0 ; } + ie_len =min_t (int, ie_len,sizeof (pmlmepriv->htpriv.ht_cap));memcpy (&pmlmepriv->htpriv.ht_cap, p+2 , ie_len); }
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +4 -2
@@ -1174,9 +1174,11 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,break ; } sec_len = *(pos++); len -=1 ; -if (sec_len >0 && sec_len <= len) { +if (sec_len >0 && + sec_len <= len && + sec_len <=32 ) { ssid[ssid_index].SsidLength = sec_len; -memcpy (ssid[ssid_index].Ssid, pos, ssid[ssid_index].SsidLength); +memcpy (ssid[ssid_index].Ssid, pos, sec_len); ssid_index++; } pos += sec_len;
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c +4 -3
@@ -419,9 +419,10 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, - req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8192u/r8192U_wx.c +4 -2
@@ -341,8 +341,10 @@ static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8712/rtl871x_cmd.c +4 -2
@@ -242,8 +242,10 @@ u8 r8712_sitesurvey_cmd(struct _adapter *padapter, psurveyPara->ss_ssidlen =0 ;memset (psurveyPara->ss_ssid,0 ,IW_ESSID_MAX_SIZE +1 );if ((pssid !=NULL ) && (pssid->SsidLength)) { -memcpy (psurveyPara->ss_ssid, pssid->Ssid, pssid->SsidLength); - psurveyPara->ss_ssidlen =cpu_to_le32 (pssid->SsidLength); +int len =min_t (int, pssid->SsidLength,IW_ESSID_MAX_SIZE ); + +memcpy (psurveyPara->ss_ssid, pssid->Ssid, len); + psurveyPara->ss_ssidlen =cpu_to_le32 (len); }set_fwstate (pmlmepriv, _FW_UNDER_SURVEY);r8712_enqueue_cmd (pcmdpriv, ph2c);
drivers/staging/rtl8712/rtl871x_ioctl_linux.c +1 -1
@@ -935,7 +935,7 @@ static int r871x_wx_set_priv(struct net_device *dev,struct iw_point *dwrq = (struct iw_point *)awrq; len = dwrq->length; - ext =memdup_user (dwrq->pointer, len); + ext =strndup_user (dwrq->pointer, len);if (IS_ERR (ext))return PTR_ERR (ext);
drivers/usb/class/cdc-acm.c +5 -0
@@ -1928,6 +1928,11 @@ static const struct usb_device_id acm_ids[] = { .driver_info = SEND_ZERO_PACKET, }, +/* Exclude Goodix Fingerprint Reader */ + { USB_DEVICE(0x27c6, 0x5395), + .driver_info =IGNORE_DEVICE , + }, + /* control interfaces without any protocol set */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, USB_CDC_PROTO_NONE) },
drivers/usb/gadget/function/f_uac2.c +1 -1
@@ -997,7 +997,7 @@ static int set_ep_max_packet_size(const struct f_uac2_opts *uac2_opts, } max_size_bw =num_channels (chmask) * ssize * -DIV_ROUND_UP (srate, factor / (1 << (ep_desc->bInterval -1 ))); + ((srate / (factor / (1 << (ep_desc->bInterval -1 )))) +1 ); ep_desc->wMaxPacketSize =cpu_to_le16 (min_t (u16, max_size_bw, max_size_ep));
drivers/usb/host/xhci.c +13 -3
@@ -1018,6 +1018,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)struct usb_hcd *secondary_hcd;int retval =0 ;bool comp_timer_running = false; +bool pending_portevent = false;if (!hcd->state)return 0 ;
@@ -1151,13 +1152,22 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) done:if (retval ==0 ) { -/* Resume root hubs only when have pending events. */ -if (xhci_pending_portevent (xhci)) { +/* +* Resume roothubs only if there are pending events. +* USB 3 devices resend U3 LFPS wake after a 100ms delay if +* the first wake signalling failed, give it that chance. +*/ + pending_portevent =xhci_pending_portevent (xhci); +if (!pending_portevent) { +msleep (120 ); + pending_portevent =xhci_pending_portevent (xhci); + } + +if (pending_portevent) {usb_hcd_resume_root_hub (xhci->shared_hcd);usb_hcd_resume_root_hub (hcd); } } -/* * If system is subject to the Quirk, Compliance Mode Timer needs to * be re-initialized Always after a system resume. Ports are subject
drivers/usb/renesas_usbhs/pipe.c +2 -0
@@ -805,6 +805,8 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,void usbhs_pipe_free (struct usbhs_pipe *pipe) { +usbhsp_pipe_select (pipe); +usbhsp_pipe_cfg_set (pipe,0xFFFF ,0 );usbhsp_put_pipe (pipe); }
drivers/usb/serial/ch341.c +1 -0
@@ -75,6 +75,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1a86, 0x7522) }, { USB_DEVICE(0x1a86, 0x7523) }, { USB_DEVICE(0x4348, 0x5523) }, + { USB_DEVICE(0x9986, 0x7523) }, { }, };MODULE_DEVICE_TABLE (usb, id_table);
drivers/usb/serial/cp210x.c +3 -0
@@ -142,6 +142,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0x88D8) }, /* Acuity Brands nLight Air Adapter */ { USB_DEVICE(0x10C4, 0x88FB) }, /* CESINEL MEDCAL STII Network Analyzer */ { USB_DEVICE(0x10C4, 0x8938) }, /* CESINEL MEDCAL S II Network Analyzer */ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
@@ -198,6 +199,8 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */ { USB_DEVICE(0x1901, 0x0195) }, /* GE B850/B650/B450 CP2104 DP UART interface */ { USB_DEVICE(0x1901, 0x0196) }, /* GE B850 CP2105 DP UART interface */ + { USB_DEVICE(0x1901, 0x0197) }, /* GE CS1000 Display serial interface */ + { USB_DEVICE(0x1901, 0x0198) }, /* GE CS1000 M.2 Key E serial interface */ { USB_DEVICE(0x199B, 0xBA30) }, /* LORD WSDA-200-USB */ { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
drivers/usb/serial/io_edgeport.c +16 -10
@@ -2966,26 +2966,32 @@ static int edge_startup(struct usb_serial *serial) response = -ENODEV ; } -usb_free_urb (edge_serial->interrupt_read_urb); -kfree (edge_serial->interrupt_in_buffer); - -usb_free_urb (edge_serial->read_urb); -kfree (edge_serial->bulk_in_buffer); - -kfree (edge_serial); - -return response; + goto error; }/* start interrupt read for this edgeport this interrupt will * continue as long as the edgeport is connected */ response =usb_submit_urb (edge_serial->interrupt_read_urb,GFP_KERNEL ); -if (response) +if (response) {dev_err (ddev,"%s - Error %d submitting control urb\n" , __func__, response); + + goto error; + } }return response; + +error: +usb_free_urb (edge_serial->interrupt_read_urb); +kfree (edge_serial->interrupt_in_buffer); + +usb_free_urb (edge_serial->read_urb); +kfree (edge_serial->bulk_in_buffer); + +kfree (edge_serial); + +return response; }
drivers/usb/usbip/stub_dev.c +35 -7
70 lines not on this page · raw message
drivers/usb/usbip/vhci_sysfs.c +9 -1
@@ -202,8 +202,16 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,/* Extract socket from fd. */ socket =sockfd_lookup (sockfd, &err); -if (!socket) +if (!socket) { +dev_err (dev,"failed to lookup sock" );return -EINVAL ; + } +if (socket->type !=SOCK_STREAM ) { +dev_err (dev,"Expecting SOCK_STREAM - found %d" , + socket->type); +sockfd_put (socket); +return -EINVAL ; + }/* now need lock until setting vdev status as used */
drivers/xen/events/events_2l.c +15 -7
@@ -46,6 +46,11 @@ static unsigned evtchn_2l_max_channels(void)return EVTCHN_2L_NR_CHANNELS ; } +static void evtchn_2l_remove (evtchn_port_t evtchn,unsigned int cpu) +{ +clear_bit (evtchn,BM (per_cpu (cpu_evtchn_mask, cpu))); +} +static void evtchn_2l_bind_to_cpu (struct irq_info *info,unsigned cpu) {clear_bit (info->evtchn,BM (per_cpu (cpu_evtchn_mask, info->cpu)));
@@ -70,12 +75,6 @@ static bool evtchn_2l_is_pending(unsigned port)return sync_test_bit (port,BM (&s->evtchn_pending[0 ])); } -static bool evtchn_2l_test_and_set_mask (unsigned port) -{ -struct shared_info *s = HYPERVISOR_shared_info; -return sync_test_and_set_bit (port,BM (&s->evtchn_mask[0 ])); -} -static void evtchn_2l_mask (unsigned port) {struct shared_info *s = HYPERVISOR_shared_info;
@@ -353,18 +352,27 @@ static void evtchn_2l_resume(void) EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); } +static int evtchn_2l_percpu_deinit (unsigned int cpu) +{ +memset (per_cpu (cpu_evtchn_mask, cpu),0 ,sizeof (xen_ulong_t) * +EVTCHN_2L_NR_CHANNELS /BITS_PER_EVTCHN_WORD ); + +return 0 ; +} +static const struct evtchn_ops evtchn_ops_2l = { .max_channels = evtchn_2l_max_channels, .nr_channels = evtchn_2l_max_channels, + .remove = evtchn_2l_remove, .bind_to_cpu = evtchn_2l_bind_to_cpu, .clear_pending = evtchn_2l_clear_pending, .set_pending = evtchn_2l_set_pending, .is_pending = evtchn_2l_is_pending, - .test_and_set_mask = evtchn_2l_test_and_set_mask, .mask = evtchn_2l_mask, .unmask = evtchn_2l_unmask, .handle_events = evtchn_2l_handle_events, .resume = evtchn_2l_resume, + .percpu_deinit = evtchn_2l_percpu_deinit, };void __init xen_evtchn_2l_init (void )
drivers/xen/events/events_base.c +97 -33
275 lines not on this page · raw message
drivers/xen/events/events_fifo.c +0 -7
@@ -209,12 +209,6 @@ static bool evtchn_fifo_is_pending(unsigned port)return sync_test_bit (EVTCHN_FIFO_BIT (PENDING , word),BM (word)); } -static bool evtchn_fifo_test_and_set_mask (unsigned port) -{ -event_word_t *word =event_word_from_port (port); -return sync_test_and_set_bit (EVTCHN_FIFO_BIT (MASKED , word),BM (word)); -} -static void evtchn_fifo_mask (unsigned port) {event_word_t *word =event_word_from_port (port);
@@ -421,7 +415,6 @@ static const struct evtchn_ops evtchn_ops_fifo = { .clear_pending = evtchn_fifo_clear_pending, .set_pending = evtchn_fifo_set_pending, .is_pending = evtchn_fifo_is_pending, - .test_and_set_mask = evtchn_fifo_test_and_set_mask, .mask = evtchn_fifo_mask, .unmask = evtchn_fifo_unmask, .handle_events = evtchn_fifo_handle_events,
drivers/xen/events/events_internal.h +15 -7
@@ -35,13 +35,19 @@ struct irq_info {struct list_head eoi_list;short refcnt;short spurious_cnt; -enum xen_irq_type type;/* type */ +short type;/* type */ +u8 mask_reason;/* Why is event channel masked */ +#define EVT_MASK_REASON_EXPLICIT 0x01 +#define EVT_MASK_REASON_TEMPORARY 0x02 +#define EVT_MASK_REASON_EOI_PENDING 0x04 +u8 is_active;/* Is event just being handled? */ unsigned irq;unsigned int evtchn;/* event channel */ unsigned short cpu;/* cpu bound */ unsigned short eoi_cpu;/* EOI must happen on this cpu */ unsigned int irq_epoch;/* If eoi_cpu valid: irq_epoch of event */ u64 eoi_time;/* Time in jiffies when to EOI. */ +spinlock_t lock;union {unsigned short virq;
@@ -67,12 +73,12 @@ struct evtchn_ops {unsigned (*nr_channels)(void );int (*setup)(struct irq_info *info); +void (*remove)(evtchn_port_t port,unsigned int cpu);void (*bind_to_cpu)(struct irq_info *info,unsigned cpu);void (*clear_pending)(unsigned port);void (*set_pending)(unsigned port);bool (*is_pending)(unsigned port); -bool (*test_and_set_mask)(unsigned port);void (*mask)(unsigned port);void (*unmask)(unsigned port);
@@ -109,6 +115,13 @@ static inline int xen_evtchn_port_setup(struct irq_info *info)return 0 ; } +static inline void xen_evtchn_port_remove (evtchn_port_t evtchn, +unsigned int cpu) +{ +if (evtchn_ops->remove) + evtchn_ops->remove (evtchn, cpu); +} +static inline void xen_evtchn_port_bind_to_cpu (struct irq_info *info,unsigned cpu) {
@@ -130,11 +143,6 @@ static inline bool test_evtchn(unsigned port)return evtchn_ops->is_pending (port); } -static inline bool test_and_set_mask (unsigned port) -{ -return evtchn_ops->test_and_set_mask (port); -} -static inline void mask_evtchn (unsigned port) {return evtchn_ops->mask (port);
fs/cifs/cifsfs.c +1 -1
@@ -204,7 +204,7 @@ cifs_statfs(struct dentry *dentry, struct kstatfs *buf) rc = server->ops->queryfs (xid, tcon, buf);free_xid (xid); -return 0 ; +return rc; }static long cifs_fallocate (struct file *file,int mode,loff_t off,loff_t len)
fs/nfs/nfs4proc.c +1 -1
@@ -4922,7 +4922,7 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf,return ret;if (!(fattr.valid &NFS_ATTR_FATTR_V4_SECURITY_LABEL ))return -ENOENT ; -return 0 ; +return label.len; } static int nfs4_get_security_label(struct inode *inode, void *buf,
include/linux/can/skb.h +6 -2
@@ -48,8 +48,12 @@ static inline void can_skb_reserve(struct sk_buff *skb)static inline void can_skb_set_owner (struct sk_buff *skb,struct sock *sk) { -if (sk) { -sock_hold (sk); +/* If the socket has already been closed by user space, the +* refcount may already be 0 (and the socket will be freed +* after the last TX skb has been freed). So only increase +* socket refcount if the refcount is > 0. +*/ +if (sk &&atomic_inc_not_zero (&sk->sk_refcnt)) { skb->destructor = sock_efree; skb->sk = sk; }
include/uapi/linux/netfilter/nfnetlink_cthelper.h +1 -1
@@ -4,7 +4,7 @@#define NFCT_HELPER_STATUS_DISABLED 0#define NFCT_HELPER_STATUS_ENABLED 1 -enum nfnl_acct_msg_types { +enum nfnl_cthelper_msg_types {NFNL_MSG_CTHELPER_NEW ,NFNL_MSG_CTHELPER_GET ,NFNL_MSG_CTHELPER_DEL ,
kernel/futex.c +177 -32
55 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.