Linux 5.4.42
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.42 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 18 - arch/arm/boot/dts/dra7.dtsi | 4 arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts | 4 arch/arm/boot/dts/imx6dl-yapp4-ursa.dts | 2 arch/arm/boot/dts/r8a73a4.dtsi | 9 arch/arm/boot/dts/r8a7740.dtsi | 2 arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 2 arch/arm64/boot/dts/amlogic/meson-g12b-khadas-vim3.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mn.dtsi | 2 arch/arm64/boot/dts/renesas/r8a77980.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3328-evb.dts | 2 arch/arm64/boot/dts/rockchip/rk3328-rock64.dts | 2 arch/arm64/boot/dts/rockchip/rk3399.dtsi | 4 arch/arm64/kernel/machine_kexec.c | 1 arch/powerpc/include/asm/book3s/32/kup.h | 2 arch/riscv/kernel/vdso/Makefile | 6 arch/x86/include/asm/stackprotector.h | 7 arch/x86/kernel/smpboot.c | 8 arch/x86/kernel/unwind_orc.c | 16 arch/x86/kvm/x86.c | 2 arch/x86/xen/smp_pv.c | 1 crypto/lrw.c | 4 crypto/xts.c | 4 drivers/acpi/ec.c | 24 - drivers/acpi/internal.h | 1 drivers/acpi/sleep.c | 14 drivers/block/virtio_blk.c | 86 ++++- drivers/clk/clk.c | 3 drivers/clk/rockchip/clk-rk3228.c | 17 drivers/cpufreq/intel_pstate.c | 2 drivers/dma/mmp_tdma.c | 5 drivers/dma/pch_dma.c | 2 drivers/firmware/efi/tpm.c | 2 drivers/gpio/gpio-pca953x.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 3 drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 4 drivers/gpu/drm/amd/amdgpu/navi10_sdma_pkt_open.h | 16 drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 4 drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 4 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 4 drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 31 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 + drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 3 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 2 drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 6 drivers/gpu/drm/i915/display/intel_fbc.c | 3 drivers/gpu/drm/i915/gvt/scheduler.c | 6 drivers/gpu/drm/i915/intel_pm.c | 2 drivers/gpu/drm/qxl/qxl_image.c | 3 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 2 drivers/hwmon/da9052-hwmon.c | 4 drivers/infiniband/core/cache.c | 7 drivers/infiniband/core/nldev.c | 2 drivers/infiniband/hw/cxgb4/cm.c | 7 drivers/infiniband/hw/hfi1/user_sdma.c | 4 drivers/infiniband/hw/i40iw/i40iw_hw.c | 2 drivers/infiniband/hw/mlx4/qp.c | 14 drivers/infiniband/sw/rxe/rxe_mmap.c | 2 drivers/infiniband/sw/rxe/rxe_queue.c | 11 drivers/mmc/core/block.c | 3 drivers/mmc/core/queue.c | 16 drivers/mmc/host/alcor.c | 6 drivers/mmc/host/sdhci-acpi.c | 10 drivers/mmc/host/sdhci-pci-gli.c | 23 + drivers/net/dsa/dsa_loop.c | 1 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 29 - drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 1 drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c | 2 drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c | 16 drivers/net/ethernet/huawei/hinic/hinic_main.c | 16 drivers/net/ethernet/moxa/moxart_ether.c | 2 drivers/net/ethernet/natsemi/jazzsonic.c | 6 drivers/net/ethernet/netronome/nfp/abm/main.c | 4 drivers/net/ethernet/realtek/r8169_main.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 17 drivers/net/phy/microchip_t1.c | 171 ++++++++++ drivers/net/phy/phy.c | 8 drivers/net/ppp/pppoe.c | 3 drivers/net/virtio_net.c | 6 drivers/pinctrl/intel/pinctrl-baytrail.c | 1 drivers/pinctrl/intel/pinctrl-cherryview.c | 4 drivers/pinctrl/intel/pinctrl-sunrisepoint.c | 15 drivers/pinctrl/qcom/pinctrl-msm.c | 2 drivers/s390/net/ism_drv.c | 4 drivers/scsi/sg.c | 4 drivers/usb/cdns3/gadget.c | 2 drivers/usb/core/devio.c | 19 - drivers/usb/core/hub.c | 6 drivers/usb/dwc3/gadget.c | 3 drivers/usb/gadget/configfs.c | 3 drivers/usb/gadget/legacy/audio.c | 4 drivers/usb/gadget/legacy/cdc2.c | 4 drivers/usb/gadget/legacy/ncm.c | 4 drivers/usb/gadget/udc/net2272.c | 2 drivers/usb/host/xhci-plat.c | 4 drivers/usb/host/xhci-ring.c | 4 fs/cifs/cifssmb.c | 2 fs/exec.c | 4 fs/gfs2/bmap.c | 16 fs/gfs2/lops.c | 19 - fs/nfs/fscache-index.c | 6 fs/nfs/fscache.c | 31 + fs/nfs/fscache.h | 8 fs/nfs/mount_clnt.c | 3 fs/nfs/nfs4state.c | 2 fs/notify/fanotify/fanotify.c | 11 include/linux/compiler.h | 6 include/linux/fs.h | 2 include/linux/memcontrol.h | 2 include/linux/pnp.h | 29 - include/linux/skmsg.h | 1 include/linux/sunrpc/gss_api.h | 3 include/linux/sunrpc/gss_krb5.h | 6 include/linux/sunrpc/xdr.h | 1 include/linux/tty.h | 2 include/net/netfilter/nf_conntrack.h | 2 include/net/sch_generic.h | 1 include/net/tcp.h | 13 include/sound/rawmidi.h | 1 init/Kconfig | 18 - init/initramfs.c | 2 init/main.c | 2 ipc/util.c | 12 kernel/bpf/syscall.c | 4 kernel/fork.c | 13 kernel/trace/Kconfig | 1 kernel/umh.c | 6 mm/shmem.c | 7 net/core/dev.c | 4 net/core/drop_monitor.c | 11 net/core/filter.c | 2 net/core/netprio_cgroup.c | 2 net/dsa/dsa2.c | 8 net/ipv4/cipso_ipv4.c | 6 net/ipv4/route.c | 2 net/ipv4/tcp.c | 27 + net/ipv4/tcp_bpf.c | 10 net/ipv4/tcp_input.c | 3 net/ipv6/calipso.c | 3 net/ipv6/route.c | 6 net/netfilter/nf_conntrack_core.c | 4 net/netfilter/nft_set_rbtree.c | 28 + net/netlabel/netlabel_kapi.c | 6 net/rds/message.c | 19 - net/rds/rdma.c | 12 net/rds/rds.h | 3 net/rds/send.c | 6 net/sched/cls_api.c | 8 net/sunrpc/auth_gss/auth_gss.c | 12 net/sunrpc/auth_gss/gss_krb5_crypto.c | 8 net/sunrpc/auth_gss/gss_krb5_wrap.c | 44 +- net/sunrpc/auth_gss/gss_mech_switch.c | 3 net/sunrpc/auth_gss/svcauth_gss.c | 10 net/sunrpc/clnt.c | 5 net/sunrpc/xdr.c | 41 ++ sound/core/rawmidi.c | 31 + sound/firewire/amdtp-stream-trace.h | 3 sound/pci/hda/patch_hdmi.c | 2 sound/pci/hda/patch_realtek.c | 41 ++ sound/usb/quirks.c | 9 tools/lib/bpf/libbpf.c | 126 ++++--- tools/lib/bpf/libbpf_internal.h | 2 tools/testing/selftests/bpf/prog_tests/stacktrace_build_id_nmi.c | 2 tools/testing/selftests/bpf/progs/test_get_stack_rawtp_err.c | 2 tools/testing/selftests/bpf/test_select_reuseport.c | 4 tools/testing/selftests/ftrace/ftracetest | 22 + tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_type.tc | 2 virt/kvm/arm/vgic/vgic-mmio-v2.c | 4 virt/kvm/arm/vgic/vgic-mmio-v3.c | 12 virt/kvm/arm/vgic/vgic-mmio.c | 100 +++-- virt/kvm/arm/vgic/vgic-mmio.h | 3 171 files changed, 1237 insertions(+), 522 deletions(-)
Adam Ford (2):
gpio: pca953x: Fix pca953x_gpio_set_config
arm64: dts: imx8mn: Change SDMA1 ahb clock for imx8mn
Adam McCoy (1):
cifs: fix leaked reference on requeued write
Adrian Hunter (1):
mmc: block: Fix request completion in the CQE timeout path
Alan Maguire (1):
ftrace/selftests: workaround cgroup RT scheduling issues
Alex Deucher (1):
drm/amdgpu: force fbdev into vram
Amir Goldstein (1):
fanotify: fix merging marks masks with FAN_ONDIR
Andreas Gruenbacher (2):
gfs2: Another gfs2_walk_metadata fix
gfs2: More gfs2_find_jhead fixes
Andrii Nakryiko (2):
libbpf: Extract and generalize CPU mask parsing logic selftest/bpf: fix backported test_select_reuseport selftest changes
Andy Shevchenko (2):
pinctrl: sunrisepoint: Fix PAD lock register offset for SPT-H
pinctrl: baytrail: Enable pin configuration setting for GPIO chip
Ansuel Smith (1):
pinctrl: qcom: fix wrong write in update_dual_edge
Arnd Bergmann (4):
drop_monitor: work around gcc-10 stringop-overflow warning
sun6i: dsi: fix gcc-4.8
nfs: fscache: use timespec64 in inode auxdata
netfilter: conntrack: avoid gcc-10 zero-length-bounds warning
Ben Chuang (2):
mmc: sdhci-pci-gli: Fix no irq handler from suspend
mmc: sdhci-pci-gli: Fix can not access GL9750 after reboot from Windows 10
Borislav Petkov (1):
x86: Fix early boot crash on gcc-10, third try
Chen-Yu Tsai (2):
arm64: dts: rockchip: Replace RK805 PMIC node name with "pmic" on rk3328 boards
arm64: dts: rockchip: Rename dwc3 device nodes on rk3399 to make dtc happy
Chris Wilson (1):
cpufreq: intel_pstate: Only mention the BIOS disabling turbo mode once
Christian Brauner (1):
fork: prevent accidental access to clone3 features
Christoph Hellwig (1):
arm64: fix the flush_icache_range arguments in machine_kexec
Christophe JAILLET (5):
net/sonic: Fix a resource leak in an error handling path in 'jazz_sonic_probe()'
net: moxa: Fix a potential double 'free_irq()'
mmc: alcor: Fix a resource leak in the error path for ->probe()
usb: gadget: net2272: Fix a memory leak in an error handling path in 'net2272_plat_probe()'
usb: gadget: audio: Fix a missing error return value in audio_bind()
Christophe Leroy (1):
powerpc/32s: Fix build failure with CONFIG_PPC_KUAP_DEBUG
Chuck Lever (4):
SUNRPC: Add "@len" parameter to gss_unwrap()
SUNRPC: Fix GSS privacy computation of auth->au_ralign
SUNRPC: Signalled ASYNC tasks need to exit
SUNRPC: Revert 241b1f419f0e ("SUNRPC: Remove xdr_buf_trim()")
Cong Wang (2):
net_sched: fix tcm_parent in tc filter dump
net: fix a potential recursive NETDEV_FEAT_CHANGE
Dan Carpenter (2):
dpaa2-eth: prevent array underflow in update_cls_rule()
i40iw: Fix error handling in i40iw_manage_arp_cache()
Dave Wysochanski (2):
NFS: Fix fscache super_cookie index_key from changing after umount
NFSv4: Fix fscache cookie aux_data to ensure change_attr is included
Dmytro Laktyushkin (1):
drm/amd/display: check if REFCLK_CNTL register is present
Eric Dumazet (2):
tcp: fix error recovery in tcp_zerocopy_receive()
tcp: fix SO_RCVLOWAT hangs with fat skbs
Eric W. Biederman (1):
exec: Move would_dump into flush_old_exec
Eugeniu Rosca (1):
usb: core: hub: limit HUB_QUIRK_DISABLE_AUTOSUSPEND to USB5534B
Fabio Estevam (1):
ARM: dts: imx27-phytec-phycard-s-rdk: Fix the I2C1 pinctrl entries
Florian Fainelli (2):
net: dsa: Do not make user port errors fatal
net: dsa: loop: Add module soft dependency
Geert Uytterhoeven (2):
ARM: dts: r8a73a4: Add missing CMT1 interrupts
ARM: dts: r8a7740: Add missing extal2 to CPG node
Grace Kao (1):
pinctrl: cherryview: Add missing spinlock usage in chv_gpio_irq_handler
Greg Kroah-Hartman (2):
USB: usbfs: fix mmap dma mismatch
Linux 5.4.42
Guillaume Nault (1):
pppoe: only process PADT targeted at local interfaces
Hangbin Liu (1):
selftests/bpf: fix goto cleanup label not defined
Heiner Kallweit (2):
net: phy: fix aneg restart in phy_ethtool_set_eee
r8169: re-establish support for RTL8401 chip version
Hugh Dickins (1):
shmem: fix possible deadlocks on shmlock_user_lock
Ilie Halip (1):
riscv: fix vdso build with lld
Ioana Ciornei (1):
dpaa2-eth: properly handle buffer size restrictions
J. Bruce Fields (1):
nfs: fix NULL deference in nfs4_get_valid_delegation
Jack Morgenstein (2):
IB/mlx4: Test return value of calls to ib_get_cached_pkey IB/core: Fix potential NULL pointer dereference in pkey cache
Jason Gunthorpe (2):
pnp: Use list_for_each_entry() instead of open coding net/rds: Use ERR_PTR for rds_message_alloc_sgs()
Jeremy Linton (1):
usb: usbfs: correct kernel->user page attribute mismatch
Jesus Ramos (1):
ALSA: usb-audio: Add control message quirk delay for Kingston HyperX headset
Jim Mattson (1):
KVM: x86: Fix off-by-one error in kvm_vcpu_ioctl_x86_setup_mce
John Fastabend (2):
bpf, sockmap: msg_pop_data can incorrecty set an sge length bpf, sockmap: bpf_tcp_ingress needs to subtract bytes from sg.size
John Stultz (1):
dwc3: Remove check for HWO flag in dwc3_gadget_ep_reclaim_trb_sg()
Josh Poimboeuf (1):
x86/unwind/orc: Fix error handling in __unwind_start()
Justin Swartz (1):
clk: rockchip: fix incorrect configuration of rk3228 aclk_gpu* clocks
Kai Vehmanen (1):
ALSA: hda/hdmi: fix race in monitor detection during probe
Kai-Heng Feng (2):
ALSA: hda/realtek - Fix S3 pop noise on Dell Wyse Revert "ALSA: hda/realtek: Fix pop noise on ALC225"
Kamal Mostafa (1):
bpf: Test_progs, fix test_get_stack_rawtp_err.c build
Kelly Littlepage (1):
net: tcp: fix rx timestamp behavior for tcp_recvmsg
Kishon Vijay Abraham I (1):
ARM: dts: dra7: Fix bus_dma_limit for PCIe
Kyungtae Kim (1):
USB: gadget: fix illegal array access in binding with UDC
Li Jun (1):
usb: host: xhci-plat: keep runtime active when removing host
Linus Torvalds (8):
Stop the ad-hoc games with -Wno-maybe-initialized
gcc-10: disable 'zero-length-bounds' warning for now
gcc-10: disable 'array-bounds' warning for now
gcc-10: disable 'stringop-overflow' warning for now
gcc-10: disable 'restrict' warning for now
gcc-10 warnings: fix low-hanging fruit
gcc-10: mark more functions __init to avoid section mismatch warnings
gcc-10: avoid shadowing standard library 'free()' in crypto
Luben Tuikov (1):
drm/amdgpu: simplify padding calculations (v2)
Lubomir Rintel (2):
dmaengine: mmp_tdma: Do not ignore slave config validation errors
dmaengine: mmp_tdma: Reset channel error on release
Luo bin (1):
hinic: fix a bug of ndo_stop
Maciej Żenczykowski (1):
Revert "ipv6: add mtu lock check in __ip6_rt_update_pmtu"
Madhuparna Bhowmik (1):
dmaengine: pch_dma.c: Avoid data race between probe and irq handler
Marc Zyngier (2):
KVM: arm: vgic: Synchronize the whole guest on GIC{D,R}_I{S,C}ACTIVER read
clk: Unlink clock if failed to prepare or enable
Marek Olšák (1):
drm/amdgpu: invalidate L2 before SDMA IBs (v2)
Michael S. Tsirkin (1):
virtio_net: fix lockdep warning on 32 bit
Michal Vokáč (1):
ARM: dts: imx6dl-yapp4: Fix Ursa board Ethernet connection
Mike Marciniszyn (1):
IB/hfi1: Fix another case where pq is left on waitlist
Neil Armstrong (2):
arm64: dts: meson-g12b-khadas-vim3: add missing frddr_a status property
arm64: dts: meson-g12-common: fix dwc2 clock names
Olga Kornievskaia (1):
NFSv3: fix rpc receive buffer size for MOUNT call
Paolo Abeni (2):
netlabel: cope with NULL catmap
net: ipv4: really enforce backoff for redirects
Peter Chen (1):
usb: cdns3: gadget: prev_req->trb is NULL for ep0
Peter Jones (1):
Make the "Reducing compressed framebufer size" message be DRM_INFO_ONCE()
Phil Sutter (1):
netfilter: nft_set_rbtree: Add missing expired checks
Potnuri Bharat Teja (1):
RDMA/iw_cxgb4: Fix incorrect function parameters
Rafael J. Wysocki (1):
ACPI: EC: PM: Avoid premature returns from acpi_s2idle_wake()
Raul E Rangel (1):
mmc: sdhci-acpi: Add SDHCI_QUIRK2_BROKEN_64_BIT_DMA for AMDI0040
Samu Nuutamo (1):
hwmon: (da9052) Synchronize access with mfd
Sarthak Garg (1):
mmc: core: Fix recursive locking issue in CQE recovery path
Sasha Levin (1):
RDMA/core: Fix double put of resource
Sergei Trofimovich (1):
Makefile: disallow data races on gcc-10 as well
Simon Ser (1):
drm/amd/display: add basic atomic check for cursor plane
Sriharsha Allenki (1):
usb: xhci: Fix NULL pointer dereference when enqueuing trbs from urb sg list
Stefan Hajnoczi (1):
virtio-blk: handle block_device_operations callbacks after hot unplug
Stefano Brivio (1):
netfilter: nft_set_rbtree: Introduce and use nft_rbtree_interval_start()
Sudip Mukherjee (1):
RDMA/rxe: Always return ERR_PTR from rxe_create_mmap_info()
Sultan Alsawaf (1):
drm/i915: Don't enable WaIncreaseLatencyIPCEnabled when IPC is disabled
Sung Lee (1):
drm/amd/display: Update downspread percent to match spreadsheet for DCN2.1
Takashi Iwai (3):
ALSA: hda/realtek - Limit int mic boost for Thinkpad T530
ALSA: hda/realtek - Add COEF workaround for ASUS ZenBook UX431DA
ALSA: rawmidi: Fix racy buffer resize under concurrent accesses
Takashi Sakamoto (1):
ALSA: firewire-lib: fix 'function sizeof not defined' error of tracepoints format
Tiecheng Zhou (1):
drm/amd/powerplay: avoid using pm_en before it is initialized revised
Vasily Averin (2):
drm/qxl: lost qxl_bo_kunmap_atomic_page in qxl_image_init_helper() ipc/util.c: sysvipc_find_ipc() incorrectly updates position index
Veerabhadrarao Badiganti (1):
mmc: core: Check request type before completing the request
Vincent Minet (1):
umh: fix memory leak on execve failure
Vinod Koul (1):
net: stmmac: fix num_por initialization
Wei Yongjun (5):
nfp: abm: fix error return code in nfp_abm_vnic_alloc()
bpf: Fix error return code in map_lookup_and_delete_elem() s390/ism: fix error return code in ism_probe()
usb: gadget: legacy: fix error return code in gncm_bind()
usb: gadget: legacy: fix error return code in cdc_bind()
Wu Bo (1):
scsi: sg: add sg_remove_request in sg_write
Xiao Yang (1):
selftests/ftrace: Check the first record for kprobe_args_type.tc
Xiyu Yang (1):
bpf: Fix sk_psock refcnt leak when receiving message
Yafang Shao (1):
mm, memcg: fix inconsistent oom event behavior
Yoshihiro Shimoda (1):
arm64: dts: renesas: r8a77980: Fix IPMMU VIP[01] nodes
Yuiko Oshino (1):
net: phy: microchip_t1: add lan87xx_phy_init to initialize the lan87xx phy.
Zefan Li (1):
netprio_cgroup: Fix unlimited memory leak of v2 cgroups
Zhenyu Wang (1):
drm/i915/gvt: Fix kernel oops for 3-level ppgtt guest
Greg Kroah-Hartman
maintainerMakefile +13 -5
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 41 +SUBLEVEL = 42 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -707,12 +707,9 @@ else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE KBUILD_CFLAGS += -Os endif -ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED -KBUILD_CFLAGS += -Wno-maybe-uninitialized -endif - # Tell gcc to never replace conditional load with a non-conditional one KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) +KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races) include scripts/Makefile.kcov include scripts/Makefile.gcc-plugins
@@ -860,6 +857,17 @@ KBUILD_CFLAGS += -Wno-pointer-sign # disable stringop warnings in gcc 8+ KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) +# We'll want to enable this eventually, but it's not going away for 5.7 at least +KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds) +KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds) +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow) + +# Another good warning that we'll want to enable eventually +KBUILD_CFLAGS += $(call cc-disable-warning, restrict) + +# Enabled with W=2, disabled by default as noisy +KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized) + # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
arch/arm/boot/dts/dra7.dtsi +2 -2
@@ -172,6 +172,7 @@ #address-cells = <1>; ranges = <0x51000000 0x51000000 0x3000 0x0 0x20000000 0x10000000>; + dma-ranges; /** * To enable PCI endpoint mode, disable the pcie1_rc * node and enable pcie1_ep mode.
@@ -185,7 +186,6 @@ device_type = "pci"; ranges = <0x81000000 0 0 0x03000 0 0x00010000 0x82000000 0 0x20013000 0x13000 0 0xffed000>; - dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>; bus-range = <0x00 0xff>; #interrupt-cells = <1>; num-lanes = <1>;
@@ -230,6 +230,7 @@ #address-cells = <1>; ranges = <0x51800000 0x51800000 0x3000 0x0 0x30000000 0x10000000>; + dma-ranges; status = "disabled"; pcie2_rc: pcie@51800000 { reg = <0x51800000 0x2000>, <0x51802000 0x14c>, <0x1000 0x2000>;
@@ -240,7 +241,6 @@ device_type = "pci"; ranges = <0x81000000 0 0 0x03000 0 0x00010000 0x82000000 0 0x30013000 0x13000 0 0xffed000>; - dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>; bus-range = <0x00 0xff>; #interrupt-cells = <1>; num-lanes = <1>;
arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts +2 -2
@@ -75,8 +75,8 @@ imx27-phycard-s-rdk { pinctrl_i2c1: i2c1grp { fsl,pins = < - MX27_PAD_I2C2_SDA__I2C2_SDA 0x0 - MX27_PAD_I2C2_SCL__I2C2_SCL 0x0 + MX27_PAD_I2C_DATA__I2C_DATA 0x0 + MX27_PAD_I2C_CLK__I2C_CLK 0x0 >; };
arch/arm/boot/dts/imx6dl-yapp4-ursa.dts +1 -1
@@ -38,7 +38,7 @@ }; &switch_ports { - /delete-node/ port@2; + /delete-node/ port@3; }; &touchscreen {
arch/arm/boot/dts/r8a73a4.dtsi +8 -1
@@ -131,7 +131,14 @@ cmt1: timer@e6130000 { compatible = "renesas,r8a73a4-cmt1", "renesas,rcar-gen2-cmt1"; reg = <0 0xe6130000 0 0x1004>; - interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; clocks = <&mstp3_clks R8A73A4_CLK_CMT1>; clock-names = "fck"; power-domains = <&pd_c5>;
arch/arm/boot/dts/r8a7740.dtsi +1 -1
@@ -479,7 +479,7 @@ cpg_clocks: cpg_clocks@e6150000 { compatible = "renesas,r8a7740-cpg-clocks"; reg = <0xe6150000 0x10000>; - clocks = <&extal1_clk>, <&extalr_clk>; + clocks = <&extal1_clk>, <&extal2_clk>, <&extalr_clk>; #clock-cells = <1>; clock-output-names = "system", "pllc0", "pllc1", "pllc2", "r",
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi +1 -1
@@ -2365,7 +2365,7 @@ reg = <0x0 0xff400000 0x0 0x40000>; interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clkc CLKID_USB1_DDR_BRIDGE>; - clock-names = "ddr"; + clock-names = "otg"; phys = <&usb2_phy1>; phy-names = "usb2-phy"; dr_mode = "peripheral";
arch/arm64/boot/dts/amlogic/meson-g12b-khadas-vim3.dtsi +4 -0
@@ -152,6 +152,10 @@ clock-latency = <50000>; }; +&frddr_a { + status = "okay"; +}; + &frddr_b { status = "okay"; };
arch/arm64/boot/dts/freescale/imx8mn.dtsi +1 -1
@@ -616,7 +616,7 @@ reg = <0x30bd0000 0x10000>; interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk IMX8MN_CLK_SDMA1_ROOT>, - <&clk IMX8MN_CLK_SDMA1_ROOT>; + <&clk IMX8MN_CLK_AHB>; clock-names = "ipg", "ahb"; #dma-cells = <3>; fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
arch/arm64/boot/dts/renesas/r8a77980.dtsi +2 -0
@@ -1318,6 +1318,7 @@ ipmmu_vip0: mmu@e7b00000 { compatible = "renesas,ipmmu-r8a77980"; reg = <0 0xe7b00000 0 0x1000>; + renesas,ipmmu-main = <&ipmmu_mm 4>; power-domains = <&sysc R8A77980_PD_ALWAYS_ON>; #iommu-cells = <1>; };
@@ -1325,6 +1326,7 @@ ipmmu_vip1: mmu@e7960000 { compatible = "renesas,ipmmu-r8a77980"; reg = <0 0xe7960000 0 0x1000>; + renesas,ipmmu-main = <&ipmmu_mm 11>; power-domains = <&sysc R8A77980_PD_ALWAYS_ON>; #iommu-cells = <1>; };
arch/arm64/boot/dts/rockchip/rk3328-evb.dts +1 -1
@@ -92,7 +92,7 @@ &i2c1 { status = "okay"; - rk805: rk805@18 { + rk805: pmic@18 { compatible = "rockchip,rk805"; reg = <0x18>; interrupt-parent = <&gpio2>;
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts +1 -1
@@ -169,7 +169,7 @@ &i2c1 { status = "okay"; - rk805: rk805@18 { + rk805: pmic@18 { compatible = "rockchip,rk805"; reg = <0x18>; interrupt-parent = <&gpio2>;
arch/arm64/boot/dts/rockchip/rk3399.dtsi +2 -2
@@ -410,7 +410,7 @@ reset-names = "usb3-otg"; status = "disabled"; - usbdrd_dwc3_0: dwc3 { + usbdrd_dwc3_0: usb@fe800000 { compatible = "snps,dwc3"; reg = <0x0 0xfe800000 0x0 0x100000>; interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
@@ -446,7 +446,7 @@ reset-names = "usb3-otg"; status = "disabled"; - usbdrd_dwc3_1: dwc3 { + usbdrd_dwc3_1: usb@fe900000 { compatible = "snps,dwc3"; reg = <0x0 0xfe900000 0x0 0x100000>; interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH 0>;
arch/arm64/kernel/machine_kexec.c +1 -0
@@ -189,6 +189,7 @@ void machine_kexec(struct kimage *kimage)* the offline CPUs. Therefore, we must use the __* variant here. */ __flush_icache_range ((uintptr_t )reboot_code_buffer, + (uintptr_t )reboot_code_buffer + arm64_relocate_new_kernel_size);/* Flush the kimage list and its buffers. */
arch/powerpc/include/asm/book3s/32/kup.h +1 -1
@@ -75,7 +75,7 @@ .macro kuap_check current, gpr#ifdef CONFIG_PPC_KUAP_DEBUG - lwz \gpr2, KUAP(thread) + lwz \gpr, KUAP(thread) 999: twnei \gpr, 0 EMIT_BUG_ENTRY 999b, __FILE__, __LINE__, (BUGFLAG_WARNING | BUGFLAG_ONCE)#endif
arch/riscv/kernel/vdso/Makefile +3 -3
@@ -33,15 +33,15 @@ $(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE $(call if_changed,vdsold) # We also create a special relocatable object that should mirror the symbol -# table and layout of the linked DSO. With ld -R we can then refer to -# these symbols in the kernel code rather than hand-coded addresses. +# table and layout of the linked DSO. With ld --just-symbols we can then +# refer to these symbols in the kernel code rather than hand-coded addresses. SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \ -Wl,--build-id -Wl,--hash-style=both $(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/rt_sigreturn.o FORCE $(call if_changed,vdsold) -LDFLAGS_vdso-syms.o := -r -R +LDFLAGS_vdso-syms.o := -r --just-symbols $(obj)/vdso-syms.o: $(obj)/vdso-dummy.o FORCE $(call if_changed,ld)
arch/x86/include/asm/stackprotector.h +6 -1
@@ -55,8 +55,13 @@/* * Initialize the stackprotector canary value. * -* NOTE: this must only be called from functions that never return, +* NOTE: this must only be called from functions that never return * and it must always be inlined. +* +* In addition, it should be called from a compilation unit for which +* stack protector is disabled. Alternatively, the caller should not end +* with a function call which gets tail-call optimized as that would +* lead to checking a modified canary value. */ static __always_inline void boot_init_stack_canary(void) {
arch/x86/kernel/smpboot.c +8 -0
@@ -262,6 +262,14 @@ static void notrace start_secondary(void *unused)wmb ();cpu_startup_entry (CPUHP_AP_ONLINE_IDLE ); + +/* +* Prevent tail call to cpu_startup_entry() because the stack protector +* guard has been changed a couple of function calls up, in +* boot_init_stack_canary() and must not be checked before tail calling +* another function. +*/ +prevent_tail_call_optimization (); }/**
arch/x86/kernel/unwind_orc.c +9 -7
@@ -608,23 +608,23 @@ EXPORT_SYMBOL_GPL(unwind_next_frame);void __unwind_start (struct unwind_state *state,struct task_struct *task,struct pt_regs *regs,unsigned long *first_frame) { -if (!orc_init) - goto done; -memset (state,0 ,sizeof (*state)); state->task = task; +if (!orc_init) + goto err; +/* * Refuse to unwind the stack of a task while it's executing on another * CPU. This check is racy, but that's ok: the unwinder has other * checks to prevent it from going off the rails. */ if (task_on_another_cpu (task)) - goto done; + goto err;if (regs) {if (user_mode (regs)) - goto done; + goto the_end; state->ip = regs->ip; state->sp = regs->sp;
@@ -657,6 +657,7 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,* generate some kind of backtrace if this happens. */ void *next_page = (void *)PAGE_ALIGN ((unsigned long )state->sp); + state->error = true;if (get_stack_info (next_page, state->task, &state->stack_info, &state->stack_mask))return ;
@@ -682,8 +683,9 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,return ; -done: +err: + state->error = true; +the_end: state->stack_info.type =STACK_TYPE_UNKNOWN ; -return ; }EXPORT_SYMBOL_GPL (__unwind_start);
arch/x86/kvm/x86.c +1 -1
@@ -3682,7 +3682,7 @@ static int kvm_vcpu_ioctl_x86_setup_mce(struct kvm_vcpu *vcpu,unsigned bank_num = mcg_cap &0xff , bank; r = -EINVAL ; -if (!bank_num || bank_num >=KVM_MAX_MCE_BANKS ) +if (!bank_num || bank_num >KVM_MAX_MCE_BANKS ) goto out;if (mcg_cap & ~(kvm_mce_cap_supported |0xff |0xff0000 )) goto out;
arch/x86/xen/smp_pv.c +1 -0
@@ -92,6 +92,7 @@ asmlinkage __visible void cpu_bringup_and_idle(void)cpu_bringup ();boot_init_stack_canary ();cpu_startup_entry (CPUHP_AP_ONLINE_IDLE ); +prevent_tail_call_optimization (); }void xen_smp_intr_free_pv (unsigned int cpu)
crypto/lrw.c +2 -2
@@ -289,7 +289,7 @@ static void exit_tfm(struct crypto_skcipher *tfm)crypto_free_skcipher (ctx->child); } -static void free (struct skcipher_instance *inst) +static void free_inst (struct skcipher_instance *inst) {crypto_drop_skcipher (skcipher_instance_ctx (inst));kfree (inst);
@@ -401,7 +401,7 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb) inst->alg.encrypt = encrypt; inst->alg.decrypt = decrypt; - inst->free = free; + inst->free = free_inst; err =skcipher_register_instance (tmpl, inst);if (err)
crypto/xts.c +2 -2
@@ -328,7 +328,7 @@ static void exit_tfm(struct crypto_skcipher *tfm)crypto_free_cipher (ctx->tweak); } -static void free (struct skcipher_instance *inst) +static void free_inst (struct skcipher_instance *inst) {crypto_drop_skcipher (skcipher_instance_ctx (inst));kfree (inst);
@@ -439,7 +439,7 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb) inst->alg.encrypt = encrypt; inst->alg.decrypt = decrypt; - inst->free = free; + inst->free = free_inst; err =skcipher_register_instance (tmpl, inst);if (err)
drivers/acpi/ec.c +16 -8
@@ -1962,23 +1962,31 @@ void acpi_ec_set_gpe_wake_mask(u8 action) acpi_set_gpe_wake_mask(NULL, first_ec->gpe, action); } -bool acpi_ec_other_gpes_active (void ) -{ -return acpi_any_gpe_status_set (first_ec ? first_ec->gpe :U32_MAX ); -} -bool acpi_ec_dispatch_gpe (void ) {u32 ret;if (!first_ec) +return acpi_any_gpe_status_set (U32_MAX ); + +/* +* Report wakeup if the status bit is set for any enabled GPE other +* than the EC one. +*/ +if (acpi_any_gpe_status_set (first_ec->gpe)) +return true; + +if (ec_no_wakeup)return false; +/* +* Dispatch the EC GPE in-band, but do not report wakeup in any case +* to allow the caller to process events properly after that. +*/ ret =acpi_dispatch_gpe (NULL , first_ec->gpe); -if (ret ==ACPI_INTERRUPT_HANDLED ) { +if (ret ==ACPI_INTERRUPT_HANDLED )pm_pr_dbg ("EC GPE dispatched\n" ); -return true; - } +return false; }#endif /* CONFIG_PM_SLEEP */
drivers/acpi/internal.h +0 -1
@@ -201,7 +201,6 @@ void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit);#ifdef CONFIG_PM_SLEEP void acpi_ec_flush_work (void ); -bool acpi_ec_other_gpes_active (void );bool acpi_ec_dispatch_gpe (void );#endif
drivers/acpi/sleep.c +2 -12
@@ -1010,20 +1010,10 @@ static bool acpi_s2idle_wake(void)if (acpi_check_wakeup_handlers ())return true; -/* -* If the status bit is set for any enabled GPE other than the -* EC one, the wakeup is regarded as a genuine one. -*/ -if (acpi_ec_other_gpes_active ()) +/* Check non-EC GPE wakeups and dispatch the EC GPE. */ +if (acpi_ec_dispatch_gpe ())return true; -/* -* If the EC GPE status bit has not been set, the wakeup is -* regarded as a spurious one. -*/ -if (!acpi_ec_dispatch_gpe ()) -return false; -/* * Cancel the wakeup and process all pending events in case * there are any wakeup ones in there.
drivers/block/virtio_blk.c +78 -8
144 lines not on this page · raw message
drivers/clk/clk.c +3 -0
@@ -3448,6 +3448,9 @@ static int __clk_core_init(struct clk_core *core) out:clk_pm_runtime_put (core); unlock: +if (ret) +hlist_del_init (&core->child_node); +clk_prepare_unlock ();if (!ret)
drivers/clk/rockchip/clk-rk3228.c +4 -13
@@ -156,8 +156,6 @@ PNAME(mux_i2s_out_p) = { "i2s1_pre", "xin12m" };PNAME (mux_i2s2_p) = {"i2s2_src" ,"i2s2_frac" ,"xin12m" };PNAME (mux_sclk_spdif_p) = {"sclk_spdif_src" ,"spdif_frac" ,"xin12m" }; -PNAME (mux_aclk_gpu_pre_p) = {"cpll_gpu" ,"gpll_gpu" ,"hdmiphy_gpu" ,"usb480m_gpu" }; -PNAME (mux_uart0_p) = {"uart0_src" ,"uart0_frac" ,"xin24m" };PNAME (mux_uart1_p) = {"uart1_src" ,"uart1_frac" ,"xin24m" };PNAME (mux_uart2_p) = {"uart2_src" ,"uart2_frac" ,"xin24m" };
@@ -468,16 +466,9 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = { RK2928_CLKSEL_CON(24), 6, 10, DFLAGS, RK2928_CLKGATE_CON(2), 8, GFLAGS), -GATE (0 ,"cpll_gpu" ,"cpll" ,0 , -RK2928_CLKGATE_CON (3 ),13 ,GFLAGS ), -GATE (0 ,"gpll_gpu" ,"gpll" ,0 , -RK2928_CLKGATE_CON (3 ),13 ,GFLAGS ), -GATE (0 ,"hdmiphy_gpu" ,"hdmiphy" ,0 , -RK2928_CLKGATE_CON (3 ),13 ,GFLAGS ), -GATE (0 ,"usb480m_gpu" ,"usb480m" ,0 , +COMPOSITE (0 ,"aclk_gpu_pre" , mux_pll_src_4plls_p,0 , +RK2928_CLKSEL_CON (34 ),5 ,2 ,MFLAGS ,0 ,5 ,DFLAGS ,RK2928_CLKGATE_CON (3 ),13 ,GFLAGS ), -COMPOSITE_NOGATE (0 ,"aclk_gpu_pre" , mux_aclk_gpu_pre_p,0 , -RK2928_CLKSEL_CON (34 ),5 ,2 ,MFLAGS ,0 ,5 ,DFLAGS ), COMPOSITE(SCLK_SPI0, "sclk_spi0", mux_pll_src_2plls_p, 0, RK2928_CLKSEL_CON(25), 8, 1, MFLAGS, 0, 7, DFLAGS,
@@ -582,8 +573,8 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {GATE (0 ,"pclk_peri_noc" ,"pclk_peri" ,CLK_IGNORE_UNUSED ,RK2928_CLKGATE_CON (12 ),2 ,GFLAGS ),/* PD_GPU */ -GATE (ACLK_GPU ,"aclk_gpu" ,"aclk_gpu_pre" ,0 ,RK2928_CLKGATE_CON (13 ),14 ,GFLAGS ), -GATE (0 ,"aclk_gpu_noc" ,"aclk_gpu_pre" ,0 ,RK2928_CLKGATE_CON (13 ),15 ,GFLAGS ), +GATE (ACLK_GPU ,"aclk_gpu" ,"aclk_gpu_pre" ,0 ,RK2928_CLKGATE_CON (7 ),14 ,GFLAGS ), +GATE (0 ,"aclk_gpu_noc" ,"aclk_gpu_pre" ,0 ,RK2928_CLKGATE_CON (7 ),15 ,GFLAGS ),/* PD_BUS */ GATE(0, "sclk_initmem_mbist", "aclk_cpu", 0, RK2928_CLKGATE_CON(8), 1, GFLAGS),
drivers/cpufreq/intel_pstate.c +1 -1
@@ -1058,7 +1058,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,update_turbo_state ();if (global.turbo_disabled) { -pr_warn ("Turbo disabled by BIOS or unavailable on processor\n" ); +pr_notice_once ("Turbo disabled by BIOS or unavailable on processor\n" );mutex_unlock (&intel_pstate_limits_lock);mutex_unlock (&intel_pstate_driver_lock);return -EPERM ;
drivers/dma/mmp_tdma.c +4 -1
@@ -363,6 +363,8 @@ static void mmp_tdma_free_descriptor(struct mmp_tdma_chan *tdmac)gen_pool_free (gpool, (unsigned long )tdmac->desc_arr, size); tdmac->desc_arr =NULL ; +if (tdmac->status ==DMA_ERROR ) + tdmac->status =DMA_COMPLETE ;return ; }
@@ -443,7 +445,8 @@ static struct dma_async_tx_descriptor *mmp_tdma_prep_dma_cyclic(if (!desc) goto err_out; -mmp_tdma_config_write (chan, direction, &tdmac->slave_config); +if (mmp_tdma_config_write (chan, direction, &tdmac->slave_config)) + goto err_out;while (buf < buf_len) { desc = &tdmac->desc_arr[i];
drivers/dma/pch_dma.c +1 -1
@@ -865,6 +865,7 @@ static int pch_dma_probe(struct pci_dev *pdev, }pci_set_master (pdev); + pd->dma.dev = &pdev->dev; err =request_irq (pdev->irq, pd_irq,IRQF_SHARED ,DRV_NAME , pd);if (err) {
@@ -880,7 +881,6 @@ static int pch_dma_probe(struct pci_dev *pdev, goto err_free_irq; } - pd->dma.dev = &pdev->dev;INIT_LIST_HEAD (&pd->dma.channels);
drivers/firmware/efi/tpm.c +1 -1
@@ -16,7 +16,7 @@int efi_tpm_final_log_size;EXPORT_SYMBOL (efi_tpm_final_log_size); -static int tpm2_calc_event_log_size (void *data,int count,void *size_info) +static int __init tpm2_calc_event_log_size (void *data,int count,void *size_info) {struct tcg_pcr_event2_head *header;int event_size, size =0 ;
drivers/gpio/gpio-pca953x.c +1 -1
@@ -528,7 +528,7 @@ static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset, {struct pca953x_chip *chip =gpiochip_get_data (gc); -switch (config) { +switch (pinconf_to_config_param (config)) {case PIN_CONFIG_BIAS_PULL_UP :case PIN_CONFIG_BIAS_PULL_DOWN :return pca953x_gpio_set_pull_up_down (chip, offset, config);
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +1 -2
@@ -133,8 +133,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev,u32 cpp;u64 flags =AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | -AMDGPU_GEM_CREATE_VRAM_CLEARED | -AMDGPU_GEM_CREATE_CPU_GTT_USWC ; +AMDGPU_GEM_CREATE_VRAM_CLEARED ; info =drm_get_format_info (adev->ddev, mode_cmd); cpp = info->cpp[0 ];
drivers/gpu/drm/amd/amdgpu/cik_sdma.c +2 -2
@@ -228,7 +228,7 @@ static void cik_sdma_ring_emit_ib(struct amdgpu_ring *ring,u32 extra_bits = vmid &0xf ;/* IB packet must end on a 8 DW boundary */ -cik_sdma_ring_insert_nop (ring, (12 - (lower_32_bits (ring->wptr) &7 )) %8 ); +cik_sdma_ring_insert_nop (ring, (4 -lower_32_bits (ring->wptr)) &7 );amdgpu_ring_write (ring,SDMA_PACKET (SDMA_OPCODE_INDIRECT_BUFFER ,0 , extra_bits));amdgpu_ring_write (ring, ib->gpu_addr &0xffffffe0 );/* base must be 32 byte aligned */
@@ -811,7 +811,7 @@ static void cik_sdma_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib)u32 pad_count;int i; - pad_count = (8 - (ib->length_dw &0x7 )) %8 ; + pad_count = (-ib->length_dw) &7 ;for (i =0 ; i < pad_count; i++)if (sdma && sdma->burst_nop && (i ==0 )) ib->ptr[ib->length_dw++] =
drivers/gpu/drm/amd/amdgpu/navi10_sdma_pkt_open.h +16 -0
@@ -73,6 +73,22 @@#define SDMA_OP_AQL_COPY 0#define SDMA_OP_AQL_BARRIER_OR 0 +#define SDMA_GCR_RANGE_IS_PA (1 << 18) +#define SDMA_GCR_SEQ (x) (((x) & 0x3) << 16) +#define SDMA_GCR_GL2_WB (1 << 15) +#define SDMA_GCR_GL2_INV (1 << 14) +#define SDMA_GCR_GL2_DISCARD (1 << 13) +#define SDMA_GCR_GL2_RANGE (x) (((x) & 0x3) << 11) +#define SDMA_GCR_GL2_US (1 << 10) +#define SDMA_GCR_GL1_INV (1 << 9) +#define SDMA_GCR_GLV_INV (1 << 8) +#define SDMA_GCR_GLK_INV (1 << 7) +#define SDMA_GCR_GLK_WB (1 << 6) +#define SDMA_GCR_GLM_INV (1 << 5) +#define SDMA_GCR_GLM_WB (1 << 4) +#define SDMA_GCR_GL1_RANGE (x) (((x) & 0x3) << 2) +#define SDMA_GCR_GLI_INV (x) (((x) & 0x3) << 0) +/*define for op field*/ #define SDMA_PKT_HEADER_op_offset 0#define SDMA_PKT_HEADER_op_mask 0x000000FF
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +2 -2
@@ -255,7 +255,7 @@ static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring,unsigned vmid =AMDGPU_JOB_GET_VMID (job);/* IB packet must end on a 8 DW boundary */ -sdma_v2_4_ring_insert_nop (ring, (10 - (lower_32_bits (ring->wptr) &7 )) %8 ); +sdma_v2_4_ring_insert_nop (ring, (2 -lower_32_bits (ring->wptr)) &7 );amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_INDIRECT ) |SDMA_PKT_INDIRECT_HEADER_VMID (vmid &0xf ));
@@ -750,7 +750,7 @@ static void sdma_v2_4_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ibu32 pad_count;int i; - pad_count = (8 - (ib->length_dw &0x7 )) %8 ; + pad_count = (-ib->length_dw) &7 ;for (i =0 ; i < pad_count; i++)if (sdma && sdma->burst_nop && (i ==0 )) ib->ptr[ib->length_dw++] =
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +2 -2
@@ -429,7 +429,7 @@ static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring,unsigned vmid =AMDGPU_JOB_GET_VMID (job);/* IB packet must end on a 8 DW boundary */ -sdma_v3_0_ring_insert_nop (ring, (10 - (lower_32_bits (ring->wptr) &7 )) %8 ); +sdma_v3_0_ring_insert_nop (ring, (2 -lower_32_bits (ring->wptr)) &7 );amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_INDIRECT ) |SDMA_PKT_INDIRECT_HEADER_VMID (vmid &0xf ));
@@ -1021,7 +1021,7 @@ static void sdma_v3_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ibu32 pad_count;int i; - pad_count = (8 - (ib->length_dw &0x7 )) %8 ; + pad_count = (-ib->length_dw) &7 ;for (i =0 ; i < pad_count; i++)if (sdma && sdma->burst_nop && (i ==0 )) ib->ptr[ib->length_dw++] =
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +2 -2
@@ -698,7 +698,7 @@ static void sdma_v4_0_ring_emit_ib(struct amdgpu_ring *ring,unsigned vmid =AMDGPU_JOB_GET_VMID (job);/* IB packet must end on a 8 DW boundary */ -sdma_v4_0_ring_insert_nop (ring, (10 - (lower_32_bits (ring->wptr) &7 )) %8 ); +sdma_v4_0_ring_insert_nop (ring, (2 -lower_32_bits (ring->wptr)) &7 );amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_INDIRECT ) |SDMA_PKT_INDIRECT_HEADER_VMID (vmid &0xf ));
@@ -1579,7 +1579,7 @@ static void sdma_v4_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ibu32 pad_count;int i; - pad_count = (8 - (ib->length_dw &0x7 )) %8 ; + pad_count = (-ib->length_dw) &7 ;for (i =0 ; i < pad_count; i++)if (sdma && sdma->burst_nop && (i ==0 )) ib->ptr[ib->length_dw++] =
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c +25 -6
@@ -382,8 +382,27 @@ static void sdma_v5_0_ring_emit_ib(struct amdgpu_ring *ring,unsigned vmid =AMDGPU_JOB_GET_VMID (job);uint64_t csa_mc_addr =amdgpu_sdma_get_csa_mc_addr (ring, vmid); -/* IB packet must end on a 8 DW boundary */ -sdma_v5_0_ring_insert_nop (ring, (10 - (lower_32_bits (ring->wptr) &7 )) %8 ); +/* Invalidate L2, because if we don't do it, we might get stale cache +* lines from previous IBs. +*/ +amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_GCR_REQ )); +amdgpu_ring_write (ring,0 ); +amdgpu_ring_write (ring, (SDMA_GCR_GL2_INV | +SDMA_GCR_GL2_WB | +SDMA_GCR_GLM_INV | +SDMA_GCR_GLM_WB ) <<16 ); +amdgpu_ring_write (ring,0xffffff80 ); +amdgpu_ring_write (ring,0xffff ); + +/* An IB packet must end on a 8 DW boundary--the next dword +* must be on a 8-dword boundary. Our IB packet below is 6 +* dwords long, thus add x number of NOPs, such that, in +* modular arithmetic, +* wptr + 6 + x = 8k, k >= 0, which in C is, +* (wptr + 6 + x) % 8 = 0. +* The expression below, is a solution of x. +*/ +sdma_v5_0_ring_insert_nop (ring, (2 -lower_32_bits (ring->wptr)) &7 );amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_INDIRECT ) |SDMA_PKT_INDIRECT_HEADER_VMID (vmid &0xf ));
@@ -1086,10 +1105,10 @@ static void sdma_v5_0_vm_set_pte_pde(struct amdgpu_ib *ib, }/** -* sdma_v5_0_ring_pad_ib - pad the IB to the required number of dw -* +* sdma_v5_0_ring_pad_ib - pad the IB * @ib: indirect buffer to fill with padding * +* Pad the IB with NOPs to a boundary multiple of 8. */ static void sdma_v5_0_ring_pad_ib (struct amdgpu_ring *ring,struct amdgpu_ib *ib) {
@@ -1097,7 +1116,7 @@ static void sdma_v5_0_ring_pad_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ibu32 pad_count;int i; - pad_count = (8 - (ib->length_dw &0x7 )) %8 ; + pad_count = (-ib->length_dw) &0x7 ;for (i =0 ; i < pad_count; i++)if (sdma && sdma->burst_nop && (i ==0 )) ib->ptr[ib->length_dw++] =
@@ -1600,7 +1619,7 @@ static const struct amdgpu_ring_funcs sdma_v5_0_ring_funcs = {SOC15_FLUSH_GPU_TLB_NUM_WREG *3 +SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT *6 *2 + 10 + 10 + 10, /* sdma_v5_0_ring_emit_fence x3 for user fence, vm fence */ - .emit_ib_size = 7 + 6, /* sdma_v5_0_ring_emit_ib */ + .emit_ib_size = 5 + 7 + 6, /* sdma_v5_0_ring_emit_ib */ .emit_ib = sdma_v5_0_ring_emit_ib, .emit_fence = sdma_v5_0_ring_emit_fence, .emit_pipeline_sync = sdma_v5_0_ring_emit_pipeline_sync,
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +24 -2
@@ -6921,6 +6921,7 @@ static int dm_update_plane_state(struct dc *dc,struct drm_crtc_state *old_crtc_state, *new_crtc_state;struct dm_crtc_state *dm_new_crtc_state, *dm_old_crtc_state;struct dm_plane_state *dm_new_plane_state, *dm_old_plane_state; +struct amdgpu_crtc *new_acrtc;bool needs_reset;int ret =0 ;
@@ -6930,9 +6931,30 @@ static int dm_update_plane_state(struct dc *dc, dm_new_plane_state =to_dm_plane_state (new_plane_state); dm_old_plane_state =to_dm_plane_state (old_plane_state); -/*TODO Implement atomic check for cursor plane */ -if (plane->type ==DRM_PLANE_TYPE_CURSOR ) +/*TODO Implement better atomic check for cursor plane */ +if (plane->type ==DRM_PLANE_TYPE_CURSOR ) { +if (!enable || !new_plane_crtc || +drm_atomic_plane_disabling (plane->state, new_plane_state)) +return 0 ; + + new_acrtc =to_amdgpu_crtc (new_plane_crtc); + +if ((new_plane_state->crtc_w > new_acrtc->max_cursor_width) || + (new_plane_state->crtc_h > new_acrtc->max_cursor_height)) { +DRM_DEBUG_ATOMIC ("Bad cursor size %d x %d\n" , + new_plane_state->crtc_w, new_plane_state->crtc_h); +return -EINVAL ; + } + +if (new_plane_state->crtc_x <= -new_acrtc->max_cursor_width || + new_plane_state->crtc_y <= -new_acrtc->max_cursor_height) { +DRM_DEBUG_ATOMIC ("Bad cursor position %d, %d\n" , + new_plane_state->crtc_x, new_plane_state->crtc_y); +return -EINVAL ; + } +return 0 ; + } needs_reset =should_reset_plane (state, plane, old_plane_state, new_plane_state);
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +2 -1
@@ -2015,7 +2015,8 @@ static void dcn20_fpga_init_hw(struct dc *dc)REG_UPDATE (DCHUBBUB_GLOBAL_TIMER_CNTL ,DCHUBBUB_GLOBAL_TIMER_REFDIV ,2 );REG_UPDATE (DCHUBBUB_GLOBAL_TIMER_CNTL ,DCHUBBUB_GLOBAL_TIMER_ENABLE ,1 ); -REG_WRITE (REFCLK_CNTL ,0 ); +if (REG (REFCLK_CNTL )) +REG_WRITE (REFCLK_CNTL ,0 );//
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +1 -1
@@ -247,7 +247,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_1_soc = { .dram_channel_width_bytes = 4, .fabric_datapath_to_dcn_data_return_bytes = 32, .dcn_downspread_percent = 0.5, - .downspread_percent = 0.5, + .downspread_percent = 0.38, .dram_page_open_time_ns = 50.0, .dram_rw_turnaround_time_ns = 17.5, .dram_return_buffer_per_channel_bytes = 8192,
drivers/gpu/drm/amd/powerplay/amd_powerplay.c +4 -2
@@ -1425,7 +1425,8 @@ static int pp_get_asic_baco_capability(void *handle, bool *cap)if (!hwmgr)return -EINVAL ; -if (!hwmgr->pm_en || !hwmgr->hwmgr_func->get_asic_baco_capability) +if (!(hwmgr->not_vf && amdgpu_dpm) || + !hwmgr->hwmgr_func->get_asic_baco_capability)return 0 ;mutex_lock (&hwmgr->smu_lock);
@@ -1459,7 +1460,8 @@ static int pp_set_asic_baco_state(void *handle, int state)if (!hwmgr)return -EINVAL ; -if (!hwmgr->pm_en || !hwmgr->hwmgr_func->set_asic_baco_state) +if (!(hwmgr->not_vf && amdgpu_dpm) || + !hwmgr->hwmgr_func->set_asic_baco_state)return 0 ;mutex_lock (&hwmgr->smu_lock);
drivers/gpu/drm/i915/display/intel_fbc.c +1 -2
@@ -504,8 +504,7 @@ static int intel_fbc_alloc_cfb(struct intel_crtc *crtc)if (!ret) goto err_llb;else if (ret >1 ) { -DRM_INFO ("Reducing the compressed framebuffer size. This may lead to less power savings than a non-reduced-size. Try to increase stolen memory size if available in BIOS.\n" ); - +DRM_INFO_ONCE ("Reducing the compressed framebuffer size. This may lead to less power savings than a non-reduced-size. Try to increase stolen memory size if available in BIOS.\n" ); } fbc->threshold = ret;
drivers/gpu/drm/i915/gvt/scheduler.c +5 -1
@@ -374,7 +374,11 @@ static void set_context_ppgtt_from_shadow(struct intel_vgpu_workload *workload,for (i =0 ; i <GVT_RING_CTX_NR_PDPS ; i++) {struct i915_page_directory *const pd =i915_pd_entry (ppgtt->pd, i); - +/* skip now as current i915 ppgtt alloc won't allocate +top level pdp for non 4-level table, won't impact +shadow ppgtt. */ +if (!pd) +break ;px_dma (pd) = mm->ppgtt_mm.shadow_pdps[i]; } }
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -4784,7 +4784,7 @@ static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,* WaIncreaseLatencyIPCEnabled: kbl,cfl * Display WA #1141: kbl,cfl */ -if ((IS_KABYLAKE (dev_priv) ||IS_COFFEELAKE (dev_priv)) || +if ((IS_KABYLAKE (dev_priv) ||IS_COFFEELAKE (dev_priv)) && dev_priv->ipc_enabled) latency +=4 ;
drivers/gpu/drm/qxl/qxl_image.c +2 -1
@@ -212,7 +212,8 @@ qxl_image_init_helper(struct qxl_device *qdev,break ;default :DRM_ERROR ("unsupported image bit depth\n" ); -return -EINVAL ;/* TODO: cleanup */ +qxl_bo_kunmap_atomic_page (qdev, image_bo, ptr); +return -EINVAL ; } image->u.bitmap.flags =QXL_BITMAP_TOP_DOWN ; image->u.bitmap.x = width;
drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +1 -1
@@ -718,7 +718,7 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder)struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;struct sun6i_dsi *dsi =encoder_to_sun6i_dsi (encoder);struct mipi_dsi_device *device = dsi->device; -union phy_configure_opts opts = {0 }; +union phy_configure_opts opts = { };struct phy_configure_opts_mipi_dphy *cfg = &opts.mipi_dphy;u16 delay;
drivers/hwmon/da9052-hwmon.c +2 -2
@@ -244,9 +244,9 @@ static ssize_t da9052_tsi_show(struct device *dev,int channel =to_sensor_dev_attr (devattr)->index;int ret; -mutex_lock (&hwmon->hwmon_lock); +mutex_lock (&hwmon->da9052->auxadc_lock); ret =__da9052_read_tsi (dev, channel); -mutex_unlock (&hwmon->hwmon_lock); +mutex_unlock (&hwmon->da9052->auxadc_lock);if (ret <0 )return ret;
drivers/infiniband/core/cache.c +5 -2
@@ -1542,8 +1542,11 @@ int ib_cache_setup_one(struct ib_device *device)if (err)return err; - rdma_for_each_port (device, p) -ib_cache_update (device, p, true); + rdma_for_each_port (device, p) { + err =ib_cache_update (device, p, true); +if (err) +return err; + }return 0 ; }
drivers/infiniband/core/nldev.c +1 -1
@@ -1248,10 +1248,10 @@ static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh, has_cap_net_admin =netlink_capable (skb,CAP_NET_ADMIN ); ret = fe->fill_res_func (msg, has_cap_net_admin, res, port); -rdma_restrack_put (res);if (ret) goto err_free; +rdma_restrack_put (res);nlmsg_end (msg, nlh);ib_device_put (device);return rdma_nl_unicast (sock_net (skb->sk), msg,NETLINK_CB (skb).portid);
drivers/infiniband/hw/cxgb4/cm.c +3 -4
@@ -2891,8 +2891,7 @@ static int peer_abort(struct c4iw_dev *dev, struct sk_buff *skb) srqidx =ABORT_RSS_SRQIDX_G (be32_to_cpu (req->srqidx_status));if (srqidx) { -complete_cached_srq_buffers (ep, - req->srqidx_status); +complete_cached_srq_buffers (ep, srqidx); }else {/* Hold ep ref until finish_peer_abort() */ c4iw_get_ep (&ep->com);
@@ -3878,8 +3877,8 @@ static int read_tcb_rpl(struct c4iw_dev *dev, struct sk_buff *skb)return 0 ; } - ep->srqe_idx =t4_tcb_get_field32 (tcb,TCB_RQ_START_W ,TCB_RQ_START_W , -TCB_RQ_START_S ); + ep->srqe_idx =t4_tcb_get_field32 (tcb,TCB_RQ_START_W ,TCB_RQ_START_M , +TCB_RQ_START_S ); cleanup:pr_debug ("ep %p tid %u %016x\n" , ep, ep->hwtid, ep->srqe_idx);
drivers/infiniband/hw/hfi1/user_sdma.c +0 -4
@@ -589,10 +589,6 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,set_comp_state (pq, cq, info.comp_idx,QUEUED ,0 ); pq->state =SDMA_PKT_Q_ACTIVE ; -/* Send the first N packets in the request to buy us some time */ - ret =user_sdma_send_pkts (req, pcount); -if (unlikely (ret <0 && ret != -EBUSY )) - goto free_req;/* * This is a somewhat blocking send implementation.
drivers/infiniband/hw/i40iw/i40iw_hw.c +1 -1
@@ -534,7 +534,7 @@ void i40iw_manage_arp_cache(struct i40iw_device *iwdev,int arp_index; arp_index =i40iw_arp_table (iwdev, ip_addr, ipv4, mac_addr, action); -if (arp_index ==-1 ) +if (arp_index <0 )return ; cqp_request =i40iw_get_cqp_request (&iwdev->cqp, false);if (!cqp_request)
drivers/infiniband/hw/mlx4/qp.c +11 -3
@@ -2891,6 +2891,7 @@ static int build_sriov_qp0_header(struct mlx4_ib_sqp *sqp,int send_size;int header_size;int spc; +int err;int i;if (wr->wr.opcode !=IB_WR_SEND )
@@ -2925,7 +2926,9 @@ static int build_sriov_qp0_header(struct mlx4_ib_sqp *sqp, sqp->ud_header.lrh.virtual_lane =0 ; sqp->ud_header.bth.solicited_event = !!(wr->wr.send_flags &IB_SEND_SOLICITED ); -ib_get_cached_pkey (ib_dev, sqp->qp.port,0 , &pkey); + err =ib_get_cached_pkey (ib_dev, sqp->qp.port,0 , &pkey); +if (err) +return err; sqp->ud_header.bth.pkey =cpu_to_be16 (pkey);if (sqp->qp.mlx4_ib_qp_type ==MLX4_IB_QPT_TUN_SMI_OWNER ) sqp->ud_header.bth.destination_qpn =cpu_to_be32 (wr->remote_qpn);
@@ -3212,9 +3215,14 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, const struct ib_ud_wr *wr, } sqp->ud_header.bth.solicited_event = !!(wr->wr.send_flags &IB_SEND_SOLICITED );if (!sqp->qp.ibqp.qp_num) -ib_get_cached_pkey (ib_dev, sqp->qp.port, sqp->pkey_index, &pkey); + err =ib_get_cached_pkey (ib_dev, sqp->qp.port, sqp->pkey_index, + &pkey);else -ib_get_cached_pkey (ib_dev, sqp->qp.port, wr->pkey_index, &pkey); + err =ib_get_cached_pkey (ib_dev, sqp->qp.port, wr->pkey_index, + &pkey); +if (err) +return err; + sqp->ud_header.bth.pkey =cpu_to_be16 (pkey); sqp->ud_header.bth.destination_qpn =cpu_to_be32 (wr->remote_qpn); sqp->ud_header.bth.psn =cpu_to_be32 ((sqp->send_psn++) & ((1 <<24 ) -1 ));
drivers/infiniband/sw/rxe/rxe_mmap.c +1 -1
@@ -151,7 +151,7 @@ struct rxe_mmap_info *rxe_create_mmap_info(struct rxe_dev *rxe, u32 size, ip =kmalloc (sizeof (*ip),GFP_KERNEL );if (!ip) -return NULL ; +return ERR_PTR (-ENOMEM ); size =PAGE_ALIGN (size);
drivers/infiniband/sw/rxe/rxe_queue.c +7 -4
@@ -45,12 +45,15 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf,if (outbuf) { ip =rxe_create_mmap_info (rxe, buf_size, udata, buf); -if (!ip) +if (IS_ERR (ip)) { + err =PTR_ERR (ip); goto err1; + } - err =copy_to_user (outbuf, &ip->info,sizeof (ip->info)); -if (err) +if (copy_to_user (outbuf, &ip->info,sizeof (ip->info))) { + err = -EFAULT ; goto err2; + }spin_lock_bh (&rxe->pending_lock);list_add (&ip->pending_mmaps, &rxe->pending_mmaps);
@@ -64,7 +67,7 @@ int do_mmap_info(struct rxe_dev *rxe, struct mminfo __user *outbuf, err2:kfree (ip); err1: -return -EINVAL ; +return err; }inline void rxe_queue_reset (struct rxe_queue *q)
drivers/mmc/core/block.c +2 -1
@@ -1417,6 +1417,7 @@ static void mmc_blk_cqe_complete_rq(struct mmc_queue *mq, struct request *req)struct mmc_request *mrq = &mqrq->brq.mrq;struct request_queue *q = req->q;struct mmc_host *host = mq->card->host; +enum mmc_issue_type issue_type =mmc_issue_type (mq, req);unsigned long flags;bool put_card;int err;
@@ -1446,7 +1447,7 @@ static void mmc_blk_cqe_complete_rq(struct mmc_queue *mq, struct request *req)spin_lock_irqsave (&mq->lock, flags); - mq->in_flight[mmc_issue_type (mq, req)] -=1 ; + mq->in_flight[issue_type] -=1 ; put_card = (mmc_tot_in_flight (mq) ==0 );
drivers/mmc/core/queue.c +5 -11
@@ -107,11 +107,10 @@ static enum blk_eh_timer_return mmc_cqe_timed_out(struct request *req)case MMC_ISSUE_DCMD :if (host->cqe_ops->cqe_timeout (host, mrq, &recovery_needed)) {if (recovery_needed) -__mmc_cqe_recovery_notifier (mq); +mmc_cqe_recovery_notifier (mrq);return BLK_EH_RESET_TIMER ; } -/* No timeout (XXX: huh? comment doesn't make much sense) */ -blk_mq_complete_request (req); +/* The request has gone already */ return BLK_EH_DONE ;default :/* Timeout is handled by mmc core */
@@ -125,18 +124,13 @@ static enum blk_eh_timer_return mmc_mq_timed_out(struct request *req,struct request_queue *q = req->q;struct mmc_queue *mq = q->queuedata;unsigned long flags; -int ret; +bool ignore_tout;spin_lock_irqsave (&mq->lock, flags); - -if (mq->recovery_needed || !mq->use_cqe) - ret =BLK_EH_RESET_TIMER ; -else - ret =mmc_cqe_timed_out (req); - + ignore_tout = mq->recovery_needed || !mq->use_cqe;spin_unlock_irqrestore (&mq->lock, flags); -return ret; +return ignore_tout ?BLK_EH_RESET_TIMER :mmc_cqe_timed_out (req); }static void mmc_mq_recovery_handler (struct work_struct *work)
drivers/mmc/host/alcor.c +5 -1
@@ -1104,7 +1104,7 @@ static int alcor_pci_sdmmc_drv_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"Failed to get irq for data line\n" ); -return ret; + goto free_host; }mutex_init (&host->cmd_mutex);
@@ -1116,6 +1116,10 @@ static int alcor_pci_sdmmc_drv_probe(struct platform_device *pdev)dev_set_drvdata (&pdev->dev, host);mmc_add_host (mmc);return 0 ; + +free_host: +mmc_free_host (mmc); +return ret; }static int alcor_pci_sdmmc_drv_remove (struct platform_device *pdev)
drivers/mmc/host/sdhci-acpi.c +6 -4
@@ -602,10 +602,12 @@ static int sdhci_acpi_emmc_amd_probe_slot(struct platform_device *pdev, }static const struct sdhci_acpi_slot sdhci_acpi_slot_amd_emmc = { - .chip = &sdhci_acpi_chip_amd, - .caps =MMC_CAP_8_BIT_DATA |MMC_CAP_NONREMOVABLE , - .quirks =SDHCI_QUIRK_32BIT_DMA_ADDR |SDHCI_QUIRK_32BIT_DMA_SIZE | -SDHCI_QUIRK_32BIT_ADMA_SIZE , + .chip = &sdhci_acpi_chip_amd, + .caps =MMC_CAP_8_BIT_DATA |MMC_CAP_NONREMOVABLE , + .quirks =SDHCI_QUIRK_32BIT_DMA_ADDR | +SDHCI_QUIRK_32BIT_DMA_SIZE | +SDHCI_QUIRK_32BIT_ADMA_SIZE , + .quirks2 =SDHCI_QUIRK2_BROKEN_64_BIT_DMA , .probe_slot = sdhci_acpi_emmc_amd_probe_slot, };
drivers/mmc/host/sdhci-pci-gli.c +23 -0
@@ -26,6 +26,9 @@#define SDHCI_GLI_9750_DRIVING_2 GENMASK(27, 26)#define GLI_9750_DRIVING_1_VALUE 0xFFF#define GLI_9750_DRIVING_2_VALUE 0x3 +#define SDHCI_GLI_9750_SEL_1 BIT(29) +#define SDHCI_GLI_9750_SEL_2 BIT(31) +#define SDHCI_GLI_9750_ALL_RST (BIT(24)|BIT(25)|BIT(28)|BIT(30))#define SDHCI_GLI_9750_PLL 0x864#define SDHCI_GLI_9750_PLL_TX2_INV BIT(23)
@@ -122,6 +125,8 @@ static void gli_set_9750(struct sdhci_host *host) GLI_9750_DRIVING_1_VALUE); driving_value |=FIELD_PREP (SDHCI_GLI_9750_DRIVING_2 ,GLI_9750_DRIVING_2_VALUE ); + driving_value &= ~(SDHCI_GLI_9750_SEL_1 |SDHCI_GLI_9750_SEL_2 |SDHCI_GLI_9750_ALL_RST ); + driving_value |=SDHCI_GLI_9750_SEL_2 ;sdhci_writel (host, driving_value,SDHCI_GLI_9750_DRIVING ); sw_ctrl_value &= ~SDHCI_GLI_9750_SW_CTRL_4 ;
@@ -334,6 +339,18 @@ static u32 sdhci_gl9750_readl(struct sdhci_host *host, int reg)return value; } +#ifdef CONFIG_PM_SLEEP +static int sdhci_pci_gli_resume (struct sdhci_pci_chip *chip) +{ +struct sdhci_pci_slot *slot = chip->slots[0 ]; + +pci_free_irq_vectors (slot->chip->pdev); +gli_pcie_enable_msi (slot); + +return sdhci_pci_resume_host (chip); +} +#endif +static const struct sdhci_ops sdhci_gl9755_ops = { .set_clock = sdhci_set_clock, .enable_dma = sdhci_pci_enable_dma,
@@ -348,6 +365,9 @@ const struct sdhci_pci_fixes sdhci_gl9755 = { .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50, .probe_slot = gli_probe_slot_gl9755, .ops = &sdhci_gl9755_ops, +#ifdef CONFIG_PM_SLEEP + .resume = sdhci_pci_gli_resume, +#endif };static const struct sdhci_ops sdhci_gl9750_ops = {
@@ -366,4 +386,7 @@ const struct sdhci_pci_fixes sdhci_gl9750 = { .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50, .probe_slot = gli_probe_slot_gl9750, .ops = &sdhci_gl9750_ops, +#ifdef CONFIG_PM_SLEEP + .resume = sdhci_pci_gli_resume, +#endif };
drivers/net/dsa/dsa_loop.c +1 -0
@@ -356,6 +356,7 @@ static void __exit dsa_loop_exit(void) }module_exit (dsa_loop_exit); +MODULE_SOFTDEP ("pre: dsa_loop_bdinfo" );MODULE_LICENSE ("GPL" );MODULE_AUTHOR ("Florian Fainelli" );MODULE_DESCRIPTION ("DSA loopback driver" );
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +17 -12
@@ -86,7 +86,7 @@ static void free_rx_fd(struct dpaa2_eth_priv *priv,for (i =1 ; i <DPAA2_ETH_MAX_SG_ENTRIES ; i++) { addr =dpaa2_sg_get_addr (&sgt[i]); sg_vaddr =dpaa2_iova_to_virt (priv->iommu_domain, addr); -dma_unmap_page (dev, addr,DPAA2_ETH_RX_BUF_SIZE , +dma_unmap_page (dev, addr, priv->rx_buf_size,DMA_BIDIRECTIONAL );free_pages ((unsigned long )sg_vaddr,0 );
@@ -144,7 +144,7 @@ static struct sk_buff *build_frag_skb(struct dpaa2_eth_priv *priv,/* Get the address and length from the S/G entry */ sg_addr =dpaa2_sg_get_addr (sge); sg_vaddr =dpaa2_iova_to_virt (priv->iommu_domain, sg_addr); -dma_unmap_page (dev, sg_addr,DPAA2_ETH_RX_BUF_SIZE , +dma_unmap_page (dev, sg_addr, priv->rx_buf_size,DMA_BIDIRECTIONAL ); sg_length =dpaa2_sg_get_len (sge);
@@ -185,7 +185,7 @@ static struct sk_buff *build_frag_skb(struct dpaa2_eth_priv *priv, (page_address (page) -page_address (head_page));skb_add_rx_frag (skb, i -1 , head_page, page_offset, - sg_length,DPAA2_ETH_RX_BUF_SIZE ); + sg_length, priv->rx_buf_size); }if (dpaa2_sg_is_final (sge))
@@ -211,7 +211,7 @@ static void free_bufs(struct dpaa2_eth_priv *priv, u64 *buf_array, int count)for (i =0 ; i < count; i++) { vaddr =dpaa2_iova_to_virt (priv->iommu_domain, buf_array[i]); -dma_unmap_page (dev, buf_array[i],DPAA2_ETH_RX_BUF_SIZE , +dma_unmap_page (dev, buf_array[i], priv->rx_buf_size,DMA_BIDIRECTIONAL );free_pages ((unsigned long )vaddr,0 ); }
@@ -331,7 +331,7 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv,break ;case XDP_REDIRECT :dma_unmap_page (priv->net_dev->dev.parent, addr, -DPAA2_ETH_RX_BUF_SIZE ,DMA_BIDIRECTIONAL ); + priv->rx_buf_size,DMA_BIDIRECTIONAL ); ch->buf_count--; xdp.data_hard_start = vaddr; err =xdp_do_redirect (priv->net_dev, &xdp, xdp_prog);
@@ -370,7 +370,7 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,trace_dpaa2_rx_fd (priv->net_dev, fd); vaddr =dpaa2_iova_to_virt (priv->iommu_domain, addr); -dma_sync_single_for_cpu (dev, addr,DPAA2_ETH_RX_BUF_SIZE , +dma_sync_single_for_cpu (dev, addr, priv->rx_buf_size,DMA_BIDIRECTIONAL ); fas =dpaa2_get_fas (vaddr, false);
@@ -389,13 +389,13 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,return ; } -dma_unmap_page (dev, addr,DPAA2_ETH_RX_BUF_SIZE , +dma_unmap_page (dev, addr, priv->rx_buf_size,DMA_BIDIRECTIONAL ); skb =build_linear_skb (ch, fd, vaddr); }else if (fd_format == dpaa2_fd_sg) {WARN_ON (priv->xdp_prog); -dma_unmap_page (dev, addr,DPAA2_ETH_RX_BUF_SIZE , +dma_unmap_page (dev, addr, priv->rx_buf_size,DMA_BIDIRECTIONAL ); skb =build_frag_skb (priv, ch, buf_data);free_pages ((unsigned long )vaddr,0 );
@@ -963,7 +963,7 @@ static int add_bufs(struct dpaa2_eth_priv *priv,if (!page) goto err_alloc; - addr =dma_map_page (dev, page,0 ,DPAA2_ETH_RX_BUF_SIZE , + addr =dma_map_page (dev, page,0 , priv->rx_buf_size,DMA_BIDIRECTIONAL );if (unlikely (dma_mapping_error (dev, addr))) goto err_map;
@@ -973,7 +973,7 @@ static int add_bufs(struct dpaa2_eth_priv *priv,/* tracing point */ trace_dpaa2_eth_buf_seed (priv->net_dev, page,DPAA2_ETH_RX_BUF_RAW_SIZE , - addr,DPAA2_ETH_RX_BUF_SIZE , + addr, priv->rx_buf_size, bpid); }
@@ -1680,7 +1680,7 @@ static bool xdp_mtu_valid(struct dpaa2_eth_priv *priv, int mtu)int mfl, linear_mfl; mfl =DPAA2_ETH_L2_MAX_FRM (mtu); - linear_mfl =DPAA2_ETH_RX_BUF_SIZE -DPAA2_ETH_RX_HWA_SIZE - + linear_mfl = priv->rx_buf_size -DPAA2_ETH_RX_HWA_SIZE -dpaa2_eth_rx_head_room (priv) -XDP_PACKET_HEADROOM ;if (mfl > linear_mfl) {
@@ -2432,6 +2432,11 @@ static int set_buffer_layout(struct dpaa2_eth_priv *priv)else rx_buf_align =DPAA2_ETH_RX_BUF_ALIGN ; +/* We need to ensure that the buffer size seen by WRIOP is a multiple +* of 64 or 256 bytes depending on the WRIOP version. +*/ + priv->rx_buf_size =ALIGN_DOWN (DPAA2_ETH_RX_BUF_SIZE , rx_buf_align); +/* tx buffer */ buf_layout.private_data_size =DPAA2_ETH_SWA_SIZE ; buf_layout.pass_timestamp = true;
@@ -3096,7 +3101,7 @@ static int bind_dpni(struct dpaa2_eth_priv *priv) pools_params.num_dpbp =1 ; pools_params.pools[0 ].dpbp_id = priv->dpbp_dev->obj_desc.id; pools_params.pools[0 ].backup_pool =0 ; - pools_params.pools[0 ].buffer_size =DPAA2_ETH_RX_BUF_SIZE ; + pools_params.pools[0 ].buffer_size = priv->rx_buf_size; err =dpni_set_pools (priv->mc_io,0 , priv->mc_token, &pools_params);if (err) {dev_err (dev,"dpni_set_pools() failed\n" );
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +1 -0
@@ -373,6 +373,7 @@ struct dpaa2_eth_priv {u16 tx_data_offset;struct fsl_mc_device *dpbp_dev; +u16 rx_buf_size;u16 bpid;struct iommu_domain *iommu_domain;
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c +1 -1
@@ -590,7 +590,7 @@ static int num_rules(struct dpaa2_eth_priv *priv)static int update_cls_rule (struct net_device *net_dev,struct ethtool_rx_flow_spec *new_fs, -int location) +unsigned int location) {struct dpaa2_eth_priv *priv =netdev_priv (net_dev);struct dpaa2_eth_cls_rule *rule;
drivers/net/ethernet/huawei/hinic/hinic_hw_mgmt.c +12 -4
@@ -45,6 +45,8 @@#define MGMT_MSG_TIMEOUT 5000 +#define SET_FUNC_PORT_MGMT_TIMEOUT 25000 +#define mgmt_to_pfhwdev (pf_mgmt) \ container_of(pf_mgmt, struct hinic_pfhwdev, pf_to_mgmt)
@@ -238,12 +240,13 @@ static int msg_to_mgmt_sync(struct hinic_pf_to_mgmt *pf_to_mgmt, u8 *buf_in, u16 in_size, u8 *buf_out, u16 *out_size, enum mgmt_direction_type direction, - u16 resp_msg_id) + u16 resp_msg_id, u32 timeout) { struct hinic_hwif *hwif = pf_to_mgmt->hwif;struct pci_dev *pdev = hwif->pdev;struct hinic_recv_msg *recv_msg;struct completion *recv_done; +unsigned long timeo;u16 msg_id;int err;
@@ -267,8 +270,9 @@ static int msg_to_mgmt_sync(struct hinic_pf_to_mgmt *pf_to_mgmt, goto unlock_sync_msg; } -if (!wait_for_completion_timeout (recv_done, -msecs_to_jiffies (MGMT_MSG_TIMEOUT ))) { + timeo =msecs_to_jiffies (timeout ? timeout :MGMT_MSG_TIMEOUT ); + +if (!wait_for_completion_timeout (recv_done, timeo)) {dev_err (&pdev->dev,"MGMT timeout, MSG id = %d\n" , msg_id); err = -ETIMEDOUT ; goto unlock_sync_msg;
@@ -342,6 +346,7 @@ int hinic_msg_to_mgmt(struct hinic_pf_to_mgmt *pf_to_mgmt, {struct hinic_hwif *hwif = pf_to_mgmt->hwif;struct pci_dev *pdev = hwif->pdev; +u32 timeout =0 ;if (sync !=HINIC_MGMT_MSG_SYNC ) {dev_err (&pdev->dev,"Invalid MGMT msg type\n" );
@@ -353,9 +358,12 @@ int hinic_msg_to_mgmt(struct hinic_pf_to_mgmt *pf_to_mgmt,return -EINVAL ; } +if (cmd ==HINIC_PORT_CMD_SET_FUNC_STATE ) + timeout =SET_FUNC_PORT_MGMT_TIMEOUT ; +return msg_to_mgmt_sync (pf_to_mgmt, mod, cmd, buf_in, in_size, buf_out, out_size,MGMT_DIRECT_SEND , -MSG_NOT_RESP ); +MSG_NOT_RESP , timeout); }/**
drivers/net/ethernet/huawei/hinic/hinic_main.c +2 -14
@@ -483,7 +483,6 @@ static int hinic_close(struct net_device *netdev) {struct hinic_dev *nic_dev =netdev_priv (netdev);unsigned int flags; -int err;down (&nic_dev->mgmt_lock);
@@ -497,20 +496,9 @@ static int hinic_close(struct net_device *netdev)up (&nic_dev->mgmt_lock); - err =hinic_port_set_func_state (nic_dev,HINIC_FUNC_PORT_DISABLE ); -if (err) { -netif_err (nic_dev, drv, netdev, -"Failed to set func port state\n" ); - nic_dev->flags |= (flags &HINIC_INTF_UP ); -return err; - } +hinic_port_set_state (nic_dev,HINIC_PORT_DISABLE ); - err =hinic_port_set_state (nic_dev,HINIC_PORT_DISABLE ); -if (err) { -netif_err (nic_dev, drv, netdev,"Failed to set port state\n" ); - nic_dev->flags |= (flags &HINIC_INTF_UP ); -return err; - } +hinic_port_set_func_state (nic_dev,HINIC_FUNC_PORT_DISABLE );if (nic_dev->flags &HINIC_RSS_ENABLE ) {hinic_rss_deinit (nic_dev);
drivers/net/ethernet/moxa/moxart_ether.c +1 -1
@@ -564,7 +564,7 @@ static int moxart_remove(struct platform_device *pdev)struct net_device *ndev =platform_get_drvdata (pdev);unregister_netdev (ndev); -free_irq (ndev->irq, ndev); +devm_free_irq (&pdev->dev, ndev->irq, ndev);moxart_mac_free_memory (ndev);free_netdev (ndev);
drivers/net/ethernet/natsemi/jazzsonic.c +4 -2
@@ -235,11 +235,13 @@ static int jazz_sonic_probe(struct platform_device *pdev) err =register_netdev (dev);if (err) - goto out1; + goto undo_probe1;return 0 ; -out1: +undo_probe1: +dma_free_coherent (lp->device,SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr);release_mem_region (dev->base_addr,SONIC_MEM_SIZE ); out:free_netdev (dev);
drivers/net/ethernet/netronome/nfp/abm/main.c +3 -1
@@ -333,8 +333,10 @@ nfp_abm_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id) goto err_free_alink; alink->prio_map =kzalloc (abm->prio_map_len,GFP_KERNEL ); -if (!alink->prio_map) +if (!alink->prio_map) { + err = -ENOMEM ; goto err_free_alink; + }/* This is a multi-host app, make sure MAC/PHY is up, but don't * make the MAC/PHY state follow the state of any of the ports.
drivers/net/ethernet/realtek/r8169_main.c +2 -0
@@ -2202,6 +2202,8 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp) { 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 }, { 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 }, { 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 }, +/* RTL8401, reportedly works if treated as RTL8101e */ + { 0x7cf, 0x240, RTL_GIGA_MAC_VER_13 }, { 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 }, { 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 }, { 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 },
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +15 -2
@@ -75,6 +75,11 @@ struct ethqos_emac_por {unsigned int value; }; +struct ethqos_emac_driver_data { +const struct ethqos_emac_por *por; +unsigned int num_por; +}; +struct qcom_ethqos {struct platform_device *pdev;void __iomem *rgmii_base;
@@ -171,6 +176,11 @@ static const struct ethqos_emac_por emac_v2_3_0_por[] = { { .offset = RGMII_IO_MACRO_CONFIG2, .value = 0x00002060 }, }; +static const struct ethqos_emac_driver_data emac_v2_3_0_data = { + .por = emac_v2_3_0_por, + .num_por =ARRAY_SIZE (emac_v2_3_0_por), +}; +static int ethqos_dll_configure (struct qcom_ethqos *ethqos) {unsigned int val;
@@ -442,6 +452,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)struct device_node *np = pdev->dev.of_node;struct plat_stmmacenet_data *plat_dat;struct stmmac_resources stmmac_res; +const struct ethqos_emac_driver_data *data;struct qcom_ethqos *ethqos;struct resource *res;int ret;
@@ -471,7 +482,9 @@ static int qcom_ethqos_probe(struct platform_device *pdev) goto err_mem; } - ethqos->por =of_device_get_match_data (&pdev->dev); + data =of_device_get_match_data (&pdev->dev); + ethqos->por = data->por; + ethqos->num_por = data->num_por; ethqos->rgmii_clk =devm_clk_get (&pdev->dev,"rgmii" );if (IS_ERR (ethqos->rgmii_clk)) {
@@ -526,7 +539,7 @@ static int qcom_ethqos_remove(struct platform_device *pdev) }static const struct of_device_id qcom_ethqos_match[] = { - { .compatible ="qcom,qcs404-ethqos" , .data = &emac_v2_3_0_por}, + { .compatible ="qcom,qcs404-ethqos" , .data = &emac_v2_3_0_data}, { } };MODULE_DEVICE_TABLE (of, qcom_ethqos_match);
drivers/net/phy/microchip_t1.c +171 -0
201 lines not on this page · raw message
drivers/net/phy/phy.c +5 -3
@@ -1160,9 +1160,11 @@ int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data)/* Restart autonegotiation so the new modes get sent to the * link partner. */ - ret =phy_restart_aneg (phydev); -if (ret <0 ) -return ret; +if (phydev->autoneg ==AUTONEG_ENABLE ) { + ret =phy_restart_aneg (phydev); +if (ret <0 ) +return ret; + } }return 0 ;
drivers/net/ppp/pppoe.c +3 -0
@@ -492,6 +492,9 @@ static int pppoe_disc_rcv(struct sk_buff *skb, struct net_device *dev,if (!skb) goto out; +if (skb->pkt_type !=PACKET_HOST ) + goto abort; +if (!pskb_may_pull (skb,sizeof (struct pppoe_hdr ))) goto abort;
drivers/net/virtio_net.c +4 -2
@@ -1231,9 +1231,11 @@ static bool try_fill_recv(struct virtnet_info *vi, struct receive_queue *rq,break ; }while (rq->vq->num_free);if (virtqueue_kick_prepare (rq->vq) &&virtqueue_notify (rq->vq)) { -u64_stats_update_begin (&rq->stats.syncp); +unsigned long flags; + + flags =u64_stats_update_begin_irqsave (&rq->stats.syncp); rq->stats.kicks++; -u64_stats_update_end (&rq->stats.syncp); +u64_stats_update_end_irqrestore (&rq->stats.syncp, flags); }return !oom;
drivers/pinctrl/intel/pinctrl-baytrail.c +1 -0
@@ -1297,6 +1297,7 @@ static const struct gpio_chip byt_gpio_chip = { .direction_output = byt_gpio_direction_output, .get = byt_gpio_get, .set = byt_gpio_set, + .set_config = gpiochip_generic_config, .dbg_show = byt_gpio_dbg_show, };
drivers/pinctrl/intel/pinctrl-cherryview.c +4 -0
@@ -1474,11 +1474,15 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)struct chv_pinctrl *pctrl =gpiochip_get_data (gc);struct irq_chip *chip =irq_desc_get_chip (desc);unsigned long pending; +unsigned long flags;u32 intr_line;chained_irq_enter (chip, desc); +raw_spin_lock_irqsave (&chv_lock, flags); pending =readl (pctrl->regs +CHV_INTSTAT ); +raw_spin_unlock_irqrestore (&chv_lock, flags); +for_each_set_bit (intr_line, &pending, pctrl->community->nirqs) {unsigned irq, offset;
drivers/pinctrl/intel/pinctrl-sunrisepoint.c +8 -7
@@ -15,17 +15,18 @@#include "pinctrl-intel.h" -#define SPT_PAD_OWN 0x020 -#define SPT_PADCFGLOCK 0x0a0 -#define SPT_HOSTSW_OWN 0x0d0 -#define SPT_GPI_IS 0x100 -#define SPT_GPI_IE 0x120 +#define SPT_PAD_OWN 0x020 +#define SPT_H_PADCFGLOCK 0x090 +#define SPT_LP_PADCFGLOCK 0x0a0 +#define SPT_HOSTSW_OWN 0x0d0 +#define SPT_GPI_IS 0x100 +#define SPT_GPI_IE 0x120#define SPT_COMMUNITY (b, s, e) \ { \ .barno = (b), \ .padown_offset = SPT_PAD_OWN, \ - .padcfglock_offset = SPT_PADCFGLOCK, \ + .padcfglock_offset = SPT_LP_PADCFGLOCK, \ .hostown_offset = SPT_HOSTSW_OWN, \ .is_offset = SPT_GPI_IS, \ .ie_offset = SPT_GPI_IE, \
@@ -47,7 +48,7 @@ { \ .barno = (b), \ .padown_offset = SPT_PAD_OWN, \ - .padcfglock_offset = SPT_PADCFGLOCK, \ + .padcfglock_offset = SPT_H_PADCFGLOCK, \ .hostown_offset = SPT_HOSTSW_OWN, \ .is_offset = SPT_GPI_IS, \ .ie_offset = SPT_GPI_IE, \
drivers/pinctrl/qcom/pinctrl-msm.c +1 -1
@@ -688,7 +688,7 @@ static void msm_gpio_update_dual_edge_pos(struct msm_pinctrl *pctrl, pol =msm_readl_intr_cfg (pctrl, g); pol ^=BIT (g->intr_polarity_bit); -msm_writel_intr_cfg (val, pctrl, g); +msm_writel_intr_cfg (pol, pctrl, g); val2 =msm_readl_io (pctrl, g) &BIT (g->in_bit); intstat =msm_readl_intr_status (pctrl, g);
drivers/s390/net/ism_drv.c +3 -1
@@ -521,8 +521,10 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id) ism->smcd =smcd_alloc_dev (&pdev->dev,dev_name (&pdev->dev), &ism_ops,ISM_NR_DMBS ); -if (!ism->smcd) +if (!ism->smcd) { + ret = -ENOMEM ; goto err_resource; + } ism->smcd->priv = ism; ret =ism_dev_init (ism);
drivers/scsi/sg.c +3 -1
@@ -689,8 +689,10 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos) hp->flags = input_size;/* structure abuse ... */ hp->pack_id = old_hdr.pack_id; hp->usr_ptr =NULL ; -if (__copy_from_user (cmnd, buf, cmd_size)) +if (__copy_from_user (cmnd, buf, cmd_size)) { +sg_remove_request (sfp, srp);return -EFAULT ; + }/* * SG_DXFER_TO_FROM_DEV is functionally equivalent to SG_DXFER_FROM_DEV, * but is is possible that the app intended SG_DXFER_TO_DEV, because there
drivers/usb/cdns3/gadget.c +1 -1
@@ -2105,7 +2105,7 @@ int cdns3_gadget_ep_dequeue(struct usb_ep *ep, link_trb = priv_req->trb;/* Update ring only if removed request is on pending_req_list list */ -if (req_on_hw_ring) { +if (req_on_hw_ring && link_trb) { link_trb->buffer =TRB_BUFFER (priv_ep->trb_pool_dma + ((priv_req->end_trb +1 ) *TRB_SIZE )); link_trb->control = (link_trb->control & TRB_CYCLE) |
drivers/usb/core/devio.c +14 -5
@@ -217,6 +217,7 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma) {struct usb_memory *usbm =NULL ;struct usb_dev_state *ps = file->private_data; +struct usb_hcd *hcd =bus_to_hcd (ps->dev->bus);size_t size = vma->vm_end - vma->vm_start;void *mem;unsigned long flags;
@@ -250,11 +251,19 @@ static int usbdev_mmap(struct file *file, struct vm_area_struct *vma) usbm->vma_use_count =1 ;INIT_LIST_HEAD (&usbm->memlist); -if (remap_pfn_range (vma, vma->vm_start, -virt_to_phys (usbm->mem) >>PAGE_SHIFT , - size, vma->vm_page_prot) <0 ) { -dec_usb_memory_use_count (usbm, &usbm->vma_use_count); -return -EAGAIN ; +if (hcd->localmem_pool || !hcd_uses_dma (hcd)) { +if (remap_pfn_range (vma, vma->vm_start, +virt_to_phys (usbm->mem) >>PAGE_SHIFT , + size, vma->vm_page_prot) <0 ) { +dec_usb_memory_use_count (usbm, &usbm->vma_use_count); +return -EAGAIN ; + } + }else { +if (dma_mmap_coherent (hcd->self.sysdev, vma, mem, dma_handle, + size)) { +dec_usb_memory_use_count (usbm, &usbm->vma_use_count); +return -EAGAIN ; + } } vma->vm_flags |=VM_IO ;
drivers/usb/core/hub.c +5 -1
@@ -38,6 +38,7 @@#define USB_VENDOR_GENESYS_LOGIC 0x05e3#define USB_VENDOR_SMSC 0x0424 +#define USB_PRODUCT_USB5534B 0x5534#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01#define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
@@ -5506,8 +5507,11 @@ static void hub_event(struct work_struct *work) }static const struct usb_device_id hub_id_table[] = { - { .match_flags =USB_DEVICE_ID_MATCH_VENDOR |USB_DEVICE_ID_MATCH_INT_CLASS , + { .match_flags =USB_DEVICE_ID_MATCH_VENDOR + |USB_DEVICE_ID_MATCH_PRODUCT + |USB_DEVICE_ID_MATCH_INT_CLASS , .idVendor =USB_VENDOR_SMSC , + .idProduct =USB_PRODUCT_USB5534B , .bInterfaceClass =USB_CLASS_HUB , .driver_info =HUB_QUIRK_DISABLE_AUTOSUSPEND }, { .match_flags =USB_DEVICE_ID_MATCH_VENDOR
drivers/usb/dwc3/gadget.c +0 -3
@@ -2480,9 +2480,6 @@ static int dwc3_gadget_ep_reclaim_trb_sg(struct dwc3_ep *dep,for_each_sg (sg, s, pending, i) { trb = &dep->trb_pool[dep->trb_dequeue]; -if (trb->ctrl &DWC3_TRB_CTRL_HWO ) -break ; - req->sg =sg_next (s); req->num_pending_sgs--;
drivers/usb/gadget/configfs.c +3 -0
@@ -260,6 +260,9 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,char *name;int ret; +if (strlen (page) < len) +return -EOVERFLOW ; + name =kstrdup (page,GFP_KERNEL );if (!name)return -ENOMEM ;
drivers/usb/gadget/legacy/audio.c +3 -1
@@ -300,8 +300,10 @@ static int audio_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (cdev->gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto fail; + }usb_otg_descriptor_init (cdev->gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
drivers/usb/gadget/legacy/cdc2.c +3 -1
@@ -179,8 +179,10 @@ static int cdc_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto fail1; + }usb_otg_descriptor_init (gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
drivers/usb/gadget/legacy/ncm.c +3 -1
@@ -156,8 +156,10 @@ static int gncm_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto fail; + }usb_otg_descriptor_init (gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
drivers/usb/gadget/udc/net2272.c +2 -0
@@ -2647,6 +2647,8 @@ net2272_plat_probe(struct platform_device *pdev) err_req:release_mem_region (base, len); err: +kfree (dev); +return ret; }
drivers/usb/host/xhci-plat.c +3 -1
@@ -363,6 +363,7 @@ static int xhci_plat_remove(struct platform_device *dev)struct clk *reg_clk = xhci->reg_clk;struct usb_hcd *shared_hcd = xhci->shared_hcd; +pm_runtime_get_sync (&dev->dev); xhci->xhc_state |=XHCI_STATE_REMOVING ;usb_remove_hcd (shared_hcd);
@@ -376,8 +377,9 @@ static int xhci_plat_remove(struct platform_device *dev)clk_disable_unprepare (reg_clk);usb_put_hcd (hcd); -pm_runtime_set_suspended (&dev->dev);pm_runtime_disable (&dev->dev); +pm_runtime_put_noidle (&dev->dev); +pm_runtime_set_suspended (&dev->dev);return 0 ; }
drivers/usb/host/xhci-ring.c +2 -2
@@ -3421,8 +3421,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,/* New sg entry */ --num_sgs; sent_len -= block_len; -if (num_sgs !=0 ) { - sg =sg_next (sg); + sg =sg_next (sg); +if (num_sgs !=0 && sg) { block_len =sg_dma_len (sg); addr = (u64 )sg_dma_address (sg); addr += sent_len;
fs/cifs/cifssmb.c +1 -1
@@ -2135,8 +2135,8 @@ cifs_writev_requeue(struct cifs_writedata *wdata) } } +kref_put (&wdata2->refcount, cifs_writedata_release);if (rc) { -kref_put (&wdata2->refcount, cifs_writedata_release);if (is_retryable_error (rc))continue ; i += nr_pages;
fs/exec.c +2 -2
@@ -1274,6 +1274,8 @@ int flush_old_exec(struct linux_binprm * bprm)*/ set_mm_exe_file (bprm->mm, bprm->file); +would_dump (bprm, bprm->file); +/* * Release all of the old mmap stuff */
@@ -1817,8 +1819,6 @@ static int __do_execve_file(int fd, struct filename *filename,if (retval <0 ) goto out; -would_dump (bprm, bprm->file); - retval =exec_binprm (bprm);if (retval <0 ) goto out;
fs/gfs2/bmap.c +9 -7
@@ -528,10 +528,12 @@ static int gfs2_walk_metadata(struct inode *inode, struct metapath *mp,/* Advance in metadata tree. */ (mp->mp_list[hgt])++; -if (mp->mp_list[hgt] >= sdp->sd_inptrs) { -if (!hgt) +if (hgt) { +if (mp->mp_list[hgt] >= sdp->sd_inptrs) + goto lower_metapath; + }else { +if (mp->mp_list[hgt] >= sdp->sd_diptrs)break ; - goto lower_metapath; } fill_up_metapath:
@@ -876,10 +878,9 @@ static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length, ret = -ENOENT ; goto unlock; }else { -/* report a hole */ iomap->offset = pos; iomap->length = length; - goto do_alloc; + goto hole_found; } } iomap->length = size;
@@ -933,8 +934,6 @@ static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,return ret; do_alloc: - iomap->addr =IOMAP_NULL_ADDR ; - iomap->type =IOMAP_HOLE ;if (flags &IOMAP_REPORT ) {if (pos >= size) ret = -ENOENT ;
@@ -956,6 +955,9 @@ static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,if (pos < size && height == ip->i_height) ret =gfs2_hole_size (inode, lblock, len, mp, iomap); } +hole_found: + iomap->addr =IOMAP_NULL_ADDR ; + iomap->type =IOMAP_HOLE ; goto out; }
fs/gfs2/lops.c +12 -7
@@ -264,7 +264,7 @@ static struct bio *gfs2_log_alloc_bio(struct gfs2_sbd *sdp, u64 blkno,struct super_block *sb = sdp->sd_vfs;struct bio *bio =bio_alloc (GFP_NOIO ,BIO_MAX_PAGES ); - bio->bi_iter.bi_sector = blkno << (sb->s_blocksize_bits -9 ); + bio->bi_iter.bi_sector = blkno << sdp->sd_fsb2bb_shift;bio_set_dev (bio, sb->s_bdev); bio->bi_end_io = end_io; bio->bi_private = sdp;
@@ -504,7 +504,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head,unsigned int bsize = sdp->sd_sb.sb_bsize, off;unsigned int bsize_shift = sdp->sd_sb.sb_bsize_shift;unsigned int shift =PAGE_SHIFT - bsize_shift; -unsigned int readahead_blocks =BIO_MAX_PAGES << shift; +unsigned int max_bio_size =2 *1024 *1024 ;struct gfs2_journal_extent *je;int sz, ret =0 ;struct bio *bio =NULL ;
@@ -532,12 +532,17 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head, off =0 ; } -if (!bio || (bio_chained && !off)) { +if (!bio || (bio_chained && !off) || + bio->bi_iter.bi_size >= max_bio_size) {/* start new bio */ }else { - sz =bio_add_page (bio, page, bsize, off); -if (sz == bsize) - goto block_added; +sector_t sector = dblock << sdp->sd_fsb2bb_shift; + +if (bio_end_sector (bio) == sector) { + sz =bio_add_page (bio, page, bsize, off); +if (sz == bsize) + goto block_added; + }if (off) {unsigned int blocks = (PAGE_SIZE - off) >> bsize_shift;
@@ -563,7 +568,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head, off += bsize;if (off ==PAGE_SIZE ) page =NULL ; -if (blocks_submitted < blocks_read + readahead_blocks) { +if (blocks_submitted <2 * max_bio_size >> bsize_shift) {/* Keep at least one bio in flight */ continue ; }
fs/nfs/fscache-index.c +4 -2
@@ -84,8 +84,10 @@ enum fscache_checkaux nfs_fscache_inode_check_aux(void *cookie_netfs_data,return FSCACHE_CHECKAUX_OBSOLETE ;memset (&auxdata,0 ,sizeof (auxdata)); - auxdata.mtime =timespec64_to_timespec (nfsi->vfs_inode.i_mtime); - auxdata.ctime =timespec64_to_timespec (nfsi->vfs_inode.i_ctime); + auxdata.mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata.ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec;if (NFS_SERVER (&nfsi->vfs_inode)->nfs_client->rpc_ops->version ==4 ) auxdata.change_attr =inode_peek_iversion_raw (&nfsi->vfs_inode);
fs/nfs/fscache.c +18 -13
@@ -188,7 +188,8 @@ void nfs_fscache_get_super_cookie(struct super_block *sb, const char *uniq, int/* create a cache index for looking up filehandles */ nfss->fscache =fscache_acquire_cookie (nfss->nfs_client->fscache, &nfs_fscache_super_index_def, - key,sizeof (*key) + ulen, + &key->key, +sizeof (key->key) + ulen,NULL ,0 , nfss,0 , true); dfprintk(FSCACHE, "NFS: get superblock cookie (0x%p/0x%p)\n",
@@ -226,6 +227,19 @@ void nfs_fscache_release_super_cookie(struct super_block *sb) } } +static void nfs_fscache_update_auxdata (struct nfs_fscache_inode_auxdata *auxdata, +struct nfs_inode *nfsi) +{ +memset (auxdata,0 ,sizeof (*auxdata)); + auxdata->mtime_sec = nfsi->vfs_inode.i_mtime.tv_sec; + auxdata->mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec; + auxdata->ctime_sec = nfsi->vfs_inode.i_ctime.tv_sec; + auxdata->ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec; + +if (NFS_SERVER (&nfsi->vfs_inode)->nfs_client->rpc_ops->version ==4 ) + auxdata->change_attr =inode_peek_iversion_raw (&nfsi->vfs_inode); +} +/* * Initialise the per-inode cache cookie pointer for an NFS inode. */
@@ -239,12 +253,7 @@ void nfs_fscache_init_inode(struct inode *inode)if (!(nfss->fscache &&S_ISREG (inode->i_mode)))return ; -memset (&auxdata,0 ,sizeof (auxdata)); - auxdata.mtime =timespec64_to_timespec (nfsi->vfs_inode.i_mtime); - auxdata.ctime =timespec64_to_timespec (nfsi->vfs_inode.i_ctime); - -if (NFS_SERVER (&nfsi->vfs_inode)->nfs_client->rpc_ops->version ==4 ) - auxdata.change_attr =inode_peek_iversion_raw (&nfsi->vfs_inode); +nfs_fscache_update_auxdata (&auxdata, nfsi); nfsi->fscache = fscache_acquire_cookie(NFS_SB(inode->i_sb)->fscache, &nfs_fscache_inode_object_def,
@@ -264,9 +273,7 @@ void nfs_fscache_clear_inode(struct inode *inode)dfprintk (FSCACHE ,"NFS: clear cookie (0x%p/0x%p)\n" , nfsi, cookie); -memset (&auxdata,0 ,sizeof (auxdata)); - auxdata.mtime =timespec64_to_timespec (nfsi->vfs_inode.i_mtime); - auxdata.ctime =timespec64_to_timespec (nfsi->vfs_inode.i_ctime); +nfs_fscache_update_auxdata (&auxdata, nfsi);fscache_relinquish_cookie (cookie, &auxdata, false); nfsi->fscache =NULL ; }
@@ -306,9 +313,7 @@ void nfs_fscache_open_file(struct inode *inode, struct file *filp)if (!fscache_cookie_valid (cookie))return ; -memset (&auxdata,0 ,sizeof (auxdata)); - auxdata.mtime =timespec64_to_timespec (nfsi->vfs_inode.i_mtime); - auxdata.ctime =timespec64_to_timespec (nfsi->vfs_inode.i_ctime); +nfs_fscache_update_auxdata (&auxdata, nfsi);if (inode_is_open_for_write (inode)) {dfprintk (FSCACHE ,"NFS: nfsi 0x%p disabling cache\n" , nfsi);
fs/nfs/fscache.h +5 -3
@@ -62,9 +62,11 @@ struct nfs_fscache_key {* cache object. */ struct nfs_fscache_inode_auxdata { -struct timespec mtime; -struct timespec ctime; -u64 change_attr; +s64 mtime_sec; +s64 mtime_nsec; +s64 ctime_sec; +s64 ctime_nsec; +u64 change_attr; };/*
fs/nfs/mount_clnt.c +2 -1
@@ -32,6 +32,7 @@#define MNT_fhs_status_sz (1)#define MNT_fhandle_sz XDR_QUADLEN(NFS2_FHSIZE)#define MNT_fhandle3_sz (1 + XDR_QUADLEN(NFS3_FHSIZE)) +#define MNT_fhandlev3_sz XDR_QUADLEN(NFS3_FHSIZE)#define MNT_authflav3_sz (1 + NFS_MAX_SECFLAVORS)/*
@@ -39,7 +40,7 @@*/ #define MNT_enc_dirpath_sz encode_dirpath_sz#define MNT_dec_mountres_sz (MNT_status_sz + MNT_fhandle_sz) -#define MNT_dec_mountres3_sz (MNT_status_sz + MNT_fhandle_sz + \ +#define MNT_dec_mountres3_sz (MNT_status_sz + MNT_fhandlev3_sz + \ MNT_authflav3_sz)/*
fs/nfs/nfs4state.c +1 -1
@@ -733,9 +733,9 @@ nfs4_get_open_state(struct inode *inode, struct nfs4_state_owner *owner) state = new; state->owner = owner;atomic_inc (&owner->so_count); -list_add_rcu (&state->inode_states, &nfsi->open_states);ihold (inode); state->inode = inode; +list_add_rcu (&state->inode_states, &nfsi->open_states);spin_unlock (&inode->i_lock);/* Note: The reclaim code dictates that we add stateless * and read-only stateids to the end of the list */
fs/notify/fanotify/fanotify.c +7 -4
@@ -171,6 +171,13 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group,if (!fsnotify_iter_should_report_type (iter_info, type))continue ; mark = iter_info->marks[type]; +/* +* If the event is on dir and this mark doesn't care about +* events on dir, don't send it! +*/ +if (event_mask &FS_ISDIR && !(mark->mask &FS_ISDIR )) +continue ; +/* * If the event is for a child and this mark doesn't care about * events on a child, don't send it!
@@ -203,10 +210,6 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group, user_mask &= ~FAN_ONDIR ; } -if (event_mask &FS_ISDIR && - !(marks_mask &FS_ISDIR & ~marks_ignored_mask)) -return 0 ; -return test_mask & user_mask; }
include/linux/compiler.h +6 -0
@@ -356,4 +356,10 @@ static inline void *offset_to_ptr(const int *off)/* &a[0] degrades to a pointer: a different type from an array */ #define __must_be_array (a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) +/* +* This is needed in functions which generate the stack canary, see +* arch/x86/kernel/smpboot.c::start_secondary() for an example. +*/ +#define prevent_tail_call_optimization () mb() +#endif /* __LINUX_COMPILER_H */
include/linux/fs.h +1 -1
@@ -978,7 +978,7 @@ struct file_handle {__u32 handle_bytes;int handle_type;/* file identifier */ -unsigned char f_handle[0 ]; +unsigned char f_handle[]; };static inline struct file *get_file (struct file *f)
include/linux/memcontrol.h +2 -0
@@ -793,6 +793,8 @@ static inline void memcg_memory_event(struct mem_cgroup *memcg,atomic_long_inc (&memcg->memory_events[event]);cgroup_file_notify (&memcg->events_file); +if (!cgroup_subsys_on_dfl (memory_cgrp_subsys)) +break ;if (cgrp_dfl_root.flags &CGRP_ROOT_MEMORY_LOCAL_EVENTS )break ; } while ((memcg = parent_mem_cgroup(memcg)) &&
include/linux/pnp.h +9 -20
@@ -220,10 +220,8 @@ struct pnp_card {#define global_to_pnp_card (n) list_entry(n, struct pnp_card, global_list)#define protocol_to_pnp_card (n) list_entry(n, struct pnp_card, protocol_list)#define to_pnp_card (n) container_of(n, struct pnp_card, dev) -#define pnp_for_each_card (card) \ - for((card) = global_to_pnp_card(pnp_cards.next); \ - (card) != global_to_pnp_card(&pnp_cards); \ - (card) = global_to_pnp_card((card)->global_list.next)) +#define pnp_for_each_card (card) \ + list_for_each_entry(card, &pnp_cards, global_list)struct pnp_card_link {struct pnp_card *card;
@@ -276,14 +274,9 @@ struct pnp_dev {#define card_to_pnp_dev (n) list_entry(n, struct pnp_dev, card_list)#define protocol_to_pnp_dev (n) list_entry(n, struct pnp_dev, protocol_list)#define to_pnp_dev (n) container_of(n, struct pnp_dev, dev) -#define pnp_for_each_dev (dev) \ - for((dev) = global_to_pnp_dev(pnp_global.next); \ - (dev) != global_to_pnp_dev(&pnp_global); \ - (dev) = global_to_pnp_dev((dev)->global_list.next)) -#define card_for_each_dev (card,dev) \ - for((dev) = card_to_pnp_dev((card)->devices.next); \ - (dev) != card_to_pnp_dev(&(card)->devices); \ - (dev) = card_to_pnp_dev((dev)->card_list.next)) +#define pnp_for_each_dev (dev) list_for_each_entry(dev, &pnp_global, global_list) +#define card_for_each_dev (card, dev) \ + list_for_each_entry(dev, &(card)->devices, card_list)#define pnp_dev_name (dev) (dev)->namestatic inline void *pnp_get_drvdata (struct pnp_dev *pdev)
@@ -437,14 +430,10 @@ struct pnp_protocol { };#define to_pnp_protocol (n) list_entry(n, struct pnp_protocol, protocol_list) -#define protocol_for_each_card (protocol,card) \ - for((card) = protocol_to_pnp_card((protocol)->cards.next); \ - (card) != protocol_to_pnp_card(&(protocol)->cards); \ - (card) = protocol_to_pnp_card((card)->protocol_list.next)) -#define protocol_for_each_dev (protocol,dev) \ - for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \ - (dev) != protocol_to_pnp_dev(&(protocol)->devices); \ - (dev) = protocol_to_pnp_dev((dev)->protocol_list.next)) +#define protocol_for_each_card (protocol, card) \ + list_for_each_entry(card, &(protocol)->cards, protocol_list) +#define protocol_for_each_dev (protocol, dev) \ + list_for_each_entry(dev, &(protocol)->devices, protocol_list)extern struct bus_type pnp_bus_type;
include/linux/skmsg.h +1 -0
@@ -186,6 +186,7 @@ static inline void sk_msg_xfer(struct sk_msg *dst, struct sk_msg *src, dst->sg.data[which] = src->sg.data[which]; dst->sg.data[which].length = size; dst->sg.size += size; + src->sg.size -= size; src->sg.data[which].length -= size; src->sg.data[which].offset += size; }
include/linux/sunrpc/gss_api.h +3 -0
@@ -22,6 +22,7 @@struct gss_ctx {struct gss_api_mech *mech_type;void *internal_ctx_id; +unsigned int slack, align; };#define GSS_C_NO_BUFFER ((struct xdr_netobj) 0)
@@ -67,6 +68,7 @@ u32 gss_wrap(u32 gss_unwrap (struct gss_ctx *ctx_id,int offset, +int len,struct xdr_buf *inbuf);u32 gss_delete_sec_context (struct gss_ctx **ctx_id);
@@ -127,6 +129,7 @@ struct gss_api_ops {u32 (*gss_unwrap)(struct gss_ctx *ctx_id,int offset, +int len,struct xdr_buf *buf);void (*gss_delete_sec_context)(void *internal_ctx_id);
include/linux/sunrpc/gss_krb5.h +3 -3
@@ -83,7 +83,7 @@ struct gss_krb5_enctype {u32 (*encrypt_v2) (struct krb5_ctx *kctx,u32 offset,struct xdr_buf *buf,struct page **pages);/* v2 encryption function */ -u32 (*decrypt_v2) (struct krb5_ctx *kctx,u32 offset, +u32 (*decrypt_v2) (struct krb5_ctx *kctx,u32 offset,u32 len,struct xdr_buf *buf,u32 *headskip,u32 *tailskip);/* v2 decryption function */ };
@@ -255,7 +255,7 @@ gss_wrap_kerberos(struct gss_ctx *ctx_id, int offset, struct xdr_buf *outbuf, struct page **pages);u32 -gss_unwrap_kerberos (struct gss_ctx *ctx_id,int offset, +gss_unwrap_kerberos (struct gss_ctx *ctx_id,int offset,int len,struct xdr_buf *buf);
@@ -312,7 +312,7 @@ gss_krb5_aes_encrypt(struct krb5_ctx *kctx, u32 offset, struct page **pages);u32 -gss_krb5_aes_decrypt (struct krb5_ctx *kctx,u32 offset, +gss_krb5_aes_decrypt (struct krb5_ctx *kctx,u32 offset,u32 len,struct xdr_buf *buf,u32 *plainoffset,u32 *plainlen);
include/linux/sunrpc/xdr.h +1 -0
@@ -186,6 +186,7 @@ xdr_adjust_iovec(struct kvec *iov, __be32 *p)extern void xdr_shift_buf (struct xdr_buf *,size_t );extern void xdr_buf_from_iov (struct kvec *,struct xdr_buf *);extern int xdr_buf_subsegment (struct xdr_buf *,struct xdr_buf *,unsigned int ,unsigned int ); +extern void xdr_buf_trim (struct xdr_buf *,unsigned int );extern int xdr_buf_read_mic (struct xdr_buf *,struct xdr_netobj *,unsigned int );extern int read_bytes_from_xdr_buf (struct xdr_buf *,unsigned int ,void *,unsigned int );extern int write_bytes_to_xdr_buf (struct xdr_buf *,unsigned int ,void *,unsigned int );
include/linux/tty.h +1 -1
@@ -66,7 +66,7 @@ struct tty_buffer {int read;int flags;/* Data points here */ -unsigned long data[0 ]; +unsigned long data[]; };/* Values for .flags field of tty_buffer */
include/net/netfilter/nf_conntrack.h +1 -1
@@ -87,7 +87,7 @@ struct nf_conn {struct hlist_node nat_bysource;#endif /* all members below initialized via memset */ -u8 __nfct_init_offset[0 ]; +struct { } __nfct_init_offset;/* If we were expected by an expectation, this will be it */ struct nf_conn *master;
include/net/sch_generic.h +1 -0
@@ -407,6 +407,7 @@ struct tcf_block {struct mutex lock;struct list_head chain_list;u32 index;/* block index for shared blocks */ +u32 classid;/* which class this block belongs to */ refcount_t refcnt;struct net *net;struct Qdisc *q;
include/net/tcp.h +13 -0
@@ -1401,6 +1401,19 @@ static inline int tcp_full_space(const struct sock *sk)return tcp_win_from_space (sk,READ_ONCE (sk->sk_rcvbuf)); } +/* We provision sk_rcvbuf around 200% of sk_rcvlowat. +* If 87.5 % (7/8) of the space has been consumed, we want to override +* SO_RCVLOWAT constraint, since we are receiving skbs with too small +* len/truesize ratio. +*/ +static inline bool tcp_rmem_pressure (const struct sock *sk) +{ +int rcvbuf =READ_ONCE (sk->sk_rcvbuf); +int threshold = rcvbuf - (rcvbuf >>3 ); + +return atomic_read (&sk->sk_rmem_alloc) > threshold; +} +extern void tcp_openreq_init_rwin (struct request_sock *req,const struct sock *sk_listener,const struct dst_entry *dst);
include/sound/rawmidi.h +1 -0
@@ -61,6 +61,7 @@ struct snd_rawmidi_runtime {size_t avail_min;/* min avail for wakeup */ size_t avail;/* max used buffer for wakeup */ size_t xruns;/* over/underruns counter */ +int buffer_ref;/* buffer reference count */ /* misc */ spinlock_t lock;wait_queue_head_t sleep;
init/Kconfig +0 -18
@@ -36,22 +36,6 @@ config TOOLS_SUPPORT_RELR config CC_HAS_ASM_INLINE def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null) -config CC_HAS_WARN_MAYBE_UNINITIALIZED - def_bool $(cc-option,-Wmaybe-uninitialized) - help - GCC >= 4.7 supports this option. - -config CC_DISABLE_WARN_MAYBE_UNINITIALIZED - bool - depends on CC_HAS_WARN_MAYBE_UNINITIALIZED - default CC_IS_GCC && GCC_VERSION < 40900 # unreliable for GCC < 4.9 - help - GCC's -Wmaybe-uninitialized is not reliable by definition. - Lots of false positive warnings are produced in some cases. - - If this option is enabled, -Wno-maybe-uninitialzed is passed - to the compiler to suppress maybe-uninitialized warnings. - config CONSTRUCTORS bool depends on !UML
@@ -1226,14 +1210,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE config CC_OPTIMIZE_FOR_PERFORMANCE_O3 bool "Optimize more for performance (-O3)" depends on ARC - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives help Choosing this option will pass "-O3" to your compiler to optimize the kernel yet more for performance. config CC_OPTIMIZE_FOR_SIZE bool "Optimize for size (-Os)" - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives help Choosing this option will pass "-Os" to your compiler resulting in a smaller kernel.
init/initramfs.c +1 -1
@@ -534,7 +534,7 @@ void __weak free_initrd_mem(unsigned long start, unsigned long end) }#ifdef CONFIG_KEXEC_CORE -static bool kexec_free_initrd (void ) +static bool __init kexec_free_initrd (void ) {unsigned long crashk_start = (unsigned long )__va (crashk_res.start);unsigned long crashk_end = (unsigned long )__va (crashk_res.end);
init/main.c +2 -0
@@ -782,6 +782,8 @@ asmlinkage __visible void __init start_kernel(void)/* Do the rest non-__init'ed, we're now alive */ arch_call_rest_init (); + +prevent_tail_call_optimization (); }/* Call all constructor functions linked into the kernel. */
ipc/util.c +6 -6
@@ -764,21 +764,21 @@ static struct kern_ipc_perm *sysvipc_find_ipc(struct ipc_ids *ids, loff_t pos, total++; } - *new_pos = pos +1 ; + ipc =NULL ;if (total >= ids->in_use) -return NULL ; + goto out;for (; pos < ipc_mni; pos++) { ipc =idr_find (&ids->ipcs_idr, pos);if (ipc !=NULL ) {rcu_read_lock ();ipc_lock_object (ipc); -return ipc; +break ; } } - -/* Out of range - return NULL to terminate iteration */ -return NULL ; +out: + *new_pos = pos +1 ; +return ipc; }static void *sysvipc_proc_next (struct seq_file *s,void *it,loff_t *pos)
kernel/bpf/syscall.c +3 -1
@@ -1146,8 +1146,10 @@ static int map_lookup_and_delete_elem(union bpf_attr *attr)if (err) goto free_value; -if (copy_to_user (uvalue, value, value_size) !=0 ) +if (copy_to_user (uvalue, value, value_size) !=0 ) { + err = -EFAULT ; goto free_value; + } err =0 ;
kernel/fork.c +7 -6
@@ -2412,11 +2412,11 @@ long do_fork(unsigned long clone_flags, int __user *child_tidptr) {struct kernel_clone_args args = { - .flags = (clone_flags & ~CSIGNAL ), + .flags = (lower_32_bits (clone_flags) & ~CSIGNAL ), .pidfd = parent_tidptr, .child_tid = child_tidptr, .parent_tid = parent_tidptr, - .exit_signal = (clone_flags &CSIGNAL ), + .exit_signal = (lower_32_bits (clone_flags) &CSIGNAL ), .stack = stack_start, .stack_size = stack_size, };
@@ -2434,8 +2434,9 @@ long do_fork(unsigned long clone_flags,pid_t kernel_thread (int (*fn)(void *),void *arg,unsigned long flags) {struct kernel_clone_args args = { - .flags = ((flags |CLONE_VM |CLONE_UNTRACED ) & ~CSIGNAL ), - .exit_signal = (flags &CSIGNAL ), + .flags = ((lower_32_bits (flags) |CLONE_VM | +CLONE_UNTRACED ) & ~CSIGNAL ), + .exit_signal = (lower_32_bits (flags) &CSIGNAL ), .stack = (unsigned long )fn, .stack_size = (unsigned long )arg, };
@@ -2496,11 +2497,11 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,#endif {struct kernel_clone_args args = { - .flags = (clone_flags & ~CSIGNAL ), + .flags = (lower_32_bits (clone_flags) & ~CSIGNAL ), .pidfd = parent_tidptr, .child_tid = child_tidptr, .parent_tid = parent_tidptr, - .exit_signal = (clone_flags &CSIGNAL ), + .exit_signal = (lower_32_bits (clone_flags) &CSIGNAL ), .stack = newsp, .tls = tls, };
kernel/trace/Kconfig +0 -1
@@ -371,7 +371,6 @@ config PROFILE_ANNOTATED_BRANCHES config PROFILE_ALL_BRANCHES bool "Profile all if conditionals" if !FORTIFY_SOURCE select TRACE_BRANCH_PROFILING - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives help This tracer profiles all branch conditions. Every if () taken in the kernel is recorded whether it hit or miss.
kernel/umh.c +6 -0
@@ -475,6 +475,12 @@ static void umh_clean_and_save_pid(struct subprocess_info *info) {struct umh_info *umh_info = info->data; +/* cleanup if umh_pipe_setup() was successful but exec failed */ +if (info->pid && info->retval) { +fput (umh_info->pipe_to_umh); +fput (umh_info->pipe_from_umh); + } +argv_free (info->argv); umh_info->pid = info->pid; }
mm/shmem.c +5 -2
@@ -2183,7 +2183,11 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user)struct shmem_inode_info *info =SHMEM_I (inode);int retval = -ENOMEM ; -spin_lock_irq (&info->lock); +/* +* What serializes the accesses to info->flags? +* ipc_lock_object() when called from shmctl_do_lock(), +* no serialization needed when called from shm_destroy(). +*/ if (lock && !(info->flags &VM_LOCKED )) {if (!user_shm_lock (inode->i_size, user)) goto out_nomem;
@@ -2198,7 +2202,6 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) retval =0 ; out_nomem: -spin_unlock_irq (&info->lock);return retval; }
net/core/dev.c +3 -1
@@ -8595,11 +8595,13 @@ static void netdev_sync_lower_features(struct net_device *upper,netdev_dbg (upper,"Disabling feature %pNF on lower dev %s.\n" , &feature, lower->name); lower->wanted_features &= ~feature; -netdev_update_features (lower); +__netdev_update_features (lower);if (unlikely (lower->features & feature))netdev_WARN (upper,"failed to disable %pNF on %s!\n" , &feature, lower->name); +else +netdev_features_change (lower); } } }
net/core/drop_monitor.c +7 -4
@@ -212,6 +212,7 @@ static void sched_send_work(struct timer_list *t)static void trace_drop_common (struct sk_buff *skb,void *location) {struct net_dm_alert_msg *msg; +struct net_dm_drop_point *point;struct nlmsghdr *nlh;struct nlattr *nla;int i;
@@ -230,11 +231,13 @@ static void trace_drop_common(struct sk_buff *skb, void *location) nlh = (struct nlmsghdr *)dskb->data; nla =genlmsg_data (nlmsg_data (nlh)); msg =nla_data (nla); + point = msg->points;for (i =0 ; i < msg->entries; i++) { -if (!memcmp (&location, msg->points[i].pc,sizeof (void *))) { - msg->points[i].count++; +if (!memcmp (&location, &point->pc,sizeof (void *))) { + point->count++; goto out; } + point++; }if (msg->entries == dm_hit_limit) goto out;
@@ -243,8 +246,8 @@ static void trace_drop_common(struct sk_buff *skb, void *location)*/ __nla_reserve_nohdr (dskb,sizeof (struct net_dm_drop_point )); nla->nla_len +=NLA_ALIGN (sizeof (struct net_dm_drop_point )); -memcpy (msg->points[msg->entries].pc, &location,sizeof (void *)); - msg->points[msg->entries].count =1 ; +memcpy (point->pc, &location,sizeof (void *)); + point->count =1 ; msg->entries++;if (!timer_pending (&data->send_timer)) {
net/core/filter.c +1 -1
@@ -2590,8 +2590,8 @@ BPF_CALL_4(bpf_msg_pop_data, struct sk_msg *, msg, u32, start, } pop =0 ; }else if (pop >= sge->length - a) { - sge->length = a; pop -= (sge->length - a); + sge->length = a; } }
net/core/netprio_cgroup.c +2 -0
@@ -236,6 +236,8 @@ static void net_prio_attach(struct cgroup_taskset *tset)struct task_struct *p;struct cgroup_subsys_state *css; +cgroup_sk_alloc_disable (); +cgroup_taskset_for_each (p, css, tset) {void *v = (void *)(unsigned long )css->cgroup->id;
net/dsa/dsa2.c +1 -7
@@ -461,18 +461,12 @@ static int dsa_tree_setup_switches(struct dsa_switch_tree *dst) err =dsa_port_setup (dp);if (err) - goto ports_teardown; +continue ; } }return 0 ; -ports_teardown: -for (i =0 ; i < port; i++) -dsa_port_teardown (&ds->ports[i]); - -dsa_switch_teardown (ds); - switch_teardown:for (i =0 ; i < device; i++) { ds = dst->ds[i];
net/ipv4/cipso_ipv4.c +4 -2
@@ -1258,7 +1258,8 @@ static int cipso_v4_parsetag_rbm(const struct cipso_v4_doi *doi_def,return ret_val; } - secattr->flags |=NETLBL_SECATTR_MLS_CAT ; +if (secattr->attr.mls.cat) + secattr->flags |=NETLBL_SECATTR_MLS_CAT ; }return 0 ;
@@ -1439,7 +1440,8 @@ static int cipso_v4_parsetag_rng(const struct cipso_v4_doi *doi_def,return ret_val; } - secattr->flags |=NETLBL_SECATTR_MLS_CAT ; +if (secattr->attr.mls.cat) + secattr->flags |=NETLBL_SECATTR_MLS_CAT ; }return 0 ;
net/ipv4/route.c +1 -1
@@ -914,7 +914,7 @@ void ip_rt_send_redirect(struct sk_buff *skb)/* Check for load limit; set rate_last to the latest sent * redirect. */ -if (peer->rate_tokens ==0 || +if (peer->n_redirects ==0 ||time_after (jiffies, (peer->rate_last + (ip_rt_redirect_load << peer->n_redirects)))) {
net/ipv4/tcp.c +19 -8
@@ -477,9 +477,17 @@ static void tcp_tx_timestamp(struct sock *sk, u16 tsflags)static inline bool tcp_stream_is_readable (const struct tcp_sock *tp,int target,struct sock *sk) { -return (READ_ONCE (tp->rcv_nxt) -READ_ONCE (tp->copied_seq) >= target) || - (sk->sk_prot->stream_memory_read ? - sk->sk_prot->stream_memory_read (sk) : false); +int avail =READ_ONCE (tp->rcv_nxt) -READ_ONCE (tp->copied_seq); + +if (avail >0 ) { +if (avail >= target) +return true; +if (tcp_rmem_pressure (sk)) +return true; + } +if (sk->sk_prot->stream_memory_read) +return sk->sk_prot->stream_memory_read (sk); +return false; }/*
@@ -1757,10 +1765,11 @@ static int tcp_zerocopy_receive(struct sock *sk,down_read (¤t->mm->mmap_sem); - ret = -EINVAL ; vma =find_vma (current->mm, address); -if (!vma || vma->vm_start > address || vma->vm_ops != &tcp_vm_ops) - goto out; +if (!vma || vma->vm_start > address || vma->vm_ops != &tcp_vm_ops) { +up_read (¤t->mm->mmap_sem); +return -EINVAL ; + } zc->length = min_t(unsigned long, zc->length, vma->vm_end - address); tp =tcp_sk (sk);
@@ -2149,13 +2158,15 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock, tp->urg_data =0 ;tcp_fast_path_check (sk); } -if (used + offset < skb->len) -continue ;if (TCP_SKB_CB (skb)->has_rxtstamp) {tcp_update_recv_tstamps (skb, &tss); cmsg_flags |=2 ; } + +if (used + offset < skb->len) +continue ; +if (TCP_SKB_CB (skb)->tcp_flags &TCPHDR_FIN ) goto found_fin_ok;if (!(flags &MSG_PEEK ))
net/ipv4/tcp_bpf.c +6 -4
@@ -121,14 +121,17 @@ int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,struct sk_psock *psock;int copied, ret; +if (unlikely (flags &MSG_ERRQUEUE )) +return inet_recv_error (sk, msg, len, addr_len); + psock =sk_psock_get (sk);if (unlikely (!psock))return tcp_recvmsg (sk, msg, len, nonblock, flags, addr_len); -if (unlikely (flags &MSG_ERRQUEUE )) -return inet_recv_error (sk, msg, len, addr_len);if (!skb_queue_empty (&sk->sk_receive_queue) && -sk_psock_queue_empty (psock)) +sk_psock_queue_empty (psock)) { +sk_psock_put (sk, psock);return tcp_recvmsg (sk, msg, len, nonblock, flags, addr_len); + }lock_sock (sk); msg_bytes_ready: copied =__tcp_bpf_recvmsg (sk, psock, msg, len, flags);
@@ -200,7 +203,6 @@ static int bpf_tcp_ingress(struct sock *sk, struct sk_psock *psock,if (!ret) { msg->sg.start = i; - msg->sg.size -= apply_bytes;sk_psock_queue_msg (psock, tmp);sk_psock_data_ready (sk, psock); }else {
net/ipv4/tcp_input.c +2 -1
@@ -4751,7 +4751,8 @@ void tcp_data_ready(struct sock *sk)const struct tcp_sock *tp =tcp_sk (sk);int avail = tp->rcv_nxt - tp->copied_seq; -if (avail < sk->sk_rcvlowat && !sock_flag (sk,SOCK_DONE )) +if (avail < sk->sk_rcvlowat && !tcp_rmem_pressure (sk) && + !sock_flag (sk,SOCK_DONE ))return ; sk->sk_data_ready (sk);
net/ipv6/calipso.c +2 -1
@@ -1047,7 +1047,8 @@ static int calipso_opt_getattr(const unsigned char *calipso, goto getattr_return; } - secattr->flags |=NETLBL_SECATTR_MLS_CAT ; +if (secattr->attr.mls.cat) + secattr->flags |=NETLBL_SECATTR_MLS_CAT ; } secattr->type =NETLBL_NLTYPE_CALIPSO ;
net/ipv6/route.c +4 -2
@@ -2728,8 +2728,10 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,const struct in6_addr *daddr, *saddr;struct rt6_info *rt6 = (struct rt6_info *)dst; -if (dst_metric_locked (dst,RTAX_MTU )) -return ; +/* Note: do *NOT* check dst_metric_locked(dst, RTAX_MTU) +* IPv6 pmtu discovery isn't optional, so 'mtu lock' cannot disable it. +* [see also comment in rt6_mtu_change_route()] +*/ if (iph) { daddr = &iph->daddr;
net/netfilter/nf_conntrack_core.c +2 -2
@@ -1381,9 +1381,9 @@ __nf_conntrack_alloc(struct net *net, ct->status =0 ; ct->timeout =0 ;write_pnet (&ct->ct_net, net); -memset (&ct->__nfct_init_offset[0 ],0 , +memset (&ct->__nfct_init_offset,0 , offsetof(struct nf_conn , proto) - - offsetof(struct nf_conn, __nfct_init_offset[0])); + offsetof(struct nf_conn , __nfct_init_offset));nf_ct_zone_add (ct, zone);
net/netfilter/nft_set_rbtree.c +22 -6
@@ -33,6 +33,11 @@ static bool nft_rbtree_interval_end(const struct nft_rbtree_elem *rbe) (*nft_set_ext_flags (&rbe->ext) &NFT_SET_ELEM_INTERVAL_END ); } +static bool nft_rbtree_interval_start (const struct nft_rbtree_elem *rbe) +{ +return !nft_rbtree_interval_end (rbe); +} +static bool nft_rbtree_equal (const struct nft_set *set,const void *this,const struct nft_rbtree_elem *interval) {
@@ -64,7 +69,7 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *setif (interval &&nft_rbtree_equal (set, this, interval) &&nft_rbtree_interval_end (rbe) && - !nft_rbtree_interval_end (interval)) +nft_rbtree_interval_start (interval))continue ; interval = rbe; }else if (d >0 )
@@ -74,6 +79,10 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set parent =rcu_dereference_raw (parent->rb_left);continue ; } + +if (nft_set_elem_expired (&rbe->ext)) +return false; +if (nft_rbtree_interval_end (rbe)) {if (nft_set_is_anonymous (set))return false;
@@ -89,7 +98,8 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *setif (set->flags &NFT_SET_INTERVAL && interval !=NULL &&nft_set_elem_active (&interval->ext, genmask) && - !nft_rbtree_interval_end (interval)) { + !nft_set_elem_expired (&interval->ext) && +nft_rbtree_interval_start (interval)) { *ext = &interval->ext;return true; }
@@ -149,6 +159,9 @@ static bool __nft_rbtree_get(const struct net *net, const struct nft_set *set,continue ; } +if (nft_set_elem_expired (&rbe->ext)) +return false; +if (!nft_set_ext_exists (&rbe->ext,NFT_SET_EXT_FLAGS ) || (*nft_set_ext_flags (&rbe->ext) &NFT_SET_ELEM_INTERVAL_END ) == (flags &NFT_SET_ELEM_INTERVAL_END )) {
@@ -165,6 +178,7 @@ static bool __nft_rbtree_get(const struct net *net, const struct nft_set *set, if (set->flags & NFT_SET_INTERVAL && interval != NULL && nft_set_elem_active(&interval->ext, genmask) && + !nft_set_elem_expired(&interval->ext) && ((!nft_rbtree_interval_end(interval) && !(flags & NFT_SET_ELEM_INTERVAL_END)) || (nft_rbtree_interval_end(interval) &&
@@ -224,9 +238,9 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set, p = &parent->rb_right; else {if (nft_rbtree_interval_end (rbe) && - !nft_rbtree_interval_end (new)) { +nft_rbtree_interval_start (new)) { p = &parent->rb_left; - }else if (!nft_rbtree_interval_end (rbe) && + }else if (nft_rbtree_interval_start (rbe) &&nft_rbtree_interval_end (new)) { p = &parent->rb_right; }else if (nft_set_elem_active (&rbe->ext, genmask)) {
@@ -317,10 +331,10 @@ static void *nft_rbtree_deactivate(const struct net *net, parent = parent->rb_right; else {if (nft_rbtree_interval_end (rbe) && - !nft_rbtree_interval_end (this)) { +nft_rbtree_interval_start (this)) { parent = parent->rb_left;continue ; - }else if (!nft_rbtree_interval_end (rbe) && + }else if (nft_rbtree_interval_start (rbe) &&nft_rbtree_interval_end (this)) { parent = parent->rb_right;continue ;
@@ -350,6 +364,8 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx,if (iter->count < iter->skip) goto cont; +if (nft_set_elem_expired (&rbe->ext)) + goto cont;if (!nft_set_elem_active (&rbe->ext, iter->genmask)) goto cont;
net/netlabel/netlabel_kapi.c +6 -0
@@ -734,6 +734,12 @@ int netlbl_catmap_getlong(struct netlbl_lsm_catmap *catmap,if ((off & (BITS_PER_LONG -1 )) !=0 )return -EINVAL ; +/* a null catmap is equivalent to an empty one */ +if (!catmap) { + *offset = (u32)-1 ; +return 0 ; + } +if (off < catmap->startbit) { off = catmap->startbit; *offset = off;
net/rds/message.c +6 -13
@@ -308,26 +308,20 @@ struct rds_message *rds_message_alloc(unsigned int extra_len, gfp_t gfp)/* * RDS ops use this to grab SG entries from the rm's sg pool. */ -struct scatterlist *rds_message_alloc_sgs (struct rds_message *rm,int nents, -int *ret) +struct scatterlist *rds_message_alloc_sgs (struct rds_message *rm,int nents) {struct scatterlist *sg_first = (struct scatterlist *) &rm[1 ];struct scatterlist *sg_ret; -if (WARN_ON (!ret)) -return NULL ; -if (nents <=0 ) {pr_warn ("rds: alloc sgs failed! nents <= 0\n" ); - *ret = -EINVAL ; -return NULL ; +return ERR_PTR (-EINVAL ); }if (rm->m_used_sgs + nents > rm->m_total_sgs) {pr_warn ("rds: alloc sgs failed! total %d used %d nents %d\n" , rm->m_total_sgs, rm->m_used_sgs, nents); - *ret = -ENOMEM ; -return NULL ; +return ERR_PTR (-ENOMEM ); } sg_ret = &sg_first[rm->m_used_sgs];
@@ -343,7 +337,6 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned inunsigned int i;int num_sgs =DIV_ROUND_UP (total_len,PAGE_SIZE );int extra_bytes = num_sgs *sizeof (struct scatterlist ); -int ret; rm =rds_message_alloc (extra_bytes,GFP_NOWAIT );if (!rm)
@@ -352,10 +345,10 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned inset_bit (RDS_MSG_PAGEVEC , &rm->m_flags); rm->m_inc.i_hdr.h_len =cpu_to_be32 (total_len); rm->data.op_nents =DIV_ROUND_UP (total_len,PAGE_SIZE ); - rm->data.op_sg =rds_message_alloc_sgs (rm, num_sgs, &ret); -if (!rm->data.op_sg) { + rm->data.op_sg =rds_message_alloc_sgs (rm, num_sgs); +if (IS_ERR (rm->data.op_sg)) {rds_message_put (rm); -return ERR_PTR (ret); +return ERR_CAST (rm->data.op_sg); }for (i =0 ; i < rm->data.op_nents; ++i) {
net/rds/rdma.c +8 -4
@@ -624,9 +624,11 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, op->op_active =1 ; op->op_recverr = rs->rs_recverr;WARN_ON (!nr_pages); - op->op_sg =rds_message_alloc_sgs (rm, nr_pages, &ret); -if (!op->op_sg) + op->op_sg =rds_message_alloc_sgs (rm, nr_pages); +if (IS_ERR (op->op_sg)) { + ret =PTR_ERR (op->op_sg); goto out_pages; + }if (op->op_notify || op->op_recverr) {/* We allocate an uninitialized notifier here, because
@@ -828,9 +830,11 @@ int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm, rm->atomic.op_silent = !!(args->flags &RDS_RDMA_SILENT ); rm->atomic.op_active =1 ; rm->atomic.op_recverr = rs->rs_recverr; - rm->atomic.op_sg =rds_message_alloc_sgs (rm,1 , &ret); -if (!rm->atomic.op_sg) + rm->atomic.op_sg =rds_message_alloc_sgs (rm,1 ); +if (IS_ERR (rm->atomic.op_sg)) { + ret =PTR_ERR (rm->atomic.op_sg); goto err; + }/* verify 8 byte-aligned */ if (args->local_addr &0x7 ) {
net/rds/rds.h +1 -2
@@ -849,8 +849,7 @@ rds_conn_connecting(struct rds_connection *conn)/* message.c */ struct rds_message *rds_message_alloc (unsigned int nents,gfp_t gfp); -struct scatterlist *rds_message_alloc_sgs (struct rds_message *rm,int nents, -int *ret); +struct scatterlist *rds_message_alloc_sgs (struct rds_message *rm,int nents);int rds_message_copy_from_user (struct rds_message *rm,struct iov_iter *from,bool zcopy);struct rds_message *rds_message_map_pages (unsigned long *page_addrs,unsigned int total_len);
net/rds/send.c +4 -2
@@ -1274,9 +1274,11 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)/* Attach data to the rm */ if (payload_len) { - rm->data.op_sg =rds_message_alloc_sgs (rm, num_sgs, &ret); -if (!rm->data.op_sg) + rm->data.op_sg =rds_message_alloc_sgs (rm, num_sgs); +if (IS_ERR (rm->data.op_sg)) { + ret =PTR_ERR (rm->data.op_sg); goto out; + } ret =rds_message_copy_from_user (rm, &msg->msg_iter, zcopy);if (ret) goto out;
net/sched/cls_api.c +4 -4
@@ -2005,6 +2005,7 @@ static int tc_new_tfilter(struct sk_buff *skb, struct nlmsghdr *n, err =PTR_ERR (block); goto errout; } + block->classid = parent; chain_index = tca[TCA_CHAIN ] ?nla_get_u32 (tca[TCA_CHAIN ]) :0 ;if (chain_index >TC_ACT_EXT_VAL_MASK ) {
@@ -2547,12 +2548,10 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)return skb->len; parent = tcm->tcm_parent; -if (!parent) { +if (!parent) q = dev->qdisc; - parent = q->handle; - }else { +else q =qdisc_lookup (dev,TC_H_MAJ (tcm->tcm_parent)); - }if (!q) goto out; cops = q->ops->cl_ops;
@@ -2568,6 +2567,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb) block = cops->tcf_block (q, cl,NULL );if (!block) goto out; + parent = block->classid;if (tcf_block_shared (block)) q =NULL ; }
net/sunrpc/auth_gss/auth_gss.c +5 -7
@@ -2030,7 +2030,6 @@ gss_unwrap_resp_priv(struct rpc_task *task, struct rpc_cred *cred,struct xdr_buf *rcv_buf = &rqstp->rq_rcv_buf;struct kvec *head = rqstp->rq_rcv_buf.head;struct rpc_auth *auth = cred->cr_auth;
Lines of this file are not shown. View the raw message.
net/sunrpc/auth_gss/gss_krb5_wrap.c +29 -15
44 lines not on this page · raw message
net/sunrpc/xdr.c +41 -0
41 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +38 -3
41 lines not on this page · raw message
tools/lib/bpf/libbpf.c +84 -42
126 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/stacktrace_build_id_nmi.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_get_stack_rawtp_err.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_select_reuseport.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/ftracetest +22 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_type.tc +1 -1
Lines of this file are not shown. View the raw message.
virt/kvm/arm/vgic/vgic-mmio.c +64 -36
100 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.