Linux 4.14.223
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.223 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
------------
Makefile | 2 arch/arm/boot/compressed/head.S | 4 arch/arm/boot/dts/exynos3250-monk.dts | 2 arch/arm/boot/dts/exynos3250-rinato.dts | 2 arch/arm/boot/dts/exynos5250-spring.dts | 2 arch/arm/boot/dts/exynos5420-arndale-octa.dts | 2 arch/arm/boot/dts/omap443x.dtsi | 2 arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi | 2 arch/arm64/boot/dts/exynos/exynos7-espresso.dts | 2 arch/arm64/boot/dts/nvidia/tegra210.dtsi | 1 arch/arm64/boot/dts/qcom/msm8916.dtsi | 4 arch/arm64/kernel/head.S | 1 arch/arm64/kernel/probes/uprobes.c | 2 arch/mips/kernel/vmlinux.lds.S | 1 arch/mips/lantiq/irq.c | 2 arch/mips/mm/c-r4k.c | 2 arch/powerpc/Kconfig | 2 arch/powerpc/kernel/head_8xx.S | 2 arch/powerpc/platforms/pseries/dlpar.c | 7 - arch/sparc/Kconfig | 2 arch/sparc/lib/memset.S | 1 arch/x86/kernel/reboot.c | 29 +--- block/blk-settings.c | 12 + certs/blacklist.c | 2 crypto/ecdh_helper.c | 3 drivers/acpi/acpi_configfs.c | 7 - drivers/acpi/property.c | 44 ++++-- drivers/amba/bus.c | 20 +- drivers/ata/ahci_brcm.c | 14 +- drivers/auxdisplay/ht16k33.c | 3 drivers/block/floppy.c | 27 ++- drivers/bluetooth/btqcomsmd.c | 27 ++- drivers/char/hw_random/timeriomem-rng.c | 2 drivers/char/random.c | 2 drivers/char/tpm/tpm_tis_core.c | 3 drivers/clk/meson/clk-pll.c | 2 drivers/clocksource/mxs_timer.c | 5 drivers/cpufreq/brcmstb-avs-cpufreq.c | 3 drivers/crypto/bcm/cipher.c | 2 drivers/crypto/bcm/cipher.h | 4 drivers/crypto/bcm/util.c | 2 drivers/crypto/sunxi-ss/sun4i-ss-cipher.c | 125 ++++++++++-------- drivers/dma/fsldma.c | 6 drivers/dma/hsu/pci.c | 21 +-- drivers/gpio/gpio-pcf857x.c | 2 drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c | 22 +-- drivers/gpu/drm/gma500/psb_drv.c | 2 drivers/gpu/drm/msm/dsi/phy/dsi_phy_20nm.c | 2 drivers/hid/hid-core.c | 9 - drivers/hid/wacom_wac.c | 7 - drivers/hv/channel_mgmt.c | 3 drivers/i2c/busses/i2c-brcmstb.c | 2 drivers/infiniband/core/user_mad.c | 7 - drivers/infiniband/sw/rxe/rxe_recv.c | 11 + drivers/input/joydev.c | 7 - drivers/input/joystick/xpad.c | 1 drivers/input/serio/i8042-x86ia64io.h | 4 drivers/input/touchscreen/elo.c | 4 drivers/input/touchscreen/raydium_i2c_ts.c | 3 drivers/md/dm-era-target.c | 93 ++++++++----- drivers/media/i2c/ov5670.c | 3 drivers/media/pci/cx25821/cx25821-core.c | 4 drivers/media/pci/saa7134/saa7134-empress.c | 5 drivers/media/platform/pxa_camera.c | 3 drivers/media/platform/vsp1/vsp1_drv.c | 4 drivers/media/tuners/qm1d1c0042.c | 4 drivers/media/usb/dvb-usb-v2/lmedm04.c | 2 drivers/media/usb/tm6000/tm6000-dvb.c | 4 drivers/media/usb/uvc/uvc_v4l2.c | 18 +- drivers/mfd/bd9571mwv.c | 6 drivers/mfd/wm831x-auxadc.c | 3 drivers/misc/eeprom/eeprom_93xx46.c | 1 drivers/misc/vmw_vmci/vmci_queue_pair.c | 5 drivers/mmc/host/sdhci-esdhc-imx.c | 3 drivers/mmc/host/usdhi6rol0.c | 4 drivers/mtd/spi-nor/cadence-quadspi.c | 2 drivers/mtd/spi-nor/hisi-sfc.c | 4 drivers/net/ethernet/amd/xgbe/xgbe-common.h | 14 ++ drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 2 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 36 +++++ drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 drivers/net/ethernet/ibm/ibmvnic.c | 7 - drivers/net/ethernet/intel/i40e/i40e_main.c | 27 --- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 9 - drivers/net/ethernet/marvell/mvneta.c | 9 + drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 1 drivers/net/ethernet/sun/sunvnet_common.c | 23 --- drivers/net/gtp.c | 5 drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/ath/ath9k/debug.c | 5 drivers/net/wireless/broadcom/b43/phy_n.c | 2 drivers/net/xen-netback/interface.c | 8 - drivers/nvdimm/dimm_devs.c | 18 ++ drivers/of/fdt.c | 12 + drivers/pci/syscall.c | 10 - drivers/power/reset/at91-sama5d2_shdwc.c | 2 drivers/pwm/pwm-rockchip.c | 1 drivers/regulator/axp20x-regulator.c | 7 - drivers/rtc/Kconfig | 1 drivers/scsi/bnx2fc/Kconfig | 1 drivers/spi/spi-atmel.c | 2 drivers/spi/spi-pxa2xx-pci.c | 27 ++- drivers/spi/spi-s3c24xx-fiq.S | 9 - drivers/spi/spi-stm32.c | 4 drivers/staging/rtl8188eu/os_dep/usb_intf.c | 1 drivers/staging/rtl8723bs/os_dep/wifi_regd.c | 2 drivers/usb/core/quirks.c | 3 drivers/usb/dwc2/hcd.c | 15 +- drivers/usb/dwc2/hcd_intr.c | 14 +- drivers/usb/dwc3/gadget.c | 19 ++ drivers/usb/gadget/function/u_audio.c | 17 ++ drivers/usb/musb/musb_core.c | 31 ++-- drivers/usb/renesas_usbhs/fifo.c | 2 drivers/usb/serial/mos7720.c | 4 drivers/usb/serial/mos7840.c | 4 drivers/usb/serial/option.c | 3 drivers/video/fbdev/Kconfig | 2 drivers/watchdog/mei_wdt.c | 1 fs/affs/namei.c | 4 fs/btrfs/ctree.c | 7 - fs/btrfs/free-space-cache.c | 6 fs/btrfs/relocation.c | 4 fs/cifs/connect.c | 1 fs/ext4/namei.c | 7 - fs/f2fs/file.c | 3 fs/gfs2/lock_dlm.c | 8 - fs/isofs/dir.c | 1 fs/isofs/namei.c | 1 fs/jffs2/summary.c | 3 fs/jfs/jfs_dmap.c | 2 fs/ntfs/inode.c | 6 fs/ocfs2/cluster/heartbeat.c | 8 + fs/quota/quota_v2.c | 11 + include/asm-generic/vmlinux.lds.h | 7 - include/linux/icmpv6.h | 48 ++++++ include/linux/ipv6.h | 2 include/linux/kexec.h | 5 include/linux/key.h | 1 include/linux/rmap.h | 3 include/net/icmp.h | 10 + kernel/bpf/bpf_lru_list.c | 7 - kernel/debug/kdb/kdb_private.h | 2 kernel/kexec_file.c | 5 kernel/module.c | 21 ++- kernel/printk/printk_safe.c | 16 +- kernel/seccomp.c | 2 kernel/tracepoint.c | 80 +++++++++-- mm/hugetlb.c | 43 ++++++ mm/memory.c | 16 +- net/bluetooth/a2mp.c | 3 net/bluetooth/hci_core.c | 6 net/ipv4/icmp.c | 34 ++++ net/ipv6/icmp.c | 19 +- net/ipv6/ip6_icmp.c | 46 +++++- net/mac80211/mesh_hwmp.c | 2 scripts/recordmcount.pl | 6 security/commoncap.c | 12 + security/integrity/ima/ima_kexec.c | 3 security/integrity/ima/ima_mok.c | 5 security/keys/key.c | 2 security/keys/trusted.c | 2 sound/pci/hda/patch_realtek.c | 11 + sound/soc/codecs/cs42l56.c | 3 tools/perf/tests/sample-parsing.c | 2 tools/perf/util/event.c | 2 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 3 166 files changed, 1073 insertions(+), 458 deletions(-)
Adrian Hunter (1):
perf intel-pt: Fix missing CYC processing in PSB
Al Viro (1):
sparc32: fix a user-triggerable oops in clear_user()
Alain Volmat (1):
spi: stm32: properly handle 0 byte transfer
Alexander Lobakin (1):
MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section
Alexander Usyskin (1):
watchdog: mei_wdt: request stop on unregister
Andrea Parri (Microsoft) (1):
Drivers: hv: vmbus: Avoid use-after-free in vmbus_onoffer_rescind()
Andy Shevchenko (1):
spi: pxa2xx: Fix the controller numbering for Wildcat Point
Arnaldo Carvalho de Melo (1):
perf tools: Fix DSO filtering when not finding a map for a sampled address
Arnd Bergmann (1):
ARM: s3c: fix fiq for clang IAS
Aswath Govindraju (2):
misc: eeprom_93xx46: Fix module alias to enable module autoprobe
misc: eeprom_93xx46: Add module alias to avoid breaking support for non device tree users
Bartosz Golaszewski (1):
rtc: s5m: select REGMAP_I2C
Bob Pearson (1):
RDMA/rxe: Fix coding error in rxe_recv.c
Bob Peterson (1):
gfs2: Don't skip dlm unlock if glock has an lvb
Chao Yu (1):
f2fs: fix out-of-repair __setattr_copy()
Chen-Yu Tsai (1):
staging: rtl8723bs: wifi_regd.c: Fix incorrect number of regulatory rules
Christoph Schemmel (1):
NET: usb: qmi_wwan: Adding support for Cinterion MV31
Christophe JAILLET (7):
Bluetooth: btqcomsmd: Fix a resource leak in error handling paths in the probe function
cpufreq: brcmstb-avs-cpufreq: Fix resource leaks in ->remove()
media: vsp1: Fix an error handling path in the probe function
media: cx25821: Fix a bug when reallocating some dma memory
dmaengine: fsldma: Fix a resource leak in the remove function
dmaengine: fsldma: Fix a resource leak in an error handling path of the probe function
mmc: usdhi6rol0: Fix a resource leak in the error handling path of the probe
Christophe Leroy (2):
powerpc/47x: Disable 256k page size powerpc/8xx: Fix software emulation interrupt
Christopher William Snowhill (1):
Bluetooth: Fix initializing response id after clearing struct
Chuhong Yuan (1):
net/mlx4_core: Add missed mlx4_free_cmd_mailbox()
Claudiu Beznea (1):
power: reset: at91-sama5d2_shdwc: fix wkupdbc mask
Colin Ian King (3):
mac80211: fix potential overflow when multiplying to u32 integers
b43: N-PHY: Fix the update of coef for the PHY revision >= 3case fs/jfs: fix potential integer overflow on shift of a int
Corentin Labbe (3):
crypto: sun4i-ss - fix kmap usage
crypto: sun4i-ss - checking sg length is not sufficient
crypto: sun4i-ss - handle BigEndian for cipher
Dan Carpenter (8):
gma500: clean up error handling in init
ASoC: cs42l56: fix up error handling in probe
mfd: wm831x-auxadc: Prevent use after free in wm831x_auxadc_read_irq()
Input: elo - fix an error code in elo_connect()
ocfs2: fix a use after free on error
Input: joydev - prevent potential read overflow in ioctl
USB: serial: mos7840: fix error code in mos7840_write()
USB: serial: mos7720: fix error code in mos7720_write()
Dan Williams (1):
libnvdimm/dimm: Avoid race between probe and available_slots_show()
Daniele Alessandrelli (1):
crypto: ecdh_helper - Ensure 'len >= secret.len' in decode_key()
David Howells (1):
certs: Fix blacklist flag type confusion
Dinghao Liu (2):
media: media/pci: Fix memleak in empress_init
media: tm6000: Fix memleak in tm6000_start_stream
Edwin Peer (1):
bnxt_en: reverse order of TX disable and carrier off
Eric Biggers (1):
random: fix the RNDRESEEDCRNG ioctl
Eric Dumazet (1):
ipv6: icmp6: avoid indirect call for icmpv6_send()
Eric W. Biederman (1):
capabilities: Don't allow writing ambiguous v3 file capabilities
Fangrui Song (1):
module: Ignore _GLOBAL_OFFSET_TABLE_ when warning for undefined symbols
Ferry Toth (1):
dmaengine: hsu: disable spurious interrupt
Filipe Manana (1):
btrfs: fix extent buffer leak on failure to copy root
Florian Fainelli (1):
ata: ahci_brcm: Add back regulators management
Frank Li (1):
mmc: sdhci-esdhc-imx: fix kernel panic when remove module
Geert Uytterhoeven (1):
auxdisplay: ht16k33: Fix refresh rate handling
Greg Kroah-Hartman (1):
Linux 4.14.223
Guenter Roeck (3):
usb: dwc2: Do not update data length if it is 0 on inbound transfers
usb: dwc2: Abort transaction after errors with unknown reason
usb: dwc2: Make "trimming xfer length" a debug message
He Zhe (1):
arm64: uprobe: Return EOPNOTSUPP for AARCH32 instruction probing
Heiner Kallweit (1):
PCI: Align checking of syscall user config accessors
Jack Pham (1):
usb: gadget: u_audio: Free requests only after callback
Jacopo Mondi (1):
media: i2c: ov5670: Fix PIXEL_RATE minimum value
James Bottomley (1):
tpm_tis: Fix check_locality for correct locality acquisition
Jan Henrik Weinstock (1):
hwrng: timeriomem - Fix cooldown period calculation
Jan Kara (1):
quota: Fix memory leak when handling corrupted quota file
Jarkko Sakkinen (1):
KEYS: trusted: Fix migratable=1 failing
Jason A. Donenfeld (5):
icmp: introduce helper for nat'd source address in network device context
icmp: allow icmpv6_ndo_send to work with CONFIG_IPV6=n
gtp: use icmp_ndo_send helper
sunvnet: use icmp_ndo_send helper
net: icmp: pass zeroed opts from icmp{,v6}_ndo_send before sending
Jason Gerecke (1):
HID: wacom: Ignore attempts to overwrite the touch_max value from HID
Jialin Zhang (1):
drm/gma500: Fix error return code in psb_driver_load()
Jiri Kosina (1):
floppy: reintroduce O_NDELAY fix
Jiri Olsa (1):
crypto: bcm - Rename struct device_private to bcm_device_private
Joe Perches (1):
media: lmedm04: Fix misuse of comma
Jorgen Hansen (1):
VMCI: Use set_page_dirty_lock() when unregistering guest memory
Josef Bacik (2):
btrfs: abort the transaction if we fail to inc ref in btrfs_copy_root
btrfs: fix reloc root leak with 0 ref reloc roots on recovery
Juergen Gross (1):
xen/netback: fix spurious event detection for common event case
KarimAllah Ahmed (1):
fdt: Properly handle "no-map" field in the memory region
Konrad Dybcio (1):
drm/msm/dsi: Correct io_start for MSM8994 (20nm PHY)
Krzysztof Kozlowski (6):
ARM: dts: exynos: correct PMIC interrupt trigger level on Monk
ARM: dts: exynos: correct PMIC interrupt trigger level on Rinato
ARM: dts: exynos: correct PMIC interrupt trigger level on Spring
ARM: dts: exynos: correct PMIC interrupt trigger level on Arndale Octa
arm64: dts: exynos: correct PMIC interrupt trigger level on TM2
arm64: dts: exynos: correct PMIC interrupt trigger level on Espresso
Lakshmi Ramasubramanian (2):
ima: Free IMA measurement buffer on error
ima: Free IMA measurement buffer after kexec syscall
Laurent Pinchart (1):
media: uvcvideo: Accept invalid bFormatIndex and bFrameIndex values
Lech Perczak (1):
USB: serial: option: update interface mapping for ZTE P685M
Leon Romanovsky (1):
ipv6: silence compilation warning for non-IPV6 builds
Lijun Pan (1):
ibmvnic: skip send_request_unmap for timeout reset
Linus Lüssing (1):
ath9k: fix data bus crash when setting nf_override via debugfs
Luo Meng (1):
media: qm1d1c0042: fix error return code in qm1d1c0042_init()
Marc Zyngier (1):
arm64: Add missing ISB after invalidating TLB in __primary_switch
Marco Elver (1):
bpf_lru_list: Read double-checked variable once without lock
Marcos Paulo de Souza (1):
Input: i8042 - add ASUS Zenbook Flip to noselftest list
Martin Blumenstingl (1):
clk: meson: clk-pll: fix initializing the old rate (fallback) for a PLL
Martin Kaiser (1):
staging: rtl8188eu: Add Edimax EW-7811UN V2 to device table
Mateusz Palczewski (1):
i40e: Fix overwriting flow control settings during driver loading
Maxim Kiselev (1):
gpio: pcf857x: Fix missing first interrupt
Maxime Chevallier (1):
net: mvneta: Remove per-cpu queue mapping for Armada 3700
Maxime Ripard (1):
i2c: brcmstb: Fix brcmstd_send_i2c_cmd condition
Miaohe Lin (3):
mm/memory.c: fix potential pte_unmap_unlock pte error mm/hugetlb: fix potential double free in hugetlb_register_node() error path mm/rmap: fix potential pte_unmap on an not mapped pte
Mike Kravetz (1):
hugetlb: fix copy_huge_page_from_user contig page struct assumption
Mikulas Patocka (1):
blk-settings: align max_sectors on "logical_block_size" boundary
Muchun Song (2):
mm: hugetlb: fix a race between freeing and dissolving the page
printk: fix deadlock when kernel panic
Namhyung Kim (1):
perf test: Fix unaligned access in sample parsing test
Nathan Chancellor (2):
MIPS: c-r4k: Fix section mismatch for loongson2_sc_init
MIPS: lantiq: Explicitly compare LTQ_EBU_PCC_ISTAT against 0
Nathan Lynch (1):
powerpc/pseries/dlpar: handle ibm, configure-connector delay status
Nick Desaulniers (1):
vmlinux.lds.h: add DWARF v5 sections
Nicolas Boichat (1):
of/fdt: Make sure no-map does not remove already reserved regions
Nikos Tsironis (7):
dm era: Recover committed writeset after crash
dm era: Verify the data block size hasn't changed
dm era: Fix bitset memory leaks
dm era: Use correct value size in equality function of writeset tree dm era: Reinitialize bitset cache before digesting a new writeset dm era: only resize metadata in preresume
dm era: Update in-core bitset after committing the metadata
Olivier Crête (1):
Input: xpad - add support for PowerA Enhanced Wired Controller for Xbox Series X|S
Pan Bian (7):
Bluetooth: drop HCI device reference before return
Bluetooth: Put HCI device if inquiry procedure interrupts
regulator: axp20x: Fix reference cout leak
spi: atmel: Put allocated master before return
isofs: release buffer head before return
mtd: spi-nor: hisi-sfc: Put child node np on error path fs/affs: release old buffer head on error path
Paul Cercueil (2):
usb: musb: Fix runtime PM race in musb_queue_resume_work
seccomp: Add missing return in non-void function
PeiSen Hou (1):
ALSA: hda/realtek: modify EAPD in the ALC886
Pratyush Yadav (1):
spi: cadence-quadspi: Abort read if dummy cycles required are too many
Qinglang Miao (1):
ACPI: configfs: add missing check after configfs_register_default_group()
Rafael J. Wysocki (1):
ACPI: property: Fix fwnode string properties matching
Randy Dunlap (4):
fbdev: aty: SPARC64 requires FB_ATY_CT
HID: core: detect and skip invalid inputs to snto32()
sparc64: only select COMPAT_BINFMT_ELF if BINFMT_ELF is set
scsi: bnx2fc: Fix Kconfig warning & CNIC build errors
Rong Chen (1):
scripts/recordmcount.pl: support big endian for ARCH sh
Rustam Kovhaev (1):
ntfs: check for valid standard information attribute
Sabyrzhan Tasbolatov (1):
drivers/misc/vmw_vmci: restrict too big queue size in qp_host_alloc_queue
Sameer Pujar (1):
arm64: tegra: Add power-domain for Tegra210 HDA
Sean Christopherson (1):
x86/reboot: Force all cpus to exit VMX root if VMX is supported
Shay Drory (1):
IB/umad: Return EIO in case of when device disassociated
Shyam Prasad N (1):
cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath.
Shyam Sundar S K (2):
net: amd-xgbe: Reset the PHY rx data path when mailbox command timeout
net: amd-xgbe: Reset link when the link never comes back
Simon South (1):
pwm: rockchip: rockchip_pwm_probe(): Remove superfluous clk_unprepare()
Slawomir Laba (1):
i40e: Fix flow for IPv6 next header (extension header)
Stefan Ursella (1):
usb: quirks: add quirk to start video capture on ELMO L-12F document camera reliable
Steven Rostedt (VMware) (1):
tracepoint: Do not fail unregistering a probe due to memory failure
Sumit Garg (1):
kdb: Make memory allocations more robust
Theodore Ts'o (1):
ext4: fix potential htree index checksum corruption
Thinh Nguyen (2):
usb: dwc3: gadget: Fix setting of DEPCFG.bInterval_m1
usb: dwc3: gadget: Fix dep->interval for fullspeed interrupt
Tom Rix (3):
media: pxa_camera: declare variable when DEBUG is defined
jffs2: fix use after free in jffs2_sum_write_data() clocksource/drivers/mxs_timer: Add missing semicolon when DEBUG is defined
Tony Lindgren (1):
ARM: dts: Configure missing thermal interrupt for 4430
Uwe Kleine-König (1):
amba: Fix resource leak for drivers without .remove
Vincent Knecht (1):
arm64: dts: msm8916: Fix reserved and rfsa nodes unit address
Vladimir Murzin (1):
ARM: 9046/1: decompressor: Do not clear SCTLR.nTLSMD for ARMv7+ cores
Will McVicker (1):
HID: make arrays usage and value to be the same
Yoshihiro Shimoda (2):
mfd: bd9571mwv: Use devm_mfd_add_devices()
usb: renesas_usbhs: Clear pipe running flag in usbhs_pkt_pop()
Zhihao Cheng (1):
btrfs: clarify error returns values in __load_free_space_cache
jeffrey.lin (1):
Input: raydium_ts_i2c - do not send zero length
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 222 +SUBLEVEL = 223 EXTRAVERSION = NAME = Petit Gorille
arch/arm/boot/compressed/head.S +2 -2
@@ -1088,9 +1088,9 @@ __armv4_mmu_cache_off: __armv7_mmu_cache_off: mrc p15, 0, r0, c1, c0 #ifdef CONFIG_MMU - bic r0, r0, #0x000d + bic r0, r0, #0x0005 #else - bic r0, r0, #0x000c + bic r0, r0, #0x0004 #endif mcr p15, 0, r0, c1, c0 @ turn MMU and cache off mov r12, lr
arch/arm/boot/dts/exynos3250-monk.dts +1 -1
@@ -191,7 +191,7 @@ s2mps14_pmic@66 { compatible = "samsung,s2mps14-pmic"; interrupt-parent = <&gpx0>; - interrupts = <7 IRQ_TYPE_NONE>; + interrupts = <7 IRQ_TYPE_LEVEL_LOW>; reg = <0x66>; wakeup-source;
arch/arm/boot/dts/exynos3250-rinato.dts +1 -1
@@ -274,7 +274,7 @@ s2mps14_pmic@66 { compatible = "samsung,s2mps14-pmic"; interrupt-parent = <&gpx0>; - interrupts = <7 IRQ_TYPE_NONE>; + interrupts = <7 IRQ_TYPE_LEVEL_LOW>; reg = <0x66>; wakeup-source;
arch/arm/boot/dts/exynos5250-spring.dts +1 -1
@@ -111,7 +111,7 @@ compatible = "samsung,s5m8767-pmic"; reg = <0x66>; interrupt-parent = <&gpx3>; - interrupts = <2 IRQ_TYPE_NONE>; + interrupts = <2 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>; wakeup-source;
arch/arm/boot/dts/exynos5420-arndale-octa.dts +1 -1
@@ -87,7 +87,7 @@ reg = <0x66>; interrupt-parent = <&gpx3>; - interrupts = <2 IRQ_TYPE_EDGE_FALLING>; + interrupts = <2 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; pinctrl-0 = <&s2mps11_irq>;
arch/arm/boot/dts/omap443x.dtsi +2 -0
@@ -35,10 +35,12 @@ }; ocp { + /* 4430 has only gpio_86 tshut and no talert interrupt */ bandgap: bandgap@4a002260 { reg = <0x4a002260 0x4 0x4a00232C 0x4>; compatible = "ti,omap4430-bandgap"; + gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>; #thermal-sensor-cells = <0>; };
arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi +1 -1
@@ -343,7 +343,7 @@ s2mps13-pmic@66 { compatible = "samsung,s2mps13-pmic"; interrupt-parent = <&gpa0>; - interrupts = <7 IRQ_TYPE_NONE>; + interrupts = <7 IRQ_TYPE_LEVEL_LOW>; reg = <0x66>; samsung,s2mps11-wrstbi-ground;
arch/arm64/boot/dts/exynos/exynos7-espresso.dts +1 -1
@@ -88,7 +88,7 @@ s2mps15_pmic@66 { compatible = "samsung,s2mps15-pmic"; reg = <0x66>; - interrupts = <2 IRQ_TYPE_NONE>; + interrupts = <2 IRQ_TYPE_LEVEL_LOW>; interrupt-parent = <&gpa0>; pinctrl-names = "default"; pinctrl-0 = <&pmic_irq>;
arch/arm64/boot/dts/nvidia/tegra210.dtsi +1 -0
@@ -810,6 +810,7 @@ <&tegra_car 128>, /* hda2hdmi */ <&tegra_car 111>; /* hda2codec_2x */ reset-names = "hda", "hda2hdmi", "hda2codec_2x"; + power-domains = <&pd_sor>; status = "disabled"; };
arch/arm64/boot/dts/qcom/msm8916.dtsi +2 -2
@@ -63,7 +63,7 @@ no-map; }; - reserved@8668000 { + reserved@86680000 { reg = <0x0 0x86680000 0x0 0x80000>; no-map; };
@@ -73,7 +73,7 @@ no-map; }; - rfsa@867e00000 { + rfsa@867e0000 { reg = <0x0 0x867e0000 0x0 0x20000>; no-map; };
arch/arm64/kernel/head.S +1 -0
@@ -756,6 +756,7 @@ __primary_switch: tlbi vmalle1 // Remove any stale TLB entries dsb nsh + isb msr sctlr_el1, x19 // re-enable the MMU isb
arch/arm64/kernel/probes/uprobes.c +1 -1
@@ -41,7 +41,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,/* TODO: Currently we do not support AARCH32 instruction probing */ if (mm->context.flags &MMCF_AARCH32 ) -return -ENOTSUPP ; +return -EOPNOTSUPP ;else if (!IS_ALIGNED (addr,AARCH64_INSN_SIZE ))return -EINVAL ;
arch/mips/kernel/vmlinux.lds.S +1 -0
@@ -93,6 +93,7 @@ SECTIONS INIT_TASK_DATA(THREAD_SIZE) NOSAVE_DATA + PAGE_ALIGNED_DATA(PAGE_SIZE) CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT) READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT) DATA_DATA
arch/mips/lantiq/irq.c +1 -1
@@ -244,7 +244,7 @@ static void ltq_hw_irq_handler(struct irq_desc *desc)generic_handle_irq (irq_linear_revmap (ltq_domain, hwirq));/* if this is a EBU irq, we need to ack it or get a deadlock */ -if ((irq ==LTQ_ICU_EBU_IRQ ) && (module ==0 ) &<Q_EBU_PCC_ISTAT ) +if (irq ==LTQ_ICU_EBU_IRQ && !module &<Q_EBU_PCC_ISTAT !=0 )ltq_ebu_w32 (ltq_ebu_r32 (LTQ_EBU_PCC_ISTAT ) |0x10 ,LTQ_EBU_PCC_ISTAT ); }
arch/mips/mm/c-r4k.c +1 -1
@@ -1665,7 +1665,7 @@ static int probe_scache(void)return 1 ; } -static void __init loongson2_sc_init (void ) +static void loongson2_sc_init (void ) {struct cpuinfo_mips *c = ¤t_cpu_data;
arch/powerpc/Kconfig +1 -1
@@ -735,7 +735,7 @@ config PPC_64K_PAGES config PPC_256K_PAGES bool "256k page size" - depends on 44x && !STDBINUTILS + depends on 44x && !STDBINUTILS && !PPC_47x help Make the page size 256k.
arch/powerpc/kernel/head_8xx.S +1 -1
@@ -301,7 +301,7 @@ SystemCall: /* On the MPC8xx, this is a software emulation interrupt. It occurs * for all unimplemented and illegal instructions. */ - EXCEPTION(0x1000, SoftEmu, program_check_exception, EXC_XFER_STD) + EXCEPTION(0x1000, SoftEmu, emulation_assist_interrupt, EXC_XFER_STD) . = 0x1100 /*
arch/powerpc/platforms/pseries/dlpar.c +3 -4
@@ -139,7 +139,6 @@ void dlpar_free_cc_nodes(struct device_node *dn)#define NEXT_PROPERTY 3#define PREV_PARENT 4#define MORE_MEMORY 5 -#define CALL_AGAIN -2#define ERR_CFG_USE -9003 struct device_node *dlpar_configure_connector(__be32 drc_index,
@@ -181,6 +180,9 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,spin_unlock (&rtas_data_buf_lock); +if (rtas_busy_delay (rc)) +continue ; +switch (rc) {case COMPLETE :break ;
@@ -233,9 +235,6 @@ struct device_node *dlpar_configure_connector(__be32 drc_index, parent_path = last_dn->parent->full_name;break ; -case CALL_AGAIN : -break ; -case MORE_MEMORY :case ERR_CFG_USE :default :
arch/sparc/Kconfig +1 -1
@@ -574,7 +574,7 @@ config COMPAT bool depends on SPARC64 default y - select COMPAT_BINFMT_ELF + select COMPAT_BINFMT_ELF if BINFMT_ELF select HAVE_UID16 select ARCH_WANT_OLD_COMPAT_IPC select COMPAT_OLD_SIGACTION
arch/sparc/lib/memset.S +1 -0
@@ -142,6 +142,7 @@ __bzero: ZERO_LAST_BLOCKS(%o0, 0x48, %g2) ZERO_LAST_BLOCKS(%o0, 0x08, %g2) 13: + EXT(12b, 13b, 21f) be 8f andcc %o1, 4, %g0
arch/x86/kernel/reboot.c +10 -19
@@ -538,29 +538,20 @@ static void emergency_vmx_disable_all(void)local_irq_disable ();/* -* We need to disable VMX on all CPUs before rebooting, otherwise -* we risk hanging up the machine, because the CPU ignore INIT -* signals when VMX is enabled. +* Disable VMX on all CPUs before rebooting, otherwise we risk hanging +* the machine, because the CPU blocks INIT when it's in VMX root. * -* We can't take any locks and we may be on an inconsistent -* state, so we use NMIs as IPIs to tell the other CPUs to disable -* VMX and halt. +* We can't take any locks and we may be on an inconsistent state, so +* use NMIs as IPIs to tell the other CPUs to exit VMX root and halt. * -* For safety, we will avoid running the nmi_shootdown_cpus() -* stuff unnecessarily, but we don't have a way to check -* if other CPUs have VMX enabled. So we will call it only if the -* CPU we are running on has VMX enabled. -* -* We will miss cases where VMX is not enabled on all CPUs. This -* shouldn't do much harm because KVM always enable VMX on all -* CPUs anyway. But we can miss it on the small window where KVM -* is still enabling VMX. +* Do the NMI shootdown even if VMX if off on _this_ CPU, as that +* doesn't prevent a different CPU from being in VMX root operation. */ -if (cpu_has_vmx () &&cpu_vmx_enabled ()) { -/* Disable VMX on this CPU. */ -cpu_vmxoff (); +if (cpu_has_vmx ()) { +/* Safely force _this_ CPU out of VMX root operation. */ +__cpu_emergency_vmxoff (); -/* Halt and disable VMX on the other CPUs */ +/* Halt and exit VMX root operation on the other CPUs. */ nmi_shootdown_cpus (vmxoff_nmi); }
block/blk-settings.c +12 -0
@@ -513,6 +513,14 @@ void blk_queue_io_opt(struct request_queue *q, unsigned int opt) }EXPORT_SYMBOL (blk_queue_io_opt); +static unsigned int blk_round_down_sectors (unsigned int sectors,unsigned int lbs) +{ + sectors =round_down (sectors, lbs >>SECTOR_SHIFT ); +if (sectors <PAGE_SIZE >>SECTOR_SHIFT ) + sectors =PAGE_SIZE >>SECTOR_SHIFT ; +return sectors; +} +/** * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers * @t: the stacking driver (top)
@@ -639,6 +647,10 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, ret =-1 ; } + t->max_sectors =blk_round_down_sectors (t->max_sectors, t->logical_block_size); + t->max_hw_sectors =blk_round_down_sectors (t->max_hw_sectors, t->logical_block_size); + t->max_dev_sectors =blk_round_down_sectors (t->max_dev_sectors, t->logical_block_size); +/* Discard alignment and granularity */ if (b->discard_granularity) { alignment =queue_limit_discard_alignment (b, start);
certs/blacklist.c +1 -1
@@ -157,7 +157,7 @@ static int __init blacklist_init(void)KEY_USR_VIEW |KEY_USR_READ |KEY_USR_SEARCH ,KEY_ALLOC_NOT_IN_QUOTA | -KEY_FLAG_KEEP , +KEY_ALLOC_SET_KEEP , NULL, NULL);if (IS_ERR (blacklist_keyring))panic ("Can't allocate system blacklist keyring\n" );
crypto/ecdh_helper.c +3 -0
@@ -71,6 +71,9 @@ int crypto_ecdh_decode_key(const char *buf, unsigned int len,if (secret.type !=CRYPTO_KPP_SECRET_TYPE_ECDH )return -EINVAL ; +if (unlikely (len < secret.len)) +return -EINVAL ; + ptr =ecdh_unpack_data (¶ms->curve_id, ptr,sizeof (params->curve_id)); ptr =ecdh_unpack_data (¶ms->key_size, ptr,sizeof (params->key_size));if (secret.len !=crypto_ecdh_key_len (params))
drivers/acpi/acpi_configfs.c +6 -1
@@ -269,7 +269,12 @@ static int __init acpi_configfs_init(void) acpi_table_group =configfs_register_default_group (root,"table" , &acpi_tables_type); -return PTR_ERR_OR_ZERO (acpi_table_group); +if (IS_ERR (acpi_table_group)) { +configfs_unregister_subsystem (&acpi_configfs); +return PTR_ERR (acpi_table_group); + } + +return 0 ; }module_init (acpi_configfs_init);
drivers/acpi/property.c +33 -11
87 lines not on this page · raw message
drivers/amba/bus.c +12 -8
@@ -279,10 +279,11 @@ static int amba_remove(struct device *dev) {struct amba_device *pcdev =to_amba_device (dev);struct amba_driver *drv =to_amba_driver (dev->driver); -int ret; +int ret =0 ;pm_runtime_get_sync (dev); - ret = drv->remove (pcdev); +if (drv->remove) + ret = drv->remove (pcdev);pm_runtime_put_noidle (dev);/* Undo the runtime PM settings in amba_probe() */
@@ -299,7 +300,9 @@ static int amba_remove(struct device *dev)static void amba_shutdown (struct device *dev) {struct amba_driver *drv =to_amba_driver (dev->driver); - drv->shutdown (to_amba_device (dev)); + +if (drv->shutdown) + drv->shutdown (to_amba_device (dev)); }/**
@@ -312,12 +315,13 @@ static void amba_shutdown(struct device *dev)*/ int amba_driver_register (struct amba_driver *drv) { - drv->drv.bus = &amba_bustype; +if (!drv->probe) +return -EINVAL ; -#define SETFN (fn) if (drv->fn) drv->drv.fn = amba_##fn -SETFN (probe); -SETFN (remove); -SETFN (shutdown); + drv->drv.bus = &amba_bustype; + drv->drv.probe = amba_probe; + drv->drv.remove = amba_remove; + drv->drv.shutdown = amba_shutdown;return driver_register (&drv->drv); }
drivers/ata/ahci_brcm.c +13 -1
@@ -280,6 +280,10 @@ static int brcm_ahci_resume(struct device *dev)if (ret)return ret; + ret =ahci_platform_enable_regulators (hpriv); +if (ret) + goto out_disable_clks; +brcm_sata_init (priv);brcm_sata_phys_enable (priv);brcm_sata_alpm_init (hpriv);
@@ -309,6 +313,8 @@ static int brcm_ahci_resume(struct device *dev)ahci_platform_disable_phys (hpriv); out_disable_phys:brcm_sata_phys_disable (priv); +ahci_platform_disable_regulators (hpriv); +out_disable_clks:ahci_platform_disable_clks (hpriv);return ret; }
@@ -372,6 +378,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)if (ret) goto out_reset; + ret =ahci_platform_enable_regulators (hpriv); +if (ret) + goto out_disable_clks; +/* Must be first so as to configure endianness including that * of the standard AHCI register space. */
@@ -381,7 +391,7 @@ static int brcm_ahci_probe(struct platform_device *pdev) priv->port_mask =brcm_ahci_get_portmask (hpriv, priv);if (!priv->port_mask) { ret = -ENODEV ; - goto out_disable_clks; + goto out_disable_regulators; }/* Must be done before ahci_platform_enable_phys() */
@@ -413,6 +423,8 @@ static int brcm_ahci_probe(struct platform_device *pdev)ahci_platform_disable_phys (hpriv); out_disable_phys:brcm_sata_phys_disable (priv); +out_disable_regulators: +ahci_platform_disable_regulators (hpriv); out_disable_clks:ahci_platform_disable_clks (hpriv); out_reset:
drivers/auxdisplay/ht16k33.c +1 -2
@@ -125,8 +125,7 @@ static void ht16k33_fb_queue(struct ht16k33_priv *priv) {struct ht16k33_fbdev *fbdev = &priv->fbdev; -schedule_delayed_work (&fbdev->work, -msecs_to_jiffies (HZ / fbdev->refresh_rate)); +schedule_delayed_work (&fbdev->work,HZ / fbdev->refresh_rate); }/*
drivers/block/floppy.c +14 -13
@@ -4069,21 +4069,22 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)if (UFDCS ->rawcmd ==1 )UFDCS ->rawcmd =2 ; -if (!(mode &FMODE_NDELAY )) { -if (mode & (FMODE_READ |FMODE_WRITE )) { -UDRS ->last_checked =0 ; -clear_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags); -check_disk_change (bdev); -if (test_bit (FD_DISK_CHANGED_BIT , &UDRS ->flags)) - goto out; -if (test_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags)) - goto out; - } - res = -EROFS ; -if ((mode &FMODE_WRITE ) && - !test_bit (FD_DISK_WRITABLE_BIT , &UDRS ->flags)) +if (mode & (FMODE_READ |FMODE_WRITE )) { +UDRS ->last_checked =0 ; +clear_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags); +check_disk_change (bdev); +if (test_bit (FD_DISK_CHANGED_BIT , &UDRS ->flags)) + goto out; +if (test_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags)) goto out; } + + res = -EROFS ; + +if ((mode &FMODE_WRITE ) && + !test_bit (FD_DISK_WRITABLE_BIT , &UDRS ->flags)) + goto out; +mutex_unlock (&open_lock);mutex_unlock (&floppy_mutex);return 0 ;
drivers/bluetooth/btqcomsmd.c +19 -8
@@ -154,12 +154,16 @@ static int btqcomsmd_probe(struct platform_device *pdev) btq->cmd_channel =qcom_wcnss_open_channel (wcnss,"APPS_RIVA_BT_CMD" , btqcomsmd_cmd_callback, btq); -if (IS_ERR (btq->cmd_channel)) -return PTR_ERR (btq->cmd_channel); +if (IS_ERR (btq->cmd_channel)) { + ret =PTR_ERR (btq->cmd_channel); + goto destroy_acl_channel; + } hdev =hci_alloc_dev (); -if (!hdev) -return -ENOMEM ; +if (!hdev) { + ret = -ENOMEM ; + goto destroy_cmd_channel; + }hci_set_drvdata (hdev, btq); btq->hdev = hdev;
@@ -173,14 +177,21 @@ static int btqcomsmd_probe(struct platform_device *pdev) hdev->set_bdaddr = qca_set_bdaddr_rome; ret =hci_register_dev (hdev); -if (ret <0 ) { -hci_free_dev (hdev); -return ret; - } +if (ret <0 ) + goto hci_free_dev;platform_set_drvdata (pdev, btq);return 0 ; + +hci_free_dev: +hci_free_dev (hdev); +destroy_cmd_channel: +rpmsg_destroy_ept (btq->cmd_channel); +destroy_acl_channel: +rpmsg_destroy_ept (btq->acl_channel); + +return ret; }static int btqcomsmd_remove (struct platform_device *pdev)
drivers/char/hw_random/timeriomem-rng.c +1 -1
@@ -79,7 +79,7 @@ static int timeriomem_rng_read(struct hwrng *hwrng, void *data,*/ if (retval >0 )usleep_range (period_us, - period_us +min (1 , period_us /100 )); + period_us +max (1 , period_us /100 )); *(u32 *)data =readl (priv->io_base); retval +=sizeof (u32);
drivers/char/random.c +1 -1
@@ -1984,7 +1984,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)return -EPERM ;if (crng_init <2 )return -ENODATA ; -crng_reseed (&primary_crng,NULL ); +crng_reseed (&primary_crng, &input_pool); crng_global_init_time = jiffies -1 ;return 0 ;default :
drivers/char/tpm/tpm_tis_core.c +2 -1
@@ -68,7 +68,8 @@ static bool check_locality(struct tpm_chip *chip, int l)if (rc <0 )return false; -if ((access & (TPM_ACCESS_ACTIVE_LOCALITY |TPM_ACCESS_VALID )) == +if ((access & (TPM_ACCESS_ACTIVE_LOCALITY |TPM_ACCESS_VALID + |TPM_ACCESS_REQUEST_USE )) == (TPM_ACCESS_ACTIVE_LOCALITY |TPM_ACCESS_VALID )) { priv->locality = l;return true;
drivers/clk/meson/clk-pll.c +1 -1
@@ -178,7 +178,7 @@ static int meson_clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,if (parent_rate ==0 || rate ==0 )return -EINVAL ; - old_rate = rate; + old_rate =clk_hw_get_rate (hw); rate_set =meson_clk_get_pll_settings (pll, rate);if (!rate_set)
drivers/clocksource/mxs_timer.c +1 -4
@@ -152,10 +152,7 @@ static void mxs_irq_clear(char *state)/* Clear pending interrupt */ timrot_irq_acknowledge (); - -#ifdef DEBUG - pr_info("%s: changing mode to %s\n", __func__, state) -#endif /* DEBUG */ +pr_debug ("%s: changing mode to %s\n" , __func__, state); }static int mxs_shutdown (struct clock_event_device *evt)
drivers/cpufreq/brcmstb-avs-cpufreq.c +1 -2
@@ -1033,8 +1033,7 @@ static int brcm_avs_cpufreq_remove(struct platform_device *pdev)int ret; ret =cpufreq_unregister_driver (&brcm_avs_driver); -if (ret) -return ret; +WARN_ON (ret);brcm_avs_cpufreq_debug_exit (pdev);
drivers/crypto/bcm/cipher.c +1 -1
@@ -53,7 +53,7 @@/* ================= Device Structure ================== */ -struct device_private iproc_priv; +struct bcm_device_private iproc_priv;/* ==================== Parameters ===================== */
drivers/crypto/bcm/cipher.h +2 -2
@@ -432,7 +432,7 @@ struct spu_hw {u32 num_chan; }; -struct device_private { +struct bcm_device_private {struct platform_device *pdev;struct spu_hw spu;
@@ -479,6 +479,6 @@ struct device_private { struct mbox_chan **mbox; }; -extern struct device_private iproc_priv; +extern struct bcm_device_private iproc_priv;#endif
drivers/crypto/bcm/util.c +1 -1
@@ -401,7 +401,7 @@ char *spu_alg_name(enum spu_cipher_alg alg, enum spu_cipher_mode mode)static ssize_t spu_debugfs_read (struct file *filp,char __user *ubuf,size_t count,loff_t *offp) { -struct device_private *ipriv; +struct bcm_device_private *ipriv;char *buf;ssize_t ret, out_offset, out_count;int i;
drivers/crypto/sunxi-ss/sun4i-ss-cipher.c +73 -52
249 lines not on this page · raw message
drivers/dma/fsldma.c +6 -0
@@ -1218,6 +1218,7 @@ static int fsldma_of_probe(struct platform_device *op) {struct fsldma_device *fdev;struct device_node *child; +unsigned int i;int err; fdev =kzalloc (sizeof (*fdev),GFP_KERNEL );
@@ -1296,6 +1297,10 @@ static int fsldma_of_probe(struct platform_device *op)return 0 ; out_free_fdev: +for (i =0 ; i <FSL_DMA_MAX_CHANS_PER_DEVICE ; i++) { +if (fdev->chan[i]) +fsl_dma_chan_remove (fdev->chan[i]); + }irq_dispose_mapping (fdev->irq);iounmap (fdev->regs); out_free:
@@ -1318,6 +1323,7 @@ static int fsldma_of_remove(struct platform_device *op)if (fdev->chan[i])fsl_dma_chan_remove (fdev->chan[i]); } +irq_dispose_mapping (fdev->irq);iounmap (fdev->regs);kfree (fdev);
drivers/dma/hsu/pci.c +11 -10
@@ -29,22 +29,12 @@static irqreturn_t hsu_pci_irq (int irq,void *dev) {struct hsu_dma_chip *chip = dev; -struct pci_dev *pdev =to_pci_dev (chip->dev);u32 dmaisr;u32 status;unsigned short i;int ret =0 ;int err; -/* -* On Intel Tangier B0 and Anniedale the interrupt line, disregarding -* to have different numbers, is shared between HSU DMA and UART IPs. -* Thus on such SoCs we are expecting that IRQ handler is called in -* UART driver only. -*/ -if (pdev->device ==PCI_DEVICE_ID_INTEL_MRFLD_HSU_DMA ) -return IRQ_HANDLED ; - dmaisr =readl (chip->regs +HSU_PCI_DMAISR );for (i =0 ; i < chip->hsu->nr_channels; i++) {if (dmaisr &0x1 ) {
@@ -108,6 +98,17 @@ static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)if (ret) goto err_register_irq; +/* +* On Intel Tangier B0 and Anniedale the interrupt line, disregarding +* to have different numbers, is shared between HSU DMA and UART IPs. +* Thus on such SoCs we are expecting that IRQ handler is called in +* UART driver only. Instead of handling the spurious interrupt +* from HSU DMA here and waste CPU time and delay HSU UART interrupt +* handling, disable the interrupt entirely. +*/ +if (pdev->device ==PCI_DEVICE_ID_INTEL_MRFLD_HSU_DMA ) +disable_irq_nosync (chip->irq); +pci_set_drvdata (pdev, chip);return 0 ;
drivers/gpio/gpio-pcf857x.c +1 -1
@@ -357,7 +357,7 @@ static int pcf857x_probe(struct i2c_client *client,* reset state. Otherwise it flags pins to be driven low. */ gpio->out = ~n_latch; - gpio->status = gpio->out; + gpio->status = gpio->read (gpio->client); status =devm_gpiochip_add_data (&client->dev, &gpio->chip, gpio);if (status <0 )
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c +13 -9
@@ -279,11 +279,8 @@ int oaktrail_hdmi_i2c_init(struct pci_dev *dev) hdmi_dev =pci_get_drvdata (dev); i2c_dev =kzalloc (sizeof (struct hdmi_i2c_dev ),GFP_KERNEL ); -if (i2c_dev ==NULL ) { -DRM_ERROR ("Can't allocate interface\n" ); - ret = -ENOMEM ; - goto exit; - } +if (!i2c_dev) +return -ENOMEM ; i2c_dev->adap = &oaktrail_hdmi_i2c_adapter; i2c_dev->status =I2C_STAT_INIT ;
@@ -300,16 +297,23 @@ int oaktrail_hdmi_i2c_init(struct pci_dev *dev) oaktrail_hdmi_i2c_adapter.name, hdmi_dev);if (ret) {DRM_ERROR ("Failed to request IRQ for I2C controller\n" ); - goto err; + goto free_dev; }/* Adapter registration */ ret =i2c_add_numbered_adapter (&oaktrail_hdmi_i2c_adapter); -return ret; +if (ret) { +DRM_ERROR ("Failed to add I2C adapter\n" ); + goto free_irq; + } -err: +return 0 ; + +free_irq: +free_irq (dev->irq, hdmi_dev); +free_dev:kfree (i2c_dev); -exit: +return ret; }
drivers/gpu/drm/gma500/psb_drv.c +2 -0
@@ -323,6 +323,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)if (ret) goto out_err; + ret = -ENOMEM ; + dev_priv->mmu =psb_mmu_driver_init (dev,1 ,0 ,0 );if (!dev_priv->mmu) goto out_err;
drivers/gpu/drm/msm/dsi/phy/dsi_phy_20nm.c +1 -1
@@ -147,7 +147,7 @@ const struct msm_dsi_phy_cfg dsi_phy_20nm_cfgs = { .disable = dsi_20nm_phy_disable, .init = msm_dsi_phy_init_common, }, - .io_start = { 0xfd998300, 0xfd9a0300 }, + .io_start = { 0xfd998500, 0xfd9a0500 }, .num_dsi_phy = 2, };
drivers/hid/hid-core.c +6 -3
@@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report);* Register a new field for this report. */ -static struct hid_field *hid_register_field (struct hid_report *report,unsigned usages,unsigned values) +static struct hid_field *hid_register_field (struct hid_report *report,unsigned usages) {struct hid_field *field;
@@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned field =kzalloc ((sizeof (struct hid_field ) + usages *sizeof (struct hid_usage ) + - values *sizeof (unsigned )),GFP_KERNEL ); + usages *sizeof (unsigned )),GFP_KERNEL );if (!field)return NULL ;
@@ -280,7 +280,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign usages =max_t (unsigned, parser->local.usage_index, parser->global.report_count); - field =hid_register_field (report, usages, parser->global.report_count); + field =hid_register_field (report, usages);if (!field)return 0 ;
@@ -1129,6 +1129,9 @@ EXPORT_SYMBOL_GPL(hid_open_report);static s32 snto32 (__u32 value,unsigned n) { +if (!value || !n) +return 0 ; +switch (n) {case 8 :return ((__s8 )value);case 16 :return ((__s16 )value);
drivers/hid/wacom_wac.c +6 -1
@@ -2452,7 +2452,12 @@ static void wacom_wac_finger_event(struct hid_device *hdev, wacom_wac->hid_data.tipswitch = value;break ;case HID_DG_CONTACTMAX : - features->touch_max = value; +if (!features->touch_max) { + features->touch_max = value; + }else { +hid_warn (hdev,"%s: ignoring attempt to overwrite non-zero touch_max " +"%d -> %d\n" , __func__, features->touch_max, value); + }return ; }
drivers/hv/channel_mgmt.c +1 -2
@@ -989,8 +989,7 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)vmbus_device_unregister (channel->device_obj);put_device (dev); } - } -if (channel->primary_channel !=NULL ) { + }else if (channel->primary_channel !=NULL ) {/* * Sub-channel is being rescinded. Following is the channel * close sequence when initiated from the driveri (refer to
drivers/i2c/busses/i2c-brcmstb.c +1 -1
@@ -318,7 +318,7 @@ static int brcmstb_send_i2c_cmd(struct brcmstb_i2c_dev *dev, goto cmd_out; } -if ((CMD_RD ||CMD_WR ) && +if ((cmd ==CMD_RD || cmd ==CMD_WR ) &&bsc_readl (dev, iic_enable) &BSC_IIC_EN_NOACK_MASK ) { rc = -EREMOTEIO ; dev_dbg(dev->device, "controller received NOACK intr for %s\n",
drivers/infiniband/core/user_mad.c +6 -1
@@ -354,6 +354,11 @@ static ssize_t ib_umad_read(struct file *filp, char __user *buf,mutex_lock (&file->mutex); +if (file->agents_dead) { +mutex_unlock (&file->mutex); +return -EIO ; + } +while (list_empty (&file->recv_list)) {mutex_unlock (&file->mutex);
@@ -496,7 +501,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, agent =__get_agent (file, packet->mad.hdr.id);if (!agent) { - ret = -EINVAL ; + ret = -EIO ; goto err_up; }
drivers/infiniband/sw/rxe/rxe_recv.c +8 -3
@@ -36,21 +36,26 @@#include "rxe.h" #include "rxe_loc.h" +/* check that QP matches packet opcode type and is in a valid state */ static int check_type_state (struct rxe_dev *rxe,struct rxe_pkt_info *pkt,struct rxe_qp *qp) { +unsigned int pkt_type; +if (unlikely (!qp->valid)) goto err1; + pkt_type = pkt->opcode &0xe0 ; +switch (qp_type (qp)) {case IB_QPT_RC : -if (unlikely ((pkt->opcode &IB_OPCODE_RC ) !=0 )) { +if (unlikely (pkt_type !=IB_OPCODE_RC )) {pr_warn_ratelimited ("bad qp type\n" ); goto err1; }break ;case IB_QPT_UC : -if (unlikely (!(pkt->opcode &IB_OPCODE_UC ))) { +if (unlikely (pkt_type !=IB_OPCODE_UC )) {pr_warn_ratelimited ("bad qp type\n" ); goto err1; }
@@ -58,7 +63,7 @@ static int check_type_state(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,case IB_QPT_UD :case IB_QPT_SMI :case IB_QPT_GSI : -if (unlikely (!(pkt->opcode &IB_OPCODE_UD ))) { +if (unlikely (pkt_type !=IB_OPCODE_UD )) {pr_warn_ratelimited ("bad qp type\n" ); goto err1; }
drivers/input/joydev.c +5 -2
@@ -460,7 +460,7 @@ static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev,if (IS_ERR (abspam))return PTR_ERR (abspam); -for (i =0 ; i < joydev->nabs; i++) { +for (i =0 ; i < len && i < joydev->nabs; i++) {if (abspam[i] >ABS_MAX ) { retval = -EINVAL ; goto out;
@@ -484,6 +484,9 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,int i;int retval =0 ; +if (len %sizeof (*keypam)) +return -EINVAL ; + len =min (len,sizeof (joydev->keypam));/* Validate the map. */
@@ -491,7 +494,7 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,if (IS_ERR (keypam))return PTR_ERR (keypam); -for (i =0 ; i < joydev->nkey; i++) { +for (i =0 ; i < (len /2 ) && i < joydev->nkey; i++) {if (keypam[i] >KEY_MAX || keypam[i] <BTN_MISC ) { retval = -EINVAL ; goto out;
drivers/input/joystick/xpad.c +1 -0
@@ -322,6 +322,7 @@ static const struct xpad_device { { 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 }, { 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 }, { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE }, + { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE }, { 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 }, { 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE }, { 0x24c6, 0x5000, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
drivers/input/serio/i8042-x86ia64io.h +4 -0
@@ -592,6 +592,10 @@ static const struct dmi_system_id i8042_dmi_noselftest_table[] = { DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ }, + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */ + }, }, { } };
drivers/input/touchscreen/elo.c +3 -1
@@ -345,8 +345,10 @@ static int elo_connect(struct serio *serio, struct serio_driver *drv)switch (elo->id) {case 0 :/* 10-byte protocol */ -if (elo_setup_10 (elo)) +if (elo_setup_10 (elo)) { + err = -EIO ; goto fail3; + }break ;
drivers/input/touchscreen/raydium_i2c_ts.c +2 -1
@@ -419,6 +419,7 @@ static int raydium_i2c_write_object(struct i2c_client *client, enum raydium_bl_ack state) {int error; +static const u8 cmd[] = {0xFF ,0x39 }; error =raydium_i2c_send (client,RM_CMD_BOOT_WRT , data, len);if (error) {
@@ -427,7 +428,7 @@ static int raydium_i2c_write_object(struct i2c_client *client,return error; } - error =raydium_i2c_send (client,RM_CMD_BOOT_ACK ,NULL ,0 ); + error =raydium_i2c_send (client,RM_CMD_BOOT_ACK , cmd,sizeof (cmd));if (error) {dev_err (&client->dev,"Ack obj command failed: %d\n" , error);return error;
drivers/md/dm-era-target.c +60 -33
243 lines not on this page · raw message
drivers/media/i2c/ov5670.c +2 -1
@@ -2073,7 +2073,8 @@ static int ov5670_init_controls(struct ov5670 *ov5670)/* By default, V4L2_CID_PIXEL_RATE is read only */ ov5670->pixel_rate =v4l2_ctrl_new_std (ctrl_hdlr, &ov5670_ctrl_ops, -V4L2_CID_PIXEL_RATE ,0 , +V4L2_CID_PIXEL_RATE , + link_freq_configs[0 ].pixel_rate, link_freq_configs[0 ].pixel_rate,1 , link_freq_configs[0 ].pixel_rate);
drivers/media/pci/cx25821/cx25821-core.c +3 -1
@@ -986,8 +986,10 @@ int cx25821_riscmem_alloc(struct pci_dev *pci,__le32 *cpu;dma_addr_t dma =0 ; -if (NULL != risc->cpu && risc->size < size) +if (risc->cpu && risc->size < size) {pci_free_consistent (pci, risc->size, risc->cpu, risc->dma); + risc->cpu =NULL ; + }if (NULL == risc->cpu) { cpu =pci_zalloc_consistent (pci, size, &dma);if (NULL == cpu)
drivers/media/pci/saa7134/saa7134-empress.c +4 -1
@@ -293,8 +293,11 @@ static int empress_init(struct saa7134_dev *dev) q->lock = &dev->lock; q->dev = &dev->pci->dev; err =vb2_queue_init (q); -if (err) +if (err) { +video_device_release (dev->empress_dev); + dev->empress_dev =NULL ;return err; + } dev->empress_dev->queue = q;video_set_drvdata (dev->empress_dev, dev);
drivers/media/platform/pxa_camera.c +3 -0
@@ -1450,6 +1450,9 @@ static int pxac_vb2_prepare(struct vb2_buffer *vb)struct pxa_camera_dev *pcdev =vb2_get_drv_priv (vb->vb2_queue);struct pxa_buffer *buf =vb2_to_pxa_buffer (vb);int ret =0 ; +#ifdef DEBUG +int i; +#endif switch (pcdev->channels) {case 1 :
drivers/media/platform/vsp1/vsp1_drv.c +3 -1
@@ -866,8 +866,10 @@ static int vsp1_probe(struct platform_device *pdev) } done: -if (ret) +if (ret) {pm_runtime_disable (&pdev->dev); +rcar_fcp_put (vsp1->fcp); + }return ret; }
drivers/media/tuners/qm1d1c0042.c +3 -1
@@ -352,8 +352,10 @@ static int qm1d1c0042_init(struct dvb_frontend *fe)if (val == reg_initval[reg_index][0x00 ])break ; } -if (reg_index >=QM1D1C0042_NUM_REG_ROWS ) +if (reg_index >=QM1D1C0042_NUM_REG_ROWS ) { + ret = -EINVAL ; goto failed; + }memcpy (state->regs, reg_initval[reg_index],QM1D1C0042_NUM_REGS );usleep_range (2000 ,3000 );
drivers/media/usb/dvb-usb-v2/lmedm04.c +1 -1
@@ -436,7 +436,7 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap) ep =usb_pipe_endpoint (d->udev, lme_int->lme_urb->pipe);if (usb_endpoint_type (&ep->desc) ==USB_ENDPOINT_XFER_BULK ) - lme_int->lme_urb->pipe =usb_rcvbulkpipe (d->udev,0xa ), + lme_int->lme_urb->pipe =usb_rcvbulkpipe (d->udev,0xa ); lme_int->lme_urb->transfer_flags |=URB_NO_TRANSFER_DMA_MAP ;
drivers/media/usb/tm6000/tm6000-dvb.c +4 -0
@@ -150,6 +150,10 @@ static int tm6000_start_stream(struct tm6000_core *dev)if (ret <0 ) {printk (KERN_ERR "tm6000: error %i in %s during pipe reset\n" , ret, __func__); + +kfree (dvb->bulk_urb->transfer_buffer); +usb_free_urb (dvb->bulk_urb); + dvb->bulk_urb =NULL ;return ret; }else printk (KERN_ERR "tm6000: pipe resetted\n" );
drivers/media/usb/uvc/uvc_v4l2.c +9 -9
@@ -253,7 +253,9 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream, goto done;/* After the probe, update fmt with the values returned from -* negotiation with the device. +* negotiation with the device. Some devices return invalid bFormatIndex +* and bFrameIndex values, in which case we can only assume they have +* accepted the requested format as-is. */ for (i =0 ; i < stream->nformats; ++i) {if (probe->bFormatIndex == stream->format[i].index) {
@@ -262,11 +264,10 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream, } } -if (i == stream->nformats) { -uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFormatIndex %u\n" , +if (i == stream->nformats) +uvc_trace (UVC_TRACE_FORMAT , +"Unknown bFormatIndex %u, using default\n" , probe->bFormatIndex); -return -EINVAL ; - }for (i =0 ; i < format->nframes; ++i) {if (probe->bFrameIndex == format->frame[i].bFrameIndex) {
@@ -275,11 +276,10 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream, } } -if (i == format->nframes) { -uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFrameIndex %u\n" , +if (i == format->nframes) +uvc_trace (UVC_TRACE_FORMAT , +"Unknown bFrameIndex %u, using default\n" , probe->bFrameIndex); -return -EINVAL ; - } fmt->fmt.pix.width = frame->wWidth; fmt->fmt.pix.height = frame->wHeight;
drivers/mfd/bd9571mwv.c +3 -3
@@ -183,9 +183,9 @@ static int bd9571mwv_probe(struct i2c_client *client,return ret; } - ret =mfd_add_devices (bd->dev,PLATFORM_DEVID_AUTO , bd9571mwv_cells, -ARRAY_SIZE (bd9571mwv_cells),NULL ,0 , -regmap_irq_get_domain (bd->irq_data)); + ret =devm_mfd_add_devices (bd->dev,PLATFORM_DEVID_AUTO , + bd9571mwv_cells,ARRAY_SIZE (bd9571mwv_cells), +NULL ,0 ,regmap_irq_get_domain (bd->irq_data));if (ret) {regmap_del_irq_chip (bd->irq, bd->irq_data);return ret;
drivers/mfd/wm831x-auxadc.c +1 -2
@@ -98,11 +98,10 @@ static int wm831x_auxadc_read_irq(struct wm831x *wm831x,wait_for_completion_timeout (&req->done,msecs_to_jiffies (500 ));mutex_lock (&wm831x->auxadc_lock); - -list_del (&req->list); ret = req->val; out: +list_del (&req->list);mutex_unlock (&wm831x->auxadc_lock);kfree (req);
drivers/misc/eeprom/eeprom_93xx46.c +1 -0
@@ -523,3 +523,4 @@ MODULE_LICENSE("GPL");MODULE_DESCRIPTION ("Driver for 93xx46 EEPROMs" );MODULE_AUTHOR ("Anatolij Gustschin <[email protected]>" );MODULE_ALIAS ("spi:93xx46" ); +MODULE_ALIAS ("spi:eeprom-93xx46" );
drivers/misc/vmw_vmci/vmci_queue_pair.c +4 -1
@@ -639,6 +639,9 @@ static struct vmci_queue *qp_host_alloc_queue(u64 size) queue_page_size = num_pages *sizeof (*queue->kernel_if->u.h.page); +if (queue_size + queue_page_size >KMALLOC_MAX_SIZE ) +return NULL ; + queue =kzalloc (queue_size + queue_page_size,GFP_KERNEL );if (queue) { queue->q_header =NULL ;
@@ -732,7 +735,7 @@ static void qp_release_pages(struct page **pages,for (i =0 ; i < num_pages; i++) {if (dirty) -set_page_dirty (pages[i]); +set_page_dirty_lock (pages[i]);put_page (pages[i]); pages[i] =NULL ;
drivers/mmc/host/sdhci-esdhc-imx.c +2 -1
@@ -1354,9 +1354,10 @@ static int sdhci_esdhc_imx_remove(struct platform_device *pdev)struct sdhci_host *host =platform_get_drvdata (pdev);struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct pltfm_imx_data *imx_data =sdhci_pltfm_priv (pltfm_host); -int dead = (readl (host->ioaddr +SDHCI_INT_STATUS ) ==0xffffffff ); +int dead;pm_runtime_get_sync (&pdev->dev); + dead = (readl (host->ioaddr +SDHCI_INT_STATUS ) ==0xffffffff );pm_runtime_disable (&pdev->dev);pm_runtime_put_noidle (&pdev->dev);
drivers/mmc/host/usdhi6rol0.c +3 -1
@@ -1866,10 +1866,12 @@ static int usdhi6_probe(struct platform_device *pdev) ret =mmc_add_host (mmc);if (ret <0 ) - goto e_clk_off; + goto e_release_dma;return 0 ; +e_release_dma: +usdhi6_dma_release (host); e_clk_off:clk_disable_unprepare (host->clk); e_free_mmc:
drivers/mtd/spi-nor/cadence-quadspi.c +1 -1
@@ -465,7 +465,7 @@ static int cqspi_indirect_read_setup(struct spi_nor *nor,/* Setup dummy clock cycles */ dummy_clk = nor->read_dummy;if (dummy_clk >CQSPI_DUMMY_CLKS_MAX ) - dummy_clk =CQSPI_DUMMY_CLKS_MAX ; +return -EOPNOTSUPP ;if (dummy_clk /8 ) { reg |= (1 <<CQSPI_REG_RD_INSTR_MODE_EN_LSB );
drivers/mtd/spi-nor/hisi-sfc.c +3 -1
@@ -408,8 +408,10 @@ static int hisi_spi_nor_register_all(struct hifmc_host *host)for_each_available_child_of_node (dev->of_node, np) { ret =hisi_spi_nor_register (np, host); -if (ret) +if (ret) { +of_node_put (np); goto fail; + }if (host->num_chip ==HIFMC_MAX_CHIP_NUM ) {dev_warn (dev,"Flash device number exceeds the maximum chipselect number\n" );
drivers/net/ethernet/amd/xgbe/xgbe-common.h +14 -0
@@ -1279,10 +1279,18 @@#define MDIO_PMA_10GBR_FECCTRL 0x00ab#endif +#ifndef MDIO_PMA_RX_CTRL1 +#define MDIO_PMA_RX_CTRL1 0x8051 +#endif +#ifndef MDIO_PCS_DIG_CTRL #define MDIO_PCS_DIG_CTRL 0x8000#endif +#ifndef MDIO_PCS_DIGITAL_STAT +#define MDIO_PCS_DIGITAL_STAT 0x8010 +#endif +#ifndef MDIO_AN_XNP #define MDIO_AN_XNP 0x0016#endif
@@ -1358,6 +1366,8 @@#define XGBE_KR_TRAINING_ENABLE BIT(1)#define XGBE_PCS_CL37_BP BIT(12) +#define XGBE_PCS_PSEQ_STATE_MASK 0x1c +#define XGBE_PCS_PSEQ_STATE_POWER_GOOD 0x10#define XGBE_AN_CL37_INT_CMPLT BIT(0)#define XGBE_AN_CL37_INT_MASK 0x01
@@ -1375,6 +1385,10 @@#define XGBE_PMA_CDR_TRACK_EN_OFF 0x00#define XGBE_PMA_CDR_TRACK_EN_ON 0x01 +#define XGBE_PMA_RX_RST_0_MASK BIT(4) +#define XGBE_PMA_RX_RST_0_RESET_ON 0x10 +#define XGBE_PMA_RX_RST_0_RESET_OFF 0x00 +/* Bit setting and getting macros * The get macro will extract the current bit field value from within * the variable
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +1 -1
@@ -1355,7 +1355,7 @@ static void xgbe_phy_status(struct xgbe_prv_data *pdata) &an_restart);if (an_restart) {xgbe_phy_config_aneg (pdata); -return ; + goto adjust_link; }if (pdata->phy.link) {
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +35 -1
@@ -1782,6 +1782,27 @@ static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata)xgbe_phy_put_comm_ownership (pdata); } +static void xgbe_phy_rx_reset (struct xgbe_prv_data *pdata) +{ +int reg; + + reg =XMDIO_READ_BITS (pdata,MDIO_MMD_PCS ,MDIO_PCS_DIGITAL_STAT , +XGBE_PCS_PSEQ_STATE_MASK ); +if (reg ==XGBE_PCS_PSEQ_STATE_POWER_GOOD ) { +/* Mailbox command timed out, reset of RX block is required. +* This can be done by asseting the reset bit and wait for +* its compeletion. +*/ +XMDIO_WRITE_BITS (pdata,MDIO_MMD_PMAPMD ,MDIO_PMA_RX_CTRL1 , +XGBE_PMA_RX_RST_0_MASK ,XGBE_PMA_RX_RST_0_RESET_ON ); +ndelay (20 ); +XMDIO_WRITE_BITS (pdata,MDIO_MMD_PMAPMD ,MDIO_PMA_RX_CTRL1 , +XGBE_PMA_RX_RST_0_MASK ,XGBE_PMA_RX_RST_0_RESET_OFF ); +usleep_range (40 ,50 ); +netif_err (pdata, link, pdata->netdev,"firmware mailbox reset performed\n" ); + } +} +static void xgbe_phy_perform_ratechange (struct xgbe_prv_data *pdata,unsigned int cmd,unsigned int sub_cmd) {
@@ -1789,9 +1810,11 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,unsigned int wait;/* Log if a previous command did not complete */ -if (XP_IOREAD_BITS (pdata,XP_DRIVER_INT_RO ,STATUS )) +if (XP_IOREAD_BITS (pdata,XP_DRIVER_INT_RO ,STATUS )) {netif_dbg (pdata, link, pdata->netdev,"firmware mailbox not ready for command\n" ); +xgbe_phy_rx_reset (pdata); + }/* Construct the command */ XP_SET_BITS (s0,XP_DRIVER_SCRATCH_0 ,COMMAND , cmd);
@@ -1813,6 +1836,9 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,netif_dbg (pdata, link, pdata->netdev,"firmware mailbox command did not complete\n" ); + +/* Reset on error */ +xgbe_phy_rx_reset (pdata); }static void xgbe_phy_rrc (struct xgbe_prv_data *pdata)
@@ -2409,6 +2435,14 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)if (reg &MDIO_STAT1_LSTATUS )return 1 ; +if (pdata->phy.autoneg ==AUTONEG_ENABLE && + phy_data->port_mode ==XGBE_PORT_MODE_BACKPLANE ) { +if (!test_bit (XGBE_LINK_INIT , &pdata->dev_state)) { +netif_carrier_off (pdata->netdev); + *an_restart =1 ; + } + } +/* No link, attempt a receiver reset cycle */ if (phy_data->rrc_count++ >XGBE_RRC_FREQUENCY ) { phy_data->rrc_count =0 ;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -1
@@ -5752,9 +5752,10 @@ void bnxt_tx_disable(struct bnxt *bp) txr->dev_state =BNXT_DEV_STATE_CLOSING ; } } +/* Drop carrier first to prevent TX timeout */ +netif_carrier_off (bp->dev);/* Stop all TX queues */ netif_tx_disable (bp->dev); -netif_carrier_off (bp->dev); }void bnxt_tx_enable (struct bnxt *bp)
drivers/net/ethernet/ibm/ibmvnic.c +6 -1
@@ -201,8 +201,13 @@ static void free_long_term_buff(struct ibmvnic_adapter *adapter,if (!ltb->buff)return ; +/* VIOS automatically unmaps the long term buffer at remote +* end for the following resets: +* FAILOVER, MOBILITY, TIMEOUT. +*/ if (adapter->reset_reason !=VNIC_RESET_FAILOVER && - adapter->reset_reason !=VNIC_RESET_MOBILITY ) + adapter->reset_reason !=VNIC_RESET_MOBILITY && + adapter->reset_reason !=VNIC_RESET_TIMEOUT )send_request_unmap (adapter, ltb->map_id);dma_free_coherent (dev, ltb->size, ltb->buff, ltb->addr); }
drivers/net/ethernet/intel/i40e/i40e_main.c +0 -27
@@ -7185,7 +7185,6 @@ static int i40e_reset(struct i40e_pf *pf)static void i40e_rebuild (struct i40e_pf *pf,bool reinit,bool lock_acquired) {struct i40e_hw *hw = &pf->hw; -u8 set_fc_aq_fail =0 ;i40e_status ret;u32 val;int v;
@@ -7263,13 +7262,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)i40e_stat_str (&pf->hw, ret), i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status)); -/* make sure our flow control settings are restored */ - ret =i40e_set_fc (&pf->hw, &set_fc_aq_fail, true); -if (ret) -dev_dbg (&pf->pdev->dev,"setting flow control: ret = %s last_status = %s\n" , -i40e_stat_str (&pf->hw, ret), -i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status)); -/* Rebuild the VSIs and VEBs that existed before reset. * They are still in our local switch element arrays, so only * need to rebuild the switch model in the HW.
@@ -11286,7 +11278,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)int err;u32 val;u32 i; -u8 set_fc_aq_fail; err =pci_enable_device_mem (pdev);if (err)
@@ -11555,24 +11546,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto err_vsis; } -/* Make sure flow control is set according to current settings */ - err =i40e_set_fc (hw, &set_fc_aq_fail, true); -if (set_fc_aq_fail &I40E_SET_FC_AQ_FAIL_GET ) -dev_dbg (&pf->pdev->dev, -"Set fc with err %s aq_err %s on get_phy_cap\n" , -i40e_stat_str (hw, err), -i40e_aq_str (hw, hw->aq.asq_last_status)); -if (set_fc_aq_fail &I40E_SET_FC_AQ_FAIL_SET ) -dev_dbg (&pf->pdev->dev, -"Set fc with err %s aq_err %s on set_phy_config\n" , -i40e_stat_str (hw, err), -i40e_aq_str (hw, hw->aq.asq_last_status)); -if (set_fc_aq_fail &I40E_SET_FC_AQ_FAIL_UPDATE ) -dev_dbg (&pf->pdev->dev, -"Set fc with err %s aq_err %s on get_link_info\n" , -i40e_stat_str (hw, err), -i40e_aq_str (hw, hw->aq.asq_last_status)); -/* if FDIR VSI was set up, start it now */ for (i =0 ; i < pf->num_alloc_vsi; i++) {if (pf->vsi[i] && pf->vsi[i]->type ==I40E_VSI_FDIR ) {
drivers/net/ethernet/intel/i40e/i40e_txrx.c +6 -3
@@ -2829,13 +2829,16 @@ static int i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags, l4_proto = ip.v4->protocol; }else if (*tx_flags &I40E_TX_FLAGS_IPV6 ) { +int ret; + tunnel |=I40E_TX_CTX_EXT_IP_IPV6 ; exthdr = ip.hdr +sizeof (*ip.v6); l4_proto = ip.v6->nexthdr; -if (l4.hdr != exthdr) -ipv6_skip_exthdr (skb, exthdr - skb->data, - &l4_proto, &frag_off); + ret =ipv6_skip_exthdr (skb, exthdr - skb->data, + &l4_proto, &frag_off); +if (ret <0 ) +return -1 ; }/* define outer transport */
drivers/net/ethernet/marvell/mvneta.c +8 -1
@@ -2958,7 +2958,9 @@ static int mvneta_txq_init(struct mvneta_port *pp,mvneta_tx_done_pkts_coal_set (pp, txq, txq->done_pkts_coal);/* Setup XPS mapping */ -if (txq_number >1 ) +if (pp->neta_armada3700) + cpu =0 ; +else if (txq_number >1 ) cpu = txq->id %num_present_cpus ();else cpu = pp->rxq_def %num_present_cpus ();
@@ -3409,6 +3411,11 @@ static int mvneta_cpu_online(unsigned int cpu, struct hlist_node *node) node_online);struct mvneta_pcpu_port *port =per_cpu_ptr (pp->ports, cpu); +/* Armada 3700's per-cpu interrupt for mvneta is broken, all interrupts +* are routed to CPU 0, so we don't need all the cpu-hotplug support +*/ +if (pp->neta_armada3700) +return 0 ;spin_lock (&pp->lock);/*
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +1 -0
@@ -4988,6 +4988,7 @@ static int mlx4_do_mirror_rule(struct mlx4_dev *dev, struct res_fs_rule *fs_ruleif (!fs_rule->mirr_mbox) {mlx4_err (dev,"rule mirroring mailbox is null\n" ); +mlx4_free_cmd_mailbox (dev, mailbox);return -EINVAL ; }memcpy (mailbox->buf, fs_rule->mirr_mbox, fs_rule->mirr_mbox_size);
drivers/net/ethernet/sun/sunvnet_common.c +4 -19
@@ -1352,27 +1352,12 @@ sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,if (vio_version_after_eq (&port->vio,1 ,3 )) localmtu -=VLAN_HLEN ; -if (skb->protocol ==htons (ETH_P_IP )) { -struct flowi4 fl4; -struct rtable *rt =NULL ; - -memset (&fl4,0 ,sizeof (fl4)); - fl4.flowi4_oif = dev->ifindex; - fl4.flowi4_tos =RT_TOS (ip_hdr (skb)->tos); - fl4.daddr =ip_hdr (skb)->daddr; - fl4.saddr =ip_hdr (skb)->saddr; - - rt =ip_route_output_key (dev_net (dev), &fl4); -if (!IS_ERR (rt)) { -skb_dst_set (skb, &rt->dst); -icmp_send (skb,ICMP_DEST_UNREACH , -ICMP_FRAG_NEEDED , -htonl (localmtu)); - } - } +if (skb->protocol ==htons (ETH_P_IP )) +icmp_ndo_send (skb,ICMP_DEST_UNREACH ,ICMP_FRAG_NEEDED , +htonl (localmtu));#if IS_ENABLED (CONFIG_IPV6 ) else if (skb->protocol == htons(ETH_P_IPV6)) - icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, localmtu); + icmpv6_ndo_send(skb, ICMPV6_PKT_TOOBIG, 0, localmtu);#endif goto out_dropped; }
drivers/net/gtp.c +2 -3
@@ -549,9 +549,8 @@ static int gtp_build_skb_ip4(struct sk_buff *skb, struct net_device *dev,if (!skb_is_gso (skb) && (iph->frag_off &htons (IP_DF )) && mtu <ntohs (iph->tot_len)) {netdev_dbg (dev,"packet too big, fragmentation needed\n" ); -memset (IPCB (skb),0 ,sizeof (*IPCB (skb))); -icmp_send (skb,ICMP_DEST_UNREACH ,ICMP_FRAG_NEEDED , -htonl (mtu)); +icmp_ndo_send (skb,ICMP_DEST_UNREACH ,ICMP_FRAG_NEEDED , +htonl (mtu)); goto err_rt; }
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1280,6 +1280,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */ {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/ {QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */ + {QMI_FIXED_INTF(0x1e2d, 0x00b7, 0)}, /* Cinterion MV31 RmNet */ {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
drivers/net/wireless/ath/ath9k/debug.c +4 -1
@@ -1236,8 +1236,11 @@ static ssize_t write_file_nf_override(struct file *file, ah->nf_override = val; -if (ah->curchan) +if (ah->curchan) { +ath9k_ps_wakeup (sc);ath9k_hw_loadnf (ah, ah->curchan); +ath9k_ps_restore (sc); + }return count; }
drivers/net/wireless/broadcom/b43/phy_n.c +1 -1
@@ -5320,7 +5320,7 @@ static void b43_nphy_restore_cal(struct b43_wldev *dev)for (i =0 ; i <4 ; i++) {if (dev->phy.rev >=3 ) - table[i] = coef[i]; + coef[i] = table[i];else coef[i] =0 ; }
drivers/net/xen-netback/interface.c +5 -3
@@ -162,13 +162,15 @@ irqreturn_t xenvif_interrupt(int irq, void *dev_id) {struct xenvif_queue *queue = dev_id;int old; +bool has_rx, has_tx; old =atomic_fetch_or (NETBK_COMMON_EOI , &queue->eoi_pending);WARN (old,"Interrupt while EOI pending\n" ); -/* Use bitwise or as we need to call both functions. */ -if ((!xenvif_handle_tx_interrupt (queue) | - !xenvif_handle_rx_interrupt (queue))) { + has_tx =xenvif_handle_tx_interrupt (queue); + has_rx =xenvif_handle_rx_interrupt (queue); + +if (!has_rx && !has_tx) {atomic_andnot (NETBK_COMMON_EOI , &queue->eoi_pending);xen_irq_lateeoi (irq,XEN_EOI_FLAG_SPURIOUS ); }
drivers/nvdimm/dimm_devs.c +15 -3
@@ -347,16 +347,16 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr, }static DEVICE_ATTR_RO (state); -static ssize_t available_slots_show (struct device *dev, -struct device_attribute *attr,char *buf) +static ssize_t __available_slots_show (struct nvdimm_drvdata *ndd,char *buf) { -struct nvdimm_drvdata *ndd =dev_get_drvdata (dev); +struct device *dev;ssize_t rc;u32 nfree;if (!ndd)return -ENXIO ; + dev = ndd->dev;nvdimm_bus_lock (dev); nfree =nd_label_nfree (ndd);if (nfree -1 > nfree) {
@@ -368,6 +368,18 @@ static ssize_t available_slots_show(struct device *dev,nvdimm_bus_unlock (dev);return rc; } + +static ssize_t available_slots_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +ssize_t rc; + +device_lock (dev); + rc =__available_slots_show (dev_get_drvdata (dev), buf); +device_unlock (dev); + +return rc; +}static DEVICE_ATTR_RO (available_slots);static struct attribute *nvdimm_attributes[] = {
drivers/of/fdt.c +10 -2
@@ -1212,8 +1212,16 @@ int __init __weak early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size)int __init __weak early_init_dt_reserve_memory_arch (phys_addr_t base,phys_addr_t size,bool nomap) { -if (nomap) -return memblock_remove (base, size); +if (nomap) { +/* +* If the memory is already reserved (by another region), we +* should not allow it to be marked nomap. +*/ +if (memblock_is_region_reserved (base, size)) +return -EBUSY ; + +return memblock_mark_nomap (base, size); + }return memblock_reserve (base, size); }
drivers/pci/syscall.c +5 -5
@@ -22,7 +22,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,u16 word;u32 dword;long err; -long cfg_ret; +int cfg_ret;if (!capable (CAP_SYS_ADMIN ))return -EPERM ;
@@ -48,7 +48,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn, } err = -EIO ; -if (cfg_ret !=PCIBIOS_SUCCESSFUL ) +if (cfg_ret) goto error;switch (len) {
@@ -106,7 +106,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,if (err)break ; err =pci_user_write_config_byte (dev, off, byte); -if (err !=PCIBIOS_SUCCESSFUL ) +if (err) err = -EIO ;break ;
@@ -115,7 +115,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,if (err)break ; err =pci_user_write_config_word (dev, off, word); -if (err !=PCIBIOS_SUCCESSFUL ) +if (err) err = -EIO ;break ;
@@ -124,7 +124,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,if (err)break ; err =pci_user_write_config_dword (dev, off, dword); -if (err !=PCIBIOS_SUCCESSFUL ) +if (err) err = -EIO ;break ;
drivers/power/reset/at91-sama5d2_shdwc.c +1 -1
@@ -36,7 +36,7 @@#define AT91_SHDW_MR 0x04/* Shut Down Mode Register */ #define AT91_SHDW_WKUPDBC_SHIFT 24 -#define AT91_SHDW_WKUPDBC_MASK GENMASK(31, 16) +#define AT91_SHDW_WKUPDBC_MASK GENMASK(26, 24)#define AT91_SHDW_WKUPDBC (x) (((x) << AT91_SHDW_WKUPDBC_SHIFT) \ & AT91_SHDW_WKUPDBC_MASK)
drivers/pwm/pwm-rockchip.c +0 -1
@@ -370,7 +370,6 @@ static int rockchip_pwm_probe(struct platform_device *pdev) ret =pwmchip_add (&pc->chip);if (ret <0 ) { -clk_unprepare (pc->clk);dev_err (&pdev->dev,"pwmchip_add() failed: %d\n" , ret); goto err_pclk; }
drivers/regulator/axp20x-regulator.c +3 -4
@@ -493,7 +493,7 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)static int axp20x_regulator_parse_dt (struct platform_device *pdev) {struct device_node *np, *regulators; -int ret; +int ret =0 ;u32 dcdcfreq =0 ; np =of_node_get (pdev->dev.parent->of_node);
@@ -508,13 +508,12 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev) ret =axp20x_set_dcdc_freq (pdev, dcdcfreq);if (ret <0 ) {dev_err (&pdev->dev,"Error setting dcdc frequency: %d\n" , ret); -return ret; } -of_node_put (regulators); } -return 0 ; +of_node_put (np); +return ret; }static int axp20x_set_dcdc_workmode (struct regulator_dev *rdev,int id,u32 workmode)
drivers/rtc/Kconfig +1 -0
@@ -625,6 +625,7 @@ config RTC_DRV_S5M tristate "Samsung S2M/S5M series" depends on MFD_SEC_CORE || COMPILE_TEST select REGMAP_IRQ + select REGMAP_I2C help If you say yes here you will get support for the RTC of Samsung S2MPS14 and S5M PMIC series.
drivers/scsi/bnx2fc/Kconfig +1 -0
@@ -4,6 +4,7 @@ config SCSI_BNX2X_FCOE depends on (IPV6 || IPV6=n) depends on LIBFC depends on LIBFCOE + depends on MMU select NETDEVICES select ETHERNET select NET_VENDOR_BROADCOM
drivers/spi/spi-atmel.c +1 -1
@@ -1582,7 +1582,7 @@ static int atmel_spi_probe(struct platform_device *pdev)if (ret ==0 ) { as->use_dma = true; }else if (ret == -EPROBE_DEFER ) { -return ret; + goto out_unmap_regs; } }else if (as->caps.has_pdc_support) { as->use_pdc = true;
drivers/spi/spi-pxa2xx-pci.c +19 -8
@@ -21,7 +21,8 @@ enum {PORT_BSW1 ,PORT_BSW2 ,PORT_CE4100 , - PORT_LPT, +PORT_LPT0 , + PORT_LPT1, }; struct pxa_spi_info {
@@ -55,8 +56,10 @@ static struct dw_dma_slave bsw1_rx_param = { .src_id = 7 };static struct dw_dma_slave bsw2_tx_param = { .dst_id =8 };static struct dw_dma_slave bsw2_rx_param = { .src_id =9 }; -static struct dw_dma_slave lpt_tx_param = { .dst_id =0 }; -static struct dw_dma_slave lpt_rx_param = { .src_id =1 }; +static struct dw_dma_slave lpt1_tx_param = { .dst_id =0 }; +static struct dw_dma_slave lpt1_rx_param = { .src_id =1 }; +static struct dw_dma_slave lpt0_tx_param = { .dst_id =2 }; +static struct dw_dma_slave lpt0_rx_param = { .src_id =3 };static bool lpss_dma_filter (struct dma_chan *chan,void *param) {
@@ -182,12 +185,19 @@ static struct pxa_spi_info spi_info_configs[] = { .num_chipselect = 1, .max_clk_rate = 50000000, }, - [PORT_LPT] = { + [PORT_LPT0] = { .type = LPSS_LPT_SSP, .port_id = 0, .setup = lpss_spi_setup, - .tx_param = &lpt_tx_param, - .rx_param = &lpt_rx_param, + .tx_param = &lpt0_tx_param, + .rx_param = &lpt0_rx_param, + }, + [PORT_LPT1] = { + .type = LPSS_LPT_SSP, + .port_id = 1, + .setup = lpss_spi_setup, + .tx_param = &lpt1_tx_param, + .rx_param = &lpt1_rx_param, }, };
@@ -281,8 +291,9 @@ static const struct pci_device_id pxa2xx_spi_pci_devices[] = { { PCI_VDEVICE(INTEL, 0x2290), PORT_BSW1 }, { PCI_VDEVICE(INTEL, 0x22ac), PORT_BSW2 }, { PCI_VDEVICE(INTEL, 0x2e6a), PORT_CE4100 }, - { PCI_VDEVICE(INTEL, 0x9ce6), PORT_LPT }, - { }, + { PCI_VDEVICE(INTEL, 0x9ce5), PORT_LPT0 }, + { PCI_VDEVICE(INTEL, 0x9ce6), PORT_LPT1 }, + { } };MODULE_DEVICE_TABLE (pci, pxa2xx_spi_pci_devices);
drivers/spi/spi-s3c24xx-fiq.S +3 -6
@@ -36,7 +36,6 @@ @ and an offset to the irq acknowledgment word ENTRY(s3c24xx_spi_fiq_rx) -s3c24xx_spi_fix_rx: .word fiq_rx_end - fiq_rx_start .word fiq_rx_irq_ack - fiq_rx_start fiq_rx_start:
@@ -50,7 +49,7 @@ fiq_rx_start: strb fiq_rtmp, [ fiq_rspi, # S3C2410_SPTDAT ] subs fiq_rcount, fiq_rcount, #1 - subnes pc, lr, #4 @@ return, still have work to do + subsne pc, lr, #4 @@ return, still have work to do @@ set IRQ controller so that next op will trigger IRQ mov fiq_rtmp, #0
@@ -62,7 +61,6 @@ fiq_rx_irq_ack: fiq_rx_end: ENTRY(s3c24xx_spi_fiq_txrx) -s3c24xx_spi_fiq_txrx: .word fiq_txrx_end - fiq_txrx_start .word fiq_txrx_irq_ack - fiq_txrx_start fiq_txrx_start:
@@ -77,7 +75,7 @@ fiq_txrx_start: strb fiq_rtmp, [ fiq_rspi, # S3C2410_SPTDAT ] subs fiq_rcount, fiq_rcount, #1 - subnes pc, lr, #4 @@ return, still have work to do + subsne pc, lr, #4 @@ return, still have work to do mov fiq_rtmp, #0 str fiq_rtmp, [ fiq_rirq, # S3C2410_INTMOD - S3C24XX_VA_IRQ ]
@@ -89,7 +87,6 @@ fiq_txrx_irq_ack: fiq_txrx_end: ENTRY(s3c24xx_spi_fiq_tx) -s3c24xx_spi_fix_tx: .word fiq_tx_end - fiq_tx_start .word fiq_tx_irq_ack - fiq_tx_start fiq_tx_start:
@@ -102,7 +99,7 @@ fiq_tx_start: strb fiq_rtmp, [ fiq_rspi, # S3C2410_SPTDAT ] subs fiq_rcount, fiq_rcount, #1 - subnes pc, lr, #4 @@ return, still have work to do + subsne pc, lr, #4 @@ return, still have work to do mov fiq_rtmp, #0 str fiq_rtmp, [ fiq_rirq, # S3C2410_INTMOD - S3C24XX_VA_IRQ ]
drivers/spi/spi-stm32.c +4 -0
@@ -992,6 +992,10 @@ static int stm32_spi_transfer_one(struct spi_master *master,struct stm32_spi *spi =spi_master_get_devdata (master);int ret; +/* Don't do anything on 0 bytes transfers */ +if (transfer->len ==0 ) +return 0 ; + spi->tx_buf = transfer->tx_buf; spi->rx_buf = transfer->rx_buf; spi->tx_len = spi->tx_buf ? transfer->len :0 ;
drivers/staging/rtl8188eu/os_dep/usb_intf.c +1 -0
@@ -49,6 +49,7 @@ static const struct usb_device_id rtw_usb_id_tbl[] = { {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */ {USB_DEVICE(0x2C4E, 0x0102)}, /* MERCUSYS MW150US v2 */ {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */ + {USB_DEVICE(0x7392, 0xb811)}, /* Edimax EW-7811UN V2 */ {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill RNX-N150NUB */ {} /* Terminating entry */ };
drivers/staging/rtl8723bs/os_dep/wifi_regd.c +1 -1
@@ -39,7 +39,7 @@ NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM)static const struct ieee80211_regdomain rtw_regdom_rd = { - .n_reg_rules =3 , + .n_reg_rules =2 , .alpha2 ="99" , .reg_rules = {RTW_2GHZ_CH01_11 ,
drivers/usb/core/quirks.c +3 -0
@@ -230,6 +230,9 @@ static const struct usb_device_id usb_quirk_list[] = {/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, + /* ELMO L-12F document camera */ + { USB_DEVICE(0x09a1, 0x0028), .driver_info = USB_QUIRK_DELAY_CTRL_MSG }, + /* Broadcom BCM92035DGROM BT dongle */ { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
drivers/usb/dwc2/hcd.c +8 -7
@@ -1490,19 +1490,20 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,if (num_packets > max_hc_pkt_count) { num_packets = max_hc_pkt_count; chan->xfer_len = num_packets * chan->max_packet; + }else if (chan->ep_is_in) { +/* +* Always program an integral # of max packets +* for IN transfers. +* Note: This assumes that the input buffer is +* aligned and sized accordingly. +*/ + chan->xfer_len = num_packets * chan->max_packet; } }else {/* Need 1 packet for transfer length of 0 */ num_packets =1 ; } -if (chan->ep_is_in) -/* -* Always program an integral # of max packets for IN -* transfers -*/ - chan->xfer_len = num_packets * chan->max_packet; -if (chan->ep_type ==USB_ENDPOINT_XFER_INT || chan->ep_type ==USB_ENDPOINT_XFER_ISOC )/*
drivers/usb/dwc2/hcd_intr.c +13 -1
@@ -487,7 +487,7 @@ static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg, &short_read);if (urb->actual_length + xfer_length > urb->length) { -dev_warn (hsotg->dev,"%s(): trimming xfer length\n" , __func__); +dev_dbg (hsotg->dev,"%s(): trimming xfer length\n" , __func__); xfer_length = urb->length - urb->actual_length; }
@@ -1939,6 +1939,18 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg, qtd->error_count++;dwc2_update_urb_state_abn (hsotg, chan, chnum, qtd->urb, qtd,DWC2_HC_XFER_XACT_ERR ); +/* +* We can get here after a completed transaction +* (urb->actual_length >= urb->length) which was not reported +* as completed. If that is the case, and we do not abort +* the transfer, a transfer of size 0 will be enqueued +* subsequently. If urb->actual_length is not DMA-aligned, +* the buffer will then point to an unaligned address, and +* the resulting behavior is undefined. Bail out in that +* situation. +*/ +if (qtd->urb->actual_length >= qtd->urb->length) + qtd->error_count =3 ;dwc2_hcd_save_data_toggle (hsotg, chan, chnum, qtd);dwc2_halt_channel (hsotg, chan, qtd,DWC2_HC_XFER_XACT_ERR ); }
drivers/usb/dwc3/gadget.c +17 -2
@@ -606,8 +606,23 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, params.param0 |=DWC3_DEPCFG_FIFO_NUMBER (dep->number >>1 );if (desc->bInterval) { - params.param1 |=DWC3_DEPCFG_BINTERVAL_M1 (desc->bInterval -1 ); - dep->interval =1 << (desc->bInterval -1 ); +u8 bInterval_m1; + +/* +* Valid range for DEPCFG.bInterval_m1 is from 0 to 13, and it +* must be set to 0 when the controller operates in full-speed. +*/ + bInterval_m1 =min_t (u8, desc->bInterval -1 ,13 ); +if (dwc->gadget.speed ==USB_SPEED_FULL ) + bInterval_m1 =0 ; + +if (usb_endpoint_type (desc) ==USB_ENDPOINT_XFER_INT && + dwc->gadget.speed ==USB_SPEED_FULL ) + dep->interval = desc->bInterval; +else + dep->interval =1 << (desc->bInterval -1 ); + + params.param1 |=DWC3_DEPCFG_BINTERVAL_M1 (bInterval_m1); }return dwc3_send_gadget_ep_cmd (dep,DWC3_DEPCMD_SETEPCONFIG , ¶ms);
drivers/usb/gadget/function/u_audio.c +14 -3
@@ -98,7 +98,12 @@ static void u_audio_iso_complete(struct usb_ep *ep, struct usb_request *req)struct snd_uac_chip *uac = prm->uac;/* i/f shutting down */ -if (!prm->ep_enabled || req->status == -ESHUTDOWN ) +if (!prm->ep_enabled) { +usb_ep_free_request (ep, req); +return ; + } + +if (req->status == -ESHUTDOWN )return ;/*
@@ -360,8 +365,14 @@ static inline void free_ep(struct uac_rtd_params *prm, struct usb_ep *ep)for (i =0 ; i < params->req_number; i++) {if (prm->ureq[i].req) { -usb_ep_dequeue (ep, prm->ureq[i].req); -usb_ep_free_request (ep, prm->ureq[i].req); +if (usb_ep_dequeue (ep, prm->ureq[i].req)) +usb_ep_free_request (ep, prm->ureq[i].req); +/* +* If usb_ep_dequeue() cannot successfully dequeue the +* request, the request will be freed by the completion +* callback. +*/ + prm->ureq[i].req =NULL ; } }
drivers/usb/musb/musb_core.c +17 -14
@@ -2104,32 +2104,35 @@ int musb_queue_resume_work(struct musb *musb, {struct musb_pending_work *w;unsigned long flags; +bool is_suspended;int error;if (WARN_ON (!callback))return -EINVAL ; -if (pm_runtime_active (musb->controller)) -return callback (musb, data); +spin_lock_irqsave (&musb->list_lock, flags); + is_suspended = musb->is_runtime_suspended; + +if (is_suspended) { + w =devm_kzalloc (musb->controller,sizeof (*w),GFP_ATOMIC ); +if (!w) { + error = -ENOMEM ; + goto out_unlock; + } - w =devm_kzalloc (musb->controller,sizeof (*w),GFP_ATOMIC ); -if (!w) -return -ENOMEM ; + w->callback = callback; + w->data = data; - w->callback = callback; - w->data = data; -spin_lock_irqsave (&musb->list_lock, flags); -if (musb->is_runtime_suspended) {list_add_tail (&w->node, &musb->pending_list); error =0 ; - }else { -dev_err (musb->controller,"could not add resume work %p\n" , - callback); -devm_kfree (musb->controller, w); - error = -EINPROGRESS ; } + +out_unlock:spin_unlock_irqrestore (&musb->list_lock, flags); +if (!is_suspended) + error =callback (musb, data); +return error; }EXPORT_SYMBOL_GPL (musb_queue_resume_work);
drivers/usb/renesas_usbhs/fifo.c +2 -0
@@ -137,6 +137,8 @@ struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt)usbhsf_dma_unmap (pkt); } +usbhs_pipe_running (pipe,0 ); +__usbhsf_pkt_del (pkt); }
drivers/usb/serial/mos7720.c +3 -1
@@ -1252,8 +1252,10 @@ static int mos7720_write(struct tty_struct *tty, struct usb_serial_port *port,if (urb->transfer_buffer ==NULL ) { urb->transfer_buffer =kmalloc (URB_TRANSFER_BUFFER_SIZE ,GFP_ATOMIC ); -if (!urb->transfer_buffer) +if (!urb->transfer_buffer) { + bytes_sent = -ENOMEM ; goto exit; + } } transfer_size =min (count,URB_TRANSFER_BUFFER_SIZE );
drivers/usb/serial/mos7840.c +3 -1
@@ -1352,8 +1352,10 @@ static int mos7840_write(struct tty_struct *tty, struct usb_serial_port *port,if (urb->transfer_buffer ==NULL ) { urb->transfer_buffer =kmalloc (URB_TRANSFER_BUFFER_SIZE ,GFP_ATOMIC ); -if (!urb->transfer_buffer) +if (!urb->transfer_buffer) { + bytes_sent = -ENOMEM ; goto exit; + } } transfer_size =min (count,URB_TRANSFER_BUFFER_SIZE );
drivers/usb/serial/option.c +2 -1
@@ -1572,7 +1572,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1274, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1275, 0xff, 0xff, 0xff) }, + { USB_DEVICE(ZTE_VENDOR_ID, 0x1275), /* ZTE P685M */ + .driver_info = RSVD(3) | RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1276, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1277, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1278, 0xff, 0xff, 0xff) },
drivers/video/fbdev/Kconfig +1 -1
@@ -1411,6 +1411,7 @@ config FB_ATY select FB_CFB_IMAGEBLIT select FB_BACKLIGHT if FB_ATY_BACKLIGHT select FB_MACMODES if PPC + select FB_ATY_CT if SPARC64 && PCI help This driver supports graphics boards with the ATI Mach64 chips. Say Y if you have such a graphics board.
@@ -1421,7 +1422,6 @@ config FB_ATY config FB_ATY_CT bool "Mach64 CT/VT/GT/LT (incl. 3D RAGE) support" depends on PCI && FB_ATY - default y if SPARC64 && PCI help Say Y here to support use of ATI's 64-bit Rage boards (or other boards based on the Mach64 CT, VT, GT, and LT chipsets) as a
drivers/watchdog/mei_wdt.c +1 -0
@@ -390,6 +390,7 @@ static int mei_wdt_register(struct mei_wdt *wdt)watchdog_set_drvdata (&wdt->wdd, wdt);watchdog_stop_on_reboot (&wdt->wdd); +watchdog_stop_on_unregister (&wdt->wdd); ret =watchdog_register_device (&wdt->wdd);if (ret) {
fs/affs/namei.c +3 -1
@@ -461,8 +461,10 @@ affs_xrename(struct inode *old_dir, struct dentry *old_dentry,return -EIO ; bh_new =affs_bread (sb,d_inode (new_dentry)->i_ino); -if (!bh_new) +if (!bh_new) { +affs_brelse (bh_old);return -EIO ; + }/* Remove old header from its parent directory. */ affs_lock_dir (old_dir);
fs/btrfs/ctree.c +5 -2
@@ -282,9 +282,12 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, ret =btrfs_inc_ref (trans, root, cow,1 ); else ret =btrfs_inc_ref (trans, root, cow,0 ); - -if (ret) +if (ret) { +btrfs_tree_unlock (cow); +free_extent_buffer (cow); +btrfs_abort_transaction (trans, ret);return ret; + }btrfs_mark_buffer_dirty (cow); *cow_ret = cow;
fs/btrfs/free-space-cache.c +5 -1
@@ -759,8 +759,10 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,while (num_entries) { e =kmem_cache_zalloc (btrfs_free_space_cachep,GFP_NOFS ); -if (!e) +if (!e) { + ret = -ENOMEM ; goto free_cache; + } ret =io_ctl_read_entry (&io_ctl, e, &type);if (ret) {
@@ -769,6 +771,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, }if (!e->bytes) { + ret =-1 ;kmem_cache_free (btrfs_free_space_cachep, e); goto free_cache; }
@@ -788,6 +791,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode, num_bitmaps--; e->bitmap =kzalloc (PAGE_SIZE ,GFP_NOFS );if (!e->bitmap) { + ret = -ENOMEM ;kmem_cache_free ( btrfs_free_space_cachep, e); goto free_cache;
fs/btrfs/relocation.c +1 -3
@@ -1344,9 +1344,7 @@ static void __del_reloc_root(struct btrfs_root *root)RB_CLEAR_NODE (&node->rb_node); }spin_unlock (&rc->reloc_root_tree.lock); -if (!node) -return ; -BUG_ON ((struct btrfs_root *)node->data != root); +ASSERT (!node || (struct btrfs_root *)node->data == root); }spin_lock (&fs_info->trans_lock);
fs/cifs/connect.c +1 -0
@@ -3607,6 +3607,7 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info, cifs_sb->prepath =kstrdup (pvolume_info->prepath,GFP_KERNEL );if (cifs_sb->prepath ==NULL )return -ENOMEM ; + cifs_sb->mnt_cifs_flags |=CIFS_MOUNT_USE_PREFIX_PATH ; }return 0 ;
fs/ext4/namei.c +3 -4
@@ -2293,11 +2293,10 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname, (frame - 1)->bh);if (err) goto journal_error; -if (restart) { - err =ext4_handle_dirty_dx_node (handle, dir, - frame->bh); + err =ext4_handle_dirty_dx_node (handle, dir, + frame->bh); +if (err) goto journal_error; - } }else {struct dx_root *dxroot; memcpy((char *) entries2, (char *) entries,
fs/f2fs/file.c +2 -1
@@ -729,7 +729,8 @@ static void __setattr_copy(struct inode *inode, const struct iattr *attr)if (ia_valid &ATTR_MODE ) {umode_t mode = attr->ia_mode; -if (!in_group_p (inode->i_gid) && !capable (CAP_FSETID )) +if (!in_group_p (inode->i_gid) && + !capable_wrt_inode_uidgid (inode,CAP_FSETID )) mode &= ~S_ISGID ;set_acl_inode (inode, mode); }
fs/gfs2/lock_dlm.c +2 -6
@@ -283,7 +283,6 @@ static void gdlm_put_lock(struct gfs2_glock *gl) {struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;struct lm_lockstruct *ls = &sdp->sd_lockstruct; -int lvb_needs_unlock =0 ;int error;if (gl->gl_lksb.sb_lkid ==0 ) {
@@ -296,13 +295,10 @@ static void gdlm_put_lock(struct gfs2_glock *gl)gfs2_sbstats_inc (gl,GFS2_LKS_DCOUNT );gfs2_update_request_times (gl); -/* don't want to skip dlm_unlock writing the lvb when lock is ex */ - -if (gl->gl_lksb.sb_lvbptr && (gl->gl_state ==LM_ST_EXCLUSIVE )) - lvb_needs_unlock =1 ; +/* don't want to skip dlm_unlock writing the lvb when lock has one */ if (test_bit (SDF_SKIP_DLM_UNLOCK , &sdp->sd_flags) && - !lvb_needs_unlock) { + !gl->gl_lksb.sb_lvbptr) {gfs2_glock_free (gl);return ; }
fs/isofs/dir.c +1 -0
@@ -152,6 +152,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *file,printk (KERN_NOTICE "iso9660: Corrupted directory entry" " in block %lu of inode %lu\n" , block, inode->i_ino); +brelse (bh);return -EIO ; }
fs/isofs/namei.c +1 -0
@@ -102,6 +102,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,printk (KERN_NOTICE "iso9660: Corrupted directory entry" " in block %lu of inode %lu\n" , block, dir->i_ino); +brelse (bh);return 0 ; }
fs/jffs2/summary.c +3 -0
@@ -783,6 +783,8 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblockdbg_summary ("Writing unknown RWCOMPAT_COPY node type %x\n" ,je16_to_cpu (temp->u.nodetype));jffs2_sum_disable_collecting (c->summary); +/* The above call removes the list, nothing more to do */ + goto bail_rwcompat; }else {BUG ();/* unknown node in summary information */ }
@@ -794,6 +796,7 @@ static int jffs2_sum_write_data(struct jffs2_sb_info *c, struct jffs2_eraseblock c->summary->sum_num--; } + bail_rwcompat:jffs2_sum_reset_collected (c->summary);
fs/jfs/jfs_dmap.c +1 -1
@@ -1669,7 +1669,7 @@ s64 dbDiscardAG(struct inode *ip, int agno, s64 minlen) }else if (rc == -ENOSPC ) {/* search for next smaller log2 block */ l2nb =BLKSTOL2 (nblocks) -1 ; - nblocks =1 << l2nb; + nblocks =1LL << l2nb; }else {/* Trim any already allocated blocks */ jfs_error (bmp->db_ipbmap->i_sb,"-EIO\n" );
fs/ntfs/inode.c +6 -0
@@ -661,6 +661,12 @@ static int ntfs_read_locked_inode(struct inode *vi) } a = ctx->attr;/* Get the standard information attribute value. */ +if ((u8 *)a +le16_to_cpu (a->data.resident.value_offset) + +le32_to_cpu (a->data.resident.value_length) > + (u8 *)ctx->mrec + vol->mft_record_size) { +ntfs_error (vi->i_sb,"Corrupt standard information attribute in inode." ); + goto unm_err_out; + } si = (STANDARD_INFORMATION *)((u8 *)a +le16_to_cpu (a->data.resident.value_offset));
fs/ocfs2/cluster/heartbeat.c +7 -1
@@ -2154,7 +2154,7 @@ static struct config_item *o2hb_heartbeat_group_make_item(struct config_group *g o2hb_nego_timeout_handler, reg, NULL, ®->hr_handler_list);if (ret) - goto free; + goto remove_item; ret = o2net_register_handler(O2HB_NEGO_APPROVE_MSG, reg->hr_key, sizeof(struct o2hb_nego_msg),
@@ -2173,6 +2173,12 @@ static struct config_item *o2hb_heartbeat_group_make_item(struct config_group *g unregister_handler:o2net_unregister_handler_list (®->hr_handler_list); +remove_item: +spin_lock (&o2hb_live_lock); +list_del (®->hr_all_item); +if (o2hb_global_heartbeat_active ()) +clear_bit (reg->hr_region_num, o2hb_region_bitmap); +spin_unlock (&o2hb_live_lock); free:kfree (reg);return ERR_PTR (ret);
fs/quota/quota_v2.c +8 -3
@@ -165,19 +165,24 @@ static int v2_read_file_info(struct super_block *sb, int type)quota_error (sb,"Number of blocks too big for quota file size (%llu > %llu)." , (loff_t )qinfo->dqi_blocks << qinfo->dqi_blocksize_bits,i_size_read (sb_dqopt (sb)->files[type])); - goto out; + goto out_free; }if (qinfo->dqi_free_blk >= qinfo->dqi_blocks) {quota_error (sb,"Free block number too big (%u >= %u)." , qinfo->dqi_free_blk, qinfo->dqi_blocks); - goto out; + goto out_free; }if (qinfo->dqi_free_entry >= qinfo->dqi_blocks) {quota_error (sb,"Block with free entry too big (%u >= %u)." , qinfo->dqi_free_entry, qinfo->dqi_blocks); - goto out; + goto out_free; } ret =0 ; +out_free: +if (ret) { +kfree (info->dqi_priv); + info->dqi_priv =NULL ; + } out:up_read (&dqopt->dqio_sem);return ret;
include/asm-generic/vmlinux.lds.h +6 -1
@@ -669,8 +669,13 @@/* DWARF 4 */ \ .debug_types 0 : { *(.debug_types) } \/* DWARF 5 */ \ + .debug_addr 0 : { *(.debug_addr) } \ + .debug_line_str 0 : { *(.debug_line_str) } \ + .debug_loclists 0 : { *(.debug_loclists) } \ .debug_macro 0 : { *(.debug_macro) } \ - .debug_addr 0 : { *(.debug_addr) } + .debug_names 0 : { *(.debug_names) } \ + .debug_rnglists 0 : { *(.debug_rnglists) } \ + .debug_str_offsets 0 : { *(.debug_str_offsets) }/* Stabs debugging sections. */ #define STABS_DEBUG \
include/linux/icmpv6.h +46 -2
73 lines not on this page · raw message
include/linux/ipv6.h +1 -1
@@ -3,6 +3,7 @@#define _IPV6_H#include <uapi/linux/ipv6.h> +#include <uapi/linux/icmpv6.h> #define ipv6_optlen (p) (((p)->hdrlen+1) << 3)#define ipv6_authlen (p) (((p)->hdrlen+2) << 2)
@@ -82,7 +83,6 @@ struct ipv6_params {__s32 autoconf; };extern struct ipv6_params ipv6_defaults; -#include <linux/icmpv6.h> #include <linux/tcp.h> #include <linux/udp.h>
include/linux/kexec.h +5 -0
@@ -217,6 +217,11 @@ struct kimage {/* Information for loading purgatory */ struct purgatory_info purgatory_info;#endif + +#ifdef CONFIG_IMA_KEXEC +/* Virtual address of IMA measurement buffer for kexec syscall */ +void *ima_buffer; +#endif };/* kexec interface functions */
include/linux/key.h +1 -0
@@ -248,6 +248,7 @@ extern struct key *key_alloc(struct key_type *type,#define KEY_ALLOC_BUILT_IN 0x0004/* Key is built into kernel */ #define KEY_ALLOC_BYPASS_RESTRICTION 0x0008/* Override the check on restricted keyrings */ #define KEY_ALLOC_UID_KEYRING 0x0010/* allocating a user or user session keyring */ +#define KEY_ALLOC_SET_KEEP 0x0020/* Set the KEEP flag on the key/keyring */ extern void key_revoke (struct key *key);extern void key_invalidate (struct key *key);
include/linux/rmap.h +2 -1
@@ -214,7 +214,8 @@ struct page_vma_mapped_walk {static inline void page_vma_mapped_walk_done (struct page_vma_mapped_walk *pvmw) { -if (pvmw->pte) +/* HugeTLB pte is set to the relevant page table entry without pte_mapped. */ +if (pvmw->pte && !PageHuge (pvmw->page))pte_unmap (pvmw->pte);if (pvmw->ptl)spin_unlock (pvmw->ptl);
include/net/icmp.h +10 -0
@@ -47,6 +47,16 @@ static inline void icmp_send(struct sk_buff *skb_in, int type, int code, __be32__icmp_send (skb_in, type, code, info, &IPCB (skb_in)->opt); } +#if IS_ENABLED (CONFIG_NF_NAT ) +void icmp_ndo_send (struct sk_buff *skb_in,int type,int code,__be32 info); +#else +static inline void icmp_ndo_send (struct sk_buff *skb_in,int type,int code,__be32 info) +{ +struct ip_options opts = {0 }; +__icmp_send (skb_in, type, code, info, &opts); +} +#endif +int icmp_rcv (struct sk_buff *skb);void icmp_err (struct sk_buff *skb,u32 info);int icmp_init (void );
kernel/bpf/bpf_lru_list.c +4 -3
@@ -505,13 +505,14 @@ struct bpf_lru_node *bpf_lru_pop_free(struct bpf_lru *lru, u32 hash)static void bpf_common_lru_push_free (struct bpf_lru *lru,struct bpf_lru_node *node) { +u8 node_type =READ_ONCE (node->type);unsigned long flags; -if (WARN_ON_ONCE (node->type ==BPF_LRU_LIST_T_FREE ) || -WARN_ON_ONCE (node->type ==BPF_LRU_LOCAL_LIST_T_FREE )) +if (WARN_ON_ONCE (node_type ==BPF_LRU_LIST_T_FREE ) || +WARN_ON_ONCE (node_type ==BPF_LRU_LOCAL_LIST_T_FREE ))return ; -if (node->type ==BPF_LRU_LOCAL_LIST_T_PENDING ) { +if (node_type ==BPF_LRU_LOCAL_LIST_T_PENDING ) {struct bpf_lru_locallist *loc_l; loc_l =per_cpu_ptr (lru->common_lru.local_list, node->cpu);
kernel/debug/kdb/kdb_private.h +1 -1
@@ -233,7 +233,7 @@ extern struct task_struct *kdb_curr_task(int);#define kdb_do_each_thread (g, p) do_each_thread(g, p)#define kdb_while_each_thread (g, p) while_each_thread(g, p) -#define GFP_KDB (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL) +#define GFP_KDB (in_dbg_master() ? GFP_ATOMIC : GFP_KERNEL)extern void *debug_kmalloc (size_t size,gfp_t flags);extern void debug_kfree (void *);
kernel/kexec_file.c +5 -0
@@ -95,6 +95,11 @@ void kimage_file_post_load_cleanup(struct kimage *image)vfree (pi->sechdrs); pi->sechdrs =NULL ; +#ifdef CONFIG_IMA_KEXEC +vfree (image->ima_buffer); + image->ima_buffer =NULL ; +#endif /* CONFIG_IMA_KEXEC */ +/* See if architecture has anything to cleanup post load */ arch_kimage_file_post_load_cleanup (image);
kernel/module.c +19 -2
@@ -2247,6 +2247,21 @@ static int verify_export_symbols(struct module *mod)return 0 ; } +static bool ignore_undef_symbol (Elf_Half emachine,const char *name) +{ +/* +* On x86, PIC code and Clang non-PIC code may have call foo@PLT. GNU as +* before 2.37 produces an unreferenced _GLOBAL_OFFSET_TABLE_ on x86-64. +* i386 has a similar problem but may not deserve a fix. +* +* If we ever have to ignore many symbols, consider refactoring the code to +* only warn if referenced by a relocation. +*/ +if (emachine ==EM_386 || emachine ==EM_X86_64 ) +return !strcmp (name,"_GLOBAL_OFFSET_TABLE_" ); +return false; +} +/* Change all symbols so that st_value encodes the pointer directly. */ static int simplify_symbols (struct module *mod,const struct load_info *info) {
@@ -2292,8 +2307,10 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)break ; } -/* Ok if weak. */ -if (!ksym &&ELF_ST_BIND (sym[i].st_info) ==STB_WEAK ) +/* Ok if weak or ignored. */ +if (!ksym && + (ELF_ST_BIND (sym[i].st_info) ==STB_WEAK || +ignore_undef_symbol (info->hdr->e_machine, name)))break ; pr_warn("%s: Unknown symbol %s (err %li)\n",
kernel/printk/printk_safe.c +12 -4
@@ -56,6 +56,8 @@ struct printk_safe_seq_buf { static DEFINE_PER_CPU(struct printk_safe_seq_buf, safe_print_seq); static DEFINE_PER_CPU(int, printk_context); +static DEFINE_RAW_SPINLOCK (safe_read_lock); +#ifdef CONFIG_PRINTK_NMI static DEFINE_PER_CPU(struct printk_safe_seq_buf, nmi_print_seq);#endif
@@ -194,8 +196,6 @@ static void report_message_lost(struct printk_safe_seq_buf *s)*/ static void __printk_safe_flush (struct irq_work *work) { -static raw_spinlock_t read_lock = -__RAW_SPIN_LOCK_INITIALIZER (read_lock);struct printk_safe_seq_buf *s = container_of(work, struct printk_safe_seq_buf, work);unsigned long flags;
@@ -209,7 +209,7 @@ static void __printk_safe_flush(struct irq_work *work)* different CPUs. This is especially important when printing * a backtrace. */ -raw_spin_lock_irqsave (&read_lock, flags); +raw_spin_lock_irqsave (&safe_read_lock, flags); i =0 ; more:
@@ -246,7 +246,7 @@ static void __printk_safe_flush(struct irq_work *work) out:report_message_lost (s); -raw_spin_unlock_irqrestore (&read_lock, flags); +raw_spin_unlock_irqrestore (&safe_read_lock, flags); }/**
@@ -292,6 +292,14 @@ void printk_safe_flush_on_panic(void)raw_spin_lock_init (&logbuf_lock); } +if (raw_spin_is_locked (&safe_read_lock)) { +if (num_online_cpus () >1 ) +return ; + +debug_locks_off (); +raw_spin_lock_init (&safe_read_lock); + } +printk_safe_flush (); }
kernel/seccomp.c +2 -0
@@ -775,6 +775,8 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd, const bool recheck_after_trace) {BUG (); + +return -1 ; }#endif
kernel/tracepoint.c +64 -16
59 lines not on this page · raw message
mm/hugetlb.c +42 -1
43 lines not on this page · raw message
net/ipv6/ip6_icmp.c +41 -5
46 lines not on this page · raw message
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +3 -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.