Linux 4.9.156
Greg KH
maintainerI'm announcing the release of the 4.9.156 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.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/arm/boot/dts/mmp2.dtsi | 9 + arch/arm/boot/dts/omap4-sdp.dts | 1 arch/arm/kernel/smp.c | 15 ++ arch/arm/kvm/mmio.c | 11 +- arch/arm/mach-omap2/omap_hwmod.c | 6 - arch/arm/mach-pxa/cm-x300.c | 2 arch/arm/mach-pxa/littleton.c | 2 arch/arm/mach-pxa/zeus.c | 2 arch/arm64/kernel/entry-ftrace.S | 1 arch/mips/include/uapi/asm/inst.h | 2 arch/mips/ralink/Kconfig | 1 arch/powerpc/include/asm/uaccess.h | 2 arch/powerpc/platforms/pseries/dlpar.c | 2 arch/um/include/asm/pgtable.h | 9 + arch/x86/events/intel/core.c | 10 + arch/x86/events/intel/uncore_snbep.c | 4 arch/x86/include/asm/fpu/internal.h | 3 arch/x86/kernel/cpu/mcheck/mce.c | 1 arch/x86/kvm/svm.c | 7 + arch/x86/kvm/vmx.c | 1 arch/x86/kvm/x86.c | 7 + arch/x86/pci/broadcom_bus.c | 4 drivers/ata/sata_rcar.c | 4 drivers/block/drbd/drbd_nl.c | 15 +- drivers/block/drbd/drbd_receiver.c | 13 +- drivers/block/sunvdc.c | 5 drivers/block/swim3.c | 6 - drivers/cdrom/gdrom.c | 1 drivers/clk/imx/clk-imx6sl.c | 6 + drivers/clk/sunxi-ng/ccu-sun8i-a33.c | 6 - drivers/cpuidle/cpuidle-big_little.c | 7 + drivers/crypto/ux500/cryp/cryp_core.c | 4 drivers/crypto/ux500/hash/hash_core.c | 2 drivers/dma/bcm2835-dma.c | 70 ++++-------- drivers/dma/imx-dma.c | 8 - drivers/dma/xilinx/zynqmp_dma.c | 2 drivers/firmware/efi/vars.c | 99 ++++++++++++++---- drivers/gpu/drm/drm_bufs.c | 3 drivers/gpu/drm/vc4/vc4_plane.c | 12 +- drivers/gpu/ipu-v3/ipu-image-convert.c | 10 + drivers/hid/hid-lenovo.c | 10 + drivers/hwmon/lm80.c | 26 +++- drivers/i2c/busses/i2c-axxia.c | 32 ++--- drivers/iio/accel/kxcjk-1013.c | 1 drivers/infiniband/hw/hfi1/ruc.c | 7 + drivers/infiniband/hw/qib/qib_ruc.c | 7 + drivers/iommu/amd_iommu.c | 9 + drivers/iommu/arm-smmu-v3.c | 8 + drivers/iommu/arm-smmu.c | 3 drivers/isdn/hisax/hfc_pci.c | 2 drivers/media/i2c/ad9389b.c | 2 drivers/media/i2c/adv7511.c | 2 drivers/media/i2c/adv7604.c | 4 drivers/media/i2c/adv7842.c | 4 drivers/media/i2c/tc358743.c | 2 drivers/media/i2c/ths8200.c | 2 drivers/media/platform/davinci/vpbe.c | 7 - drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 10 + drivers/memstick/core/memstick.c | 3 drivers/net/ethernet/broadcom/bcmsysport.c | 25 +--- drivers/net/ethernet/broadcom/bcmsysport.h | 2 drivers/net/ethernet/cisco/enic/enic_main.c | 2 drivers/net/ethernet/freescale/fman/fman_memac.c | 2 drivers/net/ethernet/freescale/fman/fman_tgec.c | 2 drivers/net/ethernet/intel/i40e/i40e_main.c | 3 drivers/net/ethernet/intel/igb/igb_main.c | 8 - drivers/net/ethernet/marvell/skge.c | 6 - drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 14 ++ drivers/net/ethernet/sun/niu.c | 10 + drivers/net/phy/dp83640.c | 13 +- drivers/net/wireless/ath/ath9k/ath9k.h | 2 drivers/net/wireless/ath/ath9k/dynack.c | 35 ++++-- drivers/net/wireless/ath/ath9k/dynack.h | 6 - drivers/net/wireless/ath/ath9k/xmit.c | 5 drivers/net/wireless/st/cw1200/scan.c | 13 +- drivers/pci/host/vmd.c | 15 ++ drivers/pinctrl/meson/pinctrl-meson8.c | 3 drivers/pinctrl/meson/pinctrl-meson8b.c | 13 +- drivers/ptp/ptp_chardev.c | 5 drivers/scsi/aic94xx/aic94xx_init.c | 8 - drivers/scsi/lpfc/lpfc_els.c | 3 drivers/scsi/smartpqi/smartpqi_init.c | 6 + drivers/soc/bcm/brcmstb/common.c | 6 - drivers/soc/tegra/common.c | 6 - drivers/staging/iio/adc/ad7280a.c | 17 ++- drivers/staging/iio/adc/ad7780.c | 6 - drivers/staging/iio/resolver/ad2s90.c | 7 + drivers/thermal/thermal-generic-adc.c | 12 +- drivers/thermal/thermal_core.c | 12 +- drivers/thermal/thermal_hwmon.h | 4 drivers/tty/serial/fsl_lpuart.c | 4 drivers/tty/serial/samsung.c | 3 drivers/tty/serial/serial_core.c | 6 + drivers/usb/core/hub.c | 10 + drivers/usb/gadget/udc/net2272.c | 2 drivers/usb/musb/musb_gadget.c | 13 -- drivers/usb/musb/musbhsdma.c | 21 ++- drivers/usb/phy/phy-am335x.c | 5 drivers/video/console/fbcon.c | 2 drivers/video/fbdev/clps711x-fb.c | 5 drivers/video/fbdev/core/fbmem.c | 8 + fs/binfmt_script.c | 10 + fs/cifs/readdir.c | 9 + fs/dlm/ast.c | 10 + fs/eventpoll.c | 2 fs/f2fs/acl.c | 14 +- fs/f2fs/f2fs.h | 11 +- fs/f2fs/file.c | 3 fs/f2fs/shrinker.c | 2 fs/fuse/dev.c | 4 fs/fuse/file.c | 2 fs/nfs/super.c | 3 fs/nfsd/nfsctl.c | 2 fs/ocfs2/buffer_head_io.c | 2 fs/udf/inode.c | 6 + include/linux/genl_magic_struct.h | 5 include/linux/sched.h | 1 include/sound/compress_driver.h | 6 - kernel/events/ring_buffer.c | 3 kernel/hung_task.c | 8 - kernel/sysctl.c | 2 kernel/time/timekeeping.c | 4 lib/seq_buf.c | 6 - mm/oom_kill.c | 4 net/bluetooth/hci_event.c | 6 + net/dccp/ccid.h | 4 net/dsa/slave.c | 12 +- net/ipv6/xfrm6_tunnel.c | 3 net/mac80211/rx.c | 5 net/rds/bind.c | 6 - net/rxrpc/recvmsg.c | 3 scripts/decode_stacktrace.sh | 2 scripts/mod/modpost.c | 50 ++++----- security/smack/smack_lsm.c | 12 +- sound/pci/hda/hda_bind.c | 3 sound/pci/hda/hda_codec.h | 1 sound/pci/hda/hda_intel.c | 2 sound/soc/fsl/Kconfig | 2 sound/soc/intel/atom/sst/sst_loader.c | 8 - tools/perf/arch/x86/util/kvm-stat.c | 2 tools/perf/tests/evsel-tp-sched.c | 2 tools/perf/util/header.c | 2 tools/perf/util/probe-file.c | 2 virt/kvm/kvm_main.c | 3 145 files changed, 760 insertions(+), 357 deletions(-)
Adamski, Krzysztof (Nokia - PL/Wroclaw) (1):
i2c-axxia: check for error conditions first
Aditya Pakki (1):
HID: lenovo: Add checks to fix of_led_classdev_register
Alexey Khoroshilov (3):
media: mtk-vcodec: Release device nodes in mtk_vcodec_init_enc_pm()
media: DaVinci-VPBE: fix error handling in vpbe_initialize()
video: clps711x-fb: release disp device node in probe()
Andy Duan (1):
serial: fsl_lpuart: clear parity enable bit when disable parity
Anson Huang (1):
clk: imx6sl: ensure MMDC CH0 handshake is bypassed
Anton Ivanov (1):
um: Avoid marking pages with "changed protection"
Arend van Spriel (1):
firmware/efi: Add NULL pointer checks in efivars API functions
Arnaldo Carvalho de Melo (2):
perf header: Fix unchecked usage of strncpy() perf probe: Fix unchecked usage of strncpy()
Arnd Bergmann (2):
ASoC: Intel: mrfld: fix uninitialized variable access
ARM: pxa: avoid section mismatch warning
Bart Van Assche (1):
timekeeping: Use proper seqcount initializer
Beomho Seo (1):
tty: serial: samsung: Properly set flags in autoCTS mode
Bin Liu (1):
usb: phy: am335x: fix race condition in _probe
Bjorn Andersson (1):
thermal: generic-adc: Fix adc to temp interpolation
Bob Peterson (1):
dlm: Don't swamp the CPU with callbacks queued during recovery
Boris Brezillon (1):
drm/vc4: ->x_scaling[1] should never be set to VC4_SCALING_NONE
Charles Keepax (1):
ALSA: compress: Fix stop handling on compressed capture streams
Chen-Yu Tsai (1):
clk: sunxi-ng: a33: Set CLK_SET_RATE_PARENT for all audio module clocks
Cheng Lin (1):
proc/sysctl: fix return error for proc_doulongvec_minmax()
Chris Perl (1):
NFS: nfs_compare_mount_options always compare auth flavors.
Christophe Leroy (1):
powerpc/uaccess: fix warning/error with access_ok()
Colin Ian King (1):
x86/PCI: Fix Broadcom CNB20LE unintended sign extension (redux)
Cong Wang (1):
net/mlx5e: Force CHECKSUM_UNNECESSARY for short ethernet frames
Dan Carpenter (1):
skge: potential memory corruption in skge_get_regs()
Dave Carroll (1):
scsi: smartpqi: correct volume status
Davidlohr Bueso (1):
fs/epoll: drop ovflist branch prediction
Eduardo Valentin (1):
thermal: hwmon: inline helpers when CONFIG_THERMAL_HWMON is not set
Eric Dumazet (3):
dccp: fool proof ccid_hc_[rt]x_parse_options()
rxrpc: bad unlock balance in rxrpc_recvmsg
rds: fix refcount bug in rds_sock_addref
Fabio Estevam (1):
ASoC: fsl: Fix SND_SOC_EUKREA_TLV320 build error on i.MX8M
Finn Thain (1):
block/swim3: Fix -EBUSY error when re-opening device after unmount
Florian Fainelli (1):
net: systemport: Fix WoL with password after deep sleep
Frank Rowand (1):
powerpc/pseries: add of_node_put() in dlpar_detach_node()
Govindarajulu Varadarajan (1):
enic: fix checksum validation for IPv6
Greg Kroah-Hartman (2):
serial: fix race between flush_to_ldisc and tty_open Linux 4.9.156
Gustavo A. R. Silva (3):
drm/bufs: Fix Spectre v1 vulnerability
usb: gadget: udc: net2272: Fix bitwise and boolean operations perf tests evsel-tp-sched: Fix bitwise operator
Hans Verkuil (1):
media: adv*/tc358743/ths8200: fill in min width/height/pixelclock
Hans de Goede (1):
iio: accel: kxcjk1013: Add KIOX010A ACPI Hardware-ID
J. Bruce Fields (1):
nfsd4: fix crash on writing v4_end_grace before nfsd startup
James Bottomley (1):
scsi: aic94xx: fix module loading
James Smart (1):
scsi: lpfc: Correct LCB RJT handling
Jan Kara (1):
udf: Fix BUG on corrupted inode
Jann Horn (2):
fuse: call pipe_buf_release() under pipe lock
kvm: fix kvm_ioctl_create_device() reference counting (CVE-2019-6974)
Jia-Ju Bai (2):
cw1200: Fix concurrency use-after-free bugs in cw1200_hw_scan()
isdn: hisax: hfc_pci: Fix a possible concurrency use-after-free bug in HFCPCI_l1hw()
Jiong Wang (1):
mips: bpf: fix encoding bug for mm_srlv32_op
Johan Hedberg (1):
Bluetooth: Fix unnecessary error message for HCI request completion
Johannes Berg (1):
mac80211: fix radiotap vendor presence bitmap handling
Junxiao Bi (1):
ocfs2: don't clear bh uptodate for block read
Kai-Heng Feng (2):
memstick: Prevent memstick host from getting runtime suspended during card detection
igb: Fix an issue that PME is not enabled during runtime suspend
Kan Liang (1):
perf/x86/intel/uncore: Add Node ID mask
Kangjie Lu (3):
hwmon: (lm80) fix a missing check of the status of SMBus read
hwmon: (lm80) fix a missing check of bus read in lm80 probe
niu: fix missing checks of niu_pci_eeprom_read
Konstantin Khorenko (1):
i40e: define proper net_device::neigh_priv_len
Lars Ellenberg (2):
drbd: disconnect, if the wrong UUIDs are attached on a connected peer
drbd: skip spurious timeout (ping-timeo) when failing promote
Leonid Iziumtsev (1):
dmaengine: imx-dma: fix wrong callback invoke
Lorenzo Bianconi (3):
ath9k: dynack: use authentication messages for 'late' ack
ath9k: dynack: make ewma estimation faster
ath9k: dynack: check da->enabled first in sampling routines
Lubomir Rintel (1):
ARM: dts: mmp2: fix TWSI2
Lukas Wunner (2):
dmaengine: bcm2835: Fix interrupt race on RT
dmaengine: bcm2835: Fix abort of transactions
Mahesh Rajashekhara (1):
scsi: smartpqi: correct host serial num for ssa
Marc Zyngier (1):
scripts/decode_stacktrace: only strip base path when a prefix of the path
Mark Rutland (3):
arm64: ftrace: don't adjust the LR value
arm64: KVM: Skip MMIO insn after emulation perf/core: Don't WARN() for impossible ring-buffer sizes
Martin Blumenstingl (2):
pinctrl: meson: meson8: fix the GPIO function for the GPIOAO pins
pinctrl: meson: meson8b: fix the GPIO function for the GPIOAO pins
Matheus Tavares (1):
staging:iio:ad2s90: Make probe handle spi_setup failure
Mathias Nyman (1):
usb: hub: delay hub autosuspend if USB3 port is still link training
Michael Ellerman (1):
seq_buf: Make seq_buf_puts() null-terminate the buffer
Mike Marciniszyn (1):
IB/hfi1: Add limit test for RC/UC send via loopback
Miklos Szeredi (2):
fuse: decrement NR_WRITEBACK_TEMP on the right page
fuse: handle zero sized retrieve correctly
Miroslav Lichvar (1):
ptp: check gettime64 return code in PTP_SYS_OFFSET ioctl
Nathan Chancellor (5):
ARM: OMAP2+: hwmod: Fix some section annotations
dmaengine: xilinx_dma: Remove __aligned attribute on zynqmp_dma_desc_ll
drbd: Avoid Clang warning about pointless switch statment
crypto: ux500 - Use proper enum in cryp_set_dma_transfer
crypto: ux500 - Use proper enum in hash_set_dma_transfer
Noralf Trønnes (1):
fbdev: fbcon: Fix unregister crash when more than one framebuffer
Oleg Nesterov (1):
exec: load_script: don't blindly truncate shebang string
Paolo Bonzini (1):
KVM: x86: work around leak of uninitialized stack contents (CVE-2019-7222)
Paul Elder (1):
usb: gadget: musb: fix short isoc packets with inventra dma
Peter Rosin (1):
fbdev: fbmem: behave better with small rotated displays and many CPUs
Peter Shier (1):
KVM: nVMX: unconditionally cancel preemption timer in free_nested (CVE-2019-7221)
Peter Zijlstra (1):
perf/x86/intel: Delay memory deallocation until x86_pmu_dead_cpu()
Pu Wen (1):
perf tools: Add Hygon Dhyana support
Renato Lui Geh (1):
staging: iio: ad7780: update voltage on read
Roland Kammerer (1):
drbd: narrow rcu_read_lock in drbd_sync_handshake
Ronnie Sahlberg (1):
cifs: check ntwrk_buf_start for NULL before dereferencing it
Rundong Ge (1):
net: dsa: slave: Don't propagate flag changes on down slave interfaces
Russell King - ARM Linux (1):
ARM: dts: Fix OMAP4430 SDP Ethernet startup
Sahitya Tummala (1):
f2fs: fix sbi->extent_list corruption issue
Sami Tolvanen (1):
modpost: validate symbol names also in find_elf_symbol
Scott Bauer (1):
PCI: vmd: Free up IRQs on suspend path
Scott Wood (1):
fsl/fman: Use GFP_ATOMIC in {memac,tgec}_add_hash_mac_address()
Sebastian Andrzej Siewior (2):
x86/fpu: Add might_fault() to user_insn()
net: dp83640: expire old TX-skb
Sergei Shtylyov (1):
sata_rcar: fix deferred probing
Slawomir Stepien (1):
staging: iio: adc: ad7280a: handle error from __ad7280_read32()
Stefan Roese (1):
MIPS: ralink: Select CONFIG_CPU_MIPSR2_IRQ_VI on MT7620/8
Steve Longerbeam (1):
gpu: ipu-v3: image-convert: Prevent race between run and unprepare
Takashi Iwai (1):
ALSA: hda - Serialize codec registrations
Tetsuo Handa (2):
kernel/hung_task.c: break RCU locks based on jiffies oom, oom_reaper: do not enqueue same task twice
Tiezhu Yang (1):
f2fs: fix wrong return value of f2fs_acl_create
Tony Luck (1):
x86/MCE: Initialize mce.bank in the case of a fatal error in mce_no_way_out()
Vitaly Kuznetsov (1):
KVM: x86: svm: report MSR_IA32_MCG_EXT_CTL as unsupported
Vivek Gautam (1):
iommu/arm-smmu: Add support for qcom,smmu-v2 variant
Wei Wang (1):
Thermal: do not clear passive state during system sleep
Wenwen Wang (1):
gdrom: fix a memory leak bug
Will Deacon (1):
iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer
Yangtao Li (3):
soc/tegra: Don't leak device tree node reference
soc: bcm: brcmstb: Don't leak device tree node reference
cpuidle: big.LITTLE: fix refcount leak
Young Xiao (1):
sunvdc: Do not spin in an infinite loop when vio_ldc_send() returns EAGAIN
Yu Zhao (1):
iommu/amd: Fix amd_iommu=force_isolation
YueHaibing (1):
xfrm6_tunnel: Fix spi check in __xfrm6_tunnel_alloc_spi
Yufen Wang (1):
ARM: 8808/1: kexec:offline panic_smp_self_stop CPU
Yunlei He (1):
f2fs: move dir data flush to write checkpoint process
Zoran Markovic (1):
smack: fix access permissions for keyring
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 155 +SUBLEVEL = 156 EXTRAVERSION = NAME = Roaring Lionus
arch/arm/boot/dts/mmp2.dtsi +6 -3
@@ -220,12 +220,15 @@ status = "disabled"; }; - twsi2: i2c@d4025000 { + twsi2: i2c@d4031000 { compatible = "mrvl,mmp-twsi"; - reg = <0xd4025000 0x1000>; - interrupts = <58>; + reg = <0xd4031000 0x1000>; + interrupt-parent = <&intcmux17>; + interrupts = <0>; clocks = <&soc_clocks MMP2_CLK_TWSI1>; resets = <&soc_clocks MMP2_CLK_TWSI1>; + #address-cells = <1>; + #size-cells = <0>; status = "disabled"; };
arch/arm/boot/dts/omap4-sdp.dts +1 -0
@@ -33,6 +33,7 @@ gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */ enable-active-high; regulator-boot-on; + startup-delay-us = <25000>; }; vbat: fixedregulator-vbat {
arch/arm/kernel/smp.c +15 -0
@@ -690,6 +690,21 @@ void smp_send_stop(void)pr_warn ("SMP: failed to stop secondary CPUs\n" ); } +/* In case panic() and panic() called at the same time on CPU1 and CPU2, +* and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop() +* CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online, +* kdump fails. So split out the panic_smp_self_stop() and add +* set_cpu_online(smp_processor_id(), false). +*/ +void panic_smp_self_stop (void ) +{ +pr_debug ("CPU %u will stop doing anything useful since another CPU has paniced\n" , +smp_processor_id ()); +set_cpu_online (smp_processor_id (), false); +while (1 ) +cpu_relax (); +} +/* * not supported here */
arch/arm/kvm/mmio.c +6 -5
@@ -117,6 +117,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)vcpu_set_reg (vcpu, vcpu->arch.mmio_decode.rt, data); } +/* +* The MMIO instruction is emulated and should not be re-executed +* in the guest. +*/ +kvm_skip_instr (vcpu,kvm_vcpu_trap_il_is32bit (vcpu)); +return 0 ; }
@@ -144,11 +150,6 @@ static int decode_hsr(struct kvm_vcpu *vcpu, bool *is_write, int *len) vcpu->arch.mmio_decode.sign_extend = sign_extend; vcpu->arch.mmio_decode.rt = rt; -/* -* The MMIO instruction is emulated and should not be re-executed -* in the guest. -*/ -kvm_skip_instr (vcpu,kvm_vcpu_trap_il_is32bit (vcpu));return 0 ; }
arch/arm/mach-omap2/omap_hwmod.c +3 -3
@@ -2551,7 +2551,7 @@ static int __init _init(struct omap_hwmod *oh, void *data)* a stub; implementing this properly requires iclk autoidle usecounting in * the clock code. No return value. */ -static void __init _setup_iclk_autoidle (struct omap_hwmod *oh) +static void _setup_iclk_autoidle (struct omap_hwmod *oh) {struct omap_hwmod_ocp_if *os;struct list_head *p;
@@ -2586,7 +2586,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)* reset. Returns 0 upon success or a negative error code upon * failure. */ -static int __init _setup_reset (struct omap_hwmod *oh) +static int _setup_reset (struct omap_hwmod *oh) {int r;
@@ -2647,7 +2647,7 @@ static int __init _setup_reset(struct omap_hwmod *oh)* * No return value. */ -static void __init _setup_postsetup (struct omap_hwmod *oh) +static void _setup_postsetup (struct omap_hwmod *oh) {u8 postsetup_state;
arch/arm/mach-pxa/cm-x300.c +1 -1
@@ -547,7 +547,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = { .exit = cm_x300_u2d_exit, }; -static void cm_x300_init_u2d (void ) +static void __init cm_x300_init_u2d (void ) {pxa3xx_set_u2d_info (&cm_x300_u2d_platform_data); }
arch/arm/mach-pxa/littleton.c +1 -1
@@ -183,7 +183,7 @@ static struct pxafb_mach_info littleton_lcd_info = { .lcd_conn = LCD_COLOR_TFT_16BPP, }; -static void littleton_init_lcd (void ) +static void __init littleton_init_lcd (void ) {pxa_set_fb_info (NULL , &littleton_lcd_info); }
arch/arm/mach-pxa/zeus.c +1 -1
@@ -557,7 +557,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = { .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW, }; -static void zeus_register_ohci (void ) +static void __init zeus_register_ohci (void ) {/* Port 2 is shared between host and client interface. */ UP2OCR =UP2OCR_HXOE |UP2OCR_HXS |UP2OCR_DMPDE |UP2OCR_DPPDE ;
arch/arm64/kernel/entry-ftrace.S +0 -1
@@ -78,7 +78,6 @@ .macro mcount_get_lr reg ldr \reg, [x29] ldr \reg, [\reg, #8] - mcount_adjust_addr \reg, \reg .endm .macro mcount_get_lr_addr reg
arch/mips/include/uapi/asm/inst.h +1 -1
@@ -361,8 +361,8 @@ enum mm_32a_minor_op { mm_ext_op =0x02c , mm_pool32axf_op =0x03c , mm_srl32_op =0x040 , + mm_srlv32_op =0x050 , mm_sra_op =0x080 , - mm_srlv32_op =0x090 , mm_rotr_op =0x0c0 , mm_lwxs_op =0x118 , mm_addu32_op = 0x150,
arch/mips/ralink/Kconfig +1 -0
@@ -38,6 +38,7 @@ choice config SOC_MT7620 bool "MT7620/8" + select CPU_MIPSR2_IRQ_VI select HW_HAS_PCI config SOC_MT7621
arch/powerpc/include/asm/uaccess.h +1 -1
@@ -59,7 +59,7 @@#endif #define access_ok (type, addr, size) \ - (__chk_user_ptr(addr), \ + (__chk_user_ptr(addr), (void)(type), \ __access_ok((__force unsigned long)(addr), (size), get_fs()))/*
arch/powerpc/platforms/pseries/dlpar.c +2 -0
@@ -288,6 +288,8 @@ int dlpar_detach_node(struct device_node *dn)if (rc)return rc; +of_node_put (dn); +return 0 ; }
arch/um/include/asm/pgtable.h +8 -1
@@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte)static inline pte_t pte_wrprotect (pte_t pte) { -pte_clear_bits (pte, _PAGE_RW); +if (likely (pte_get_bits (pte, _PAGE_RW))) +pte_clear_bits (pte, _PAGE_RW); +else +return pte;return (pte_mknewprot (pte)); }static inline pte_t pte_mkread (pte_t pte) { +if (unlikely (pte_get_bits (pte, _PAGE_USER))) +return pte;pte_set_bits (pte, _PAGE_USER);return (pte_mknewprot (pte)); }
@@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pte)static inline pte_t pte_mkwrite (pte_t pte) { +if (unlikely (pte_get_bits (pte, _PAGE_RW))) +return pte;pte_set_bits (pte, _PAGE_RW);return (pte_mknewprot (pte)); }
arch/x86/events/intel/core.c +8 -2
@@ -3234,6 +3234,11 @@ static void free_excl_cntrs(int cpu) }static void intel_pmu_cpu_dying (int cpu) +{ +fini_debug_store_on_cpu (cpu); +} + +static void intel_pmu_cpu_dead (int cpu) {struct cpu_hw_events *cpuc = &per_cpu (cpu_hw_events, cpu);struct intel_shared_regs *pc;
@@ -3246,8 +3251,6 @@ static void intel_pmu_cpu_dying(int cpu) }free_excl_cntrs (cpu); - -fini_debug_store_on_cpu (cpu); } static void intel_pmu_sched_task(struct perf_event_context *ctx,
@@ -3324,6 +3327,7 @@ static __initconst const struct x86_pmu core_pmu = { .cpu_prepare = intel_pmu_cpu_prepare, .cpu_starting = intel_pmu_cpu_starting, .cpu_dying = intel_pmu_cpu_dying, + .cpu_dead = intel_pmu_cpu_dead, };static __initconst const struct x86_pmu intel_pmu = {
@@ -3359,6 +3363,8 @@ static __initconst const struct x86_pmu intel_pmu = { .cpu_prepare = intel_pmu_cpu_prepare, .cpu_starting = intel_pmu_cpu_starting, .cpu_dying = intel_pmu_cpu_dying, + .cpu_dead = intel_pmu_cpu_dead, + .guest_get_msrs = intel_guest_get_msrs, .sched_task = intel_pmu_sched_task, };
arch/x86/events/intel/uncore_snbep.c +3 -1
@@ -1221,6 +1221,8 @@ static struct pci_driver snbep_uncore_pci_driver = { .id_table = snbep_uncore_pci_ids, }; +#define NODE_ID_MASK 0x7 +/* * build pci bus to socket mapping */
@@ -1242,7 +1244,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool err =pci_read_config_dword (ubox_dev, nodeid_loc, &config);if (err)break ; - nodeid = config; + nodeid = config &NODE_ID_MASK ;/* get the Node ID mapping */ err =pci_read_config_dword (ubox_dev, idmap_loc, &config);if (err)
arch/x86/include/asm/fpu/internal.h +3 -0
@@ -97,6 +97,9 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu); #define user_insn(insn, output, input...) \ ({ \ int err; \ + \ + might_fault(); \ + \ asm volatile(ASM_STAC "\n" \ "1:" #insn "\n\t" \ "2: " ASM_CLAC "\n" \
arch/x86/kernel/cpu/mcheck/mce.c +1 -0
@@ -751,6 +751,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,quirk_no_way_out (i, m, regs);if (mce_severity (m, mca_cfg.tolerant, &tmp, true) >=MCE_PANIC_SEVERITY ) { + m->bank = i;mce_read_aux (m, i); *msg = tmp;return 1 ;
arch/x86/kvm/svm.c +7 -0
@@ -5223,6 +5223,13 @@ static bool svm_cpu_has_accelerated_tpr(void)static bool svm_has_emulated_msr (int index) { +switch (index) { +case MSR_IA32_MCG_EXT_CTL : +return false; +default : +break ; + } +return true; }
arch/x86/kvm/vmx.c +1 -0
@@ -7368,6 +7368,7 @@ static void free_nested(struct vcpu_vmx *vmx)if (!vmx->nested.vmxon)return ; +hrtimer_cancel (&vmx->nested.preemption_timer); vmx->nested.vmxon = false;free_vpid (vmx->nested.vpid02);nested_release_vmcs12 (vmx);
arch/x86/kvm/x86.c +7 -0
@@ -4513,6 +4513,13 @@ int kvm_read_guest_virt(struct kvm_vcpu *vcpu, {u32 access = (kvm_x86_ops->get_cpl (vcpu) ==3 ) ?PFERR_USER_MASK :0 ; +/* +* FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED +* is returned, but our callers are not ready for that and they blindly +* call kvm_inject_page_fault. Ensure that they at least do not leak +* uninitialized kernel stack memory into cr2 and error code. +*/ +memset (exception,0 ,sizeof (*exception));return kvm_read_guest_virt_helper (addr, val, bytes, vcpu, access, exception); }
arch/x86/pci/broadcom_bus.c +2 -2
@@ -50,8 +50,8 @@ static void __init cnb20le_res(u8 bus, u8 slot, u8 func) word1 =read_pci_config_16 (bus, slot, func,0xc0 ); word2 =read_pci_config_16 (bus, slot, func,0xc2 );if (word1 != word2) { - res.start = (word1 <<16 ) |0x0000 ; - res.end = (word2 <<16 ) |0xffff ; + res.start = ((resource_size_t ) word1 <<16 ) |0x0000 ; + res.end = ((resource_size_t ) word2 <<16 ) |0xffff ; res.flags =IORESOURCE_MEM ;update_res (info, res.start, res.end, res.flags,0 ); }
drivers/ata/sata_rcar.c +3 -1
@@ -872,7 +872,9 @@ static int sata_rcar_probe(struct platform_device *pdev)int ret =0 ; irq =platform_get_irq (pdev,0 ); -if (irq <=0 ) +if (irq <0 ) +return irq; +if (!irq)return -EINVAL ; priv = devm_kzalloc(&pdev->dev, sizeof(struct sata_rcar_priv),
drivers/block/drbd/drbd_nl.c +8 -7
@@ -668,14 +668,15 @@ drbd_set_role(struct drbd_device *const device, enum drbd_role new_role, int forif (rv ==SS_TWO_PRIMARIES ) {/* Maybe the peer is detected as dead very soon... retry at most once more in this case. */ -int timeo; -rcu_read_lock (); - nc =rcu_dereference (connection->net_conf); - timeo = nc ? (nc->ping_timeo +1 ) *HZ /10 :1 ; -rcu_read_unlock (); -schedule_timeout_interruptible (timeo); -if (try < max_tries) +if (try < max_tries) { +int timeo; try = max_tries -1 ; +rcu_read_lock (); + nc =rcu_dereference (connection->net_conf); + timeo = nc ? (nc->ping_timeo +1 ) *HZ /10 :1 ; +rcu_read_unlock (); +schedule_timeout_interruptible (timeo); + }continue ; }if (rv <SS_SUCCESS ) {
drivers/block/drbd/drbd_receiver.c +7 -6
@@ -3421,7 +3421,7 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,enum drbd_conns rv =C_MASK ;enum drbd_disk_state mydisk;struct net_conf *nc; -int hg, rule_nr, rr_conflict, tentative; +int hg, rule_nr, rr_conflict, tentative, always_asbp; mydisk = device->state.disk;if (mydisk ==D_NEGOTIATING )
@@ -3472,8 +3472,12 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,rcu_read_lock (); nc =rcu_dereference (peer_device->connection->net_conf); + always_asbp = nc->always_asbp; + rr_conflict = nc->rr_conflict; + tentative = nc->tentative; +rcu_read_unlock (); -if (hg ==100 || (hg ==-100 && nc->always_asbp)) { +if (hg ==100 || (hg ==-100 && always_asbp)) {int pcount = (device->state.role ==R_PRIMARY ) + (peer_role ==R_PRIMARY );int forced = (hg ==-100 );
@@ -3512,9 +3516,6 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,"Sync from %s node\n" , (hg < 0) ? "peer" : "this"); } - rr_conflict = nc->rr_conflict; - tentative = nc->tentative; -rcu_read_unlock ();if (hg ==-100 ) {/* FIXME this log message is not correct if we end up here
@@ -4198,7 +4199,7 @@ static int receive_uuids(struct drbd_connection *connection, struct packet_infokfree (device->p_uuid); device->p_uuid = p_uuid; -if (device->state.conn <C_CONNECTED && +if ((device->state.conn <C_CONNECTED || device->state.pdsk ==D_DISKLESS ) && device->state.disk <D_INCONSISTENT && device->state.role ==R_PRIMARY && (device->ed_uuid & ~((u64 )1 )) != (p_uuid[UI_CURRENT ] & ~((u64 )1 ))) {
drivers/block/sunvdc.c +5 -0
@@ -40,6 +40,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);#define WAITING_FOR_GEN_CMD 0x04#define WAITING_FOR_ANY -1 +#define VDC_MAX_RETRIES 10 +static struct workqueue_struct *sunvdc_wq;struct vdc_req_entry {
@@ -419,6 +421,7 @@ static int __vdc_tx_trigger(struct vdc_port *port) .end_idx = dr->prod, };int err, delay; +int retries =0 ; hdr.seq = dr->snd_nxt; delay =1 ;
@@ -431,6 +434,8 @@ static int __vdc_tx_trigger(struct vdc_port *port)udelay (delay);if ((delay <<=1 ) >128 ) delay =128 ; +if (retries++ >VDC_MAX_RETRIES ) +break ; }while (err == -EAGAIN );if (err == -ENOTCONN )
drivers/block/swim3.c +5 -1
@@ -1027,7 +1027,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode)struct swim3 __iomem *sw = fs->swim3;mutex_lock (&swim3_mutex); -if (fs->ref_count >0 && --fs->ref_count ==0 ) { +if (fs->ref_count >0 ) + --fs->ref_count; +else if (fs->ref_count ==-1 ) + fs->ref_count =0 ; +if (fs->ref_count ==0 ) {swim3_action (fs,MOTOR_OFF );out_8 (&sw->control_bic,0xff );swim3_select (fs,RELAX );
drivers/cdrom/gdrom.c +1 -0
@@ -882,6 +882,7 @@ static void __exit exit_gdrom(void)platform_device_unregister (pd);platform_driver_unregister (&gdrom_driver);kfree (gd.toc); +kfree (gd.cd_info); }module_init (init_gdrom);
drivers/clk/imx/clk-imx6sl.c +6 -0
@@ -17,6 +17,8 @@#include "clk.h" +#define CCDR 0x4 +#define BM_CCM_CCDR_MMDC_CH0_MASK (1 << 17)#define CCSR 0xc#define BM_CCSR_PLL1_SW_CLK_SEL (1 << 2)#define CACRR 0x10
@@ -414,6 +416,10 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node) clks[IMX6SL_CLK_USDHC3 ] =imx_clk_gate2 ("usdhc3" ,"usdhc3_podf" , base +0x80 ,6 ); clks[IMX6SL_CLK_USDHC4 ] =imx_clk_gate2 ("usdhc4" ,"usdhc4_podf" , base +0x80 ,8 ); +/* Ensure the MMDC CH0 handshake is bypassed */ +writel_relaxed (readl_relaxed (base +CCDR ) | +BM_CCM_CCDR_MMDC_CH0_MASK , base +CCDR ); +imx_check_clocks (clks,ARRAY_SIZE (clks)); clk_data.clks = clks;
drivers/clk/sunxi-ng/ccu-sun8i-a33.c +3 -3
@@ -362,10 +362,10 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4,static const char *const i2s_parents[] = {"pll-audio-8x" ,"pll-audio-4x" ,"pll-audio-2x" ,"pll-audio" }; static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", i2s_parents, - 0x0b0, 16, 2, BIT(31), 0); + 0x0b0, 16, 2, BIT(31), CLK_SET_RATE_PARENT); static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", i2s_parents, - 0x0b4, 16, 2, BIT(31), 0); + 0x0b4, 16, 2, BIT(31), CLK_SET_RATE_PARENT);/* TODO: the parent for most of the USB clocks is not known */ static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M",
@@ -442,7 +442,7 @@ static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve", static SUNXI_CCU_GATE(ac_dig_clk, "ac-dig", "pll-audio", 0x140, BIT(31), 0); static SUNXI_CCU_GATE(ac_dig_4x_clk, "ac-dig-4x", "pll-audio-4x", - 0x140, BIT(30), 0); + 0x140, BIT(30), CLK_SET_RATE_PARENT); static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M", 0x144, BIT(31), 0);
drivers/cpuidle/cpuidle-big_little.c +6 -1
@@ -167,6 +167,7 @@ static int __init bl_idle_init(void) {int ret;struct device_node *root =of_find_node_by_path ("/" ); +const struct of_device_id *match_id;if (!root)return -ENODEV ;
@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)/* * Initialize the driver just for a compliant set of machines */ -if (!of_match_node (compatible_machine_match, root)) + match_id =of_match_node (compatible_machine_match, root); + +of_node_put (root); + +if (!match_id)return -ENODEV ;if (!mcpm_is_available ())
drivers/crypto/ux500/cryp/cryp_core.c +2 -2
@@ -555,7 +555,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg_src, ctx->device->dma.sg_src_len, - direction,DMA_CTRL_ACK ); +DMA_MEM_TO_DEV ,DMA_CTRL_ACK );break ;case DMA_FROM_DEVICE :
@@ -579,7 +579,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx, desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg_dst, ctx->device->dma.sg_dst_len, - direction, +DMA_DEV_TO_MEM ,DMA_CTRL_ACK |DMA_PREP_INTERRUPT );
drivers/crypto/ux500/hash/hash_core.c +1 -1
@@ -165,7 +165,7 @@ static int hash_set_dma_transfer(struct hash_ctx *ctx, struct scatterlist *sg, __func__); desc =dmaengine_prep_slave_sg (channel, ctx->device->dma.sg, ctx->device->dma.sg_len, - direction,DMA_CTRL_ACK |DMA_PREP_INTERRUPT ); +DMA_MEM_TO_DEV ,DMA_CTRL_ACK |DMA_PREP_INTERRUPT );if (!desc) {dev_err (ctx->device->dev,"%s: dmaengine_prep_slave_sg() failed!\n" , __func__);
drivers/dma/bcm2835-dma.c +25 -45
116 lines not on this page · raw message
drivers/dma/imx-dma.c +4 -4
@@ -623,7 +623,7 @@ static void imxdma_tasklet(unsigned long data) {struct imxdma_channel *imxdmac = (void *)data;struct imxdma_engine *imxdma = imxdmac->imxdma; -struct imxdma_desc *desc; +struct imxdma_desc *desc, *next_desc;unsigned long flags;spin_lock_irqsave (&imxdma->lock, flags);
@@ -653,10 +653,10 @@ static void imxdma_tasklet(unsigned long data)list_move_tail (imxdmac->ld_active.next, &imxdmac->ld_free);if (!list_empty (&imxdmac->ld_queue)) { - desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc, - node); + next_desc =list_first_entry (&imxdmac->ld_queue, + struct imxdma_desc, node);list_move_tail (imxdmac->ld_queue.next, &imxdmac->ld_active); -if (imxdma_xfer_desc (desc) <0 ) +if (imxdma_xfer_desc (next_desc) <0 )dev_warn (imxdma->dev,"%s: channel: %d couldn't xfer desc\n" , __func__, imxdmac->channel); }
drivers/dma/xilinx/zynqmp_dma.c +1 -1
@@ -159,7 +159,7 @@ struct zynqmp_dma_desc_ll {u32 ctrl;u64 nxtdscraddr;u64 rsvd; -};__aligned(64) +};/** * struct zynqmp_dma_desc_sw - Per Transaction structure
drivers/firmware/efi/vars.c +78 -21
227 lines not on this page · raw message
drivers/gpu/drm/drm_bufs.c +3 -0
@@ -36,6 +36,8 @@#include <drm/drmP.h> #include "drm_legacy.h" +#include <linux/nospec.h> +static struct drm_map_list *drm_find_matching_map (struct drm_device *dev,struct drm_local_map *map) {
@@ -1413,6 +1415,7 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data, idx, dma->buf_count - 1);return -EINVAL ; } + idx =array_index_nospec (idx, dma->buf_count); buf = dma->buflist[idx];if (buf->file_priv != file_priv) { DRM_ERROR("Process %d freeing buffer not owned\n",
drivers/gpu/drm/vc4/vc4_plane.c +7 -5
@@ -345,12 +345,14 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)vc4_get_scaling_mode (vc4_state->src_h[1 ], vc4_state->crtc_h); -/* YUV conversion requires that horizontal scaling be enabled, -* even on a plane that's otherwise 1:1. Looks like only PPF -* works in that case, so let's pick that one. +/* YUV conversion requires that horizontal scaling be enabled +* on the UV plane even if vc4_get_scaling_mode() returned +* VC4_SCALING_NONE (which can happen when the down-scaling +* ratio is 0.5). Let's force it to VC4_SCALING_PPF in this +* case. */ -if (vc4_state->is_unity) - vc4_state->x_scaling[0 ] =VC4_SCALING_PPF ; +if (vc4_state->x_scaling[1 ] ==VC4_SCALING_NONE ) + vc4_state->x_scaling[1 ] =VC4_SCALING_PPF ; }else { vc4_state->is_yuv = false; vc4_state->x_scaling[1 ] =VC4_SCALING_NONE ;
drivers/gpu/ipu-v3/ipu-image-convert.c +7 -3
@@ -1513,7 +1513,7 @@ int ipu_image_convert_queue(struct ipu_image_convert_run *run)EXPORT_SYMBOL_GPL (ipu_image_convert_queue);/* Abort any active or pending conversions for this context */ -void ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) +static void __ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) {struct ipu_image_convert_chan *chan = ctx->chan;struct ipu_image_convert_priv *priv = chan->priv;
@@ -1540,7 +1540,7 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx) need_abort = (run_count || active_run); - ctx->aborting = need_abort; + ctx->aborting = true;spin_unlock_irqrestore (&chan->irqlock, flags);
@@ -1561,7 +1561,11 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)dev_warn (priv->ipu->dev,"%s: timeout\n" , __func__);force_abort (ctx); } +} +void ipu_image_convert_abort (struct ipu_image_convert_ctx *ctx) +{ +__ipu_image_convert_abort (ctx); ctx->aborting = false; }EXPORT_SYMBOL_GPL (ipu_image_convert_abort);
@@ -1575,7 +1579,7 @@ void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx)bool put_res;/* make sure no runs are hanging around */ -ipu_image_convert_abort (ctx); +__ipu_image_convert_abort (ctx);dev_dbg (priv->ipu->dev,"%s: task %u: removing ctx %p\n" , __func__, chan->ic_task, ctx);
drivers/hid/hid-lenovo.c +8 -2
@@ -713,7 +713,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) data_pointer->led_mute.brightness_get = lenovo_led_brightness_get_tpkbd; data_pointer->led_mute.brightness_set = lenovo_led_brightness_set_tpkbd; data_pointer->led_mute.dev = dev; -led_classdev_register (dev, &data_pointer->led_mute); + ret =led_classdev_register (dev, &data_pointer->led_mute); +if (ret <0 ) + goto err; data_pointer->led_micmute.name = name_micmute; data_pointer->led_micmute.brightness_get =
@@ -721,7 +723,11 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) data_pointer->led_micmute.brightness_set = lenovo_led_brightness_set_tpkbd; data_pointer->led_micmute.dev = dev; -led_classdev_register (dev, &data_pointer->led_micmute); + ret =led_classdev_register (dev, &data_pointer->led_micmute); +if (ret <0 ) { +led_classdev_unregister (&data_pointer->led_mute); + goto err; + }lenovo_features_set_tpkbd (hdev);
drivers/hwmon/lm80.c +19 -7
@@ -360,9 +360,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,struct i2c_client *client = data->client;unsigned long min, val;u8 reg; -int err =kstrtoul (buf,10 , &val); -if (err <0 ) -return err; +int rv; + + rv =kstrtoul (buf,10 , &val); +if (rv <0 ) +return rv;/* Save fan_min */ mutex_lock (&data->update_lock);
@@ -390,8 +392,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,return -EINVAL ; } - reg = (lm80_read_value (client,LM80_REG_FANDIV ) & - ~(3 << (2 * (nr +1 )))) | (data->fan_div[nr] << (2 * (nr +1 ))); + rv =lm80_read_value (client,LM80_REG_FANDIV ); +if (rv <0 ) +return rv; + reg = (rv & ~(3 << (2 * (nr +1 )))) + | (data->fan_div[nr] << (2 * (nr +1 )));lm80_write_value (client,LM80_REG_FANDIV , reg);/* Restore fan_min */
@@ -623,6 +628,7 @@ static int lm80_probe(struct i2c_client *client,struct device *dev = &client->dev;struct device *hwmon_dev;struct lm80_data *data; +int rv; data =devm_kzalloc (dev,sizeof (struct lm80_data ),GFP_KERNEL );if (!data)
@@ -635,8 +641,14 @@ static int lm80_probe(struct i2c_client *client,lm80_init_client (client);/* A few vars need to be filled upon startup */ - data->fan[f_min][0 ] =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); - data->fan[f_min][1 ] =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); + rv =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); +if (rv <0 ) +return rv; + data->fan[f_min][0 ] = rv; + rv =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); +if (rv <0 ) +return rv; + data->fan[f_min][1 ] = rv; hwmon_dev =devm_hwmon_device_register_with_groups (dev, client->name, data, lm80_groups);
drivers/i2c/busses/i2c-axxia.c +16 -16
@@ -296,22 +296,7 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)i2c_int_disable (idev,MST_STATUS_TFL ); } -if (status &MST_STATUS_SCC ) { -/* Stop completed */ -i2c_int_disable (idev, ~MST_STATUS_TSS ); -complete (&idev->msg_complete); - }else if (status &MST_STATUS_SNS ) { -/* Transfer done */ -i2c_int_disable (idev, ~MST_STATUS_TSS ); -if (i2c_m_rd (idev->msg) && idev->msg_xfrd < idev->msg->len) -axxia_i2c_empty_rx_fifo (idev); -complete (&idev->msg_complete); - }else if (status &MST_STATUS_TSS ) { -/* Transfer timeout */ - idev->msg_err = -ETIMEDOUT ; -i2c_int_disable (idev, ~MST_STATUS_TSS ); -complete (&idev->msg_complete); - }else if (unlikely (status &MST_STATUS_ERR )) { +if (unlikely (status &MST_STATUS_ERR )) {/* Transfer error */ i2c_int_disable (idev, ~0 );if (status &MST_STATUS_AL )
@@ -328,6 +313,21 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)readl (idev->base +MST_TX_BYTES_XFRD ), readl(idev->base + MST_TX_XFER));complete (&idev->msg_complete); + }else if (status &MST_STATUS_SCC ) { +/* Stop completed */ +i2c_int_disable (idev, ~MST_STATUS_TSS ); +complete (&idev->msg_complete); + }else if (status &MST_STATUS_SNS ) { +/* Transfer done */ +i2c_int_disable (idev, ~MST_STATUS_TSS ); +if (i2c_m_rd (idev->msg) && idev->msg_xfrd < idev->msg->len) +axxia_i2c_empty_rx_fifo (idev); +complete (&idev->msg_complete); + }else if (status &MST_STATUS_TSS ) { +/* Transfer timeout */ + idev->msg_err = -ETIMEDOUT ; +i2c_int_disable (idev, ~MST_STATUS_TSS ); +complete (&idev->msg_complete); } out:
drivers/iio/accel/kxcjk-1013.c +1 -0
@@ -1393,6 +1393,7 @@ static const struct acpi_device_id kx_acpi_match[] = { {"KXCJ1008", KXCJ91008}, {"KXCJ9000", KXCJ91008}, {"KIOX000A", KXCJ91008}, + {"KIOX010A", KXCJ91008}, /* KXCJ91008 inside the display of a 2-in-1 */ {"KXTJ1009", KXTJ21009}, {"SMO8500", KXCJ91008}, { },
drivers/infiniband/hw/hfi1/ruc.c +6 -1
@@ -471,6 +471,8 @@ static void ruc_loopback(struct rvt_qp *sqp) goto op_err;if (!ret) goto rnr_nak; +if (wqe->length > qp->r_len) + goto inv_err;break ;case IB_WR_RDMA_WRITE_WITH_IMM :
@@ -638,7 +640,10 @@ static void ruc_loopback(struct rvt_qp *sqp) goto err; inv_err: - send_status =IB_WC_REM_INV_REQ_ERR ; + send_status = + sqp->ibqp.qp_type ==IB_QPT_RC ? +IB_WC_REM_INV_REQ_ERR : +IB_WC_SUCCESS ; wc.status =IB_WC_LOC_QP_OP_ERR ; goto err;
drivers/infiniband/hw/qib/qib_ruc.c +6 -1
@@ -449,6 +449,8 @@ static void qib_ruc_loopback(struct rvt_qp *sqp) goto op_err;if (!ret) goto rnr_nak; +if (wqe->length > qp->r_len) + goto inv_err;break ;case IB_WR_RDMA_WRITE_WITH_IMM :
@@ -612,7 +614,10 @@ static void qib_ruc_loopback(struct rvt_qp *sqp) goto err; inv_err: - send_status =IB_WC_REM_INV_REQ_ERR ; + send_status = + sqp->ibqp.qp_type ==IB_QPT_RC ? +IB_WC_REM_INV_REQ_ERR : +IB_WC_SUCCESS ; wc.status =IB_WC_LOC_QP_OP_ERR ; goto err;
drivers/iommu/amd_iommu.c +8 -1
@@ -464,7 +464,14 @@ static int iommu_init_device(struct device *dev) dev_data->alias =get_alias (dev); -if (dev_is_pci (dev) &&pci_iommuv2_capable (to_pci_dev (dev))) { +/* +* By default we use passthrough mode for IOMMUv2 capable device. +* But if amd_iommu=force_isolation is set (e.g. to debug DMA to +* invalid address), we ignore the capability for the device so +* it'll be forced to go into translation mode. +*/ +if ((iommu_pass_through || !amd_iommu_force_isolation) && +dev_is_pci (dev) &&pci_iommuv2_capable (to_pci_dev (dev))) {struct amd_iommu *iommu; iommu = amd_iommu_rlookup_table[dev_data->devid];
drivers/iommu/arm-smmu-v3.c +7 -1
@@ -697,7 +697,13 @@ static void queue_inc_cons(struct arm_smmu_queue *q)u32 cons = (Q_WRP (q, q->cons) |Q_IDX (q, q->cons)) +1 ; q->cons =Q_OVF (q, q->cons) |Q_WRP (q, cons) |Q_IDX (q, cons); -writel (q->cons, q->cons_reg); + +/* +* Ensure that all CPU accesses (reads and writes) to the queue +* are complete before we update the cons pointer. +*/ +mb (); +writel_relaxed (q->cons, q->cons_reg); }static int queue_sync_prod (struct arm_smmu_queue *q)
drivers/iommu/arm-smmu.c +3 -0
@@ -297,6 +297,7 @@ enum arm_smmu_implementation {GENERIC_SMMU ,ARM_MMU500 ,CAVIUM_SMMUV2 , + QCOM_SMMUV2, }; struct arm_smmu_s2cr {
@@ -1894,6 +1895,7 @@ ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);ARM_SMMU_MATCH_DATA (arm_mmu401,ARM_SMMU_V1_64K ,GENERIC_SMMU );ARM_SMMU_MATCH_DATA (arm_mmu500,ARM_SMMU_V2 ,ARM_MMU500 );ARM_SMMU_MATCH_DATA (cavium_smmuv2,ARM_SMMU_V2 ,CAVIUM_SMMUV2 ); +ARM_SMMU_MATCH_DATA (qcom_smmuv2,ARM_SMMU_V2 ,QCOM_SMMUV2 );static const struct of_device_id arm_smmu_of_match[] = { { .compatible ="arm,smmu-v1" , .data = &smmu_generic_v1 },
@@ -1902,6 +1904,7 @@ static const struct of_device_id arm_smmu_of_match[] = { { .compatible = "arm,mmu-401", .data = &arm_mmu401 }, { .compatible = "arm,mmu-500", .data = &arm_mmu500 }, { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 }, + { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 }, { }, };MODULE_DEVICE_TABLE (of, arm_smmu_of_match);
drivers/isdn/hisax/hfc_pci.c +2 -0
@@ -1169,11 +1169,13 @@ HFCPCI_l1hw(struct PStack *st, int pr, void *arg)if (cs->debug &L1_DEB_LAPD )debugl1 (cs,"-> PH_REQUEST_PULL" );#endif +spin_lock_irqsave (&cs->lock, flags);if (!cs->tx_skb) {test_and_clear_bit (FLG_L1_PULL_REQ , &st->l1.Flags); st->l1.l1l2 (st,PH_PULL |CONFIRM ,NULL ); }else test_and_set_bit (FLG_L1_PULL_REQ , &st->l1.Flags); +spin_unlock_irqrestore (&cs->lock, flags);break ;case (HW_RESET |REQUEST ):spin_lock_irqsave (&cs->lock, flags);
drivers/media/i2c/ad9389b.c +1 -1
@@ -590,7 +590,7 @@ static const struct v4l2_dv_timings_cap ad9389b_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/adv7511.c +1 -1
@@ -142,7 +142,7 @@ static const struct v4l2_dv_timings_cap adv7511_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT, + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT, ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
drivers/media/i2c/adv7604.c +2 -2
@@ -777,7 +777,7 @@ static const struct v4l2_dv_timings_cap adv7604_timings_cap_analog = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
@@ -788,7 +788,7 @@ static const struct v4l2_dv_timings_cap adv76xx_timings_cap_digital = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/adv7842.c +2 -2
@@ -676,7 +676,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
@@ -687,7 +687,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
drivers/media/i2c/tc358743.c +1 -1
@@ -66,7 +66,7 @@ static const struct v4l2_dv_timings_cap tc358743_timings_cap = {/* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 },/* Pixel clock from REF_01 p. 20. Min/max height/width are unknown */ - V4L2_INIT_BT_TIMINGS(1, 10000, 1, 10000, 0, 165000000, + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 13000000, 165000000, V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT, V4L2_DV_BT_CAP_PROGRESSIVE |
drivers/media/i2c/ths8200.c +1 -1
@@ -49,7 +49,7 @@ static const struct v4l2_dv_timings_cap ths8200_timings_cap = { .type = V4L2_DV_BT_656_1120, /* keep this initialization for compatibility with GCC < 4.4.6 */ .reserved = { 0 }, -V4L2_INIT_BT_TIMINGS (0 ,1920 ,0 ,1080 ,25000000 ,148500000 , +V4L2_INIT_BT_TIMINGS (640 ,1920 ,350 ,1080 ,25000000 ,148500000 , V4L2_DV_BT_STD_CEA861, V4L2_DV_BT_CAP_PROGRESSIVE) };
drivers/media/platform/davinci/vpbe.c +5 -2
@@ -753,7 +753,7 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)if (ret) {v4l2_err (&vpbe_dev->v4l2_dev,"Failed to set default output %s" , def_output); -return ret; + goto fail_kfree_amp; }printk (KERN_NOTICE "Setting default mode to %s\n" , def_mode);
@@ -761,12 +761,15 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)if (ret) {v4l2_err (&vpbe_dev->v4l2_dev,"Failed to set default mode %s" , def_mode); -return ret; + goto fail_kfree_amp; } vpbe_dev->initialized =1 ;/* TBD handling of bootargs for default output and mode */ return 0 ; +fail_kfree_amp: +mutex_lock (&vpbe_dev->lock); +kfree (vpbe_dev->amp); fail_kfree_encoders:kfree (vpbe_dev->encoders); fail_dev_unregister:
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c +6 -4
@@ -41,25 +41,27 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) node =of_parse_phandle (dev->of_node,"mediatek,larb" ,0 );if (!node) {mtk_v4l2_err ("no mediatek,larb found" ); -return -1 ; +return -ENODEV ; } pdev =of_find_device_by_node (node); +of_node_put (node);if (!pdev) {mtk_v4l2_err ("no mediatek,larb device found" ); -return -1 ; +return -ENODEV ; } pm->larbvenc = &pdev->dev; node =of_parse_phandle (dev->of_node,"mediatek,larb" ,1 );if (!node) {mtk_v4l2_err ("no mediatek,larb found" ); -return -1 ; +return -ENODEV ; } pdev =of_find_device_by_node (node); +of_node_put (node);if (!pdev) {mtk_v4l2_err ("no mediatek,larb device found" ); -return -1 ; +return -ENODEV ; } pm->larbvenclt = &pdev->dev;
drivers/memstick/core/memstick.c +3 -0
@@ -18,6 +18,7 @@#include <linux/delay.h> #include <linux/slab.h> #include <linux/module.h> +#include <linux/pm_runtime.h> #define DRIVER_NAME "memstick"
@@ -436,6 +437,7 @@ static void memstick_check(struct work_struct *work)struct memstick_dev *card;dev_dbg (&host->dev,"memstick_check started\n" ); +pm_runtime_get_noresume (host->dev.parent);mutex_lock (&host->lock);if (!host->card) {if (memstick_power_on (host))
@@ -479,6 +481,7 @@ static void memstick_check(struct work_struct *work) host->set_param (host,MEMSTICK_POWER ,MEMSTICK_POWER_OFF );mutex_unlock (&host->lock); +pm_runtime_put (host->dev.parent);dev_dbg (&host->dev,"memstick_check finished\n" ); }
drivers/net/ethernet/broadcom/bcmsysport.c +10 -15
@@ -378,7 +378,6 @@ static void bcm_sysport_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) {struct bcm_sysport_priv *priv =netdev_priv (dev); -u32 reg; wol->supported =WAKE_MAGIC |WAKE_MAGICSECURE ; wol->wolopts = priv->wolopts;
@@ -386,11 +385,7 @@ static void bcm_sysport_get_wol(struct net_device *dev,if (!(priv->wolopts &WAKE_MAGICSECURE ))return ; -/* Return the programmed SecureOn password */ - reg =umac_readl (priv,UMAC_PSW_MS ); -put_unaligned_be16 (reg, &wol->sopass[0 ]); - reg =umac_readl (priv,UMAC_PSW_LS ); -put_unaligned_be32 (reg, &wol->sopass[2 ]); +memcpy (wol->sopass, priv->sopass,sizeof (priv->sopass)); } static int bcm_sysport_set_wol(struct net_device *dev,
@@ -406,13 +401,8 @@ static int bcm_sysport_set_wol(struct net_device *dev,if (wol->wolopts & ~supported)return -EINVAL ; -/* Program the SecureOn password */ -if (wol->wolopts &WAKE_MAGICSECURE ) { -umac_writel (priv,get_unaligned_be16 (&wol->sopass[0 ]), -UMAC_PSW_MS ); -umac_writel (priv,get_unaligned_be32 (&wol->sopass[2 ]), -UMAC_PSW_LS ); - } +if (wol->wolopts &WAKE_MAGICSECURE ) +memcpy (priv->sopass, wol->sopass,sizeof (priv->sopass));/* Flag the device and relevant IRQ as wakeup capable */ if (wol->wolopts) {
@@ -1875,12 +1865,17 @@ static int bcm_sysport_suspend_to_wol(struct bcm_sysport_priv *priv)unsigned int timeout =1000 ;u32 reg; -/* Password has already been programmed */ reg =umac_readl (priv,UMAC_MPD_CTRL ); reg |=MPD_EN ; reg &= ~PSW_EN ; -if (priv->wolopts &WAKE_MAGICSECURE ) +if (priv->wolopts &WAKE_MAGICSECURE ) { +/* Program the SecureOn password */ +umac_writel (priv,get_unaligned_be16 (&priv->sopass[0 ]), +UMAC_PSW_MS ); +umac_writel (priv,get_unaligned_be32 (&priv->sopass[2 ]), +UMAC_PSW_LS ); reg |=PSW_EN ; + }umac_writel (priv, reg,UMAC_MPD_CTRL );/* Make sure RBUF entered WoL mode as result */
drivers/net/ethernet/broadcom/bcmsysport.h +2 -0
@@ -11,6 +11,7 @@#ifndef __BCM_SYSPORT_H#define __BCM_SYSPORT_H +#include <linux/ethtool.h> #include <linux/if_vlan.h> /* Receive/transmit descriptor format */
@@ -681,6 +682,7 @@ struct bcm_sysport_priv { unsigned int crc_fwd:1;u16 rev;u32 wolopts; +u8 sopass[SOPASS_MAX ]; unsigned int wol_irq_disabled:1;/* MIB related fields */
drivers/net/ethernet/cisco/enic/enic_main.c +1 -1
@@ -1180,7 +1180,7 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,* CHECSUM_UNNECESSARY. */ if ((netdev->features &NETIF_F_RXCSUM ) && tcp_udp_csum_ok && - ipv4_csum_ok) + (ipv4_csum_ok || ipv6)) skb->ip_summed =CHECKSUM_UNNECESSARY ;if (vlan_stripped)
drivers/net/ethernet/freescale/fman/fman_memac.c +1 -1
@@ -923,7 +923,7 @@ int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr) hash =get_mac_addr_hash_code (addr) &HASH_CTRL_ADDR_MASK ;/* Create element to be added to the driver hash table */ - hash_entry =kmalloc (sizeof (*hash_entry),GFP_KERNEL ); + hash_entry =kmalloc (sizeof (*hash_entry),GFP_ATOMIC );if (!hash_entry)return -ENOMEM ; hash_entry->addr = addr;
drivers/net/ethernet/freescale/fman/fman_tgec.c +1 -1
@@ -551,7 +551,7 @@ int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr) hash = (crc >>TGEC_HASH_MCAST_SHIFT ) &TGEC_HASH_ADR_MSK ;/* Create element to be added to the driver hash table */ - hash_entry =kmalloc (sizeof (*hash_entry),GFP_KERNEL ); + hash_entry =kmalloc (sizeof (*hash_entry),GFP_ATOMIC );if (!hash_entry)return -ENOMEM ; hash_entry->addr = addr;
drivers/net/ethernet/intel/i40e/i40e_main.c +3 -0
@@ -9194,6 +9194,9 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)ether_addr_copy (netdev->dev_addr, mac_addr);ether_addr_copy (netdev->perm_addr, mac_addr); +/* i40iw_net_event() reads 16 bytes from neigh->primary_key */ + netdev->neigh_priv_len =sizeof (u32) *4 ; + netdev->priv_flags |=IFF_UNICAST_FLT ; netdev->priv_flags |=IFF_SUPP_NOFCS ;/* Setup netdev TC information */
drivers/net/ethernet/intel/igb/igb_main.c +5 -3
@@ -7564,9 +7564,11 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,rtnl_unlock ();#ifdef CONFIG_PM - retval =pci_save_state (pdev); -if (retval) -return retval; +if (!runtime) { + retval =pci_save_state (pdev); +if (retval) +return retval; + }#endif status =rd32 (E1000_STATUS );
drivers/net/ethernet/marvell/skge.c +4 -2
@@ -152,8 +152,10 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs,memset (p,0 , regs->len);memcpy_fromio (p, io,B3_RAM_ADDR ); -memcpy_fromio (p +B3_RI_WTO_R1 , io +B3_RI_WTO_R1 , - regs->len -B3_RI_WTO_R1 ); +if (regs->len >B3_RI_WTO_R1 ) { +memcpy_fromio (p +B3_RI_WTO_R1 , io +B3_RI_WTO_R1 , + regs->len -B3_RI_WTO_R1 ); + } }/* Wake on Lan only supported on Yukon chips with rev 1 or above */
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +14 -0
@@ -553,6 +553,8 @@ static inline bool is_first_ethertype_ip(struct sk_buff *skb)return (ethertype ==htons (ETH_P_IP ) || ethertype ==htons (ETH_P_IPV6 )); } +#define short_frame (size) ((size) <= ETH_ZLEN + ETH_FCS_LEN) + static inline void mlx5e_handle_csum(struct net_device *netdev, struct mlx5_cqe64 *cqe, struct mlx5e_rq *rq,
@@ -567,6 +569,17 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,return ; } +/* CQE csum doesn't cover padding octets in short ethernet +* frames. And the pad field is appended prior to calculating +* and appending the FCS field. +* +* Detecting these padded frames requires to verify and parse +* IP headers, so we simply force all those small frames to be +* CHECKSUM_UNNECESSARY even if they are not padded. +*/ +if (short_frame (skb->len)) + goto csum_unnecessary; +if (is_first_ethertype_ip (skb)) { skb->ip_summed =CHECKSUM_COMPLETE ; skb->csum =csum_unfold ((__force __sum16 )cqe->check_sum);
@@ -574,6 +587,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,return ; } +csum_unnecessary:if (likely ((cqe->hds_ip_ext &CQE_L3_OK ) && (cqe->hds_ip_ext &CQE_L4_OK ))) { skb->ip_summed =CHECKSUM_UNNECESSARY ;
drivers/net/ethernet/sun/niu.c +8 -2
@@ -8121,6 +8121,8 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) start +=3 ; prop_len =niu_pci_eeprom_read (np, start +4 ); +if (prop_len <0 ) +return prop_len; err =niu_pci_vpd_get_propname (np, start +5 , namebuf,64 );if (err <0 )return err;
@@ -8165,8 +8167,12 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)netif_printk (np, probe,KERN_DEBUG , np->dev,"VPD_SCAN: Reading in property [%s] len[%d]\n" , namebuf, prop_len); -for (i =0 ; i < prop_len; i++) - *prop_buf++ =niu_pci_eeprom_read (np, off + i); +for (i =0 ; i < prop_len; i++) { + err =niu_pci_eeprom_read (np, off + i); +if (err >=0 ) + *prop_buf = err; + ++prop_buf; + } } start += len;
drivers/net/phy/dp83640.c +10 -3
@@ -891,14 +891,14 @@ static void decode_txts(struct dp83640_private *dp83640, struct phy_txts *phy_txts) {struct skb_shared_hwtstamps shhwtstamps; +struct dp83640_skb_info *skb_info;struct sk_buff *skb; -u64 ns;u8 overflow; +u64 ns;/* We must already have the skb that triggered this. */ - +again: skb =skb_dequeue (&dp83640->tx_queue); -if (!skb) {pr_debug ("have timestamp but tx_queue empty\n" );return ;
@@ -913,6 +913,11 @@ static void decode_txts(struct dp83640_private *dp83640, }return ; } + skb_info = (struct dp83640_skb_info *)skb->cb; +if (time_after (jiffies, skb_info->tmo)) { +kfree_skb (skb); + goto again; + } ns =phy2txts (phy_txts);memset (&shhwtstamps,0 ,sizeof (shhwtstamps));
@@ -1463,6 +1468,7 @@ static bool dp83640_rxtstamp(struct phy_device *phydev,static void dp83640_txtstamp (struct phy_device *phydev,struct sk_buff *skb,int type) { +struct dp83640_skb_info *skb_info = (struct dp83640_skb_info *)skb->cb;struct dp83640_private *dp83640 = phydev->priv;switch (dp83640->hwts_tx_en) {
@@ -1475,6 +1481,7 @@ static void dp83640_txtstamp(struct phy_device *phydev,/* fall through */ case HWTSTAMP_TX_ON :skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; + skb_info->tmo = jiffies +SKB_TIMESTAMP_TIMEOUT ;skb_queue_tail (&dp83640->tx_queue, skb);break ;
drivers/net/wireless/ath/ath9k/ath9k.h +1 -1
@@ -267,7 +267,7 @@ struct ath_node {#endif u8 key_idx[4 ]; -u32 ackto; +int ackto;struct list_head list; };
drivers/net/wireless/ath/ath9k/dynack.c +25 -10
@@ -29,9 +29,13 @@* ath_dynack_ewma - EWMA (Exponentially Weighted Moving Average) calculation * */ -static inline u32 ath_dynack_ewma (u32 old,u32 new) +static inline int ath_dynack_ewma (int old,int new) { -return (new * (EWMA_DIV -EWMA_LEVEL ) + old *EWMA_LEVEL ) /EWMA_DIV ; +if (old >0 ) +return (new * (EWMA_DIV -EWMA_LEVEL ) + + old *EWMA_LEVEL ) /EWMA_DIV ; +else +return new; }/**
@@ -82,10 +86,10 @@ static inline bool ath_dynack_bssidmask(struct ath_hw *ah, const u8 *mac)*/ static void ath_dynack_compute_ackto (struct ath_hw *ah) { -struct ath_node *an; -u32 to =0 ; -struct ath_dynack *da = &ah->dynack;struct ath_common *common =ath9k_hw_common (ah); +struct ath_dynack *da = &ah->dynack; +struct ath_node *an; +int to =0 ;list_for_each_entry (an, &da->nodes, list)if (an->ackto > to)
@@ -144,7 +148,8 @@ static void ath_dynack_compute_to(struct ath_hw *ah) an->ackto =ath_dynack_ewma (an->ackto, ackto);ath_dbg (ath9k_hw_common (ah),DYNACK , -"%pM to %u\n" , dst, an->ackto); +"%pM to %d [%u]\n" , dst, + an->ackto, ackto);if (time_is_before_jiffies (da->lto)) {ath_dynack_compute_ackto (ah); da->lto = jiffies +COMPUTE_TO ;
@@ -166,10 +171,12 @@ static void ath_dynack_compute_to(struct ath_hw *ah)* @ah: ath hw * @skb: socket buffer * @ts: tx status info +* @sta: station pointer * */ void ath_dynack_sample_tx_ts (struct ath_hw *ah,struct sk_buff *skb, -struct ath_tx_status *ts) +struct ath_tx_status *ts, +struct ieee80211_sta *sta) {u8 ridx;struct ieee80211_hdr *hdr;
@@ -177,7 +184,7 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,struct ath_common *common =ath9k_hw_common (ah);struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb); -if ((info->flags &IEEE80211_TX_CTL_NO_ACK ) || !da->enabled) +if (!da->enabled || (info->flags &IEEE80211_TX_CTL_NO_ACK ))return ;spin_lock_bh (&da->qlock);
@@ -187,11 +194,19 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,/* late ACK */ if (ts->ts_status &ATH9K_TXERR_XRETRY ) {if (ieee80211_is_assoc_req (hdr->frame_control) || -ieee80211_is_assoc_resp (hdr->frame_control)) { +ieee80211_is_assoc_resp (hdr->frame_control) || +ieee80211_is_auth (hdr->frame_control)) {ath_dbg (common,DYNACK ,"late ack\n" ); +ath9k_hw_setslottime (ah, (LATEACK_TO -3 ) /2 );ath9k_hw_set_ack_timeout (ah,LATEACK_TO );ath9k_hw_set_cts_timeout (ah,LATEACK_TO ); +if (sta) { +struct ath_node *an; + + an = (struct ath_node *)sta->drv_priv; + an->ackto =-1 ; + } da->lto = jiffies +LATEACK_DELAY ; }
@@ -251,7 +266,7 @@ void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb,struct ath_common *common =ath9k_hw_common (ah);struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; -if (!ath_dynack_bssidmask (ah, hdr->addr1) || !da->enabled) +if (!da->enabled || !ath_dynack_bssidmask (ah, hdr->addr1))return ;spin_lock_bh (&da->qlock);
drivers/net/wireless/ath/ath9k/dynack.h +4 -2
@@ -86,7 +86,8 @@ void ath_dynack_node_deinit(struct ath_hw *ah, struct ath_node *an);void ath_dynack_init (struct ath_hw *ah);void ath_dynack_sample_ack_ts (struct ath_hw *ah,struct sk_buff *skb,u32 ts);void ath_dynack_sample_tx_ts (struct ath_hw *ah,struct sk_buff *skb, -struct ath_tx_status *ts); +struct ath_tx_status *ts, +struct ieee80211_sta *sta);#else static inline void ath_dynack_init (struct ath_hw *ah) {} static inline void ath_dynack_node_init(struct ath_hw *ah,
@@ -97,7 +98,8 @@ static inline void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb, u32 ts) {}static inline void ath_dynack_sample_tx_ts (struct ath_hw *ah,struct sk_buff *skb, -struct ath_tx_status *ts) {} +struct ath_tx_status *ts, +struct ieee80211_sta *sta) {}#endif #endif /* DYNACK_H */
drivers/net/wireless/ath/ath9k/xmit.c +3 -2
@@ -593,7 +593,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,if (bf == bf->bf_lastbf)ath_dynack_sample_tx_ts (sc->sc_ah, bf->bf_mpdu, - ts); + ts, sta); } ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts,
@@ -709,7 +709,8 @@ static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,memcpy (info->control.rates, bf->rates,sizeof (info->control.rates));ath_tx_rc_status (sc, bf, ts,1 , txok ?0 :1 , txok); -ath_dynack_sample_tx_ts (sc->sc_ah, bf->bf_mpdu, ts); +ath_dynack_sample_tx_ts (sc->sc_ah, bf->bf_mpdu, ts, + sta); }ath_tx_complete_buf (sc, bf, txq, bf_head, sta, ts, txok); }else
drivers/net/wireless/st/cw1200/scan.c +6 -7
@@ -78,6 +78,10 @@ int cw1200_hw_scan(struct ieee80211_hw *hw,if (req->n_ssids >WSM_SCAN_MAX_NUM_OF_SSIDS )return -EINVAL ; +/* will be unlocked in cw1200_scan_work() */ +down (&priv->scan.lock); +mutex_lock (&priv->conf_mutex); + frame.skb =ieee80211_probereq_get (hw, priv->vif->addr,NULL ,0 , req->ie_len);if (!frame.skb)
@@ -86,19 +90,15 @@ int cw1200_hw_scan(struct ieee80211_hw *hw,if (req->ie_len)memcpy (skb_put (frame.skb, req->ie_len), req->ie, req->ie_len); -/* will be unlocked in cw1200_scan_work() */ -down (&priv->scan.lock); -mutex_lock (&priv->conf_mutex); - ret =wsm_set_template_frame (priv, &frame);if (!ret) {/* Host want to be the probe responder. */ ret =wsm_set_probe_responder (priv, true); }if (ret) { +dev_kfree_skb (frame.skb);mutex_unlock (&priv->conf_mutex);up (&priv->scan.lock); -dev_kfree_skb (frame.skb);return ret; }
@@ -120,10 +120,9 @@ int cw1200_hw_scan(struct ieee80211_hw *hw, ++priv->scan.n_ssids; } -mutex_unlock (&priv->conf_mutex); -if (frame.skb)dev_kfree_skb (frame.skb); +mutex_unlock (&priv->conf_mutex);queue_work (priv->workqueue, &priv->scan.work);return 0 ; }
drivers/pci/host/vmd.c +15 -0
@@ -731,6 +731,11 @@ static void vmd_remove(struct pci_dev *dev)static int vmd_suspend (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev); +struct vmd_dev *vmd =pci_get_drvdata (pdev); +int i; + +for (i =0 ; i < vmd->msix_count; i++) +devm_free_irq (dev,pci_irq_vector (pdev, i), &vmd->irqs[i]);pci_save_state (pdev);return 0 ;
@@ -739,6 +744,16 @@ static int vmd_suspend(struct device *dev)static int vmd_resume (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev); +struct vmd_dev *vmd =pci_get_drvdata (pdev); +int err, i; + +for (i =0 ; i < vmd->msix_count; i++) { + err =devm_request_irq (dev,pci_irq_vector (pdev, i), + vmd_irq,IRQF_NO_THREAD , +"vmd" , &vmd->irqs[i]); +if (err) +return err; + }pci_restore_state (pdev);return 0 ;
drivers/pinctrl/meson/pinctrl-meson8.c +3 -0
@@ -736,7 +736,9 @@ static const char * const gpio_groups[] = {"BOOT_5" ,"BOOT_6" ,"BOOT_7" ,"BOOT_8" ,"BOOT_9" ,"BOOT_10" ,"BOOT_11" ,"BOOT_12" ,"BOOT_13" ,"BOOT_14" , "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18", +}; +static const char *const gpio_aobus_groups[] = {"GPIOAO_0" ,"GPIOAO_1" ,"GPIOAO_2" ,"GPIOAO_3" ,"GPIOAO_4" ,"GPIOAO_5" ,"GPIOAO_6" ,"GPIOAO_7" , "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
@@ -908,6 +910,7 @@ static struct meson_pmx_func meson8_cbus_functions[] = { };static struct meson_pmx_func meson8_aobus_functions[] = { +FUNCTION (gpio_aobus),FUNCTION (uart_ao),FUNCTION (remote),FUNCTION (i2c_slave_ao),
drivers/pinctrl/meson/pinctrl-meson8b.c +8 -5
@@ -643,16 +643,18 @@ static const char * const gpio_groups[] = {"BOOT_10" ,"BOOT_11" ,"BOOT_12" ,"BOOT_13" ,"BOOT_14" ,"BOOT_15" ,"BOOT_16" ,"BOOT_17" ,"BOOT_18" , -"GPIOAO_0" ,"GPIOAO_1" ,"GPIOAO_2" ,"GPIOAO_3" , -"GPIOAO_4" ,"GPIOAO_5" ,"GPIOAO_6" ,"GPIOAO_7" , -"GPIOAO_8" ,"GPIOAO_9" ,"GPIOAO_10" ,"GPIOAO_11" , -"GPIOAO_12" ,"GPIOAO_13" ,"GPIO_BSD_EN" ,"GPIO_TEST_N" , -"DIF_0_P" ,"DIF_0_N" ,"DIF_1_P" ,"DIF_1_N" ,"DIF_2_P" ,"DIF_2_N" ,"DIF_3_P" ,"DIF_3_N" ,"DIF_4_P" ,"DIF_4_N" }; +static const char *const gpio_aobus_groups[] = { +"GPIOAO_0" ,"GPIOAO_1" ,"GPIOAO_2" ,"GPIOAO_3" , +"GPIOAO_4" ,"GPIOAO_5" ,"GPIOAO_6" ,"GPIOAO_7" , +"GPIOAO_8" ,"GPIOAO_9" ,"GPIOAO_10" ,"GPIOAO_11" , +"GPIOAO_12" ,"GPIOAO_13" ,"GPIO_BSD_EN" ,"GPIO_TEST_N" +}; +static const char *const sd_a_groups[] = {"sd_d0_a" ,"sd_d1_a" ,"sd_d2_a" ,"sd_d3_a" ,"sd_clk_a" , "sd_cmd_a"
@@ -868,6 +870,7 @@ static struct meson_pmx_func meson8b_cbus_functions[] = { };static struct meson_pmx_func meson8b_aobus_functions[] = { +FUNCTION (gpio_aobus),FUNCTION (uart_ao),FUNCTION (uart_ao_b),FUNCTION (i2c_slave_ao),
drivers/ptp/ptp_chardev.c +4 -1
@@ -228,7 +228,9 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) pct->sec = ts.tv_sec; pct->nsec = ts.tv_nsec; pct++; - ptp->info->gettime64 (ptp->info, &ts); + err = ptp->info->gettime64 (ptp->info, &ts); +if (err) + goto out; pct->sec = ts.tv_sec; pct->nsec = ts.tv_nsec; pct++;
@@ -281,6 +283,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)break ; } +out:kfree (sysoff);return err; }
drivers/scsi/aic94xx/aic94xx_init.c +4 -4
@@ -281,7 +281,7 @@ static ssize_t asd_show_dev_rev(struct device *dev,return snprintf (buf,PAGE_SIZE ,"%s\n" , asd_dev_rev[asd_ha->revision_id]); } -static DEVICE_ATTR(revision, S_IRUGO, asd_show_dev_rev, NULL); +static DEVICE_ATTR(aic_revision, S_IRUGO, asd_show_dev_rev, NULL);static ssize_t asd_show_dev_bios_build (struct device *dev,struct device_attribute *attr,char *buf)
@@ -478,7 +478,7 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) {int err; - err =device_create_file (&asd_ha->pcidev->dev, &dev_attr_revision); + err =device_create_file (&asd_ha->pcidev->dev, &dev_attr_aic_revision);if (err)return err;
@@ -500,13 +500,13 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) err_biosb:device_remove_file (&asd_ha->pcidev->dev, &dev_attr_bios_build); err_rev: -device_remove_file (&asd_ha->pcidev->dev, &dev_attr_revision); +device_remove_file (&asd_ha->pcidev->dev, &dev_attr_aic_revision);return err; }static void asd_remove_dev_attrs (struct asd_ha_struct *asd_ha) { -device_remove_file (&asd_ha->pcidev->dev, &dev_attr_revision); +device_remove_file (&asd_ha->pcidev->dev, &dev_attr_aic_revision);device_remove_file (&asd_ha->pcidev->dev, &dev_attr_bios_build);device_remove_file (&asd_ha->pcidev->dev, &dev_attr_pcba_sn);device_remove_file (&asd_ha->pcidev->dev, &dev_attr_update_bios);
drivers/scsi/lpfc/lpfc_els.c +3 -0
@@ -5396,6 +5396,9 @@ lpfc_els_lcb_rsp(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) stat = (struct ls_rjt *)(pcmd +sizeof (uint32_t )); stat->un.b.lsRjtRsnCode =LSRJT_UNABLE_TPC ; +if (shdr_add_status ==ADD_STATUS_OPERATION_ALREADY_ACTIVE ) + stat->un.b.lsRjtRsnCodeExp =LSEXP_CMD_IN_PROGRESS ; + elsiocb->iocb_cmpl = lpfc_cmpl_els_rsp; phba->fc_stat.elsXmitLSRJT++; rc =lpfc_sli_issue_iocb (phba,LPFC_ELS_RING , elsiocb,0 );
drivers/scsi/smartpqi/smartpqi_init.c +6 -0
@@ -473,6 +473,7 @@ struct bmic_host_wellness_driver_version {u8 driver_version_tag[2 ];__le16 driver_version_length;char driver_version[32 ]; +u8 dont_write_tag[2 ];u8 end_tag[2 ]; };
@@ -502,6 +503,8 @@ static int pqi_write_driver_version_to_host_wellness(strncpy (buffer->driver_version,DRIVER_VERSION ,sizeof (buffer->driver_version) -1 ); buffer->driver_version[sizeof (buffer->driver_version) -1 ] ='\0' ; + buffer->dont_write_tag[0 ] ='D' ; + buffer->dont_write_tag[1 ] ='W' ; buffer->end_tag[0 ] ='Z' ; buffer->end_tag[1 ] ='Z' ;
@@ -980,6 +983,9 @@ static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info,if (rc) goto out; +if (vpd->page_code !=CISS_VPD_LV_STATUS ) + goto out; + page_length = offsetof(struct ciss_vpd_logical_volume_status , volume_status) + vpd->page_length;if (page_length <sizeof (*vpd))
drivers/soc/bcm/brcmstb/common.c +5 -1
@@ -31,13 +31,17 @@ static const struct of_device_id brcmstb_machine_match[] = {bool soc_is_brcmstb (void ) { +const struct of_device_id *match;struct device_node *root; root =of_find_node_by_path ("/" );if (!root)return false; -return of_match_node (brcmstb_machine_match, root) !=NULL ; + match =of_match_node (brcmstb_machine_match, root); +of_node_put (root); + +return match !=NULL ; }static const struct of_device_id sun_top_ctrl_match[] = {
drivers/soc/tegra/common.c +5 -1
@@ -22,11 +22,15 @@ static const struct of_device_id tegra_machine_match[] = {bool soc_is_tegra (void ) { +const struct of_device_id *match;struct device_node *root; root =of_find_node_by_path ("/" );if (!root)return false; -return of_match_node (tegra_machine_match, root) !=NULL ; + match =of_match_node (tegra_machine_match, root); +of_node_put (root); + +return match !=NULL ; }
drivers/staging/iio/adc/ad7280a.c +13 -4
@@ -250,7 +250,9 @@ static int ad7280_read(struct ad7280_state *st, unsigned int devaddr,if (ret)return ret; -__ad7280_read32 (st, &tmp); + ret =__ad7280_read32 (st, &tmp); +if (ret) +return ret;if (ad7280_check_crc (st, tmp))return -EIO ;
@@ -288,7 +290,9 @@ static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr,ad7280_delay (st); -__ad7280_read32 (st, &tmp); + ret =__ad7280_read32 (st, &tmp); +if (ret) +return ret;if (ad7280_check_crc (st, tmp))return -EIO ;
@@ -321,7 +325,9 @@ static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt,ad7280_delay (st);for (i =0 ; i < cnt; i++) { -__ad7280_read32 (st, &tmp); + ret =__ad7280_read32 (st, &tmp); +if (ret) +return ret;if (ad7280_check_crc (st, tmp))return -EIO ;
@@ -364,7 +370,10 @@ static int ad7280_chain_setup(struct ad7280_state *st)return ret;for (n =0 ; n <=AD7280A_MAX_CHAIN ; n++) { -__ad7280_read32 (st, &val); + ret =__ad7280_read32 (st, &val); +if (ret) +return ret; +if (val ==0 )return n -1 ;
drivers/staging/iio/adc/ad7780.c +5 -1
@@ -87,12 +87,16 @@ static int ad7780_read_raw(struct iio_dev *indio_dev, long m) {struct ad7780_state *st =iio_priv (indio_dev); +int voltage_uv;switch (m) {case IIO_CHAN_INFO_RAW :return ad_sigma_delta_single_conversion (indio_dev, chan, val);case IIO_CHAN_INFO_SCALE : - *val = st->int_vref_mv * st->gain; + voltage_uv =regulator_get_voltage (st->reg); +if (voltage_uv <0 ) +return voltage_uv; + *val = (voltage_uv /1000 ) * st->gain; *val2 = chan->scan_type.realbits -1 ;return IIO_VAL_FRACTIONAL_LOG2 ;case IIO_CHAN_INFO_OFFSET :
drivers/staging/iio/resolver/ad2s90.c +6 -1
@@ -86,7 +86,12 @@ static int ad2s90_probe(struct spi_device *spi)/* need 600ns between CS and the first falling edge of SCLK */ spi->max_speed_hz =830000 ; spi->mode =SPI_MODE_3 ; -spi_setup (spi); + ret =spi_setup (spi); + +if (ret <0 ) { +dev_err (&spi->dev,"spi_setup failed!\n" ); +return ret; + }return 0 ; }
drivers/thermal/thermal-generic-adc.c +8 -4
@@ -26,7 +26,7 @@ struct gadc_thermal_info {static int gadc_thermal_adc_to_temp (struct gadc_thermal_info *gti,int val) { -int temp, adc_hi, adc_lo; +int temp, temp_hi, temp_lo, adc_hi, adc_lo;int i;for (i =0 ; i < gti->nlookup_table; i++) {
@@ -36,13 +36,17 @@ static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val)if (i ==0 ) { temp = gti->lookup_table[0 ]; - }else if (i >= (gti->nlookup_table -1 )) { + }else if (i >= gti->nlookup_table) { temp = gti->lookup_table[2 * (gti->nlookup_table -1 )]; }else { adc_hi = gti->lookup_table[2 * i -1 ]; adc_lo = gti->lookup_table[2 * i +1 ]; - temp = gti->lookup_table[2 * i]; - temp -= ((val - adc_lo) *1000 ) / (adc_hi - adc_lo); + + temp_hi = gti->lookup_table[2 * i -2 ]; + temp_lo = gti->lookup_table[2 * i]; + + temp = temp_hi +mult_frac (temp_lo - temp_hi, val - adc_hi, + adc_lo - adc_hi); }return temp;
drivers/thermal/thermal_core.c +8 -4
@@ -597,16 +597,20 @@ static void update_temperature(struct thermal_zone_device *tz) tz->last_temperature, tz->temperature); } -static void thermal_zone_device_reset (struct thermal_zone_device *tz) +static void thermal_zone_device_init (struct thermal_zone_device *tz) {struct thermal_instance *pos; - tz->temperature =THERMAL_TEMP_INVALID ; - tz->passive =0 ;list_for_each_entry (pos, &tz->thermal_instances, tz_node) pos->initialized = false; } +static void thermal_zone_device_reset (struct thermal_zone_device *tz) +{ + tz->passive =0 ; +thermal_zone_device_init (tz); +} +void thermal_zone_device_update (struct thermal_zone_device *tz,enum thermal_notify_event event) {
@@ -2297,7 +2301,7 @@ static int thermal_pm_notify(struct notifier_block *nb,case PM_POST_SUSPEND :atomic_set (&in_suspend,0 );list_for_each_entry (tz, &thermal_tz_list, node) { -thermal_zone_device_reset (tz); +thermal_zone_device_init (tz);thermal_zone_device_update (tz,THERMAL_EVENT_UNSPECIFIED ); }
drivers/thermal/thermal_hwmon.h +2 -2
@@ -34,13 +34,13 @@int thermal_add_hwmon_sysfs (struct thermal_zone_device *tz);void thermal_remove_hwmon_sysfs (struct thermal_zone_device *tz);#else -static int +static inline int thermal_add_hwmon_sysfs (struct thermal_zone_device *tz) {return 0 ; } -static void +static inline void thermal_remove_hwmon_sysfs (struct thermal_zone_device *tz) { }
drivers/tty/serial/fsl_lpuart.c +4 -0
@@ -1344,6 +1344,8 @@ lpuart_set_termios(struct uart_port *port, struct ktermios *termios,else cr1 &= ~UARTCR1_PT ; } + }else { + cr1 &= ~UARTCR1_PE ; }/* ask the core to calculate the divisor */
@@ -1487,6 +1489,8 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,else ctrl &= ~UARTCTRL_PT ; } + }else { + ctrl &= ~UARTCTRL_PE ; }/* ask the core to calculate the divisor */
drivers/tty/serial/samsung.c +3 -0
@@ -1335,11 +1335,14 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,wr_regl (port,S3C2410_ULCON , ulcon);wr_regl (port,S3C2410_UBRDIV , quot); + port->status &= ~UPSTAT_AUTOCTS ; + umcon =rd_regl (port,S3C2410_UMCON );if (termios->c_cflag &CRTSCTS ) { umcon |=S3C2410_UMCOM_AFC ;/* Disable RTS when RX FIFO contains 63 bytes */ umcon &= ~S3C2412_UMCON_AFC_8 ; + port->status =UPSTAT_AUTOCTS ; }else { umcon &= ~S3C2410_UMCOM_AFC ; }
drivers/tty/serial/serial_core.c +6 -0
@@ -141,6 +141,9 @@ static void uart_start(struct tty_struct *tty)struct uart_port *port;unsigned long flags; +if (!state) +return ; + port =uart_port_lock (state, flags);__uart_start (tty);uart_port_unlock (port, flags);
@@ -717,6 +720,9 @@ static void uart_unthrottle(struct tty_struct *tty)struct uart_port *port;upstat_t mask =0 ; +if (!state) +return ; + port =uart_port_ref (state);if (!port)return ;
drivers/usb/core/hub.c +10 -0
@@ -1108,6 +1108,16 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) USB_PORT_FEAT_ENABLE); } +/* +* Add debounce if USB3 link is in polling/link training state. +* Link will automatically transition to Enabled state after +* link training completes. +*/ +if (hub_is_superspeed (hdev) && + ((portstatus &USB_PORT_STAT_LINK_STATE ) == +USB_SS_PORT_LS_POLLING )) + need_debounce_delay = true; +/* Clear status-change flags; we'll debounce later */ if (portchange &USB_PORT_STAT_C_CONNECTION ) { need_debounce_delay = true;
drivers/usb/gadget/udc/net2272.c +1 -1
@@ -2096,7 +2096,7 @@ static irqreturn_t net2272_irq(int irq, void *_dev)#if defined(PLX_PCI_RDK2 )/* see if PCI int for us by checking irqstat */ intcsr =readl (dev->rdk2.fpga_base_addr +RDK2_IRQSTAT ); -if (!intcsr & (1 <<NET2272_PCI_IRQ )) { +if (!(intcsr & (1 <<NET2272_PCI_IRQ ))) {spin_unlock (&dev->lock);return IRQ_NONE ; }
drivers/usb/musb/musb_gadget.c +1 -12
@@ -477,13 +477,10 @@ void musb_g_tx(struct musb *musb, u8 epnum) }if (request) { -u8 is_dma =0 ; -bool short_packet = false;trace_musb_req_tx (req);if (dma && (csr &MUSB_TXCSR_DMAENAB )) { - is_dma =1 ; csr |=MUSB_TXCSR_P_WZC_BITS ; csr &= ~(MUSB_TXCSR_DMAENAB |MUSB_TXCSR_P_UNDERRUN |MUSB_TXCSR_TXPKTRDY |MUSB_TXCSR_AUTOSET );
@@ -501,16 +498,8 @@ void musb_g_tx(struct musb *musb, u8 epnum)*/ if ((request->zero && request->length) && (request->length % musb_ep->packet_sz ==0 ) - && (request->actual == request->length)) - short_packet = true; + && (request->actual == request->length)) { -if ((musb_dma_inventra (musb) ||musb_dma_ux500 (musb)) && - (is_dma && (!dma->desired_mode || - (request->actual & - (musb_ep->packet_sz -1 ))))) - short_packet = true; - -if (short_packet) {/* * On DMA completion, FIFO may not be * available yet...
drivers/usb/musb/musbhsdma.c +11 -10
@@ -320,12 +320,10 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data) channel->status =MUSB_DMA_STATUS_FREE ;/* completed */ -if ((devctl &MUSB_DEVCTL_HM ) - && (musb_channel->transmit) - && ((channel->desired_mode ==0 ) - || (channel->actual_len & - (musb_channel->max_packet_sz -1 ))) - ) { +if (musb_channel->transmit && + (!channel->desired_mode || + (channel->actual_len % + musb_channel->max_packet_sz))) {u8 epnum = musb_channel->epnum;int offset = musb->io.ep_offset (epnum,MUSB_TXCSR );
@@ -337,11 +335,14 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)*/ musb_ep_select (mbase, epnum); txcsr =musb_readw (mbase, offset); - txcsr &= ~(MUSB_TXCSR_DMAENAB +if (channel->desired_mode ==1 ) { + txcsr &= ~(MUSB_TXCSR_DMAENAB |MUSB_TXCSR_AUTOSET ); -musb_writew (mbase, offset, txcsr); -/* Send out the packet */ - txcsr &= ~MUSB_TXCSR_DMAMODE ; +musb_writew (mbase, offset, txcsr); +/* Send out the packet */ + txcsr &= ~MUSB_TXCSR_DMAMODE ; + txcsr |=MUSB_TXCSR_DMAENAB ; + } txcsr |=MUSB_TXCSR_TXPKTRDY ;musb_writew (mbase, offset, txcsr); }
drivers/usb/phy/phy-am335x.c +1 -4
@@ -60,9 +60,6 @@ static int am335x_phy_probe(struct platform_device *pdev)if (ret)return ret; - ret =usb_add_phy_dev (&am_phy->usb_phy_gen.phy); -if (ret) -return ret; am_phy->usb_phy_gen.phy.init = am335x_init; am_phy->usb_phy_gen.phy.shutdown = am335x_shutdown;
@@ -81,7 +78,7 @@ static int am335x_phy_probe(struct platform_device *pdev)device_set_wakeup_enable (dev, false);phy_ctrl_power (am_phy->phy_ctrl, am_phy->id, am_phy->dr_mode, false); -return 0 ; +return usb_add_phy_dev (&am_phy->usb_phy_gen.phy); }static int am335x_phy_remove (struct platform_device *pdev)
drivers/video/console/fbcon.c +1 -1
@@ -3030,7 +3030,7 @@ static int fbcon_fb_unbind(int idx)for (i = first_fb_vc; i <= last_fb_vc; i++) {if (con2fb_map[i] != idx && con2fb_map[i] !=-1 ) { - new_idx = i; + new_idx = con2fb_map[i];break ; } }
drivers/video/fbdev/clps711x-fb.c +4 -1
@@ -287,14 +287,17 @@ static int clps711x_fb_probe(struct platform_device *pdev) } ret =of_get_fb_videomode (disp, &cfb->mode,OF_USE_NATIVE_MODE ); -if (ret) +if (ret) { +of_node_put (disp); goto out_fb_release; + }of_property_read_u32 (disp,"ac-prescale" , &cfb->ac_prescale); cfb->cmap_invert =of_property_read_bool (disp,"cmap-invert" ); ret =of_property_read_u32 (disp,"bits-per-pixel" , &info->var.bits_per_pixel); +of_node_put (disp);if (ret) goto out_fb_release;
drivers/video/fbdev/core/fbmem.c +6 -2
@@ -433,7 +433,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, image->dx += image->width +8 ; } }else if (rotate ==FB_ROTATE_UD ) { -for (x =0 ; x < num; x++) { +u32 dx = image->dx; + +for (x =0 ; x < num && image->dx <= dx; x++) { info->fbops->fb_imageblit (info, image); image->dx -= image->width +8 ; }
@@ -445,7 +447,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, image->dy += image->height +8 ; } }else if (rotate ==FB_ROTATE_CCW ) { -for (x =0 ; x < num; x++) { +u32 dy = image->dy; + +for (x =0 ; x < num && image->dy <= dy; x++) { info->fbops->fb_imageblit (info, image); image->dy -= image->height +8 ; }
fs/binfmt_script.c +7 -3
@@ -43,10 +43,14 @@ static int load_script(struct linux_binprm *bprm)fput (bprm->file); bprm->file =NULL ; - bprm->buf[BINPRM_BUF_SIZE -1 ] ='\0' ; -if ((cp =strchr (bprm->buf,'\n' )) ==NULL ) - cp = bprm->buf+BINPRM_BUF_SIZE -1 ; +for (cp = bprm->buf+2 ;; cp++) { +if (cp >= bprm->buf +BINPRM_BUF_SIZE ) +return -ENOEXEC ; +if (!*cp || (*cp =='\n' )) +break ; + } *cp ='\0' ; +while (cp > bprm->buf) { cp--;if ((*cp ==' ' ) || (*cp =='\t' ))
fs/cifs/readdir.c +8 -1
@@ -655,7 +655,14 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,/* scan and find it */ int i;char *cur_ent; -char *end_of_smb = cfile->srch_inf.ntwrk_buf_start + +char *end_of_smb; + +if (cfile->srch_inf.ntwrk_buf_start ==NULL ) { +cifs_dbg (VFS ,"ntwrk_buf_start is NULL during readdir\n" ); +return -EIO ; + } + + end_of_smb = cfile->srch_inf.ntwrk_buf_start + server->ops->calc_smb_size ( cfile->srch_inf.ntwrk_buf_start);
fs/dlm/ast.c +10 -0
@@ -290,6 +290,8 @@ void dlm_callback_suspend(struct dlm_ls *ls)flush_workqueue (ls->ls_callback_wq); } +#define MAX_CB_QUEUE 25 +void dlm_callback_resume (struct dlm_ls *ls) {struct dlm_lkb *lkb, *safe;
@@ -300,15 +302,23 @@ void dlm_callback_resume(struct dlm_ls *ls)if (!ls->ls_callback_wq)return ; +more:mutex_lock (&ls->ls_cb_mutex);list_for_each_entry_safe (lkb, safe, &ls->ls_cb_delay, lkb_cb_list) {list_del_init (&lkb->lkb_cb_list);queue_work (ls->ls_callback_wq, &lkb->lkb_cb_work); count++; +if (count ==MAX_CB_QUEUE ) +break ; }mutex_unlock (&ls->ls_cb_mutex);if (count)log_rinfo (ls,"dlm_callback_resume %d" , count); +if (count ==MAX_CB_QUEUE ) { + count =0 ; +cond_resched (); + goto more; + } }
fs/eventpoll.c +1 -1
@@ -1040,7 +1040,7 @@ static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync, void *k* semantics). All the events that happen during that period of time are * chained in ep->ovflist and requeued later on. */ -if (unlikely (ep->ovflist !=EP_UNACTIVE_PTR )) { +if (ep->ovflist !=EP_UNACTIVE_PTR ) {if (epi->next ==EP_UNACTIVE_PTR ) { epi->next = ep->ovflist; ep->ovflist = epi;
fs/f2fs/acl.c +8 -6
@@ -348,12 +348,14 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,return PTR_ERR (p); clone =f2fs_acl_clone (p,GFP_NOFS ); -if (!clone) - goto no_mem; +if (!clone) { + ret = -ENOMEM ; + goto release_acl; + } ret =f2fs_acl_create_masq (clone, mode);if (ret <0 ) - goto no_mem_clone; + goto release_clone;if (ret ==0 )posix_acl_release (clone);
@@ -367,11 +369,11 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,return 0 ; -no_mem_clone: +release_clone:posix_acl_release (clone); -no_mem: +release_acl:posix_acl_release (p); -return -ENOMEM ; +return ret; } int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
fs/f2fs/f2fs.h +10 -1
@@ -1885,10 +1885,19 @@ static inline bool is_dot_dotdot(const struct qstr *str)static inline bool f2fs_may_extent_tree (struct inode *inode) { -if (!test_opt (F2FS_I_SB (inode),EXTENT_CACHE ) || +struct f2fs_sb_info *sbi =F2FS_I_SB (inode); + +if (!test_opt (sbi,EXTENT_CACHE ) ||is_inode_flag_set (inode,FI_NO_EXTENT ))return false; +/* +* for recovered files during mount do not create extents +* if shrinker is not registered. +*/ +if (list_empty (&sbi->s_list)) +return false; +return S_ISREG (inode->i_mode); }
fs/f2fs/file.c +3 -0
@@ -198,6 +198,9 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,trace_f2fs_sync_file_enter (inode); +if (S_ISDIR (inode->i_mode)) + goto go_write; +/* if fdatasync is triggered, let's do in-place-update */ if (datasync ||get_dirty_pages (inode) <=SM_I (sbi)->min_fsync_blocks)set_inode_flag (inode,FI_NEED_IPU );
fs/f2fs/shrinker.c +1 -1
@@ -136,6 +136,6 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi)f2fs_shrink_extent_tree (sbi,__count_extent_cache (sbi));spin_lock (&f2fs_list_lock); -list_del (&sbi->s_list); +list_del_init (&sbi->s_list);spin_unlock (&f2fs_list_lock); }
fs/fuse/dev.c +3 -1
@@ -1685,7 +1685,6 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode, req->in.h.nodeid = outarg->nodeid; req->in.numargs =2 ; req->in.argpages =1 ; - req->page_descs[0 ].offset = offset; req->end = fuse_retrieve_end; index = outarg->offset >>PAGE_SHIFT ;
@@ -1700,6 +1699,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode, this_num =min_t (unsigned, num,PAGE_SIZE - offset); req->pages[req->num_pages] = page; + req->page_descs[req->num_pages].offset = offset; req->page_descs[req->num_pages].length = this_num; req->num_pages++;
@@ -2018,8 +2018,10 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe, ret =fuse_dev_do_write (fud, &cs, len); +pipe_lock (pipe);for (idx =0 ; idx < nbuf; idx++)pipe_buf_release (pipe, &bufs[idx]); +pipe_unlock (pipe); out:kfree (bufs);
fs/fuse/file.c +1 -1
@@ -1772,7 +1772,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req,spin_unlock (&fc->lock);dec_wb_stat (&bdi->wb,WB_WRITEBACK ); -dec_node_page_state (page,NR_WRITEBACK_TEMP ); +dec_node_page_state (new_req->pages[0 ],NR_WRITEBACK_TEMP );wb_writeout_inc (&bdi->wb);fuse_writepage_free (fc, new_req);fuse_request_free (new_req);
fs/nfs/super.c +1 -2
@@ -2403,8 +2403,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n goto Ebusy;if (a->acdirmax != b->acdirmax) goto Ebusy; -if (b->auth_info.flavor_len >0 && - clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) +if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) goto Ebusy;return 1 ; Ebusy:
fs/nfsd/nfsctl.c +2 -0
@@ -1103,6 +1103,8 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size)case 'Y' :case 'y' :case '1' : +if (nn->nfsd_serv) +return -EBUSY ;nfsd4_end_grace (nn);break ;default :
fs/ocfs2/buffer_head_io.c +0 -2
@@ -151,7 +151,6 @@ int ocfs2_read_blocks_sync(struct ocfs2_super *osb, u64 block,#endif } -clear_buffer_uptodate (bh);get_bh (bh);/* for end_buffer_read_sync() */ bh->b_end_io = end_buffer_read_sync;submit_bh (REQ_OP_READ ,0 , bh);
@@ -305,7 +304,6 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr,continue ; } -clear_buffer_uptodate (bh);get_bh (bh);/* for end_buffer_read_sync() */ if (validate)set_buffer_needs_validate (bh);
fs/udf/inode.c +6 -0
@@ -1372,6 +1372,12 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) iinfo->i_alloc_type =le16_to_cpu (fe->icbTag.flags) &ICBTAG_FLAG_AD_MASK ; +if (iinfo->i_alloc_type !=ICBTAG_FLAG_AD_SHORT && + iinfo->i_alloc_type !=ICBTAG_FLAG_AD_LONG && + iinfo->i_alloc_type !=ICBTAG_FLAG_AD_IN_ICB ) { + ret = -EIO ; + goto out; + } iinfo->i_unique =0 ; iinfo->i_lenEAttr =0 ; iinfo->i_lenExtents =0 ;
include/linux/genl_magic_struct.h +4 -1
@@ -190,6 +190,7 @@ static inline void ct_assert_unique_operations(void) {switch (0 ) {#include GENL_MAGIC_INCLUDE_FILE +case 0 : ; } }
@@ -208,6 +209,7 @@ static inline void ct_assert_unique_top_level_attributes(void) {switch (0 ) {#include GENL_MAGIC_INCLUDE_FILE +case 0 : ; } }
@@ -217,7 +219,8 @@ static inline void ct_assert_unique_top_level_attributes(void) static inline void ct_assert_unique_ ## s_name ## _attributes(void) \ { \ switch (0) { \ - s_fields \ + s_fields \ + case 0: \ ; \ } \ }
include/linux/sched.h +1 -0
@@ -527,6 +527,7 @@ static inline int get_dumpable(struct mm_struct *mm)#define MMF_OOM_SKIP 21/* mm is of no interest for the OOM killer */ #define MMF_UNSTABLE 22/* mm is unstable for copy_from_user */ #define MMF_HUGE_ZERO_PAGE 23/* mm has ever used the global huge zero page */ +#define MMF_OOM_REAP_QUEUED 26/* mm was queued for oom_reaper */ #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK)
include/sound/compress_driver.h +5 -1
@@ -185,7 +185,11 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream)if (snd_BUG_ON (!stream))return ; - stream->runtime->state =SNDRV_PCM_STATE_SETUP ; +if (stream->direction ==SND_COMPRESS_PLAYBACK ) + stream->runtime->state =SNDRV_PCM_STATE_SETUP ; +else + stream->runtime->state =SNDRV_PCM_STATE_PREPARED ; +wake_up (&stream->runtime->sleep); }
kernel/events/ring_buffer.c +3 -0
@@ -700,6 +700,9 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags) size =sizeof (struct ring_buffer ); size += nr_pages *sizeof (void *); +if (order_base_2 (size) >=MAX_ORDER ) + goto fail; + rb =kzalloc (size,GFP_KERNEL );if (!rb) goto fail;
kernel/hung_task.c +4 -4
@@ -30,7 +30,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;* is disabled during the critical section. It also controls the size of * the RCU grace period. So it needs to be upper-bound. */ -#define HUNG_TASK_BATCHING 1024 +#define HUNG_TASK_LOCK_BREAK (HZ / 10)/* * Zero means infinite timeout - no checking done:
@@ -158,7 +158,7 @@ static bool rcu_lock_break(struct task_struct *g, struct task_struct *t)static void check_hung_uninterruptible_tasks (unsigned long timeout) {int max_count = sysctl_hung_task_check_count; -int batch_count =HUNG_TASK_BATCHING ; +unsigned long last_break = jiffies;struct task_struct *g, *t;/*
@@ -172,10 +172,10 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)for_each_process_thread (g, t) {if (!max_count--) goto unlock; -if (!--batch_count) { - batch_count =HUNG_TASK_BATCHING ; +if (time_after (jiffies, last_break +HUNG_TASK_LOCK_BREAK )) {if (!rcu_lock_break (g, t)) goto unlock; + last_break = jiffies; }/* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */ if (t->state ==TASK_UNINTERRUPTIBLE )
kernel/sysctl.c +2 -0
@@ -2503,6 +2503,8 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, intbool neg; left -=proc_skip_spaces (&p); +if (!left) +break ; err = proc_get_long(&p, &left, &val, &neg, proc_wspace_sep,
kernel/time/timekeeping.c +3 -1
@@ -39,7 +39,9 @@static struct {seqcount_t seq;struct timekeeper timekeeper; -} tk_core____cacheline_aligned ; +} tk_core____cacheline_aligned = { + .seq =SEQCNT_ZERO (tk_core.seq), +};static DEFINE_RAW_SPINLOCK (timekeeper_lock);static struct timekeeper shadow_timekeeper;
lib/seq_buf.c +5 -1
@@ -143,9 +143,13 @@ int seq_buf_puts(struct seq_buf *s, const char *str)WARN_ON (s->size ==0 ); +/* Add 1 to len for the trailing null byte which must be there */ + len +=1 ; +if (seq_buf_can_fit (s, len)) {memcpy (s->buffer + s->len, str, len); - s->len += len; +/* Don't count the trailing null byte against the capacity */ + s->len += len -1 ;return 0 ; }seq_buf_set_overflow (s);
mm/oom_kill.c +2 -2
@@ -626,8 +626,8 @@ static void wake_oom_reaper(struct task_struct *tsk)if (!oom_reaper_th)return ; -/* tsk is already queued? */ -if (tsk == oom_reaper_list || tsk->oom_reaper_list) +/* mm is already queued? */ +if (test_and_set_bit (MMF_OOM_REAP_QUEUED , &tsk->signal->oom_mm->flags))return ;get_task_struct (tsk);
net/bluetooth/hci_event.c +6 -0
@@ -5212,6 +5212,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,return true; } +/* Check if request ended in Command Status - no way to retreive +* any extra parameters in this case. +*/ +if (hdr->evt ==HCI_EV_CMD_STATUS ) +return false; +if (hdr->evt !=HCI_EV_CMD_COMPLETE ) {BT_DBG ("Last event is not cmd complete (0x%2.2x)" , hdr->evt);return false;
net/dccp/ccid.h +2 -2
@@ -202,7 +202,7 @@ static inline void ccid_hc_tx_packet_recv(struct ccid *ccid, struct sock *sk,static inline int ccid_hc_tx_parse_options (struct ccid *ccid,struct sock *sk,u8 pkt,u8 opt,u8 *val,u8 len) { -if (ccid->ccid_ops->ccid_hc_tx_parse_options ==NULL ) +if (!ccid || !ccid->ccid_ops->ccid_hc_tx_parse_options)return 0 ;return ccid->ccid_ops->ccid_hc_tx_parse_options (sk, pkt, opt, val, len); }
@@ -214,7 +214,7 @@ static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk,static inline int ccid_hc_rx_parse_options (struct ccid *ccid,struct sock *sk,u8 pkt,u8 opt,u8 *val,u8 len) { -if (ccid->ccid_ops->ccid_hc_rx_parse_options ==NULL ) +if (!ccid || !ccid->ccid_ops->ccid_hc_rx_parse_options)return 0 ;return ccid->ccid_ops->ccid_hc_rx_parse_options (sk, pkt, opt, val, len); }
net/dsa/slave.c +8 -4
@@ -180,10 +180,14 @@ static void dsa_slave_change_rx_flags(struct net_device *dev, int change)struct dsa_slave_priv *p =netdev_priv (dev);struct net_device *master = p->parent->dst->master_netdev; -if (change &IFF_ALLMULTI ) -dev_set_allmulti (master, dev->flags &IFF_ALLMULTI ?1 :-1 ); -if (change &IFF_PROMISC ) -dev_set_promiscuity (master, dev->flags &IFF_PROMISC ?1 :-1 ); +if (dev->flags &IFF_UP ) { +if (change &IFF_ALLMULTI ) +dev_set_allmulti (master, + dev->flags &IFF_ALLMULTI ?1 :-1 ); +if (change &IFF_PROMISC ) +dev_set_promiscuity (master, + dev->flags &IFF_PROMISC ?1 :-1 ); + } }static void dsa_slave_set_rx_mode (struct net_device *dev)
net/ipv6/xfrm6_tunnel.c +3 -0
@@ -144,6 +144,9 @@ static u32 __xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr) index =__xfrm6_tunnel_spi_check (net, spi);if (index >=0 ) goto alloc_spi; + +if (spi ==XFRM6_TUNNEL_SPI_MAX ) +break ; }for (spi =XFRM6_TUNNEL_SPI_MIN ; spi < xfrm6_tn->spi; spi++) { index =__xfrm6_tunnel_spi_check (net, spi);
net/mac80211/rx.c +3 -2
@@ -152,6 +152,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,/* allocate extra bitmaps */ if (status->chains) len +=4 *hweight8 (status->chains); +/* vendor presence bitmap */ +if (status->flag &RX_FLAG_RADIOTAP_VENDOR_DATA ) + len +=4 ;if (ieee80211_have_rx_timestamp (status)) { len =ALIGN (len,8 );
@@ -193,8 +196,6 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,if (status->flag &RX_FLAG_RADIOTAP_VENDOR_DATA ) {struct ieee80211_vendor_radiotap *rtap = (void *)skb->data; -/* vendor presence bitmap */ - len +=4 ;/* alignment for fixed 6-byte vendor data header */ len =ALIGN (len,2 );/* vendor data header */
net/rds/bind.c +3 -3
@@ -62,10 +62,10 @@ struct rds_sock *rds_find_bound(__be32 addr, __be16 port)rcu_read_lock (); rs =rhashtable_lookup (&bind_hash_table, &key, ht_parms); -if (rs && !sock_flag (rds_rs_to_sk (rs),SOCK_DEAD )) -rds_sock_addref (rs); -else +if (rs && (sock_flag (rds_rs_to_sk (rs),SOCK_DEAD ) || + !atomic_inc_not_zero (&rds_rs_to_sk (rs)->sk_refcnt))) rs =NULL ; +rcu_read_unlock (); rdsdebug("returning rs %p for %pI4:%u\n", rs, &addr,
net/rxrpc/recvmsg.c +2 -1
@@ -552,6 +552,7 @@ int rxrpc_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,rxrpc_put_call (call, rxrpc_call_put); error_no_call:release_sock (&rx->sk); +error_trace:trace_rxrpc_recvmsg (call, rxrpc_recvmsg_return,0 ,0 ,0 , ret);return ret;
@@ -560,7 +561,7 @@ int rxrpc_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, wait_error:finish_wait (sk_sleep (&rx->sk), &wait); call =NULL ; - goto error_no_call; + goto error_trace; }/**
scripts/decode_stacktrace.sh +1 -1
@@ -77,7 +77,7 @@ parse_symbol() { fi # Strip out the base of the path - code=${code//$basepath/""} + code=${code//^$basepath/""} # In the case of inlines, move everything to same line code=${code//$'\n'/' '}
scripts/mod/modpost.c +26 -24
68 lines not on this page · raw message
security/smack/smack_lsm.c +9 -3
@@ -4362,6 +4362,12 @@ static int smack_key_permission(key_ref_t key_ref,int request =0 ;int rc; +/* +* Validate requested permissions +*/ +if (perm & ~KEY_NEED_ALL ) +return -EINVAL ; + keyp =key_ref_to_ptr (key_ref);if (keyp ==NULL )return -EINVAL ;
@@ -4381,10 +4387,10 @@ static int smack_key_permission(key_ref_t key_ref, ad.a.u.key_struct.key = keyp->serial; ad.a.u.key_struct.key_desc = keyp->description;#endif -if (perm &KEY_NEED_READ ) - request =MAY_READ ; +if (perm & (KEY_NEED_READ |KEY_NEED_SEARCH |KEY_NEED_VIEW )) + request |=MAY_READ ;if (perm & (KEY_NEED_WRITE |KEY_NEED_LINK |KEY_NEED_SETATTR )) - request =MAY_WRITE ; + request |=MAY_WRITE ; rc =smk_access (tkp, keyp->security, request, &ad); rc =smk_bu_note ("key access" , tkp, keyp->security, request, rc);return rc;
sound/pci/hda/hda_bind.c +2 -1
@@ -109,7 +109,8 @@ static int hda_codec_driver_probe(struct device *dev) err =snd_hda_codec_build_controls (codec);if (err <0 ) goto error_module; -if (codec->card->registered) { +/* only register after the bus probe finished; otherwise it's racy */ +if (!codec->bus->bus_probing && codec->card->registered) { err =snd_card_register (codec->card);if (err <0 ) goto error_module;
sound/pci/hda/hda_codec.h +1 -0
@@ -68,6 +68,7 @@ struct hda_bus { unsigned int response_reset:1; /* controller was reset */ unsigned int in_reset:1; /* during reset operation */ unsigned int no_response_fallback:1; /* don't fallback at RIRB error */ + unsigned int bus_probing :1; /* during probing process */int primary_dig_out_type;/* primary digital out PCM type */ unsigned int mixer_assigned;/* codec addr for mixer name */
sound/pci/hda/hda_intel.c +2 -0
@@ -2089,6 +2089,7 @@ static int azx_probe_continue(struct azx *chip)int val;int err; +to_hda_bus (bus)->bus_probing =1 ; hda->probe_continued =1 ;/* Request display power well for the HDA controller or codec. For
@@ -2189,6 +2190,7 @@ static int azx_probe_continue(struct azx *chip)if (err <0 ) hda->init_failed =1 ;complete_all (&hda->probe_wait); +to_hda_bus (bus)->bus_probing =0 ;return err; }
sound/soc/fsl/Kconfig +1 -1
@@ -220,7 +220,7 @@ config SND_SOC_PHYCORE_AC97 config SND_SOC_EUKREA_TLV320 tristate "Eukrea TLV320" - depends on ARCH_MXC && I2C + depends on ARCH_MXC && !ARM64 && I2C select SND_SOC_TLV320AIC23_I2C select SND_SOC_IMX_AUDMUX select SND_SOC_IMX_SSI
sound/soc/intel/atom/sst/sst_loader.c +4 -4
@@ -354,14 +354,14 @@ static int sst_request_fw(struct intel_sst_drv *sst)const struct firmware *fw; retval =request_firmware (&fw, sst->firmware_name, sst->dev); -if (fw ==NULL ) { -dev_err (sst->dev,"fw is returning as null\n" ); -return -EINVAL ; - }if (retval) {dev_err (sst->dev,"request fw failed %d\n" , retval);return retval; } +if (fw ==NULL ) { +dev_err (sst->dev,"fw is returning as null\n" ); +return -EINVAL ; + }mutex_lock (&sst->sst_lock); retval =sst_cache_and_parse_fw (sst, fw);mutex_unlock (&sst->sst_lock);
tools/perf/arch/x86/util/kvm-stat.c +1 -1
@@ -154,7 +154,7 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)if (strstr (cpuid,"Intel" )) { kvm->exit_reasons = vmx_exit_reasons; kvm->exit_reasons_isa ="VMX" ; - }else if (strstr (cpuid,"AMD" )) { + }else if (strstr (cpuid,"AMD" ) ||strstr (cpuid,"Hygon" )) { kvm->exit_reasons = svm_exit_reasons; kvm->exit_reasons_isa ="SVM" ; }else
tools/perf/tests/evsel-tp-sched.c +1 -1
@@ -16,7 +16,7 @@ static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name,return -1 ; } - is_signed = !!(field->flags |FIELD_IS_SIGNED ); + is_signed = !!(field->flags &FIELD_IS_SIGNED );if (should_be_signed && !is_signed) {pr_debug ("%s: \"%s\" signedness(%d) is wrong, should be %d\n" , evsel->name, name, is_signed, should_be_signed);
tools/perf/util/header.c +1 -1
@@ -2988,7 +2988,7 @@ perf_event__synthesize_event_update_unit(struct perf_tool *tool,if (ev ==NULL )return -ENOMEM ; -strncpy (ev->data, evsel->unit, size); +strlcpy (ev->data, evsel->unit, size +1 ); err =process (tool, (union perf_event *)ev,NULL ,NULL );free (ev);return err;
tools/perf/util/probe-file.c +1 -1
@@ -414,7 +414,7 @@ static int probe_cache__open(struct probe_cache *pcache, const char *target)if (target &&build_id_cache__cached (target)) {/* This is a cached buildid */ -strncpy (sbuildid, target,SBUILD_ID_SIZE ); +strlcpy (sbuildid, target,SBUILD_ID_SIZE ); dir_name =build_id_cache__linkname (sbuildid,NULL ,0 ); goto found; }
virt/kvm/kvm_main.c +2 -1
@@ -2900,8 +2900,10 @@ static int kvm_ioctl_create_device(struct kvm *kvm,if (ops->init) ops->init (dev); +kvm_get_kvm (kvm); ret =anon_inode_getfd (ops->name, &kvm_device_fops, dev,O_RDWR |O_CLOEXEC );if (ret <0 ) { +kvm_put_kvm (kvm);mutex_lock (&kvm->lock);list_del (&dev->vm_node);mutex_unlock (&kvm->lock);
@@ -2909,7 +2911,6 @@ static int kvm_ioctl_create_device(struct kvm *kvm,return ret; } -kvm_get_kvm (kvm); cd->fd = ret;return 0 ; }