Linux 4.14.203
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.203 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/kernel-parameters.txt | 2 Documentation/networking/ip-sysctl.txt | 4 Makefile | 2 arch/arc/plat-hsdk/Kconfig | 1 arch/arm/boot/dts/owl-s500.dtsi | 6 arch/arm/mm/cache-l2x0.c | 16 + arch/arm64/boot/dts/qcom/msm8916.dtsi | 4 arch/arm64/boot/dts/xilinx/zynqmp.dtsi | 4 arch/powerpc/include/asm/reg.h | 2 arch/powerpc/kernel/tau_6xx.c | 82 ++----- arch/powerpc/perf/hv-gpci-requests.h | 6 arch/powerpc/perf/isa207-common.c | 10 arch/powerpc/platforms/Kconfig | 9 arch/powerpc/platforms/powernv/opal-dump.c | 50 ++-- arch/powerpc/platforms/pseries/rng.c | 1 arch/powerpc/sysdev/xics/icp-hv.c | 1 arch/x86/kernel/fpu/init.c | 30 ++ arch/x86/kvm/emulate.c | 2 arch/x86/kvm/mmu.c | 1 arch/x86/kvm/svm.c | 1 crypto/algif_aead.c | 7 crypto/algif_skcipher.c | 2 drivers/android/binder.c | 35 --- drivers/bluetooth/hci_ldisc.c | 1 drivers/bluetooth/hci_serdev.c | 2 drivers/clk/at91/clk-main.c | 11 - drivers/clk/bcm/clk-bcm2835.c | 4 drivers/cpufreq/powernv-cpufreq.c | 9 drivers/crypto/ccp/ccp-ops.c | 2 drivers/crypto/ixp4xx_crypto.c | 2 drivers/crypto/mediatek/mtk-platform.c | 8 drivers/crypto/omap-sham.c | 3 drivers/edac/i5100_edac.c | 11 - drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 drivers/gpu/drm/virtio/virtgpu_kms.c | 2 drivers/gpu/drm/virtio/virtgpu_vq.c | 10 drivers/hid/hid-input.c | 4 drivers/hid/hid-roccat-kone.c | 23 +- drivers/i2c/busses/Kconfig | 1 drivers/i2c/i2c-core-acpi.c | 11 - drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 1 drivers/infiniband/hw/mlx4/cm.c | 3 drivers/infiniband/hw/mlx4/mad.c | 34 ++- drivers/infiniband/hw/mlx4/mlx4_ib.h | 2 drivers/infiniband/hw/qedr/main.c | 2 drivers/infiniband/sw/rdmavt/vt.c | 4 drivers/input/keyboard/ep93xx_keypad.c | 4 drivers/input/keyboard/omap4-keypad.c | 6 drivers/input/keyboard/twl4030_keypad.c | 8 drivers/input/serio/sun4i-ps2.c | 9 drivers/input/touchscreen/imx6ul_tsc.c | 27 +- drivers/input/touchscreen/stmfts.c | 2 drivers/mailbox/mailbox.c | 12 - drivers/media/firewire/firedtv-fw.c | 6 drivers/media/i2c/m5mols/m5mols_core.c | 3 drivers/media/i2c/tc358743.c | 2 drivers/media/pci/bt8xx/bttv-driver.c | 13 - drivers/media/pci/saa7134/saa7134-tvaudio.c | 3 drivers/media/platform/exynos4-is/fimc-isp.c | 4 drivers/media/platform/exynos4-is/fimc-lite.c | 2 drivers/media/platform/exynos4-is/media-dev.c | 8 drivers/media/platform/exynos4-is/mipi-csis.c | 4 drivers/media/platform/mx2_emmaprp.c | 7 drivers/media/platform/omap3isp/isp.c | 6 drivers/media/platform/qcom/venus/core.c | 5 drivers/media/platform/rcar-fcp.c | 4 drivers/media/platform/s3c-camif/camif-core.c | 5 drivers/media/platform/s5p-mfc/s5p_mfc_pm.c | 4 drivers/media/platform/sti/bdisp/bdisp-v4l2.c | 3 drivers/media/platform/sti/delta/delta-v4l2.c | 4 drivers/media/platform/sti/hva/hva-hw.c | 4 drivers/media/platform/ti-vpe/vpe.c | 2 drivers/media/platform/vsp1/vsp1_drv.c | 11 - drivers/media/rc/ati_remote.c | 4 drivers/media/tuners/tuner-simple.c | 5 drivers/media/usb/uvc/uvc_entity.c | 35 +++ drivers/media/usb/uvc/uvc_v4l2.c | 30 ++ drivers/memory/fsl-corenet-cf.c | 6 drivers/memory/omap-gpmc.c | 4 drivers/mfd/rtsx_pcr.c | 4 drivers/mfd/sm501.c | 8 drivers/misc/eeprom/at25.c | 2 drivers/misc/mic/scif/scif_rma.c | 4 drivers/misc/mic/vop/vop_main.c | 2 drivers/misc/mic/vop/vop_vringh.c | 24 +- drivers/misc/vmw_vmci/vmci_queue_pair.c | 10 drivers/mmc/core/sdio_cis.c | 3 drivers/mtd/lpddr/lpddr2_nvm.c | 35 +-- drivers/mtd/mtdoops.c | 11 - drivers/net/can/flexcan.c | 34 ++- drivers/net/ethernet/cisco/enic/enic.h | 1 drivers/net/ethernet/cisco/enic/enic_api.c | 6 drivers/net/ethernet/cisco/enic/enic_main.c | 27 +- drivers/net/ethernet/ibm/ibmveth.c | 19 + drivers/net/ethernet/korina.c | 3 drivers/net/ethernet/mellanox/mlx4/en_rx.c | 3 drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 drivers/net/ethernet/realtek/r8169.c | 108 +++++----- drivers/net/usb/qmi_wwan.c | 1 drivers/net/wan/hdlc.c | 10 drivers/net/wan/hdlc_raw_eth.c | 1 drivers/net/wireless/ath/ath10k/htt_rx.c | 8 drivers/net/wireless/ath/ath10k/mac.c | 2 drivers/net/wireless/ath/ath6kl/main.c | 3 drivers/net/wireless/ath/ath6kl/wmi.c | 5 drivers/net/wireless/ath/ath9k/hif_usb.c | 19 + drivers/net/wireless/ath/ath9k/htc_hst.c | 2 drivers/net/wireless/ath/wcn36xx/main.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c | 4 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 9 drivers/net/wireless/marvell/mwifiex/scan.c | 2 drivers/net/wireless/marvell/mwifiex/sdio.c | 2 drivers/net/wireless/marvell/mwifiex/usb.c | 3 drivers/net/wireless/quantenna/qtnfmac/commands.c | 2 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 10 drivers/ntb/hw/amd/ntb_hw_amd.c | 1 drivers/nvme/target/core.c | 3 drivers/pci/host/pcie-iproc-msi.c | 13 - drivers/perf/xgene_pmu.c | 32 +- drivers/pinctrl/pinctrl-mcp23s08.c | 24 +- drivers/pwm/pwm-lpss.c | 7 drivers/rapidio/devices/rio_mport_cdev.c | 18 + drivers/regulator/core.c | 21 + drivers/scsi/be2iscsi/be_main.c | 4 drivers/scsi/csiostor/csio_hw.c | 2 drivers/scsi/ibmvscsi/ibmvfc.c | 1 drivers/scsi/mvumi.c | 1 drivers/scsi/qedi/qedi_fw.c | 23 +- drivers/scsi/qedi/qedi_iscsi.c | 2 drivers/scsi/qla4xxx/ql4_os.c | 2 drivers/scsi/ufs/ufs-qcom.c | 5 drivers/tty/hvc/hvcs.c | 14 - drivers/tty/ipwireless/network.c | 4 drivers/tty/ipwireless/tty.c | 2 drivers/tty/pty.c | 2 drivers/tty/serial/Kconfig | 1 drivers/tty/serial/fsl_lpuart.c | 2 drivers/usb/class/cdc-acm.c | 23 ++ drivers/usb/class/cdc-wdm.c | 72 +++++- drivers/usb/core/urb.c | 89 +++++--- drivers/usb/dwc2/gadget.c | 40 +++ drivers/usb/dwc2/params.c | 2 drivers/usb/gadget/function/f_ncm.c | 8 drivers/usb/gadget/function/f_printer.c | 16 + drivers/usb/gadget/function/u_ether.c | 2 drivers/usb/host/ohci-hcd.c | 16 - drivers/vfio/pci/vfio_pci_intrs.c | 4 drivers/vfio/vfio_iommu_type1.c | 3 drivers/video/backlight/sky81452-backlight.c | 1 drivers/video/fbdev/sis/init.c | 11 - drivers/video/fbdev/vga16fb.c | 14 - drivers/virt/fsl_hypervisor.c | 17 - fs/cifs/asn1.c | 16 - fs/cifs/smb2ops.c | 2 fs/dlm/config.c | 3 fs/ext4/fsmap.c | 3 fs/f2fs/sysfs.c | 1 fs/ntfs/inode.c | 6 fs/proc/base.c | 3 fs/quota/quota_v2.c | 1 fs/ramfs/file-nommu.c | 2 fs/reiserfs/inode.c | 3 fs/reiserfs/super.c | 8 fs/udf/inode.c | 25 +- fs/udf/super.c | 6 fs/xfs/xfs_fsmap.c | 3 fs/xfs/xfs_rtalloc.c | 11 + include/linux/oom.h | 1 include/linux/overflow.h | 1 include/linux/sched/coredump.h | 1 include/net/ip.h | 6 include/scsi/scsi_common.h | 7 include/trace/events/target.h | 12 - include/uapi/linux/perf_event.h | 2 kernel/debug/kdb/kdb_io.c | 8 kernel/fork.c | 21 + kernel/power/hibernate.c | 11 - lib/crc32.c | 2 mm/memcontrol.c | 5 mm/oom_kill.c | 2 net/bluetooth/l2cap_sock.c | 7 net/ipv4/icmp.c | 7 net/ipv4/route.c | 4 net/ipv4/tcp_input.c | 2 net/mac80211/cfg.c | 3 net/mac80211/sta_info.c | 4 net/netfilter/ipvs/ip_vs_ctl.c | 7 net/nfc/netlink.c | 2 net/tipc/msg.c | 3 net/wireless/nl80211.c | 5 samples/mic/mpssd/mpssd.c | 4 security/integrity/ima/ima_crypto.c | 2 sound/core/seq/oss/seq_oss.c | 7 sound/firewire/bebob/bebob_hwdep.c | 3 sound/soc/qcom/lpass-cpu.c | 16 - sound/soc/qcom/lpass-platform.c | 3 tools/perf/util/intel-pt.c | 8 199 files changed, 1207 insertions(+), 631 deletions(-)
Abhishek Pandit-Subedi (1):
Bluetooth: Only mark socket zapped after unlocking
Adam Goode (1):
media: uvcvideo: Ensure all probed info is returned to v4l2
Aditya Pakki (1):
media: st-delta: Fix reference count leak in delta_run_work
Adrian Hunter (1):
perf intel-pt: Fix "context_switch event has no tid" error
Al Grant (1):
perf: correct SNOOPX field offset
Alex Dewar (1):
VMCI: check return value of get_user_pages_fast() for errors
Alex Williamson (1):
vfio/pci: Clear token on bypass registration failure
Alexander Aring (1):
fs: dlm: fix configfs memory leak
Arnd Bergmann (1):
mtd: lpddr: fix excessive stack usage with clang
Artem Savkov (1):
pty: do tty_flip_buffer_push without port->lock in pty_write
Arvind Sankar (1):
x86/fpu: Allow multiple bits in clearcpuid= parameter
Athira Rajeev (1):
powerpc/perf: Exclude pmc5/6 from the irrelevant PMU group constraints
Brooke Basile (1):
ath9k: hif_usb: fix race condition between usb_get_urb() and usb_kill_anchored_urbs()
Bryan O'Donoghue (1):
wcn36xx: Fix reported 802.11n rx_highest rate wcn3660/wcn3680
Can Guo (1):
scsi: ufs: ufs-qcom: Fix race conditions caused by ufs_qcom_testbus_config()
Chris Chiu (1):
rtl8xxxu: prevent potential memory leak
Christian Eggers (1):
eeprom: at25: set minimum read/write access stride to 1
Christoph Hellwig (1):
PM: hibernate: remove the bogus call to get_gendisk() in software_resume()
Christophe JAILLET (3):
crypto: ixp4xx - Fix the size used in a 'dma_free_coherent()' call
mwifiex: Do not use GFP_KERNEL in atomic context
scsi: qla4xxx: Fix an error handling path in 'qla4xxx_get_host_stats()'
Claudiu Beznea (1):
clk: at91: clk-main: update key before writing AT91_CKGR_MOR
Colin Ian King (3):
video: fbdev: vga16fb: fix setting of pixclock because a pass-by-value error
qtnfmac: fix resource leaks on unsupported iftype error return path IB/rdmavt: Fix sizeof mismatch
Cong Wang (1):
tipc: fix the skb_unshare() in tipc_buf_append()
Cristian Ciocaltea (1):
ARM: dts: owl-s500: Fix incorrect PPI interrupt specifiers
Dan Carpenter (10):
ALSA: bebob: potential info leak in hwdep_read()
cifs: remove bogus debug code
ath6kl: prevent potential array overflow in ath6kl_add_new_sta()
ath9k: Fix potential out of bounds in ath9k_htc_txcompletion_cb()
HID: roccat: add bounds checking in kone_sysfs_write_settings()
ath6kl: wmi: prevent a shift wrapping bug in ath6kl_wmi_delete_pstream_cmd()
mfd: sm501: Fix leaks in probe()
scsi: be2iscsi: Fix a theoretical leak in beiscsi_create_eqs()
Input: imx6ul_tsc - clean up some errors in imx6ul_tsc_resume()
memory: omap-gpmc: Fix a couple off by ones
Daniel Thompson (1):
kdb: Fix pager search for multi-line strings
Darrick J. Wong (3):
xfs: limit entries returned when counting fsmap records
ext4: limit entries returned when counting fsmap records
xfs: make sure the rt allocator doesn't run off the end
David Ahern (1):
ipv4: Restore flowi4_oif update before call to xfrm_lookup_route
David Wilder (2):
ibmveth: Switch order of ibmveth_helper calls.
ibmveth: Identify ingress large send packets.
Defang Bo (1):
nfc: Ensure presence of NFC_ATTR_FIRMWARE_NAME attribute in nfc_genl_fw_download()
Dinghao Liu (8):
EDAC/i5100: Fix error handling order in i5100_init_one()
media: omap3isp: Fix memleak in isp_probe
media: mx2_emmaprp: Fix memleak in emmaprp_probe
media: vsp1: Fix runtime PM imbalance on error
media: platform: s3c-camif: Fix runtime PM imbalance on error
media: platform: sti: hva: Fix runtime PM imbalance on error
media: bdisp: Fix runtime PM imbalance on error
media: venus: core: Fix runtime PM imbalance in venus_probe
Dirk Behme (1):
i2c: rcar: Auto select RESET_CONTROLLER
Dmitry Torokhov (1):
HID: hid-input: fix stylus battery reporting
Doug Horn (1):
Fix use after free in get_capset_info callback.
Eli Billauer (1):
usb: core: Solve race condition in anchor cleanup functions
Emmanuel Grumbach (1):
iwlwifi: mvm: split a print to avoid a WARNING in ROC
Eric Biggers (1):
reiserfs: only call unlock_new_inode() if I_NEW
Eric Dumazet (2):
icmp: randomize the global rate limiter
quota: clear padding in v2r1_mem2diskdqb()
Finn Thain (3):
powerpc/tau: Use appropriate temperature sample interval powerpc/tau: Remove duplicated set_thresholds() call powerpc/tau: Disable TAU between measurements
Greg Kroah-Hartman (1):
Linux 4.14.203
Guillaume Tucker (1):
ARM: 9007/1: l2c: fix prefetch bits init in L2X0_AUX_CTRL using DT values
Hamish Martin (1):
usb: ohci: Default to per-port over-current protection
Hans de Goede (3):
pwm: lpss: Fix off by one error in base_unit math in pwm_lpss_prepare()
pwm: lpss: Add range limit check for the base_unit register value
i2c: core: Restore acpi_walk_dep_device_list() getting called after registering the ACPI i2c devs
Heiner Kallweit (1):
r8169: fix data corruption issue on RTL8402
Herbert Xu (2):
crypto: algif_aead - Do not set MAY_BACKLOG on the async path
crypto: algif_skcipher - EBUSY on aio should be an error
Håkon Bugge (2):
IB/mlx4: Fix starvation in paravirt mux/demux IB/mlx4: Adjust delayed work when a dup is observed
Jamie Iles (1):
f2fs: wait for sysfs kobject removal before freeing f2fs_sb_info
Jan Kara (3):
udf: Limit sparing table size
udf: Avoid accessing uninitialized data on failed inode read
reiserfs: Fix memory leak in reiserfs_parse_options()
Jassi Brar (1):
mailbox: avoid timer start from callback
Jing Xiangfeng (3):
rapidio: fix the missed put_device() for rio_mport_add_riodev
scsi: mvumi: Fix error return in mvumi_io_attach()
scsi: ibmvfc: Fix error return in ibmvfc_probe()
Joakim Zhang (1):
can: flexcan: flexcan_chip_stop(): add error handling and propagate error value
Johan Hovold (1):
USB: cdc-acm: handle broken union descriptors
Johannes Berg (1):
nl80211: fix non-split wiphy information
Jonathan Lemon (1):
mlx4: handle non-napi callers to napi_poll
Kaige Li (1):
NTB: hw: amd: fix an issue about leak system resources
Kajol Jain (1):
powerpc/perf/hv-gpci: Fix starting index value
Keita Suzuki (2):
misc: rtsx: Fix memory leak in rtsx_pci_probe
brcmsmac: fix memory leak in wlc_phy_attach_lcnphy
Krzysztof Kozlowski (5):
Input: ep93xx_keypad - fix handling of platform_get_irq() error
Input: omap4-keypad - fix handling of platform_get_irq() error
Input: twl4030_keypad - fix handling of platform_get_irq() error
Input: sun4i-ps2 - fix handling of platform_get_irq() error
memory: fsl-corenet-cf: Fix handling of platform_get_irq() error
Laurent Pinchart (1):
media: uvcvideo: Set media controller entity functions
Leon Romanovsky (1):
overflow: Include header file with SIZE_MAX declaration
Lijun Ou (1):
RDMA/hns: Set the unsupported wr opcode
Lorenzo Colitti (3):
usb: gadget: f_ncm: fix ncm_bitrate for SuperSpeed and above.
usb: gadget: u_ether: enable qmult on SuperSpeed Plus as well
usb: gadget: f_ncm: allow using NCM in SuperSpeed Plus gadgets.
Maciej Żenczykowski (1):
net/ipv4: always honour route mtu during forwarding
Mark Salter (1):
drivers/perf: xgene_pmu: Fix uninitialized resource struct
Mark Tomlinson (2):
mtd: mtdoops: Don't write panic data twice
PCI: iproc: Set affinity mask on MSI interrupts
Matthew Wilcox (Oracle) (1):
ramfs: fix nommu mmap with gaps in the page cache
Mauro Carvalho Chehab (1):
media: saa7134: avoid a shift overflow
Michal Kalderon (1):
RDMA/qedr: Fix use of uninitialized field
Michal Simek (1):
arm64: dts: zynqmp: Remove additional compatible string for i2c IPs
Michał Mirosław (1):
regulator: resolve supply after creating regulator
Minas Harutyunyan (1):
usb: dwc2: Fix INTR OUT transfers in DDMA mode.
Mukesh Ojha (1):
powerpc/powernv/opal-dump : Use IRQ_HANDLED instead of numbers in interrupt handler
Nathan Chancellor (1):
usb: dwc2: Fix parameter type in function pointer prototype
Navid Emamdoost (1):
clk: bcm2835: add missing release if devm_clk_hw_register fails
Neal Cardwell (1):
tcp: fix to update snd_wl1 in bulk receiver fast path
Necip Fazil Yildiran (1):
arc: plat-hsdk: fix kconfig dependency warning when !RESET_CONTROLLER
Nicholas Mc Guire (2):
powerpc/pseries: Fix missing of_node_put() in rng_init() powerpc/icp-hv: Fix missing of_node_put() in success path
Nilesh Javali (2):
scsi: qedi: Protect active command list to avoid list corruption
scsi: qedi: Fix list_del corruption while removing active I/O
Oliver Neukum (2):
media: ati_remote: sanity check for both endpoints
USB: cdc-wdm: Make wdm_flush() interruptible and add wdm_fsync().
Pali Rohár (1):
mmc: sdio: Check for CISTPL_VERS_1 buffer size
Pavel Machek (2):
crypto: ccp - fix error handling
media: firewire: fix memory leak
Peilin Ye (1):
ipvs: Fix uninit-value in do_ip_vs_set_ctl()
Peng Fan (1):
tty: serial: fsl_lpuart: fix lpuart32_poll_get_char
Qiushi Wu (7):
media: platform: fcp: Fix a reference count leak.
media: s5p-mfc: Fix a reference count leak
media: ti-vpe: Fix a missing check and reference count leak
media: sti: Fix reference count leaks
media: exynos4-is: Fix several reference count leaks due to pm_runtime_get_sync
media: exynos4-is: Fix a reference count leak due to pm_runtime_get_sync
media: exynos4-is: Fix a reference count leak
Ralph Campbell (1):
mm/memcg: fix device private memcg accounting
Robert Hoo (1):
KVM: x86: emulating RDPID failure shall return #UD rather than #GP
Roberto Sassu (1):
ima: Don't ignore errors from crypto_shash_update()
Rohit kumar (2):
ASoC: qcom: lpass-platform: fix memory leak
ASoC: qcom: lpass-cpu: fix concurrency issue
Roman Bolshakov (1):
scsi: target: core: Add CONTROL field for trace events
Rustam Kovhaev (1):
ntfs: add check for mft record size in superblock
Samuel Holland (1):
Bluetooth: hci_uart: Cancel init work before unregistering
Sean Christopherson (1):
KVM: x86/mmu: Commit zap of remaining invalid pages when recovering lpages
Sherry Sun (2):
mic: vop: copy data to kernel space then write to io memory
misc: vop: add round_up(x,4) for vring_size to avoid kernel panic
Shyam Prasad N (1):
cifs: Return the error from crypt_message when enc/dec key not found.
Souptick Joarder (3):
drivers/virt/fsl_hypervisor: Fix error handling path
misc: mic: scif: Fix error handling path
rapidio: fix error handling path
Srikar Dronamraju (1):
cpufreq: powernv: Fix frame-size-overflow in powernv_cpufreq_reboot_notifier
Stephan Gerhold (1):
arm64: dts: qcom: msm8916: Fix MDP/DSI interrupts
Suravee Suthikulpanit (1):
KVM: SVM: Initialize prev_ga_tag before use
Suren Baghdasaryan (1):
mm, oom_adj: don't loop through tasks in __set_oom_adj when not necessary
Sylwester Nawrocki (1):
media: Revert "media: exynos4-is: Add missed check for pinctrl_lookup_state()"
Takashi Iwai (1):
ALSA: seq: oss: Avoid mutex lock for a long-time ioctl
Tero Kristo (1):
crypto: omap-sham - fix digcnt register handling with export/import
Tetsuo Handa (1):
mwifiex: don't call del_timer_sync() on uninitialized timer
Thomas Gleixner (1):
net: enic: Cure the enic api locking trainwreck
Thomas Pedersen (1):
mac80211: handle lack of sband->bitrates in rates
Thomas Preston (2):
pinctrl: mcp23s08: Fix mcp23x17_regmap initialiser
pinctrl: mcp23s08: Fix mcp23x17 precious range
Tianjia Zhang (2):
crypto: mediatek - Fix wrong return value in mtk_desc_ring_alloc()
scsi: csiostor: Fix wrong return value in csio_hw_prep_fw()
Tobias Jordan (1):
lib/crc32.c: fix trivial typo in preprocessor condition
Todd Kjos (1):
binder: fix UAF when releasing todo list
Tom Rix (7):
media: tuner-simple: fix regression in simple_set_radio_freq
media: m5mols: Check function pointer in m5mols_sensor_power
media: tc358743: initialize variable
brcmfmac: check ndev pointer
drm/gma500: fix error check
video: fbdev: sis: fix null ptr dereference
mwifiex: fix double free
Tong Zhang (2):
tty: serial: earlycon dependency
tty: ipwireless: fix error handling
Tyrel Datwyler (1):
tty: hvcs: Don't NULL tty->driver_data until hvcs_cleanup()
Valentin Vidic (2):
net: korina: fix kfree of rx/tx descriptor array
net: korina: cast KSEG0 address to pointer in kfree
Vasant Hegde (1):
powerpc/powernv/dump: Fix race while processing OPAL dump
Venkateswara Naralasetty (1):
ath10k: provide survey info as accumulated data
Vincent Mailhol (1):
usb: cdc-acm: add quirk to blacklist ETAS ES58X devices
Wang Yufen (1):
brcm80211: fix possible memleak in brcmf_proto_msgbuf_attach
Wilken Gottwalt (1):
net: usb: qmi_wwan: add Cellient MPL200 card
Xiaoliang Pang (1):
cypto: mediatek - fix leaks in mtk_desc_ring_alloc
Xiaolong Huang (1):
media: media/pci: prevent memory leak in bttv_probe
Xiaoyang Xu (1):
vfio iommu type1: Fix memory leak in vfio_iommu_type1_pin_pages
Xie He (2):
net: hdlc: In hdlc_rcv, check to make sure dev is an HDLC device
net: hdlc_raw_eth: Clear the IFF_TX_SKB_SHARING flag after calling ether_setup
YueHaibing (1):
Input: stmfts - fix a & vs && typo
Zekun Shen (1):
ath10k: check idx validity in __ath10k_htt_rx_ring_fill_n()
Zqiang (1):
usb: gadget: function: printer: fix use-after-free in __lock_acquire
[email protected] (1):
backlight: sky81452-backlight: Fix refcount imbalance on error
zhenwei pi (1):
nvmet: fix uninitialized work for zero kato
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +1 -1
@@ -552,7 +552,7 @@ loops can be debugged more effectively on production systems. - clearcpuid=BITNUM [X86] + clearcpuid=BITNUM[,BITNUM...] [X86] Disable CPUID feature X for the kernel. See arch/x86/include/asm/cpufeatures.h for the valid bit numbers. Note the Linux specific bits are not necessarily
Documentation/networking/ip-sysctl.txt +3 -1
@@ -905,12 +905,14 @@ icmp_ratelimit - INTEGER icmp_msgs_per_sec - INTEGER Limit maximal number of ICMP packets sent per second from this host. Only messages whose type matches icmp_ratemask (see below) are - controlled by this limit. + controlled by this limit. For security reasons, the precise count + of messages per second is randomized. Default: 1000 icmp_msgs_burst - INTEGER icmp_msgs_per_sec controls number of ICMP packets sent per second, while icmp_msgs_burst controls the burst size of these packets. + For security reasons, the precise burst size is randomized. Default: 50 icmp_ratemask - INTEGER
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 202 +SUBLEVEL = 203 EXTRAVERSION = NAME = Petit Gorille
arch/arc/plat-hsdk/Kconfig +1 -0
@@ -11,4 +11,5 @@ menuconfig ARC_SOC_HSDK select ARC_HAS_ACCL_REGS select ARC_IRQ_NO_AUTOSAVE select CLK_HSDK + select RESET_CONTROLLER select RESET_HSDK
arch/arm/boot/dts/owl-s500.dtsi +3 -3
@@ -82,21 +82,21 @@ global_timer: timer@b0020200 { compatible = "arm,cortex-a9-global-timer"; reg = <0xb0020200 0x100>; - interrupts = <GIC_PPI 0 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; + interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; status = "disabled"; }; twd_timer: timer@b0020600 { compatible = "arm,cortex-a9-twd-timer"; reg = <0xb0020600 0x20>; - interrupts = <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; status = "disabled"; }; twd_wdt: wdt@b0020620 { compatible = "arm,cortex-a9-twd-wdt"; reg = <0xb0020620 0xe0>; - interrupts = <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; + interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; status = "disabled"; };
arch/arm/mm/cache-l2x0.c +12 -4
@@ -1261,20 +1261,28 @@ static void __init l2c310_of_parse(const struct device_node *np, ret =of_property_read_u32 (np,"prefetch-data" , &val);if (ret ==0 ) { -if (val) +if (val) { prefetch |=L310_PREFETCH_CTRL_DATA_PREFETCH ; -else + *aux_val |=L310_PREFETCH_CTRL_DATA_PREFETCH ; + }else { prefetch &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; + *aux_val &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; + } + *aux_mask &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; }else if (ret != -EINVAL ) {pr_err ("L2C-310 OF prefetch-data property value is missing\n" ); } ret =of_property_read_u32 (np,"prefetch-instr" , &val);if (ret ==0 ) { -if (val) +if (val) { prefetch |=L310_PREFETCH_CTRL_INSTR_PREFETCH ; -else + *aux_val |=L310_PREFETCH_CTRL_INSTR_PREFETCH ; + }else { prefetch &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; + *aux_val &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; + } + *aux_mask &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; }else if (ret != -EINVAL ) {pr_err ("L2C-310 OF prefetch-instr property value is missing\n" ); }
arch/arm64/boot/dts/qcom/msm8916.dtsi +2 -2
@@ -818,7 +818,7 @@ reg-names = "mdp_phys"; interrupt-parent = <&mdss>; - interrupts = <0 0>; + interrupts = <0>; clocks = <&gcc GCC_MDSS_AHB_CLK>, <&gcc GCC_MDSS_AXI_CLK>,
@@ -850,7 +850,7 @@ reg-names = "dsi_ctrl"; interrupt-parent = <&mdss>; - interrupts = <4 0>; + interrupts = <4>; assigned-clocks = <&gcc BYTE0_CLK_SRC>, <&gcc PCLK0_CLK_SRC>;
arch/arm64/boot/dts/xilinx/zynqmp.dtsi +2 -2
@@ -410,7 +410,7 @@ }; i2c0: i2c@ff020000 { - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; + compatible = "cdns,i2c-r1p14"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 17 4>;
@@ -420,7 +420,7 @@ }; i2c1: i2c@ff030000 { - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; + compatible = "cdns,i2c-r1p14"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 18 4>;
arch/powerpc/include/asm/reg.h +1 -1
@@ -753,7 +753,7 @@#define THRM1_TIN (1 << 31)#define THRM1_TIV (1 << 30)#define THRM1_THRES (x) ((x&0x7f)<<23) -#define THRM3_SITV (x) ((x&0x3fff)<<1) +#define THRM3_SITV (x) ((x & 0x1fff) << 1)#define THRM1_TID (1<<2)#define THRM1_TIE (1<<1)#define THRM1_V (1<<0)
arch/powerpc/kernel/tau_6xx.c +28 -54
123 lines not on this page · raw message
arch/powerpc/perf/hv-gpci-requests.h +3 -3
@@ -95,7 +95,7 @@ REQUEST(__field(0, 8, partition_id)#define REQUEST_NAME system_performance_capabilities#define REQUEST_NUM 0x40 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN ) REQUEST(__field(0, 1, perf_collect_privileged) __field(0x1, 1, capability_mask)
@@ -223,7 +223,7 @@ REQUEST(__field(0, 2, partition_id)#define REQUEST_NAME system_hypervisor_times#define REQUEST_NUM 0xF0 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN ) REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors) __count(0x8, 8, time_spent_processing_virtual_processor_timers)
@@ -234,7 +234,7 @@ REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors)#define REQUEST_NAME system_tlbie_count_and_time#define REQUEST_NUM 0xF4 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN )REQUEST (__count (0 ,8 , tlbie_instructions_issued)/*
arch/powerpc/perf/isa207-common.c +10 -0
@@ -275,6 +275,15 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp) mask |=CNST_PMC_MASK (pmc); value |=CNST_PMC_VAL (pmc); + +/* +* PMC5 and PMC6 are used to count cycles and instructions and +* they do not support most of the constraint bits. Add a check +* to exclude PMC5/6 from most of the constraints except for +* EBB/BHRB. +*/ +if (pmc >=5 ) + goto ebb_bhrb; }if (pmc <=4 ) {
@@ -333,6 +342,7 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp) } } +ebb_bhrb:if (!pmc && ebb)/* EBB events must specify the PMC */ return -1 ;
arch/powerpc/platforms/Kconfig +2 -7
@@ -243,7 +243,7 @@ config TAU temp is actually what /proc/cpuinfo says it is. config TAU_INT - bool "Interrupt driven TAU driver (DANGEROUS)" + bool "Interrupt driven TAU driver (EXPERIMENTAL)" depends on TAU ---help--- The TAU supports an interrupt driven mode which causes an interrupt
@@ -251,12 +251,7 @@ config TAU_INT to get notified the temp has exceeded a range. With this option off, a timer is used to re-check the temperature periodically. - However, on some cpus it appears that the TAU interrupt hardware - is buggy and can cause a situation which would lead unexplained hard - lockups. - - Unless you are extending the TAU driver, or enjoy kernel/hardware - debugging, leave this option off. + If in doubt, say N here. config TAU_AVERAGE bool "Average high and low temp"
arch/powerpc/platforms/powernv/opal-dump.c +32 -18
93 lines not on this page · raw message
arch/powerpc/platforms/pseries/rng.c +1 -0
@@ -40,6 +40,7 @@ static __init int rng_init(void) ppc_md.get_random_seed = pseries_get_random_long; +of_node_put (dn);return 0 ; }machine_subsys_initcall (pseries, rng_init);
arch/powerpc/sysdev/xics/icp-hv.c +1 -0
@@ -179,6 +179,7 @@ int icp_hv_init(void) icp_ops = &icp_hv_ops; +of_node_put (np);return 0 ; }
arch/x86/kernel/fpu/init.c +22 -8
@@ -249,9 +249,9 @@ static void __init fpu__init_system_ctx_switch(void)*/ static void __init fpu__init_parse_early_param (void ) { -char arg[32 ]; +char arg[128 ];char *argptr = arg; -int bit; +int arglen, res, bit;if (cmdline_find_option_bool (boot_command_line,"no387" ))setup_clear_cpu_cap (X86_FEATURE_FPU );
@@ -271,12 +271,26 @@ static void __init fpu__init_parse_early_param(void)if (cmdline_find_option_bool (boot_command_line,"noxsaves" ))setup_clear_cpu_cap (X86_FEATURE_XSAVES ); -if (cmdline_find_option (boot_command_line,"clearcpuid" , arg, -sizeof (arg)) && -get_option (&argptr, &bit) && - bit >=0 && - bit <NCAPINTS *32 ) -setup_clear_cpu_cap (bit); + arglen =cmdline_find_option (boot_command_line,"clearcpuid" , arg,sizeof (arg)); +if (arglen <=0 ) +return ; + +pr_info ("Clearing CPUID bits:" ); +do { + res =get_option (&argptr, &bit); +if (res ==0 || res ==3 ) +break ; + +/* If the argument was too long, the last bit may be cut off */ +if (res ==1 && arglen >=sizeof (arg)) +break ; + +if (bit >=0 && bit <NCAPINTS *32 ) { +pr_cont (" " X86_CAP_FMT ,x86_cap_flag (bit)); +setup_clear_cpu_cap (bit); + } + }while (res ==2 ); +pr_cont ("\n" ); }/*
arch/x86/kvm/emulate.c +1 -1
@@ -3544,7 +3544,7 @@ static int em_rdpid(struct x86_emulate_ctxt *ctxt)u64 tsc_aux =0 ;if (ctxt->ops->get_msr (ctxt,MSR_TSC_AUX , &tsc_aux)) -return emulate_gp (ctxt,0 ); +return emulate_ud (ctxt); ctxt->dst.val = tsc_aux;return X86EMUL_CONTINUE ; }
arch/x86/kvm/mmu.c +1 -0
@@ -5846,6 +5846,7 @@ static void kvm_recover_nx_lpages(struct kvm *kvm)cond_resched_lock (&kvm->mmu_lock); } } +kvm_mmu_commit_zap_page (kvm, &invalid_list);spin_unlock (&kvm->mmu_lock);srcu_read_unlock (&kvm->srcu, rcu_idx);
arch/x86/kvm/svm.c +1 -0
@@ -4862,6 +4862,7 @@ static int svm_update_pi_irte(struct kvm *kvm, unsigned int host_irq,* - Tell IOMMU to use legacy mode for this interrupt. * - Retrieve ga_tag of prior interrupt remapping data. */ + pi.prev_ga_tag =0 ; pi.is_guest_mode = false; ret =irq_set_vcpu_affinity (host_irq, &pi);
crypto/algif_aead.c +4 -3
@@ -83,7 +83,7 @@ static int crypto_aead_copy_sgl(struct crypto_skcipher *null_tfm,SKCIPHER_REQUEST_ON_STACK (skreq, null_tfm);skcipher_request_set_tfm (skreq, null_tfm); -skcipher_request_set_callback (skreq,CRYPTO_TFM_REQ_MAY_BACKLOG , +skcipher_request_set_callback (skreq,CRYPTO_TFM_REQ_MAY_SLEEP ,NULL ,NULL );skcipher_request_set_crypt (skreq, src, dst, len,NULL );
@@ -296,19 +296,20 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg, areq->outlen = outlen;aead_request_set_callback (&areq->cra_u.aead_req, -CRYPTO_TFM_REQ_MAY_BACKLOG , +CRYPTO_TFM_REQ_MAY_SLEEP , af_alg_async_cb, areq); err = ctx->enc ?crypto_aead_encrypt (&areq->cra_u.aead_req) :crypto_aead_decrypt (&areq->cra_u.aead_req);/* AIO operation in progress */ -if (err == -EINPROGRESS || err == -EBUSY ) +if (err == -EINPROGRESS )return -EIOCBQUEUED ;sock_put (sk); }else {/* Synchronous operation */ aead_request_set_callback (&areq->cra_u.aead_req, +CRYPTO_TFM_REQ_MAY_SLEEP |CRYPTO_TFM_REQ_MAY_BACKLOG , af_alg_complete, &ctx->completion); err = af_alg_wait_for_completion(ctx->enc ?
crypto/algif_skcipher.c +1 -1
@@ -133,7 +133,7 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,crypto_skcipher_decrypt (&areq->cra_u.skcipher_req);/* AIO operation in progress */ -if (err == -EINPROGRESS || err == -EBUSY ) +if (err == -EINPROGRESS )return -EIOCBQUEUED ;sock_put (sk);
drivers/android/binder.c +10 -25
@@ -286,7 +286,7 @@ struct binder_device {struct binder_work {struct list_head entry; -enum { +enum binder_work_type {BINDER_WORK_TRANSACTION =1 ,BINDER_WORK_TRANSACTION_COMPLETE ,BINDER_WORK_RETURN_ERROR ,
@@ -850,27 +850,6 @@ static struct binder_work *binder_dequeue_work_head_ilocked(return w; } -/** -* binder_dequeue_work_head() - Dequeues the item at head of list -* @proc: binder_proc associated with list -* @list: list to dequeue head -* -* Removes the head of the list if there are items on the list -* -* Return: pointer dequeued binder_work, NULL if list was empty -*/ -static struct binder_work *binder_dequeue_work_head ( -struct binder_proc *proc, -struct list_head *list) -{ -struct binder_work *w; - -binder_inner_proc_lock (proc); - w =binder_dequeue_work_head_ilocked (list); -binder_inner_proc_unlock (proc); -return w; -} -static void binder_defer_work (struct binder_proc *proc,enum binder_deferred_state defer);static void binder_free_thread (struct binder_thread *thread);
@@ -4162,13 +4141,17 @@ static void binder_release_work(struct binder_proc *proc, struct list_head *list) {struct binder_work *w; +enum binder_work_type wtype;while (1 ) { - w =binder_dequeue_work_head (proc, list); +binder_inner_proc_lock (proc); + w =binder_dequeue_work_head_ilocked (list); + wtype = w ? w->type :0 ; +binder_inner_proc_unlock (proc);if (!w)return ; -switch (w->type) { +switch (wtype) {case BINDER_WORK_TRANSACTION : {struct binder_transaction *t;
@@ -4202,9 +4185,11 @@ static void binder_release_work(struct binder_proc *proc,kfree (death);binder_stats_deleted (BINDER_STAT_DEATH ); }break ; +case BINDER_WORK_NODE : +break ;default :pr_err ("unexpected work type, %d, not freed\n" , - w->type); + wtype);break ; } }
drivers/bluetooth/hci_ldisc.c +1 -0
@@ -541,6 +541,7 @@ static void hci_uart_tty_close(struct tty_struct *tty)clear_bit (HCI_UART_PROTO_READY , &hu->flags);percpu_up_write (&hu->proto_lock); +cancel_work_sync (&hu->init_ready);cancel_work_sync (&hu->write_work);if (hdev) {
drivers/bluetooth/hci_serdev.c +2 -0
@@ -361,6 +361,8 @@ void hci_uart_unregister_device(struct hci_uart *hu)struct hci_dev *hdev = hu->hdev;clear_bit (HCI_UART_PROTO_READY , &hu->flags); + +cancel_work_sync (&hu->init_ready);if (test_bit (HCI_UART_REGISTERED , &hu->flags))hci_unregister_dev (hdev);hci_free_dev (hdev);
drivers/clk/at91/clk-main.c +8 -3
@@ -517,12 +517,17 @@ static int clk_sam9x5_main_set_parent(struct clk_hw *hw, u8 index)return -EINVAL ;regmap_read (regmap,AT91_CKGR_MOR , &tmp); - tmp &= ~MOR_KEY_MASK ;if (index && !(tmp &AT91_PMC_MOSCSEL )) -regmap_write (regmap,AT91_CKGR_MOR , tmp |AT91_PMC_MOSCSEL ); + tmp =AT91_PMC_MOSCSEL ;else if (!index && (tmp &AT91_PMC_MOSCSEL )) -regmap_write (regmap,AT91_CKGR_MOR , tmp & ~AT91_PMC_MOSCSEL ); + tmp =0 ; +else +return 0 ; + +regmap_update_bits (regmap,AT91_CKGR_MOR , +AT91_PMC_MOSCSEL |MOR_KEY_MASK , + tmp |AT91_PMC_KEY );while (!clk_sam9x5_main_ready (regmap))cpu_relax ();
drivers/clk/bcm/clk-bcm2835.c +3 -1
@@ -1354,8 +1354,10 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, pll->hw.init = &init; ret =devm_clk_hw_register (cprman->dev, &pll->hw); -if (ret) +if (ret) { +kfree (pll);return NULL ; + }return &pll->hw; }
drivers/cpufreq/powernv-cpufreq.c +6 -3
@@ -846,12 +846,15 @@ static int powernv_cpufreq_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused) { int cpu; -struct cpufreq_policy cpu_policy; +struct cpufreq_policy *cpu_policy; rebooting = true;for_each_online_cpu (cpu) { -cpufreq_get_policy (&cpu_policy, cpu); -powernv_cpufreq_target_index (&cpu_policy,get_nominal_index ()); + cpu_policy =cpufreq_cpu_get (cpu); +if (!cpu_policy) +continue ; +powernv_cpufreq_target_index (cpu_policy,get_nominal_index ()); +cpufreq_cpu_put (cpu_policy); }return NOTIFY_DONE ;
drivers/crypto/ccp/ccp-ops.c +1 -1
@@ -1752,7 +1752,7 @@ ccp_run_sha_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)break ;default : ret = -EINVAL ; - goto e_ctx; + goto e_data; } }else {/* Stash the context */
drivers/crypto/ixp4xx_crypto.c +1 -1
@@ -531,7 +531,7 @@ static void release_ixp_crypto(struct device *dev)if (crypt_virt) {dma_free_coherent (dev, -NPE_QLEN_TOTAL *sizeof (struct crypt_ctl ), +NPE_QLEN *sizeof (struct crypt_ctl ), crypt_virt, crypt_phys); }return ;
drivers/crypto/mediatek/mtk-platform.c +4 -4
@@ -445,7 +445,7 @@ static void mtk_desc_dma_free(struct mtk_cryp *cryp)static int mtk_desc_ring_alloc (struct mtk_cryp *cryp) {struct mtk_ring **ring = cryp->ring; -int i, err =ENOMEM ; +int i;for (i =0 ; i <MTK_RING_MAX ; i++) { ring[i] =kzalloc (sizeof (**ring),GFP_KERNEL );
@@ -472,14 +472,14 @@ static int mtk_desc_ring_alloc(struct mtk_cryp *cryp)return 0 ; err_cleanup: -for (; i--; ) { +do {dma_free_coherent (cryp->dev,MTK_DESC_RING_SZ , ring[i]->res_base, ring[i]->res_dma);dma_free_coherent (cryp->dev,MTK_DESC_RING_SZ , ring[i]->cmd_base, ring[i]->cmd_dma);kfree (ring[i]); - } -return err; + }while (i--); +return -ENOMEM ; }static int mtk_crypto_probe (struct platform_device *pdev)
drivers/crypto/omap-sham.c +3 -0
@@ -455,6 +455,9 @@ static void omap_sham_write_ctrl_omap4(struct omap_sham_dev *dd, size_t length,struct omap_sham_reqctx *ctx =ahash_request_ctx (dd->req);u32 val, mask; +if (likely (ctx->digcnt)) +omap_sham_write (dd,SHA_REG_DIGCNT (dd), ctx->digcnt); +/* * Setting ALGO_CONST only for the first iteration and * CLOSE_HASH only for the last one. Note that flags mode bits
drivers/edac/i5100_edac.c +5 -6
@@ -1072,16 +1072,15 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id) PCI_DEVICE_ID_INTEL_5100_19, 0);if (!einj) { ret = -ENODEV ; - goto bail_einj; + goto bail_mc_free; } rc =pci_enable_device (einj);if (rc <0 ) { ret = rc; - goto bail_disable_einj; + goto bail_einj; } - mci->pdev = &pdev->dev; priv = mci->pvt_info;
@@ -1147,14 +1146,14 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id) bail_scrub: priv->scrub_enable =0 ;cancel_delayed_work_sync (&(priv->i5100_scrubbing)); -edac_mc_free (mci); - -bail_disable_einj:pci_disable_device (einj); bail_einj:pci_dev_put (einj); +bail_mc_free: +edac_mc_free (mci); + bail_disable_ch1:pci_disable_device (ch1mm);
drivers/gpu/drm/gma500/cdv_intel_dp.c +1 -1
@@ -2121,7 +2121,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev intel_dp->dpcd, sizeof(intel_dp->dpcd));cdv_intel_edp_panel_vdd_off (gma_encoder); -if (ret ==0 ) { +if (ret <=0 ) {/* if this fails, presume the device is a ghost */ DRM_INFO ("failed to retrieve link info, disabling eDP\n" );cdv_intel_dp_encoder_destroy (encoder);
drivers/gpu/drm/virtio/virtgpu_kms.c +2 -0
@@ -113,8 +113,10 @@ static void virtio_gpu_get_capsets(struct virtio_gpu_device *vgdev, vgdev->capsets[i].id > 0, 5 * HZ);if (ret ==0 ) {DRM_ERROR ("timed out waiting for cap set %d\n" , i); +spin_lock (&vgdev->display_info_lock);kfree (vgdev->capsets); vgdev->capsets =NULL ; +spin_unlock (&vgdev->display_info_lock);return ; } DRM_INFO("cap set %d: id %d, max-version %d, max-size %d\n",
drivers/gpu/drm/virtio/virtgpu_vq.c +7 -3
@@ -563,9 +563,13 @@ static void virtio_gpu_cmd_get_capset_info_cb(struct virtio_gpu_device *vgdev,int i =le32_to_cpu (cmd->capset_index);spin_lock (&vgdev->display_info_lock); - vgdev->capsets[i].id =le32_to_cpu (resp->capset_id); - vgdev->capsets[i].max_version =le32_to_cpu (resp->capset_max_version); - vgdev->capsets[i].max_size =le32_to_cpu (resp->capset_max_size); +if (vgdev->capsets) { + vgdev->capsets[i].id =le32_to_cpu (resp->capset_id); + vgdev->capsets[i].max_version =le32_to_cpu (resp->capset_max_version); + vgdev->capsets[i].max_size =le32_to_cpu (resp->capset_max_size); + }else { +DRM_ERROR ("invalid capset memory." ); + }spin_unlock (&vgdev->display_info_lock);wake_up (&vgdev->resp_wq); }
drivers/hid/hid-input.c +2 -2
@@ -796,7 +796,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x3b :/* Battery Strength */ hidinput_setup_battery (device,HID_INPUT_REPORT , field); usage->type =EV_PWR ; - goto ignore; +return ;case 0x3c :/* Invert */ map_key_clear (BTN_TOOL_RUBBER );
@@ -1043,7 +1043,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase HID_DC_BATTERYSTRENGTH :hidinput_setup_battery (device,HID_INPUT_REPORT , field); usage->type =EV_PWR ; - goto ignore; +return ; } goto unknown;
drivers/hid/hid-roccat-kone.c +16 -7
@@ -297,31 +297,40 @@ static ssize_t kone_sysfs_write_settings(struct file *fp, struct kobject *kobj,struct kone_device *kone =hid_get_drvdata (dev_get_drvdata (dev));struct usb_device *usb_dev =interface_to_usbdev (to_usb_interface (dev));int retval =0 , difference, old_profile; +struct kone_settings *settings = (struct kone_settings *)buf;/* I need to get my data in one piece */ if (off !=0 || count !=sizeof (struct kone_settings ))return -EINVAL ;mutex_lock (&kone->kone_lock); - difference =memcmp (buf, &kone->settings,sizeof (struct kone_settings )); + difference =memcmp (settings, &kone->settings, +sizeof (struct kone_settings ));if (difference) { - retval =kone_set_settings (usb_dev, - (struct kone_settings const *)buf); -if (retval) { -mutex_unlock (&kone->kone_lock); -return retval; +if (settings->startup_profile <1 || + settings->startup_profile >5 ) { + retval = -EINVAL ; + goto unlock; } + retval =kone_set_settings (usb_dev, settings); +if (retval) + goto unlock; + old_profile = kone->settings.startup_profile; -memcpy (&kone->settings, buf,sizeof (struct kone_settings )); +memcpy (&kone->settings, settings,sizeof (struct kone_settings ));kone_profile_activated (kone, kone->settings.startup_profile);if (kone->settings.startup_profile != old_profile)kone_profile_report (kone, kone->settings.startup_profile); } +unlock:mutex_unlock (&kone->kone_lock); +if (retval) +return retval; +return sizeof (struct kone_settings ); } static BIN_ATTR(settings, 0660, kone_sysfs_read_settings,
drivers/i2c/busses/Kconfig +1 -0
@@ -1095,6 +1095,7 @@ config I2C_RCAR depends on HAS_DMA depends on ARCH_RENESAS || COMPILE_TEST select I2C_SLAVE + select RESET_CONTROLLER if ARCH_RCAR_GEN3 help If you say yes to this option, support will be included for the R-Car I2C controller.
drivers/i2c/i2c-core-acpi.c +10 -1
@@ -219,6 +219,7 @@ static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,void i2c_acpi_register_devices (struct i2c_adapter *adap) {acpi_status status; +acpi_handle handle;if (!has_acpi_companion (&adap->dev))return ;
@@ -229,6 +230,15 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap) adap, NULL);if (ACPI_FAILURE (status))dev_warn (&adap->dev,"failed to enumerate I2C slaves\n" ); + +if (!adap->dev.parent) +return ; + + handle =ACPI_HANDLE (adap->dev.parent); +if (!handle) +return ; + +acpi_walk_dep_device_list (handle); } const struct acpi_device_id *
@@ -684,7 +694,6 @@ int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)return -ENOMEM ; } -acpi_walk_dep_device_list (handle);return 0 ; }
drivers/infiniband/hw/hns/hns_roce_hw_v1.c +0 -1
@@ -243,7 +243,6 @@ int hns_roce_v1_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, ps_opcode =HNS_ROCE_WQE_OPCODE_SEND ;break ;case IB_WR_LOCAL_INV : -break ;case IB_WR_ATOMIC_CMP_AND_SWP :case IB_WR_ATOMIC_FETCH_AND_ADD :case IB_WR_LSO :
drivers/infiniband/hw/mlx4/cm.c +3 -0
@@ -307,6 +307,9 @@ static void schedule_delayed(struct ib_device *ibdev, struct id_map_entry *id)if (!sriov->is_going_down) { id->scheduled_delete =1 ;schedule_delayed_work (&id->timeout,CM_CLEANUP_CACHE_TIMEOUT ); + }else if (id->scheduled_delete) { +/* Adjust timeout if already scheduled */ +mod_delayed_work (system_wq, &id->timeout,CM_CLEANUP_CACHE_TIMEOUT ); }spin_unlock_irqrestore (&sriov->going_down_lock, flags);spin_unlock (&sriov->id_map_lock);
drivers/infiniband/hw/mlx4/mad.c +31 -3
@@ -1305,6 +1305,18 @@ static void mlx4_ib_tunnel_comp_handler(struct ib_cq *cq, void *arg)spin_unlock_irqrestore (&dev->sriov.going_down_lock, flags); } +static void mlx4_ib_wire_comp_handler (struct ib_cq *cq,void *arg) +{ +unsigned long flags; +struct mlx4_ib_demux_pv_ctx *ctx = cq->cq_context; +struct mlx4_ib_dev *dev =to_mdev (ctx->ib_dev); + +spin_lock_irqsave (&dev->sriov.going_down_lock, flags); +if (!dev->sriov.is_going_down && ctx->state ==DEMUX_PV_STATE_ACTIVE ) +queue_work (ctx->wi_wq, &ctx->work); +spin_unlock_irqrestore (&dev->sriov.going_down_lock, flags); +} +static int mlx4_ib_post_pv_qp_buf (struct mlx4_ib_demux_pv_ctx *ctx,struct mlx4_ib_demux_pv_qp *tun_qp,int index)
@@ -2012,7 +2024,8 @@ static int create_pv_resources(struct ib_device *ibdev, int slave, int port, cq_size *=2 ; cq_attr.cqe = cq_size; - ctx->cq =ib_create_cq (ctx->ib_dev, mlx4_ib_tunnel_comp_handler, + ctx->cq =ib_create_cq (ctx->ib_dev, + create_tun ? mlx4_ib_tunnel_comp_handler : mlx4_ib_wire_comp_handler,NULL , ctx, &cq_attr);if (IS_ERR (ctx->cq)) { ret =PTR_ERR (ctx->cq);
@@ -2049,6 +2062,7 @@ static int create_pv_resources(struct ib_device *ibdev, int slave, int port,INIT_WORK (&ctx->work, mlx4_ib_sqp_comp_worker); ctx->wq =to_mdev (ibdev)->sriov.demux[port -1 ].wq; + ctx->wi_wq =to_mdev (ibdev)->sriov.demux[port -1 ].wi_wq; ret =ib_req_notify_cq (ctx->cq,IB_CQ_NEXT_COMP );if (ret) {
@@ -2192,7 +2206,7 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev, goto err_mcg; } -snprintf (name,sizeof name,"mlx4_ibt%d" , port); +snprintf (name,sizeof (name),"mlx4_ibt%d" , port); ctx->wq =alloc_ordered_workqueue (name,WQ_MEM_RECLAIM );if (!ctx->wq) {pr_err ("Failed to create tunnelling WQ for port %d\n" , port);
@@ -2200,7 +2214,15 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev, goto err_wq; } -snprintf (name,sizeof name,"mlx4_ibud%d" , port); +snprintf (name,sizeof (name),"mlx4_ibwi%d" , port); + ctx->wi_wq =alloc_ordered_workqueue (name,WQ_MEM_RECLAIM ); +if (!ctx->wi_wq) { +pr_err ("Failed to create wire WQ for port %d\n" , port); + ret = -ENOMEM ; + goto err_wiwq; + } + +snprintf (name,sizeof (name),"mlx4_ibud%d" , port); ctx->ud_wq =alloc_ordered_workqueue (name,WQ_MEM_RECLAIM );if (!ctx->ud_wq) {pr_err ("Failed to create up/down WQ for port %d\n" , port);
@@ -2211,6 +2233,10 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev,return 0 ; err_udwq: +destroy_workqueue (ctx->wi_wq); + ctx->wi_wq =NULL ; + +err_wiwq:destroy_workqueue (ctx->wq); ctx->wq =NULL ;
@@ -2258,12 +2284,14 @@ static void mlx4_ib_free_demux_ctx(struct mlx4_ib_demux_ctx *ctx) ctx->tun[i]->state =DEMUX_PV_STATE_DOWNING ; }flush_workqueue (ctx->wq); +flush_workqueue (ctx->wi_wq);for (i =0 ; i < dev->dev->caps.sqp_demux; i++) {destroy_pv_resources (dev, i, ctx->port, ctx->tun[i],0 );free_pv_object (dev, i, ctx->port); }kfree (ctx->tun);destroy_workqueue (ctx->ud_wq); +destroy_workqueue (ctx->wi_wq);destroy_workqueue (ctx->wq); } }
drivers/infiniband/hw/mlx4/mlx4_ib.h +2 -0
@@ -463,6 +463,7 @@ struct mlx4_ib_demux_pv_ctx {struct ib_pd *pd;struct work_struct work;struct workqueue_struct *wq; +struct workqueue_struct *wi_wq;struct mlx4_ib_demux_pv_qp qp[2 ]; };
@@ -470,6 +471,7 @@ struct mlx4_ib_demux_ctx {struct ib_device *ib_dev;int port;struct workqueue_struct *wq; +struct workqueue_struct *wi_wq;struct workqueue_struct *ud_wq;spinlock_t ud_lock;atomic64_t subnet_prefix;
drivers/infiniband/hw/qedr/main.c +1 -1
@@ -548,7 +548,7 @@ static int qedr_set_device_attr(struct qedr_dev *dev) qed_attr = dev->ops->rdma_query_device (dev->rdma_ctx);/* Part 2 - check capabilities */ - page_size = ~dev->attr.page_size_caps +1 ; + page_size = ~qed_attr->page_size_caps +1 ;if (page_size >PAGE_SIZE ) { DP_ERR(dev, "Kernel PAGE_SIZE is %ld which is smaller than minimum page size (%d) required by qedr\n",
drivers/infiniband/sw/rdmavt/vt.c +1 -3
@@ -97,9 +97,7 @@ struct rvt_dev_info *rvt_alloc_device(size_t size, int nports)if (!rdi)return rdi; - rdi->ports =kcalloc (nports, -sizeof (struct rvt_ibport **), -GFP_KERNEL ); + rdi->ports =kcalloc (nports,sizeof (*rdi->ports),GFP_KERNEL );if (!rdi->ports)ib_dealloc_device (&rdi->ibdev);
drivers/input/keyboard/ep93xx_keypad.c +2 -2
@@ -257,8 +257,8 @@ static int ep93xx_keypad_probe(struct platform_device *pdev) } keypad->irq =platform_get_irq (pdev,0 ); -if (!keypad->irq) { - err = -ENXIO ; +if (keypad->irq <0 ) { + err = keypad->irq; goto failed_free; }
drivers/input/keyboard/omap4-keypad.c +2 -4
@@ -253,10 +253,8 @@ static int omap4_keypad_probe(struct platform_device *pdev) } irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (&pdev->dev,"no keyboard irq assigned\n" ); -return -EINVAL ; - } +if (irq <0 ) +return irq; keypad_data =kzalloc (sizeof (struct omap4_keypad ),GFP_KERNEL );if (!keypad_data) {
drivers/input/keyboard/twl4030_keypad.c +3 -5
@@ -63,7 +63,7 @@ struct twl4030_keypad {bool autorepeat;unsigned int n_rows;unsigned int n_cols; -unsigned int irq; +int irq;struct device *dbg_dev;struct input_dev *input;
@@ -389,10 +389,8 @@ static int twl4030_kp_probe(struct platform_device *pdev) } kp->irq =platform_get_irq (pdev,0 ); -if (!kp->irq) { -dev_err (&pdev->dev,"no keyboard irq assigned\n" ); -return -EINVAL ; - } +if (kp->irq <0 ) +return kp->irq; error = matrix_keypad_build_keymap(keymap_data, NULL, TWL4030_MAX_ROWS,
drivers/input/serio/sun4i-ps2.c +3 -6
@@ -210,7 +210,6 @@ static int sun4i_ps2_probe(struct platform_device *pdev)struct sun4i_ps2data *drvdata;struct serio *serio;struct device *dev = &pdev->dev; -unsigned int irq;int error; drvdata =kzalloc (sizeof (struct sun4i_ps2data ),GFP_KERNEL );
@@ -263,14 +262,12 @@ static int sun4i_ps2_probe(struct platform_device *pdev)writel (0 , drvdata->reg_base +PS2_REG_GCTL );/* Get IRQ for the device */ - irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (dev,"no IRQ found\n" ); - error = -ENXIO ; + drvdata->irq =platform_get_irq (pdev,0 ); +if (drvdata->irq <0 ) { + error = drvdata->irq; goto err_disable_clk; } - drvdata->irq = irq; drvdata->serio = serio; drvdata->dev = dev;
drivers/input/touchscreen/imx6ul_tsc.c +16 -11
@@ -542,20 +542,25 @@ static int __maybe_unused imx6ul_tsc_resume(struct device *dev)mutex_lock (&input_dev->mutex); -if (input_dev->users) { - retval =clk_prepare_enable (tsc->adc_clk); -if (retval) - goto out; - - retval =clk_prepare_enable (tsc->tsc_clk); -if (retval) { -clk_disable_unprepare (tsc->adc_clk); - goto out; - } +if (!input_dev->users) + goto out; - retval =imx6ul_tsc_init (tsc); + retval =clk_prepare_enable (tsc->adc_clk); +if (retval) + goto out; + + retval =clk_prepare_enable (tsc->tsc_clk); +if (retval) { +clk_disable_unprepare (tsc->adc_clk); + goto out; } + retval =imx6ul_tsc_init (tsc); +if (retval) { +clk_disable_unprepare (tsc->tsc_clk); +clk_disable_unprepare (tsc->adc_clk); + goto out; + } out:mutex_unlock (&input_dev->mutex);return retval;
drivers/input/touchscreen/stmfts.c +1 -1
@@ -484,7 +484,7 @@ static ssize_t stmfts_sysfs_hover_enable_write(struct device *dev,mutex_lock (&sdata->mutex); -if (value & sdata->hover_enabled) +if (value && sdata->hover_enabled) goto out;if (sdata->running)
drivers/mailbox/mailbox.c +7 -5
@@ -85,9 +85,12 @@ static void msg_submit(struct mbox_chan *chan) exit:spin_unlock_irqrestore (&chan->lock, flags); -if (!err && (chan->txdone_method &TXDONE_BY_POLL )) -/* kick start the timer immediately to avoid delays */ -hrtimer_start (&chan->mbox->poll_hrt,0 ,HRTIMER_MODE_REL ); +/* kick start the timer immediately to avoid delays */ +if (!err && (chan->txdone_method &TXDONE_BY_POLL )) { +/* but only if not already active */ +if (!hrtimer_active (&chan->mbox->poll_hrt)) +hrtimer_start (&chan->mbox->poll_hrt,0 ,HRTIMER_MODE_REL ); + } }static void tx_tick (struct mbox_chan *chan,int r)
@@ -125,11 +128,10 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer)struct mbox_chan *chan = &mbox->chans[i];if (chan->active_req && chan->cl) { + resched = true; txdone = chan->mbox->ops->last_tx_done (chan);if (txdone)tx_tick (chan,0 ); -else - resched = true; } }
drivers/media/firewire/firedtv-fw.c +4 -2
@@ -271,8 +271,10 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id) name_len =fw_csr_string (unit->directory,CSR_MODEL , name,sizeof (name)); -if (name_len <0 ) -return name_len; +if (name_len <0 ) { + err = name_len; + goto fail_free; + }for (i =ARRAY_SIZE (model_names); --i; )if (strlen (model_names[i]) <= name_len &&strncmp (name, model_names[i], name_len) ==0 )
drivers/media/i2c/m5mols/m5mols_core.c +2 -1
@@ -755,7 +755,8 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable) ret =regulator_bulk_enable (ARRAY_SIZE (supplies), supplies);if (ret) { - info->set_power (&client->dev,0 ); +if (info->set_power) + info->set_power (&client->dev,0 );return ret; }
drivers/media/i2c/tc358743.c +1 -1
@@ -1318,7 +1318,7 @@ static int tc358743_isr(struct v4l2_subdev *sd, u32 status, bool *handled)static irqreturn_t tc358743_irq_handler (int irq,void *dev_id) {struct tc358743_state *state = dev_id; -bool handled; +bool handled = false;tc358743_isr (&state->sd,0 , &handled);
drivers/media/pci/bt8xx/bttv-driver.c +10 -3
@@ -4055,11 +4055,13 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) btv->id = dev->device;if (pci_enable_device (dev)) {pr_warn ("%d: Can't enable device\n" , btv->c.nr); -return -EIO ; + result = -EIO ; + goto free_mem; }if (pci_set_dma_mask (dev,DMA_BIT_MASK (32 ))) {pr_warn ("%d: No suitable DMA available\n" , btv->c.nr); -return -EIO ; + result = -EIO ; + goto free_mem; } if (!request_mem_region(pci_resource_start(dev,0), pci_resource_len(dev,0),
@@ -4067,7 +4069,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)pr_warn ("%d: can't request iomem (0x%llx)\n" , btv->c.nr, (unsigned long long )pci_resource_start (dev,0 )); -return -EBUSY ; + result = -EBUSY ; + goto free_mem; }pci_set_master (dev);pci_set_command (dev);
@@ -4253,6 +4256,10 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)release_mem_region (pci_resource_start (btv->c.pci,0 ),pci_resource_len (btv->c.pci,0 ));pci_disable_device (btv->c.pci); + +free_mem: + bttvs[btv->c.nr] =NULL ; +kfree (btv);return result; }
drivers/media/pci/saa7134/saa7134-tvaudio.c +2 -1
@@ -693,7 +693,8 @@ int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value) {int err; -audio_dbg (2 ,"dsp write reg 0x%x = 0x%06x\n" , reg <<2 , value); +audio_dbg (2 ,"dsp write reg 0x%x = 0x%06x\n" , + (reg <<2 ) &0xffffffff , value); err =saa_dsp_wait_bit (dev,SAA7135_DSP_RWSTATE_WRR );if (err <0 )return err;
drivers/media/platform/exynos4-is/fimc-isp.c +3 -1
@@ -311,8 +311,10 @@ static int fimc_isp_subdev_s_power(struct v4l2_subdev *sd, int on)if (on) { ret =pm_runtime_get_sync (&is->pdev->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put (&is->pdev->dev);return ret; + }set_bit (IS_ST_PWR_ON , &is->state); ret =fimc_is_start_firmware (is);
drivers/media/platform/exynos4-is/fimc-lite.c +1 -1
@@ -480,7 +480,7 @@ static int fimc_lite_open(struct file *file)set_bit (ST_FLITE_IN_USE , &fimc->state); ret =pm_runtime_get_sync (&fimc->pdev->dev);if (ret <0 ) - goto unlock; + goto err_pm; ret =v4l2_fh_open (file);if (ret <0 )
drivers/media/platform/exynos4-is/media-dev.c +4 -4
@@ -479,8 +479,10 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)return -ENXIO ; ret =pm_runtime_get_sync (fmd->pmf); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put (fmd->pmf);return ret; + } fmd->num_sensors =0 ;
@@ -1256,11 +1258,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd)if (IS_ERR (pctl->state_default))return PTR_ERR (pctl->state_default); +/* PINCTRL_STATE_IDLE is optional */ pctl->state_idle =pinctrl_lookup_state (pctl->pinctrl,PINCTRL_STATE_IDLE ); -if (IS_ERR (pctl->state_idle)) -return PTR_ERR (pctl->state_idle); -return 0 ; }
drivers/media/platform/exynos4-is/mipi-csis.c +3 -1
@@ -513,8 +513,10 @@ static int s5pcsis_s_stream(struct v4l2_subdev *sd, int enable)if (enable) {s5pcsis_clear_counters (state); ret =pm_runtime_get_sync (&state->pdev->dev); -if (ret && ret !=1 ) +if (ret && ret !=1 ) { +pm_runtime_put_noidle (&state->pdev->dev);return ret; + } }mutex_lock (&state->lock);
drivers/media/platform/mx2_emmaprp.c +5 -2
@@ -942,8 +942,11 @@ static int emmaprp_probe(struct platform_device *pdev)platform_set_drvdata (pdev, pcdev); irq =platform_get_irq (pdev,0 ); -if (irq <0 ) -return irq; +if (irq <0 ) { + ret = irq; + goto rel_vdev; + } + ret =devm_request_irq (&pdev->dev, irq, emmaprp_irq,0 ,dev_name (&pdev->dev), pcdev);if (ret)
drivers/media/platform/omap3isp/isp.c +4 -2
@@ -2304,8 +2304,10 @@ static int isp_probe(struct platform_device *pdev) mem =platform_get_resource (pdev,IORESOURCE_MEM , i); isp->mmio_base[map_idx] =devm_ioremap_resource (isp->dev, mem); -if (IS_ERR (isp->mmio_base[map_idx])) -return PTR_ERR (isp->mmio_base[map_idx]); +if (IS_ERR (isp->mmio_base[map_idx])) { + ret =PTR_ERR (isp->mmio_base[map_idx]); + goto error; + } } ret =isp_get_clocks (isp);
drivers/media/platform/qcom/venus/core.c +4 -1
@@ -236,8 +236,10 @@ static int venus_probe(struct platform_device *pdev) goto err_dev_unregister; ret =pm_runtime_put_sync (dev); -if (ret) +if (ret) { +pm_runtime_get_noresume (dev); goto err_dev_unregister; + }return 0 ;
@@ -248,6 +250,7 @@ static int venus_probe(struct platform_device *pdev) err_venus_shutdown:venus_shutdown (dev); err_runtime_disable: +pm_runtime_put_noidle (dev);pm_runtime_set_suspended (dev);pm_runtime_disable (dev);hfi_destroy (core);
drivers/media/platform/rcar-fcp.c +3 -1
@@ -106,8 +106,10 @@ int rcar_fcp_enable(struct rcar_fcp_device *fcp)return 0 ; ret =pm_runtime_get_sync (fcp->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (fcp->dev);return ret; + }return 0 ; }
drivers/media/platform/s3c-camif/camif-core.c +2 -3
@@ -475,7 +475,7 @@ static int s3c_camif_probe(struct platform_device *pdev) ret =camif_media_dev_init (camif);if (ret <0 ) - goto err_alloc; + goto err_pm; ret =camif_register_sensor (camif);if (ret <0 )
@@ -509,10 +509,9 @@ static int s3c_camif_probe(struct platform_device *pdev)media_device_unregister (&camif->media_dev);media_device_cleanup (&camif->media_dev);camif_unregister_media_entities (camif); -err_alloc: +err_pm:pm_runtime_put (dev);pm_runtime_disable (dev); -err_pm:camif_clk_put (camif); err_clk:s3c_camif_unregister_subdev (camif);
drivers/media/platform/s5p-mfc/s5p_mfc_pm.c +3 -1
@@ -83,8 +83,10 @@ int s5p_mfc_power_on(void)int i, ret =0 ; ret =pm_runtime_get_sync (pm->device); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (pm->device);return ret; + }/* clock control */ for (i =0 ; i < pm->num_clocks; i++) {
drivers/media/platform/sti/bdisp/bdisp-v4l2.c +1 -2
@@ -1367,7 +1367,7 @@ static int bdisp_probe(struct platform_device *pdev) ret =pm_runtime_get_sync (dev);if (ret <0 ) {dev_err (dev,"failed to set PM\n" ); - goto err_dbg; + goto err_pm; }/* Filters */
@@ -1395,7 +1395,6 @@ static int bdisp_probe(struct platform_device *pdev)bdisp_hw_free_filters (bdisp->dev); err_pm:pm_runtime_put (dev); -err_dbg:bdisp_debugfs_remove (bdisp); err_v4l2:v4l2_device_unregister (&bdisp->v4l2_dev);
drivers/media/platform/sti/delta/delta-v4l2.c +3 -1
@@ -970,8 +970,10 @@ static void delta_run_work(struct work_struct *work)/* enable the hardware */ if (!dec->pm) { ret =delta_get_sync (ctx); -if (ret) +if (ret) { +delta_put_autosuspend (ctx); goto err; + } }/* decode this access unit */
drivers/media/platform/sti/hva/hva-hw.c +3 -1
@@ -272,6 +272,7 @@ static unsigned long int hva_hw_get_ip_version(struct hva_dev *hva)if (pm_runtime_get_sync (dev) <0 ) {dev_err (dev,"%s failed to get pm_runtime\n" ,HVA_PREFIX ); +pm_runtime_put_noidle (dev);mutex_unlock (&hva->protect_mutex);return -EFAULT ; }
@@ -392,7 +393,7 @@ int hva_hw_probe(struct platform_device *pdev, struct hva_dev *hva) ret =pm_runtime_get_sync (dev);if (ret <0 ) {dev_err (dev,"%s failed to set PM\n" ,HVA_PREFIX ); - goto err_clk; + goto err_pm; }/* check IP hardware version */
@@ -557,6 +558,7 @@ void hva_hw_dump_regs(struct hva_dev *hva, struct seq_file *s)if (pm_runtime_get_sync (dev) <0 ) {seq_puts (s,"Cannot wake up IP\n" ); +pm_runtime_put_noidle (dev);mutex_unlock (&hva->protect_mutex);return ; }
drivers/media/platform/ti-vpe/vpe.c +2 -0
@@ -2470,6 +2470,8 @@ static int vpe_runtime_get(struct platform_device *pdev) r =pm_runtime_get_sync (&pdev->dev);WARN_ON (r <0 ); +if (r) +pm_runtime_put_noidle (&pdev->dev);return r <0 ? r :0 ; }
drivers/media/platform/vsp1/vsp1_drv.c +8 -3
@@ -549,7 +549,12 @@ int vsp1_device_get(struct vsp1_device *vsp1)int ret; ret =pm_runtime_get_sync (vsp1->dev); -return ret <0 ? ret :0 ; +if (ret <0 ) { +pm_runtime_put_noidle (vsp1->dev); +return ret; + } + +return 0 ; }/*
@@ -829,12 +834,12 @@ static int vsp1_probe(struct platform_device *pdev)/* Configure device parameters based on the version register. */ pm_runtime_enable (&pdev->dev); - ret =pm_runtime_get_sync (&pdev->dev); + ret =vsp1_device_get (vsp1);if (ret <0 ) goto done; vsp1->version =vsp1_read (vsp1,VI6_IP_VERSION ); -pm_runtime_put_sync (&pdev->dev); +vsp1_device_put (vsp1);for (i =0 ; i <ARRAY_SIZE (vsp1_device_infos); ++i) { if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) ==
drivers/media/rc/ati_remote.c +4 -0
@@ -845,6 +845,10 @@ static int ati_remote_probe(struct usb_interface *interface,err ("%s: endpoint_in message size==0? \n" , __func__);return -ENODEV ; } +if (!usb_endpoint_is_int_out (endpoint_out)) { +err ("%s: Unexpected endpoint_out\n" , __func__); +return -ENODEV ; + } ati_remote =kzalloc (sizeof (struct ati_remote ),GFP_KERNEL ); rc_dev =rc_allocate_device (RC_DRIVER_SCANCODE );
drivers/media/tuners/tuner-simple.c +3 -2
@@ -499,7 +499,7 @@ static int simple_radio_bandswitch(struct dvb_frontend *fe, u8 *buffer)case TUNER_TENA_9533_DI :case TUNER_YMEC_TVF_5533MF :tuner_dbg ("This tuner doesn't have FM. Most cards have a TEA5767 for FM\n" ); -return 0 ; +return -EINVAL ;case TUNER_PHILIPS_FM1216ME_MK3 :case TUNER_PHILIPS_FM1236_MK3 :case TUNER_PHILIPS_FMD1216ME_MK3 :
@@ -700,7 +700,8 @@ static int simple_set_radio_freq(struct dvb_frontend *fe,TUNER_RATIO_SELECT_50 ;/* 50 kHz step */ /* Bandswitch byte */ -simple_radio_bandswitch (fe, &buffer[0 ]); +if (simple_radio_bandswitch (fe, &buffer[0 ])) +return 0 ;/* Convert from 1/16 kHz V4L steps to 1/20 MHz (=50 kHz) PLL steps freq * (1 Mhz / 16000 V4L steps) * (20 PLL steps / 1 MHz) =
drivers/media/usb/uvc/uvc_entity.c +35 -0
@@ -78,10 +78,45 @@ static int uvc_mc_init_entity(struct uvc_video_chain *chain,int ret;if (UVC_ENTITY_TYPE (entity) !=UVC_TT_STREAMING ) { +u32 function; +v4l2_subdev_init (&entity->subdev, &uvc_subdev_ops);strlcpy (entity->subdev.name, entity->name,sizeof (entity->subdev.name)); +switch (UVC_ENTITY_TYPE (entity)) { +case UVC_VC_SELECTOR_UNIT : + function =MEDIA_ENT_F_VID_MUX ; +break ; +case UVC_VC_PROCESSING_UNIT : +case UVC_VC_EXTENSION_UNIT : +/* For lack of a better option. */ + function =MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER ; +break ; +case UVC_COMPOSITE_CONNECTOR : +case UVC_COMPONENT_CONNECTOR : + function =MEDIA_ENT_F_CONN_COMPOSITE ; +break ; +case UVC_SVIDEO_CONNECTOR : + function =MEDIA_ENT_F_CONN_SVIDEO ; +break ; +case UVC_ITT_CAMERA : + function =MEDIA_ENT_F_CAM_SENSOR ; +break ; +case UVC_TT_VENDOR_SPECIFIC : +case UVC_ITT_VENDOR_SPECIFIC : +case UVC_ITT_MEDIA_TRANSPORT_INPUT : +case UVC_OTT_VENDOR_SPECIFIC : +case UVC_OTT_DISPLAY : +case UVC_OTT_MEDIA_TRANSPORT_OUTPUT : +case UVC_EXTERNAL_VENDOR_SPECIFIC : +default : + function =MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN ; +break ; + } + + entity->subdev.entity.function = function; + ret =media_entity_pads_init (&entity->subdev.entity, entity->num_pads, entity->pads);
drivers/media/usb/uvc/uvc_v4l2.c +30 -0
@@ -252,11 +252,41 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,if (ret <0 ) goto done; +/* After the probe, update fmt with the values returned from +* negotiation with the device. +*/ +for (i =0 ; i < stream->nformats; ++i) { +if (probe->bFormatIndex == stream->format[i].index) { + format = &stream->format[i]; +break ; + } + } + +if (i == stream->nformats) { +uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFormatIndex %u\n" , + probe->bFormatIndex); +return -EINVAL ; + } + +for (i =0 ; i < format->nframes; ++i) { +if (probe->bFrameIndex == format->frame[i].bFrameIndex) { + frame = &format->frame[i]; +break ; + } + } + +if (i == format->nframes) { +uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFrameIndex %u\n" , + probe->bFrameIndex); +return -EINVAL ; + } + fmt->fmt.pix.width = frame->wWidth; fmt->fmt.pix.height = frame->wHeight; fmt->fmt.pix.field =V4L2_FIELD_NONE ; fmt->fmt.pix.bytesperline =uvc_v4l2_get_bytesperline (format, frame); fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize; + fmt->fmt.pix.pixelformat = format->fcc; fmt->fmt.pix.colorspace = format->colorspace; fmt->fmt.pix.priv =0 ;
drivers/memory/fsl-corenet-cf.c +2 -4
@@ -215,10 +215,8 @@ static int ccf_probe(struct platform_device *pdev)dev_set_drvdata (&pdev->dev, ccf); irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (&pdev->dev,"%s: no irq\n" , __func__); -return -ENXIO ; - } +if (irq <0 ) +return irq; ret =devm_request_irq (&pdev->dev, irq, ccf_irq,0 , pdev->name, ccf);if (ret) {
drivers/memory/omap-gpmc.c +2 -2
@@ -951,7 +951,7 @@ static int gpmc_cs_remap(int cs, u32 base)int ret;u32 old_base, size; -if (cs > gpmc_cs_num) { +if (cs >= gpmc_cs_num) {pr_err ("%s: requested chip-select is disabled\n" , __func__);return -ENODEV ; }
@@ -986,7 +986,7 @@ int gpmc_cs_request(int cs, unsigned long size, unsigned long *base)struct resource *res = &gpmc->mem;int r =-1 ; -if (cs > gpmc_cs_num) { +if (cs >= gpmc_cs_num) {pr_err ("%s: requested chip-select is disabled\n" , __func__);return -ENODEV ; }
drivers/mfd/rtsx_pcr.c +3 -1
@@ -1268,12 +1268,14 @@ static int rtsx_pci_probe(struct pci_dev *pcidev, ret =mfd_add_devices (&pcidev->dev, pcr->id, rtsx_pcr_cells,ARRAY_SIZE (rtsx_pcr_cells),NULL ,0 ,NULL );if (ret <0 ) - goto disable_irq; + goto free_slots;schedule_delayed_work (&pcr->idle_work,msecs_to_jiffies (200 ));return 0 ; +free_slots: +kfree (pcr->slots); disable_irq:free_irq (pcr->irq, (void *)pcr); disable_msi:
drivers/mfd/sm501.c +7 -1
@@ -1425,8 +1425,14 @@ static int sm501_plat_probe(struct platform_device *dev) goto err_claim; } -return sm501_init_dev (sm); + ret =sm501_init_dev (sm); +if (ret) + goto err_unmap; + +return 0 ; + err_unmap: +iounmap (sm->regs); err_claim:release_resource (sm->regs_claim);kfree (sm->regs_claim);
drivers/misc/eeprom/at25.c +1 -1
@@ -355,7 +355,7 @@ static int at25_probe(struct spi_device *spi) at25->nvmem_config.reg_read = at25_ee_read; at25->nvmem_config.reg_write = at25_ee_write; at25->nvmem_config.priv = at25; - at25->nvmem_config.stride =4 ; + at25->nvmem_config.stride =1 ; at25->nvmem_config.word_size =1 ; at25->nvmem_config.size = chip.byte_len;
drivers/misc/mic/scif/scif_rma.c +2 -2
@@ -1404,6 +1404,8 @@ int __scif_pin_pages(void *addr, size_t len, int *out_prot, NULL);up_write (&mm->mmap_sem);if (nr_pages != pinned_pages->nr_pages) { +if (pinned_pages->nr_pages <0 ) + pinned_pages->nr_pages =0 ;if (try_upgrade) {if (ulimit) __scif_dec_pinned_vm_lock(mm,
@@ -1424,7 +1426,6 @@ int __scif_pin_pages(void *addr, size_t len, int *out_prot,if (pinned_pages->nr_pages < nr_pages) { err = -EFAULT ; - pinned_pages->nr_pages = nr_pages; goto dec_pinned; }
@@ -1437,7 +1438,6 @@ int __scif_pin_pages(void *addr, size_t len, int *out_prot,__scif_dec_pinned_vm_lock (mm, nr_pages,0 );/* Something went wrong! Rollback */ error_unmap: - pinned_pages->nr_pages = nr_pages;scif_destroy_pinned_pages (pinned_pages); *pages =NULL ; dev_dbg(scif_info.mdev.this_device,
drivers/misc/mic/vop/vop_main.c +1 -1
@@ -301,7 +301,7 @@ static struct virtqueue *vop_find_vq(struct virtio_device *dev,/* First assign the vring's allocated in host memory */ vqconfig =_vop_vq_config (vdev->desc) + index;memcpy_fromio (&config, vqconfig,sizeof (config)); - _vr_size =vring_size (le16_to_cpu (config.num),MIC_VIRTIO_RING_ALIGN ); + _vr_size =round_up (vring_size (le16_to_cpu (config.num),MIC_VIRTIO_RING_ALIGN ),4 ); vr_size =PAGE_ALIGN (_vr_size +sizeof (struct _mic_vring_info )); va = vpdev->hw_ops->ioremap (vpdev,le64_to_cpu (config.address), vr_size);
drivers/misc/mic/vop/vop_vringh.c +16 -8
@@ -308,7 +308,7 @@ static int vop_virtio_add_device(struct vop_vdev *vdev, num =le16_to_cpu (vqconfig[i].num);mutex_init (&vvr->vr_mutex); - vr_size =PAGE_ALIGN (vring_size (num,MIC_VIRTIO_RING_ALIGN ) + + vr_size =PAGE_ALIGN (round_up (vring_size (num,MIC_VIRTIO_RING_ALIGN ),4 ) +sizeof (struct _mic_vring_info )); vr->va = (void *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
@@ -320,7 +320,7 @@ static int vop_virtio_add_device(struct vop_vdev *vdev, goto err; } vr->len = vr_size; - vr->info = vr->va +vring_size (num,MIC_VIRTIO_RING_ALIGN ); + vr->info = vr->va +round_up (vring_size (num,MIC_VIRTIO_RING_ALIGN ),4 ); vr->info->magic =cpu_to_le32 (MIC_MAGIC + vdev->virtio_id + i); vr_addr =dma_map_single (&vpdev->dev, vr->va, vr_size,DMA_BIDIRECTIONAL );
@@ -611,6 +611,7 @@ static int vop_virtio_copy_from_user(struct vop_vdev *vdev, void __user *ubuf,size_t partlen;bool dma =VOP_USE_DMA ;int err =0 ; +size_t offset =0 ;if (daddr & (dma_alignment -1 )) { vdev->tx_dst_unaligned += len;
@@ -659,13 +660,20 @@ static int vop_virtio_copy_from_user(struct vop_vdev *vdev, void __user *ubuf,* We are copying to IO below and should ideally use something * like copy_from_user_toio(..) if it existed. */ -if (copy_from_user ((void __force *)dbuf, ubuf, len)) { - err = -EFAULT ; -dev_err (vop_dev (vdev),"%s %d err %d\n" , - __func__, __LINE__, err); - goto err; +while (len) { + partlen =min_t (size_t, len,VOP_INT_DMA_BUF_SIZE ); + +if (copy_from_user (vvr->buf, ubuf + offset, partlen)) { + err = -EFAULT ; +dev_err (vop_dev (vdev),"%s %d err %d\n" , + __func__, __LINE__, err); + goto err; + } +memcpy_toio (dbuf + offset, vvr->buf, partlen); + offset += partlen; + vdev->out_bytes += partlen; + len -= partlen; } - vdev->out_bytes += len; err =0 ; err: vpdev->hw_ops->iounmap (vpdev, dbuf);
drivers/misc/vmw_vmci/vmci_queue_pair.c +6 -4
@@ -758,8 +758,9 @@ static int qp_host_get_user_memory(u64 produce_uva,if (retval < (int )produce_q->kernel_if->num_pages) {pr_debug ("get_user_pages_fast(produce) failed (retval=%d)" , retval); -qp_release_pages (produce_q->kernel_if->u.h.header_page, - retval, false); +if (retval >0 ) +qp_release_pages (produce_q->kernel_if->u.h.header_page, + retval, false); err =VMCI_ERROR_NO_MEM ; goto out; }
@@ -770,8 +771,9 @@ static int qp_host_get_user_memory(u64 produce_uva,if (retval < (int )consume_q->kernel_if->num_pages) {pr_debug ("get_user_pages_fast(consume) failed (retval=%d)" , retval); -qp_release_pages (consume_q->kernel_if->u.h.header_page, - retval, false); +if (retval >0 ) +qp_release_pages (consume_q->kernel_if->u.h.header_page, + retval, false);qp_release_pages (produce_q->kernel_if->u.h.header_page, produce_q->kernel_if->num_pages, false); err =VMCI_ERROR_NO_MEM ;
drivers/mmc/core/sdio_cis.c +3 -0
@@ -30,6 +30,9 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func,unsigned i, nr_strings;char **buffer, *string; +if (size <2 ) +return 0 ; +/* Find all null-terminated (including zero length) strings in the TPLLV1_INFO field. Trailing garbage is ignored. */ buf +=2 ;
drivers/mtd/lpddr/lpddr2_nvm.c +19 -16
@@ -408,6 +408,17 @@ static int lpddr2_nvm_lock(struct mtd_info *mtd, loff_t start_add,return lpddr2_nvm_do_block_op (mtd, start_add, len,LPDDR2_NVM_LOCK ); } +static const struct mtd_info lpddr2_nvm_mtd_info = { + .type =MTD_RAM , + .writesize =1 , + .flags = (MTD_CAP_NVRAM |MTD_POWERUP_LOCK ), + ._read = lpddr2_nvm_read, + ._write = lpddr2_nvm_write, + ._erase = lpddr2_nvm_erase, + ._unlock = lpddr2_nvm_unlock, + ._lock = lpddr2_nvm_lock, +}; +/* * lpddr2_nvm driver probe method */
@@ -448,6 +459,7 @@ static int lpddr2_nvm_probe(struct platform_device *pdev) .pfow_base = OW_BASE_ADDRESS, .fldrv_priv = pcm_data, }; +if (IS_ERR (map->virt))return PTR_ERR (map->virt);
@@ -459,22 +471,13 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)return PTR_ERR (pcm_data->ctl_regs);/* Populate mtd_info data structure */ - *mtd = (struct mtd_info ) { - .dev = { .parent = &pdev->dev }, - .name = pdev->dev.init_name, - .type =MTD_RAM , - .priv = map, - .size =resource_size (add_range), - .erasesize =ERASE_BLOCKSIZE * pcm_data->bus_width, - .writesize =1 , - .writebufsize =WRITE_BUFFSIZE * pcm_data->bus_width, - .flags = (MTD_CAP_NVRAM |MTD_POWERUP_LOCK ), - ._read = lpddr2_nvm_read, - ._write = lpddr2_nvm_write, - ._erase = lpddr2_nvm_erase, - ._unlock = lpddr2_nvm_unlock, - ._lock = lpddr2_nvm_lock, - }; + *mtd = lpddr2_nvm_mtd_info; + mtd->dev.parent = &pdev->dev; + mtd->name = pdev->dev.init_name; + mtd->priv = map; + mtd->size =resource_size (add_range); + mtd->erasesize =ERASE_BLOCKSIZE * pcm_data->bus_width; + mtd->writebufsize =WRITE_BUFFSIZE * pcm_data->bus_width;/* Verify the presence of the device looking for PFOW string */ if (!lpddr2_nvm_pfow_present (map)) {
drivers/mtd/mtdoops.c +6 -5
@@ -313,12 +313,13 @@ static void mtdoops_do_dump(struct kmsg_dumper *dumper,kmsg_dump_get_buffer (dumper, true, cxt->oops_buf +MTDOOPS_HEADER_SIZE , record_size -MTDOOPS_HEADER_SIZE ,NULL ); -/* Panics must be written immediately */ -if (reason !=KMSG_DUMP_OOPS ) +if (reason !=KMSG_DUMP_OOPS ) { +/* Panics must be written immediately */ mtdoops_write (cxt,1 ); - -/* For other cases, schedule work to write it "nicely" */ -schedule_work (&cxt->work_write); + }else { +/* For other cases, schedule work to write it "nicely" */ +schedule_work (&cxt->work_write); + } }static void mtdoops_notify_add (struct mtd_info *mtd)
drivers/net/can/flexcan.c +28 -6
@@ -1055,18 +1055,23 @@ static int flexcan_chip_start(struct net_device *dev)return err; } -/* flexcan_chip_stop +/* __flexcan_chip_stop * -* this functions is entered with clocks enabled +* this function is entered with clocks enabled */ -static void flexcan_chip_stop (struct net_device *dev) +static int __flexcan_chip_stop (struct net_device *dev,bool disable_on_error) {struct flexcan_priv *priv =netdev_priv (dev);struct flexcan_regs __iomem *regs = priv->regs; +int err;/* freeze + disable module */ -flexcan_chip_freeze (priv); -flexcan_chip_disable (priv); + err =flexcan_chip_freeze (priv); +if (err && !disable_on_error) +return err; + err =flexcan_chip_disable (priv); +if (err && !disable_on_error) + goto out_chip_unfreeze;/* Disable all interrupts */ flexcan_write (0 , ®s->imask2);
@@ -1076,6 +1081,23 @@ static void flexcan_chip_stop(struct net_device *dev)flexcan_transceiver_disable (priv); priv->can.state =CAN_STATE_STOPPED ; + +return 0 ; + + out_chip_unfreeze: +flexcan_chip_unfreeze (priv); + +return err; +} + +static inline int flexcan_chip_stop_disable_on_error (struct net_device *dev) +{ +return __flexcan_chip_stop (dev, true); +} + +static inline int flexcan_chip_stop (struct net_device *dev) +{ +return __flexcan_chip_stop (dev, false); }static int flexcan_open (struct net_device *dev)
@@ -1129,7 +1151,7 @@ static int flexcan_close(struct net_device *dev)netif_stop_queue (dev);can_rx_offload_disable (&priv->offload); -flexcan_chip_stop (dev); +flexcan_chip_stop_disable_on_error (dev);free_irq (dev->irq, dev);clk_disable_unprepare (priv->clk_per);
drivers/net/ethernet/cisco/enic/enic.h +1 -0
@@ -168,6 +168,7 @@ struct enic {u16 num_vfs;#endif spinlock_t enic_api_lock; +bool enic_api_busy;struct enic_port_profile *pp;/* work queue cache line section */
drivers/net/ethernet/cisco/enic/enic_api.c +6 -0
@@ -34,6 +34,12 @@ int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf,struct vnic_dev *vdev = enic->vdev;spin_lock (&enic->enic_api_lock); +while (enic->enic_api_busy) { +spin_unlock (&enic->enic_api_lock); +cpu_relax (); +spin_lock (&enic->enic_api_lock); + } +spin_lock_bh (&enic->devcmd_lock);vnic_dev_cmd_proxy_by_index_start (vdev, vf);
drivers/net/ethernet/cisco/enic/enic_main.c +21 -6
@@ -2101,8 +2101,6 @@ static int enic_dev_wait(struct vnic_dev *vdev,int done;int err; -BUG_ON (in_interrupt ()); - err =start (vdev, arg);if (err)return err;
@@ -2279,6 +2277,13 @@ static int enic_set_rss_nic_cfg(struct enic *enic) rss_hash_bits, rss_base_cpu, rss_enable); } +static void enic_set_api_busy (struct enic *enic,bool busy) +{ +spin_lock (&enic->enic_api_lock); + enic->enic_api_busy = busy; +spin_unlock (&enic->enic_api_lock); +} +static void enic_reset (struct work_struct *work) { struct enic *enic = container_of(work, struct enic, reset);
@@ -2288,7 +2293,9 @@ static void enic_reset(struct work_struct *work)rtnl_lock (); -spin_lock (&enic->enic_api_lock); +/* Stop any activity from infiniband */ +enic_set_api_busy (enic, true); +enic_stop (enic->netdev);enic_dev_soft_reset (enic);enic_reset_addr_lists (enic);
@@ -2296,7 +2303,10 @@ static void enic_reset(struct work_struct *work)enic_set_rss_nic_cfg (enic);enic_dev_set_ig_vlan_rewrite_mode (enic);enic_open (enic->netdev); -spin_unlock (&enic->enic_api_lock); + +/* Allow infiniband to fiddle with the device again */ +enic_set_api_busy (enic, false); +call_netdevice_notifiers (NETDEV_REBOOT , enic->netdev);rtnl_unlock ();
@@ -2308,7 +2318,9 @@ static void enic_tx_hang_reset(struct work_struct *work)rtnl_lock (); -spin_lock (&enic->enic_api_lock); +/* Stop any activity from infiniband */ +enic_set_api_busy (enic, true); +enic_dev_hang_notify (enic);enic_stop (enic->netdev);enic_dev_hang_reset (enic);
@@ -2317,7 +2329,10 @@ static void enic_tx_hang_reset(struct work_struct *work)enic_set_rss_nic_cfg (enic);enic_dev_set_ig_vlan_rewrite_mode (enic);enic_open (enic->netdev); -spin_unlock (&enic->enic_api_lock); + +/* Allow infiniband to fiddle with the device again */ +enic_set_api_busy (enic, false); +call_netdevice_notifiers (NETDEV_REBOOT , enic->netdev);rtnl_unlock ();
drivers/net/ethernet/ibm/ibmveth.c +15 -4
@@ -1330,6 +1330,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)int offset =ibmveth_rxq_frame_offset (adapter);int csum_good =ibmveth_rxq_csum_good (adapter);int lrg_pkt =ibmveth_rxq_large_packet (adapter); +__sum16 iph_check =0 ; skb =ibmveth_rxq_get_buffer (adapter);
@@ -1366,16 +1367,26 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)skb_put (skb, length); skb->protocol =eth_type_trans (skb, netdev); -if (csum_good) { - skb->ip_summed =CHECKSUM_UNNECESSARY ; -ibmveth_rx_csum_helper (skb, adapter); +/* PHYP without PLSO support places a -1 in the ip +* checksum for large send frames. +*/ +if (skb->protocol ==cpu_to_be16 (ETH_P_IP )) { +struct iphdr *iph = (struct iphdr *)skb->data; + + iph_check = iph->check; } -if (length > netdev->mtu +ETH_HLEN ) { +if ((length > netdev->mtu +ETH_HLEN ) || + lrg_pkt || iph_check ==0xffff ) {ibmveth_rx_mss_helper (skb, mss, lrg_pkt); adapter->rx_large_packets++; } +if (csum_good) { + skb->ip_summed =CHECKSUM_UNNECESSARY ; +ibmveth_rx_csum_helper (skb, adapter); + } +napi_gro_receive (napi, skb);/* send it up */ netdev->stats.rx_packets++;
drivers/net/ethernet/korina.c +2 -1
@@ -1188,7 +1188,7 @@ static int korina_probe(struct platform_device *pdev)return rc; probe_err_register: -kfree (lp->td_ring); +kfree ((struct dma_desc *)KSEG0ADDR (lp->td_ring)); probe_err_td_ring:iounmap (lp->tx_dma_regs); probe_err_dma_tx:
@@ -1208,6 +1208,7 @@ static int korina_remove(struct platform_device *pdev)iounmap (lp->eth_regs);iounmap (lp->rx_dma_regs);iounmap (lp->tx_dma_regs); +kfree ((struct dma_desc *)KSEG0ADDR (lp->td_ring));unregister_netdev (bif->dev);free_netdev (bif->dev);
drivers/net/ethernet/mellanox/mlx4/en_rx.c +3 -0
@@ -948,6 +948,9 @@ int mlx4_en_poll_rx_cq(struct napi_struct *napi, int budget)bool clean_complete = true;int done; +if (!budget) +return 0 ; +if (priv->tx_ring_num[TX_XDP ]) { xdp_tx_cq = priv->tx_cq[TX_XDP ][cq->ring];if (xdp_tx_cq->xdp_busy) {
drivers/net/ethernet/mellanox/mlx4/en_tx.c +1 -1
@@ -343,7 +343,7 @@ u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv, .dma = tx_info->map0_dma, }; -if (!mlx4_en_rx_recycle (ring->recycle_ring, &frame)) { +if (!napi_mode || !mlx4_en_rx_recycle (ring->recycle_ring, &frame)) {dma_unmap_page (priv->ddev, tx_info->map0_dma,PAGE_SIZE , priv->dma_dir);put_page (tx_info->page);
drivers/net/ethernet/realtek/r8169.c +56 -52
126 lines not on this page · raw message
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1301,6 +1301,7 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)}, /* Fibocom NL678 series */ {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ + {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) *//* 4. Gobi 1000 devices */ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
drivers/net/wan/hdlc.c +9 -1
@@ -49,7 +49,15 @@ static struct hdlc_proto *first_proto;static int hdlc_rcv (struct sk_buff *skb,struct net_device *dev,struct packet_type *p,struct net_device *orig_dev) { -struct hdlc_device *hdlc =dev_to_hdlc (dev); +struct hdlc_device *hdlc; + +/* First make sure "dev" is an HDLC device */ +if (!(dev->priv_flags &IFF_WAN_HDLC )) { +kfree_skb (skb); +return NET_RX_SUCCESS ; + } + + hdlc =dev_to_hdlc (dev);if (!net_eq (dev_net (dev), &init_net)) {kfree_skb (skb);
drivers/net/wan/hdlc_raw_eth.c +1 -0
@@ -102,6 +102,7 @@ static int raw_eth_ioctl(struct net_device *dev, struct ifreq *ifr) old_qlen = dev->tx_queue_len;ether_setup (dev); dev->tx_queue_len = old_qlen; + dev->priv_flags &= ~IFF_TX_SKB_SHARING ;eth_hw_addr_random (dev);call_netdevice_notifiers (NETDEV_POST_TYPE_CHANGE , dev);netif_dormant_off (dev);
drivers/net/wireless/ath/ath10k/htt_rx.c +8 -0
@@ -100,6 +100,14 @@ static int __ath10k_htt_rx_ring_fill_n(struct ath10k_htt *htt, int num)BUILD_BUG_ON (HTT_RX_RING_FILL_LEVEL >=HTT_RX_RING_SIZE /2 ); idx =__le32_to_cpu (*htt->rx_ring.alloc_idx.vaddr); + +if (idx <0 || idx >= htt->rx_ring.size) { +ath10k_err (htt->ar,"rx ring index is not valid, firmware malfunctioning?\n" ); + idx &= htt->rx_ring.size_mask; + ret = -ENOMEM ; + goto fail; + } +while (num >0 ) { skb =dev_alloc_skb (HTT_RX_BUF_SIZE +HTT_RX_DESC_ALIGN );if (!skb) {
drivers/net/wireless/ath/ath10k/mac.c +1 -1
@@ -6718,7 +6718,7 @@ ath10k_mac_update_bss_chan_survey(struct ath10k *ar, struct ieee80211_channel *channel) {int ret; -enum wmi_bss_survey_req_type type =WMI_BSS_SURVEY_REQ_TYPE_READ_CLEAR ; +enum wmi_bss_survey_req_type type =WMI_BSS_SURVEY_REQ_TYPE_READ ;lockdep_assert_held (&ar->conf_mutex);
drivers/net/wireless/ath/ath6kl/main.c +3 -0
@@ -430,6 +430,9 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,ath6kl_dbg (ATH6KL_DBG_TRC ,"new station %pM aid=%d\n" , mac_addr, aid); +if (aid <1 || aid >AP_MAX_NUM_STA ) +return ; +if (assoc_req_len >sizeof (struct ieee80211_hdr_3addr )) {struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) assoc_info;
drivers/net/wireless/ath/ath6kl/wmi.c +5 -0
@@ -2648,6 +2648,11 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,return -EINVAL ; } +if (tsid >=16 ) { +ath6kl_err ("invalid tsid: %d\n" , tsid); +return -EINVAL ; + } + skb =ath6kl_wmi_get_new_buf (sizeof (*cmd));if (!skb)return -ENOMEM ;
drivers/net/wireless/ath/ath9k/hif_usb.c +19 -0
@@ -447,10 +447,19 @@ static void hif_usb_stop(void *hif_handle)spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);/* The pending URBs have to be canceled. */ +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_pending, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb); +list_del (&tx_buf->list); +usb_free_urb (tx_buf->urb); +kfree (tx_buf->buf); +kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_anchored_urbs (&hif_dev->mgmt_submitted); }
@@ -760,27 +769,37 @@ static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)struct tx_buf *tx_buf =NULL , *tx_buf_tmp =NULL ;unsigned long flags; +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_buf, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb);list_del (&tx_buf->list);usb_free_urb (tx_buf->urb);kfree (tx_buf->buf);kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); hif_dev->tx.flags |=HIF_USB_TX_FLUSH ;spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_pending, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb);list_del (&tx_buf->list);usb_free_urb (tx_buf->urb);kfree (tx_buf->buf);kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_anchored_urbs (&hif_dev->mgmt_submitted); }
drivers/net/wireless/ath/ath9k/htc_hst.c +2 -0
@@ -342,6 +342,8 @@ void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,if (skb) { htc_hdr = (struct htc_frame_hdr *) skb->data; +if (htc_hdr->endpoint_id >=ARRAY_SIZE (htc_handle->endpoint)) + goto ret; endpoint = &htc_handle->endpoint[htc_hdr->endpoint_id];skb_pull (skb,sizeof (struct htc_frame_hdr ));
drivers/net/wireless/ath/wcn36xx/main.c +1 -1
@@ -162,7 +162,7 @@ static struct ieee80211_supported_band wcn_band_5ghz = { .ampdu_density = IEEE80211_HT_MPDU_DENSITY_16, .mcs = { .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, - .rx_highest =cpu_to_le16 (72 ), + .rx_highest =cpu_to_le16 (150 ), .tx_params = IEEE80211_HT_MCS_TX_DEFINED, } }
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +1 -1
@@ -318,7 +318,7 @@ static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb, ret =brcmf_proto_hdrpull (drvr, true, skb, ifp);if (ret || !(*ifp) || !(*ifp)->ndev) { -if (ret != -ENODATA && *ifp) +if (ret != -ENODATA && *ifp && (*ifp)->ndev) (*ifp)->ndev->stats.rx_errors++;brcmu_pkt_buf_free_skb (skb);return -ENODATA ;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c +2 -0
@@ -1538,6 +1538,8 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)BRCMF_TX_IOCTL_MAX_MSG_SIZE , msgbuf->ioctbuf, msgbuf->ioctbuf_handle); +if (msgbuf->txflow_wq) +destroy_workqueue (msgbuf->txflow_wq);kfree (msgbuf); }return -ENOMEM ;
drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c +3 -1
@@ -5090,8 +5090,10 @@ bool wlc_phy_attach_lcnphy(struct brcms_phy *pi) pi->pi_fptr.radioloftget = wlc_lcnphy_get_radio_loft; pi->pi_fptr.detach = wlc_phy_detach_lcnphy; -if (!wlc_phy_txpwr_srom_read_lcnphy (pi)) +if (!wlc_phy_txpwr_srom_read_lcnphy (pi)) { +kfree (pi->u.pi_lcnphy);return false; + }if (LCNREV_IS (pi->pubpi.phy_rev,1 )) {if (pi_lcn->lcnphy_tempsense_option ==3 ) {
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +6 -3
@@ -3198,9 +3198,12 @@ static int iwl_mvm_send_aux_roc_cmd(struct iwl_mvm *mvm, aux_roc_req.apply_time_max_delay =cpu_to_le32 (delay);IWL_DEBUG_TE (mvm, -"ROC: Requesting to remain on channel %u for %ums (requested = %ums, max_delay = %ums, dtim_interval = %ums)\n" , - channel->hw_value, req_dur, duration, delay, - dtim_interval); +"ROC: Requesting to remain on channel %u for %ums\n" , + channel->hw_value, req_dur); +IWL_DEBUG_TE (mvm, +"\t(requested = %ums, max_delay = %ums, dtim_interval = %ums)\n" , + duration, delay, dtim_interval); +/* Set the node address */ memcpy (aux_roc_req.node_addr, vif->addr,ETH_ALEN );
drivers/net/wireless/marvell/mwifiex/scan.c +1 -1
@@ -1890,7 +1890,7 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info, chan,CFG80211_BSS_FTYPE_UNKNOWN , bssid, timestamp, cap_info_bitmap, beacon_period, - ie_buf, ie_len, rssi, GFP_KERNEL); + ie_buf, ie_len, rssi, GFP_ATOMIC);if (bss) { bss_priv = (struct mwifiex_bss_priv *)bss->priv; bss_priv->band = band;
drivers/net/wireless/marvell/mwifiex/sdio.c +2 -0
@@ -1973,6 +1973,8 @@ static int mwifiex_alloc_sdio_mpa_buffers(struct mwifiex_adapter *adapter,kfree (card->mpa_rx.buf); card->mpa_tx.buf_size =0 ; card->mpa_rx.buf_size =0 ; + card->mpa_tx.buf =NULL ; + card->mpa_rx.buf =NULL ; }return ret;
drivers/net/wireless/marvell/mwifiex/usb.c +2 -1
@@ -1335,7 +1335,8 @@ static void mwifiex_usb_cleanup_tx_aggr(struct mwifiex_adapter *adapter) skb_dequeue(&port->tx_aggr.aggr_list)))mwifiex_write_data_complete (adapter, skb_tmp,0 ,-1 ); -del_timer_sync (&port->tx_aggr.timer_cnxt.hold_timer); +if (port->tx_aggr.timer_cnxt.hold_timer.function) +del_timer_sync (&port->tx_aggr.timer_cnxt.hold_timer); port->tx_aggr.timer_cnxt.is_hold_timer_set = false; port->tx_aggr.timer_cnxt.hold_tmo_msecs =0 ; }
drivers/net/wireless/quantenna/qtnfmac/commands.c +2 -0
@@ -796,6 +796,7 @@ int qtnf_cmd_send_del_intf(struct qtnf_vif *vif)default :pr_warn ("VIF%u.%u: unsupported iftype %d\n" , vif->mac->macid, vif->vifid, vif->wdev.iftype); +dev_kfree_skb (cmd_skb); ret = -EINVAL ; goto out; }
@@ -1882,6 +1883,7 @@ int qtnf_cmd_send_change_sta(struct qtnf_vif *vif, const u8 *mac,break ;default :pr_err ("unsupported iftype %d\n" , vif->wdev.iftype); +dev_kfree_skb (cmd_skb); ret = -EINVAL ; goto out; }
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +9 -1
@@ -5453,7 +5453,6 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw) ret =usb_submit_urb (urb,GFP_KERNEL );if (ret) {usb_unanchor_urb (urb); -usb_free_urb (urb); goto error; }
@@ -5462,6 +5461,7 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)rtl8xxxu_write32 (priv,REG_USB_HIMR , val32); error: +usb_free_urb (urb);return ret; }
@@ -5787,6 +5787,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)struct rtl8xxxu_priv *priv = hw->priv;struct rtl8xxxu_rx_urb *rx_urb;struct rtl8xxxu_tx_urb *tx_urb; +struct sk_buff *skb;unsigned long flags;int ret, i;
@@ -5837,6 +5838,13 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw) rx_urb->hw = hw; ret =rtl8xxxu_submit_rx_urb (priv, rx_urb); +if (ret) { +if (ret != -ENOMEM ) { + skb = (struct sk_buff *)rx_urb->urb.context; +dev_kfree_skb (skb); + } +rtl8xxxu_queue_rx_urb (priv, rx_urb); + } } exit:/*
drivers/ntb/hw/amd/ntb_hw_amd.c +1 -0
@@ -1032,6 +1032,7 @@ static int amd_ntb_init_pci(struct amd_ntb_dev *ndev, err_dma_mask:pci_clear_master (pdev); +pci_release_regions (pdev); err_pci_regions:pci_disable_device (pdev); err_pci_enable:
drivers/nvme/target/core.c +2 -1
@@ -611,7 +611,8 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)* in case a host died before it enabled the controller. Hence, simply * reset the keep alive timer when the controller is enabled. */ -mod_delayed_work (system_wq, &ctrl->ka_work, ctrl->kato *HZ ); +if (ctrl->kato) +mod_delayed_work (system_wq, &ctrl->ka_work, ctrl->kato *HZ ); }static void nvmet_clear_ctrl (struct nvmet_ctrl *ctrl)
drivers/pci/host/pcie-iproc-msi.c +9 -4
@@ -217,15 +217,20 @@ static int iproc_msi_irq_set_affinity(struct irq_data *data,struct iproc_msi *msi =irq_data_get_irq_chip_data (data);int target_cpu =cpumask_first (mask);int curr_cpu; +int ret; curr_cpu =hwirq_to_cpu (msi, data->hwirq);if (curr_cpu == target_cpu) -return IRQ_SET_MASK_OK_DONE ; + ret =IRQ_SET_MASK_OK_DONE ; +else { +/* steer MSI to the target CPU */ + data->hwirq =hwirq_to_canonical_hwirq (msi, data->hwirq) + target_cpu; + ret =IRQ_SET_MASK_OK ; + } -/* steer MSI to the target CPU */ - data->hwirq =hwirq_to_canonical_hwirq (msi, data->hwirq) + target_cpu; +irq_data_update_effective_affinity (data,cpumask_of (target_cpu)); -return IRQ_SET_MASK_OK ; +return ret; } static void iproc_msi_irq_compose_msi_msg(struct irq_data *data,
drivers/perf/xgene_pmu.c +17 -15
@@ -1474,17 +1474,6 @@ static char *xgene_pmu_dev_name(struct device *dev, u32 type, int id) }#if defined(CONFIG_ACPI ) -static int acpi_pmu_dev_add_resource (struct acpi_resource *ares,void *data) -{ -struct resource *res = data; - -if (ares->type ==ACPI_RESOURCE_TYPE_FIXED_MEMORY32 ) -acpi_dev_resource_memory (ares, res); - -/* Always tell the ACPI core to skip this resource */ -return 1 ; -} -static struct xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf (struct xgene_pmu *xgene_pmu,struct acpi_device *adev,u32 type)
@@ -1496,6 +1485,7 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,struct hw_pmu_info *inf;void __iomem *dev_csr;struct resource res; +struct resource_entry *rentry;int enable_bit;int rc;
@@ -1504,11 +1494,23 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,return NULL ;INIT_LIST_HEAD (&resource_list); - rc =acpi_dev_get_resources (adev, &resource_list, - acpi_pmu_dev_add_resource, &res); + rc =acpi_dev_get_resources (adev, &resource_list,NULL ,NULL ); +if (rc <=0 ) { +dev_err (dev,"PMU type %d: No resources found\n" , type); +return NULL ; + } + +list_for_each_entry (rentry, &resource_list, node) { +if (resource_type (rentry->res) ==IORESOURCE_MEM ) { + res = *rentry->res; + rentry =NULL ; +break ; + } + }acpi_dev_free_resource_list (&resource_list); -if (rc <0 ) { -dev_err (dev,"PMU type %d: No resource address found\n" , type); + +if (rentry) { +dev_err (dev,"PMU type %d: No memory resource found\n" , type);return NULL ; }
drivers/pinctrl/pinctrl-mcp23s08.c +12 -12
@@ -119,7 +119,7 @@ static const struct regmap_config mcp23x08_regmap = { .max_register = MCP_OLAT, }; -static const struct reg_default mcp23x16_defaults[] = { +static const struct reg_default mcp23x17_defaults[] = { {.reg =MCP_IODIR <<1 , .def =0xffff }, {.reg =MCP_IPOL <<1 , .def =0x0000 }, {.reg =MCP_GPINTEN <<1 , .def =0x0000 },
@@ -130,23 +130,23 @@ static const struct reg_default mcp23x16_defaults[] = { {.reg = MCP_OLAT << 1, .def = 0x0000}, }; -static const struct regmap_range mcp23x16_volatile_range = { +static const struct regmap_range mcp23x17_volatile_range = { .range_min =MCP_INTF <<1 , .range_max =MCP_GPIO <<1 , }; -static const struct regmap_access_table mcp23x16_volatile_table = { - .yes_ranges = &mcp23x16_volatile_range, +static const struct regmap_access_table mcp23x17_volatile_table = { + .yes_ranges = &mcp23x17_volatile_range, .n_yes_ranges =1 , }; -static const struct regmap_range mcp23x16_precious_range = { - .range_min =MCP_GPIO <<1 , +static const struct regmap_range mcp23x17_precious_range = { + .range_min =MCP_INTCAP <<1 , .range_max =MCP_GPIO <<1 , }; -static const struct regmap_access_table mcp23x16_precious_table = { - .yes_ranges = &mcp23x16_precious_range, +static const struct regmap_access_table mcp23x17_precious_table = { + .yes_ranges = &mcp23x17_precious_range, .n_yes_ranges =1 , };
@@ -156,10 +156,10 @@ static const struct regmap_config mcp23x17_regmap = { .reg_stride = 2, .max_register = MCP_OLAT << 1, - .volatile_table = &mcp23x16_volatile_table, - .precious_table = &mcp23x16_precious_table, - .reg_defaults = mcp23x16_defaults, - .num_reg_defaults = ARRAY_SIZE(mcp23x16_defaults), + .volatile_table = &mcp23x17_volatile_table, + .precious_table = &mcp23x17_precious_table, + .reg_defaults = mcp23x17_defaults, + .num_reg_defaults = ARRAY_SIZE(mcp23x17_defaults), .cache_type = REGCACHE_FLAT, .val_format_endian = REGMAP_ENDIAN_LITTLE, };
drivers/pwm/pwm-lpss.c +4 -3
@@ -105,10 +105,12 @@ static void pwm_lpss_prepare(struct pwm_lpss_chip *lpwm, struct pwm_device *pwm,* The equation is: * base_unit = round(base_unit_range * freq / c) */ - base_unit_range =BIT (lpwm->info->base_unit_bits) -1 ; + base_unit_range =BIT (lpwm->info->base_unit_bits); freq *= base_unit_range; base_unit =DIV_ROUND_CLOSEST_ULL (freq, c); +/* base_unit must not be 0 and we also want to avoid overflowing it */ + base_unit =clamp_val (base_unit,1 , base_unit_range -1 ); on_time_div =255ULL * duty_ns;do_div (on_time_div, period_ns);
@@ -116,8 +118,7 @@ static void pwm_lpss_prepare(struct pwm_lpss_chip *lpwm, struct pwm_device *pwm, orig_ctrl = ctrl =pwm_lpss_read (pwm); ctrl &= ~PWM_ON_TIME_DIV_MASK ; - ctrl &= ~(base_unit_range <<PWM_BASE_UNIT_SHIFT ); - base_unit &= base_unit_range; + ctrl &= ~((base_unit_range -1 ) <<PWM_BASE_UNIT_SHIFT ); ctrl |= (u32 ) base_unit <<PWM_BASE_UNIT_SHIFT ; ctrl |= on_time_div;
drivers/rapidio/devices/rio_mport_cdev.c +11 -7
@@ -900,15 +900,16 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode,rmcd_error ("get_user_pages_unlocked err=%ld" , pinned); nr_pages =0 ; - }else + }else {rmcd_error ("pinned %ld out of %ld pages" , pinned, nr_pages); +/* +* Set nr_pages up to mean "how many pages to unpin, in +* the error handler: +*/ + nr_pages = pinned; + } ret = -EFAULT ; -/* -* Set nr_pages up to mean "how many pages to unpin, in -* the error handler: -*/ - nr_pages = pinned; goto err_pg; }
@@ -1738,6 +1739,7 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv,struct rio_dev *rdev;struct rio_switch *rswitch =NULL ;struct rio_mport *mport; +struct device *dev;size_t size;u32 rval;u32 swpinfo =0 ;
@@ -1752,8 +1754,10 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv,rmcd_debug (RDEV ,"name:%s ct:0x%x did:0x%x hc:0x%x" , dev_info.name, dev_info.comptag, dev_info.destid, dev_info.hopcount); -if (bus_find_device_by_name (&rio_bus_type,NULL , dev_info.name)) { + dev =bus_find_device_by_name (&rio_bus_type,NULL , dev_info.name); +if (dev) {rmcd_debug (RDEV ,"device %s already exists" , dev_info.name); +put_device (dev);return -EEXIST ; }
drivers/regulator/core.c +13 -8
@@ -4090,15 +4090,20 @@ regulator_register(const struct regulator_desc *regulator_desc,else if (regulator_desc->supply_name) rdev->supply_name = regulator_desc->supply_name; -/* -* Attempt to resolve the regulator supply, if specified, -* but don't return an error if we fail because we will try -* to resolve it again later as more regulators are added. -*/ -if (regulator_resolve_supply (rdev)) -rdev_dbg (rdev,"unable to resolve supply\n" ); - ret =set_machine_constraints (rdev, constraints); +if (ret == -EPROBE_DEFER ) { +/* Regulator might be in bypass mode and so needs its supply +* to set the constraints */ +/* FIXME: this currently triggers a chicken-and-egg problem +* when creating -SUPPLY symlink in sysfs to a regulator +* that is just being created */ + ret =regulator_resolve_supply (rdev); +if (!ret) + ret =set_machine_constraints (rdev, constraints); +else +rdev_dbg (rdev,"unable to resolve supply early: %pe\n" , +ERR_PTR (ret)); + }if (ret <0 ) goto wash;
drivers/scsi/be2iscsi/be_main.c +2 -2
@@ -3013,6 +3013,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, goto create_eq_error; } + mem->dma = paddr; mem->va = eq_vaddress; ret =be_fill_queue (eq, phba->params.num_eq_entries,sizeof (struct be_eq_entry ), eq_vaddress);
@@ -3022,7 +3023,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, goto create_eq_error; } - mem->dma = paddr; ret =beiscsi_cmd_eq_create (&phba->ctrl, eq, phwi_context->cur_eqd);if (ret) {
@@ -3079,6 +3079,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba, goto create_cq_error; } + mem->dma = paddr; ret =be_fill_queue (cq, phba->params.num_cq_entries,sizeof (struct sol_cqe ), cq_vaddress);if (ret) {
@@ -3088,7 +3089,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba, goto create_cq_error; } - mem->dma = paddr; ret =beiscsi_cmd_cq_create (&phba->ctrl, cq, eq, false, false,0 );if (ret) {
drivers/scsi/csiostor/csio_hw.c +1 -1
@@ -1997,7 +1997,7 @@ static int csio_hw_prep_fw(struct csio_hw *hw, struct fw_info *fw_info,FW_HDR_FW_VER_MICRO_G (c),FW_HDR_FW_VER_BUILD_G (c),FW_HDR_FW_VER_MAJOR_G (k),FW_HDR_FW_VER_MINOR_G (k), FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k)); - ret =EINVAL ; + ret = -EINVAL ; goto bye; }
drivers/scsi/ibmvscsi/ibmvfc.c +1 -0
@@ -4797,6 +4797,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)if (IS_ERR (vhost->work_thread)) {dev_err (dev,"Couldn't create kernel thread: %ld\n" ,PTR_ERR (vhost->work_thread)); + rc =PTR_ERR (vhost->work_thread); goto free_host_mem; }
drivers/scsi/mvumi.c +1 -0
@@ -2439,6 +2439,7 @@ static int mvumi_io_attach(struct mvumi_hba *mhba)if (IS_ERR (mhba->dm_thread)) {dev_err (&mhba->pdev->dev,"failed to create device scan thread\n" ); + ret =PTR_ERR (mhba->dm_thread);mutex_unlock (&mhba->sas_discovery_mutex); goto fail_create_thread; }
drivers/scsi/qedi/qedi_fw.c +19 -4
@@ -62,6 +62,7 @@ static void qedi_process_logout_resp(struct qedi_ctx *qedi,"Freeing tid=0x%x for cid=0x%x\n" , cmd->task_id, qedi_conn->iscsi_conn_id); +spin_lock (&qedi_conn->list_lock);if (likely (cmd->io_cmd_in_list)) { cmd->io_cmd_in_list = false;list_del_init (&cmd->io_cmd);
@@ -72,6 +73,7 @@ static void qedi_process_logout_resp(struct qedi_ctx *qedi, cmd->task_id, qedi_conn->iscsi_conn_id, &cmd->io_cmd); } +spin_unlock (&qedi_conn->list_lock); cmd->state =RESPONSE_RECEIVED ;qedi_clear_task_idx (qedi, cmd->task_id);
@@ -127,6 +129,7 @@ static void qedi_process_text_resp(struct qedi_ctx *qedi,"Freeing tid=0x%x for cid=0x%x\n" , cmd->task_id, qedi_conn->iscsi_conn_id); +spin_lock (&qedi_conn->list_lock);if (likely (cmd->io_cmd_in_list)) { cmd->io_cmd_in_list = false;list_del_init (&cmd->io_cmd);
@@ -137,6 +140,7 @@ static void qedi_process_text_resp(struct qedi_ctx *qedi, cmd->task_id, qedi_conn->iscsi_conn_id, &cmd->io_cmd); } +spin_unlock (&qedi_conn->list_lock); cmd->state =RESPONSE_RECEIVED ;qedi_clear_task_idx (qedi, cmd->task_id);
@@ -231,11 +235,13 @@ static void qedi_process_tmf_resp(struct qedi_ctx *qedi, tmf_hdr = (struct iscsi_tm *)qedi_cmd->task->hdr; +spin_lock (&qedi_conn->list_lock);if (likely (qedi_cmd->io_cmd_in_list)) { qedi_cmd->io_cmd_in_list = false;list_del_init (&qedi_cmd->io_cmd); qedi_conn->active_cmd_count--; } +spin_unlock (&qedi_conn->list_lock); if (((tmf_hdr->flags & ISCSI_FLAG_TM_FUNC_MASK) == ISCSI_TM_FUNC_LOGICAL_UNIT_RESET) ||
@@ -299,11 +305,13 @@ static void qedi_process_login_resp(struct qedi_ctx *qedi,ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK ; qedi_conn->gen_pdu.resp_wr_ptr = qedi_conn->gen_pdu.resp_buf + pld_len; +spin_lock (&qedi_conn->list_lock);if (likely (cmd->io_cmd_in_list)) { cmd->io_cmd_in_list = false;list_del_init (&cmd->io_cmd); qedi_conn->active_cmd_count--; } +spin_unlock (&qedi_conn->list_lock);memset (task_ctx,'\0' ,sizeof (*task_ctx));
@@ -836,8 +844,11 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,qedi_clear_task_idx (qedi_conn->qedi, rtid);spin_lock (&qedi_conn->list_lock); -list_del_init (&dbg_cmd->io_cmd); - qedi_conn->active_cmd_count--; +if (likely (dbg_cmd->io_cmd_in_list)) { + dbg_cmd->io_cmd_in_list = false; +list_del_init (&dbg_cmd->io_cmd); + qedi_conn->active_cmd_count--; + }spin_unlock (&qedi_conn->list_lock); qedi_cmd->state =CLEANUP_RECV ;wake_up_interruptible (&qedi_conn->wait_queue);
@@ -1257,6 +1268,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn, qedi_conn->cmd_cleanup_req++;qedi_iscsi_cleanup_task (ctask, true); + cmd->io_cmd_in_list = false;list_del_init (&cmd->io_cmd); qedi_conn->active_cmd_count--; QEDI_WARN(&qedi->dbg_ctx,
@@ -1470,8 +1482,11 @@ static void qedi_tmf_work(struct work_struct *work)spin_unlock_bh (&qedi_conn->tmf_work_lock);spin_lock (&qedi_conn->list_lock); -list_del_init (&cmd->io_cmd); - qedi_conn->active_cmd_count--; +if (likely (cmd->io_cmd_in_list)) { + cmd->io_cmd_in_list = false; +list_del_init (&cmd->io_cmd); + qedi_conn->active_cmd_count--; + }spin_unlock (&qedi_conn->list_lock);clear_bit (QEDI_CONN_FW_CLEANUP , &qedi_conn->flags);
drivers/scsi/qedi/qedi_iscsi.c +2 -0
@@ -983,11 +983,13 @@ static void qedi_cleanup_active_cmd_list(struct qedi_conn *qedi_conn) {struct qedi_cmd *cmd, *cmd_tmp; +spin_lock (&qedi_conn->list_lock);list_for_each_entry_safe (cmd, cmd_tmp, &qedi_conn->active_cmd_list, io_cmd) {list_del_init (&cmd->io_cmd); qedi_conn->active_cmd_count--; } +spin_unlock (&qedi_conn->list_lock); }static void qedi_ep_disconnect (struct iscsi_endpoint *ep)
drivers/scsi/qla4xxx/ql4_os.c +1 -1
@@ -1223,7 +1223,7 @@ static int qla4xxx_get_host_stats(struct Scsi_Host *shost, char *buf, int len)le64_to_cpu (ql_iscsi_stats->iscsi_sequence_error); exit_host_stats:if (ql_iscsi_stats) -dma_free_coherent (&ha->pdev->dev, host_stats_size, +dma_free_coherent (&ha->pdev->dev, stats_size, ql_iscsi_stats, iscsi_stats_dma); ql4_printk(KERN_INFO, ha, "%s: Get host stats done\n",
drivers/scsi/ufs/ufs-qcom.c +0 -5
@@ -1595,9 +1595,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)*/ } mask <<= offset; - -pm_runtime_get_sync (host->hba->dev); -ufshcd_hold (host->hba, false);ufshcd_rmwl (host->hba,TEST_BUS_SEL , (u32 )host->testbus.select_major <<19 ,REG_UFS_CFG1 );
@@ -1610,8 +1607,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)* committed before returning. */ mb (); -ufshcd_release (host->hba); -pm_runtime_put_sync (host->hba->dev);return 0 ; }
drivers/tty/hvc/hvcs.c +7 -7
@@ -1231,13 +1231,6 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)tty_wait_until_sent (tty,HVCS_CLOSE_WAIT ); -/* -* This line is important because it tells hvcs_open that this -* device needs to be re-configured the next time hvcs_open is -* called. -*/ - tty->driver_data =NULL ; -free_irq (irq, hvcsd);return ; }else if (hvcsd->port.count <0 ) {
@@ -1252,6 +1245,13 @@ static void hvcs_cleanup(struct tty_struct * tty) {struct hvcs_struct *hvcsd = tty->driver_data; +/* +* This line is important because it tells hvcs_open that this +* device needs to be re-configured the next time hvcs_open is +* called. +*/ + tty->driver_data =NULL ; +tty_port_put (&hvcsd->port); }
drivers/tty/ipwireless/network.c +2 -2
@@ -117,7 +117,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel, skb->len, notify_packet_sent, network); -if (ret ==-1 ) { +if (ret <0 ) {skb_pull (skb,2 );return 0 ; }
@@ -134,7 +134,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel, notify_packet_sent, network);kfree (buf); -if (ret ==-1 ) +if (ret <0 )return 0 ; }kfree_skb (skb);
drivers/tty/ipwireless/tty.c +1 -1
@@ -218,7 +218,7 @@ static int ipw_write(struct tty_struct *linux_tty, ret =ipwireless_send_packet (tty->hardware,IPW_CHANNEL_RAS , buf, count, ipw_write_packet_sent_callback, tty); -if (ret ==-1 ) { +if (ret <0 ) {mutex_unlock (&tty->ipw_tty_mutex);return 0 ; }
drivers/tty/pty.c +1 -1
@@ -120,10 +120,10 @@ static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)spin_lock_irqsave (&to->port->lock, flags);/* Stuff the data into the input queue of the other end */ c =tty_insert_flip_string (to->port, buf, c); +spin_unlock_irqrestore (&to->port->lock, flags);/* And shovel */ if (c)tty_flip_buffer_push (to->port); -spin_unlock_irqrestore (&to->port->lock, flags); }return c; }
drivers/tty/serial/Kconfig +1 -0
@@ -9,6 +9,7 @@ menu "Serial drivers" config SERIAL_EARLYCON bool + depends on SERIAL_CORE help Support for early consoles with the earlycon parameter. This enables the console before standard serial driver is probed. The console is
drivers/tty/serial/fsl_lpuart.c +1 -1
@@ -567,7 +567,7 @@ static void lpuart32_poll_put_char(struct uart_port *port, unsigned char c)static int lpuart32_poll_get_char (struct uart_port *port) { -if (!(lpuart32_read (port,UARTSTAT ) &UARTSTAT_RDRF )) +if (!(lpuart32_read (port,UARTWATER ) >>UARTWATER_RXCNT_OFF ))return NO_POLL_CHAR ;return lpuart32_read (port,UARTDATA );
drivers/usb/class/cdc-acm.c +23 -0
@@ -1287,9 +1287,21 @@ static int acm_probe(struct usb_interface *intf, } } }else { +int class =-1 ; + data_intf_num = union_header->bSlaveInterface0; control_interface =usb_ifnum_to_if (usb_dev, union_header->bMasterInterface0); data_interface =usb_ifnum_to_if (usb_dev, data_intf_num); + +if (control_interface) + class = control_interface->cur_altsetting->desc.bInterfaceClass; + +if (class !=USB_CLASS_COMM && class !=USB_CLASS_CDC_DATA ) { +dev_dbg (&intf->dev,"Broken union descriptor, assuming single interface\n" ); + combined_interfaces =1 ; + control_interface = data_interface = intf; + goto look_for_collapsed_interface; + } }if (!control_interface || !data_interface) {
@@ -1945,6 +1957,17 @@ static const struct usb_device_id acm_ids[] = { .driver_info = IGNORE_DEVICE, }, +/* Exclude ETAS ES58x */ + { USB_DEVICE(0x108c, 0x0159), /* ES581.4 */ + .driver_info =IGNORE_DEVICE , + }, + { USB_DEVICE(0x108c, 0x0168), /* ES582.1 */ + .driver_info = IGNORE_DEVICE, + }, + { USB_DEVICE(0x108c, 0x0169), /* ES584.1 */ + .driver_info = IGNORE_DEVICE, + }, + { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */ .driver_info = SEND_ZERO_PACKET, },
drivers/usb/class/cdc-wdm.c +55 -17
84 lines not on this page · raw message
drivers/usb/core/urb.c +54 -35
89 lines not on this page · raw message
drivers/usb/gadget/function/f_printer.c +14 -2
Lines of this file are not shown. View the raw message.
drivers/video/backlight/sky81452-backlight.c +1 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.