Linux 5.6.14
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.6.14 kernel.
All users of the 5.6 kernel series must upgrade.
The updated 5.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.6.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/core-api/printk-formats.rst | 14 Documentation/devicetree/bindings/dma/fsl-edma.txt | 3 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/amlogic/meson-g12b-ugoos-am6.dts | 2 arch/arm64/boot/dts/freescale/imx8mn.dtsi | 2 arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi | 4 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/powerpc/include/asm/uaccess.h | 49 +- arch/powerpc/kernel/ima_arch.c | 6 arch/powerpc/kernel/vdso32/gettimeofday.S | 6 arch/riscv/include/asm/perf_event.h | 8 arch/riscv/kernel/Makefile | 2 arch/riscv/kernel/vdso/Makefile | 6 arch/x86/include/asm/ftrace.h | 6 arch/x86/include/asm/kvm_host.h | 1 arch/x86/include/asm/stackprotector.h | 7 arch/x86/kernel/ftrace.c | 29 + arch/x86/kernel/smpboot.c | 8 arch/x86/kernel/unwind_orc.c | 16 arch/x86/kvm/vmx/nested.c | 19 - arch/x86/kvm/vmx/vmx.c | 18 arch/x86/kvm/x86.c | 19 - arch/x86/mm/init_64.c | 3 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/clk/ti/clkctrl.c | 1 drivers/cpufreq/intel_pstate.c | 2 drivers/dma/mmp_tdma.c | 5 drivers/dma/pch_dma.c | 2 drivers/dma/xilinx/xilinx_dma.c | 20 - 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/gfx_v9_0.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 + drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 12 drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 28 - 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_ddi.c | 14 drivers/gpu/drm/i915/display/intel_display_power.c | 12 drivers/gpu/drm/i915/display/intel_dp.c | 5 drivers/gpu/drm/i915/display/intel_fbc.c | 3 drivers/gpu/drm/i915/display/intel_sprite.c | 17 drivers/gpu/drm/i915/gem/i915_gem_domain.c | 7 drivers/gpu/drm/i915/gt/intel_engine.h | 9 drivers/gpu/drm/i915/gt/intel_engine_types.h | 18 drivers/gpu/drm/i915/gt/intel_lrc.c | 8 drivers/gpu/drm/i915/gvt/scheduler.c | 6 drivers/gpu/drm/i915/i915_drv.h | 2 drivers/gpu/drm/i915/i915_gem_evict.c | 26 - drivers/gpu/drm/i915/i915_irq.c | 16 drivers/gpu/drm/i915/i915_request.c | 8 drivers/gpu/drm/i915/i915_scheduler.c | 6 drivers/gpu/drm/i915/i915_scheduler.h | 3 drivers/gpu/drm/i915/i915_scheduler_types.h | 1 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/gpu/drm/tegra/drm.c | 3 drivers/gpu/host1x/dev.c | 13 drivers/hwmon/da9052-hwmon.c | 4 drivers/hwmon/drivetemp.c | 2 drivers/infiniband/core/cache.c | 7 drivers/infiniband/core/nldev.c | 3 drivers/infiniband/core/rdma_core.c | 3 drivers/infiniband/core/uverbs.h | 4 drivers/infiniband/core/uverbs_main.c | 12 drivers/infiniband/core/uverbs_std_types_async_fd.c | 30 + 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/iommu/amd_iommu.c | 175 +++++++-- drivers/iommu/amd_iommu_types.h | 9 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/dsa/ocelot/felix.c | 1 drivers/net/dsa/ocelot/felix.h | 1 drivers/net/dsa/ocelot/felix_vsc9959.c | 1 drivers/net/ethernet/broadcom/Kconfig | 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/mscc/ocelot.c | 17 drivers/net/ethernet/mscc/ocelot_regs.c | 1 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/ethernet/stmicro/stmmac/dwmac5.c | 2 drivers/net/hyperv/netvsc_drv.c | 3 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/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/gadget/udc/tegra-xudc.c | 8 drivers/usb/host/xhci-plat.c | 4 drivers/usb/host/xhci-ring.c | 4 fs/cachefiles/rdwr.c | 10 fs/cifs/cifssmb.c | 2 fs/eventpoll.c | 48 +- fs/exec.c | 4 fs/gfs2/bmap.c | 16 fs/gfs2/lops.c | 19 - fs/io_uring.c | 4 fs/ioctl.c | 8 fs/iomap/fiemap.c | 5 fs/nfs/fscache.c | 39 -- fs/nfs/mount_clnt.c | 3 fs/nfs/nfs4state.c | 2 fs/nfs/super.c | 1 fs/notify/fanotify/fanotify.c | 11 include/linux/compiler.h | 6 include/linux/fs.h | 2 include/linux/ftrace.h | 23 + include/linux/host1x.h | 3 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/soc/mscc/ocelot.h | 1 include/sound/rawmidi.h | 1 include/trace/events/rpcrdma.h | 12 init/Kconfig | 18 init/initramfs.c | 2 init/main.c | 75 +++- ipc/util.c | 12 kernel/bpf/arraymap.c | 7 kernel/bpf/syscall.c | 4 kernel/bpf/verifier.c | 16 kernel/fork.c | 13 kernel/trace/Kconfig | 1 kernel/trace/bpf_trace.c | 94 +++-- kernel/trace/ftrace_internal.h | 22 - kernel/trace/preemptirq_delay_test.c | 12 kernel/umh.c | 6 lib/vsprintf.c | 12 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/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/mptcp/subflow.c | 10 net/netfilter/nf_conntrack_core.c | 17 net/netfilter/nf_flow_table_core.c | 8 net/netfilter/nft_set_rbtree.c | 11 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 ++ net/sunrpc/xprtrdma/backchannel.c | 2 net/sunrpc/xprtrdma/frwr_ops.c | 14 net/sunrpc/xprtrdma/transport.c | 2 net/sunrpc/xprtrdma/verbs.c | 15 net/sunrpc/xprtrdma/xprt_rdma.h | 5 scripts/kallsyms.c | 2 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/testing/selftests/bpf/prog_tests/mmap.c | 9 tools/testing/selftests/bpf/progs/test_overhead.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 | 10 virt/kvm/arm/vgic/vgic-mmio-v3.c | 12 virt/kvm/arm/vgic/vgic-mmio.c | 187 ++++++---- virt/kvm/arm/vgic/vgic-mmio.h | 11 235 files changed, 1920 insertions(+), 830 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
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 (3):
drop_monitor: work around gcc-10 stringop-overflow warning
sun6i: dsi: fix gcc-4.8
netfilter: conntrack: avoid gcc-10 zero-length-bounds warning
Babu Moger (1):
KVM: x86: Fix pkru save/restore when guest CR4.PKE=0, move it to x86.c
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
Bjorn Andersson (1):
arm64: dts: qcom: msm8996: Reduce vdd_apc voltage
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 (5):
cpufreq: intel_pstate: Only mention the BIOS disabling turbo mode once drm/i915/gt: Make timeslicing an explicit engine property drm/i915/gem: Remove object_is_locked assertion from unpin_from_display_plane drm/i915: Mark concurrent submissions with a weak-dependency drm/i915: Handle idling during i915_gem_evict_something busy loops
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 (2):
powerpc/vdso32: Fallback on getres syscall when clock is unknown powerpc/32s: Fix build failure with CONFIG_PPC_KUAP_DEBUG
Chuck Lever (6):
xprtrdma: Clean up the post_send path
xprtrdma: Fix trace point use-after-free race
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()")
Colin Ian King (1):
net: stmmac: gmac5+: fix potential integer overflow on 32 bit multiply
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()
Daniel Borkmann (1):
bpf: Restrict bpf_trace_printk()'s %s usage and add %pks, %pus specifier
Dave Wysochanski (3):
NFS: Fix fscache super_cookie index_key from changing after umount
NFS: Fix fscache super_cookie allocation
NFSv4: Fix fscache cookie aux_data to ensure change_attr is included
David Howells (1):
cachefiles: Fix corruption of the return value in cachefiles_read_or_alloc_pages()
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: loop: Add module soft dependency
net: broadcom: Select BROADCOM_PHY for BCMGENET
Florian Westphal (1):
netfilter: conntrack: fix infinite loop on rmmod
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.6.14
Guenter Roeck (1):
hwmon: (drivetemp) Fix SCT support if SCT data tables are not supported
Guillaume Nault (1):
pppoe: only process PADT targeted at local interfaces
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
Imre Deak (1):
drm/i915/tgl+: Fix interrupt handling for DP AUX transactions
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 (4):
pnp: Use list_for_each_entry() instead of open coding net/rds: Use ERR_PTR for rds_message_alloc_sgs() RDMA/uverbs: Do not discard the IB_EVENT_DEVICE_FATAL event RDMA/uverbs: Move IB_EVENT_DEVICE_FATAL to destroy_uobj
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
Joerg Roedel (2):
iommu/amd: Fix race in increase_address_space()/fetch_pte() iommu/amd: Update Device Table in increase_address_space()
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()
José Roberto de Souza (1):
drm/i915/display: Load DP_TP_CTL/STATUS offset before use it
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"
Kefeng Wang (1):
riscv: perf: RISCV_BASE_PMU should be independent
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
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
Maor Gottlieb (1):
RDMA/core: Fix double put of resource
Marc Zyngier (3):
KVM: arm: vgic: Synchronize the whole guest on GIC{D,R}_I{S,C}ACTIVER read
KVM: arm: vgic-v2: Only use the virtual state when userspace accesses pending bits
clk: Unlink clock if failed to prepare or enable
Masami Hiramatsu (2):
bootconfig: Fix to remove bootconfig data from initrd while boot
bootconfig: Fix to prevent warning message if no bootconfig option
Matt Roper (2):
drm/i915/tgl: Add Wa_14010477008:tgl drm/i915/tgl: TBT AUX should use TC power well ops
Michael S. Tsirkin (1):
virtio_net: fix lockdep warning on 32 bit
Michael Walle (1):
dt-bindings: dma: fsl-edma: fix ls1028a-edma compatible
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
Nathan Chancellor (1):
hv_netvsc: Fix netvsc_start_xmit's return type
Nayna Jain (1):
powerpc/ima: Fix secure boot rules in ima arch policy
Neil Armstrong (3):
arm64: dts: meson-g12b-ugoos-am6: fix usb vbus-supply
arm64: dts: meson-g12b-khadas-vim3: add missing frddr_a status property
arm64: dts: meson-g12-common: fix dwc2 clock names
Nicholas Kazlauskas (1):
drm/amd/display: Defer cursor update around VUPDATE for all ASIC
Nicholas Piggin (1):
powerpc/uaccess: Evaluate macro arguments once, before user access is allowed
Olga Kornievskaia (1):
NFSv3: fix rpc receive buffer size for MOUNT call
Oliver Upton (2):
KVM: nVMX: Consolidate nested MTF checks to helper function
kvm: nVMX: reflect MTF VM-exits if injected by L1
Pablo Neira Ayuso (1):
netfilter: flowtable: set NF_FLOW_TEARDOWN flag on entry expiration
Paolo Abeni (3):
mptcp: set correct vfs info for subflows
netlabel: cope with NULL catmap
net: ipv4: really enforce backoff for redirects
Pavel Begunkov (1):
io_uring: check non-sync defer_list carefully
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
Ritesh Harjani (1):
fibmap: Warn and return an error in case of block > INT_MAX
Roman Penyaev (1):
epoll: call final ep_events_available() check under the lock
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):
bpf: Fix bug in mmap() implementation for BPF array map
Sebastian von Ohr (1):
dmaengine: xilinx_dma: Add missing check for empty list
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
Steven Rostedt (VMware) (2):
tracing: Wait for preempt irq delay thread to execute
x86/ftrace: Have ftrace trampolines turn read-only at the end of system boot up
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
Tero Kristo (1):
clk: ti: clkctrl: Fix Bad of_node_put within clkctrl_get_name
Thierry Reding (2):
drm/tegra: Fix SMMU support on Tegra124 and Tegra210
usb: gadget: tegra-xudc: Fix idle suspend/resume
Tiecheng Zhou (1):
drm/amd/powerplay: avoid using pm_en before it is initialized revised
Tom St Denis (1):
drm/amd/amdgpu: add raven1 part to the gfxoff quirk list
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
Vladimir Oltean (2):
net: dsa: ocelot: the MAC table on Felix is twice as large
net: mscc: ocelot: ANA_AUTOAGE_AGE_PERIOD holds a value in seconds, not ms
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()
Xiao Yang (1):
selftests/ftrace: Check the first record for kprobe_args_type.tc
Xiaodong Yan (1):
drm/amd/display: blank dp stream before re-train the link
Xiaoguang Wang (1):
io_uring: use cond_resched() in io_ring_ctx_wait_and_kill()
Xiyu Yang (1):
bpf: Fix sk_psock refcnt leak when receiving message
Yafang Shao (1):
mm, memcg: fix inconsistent oom event behavior
Yonghong Song (2):
bpf: Enforce returning 0 for fentry/fexit progs selftests/bpf: Enforce returning 0 for fentry/fexit programs
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
maintainerDocumentation/core-api/printk-formats.rst +14 -0
@@ -112,6 +112,20 @@ used when printing stack backtraces. The specifier takes into consideration the effect of compiler optimisations which may occur when tail-calls are used and marked with the noreturn GCC attribute. +Probed Pointers from BPF / tracing +---------------------------------- + +:: + + %pks kernel string + %pus user string + +The ``k`` and ``u`` specifiers are used for printing prior probed memory from +either kernel memory (k) or user memory (u). The subsequent ``s`` specifier +results in printing a string. For direct use in regular vsnprintf() the (k) +and (u) annotation is ignored, however, when used out of BPF's bpf_trace_printk(), +for example, it reads the memory it is pointing to without faulting. + Kernel Pointers ---------------
Documentation/devicetree/bindings/dma/fsl-edma.txt +2 -1
@@ -10,7 +10,8 @@ Required properties: - compatible : - "fsl,vf610-edma" for eDMA used similar to that on Vybrid vf610 SoC - "fsl,imx7ulp-edma" for eDMA2 used similar to that on i.mx7ulp - - "fsl,fsl,ls1028a-edma" for eDMA used similar to that on Vybrid vf610 SoC + - "fsl,ls1028a-edma" followed by "fsl,vf610-edma" for eDMA used on the + LS1028A SoC. - reg : Specifies base physical address(s) and size of the eDMA registers. The 1st region is eDMA control register's address and size. The 2nd and the 3rd regions are programmable channel multiplexing
Makefile +13 -5
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 6 -SUBLEVEL = 13 +SUBLEVEL = 14 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -708,12 +708,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
@@ -861,6 +858,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 @@ axi@0 { #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 @@ pcie1_rc: pcie@51000000 { 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 @@ axi@1 { #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 @@ pcie2_rc: pcie@51800000 { 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 @@ &iomuxc { 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 @@ ®_usb_h1_vbus { }; &switch_ports { - /delete-node/ port@2; + /delete-node/ port@3; }; &touchscreen {
arch/arm/boot/dts/r8a73a4.dtsi +8 -1
@@ -131,7 +131,14 @@ i2c5: i2c@e60b0000 { 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 @@ fsibck_clk: fsibck { 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
@@ -2204,7 +2204,7 @@ dwc2: usb@ff400000 { 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 @@ &cpu103 { clock-latency = <50000>; }; +&frddr_a { + status = "okay"; +}; + &frddr_b { status = "okay"; };
arch/arm64/boot/dts/amlogic/meson-g12b-ugoos-am6.dts +1 -1
@@ -545,7 +545,7 @@ &uart_AO { &usb { status = "okay"; dr_mode = "host"; - vbus-regulator = <&usb_pwr_en>; + vbus-supply = <&usb_pwr_en>; }; &usb2_phy0 {
arch/arm64/boot/dts/freescale/imx8mn.dtsi +1 -1
@@ -661,7 +661,7 @@ sdma1: dma-controller@30bd0000 { 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/qcom/apq8096-db820c.dtsi +2 -2
@@ -658,8 +658,8 @@ s10 { s11 { qcom,saw-leader; regulator-always-on; - regulator-min-microvolt = <1230000>; - regulator-max-microvolt = <1230000>; + regulator-min-microvolt = <980000>; + regulator-max-microvolt = <980000>; }; };
arch/arm64/boot/dts/renesas/r8a77980.dtsi +2 -0
@@ -1318,6 +1318,7 @@ ipmmu_vi0: mmu@febd0000 { 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_vip0: mmu@e7b00000 { 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 @@ &gmac2phy { &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 @@ &hdmiphy { &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 @@ usbdrd3_0: usb@fe800000 { 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 @@ usbdrd3_1: usb@fe900000 { 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
@@ -177,6 +177,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/powerpc/include/asm/uaccess.h +35 -14
102 lines not on this page · raw message
arch/powerpc/kernel/ima_arch.c +3 -3
@@ -19,12 +19,12 @@ bool arch_ima_get_secureboot(void)* to be stored as an xattr or as an appended signature. * * To avoid duplicate signature verification as much as possible, the IMA -* policy rule for module appraisal is added only if CONFIG_MODULE_SIG_FORCE +* policy rule for module appraisal is added only if CONFIG_MODULE_SIG * is not enabled. */ static const char *const secure_rules[] = {"appraise func=KEXEC_KERNEL_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig" , -#ifndef CONFIG_MODULE_SIG_FORCE +#ifndef CONFIG_MODULE_SIG"appraise func=MODULE_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig" , #endifNULL
@@ -50,7 +50,7 @@ static const char *const secure_and_trusted_rules[] = {"measure func=KEXEC_KERNEL_CHECK template=ima-modsig" ,"measure func=MODULE_CHECK template=ima-modsig" ,"appraise func=KEXEC_KERNEL_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig" , -#ifndef CONFIG_MODULE_SIG_FORCE +#ifndef CONFIG_MODULE_SIG"appraise func=MODULE_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig" , #endifNULL
arch/powerpc/kernel/vdso32/gettimeofday.S +3 -3
@@ -218,11 +218,11 @@ V_FUNCTION_BEGIN(__kernel_clock_getres) blr /* - * invalid clock + * syscall fallback */ 99: - li r3, EINVAL - crset so + li r0,__NR_clock_getres + sc blr .cfi_endproc V_FUNCTION_END(__kernel_clock_getres)
arch/riscv/include/asm/perf_event.h +2 -6
@@ -12,19 +12,14 @@#include <linux/ptrace.h> #include <linux/interrupt.h> +#ifdef CONFIG_RISCV_BASE_PMU #define RISCV_BASE_COUNTERS 2/* * The RISCV_MAX_COUNTERS parameter should be specified. */ -#ifdef CONFIG_RISCV_BASE_PMU #define RISCV_MAX_COUNTERS 2 -#endif - -#ifndef RISCV_MAX_COUNTERS -#error "Please provide a valid RISCV_MAX_COUNTERS for the PMU." -#endif /* * These are the indexes of bits in counteren register *minus* 1,
@@ -82,6 +77,7 @@ struct riscv_pmu { int irq; }; +#endif #ifdef CONFIG_PERF_EVENTS #define perf_arch_bpf_user_pt_regs (regs) (struct user_regs_struct *)regs#endif
arch/riscv/kernel/Makefile +1 -1
@@ -38,7 +38,7 @@ obj-$(CONFIG_MODULE_SECTIONS) += module-sections.o obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o obj-$(CONFIG_DYNAMIC_FTRACE) += mcount-dyn.o -obj-$(CONFIG_PERF_EVENTS) += perf_event.o +obj-$(CONFIG_RISCV_BASE_PMU) += perf_event.o obj-$(CONFIG_PERF_EVENTS) += perf_callchain.o obj-$(CONFIG_HAVE_PERF_REGS) += perf_regs.o obj-$(CONFIG_RISCV_SBI) += sbi.o
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/ftrace.h +6 -0
@@ -56,6 +56,12 @@ struct dyn_arch_ftrace {#ifndef __ASSEMBLY__ +#if defined(CONFIG_FUNCTION_TRACER ) && defined(CONFIG_DYNAMIC_FTRACE ) +extern void set_ftrace_ops_ro (void ); +#else +static inline void set_ftrace_ops_ro (void ) { } +#endif +#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME static inline bool arch_syscall_match_sym_name (const char *sym,const char *name) {
arch/x86/include/asm/kvm_host.h +1 -0
@@ -574,6 +574,7 @@ struct kvm_vcpu_arch {unsigned long cr4;unsigned long cr4_guest_owned_bits;unsigned long cr8; +u32 host_pkru;u32 pkru;u32 hflags;u64 efer;
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/ftrace.c +28 -1
@@ -407,7 +407,8 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)set_vm_flush_reset_perms (trampoline); -set_memory_ro ((unsigned long )trampoline, npages); +if (likely (system_state !=SYSTEM_BOOTING )) +set_memory_ro ((unsigned long )trampoline, npages);set_memory_x ((unsigned long )trampoline, npages);return (unsigned long )trampoline; fail:
@@ -415,6 +416,32 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)return 0 ; } +void set_ftrace_ops_ro (void ) +{ +struct ftrace_ops *ops; +unsigned long start_offset; +unsigned long end_offset; +unsigned long npages; +unsigned long size; + +do_for_each_ftrace_op (ops, ftrace_ops_list) { +if (!(ops->flags &FTRACE_OPS_FL_ALLOC_TRAMP )) +continue ; + +if (ops->flags &FTRACE_OPS_FL_SAVE_REGS ) { + start_offset = (unsigned long )ftrace_regs_caller; + end_offset = (unsigned long )ftrace_regs_caller_end; + }else { + start_offset = (unsigned long )ftrace_caller; + end_offset = (unsigned long )ftrace_epilogue; + } + size = end_offset - start_offset; + size = size +RET_SIZE +sizeof (void *); + npages =DIV_ROUND_UP (size,PAGE_SIZE ); +set_memory_ro ((unsigned long )ops->trampoline, npages); + }while_for_each_ftrace_op (ops); +} +static unsigned long calc_trampoline_call_offset (bool save_regs) {unsigned long start_offset;
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
@@ -611,23 +611,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;
@@ -660,6 +660,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 ;
@@ -685,8 +686,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/vmx/nested.c +18 -1
@@ -5504,6 +5504,23 @@ static bool nested_vmx_exit_handled_vmcs_access(struct kvm_vcpu *vcpu,return 1 & (b >> (field &7 )); } +static bool nested_vmx_exit_handled_mtf (struct vmcs12 *vmcs12) +{ +u32 entry_intr_info = vmcs12->vm_entry_intr_info_field; + +if (nested_cpu_has_mtf (vmcs12)) +return true; + +/* +* An MTF VM-exit may be injected into the guest by setting the +* interruption-type to 7 (other event) and the vector field to 0. Such +* is the case regardless of the 'monitor trap flag' VM-execution +* control. +*/ +return entry_intr_info == (INTR_INFO_VALID_MASK + |INTR_TYPE_OTHER_EVENT ); +} +/* * Return 1 if we should exit from L2 to L1 to handle an exit, or 0 if we * should handle it ourselves in L0 (and then continue L2). Only call this
@@ -5618,7 +5635,7 @@ bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason)case EXIT_REASON_MWAIT_INSTRUCTION :return nested_cpu_has (vmcs12,CPU_BASED_MWAIT_EXITING );case EXIT_REASON_MONITOR_TRAP_FLAG : -return nested_cpu_has (vmcs12,CPU_BASED_MONITOR_TRAP_FLAG ); +return nested_vmx_exit_handled_mtf (vmcs12);case EXIT_REASON_MONITOR_INSTRUCTION :return nested_cpu_has (vmcs12,CPU_BASED_MONITOR_EXITING );case EXIT_REASON_PAUSE_INSTRUCTION :
arch/x86/kvm/vmx/vmx.c +0 -18
@@ -1380,7 +1380,6 @@ void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)vmx_vcpu_pi_load (vcpu, cpu); - vmx->host_pkru =read_pkru (); vmx->host_debugctlmsr =get_debugctlmsr (); }
@@ -6538,11 +6537,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)kvm_load_guest_xsave_state (vcpu); -if (static_cpu_has (X86_FEATURE_PKU ) && -kvm_read_cr4_bits (vcpu,X86_CR4_PKE ) && - vcpu->arch.pkru != vmx->host_pkru) -__write_pkru (vcpu->arch.pkru); -pt_guest_enter (vmx);atomic_switch_perf_msrs (vmx);
@@ -6631,18 +6625,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)pt_guest_exit (vmx); -/* -* eager fpu is enabled if PKEY is supported and CR4 is switched -* back on host, so it is safe to read guest PKRU from current -* XSAVE. -*/ -if (static_cpu_has (X86_FEATURE_PKU ) && -kvm_read_cr4_bits (vcpu,X86_CR4_PKE )) { - vcpu->arch.pkru =rdpkru (); -if (vcpu->arch.pkru != vmx->host_pkru) -__write_pkru (vmx->host_pkru); - } -kvm_load_host_xsave_state (vcpu); vmx->nested.nested_run_pending =0 ;
arch/x86/kvm/x86.c +18 -1
@@ -809,11 +809,25 @@ void kvm_load_guest_xsave_state(struct kvm_vcpu *vcpu) vcpu->arch.ia32_xss != host_xss)wrmsrl (MSR_IA32_XSS , vcpu->arch.ia32_xss); } + +if (static_cpu_has (X86_FEATURE_PKU ) && + (kvm_read_cr4_bits (vcpu,X86_CR4_PKE ) || + (vcpu->arch.xcr0 &XFEATURE_MASK_PKRU )) && + vcpu->arch.pkru != vcpu->arch.host_pkru) +__write_pkru (vcpu->arch.pkru); }EXPORT_SYMBOL_GPL (kvm_load_guest_xsave_state);void kvm_load_host_xsave_state (struct kvm_vcpu *vcpu) { +if (static_cpu_has (X86_FEATURE_PKU ) && + (kvm_read_cr4_bits (vcpu,X86_CR4_PKE ) || + (vcpu->arch.xcr0 &XFEATURE_MASK_PKRU ))) { + vcpu->arch.pkru =rdpkru (); +if (vcpu->arch.pkru != vcpu->arch.host_pkru) +__write_pkru (vcpu->arch.host_pkru); + } +if (kvm_read_cr4_bits (vcpu,X86_CR4_OSXSAVE )) {if (vcpu->arch.xcr0 != host_xcr0)
@@ -3529,6 +3543,9 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) kvm_x86_ops->vcpu_load (vcpu, cpu); +/* Save host pkru register if supported */ + vcpu->arch.host_pkru =read_pkru (); +/* Apply any externally detected TSC adjustments (due to suspend) */ if (unlikely (vcpu->arch.tsc_offset_adjustment)) {adjust_tsc_offset_host (vcpu, vcpu->arch.tsc_offset_adjustment);
@@ -3722,7 +3739,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/mm/init_64.c +3 -0
@@ -54,6 +54,7 @@#include <asm/init.h> #include <asm/uv/uv.h> #include <asm/setup.h> +#include <asm/ftrace.h> #include "mm_internal.h"
@@ -1288,6 +1289,8 @@ void mark_rodata_ro(void) all_end =roundup ((unsigned long )_brk_end,PMD_SIZE );set_memory_nx (text_end, (all_end - text_end) >>PAGE_SHIFT ); +set_ftrace_ops_ro (); +#ifdef CONFIG_CPA_DEBUG printk (KERN_INFO "Testing CPA: undo %lx-%lx\n" , start, end);set_memory_rw (start, (end-start) >>PAGE_SHIFT );
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
@@ -287,7 +287,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);
@@ -400,7 +400,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
@@ -322,7 +322,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);
@@ -434,7 +434,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
@@ -2042,23 +2042,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
@@ -202,7 +202,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
@@ -1013,20 +1013,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
143 lines not on this page · raw message
drivers/clk/clk.c +3 -0
@@ -3512,6 +3512,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/clk/ti/clkctrl.c +0 -1
@@ -461,7 +461,6 @@ static char * __init clkctrl_get_name(struct device_node *np)return name; } } -of_node_put (np);return NULL ; }
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/dma/xilinx/xilinx_dma.c +10 -10
@@ -1229,16 +1229,16 @@ static enum dma_status xilinx_dma_tx_status(struct dma_chan *dchan,return ret;spin_lock_irqsave (&chan->lock, flags); - - desc =list_last_entry (&chan->active_list, - struct xilinx_dma_tx_descriptor, node); -/* -* VDMA and simple mode do not support residue reporting, so the -* residue field will always be 0. -*/ -if (chan->has_sg && chan->xdev->dma_config->dmatype !=XDMA_TYPE_VDMA ) - residue =xilinx_dma_get_residue (chan, desc); - +if (!list_empty (&chan->active_list)) { + desc =list_last_entry (&chan->active_list, + struct xilinx_dma_tx_descriptor, node); +/* +* VDMA and simple mode do not support residue reporting, so the +* residue field will always be 0. +*/ +if (chan->has_sg && chan->xdev->dma_config->dmatype !=XDMA_TYPE_VDMA ) + residue =xilinx_dma_get_residue (chan, desc); + }spin_unlock_irqrestore (&chan->lock, flags);dma_set_residue (txstate, residue);
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
@@ -531,7 +531,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/gfx_v9_0.c +2 -0
@@ -1177,6 +1177,8 @@ static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = { { 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc8 },/* https://bugzilla.kernel.org/show_bug.cgi?id=207171 */ { 0x1002, 0x15dd, 0x103c, 0x83e7, 0xd3 }, +/* GFXOFF is unstable on C6 parts with a VBIOS 113-RAVEN-114 */ + { 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc6 }, { 0, 0, 0, 0, 0 }, };
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +24 -2
@@ -7716,6 +7716,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 ;
@@ -7725,9 +7726,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/core/dc_link_dp.c +12 -0
@@ -2885,6 +2885,12 @@ bool dc_link_handle_hpd_rx_irq(struct dc_link *link, union hpd_irq_data *out_hpdsizeof (hpd_irq_dpcd_data), "Status: "); +for (i =0 ; i <MAX_PIPES ; i++) { + pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i]; +if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link) + link->dc->hwss.blank_stream (pipe_ctx); + } +for (i =0 ; i <MAX_PIPES ; i++) { pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i];if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link)
@@ -2904,6 +2910,12 @@ bool dc_link_handle_hpd_rx_irq(struct dc_link *link, union hpd_irq_data *out_hpdif (pipe_ctx->stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST )dc_link_reallocate_mst_payload (link); +for (i =0 ; i <MAX_PIPES ; i++) { + pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i]; +if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link) + link->dc->hwss.unblank_stream (pipe_ctx, &previous_link_settings); + } + status = false;if (out_link_loss) *out_link_loss = true;
drivers/gpu/drm/amd/display/dc/core/dc_stream.c +14 -14
@@ -239,24 +239,24 @@ static void delay_cursor_until_vupdate(struct pipe_ctx *pipe_ctx, struct dc *dc)struct dc_stream_state *stream = pipe_ctx->stream;unsigned int us_per_line; -if (stream->ctx->asic_id.chip_family ==FAMILY_RV && -ASICREV_IS_RAVEN (stream->ctx->asic_id.hw_internal_rev)) { +if (!dc->hwss.get_vupdate_offset_from_vsync) +return ; - vupdate_line = dc->hwss.get_vupdate_offset_from_vsync (pipe_ctx); -if (!dc_stream_get_crtc_position (dc, &stream,1 , &vpos, &nvpos)) -return ; + vupdate_line = dc->hwss.get_vupdate_offset_from_vsync (pipe_ctx); +if (!dc_stream_get_crtc_position (dc, &stream,1 , &vpos, &nvpos)) +return ; -if (vpos >= vupdate_line) -return ; +if (vpos >= vupdate_line) +return ; - us_per_line = stream->timing.h_total *10000 / stream->timing.pix_clk_100hz; - lines_to_vupdate = vupdate_line - vpos; - us_to_vupdate = lines_to_vupdate * us_per_line; + us_per_line = + stream->timing.h_total *10000 / stream->timing.pix_clk_100hz; + lines_to_vupdate = vupdate_line - vpos; + us_to_vupdate = lines_to_vupdate * us_per_line; -/* 70 us is a conservative estimate of cursor update time*/ -if (us_to_vupdate <70 ) -udelay (us_to_vupdate); - } +/* 70 us is a conservative estimate of cursor update time*/ +if (us_to_vupdate <70 ) +udelay (us_to_vupdate);#endif }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +2 -1
@@ -2306,7 +2306,8 @@ 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
@@ -250,7 +250,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
@@ -1435,7 +1435,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);
@@ -1469,7 +1470,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_ddi.c +11 -3
@@ -3545,9 +3545,6 @@ static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,intel_dp_set_link_params (intel_dp, crtc_state->port_clock, crtc_state->lane_count, is_mst); - intel_dp->regs.dp_tp_ctl =DP_TP_CTL (port); - intel_dp->regs.dp_tp_status =DP_TP_STATUS (port); -intel_edp_panel_on (intel_dp);intel_ddi_clk_select (encoder, crtc_state);
@@ -4269,12 +4266,18 @@ void intel_ddi_get_config(struct intel_encoder *encoder,struct drm_i915_private *dev_priv =to_i915 (encoder->base.dev);struct intel_crtc *intel_crtc =to_intel_crtc (pipe_config->uapi.crtc);enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; +struct intel_dp *intel_dp =enc_to_intel_dp (encoder);u32 temp, flags =0 ;/* XXX: DSI transcoder paranoia */ if (WARN_ON (transcoder_is_dsi (cpu_transcoder)))return ; +if (INTEL_GEN (dev_priv) >=12 ) { + intel_dp->regs.dp_tp_ctl =TGL_DP_TP_CTL (cpu_transcoder); + intel_dp->regs.dp_tp_status =TGL_DP_TP_STATUS (cpu_transcoder); + } +intel_dsc_get_config (encoder, pipe_config); temp =I915_READ (TRANS_DDI_FUNC_CTL (cpu_transcoder));
@@ -4492,6 +4495,7 @@ static const struct drm_encoder_funcs intel_ddi_funcs = {static struct intel_connector *intel_ddi_init_dp_connector (struct intel_digital_port *intel_dig_port) { +struct drm_i915_private *dev_priv =to_i915 (intel_dig_port->base.base.dev);struct intel_connector *connector;enum port port = intel_dig_port->base.port;
@@ -4502,6 +4506,10 @@ intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port) intel_dig_port->dp.output_reg =DDI_BUF_CTL (port); intel_dig_port->dp.prepare_link_retrain = intel_ddi_prepare_link_retrain; +if (INTEL_GEN (dev_priv) <12 ) { + intel_dig_port->dp.regs.dp_tp_ctl =DP_TP_CTL (port); + intel_dig_port->dp.regs.dp_tp_status =DP_TP_STATUS (port); + }if (!intel_dp_init_connector (intel_dig_port, connector)) {kfree (connector);
drivers/gpu/drm/i915/display/intel_display_power.c +6 -6
@@ -4068,7 +4068,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX D TBT1", .domains = TGL_AUX_D_TBT1_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
@@ -4079,7 +4079,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX E TBT2", .domains = TGL_AUX_E_TBT2_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
@@ -4090,7 +4090,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX F TBT3", .domains = TGL_AUX_F_TBT3_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
@@ -4101,7 +4101,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX G TBT4", .domains = TGL_AUX_G_TBT4_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
@@ -4112,7 +4112,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX H TBT5", .domains = TGL_AUX_H_TBT5_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
@@ -4123,7 +4123,7 @@ static const struct i915_power_well_desc tgl_power_wells[] = { { .name = "AUX I TBT6", .domains = TGL_AUX_I_TBT6_IO_POWER_DOMAINS, - .ops = &hsw_power_well_ops, + .ops = &icl_tc_phy_aux_power_well_ops, .id = DISP_PW_ID_NONE, { .hsw.regs = &icl_aux_power_well_regs,
drivers/gpu/drm/i915/display/intel_dp.c +2 -3
@@ -2492,9 +2492,6 @@ static void intel_dp_prepare(struct intel_encoder *encoder,intel_crtc_has_type (pipe_config, INTEL_OUTPUT_DP_MST)); - intel_dp->regs.dp_tp_ctl =DP_TP_CTL (port); - intel_dp->regs.dp_tp_status =DP_TP_STATUS (port); -/* * There are four kinds of DP registers: *
@@ -7616,6 +7613,8 @@ bool intel_dp_init(struct drm_i915_private *dev_priv, intel_dig_port->dp.output_reg = output_reg; intel_dig_port->max_lanes =4 ; + intel_dig_port->dp.regs.dp_tp_ctl =DP_TP_CTL (port); + intel_dig_port->dp.regs.dp_tp_status =DP_TP_STATUS (port); intel_encoder->type =INTEL_OUTPUT_DP ; intel_encoder->power_domain =intel_port_to_power_domain (port);
drivers/gpu/drm/i915/display/intel_fbc.c +1 -2
@@ -478,8 +478,7 @@ static int intel_fbc_alloc_cfb(struct drm_i915_private *dev_priv,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/display/intel_sprite.c +12 -5
@@ -2754,19 +2754,25 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, } } -static bool gen12_plane_supports_mc_ccs (enum plane_id plane_id) +static bool gen12_plane_supports_mc_ccs (struct drm_i915_private *dev_priv, +enum plane_id plane_id) { +/* Wa_14010477008:tgl[a0..c0] */ +if (IS_TGL_REVID (dev_priv,TGL_REVID_A0 ,TGL_REVID_C0 )) +return false; +return plane_id <PLANE_SPRITE4 ; }static bool gen12_plane_format_mod_supported (struct drm_plane *_plane,u32 format,u64 modifier) { +struct drm_i915_private *dev_priv =to_i915 (_plane->dev);struct intel_plane *plane =to_intel_plane (_plane);switch (modifier) {case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS : -if (!gen12_plane_supports_mc_ccs (plane->id)) +if (!gen12_plane_supports_mc_ccs (dev_priv, plane->id))return false;/* fall through */ case DRM_FORMAT_MOD_LINEAR :
@@ -2935,9 +2941,10 @@ static const u32 *icl_get_plane_formats(struct drm_i915_private *dev_priv, } } -static const u64 *gen12_get_plane_modifiers (enum plane_id plane_id) +static const u64 *gen12_get_plane_modifiers (struct drm_i915_private *dev_priv, +enum plane_id plane_id) { -if (gen12_plane_supports_mc_ccs (plane_id)) +if (gen12_plane_supports_mc_ccs (dev_priv, plane_id))return gen12_plane_format_modifiers_mc_ccs;else return gen12_plane_format_modifiers_rc_ccs;
@@ -3008,7 +3015,7 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv, plane->has_ccs =skl_plane_has_ccs (dev_priv, pipe, plane_id);if (INTEL_GEN (dev_priv) >=12 ) { - modifiers =gen12_get_plane_modifiers (plane_id); + modifiers =gen12_get_plane_modifiers (dev_priv, plane_id); plane_funcs = &gen12_plane_funcs; }else {if (plane->has_ccs)
drivers/gpu/drm/i915/gem/i915_gem_domain.c +1 -6
@@ -368,7 +368,6 @@ static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj)struct drm_i915_private *i915 =to_i915 (obj->base.dev);struct i915_vma *vma; -GEM_BUG_ON (!i915_gem_object_has_pinned_pages (obj));if (!atomic_read (&obj->bind_count))return ;
@@ -400,12 +399,8 @@ static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj)void i915_gem_object_unpin_from_display_plane (struct i915_vma *vma) { -struct drm_i915_gem_object *obj = vma->obj; - -assert_object_held (obj); -/* Bump the LRU to try and avoid premature eviction whilst flipping */ -i915_gem_object_bump_inactive_ggtt (obj); +i915_gem_object_bump_inactive_ggtt (vma->obj);i915_vma_unpin (vma); }
drivers/gpu/drm/i915/gt/intel_engine.h +0 -9
@@ -338,13 +338,4 @@ intel_engine_has_preempt_reset(const struct intel_engine_cs *engine) return intel_engine_has_preemption(engine); } -static inline bool -intel_engine_has_timeslices (const struct intel_engine_cs *engine) -{ -if (!IS_ACTIVE (CONFIG_DRM_I915_TIMESLICE_DURATION )) -return false; - -return intel_engine_has_semaphores (engine); -} -#endif /* _INTEL_RINGBUFFER_H_ */
drivers/gpu/drm/i915/gt/intel_engine_types.h +14 -4
@@ -473,10 +473,11 @@ struct intel_engine_cs {#define I915_ENGINE_SUPPORTS_STATS BIT(1)#define I915_ENGINE_HAS_PREEMPTION BIT(2)#define I915_ENGINE_HAS_SEMAPHORES BIT(3) -#define I915_ENGINE_NEEDS_BREADCRUMB_TASKLET BIT(4) -#define I915_ENGINE_IS_VIRTUAL BIT(5) -#define I915_ENGINE_HAS_RELATIVE_MMIO BIT(6) -#define I915_ENGINE_REQUIRES_CMD_PARSER BIT(7) +#define I915_ENGINE_HAS_TIMESLICES BIT(4) +#define I915_ENGINE_NEEDS_BREADCRUMB_TASKLET BIT(5) +#define I915_ENGINE_IS_VIRTUAL BIT(6) +#define I915_ENGINE_HAS_RELATIVE_MMIO BIT(7) +#define I915_ENGINE_REQUIRES_CMD_PARSER BIT(8)unsigned int flags;/*
@@ -573,6 +574,15 @@ intel_engine_has_semaphores(const struct intel_engine_cs *engine)return engine->flags &I915_ENGINE_HAS_SEMAPHORES ; } +static inline bool +intel_engine_has_timeslices (const struct intel_engine_cs *engine) +{ +if (!IS_ACTIVE (CONFIG_DRM_I915_TIMESLICE_DURATION )) +return false; + +return engine->flags &I915_ENGINE_HAS_TIMESLICES ; +} +static inline bool intel_engine_needs_breadcrumb_tasklet (const struct intel_engine_cs *engine) {
drivers/gpu/drm/i915/gt/intel_lrc.c +7 -1
@@ -1626,6 +1626,9 @@ static void defer_request(struct i915_request *rq, struct list_head * const pl)struct i915_request *w =container_of (p->waiter,typeof (*w), sched); +if (p->flags &I915_DEPENDENCY_WEAK ) +continue ; +/* Leave semaphores spinning on the other engines */ if (w->engine != rq->engine)continue ;
@@ -4194,8 +4197,11 @@ void intel_execlists_set_default_submission(struct intel_engine_cs *engine) engine->flags |=I915_ENGINE_SUPPORTS_STATS ;if (!intel_vgpu_active (engine->i915)) { engine->flags |=I915_ENGINE_HAS_SEMAPHORES ; -if (HAS_LOGICAL_RING_PREEMPTION (engine->i915)) +if (HAS_LOGICAL_RING_PREEMPTION (engine->i915)) { engine->flags |=I915_ENGINE_HAS_PREEMPTION ; +if (IS_ACTIVE (CONFIG_DRM_I915_TIMESLICE_DURATION )) + engine->flags |=I915_ENGINE_HAS_TIMESLICES ; + } }if (INTEL_GEN (engine->i915) >=12 )
drivers/gpu/drm/i915/gvt/scheduler.c +5 -1
@@ -375,7 +375,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/i915_drv.h +2 -0
@@ -1601,6 +1601,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, (IS_ICELAKE(p) && IS_REVID(p, since, until))#define TGL_REVID_A0 0x0 +#define TGL_REVID_B0 0x1 +#define TGL_REVID_C0 0x2#define IS_TGL_REVID (p, since, until) \ (IS_TIGERLAKE(p) && IS_REVID(p, since, until))
drivers/gpu/drm/i915/i915_gem_evict.c +12 -14
@@ -130,6 +130,13 @@ i915_gem_evict_something(struct i915_address_space *vm, active =NULL ;INIT_LIST_HEAD (&eviction_list);list_for_each_entry_safe (vma, next, &vm->bound_list, vm_link) { +if (vma == active) {/* now seen this vma twice */ +if (flags &PIN_NONBLOCK ) +break ; + + active =ERR_PTR (-EAGAIN ); + } +/* * We keep this list in a rough least-recently scanned order * of active elements (inactive elements are cheap to reap).
@@ -145,21 +152,12 @@ i915_gem_evict_something(struct i915_address_space *vm,* To notice when we complete one full cycle, we record the * first active element seen, before moving it to the tail. */ -if (i915_vma_is_active (vma)) { -if (vma == active) { -if (flags &PIN_NONBLOCK ) -break ; - - active =ERR_PTR (-EAGAIN ); - } - -if (active !=ERR_PTR (-EAGAIN )) { -if (!active) - active = vma; +if (active !=ERR_PTR (-EAGAIN ) &&i915_vma_is_active (vma)) { +if (!active) + active = vma; -list_move_tail (&vma->vm_link, &vm->bound_list); -continue ; - } +list_move_tail (&vma->vm_link, &vm->bound_list); +continue ; }if (mark_free (&scan, vma, flags, &eviction_list))
drivers/gpu/drm/i915/i915_irq.c +3 -13
@@ -3324,7 +3324,7 @@ static void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)u32 de_pipe_masked =gen8_de_pipe_fault_mask (dev_priv) |GEN8_PIPE_CDCLK_CRC_DONE ;u32 de_pipe_enables; -u32 de_port_masked =GEN8_AUX_CHANNEL_A ; +u32 de_port_masked =gen8_de_port_aux_mask (dev_priv);u32 de_port_enables;u32 de_misc_masked =GEN8_DE_EDP_PSR ;enum pipe pipe;
@@ -3332,18 +3332,8 @@ static void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)if (INTEL_GEN (dev_priv) <=10 ) de_misc_masked |=GEN8_DE_MISC_GSE ; -if (INTEL_GEN (dev_priv) >=9 ) { - de_port_masked |=GEN9_AUX_CHANNEL_B |GEN9_AUX_CHANNEL_C | -GEN9_AUX_CHANNEL_D ; -if (IS_GEN9_LP (dev_priv)) - de_port_masked |=BXT_DE_PORT_GMBUS ; - } - -if (INTEL_GEN (dev_priv) >=11 ) - de_port_masked |=ICL_AUX_CHANNEL_E ; - -if (IS_CNL_WITH_PORT_F (dev_priv) ||INTEL_GEN (dev_priv) >=11 ) - de_port_masked |=CNL_AUX_CHANNEL_F ; +if (IS_GEN9_LP (dev_priv)) + de_port_masked |=BXT_DE_PORT_GMBUS ; de_pipe_enables = de_pipe_masked |GEN8_PIPE_VBLANK |GEN8_PIPE_FIFO_UNDERRUN ;
drivers/gpu/drm/i915/i915_request.c +6 -2
@@ -951,7 +951,9 @@ i915_request_await_request(struct i915_request *to, struct i915_request *from)return 0 ;if (to->engine->schedule) { - ret =i915_sched_node_add_dependency (&to->sched, &from->sched); + ret =i915_sched_node_add_dependency (&to->sched, + &from->sched, +I915_DEPENDENCY_EXTERNAL );if (ret <0 )return ret; }
@@ -1084,7 +1086,9 @@ __i915_request_await_execution(struct i915_request *to,/* Couple the dependency tree for PI on this exposed to->fence */ if (to->engine->schedule) { - err =i915_sched_node_add_dependency (&to->sched, &from->sched); + err =i915_sched_node_add_dependency (&to->sched, + &from->sched, +I915_DEPENDENCY_WEAK );if (err <0 )return err; }
drivers/gpu/drm/i915/i915_scheduler.c +3 -3
@@ -455,7 +455,8 @@ bool __i915_sched_node_add_dependency(struct i915_sched_node *node, }int i915_sched_node_add_dependency (struct i915_sched_node *node, -struct i915_sched_node *signal) +struct i915_sched_node *signal, +unsigned long flags) {struct i915_dependency *dep;
@@ -464,8 +465,7 @@ int i915_sched_node_add_dependency(struct i915_sched_node *node,return -ENOMEM ;if (!__i915_sched_node_add_dependency (node, signal, dep, -I915_DEPENDENCY_EXTERNAL | -I915_DEPENDENCY_ALLOC )) + flags |I915_DEPENDENCY_ALLOC ))i915_dependency_free (dep);return 0 ;
drivers/gpu/drm/i915/i915_scheduler.h +2 -1
@@ -34,7 +34,8 @@ bool __i915_sched_node_add_dependency(struct i915_sched_node *node, unsigned long flags);int i915_sched_node_add_dependency (struct i915_sched_node *node, -struct i915_sched_node *signal); +struct i915_sched_node *signal, +unsigned long flags);void i915_sched_node_fini (struct i915_sched_node *node);
drivers/gpu/drm/i915/i915_scheduler_types.h +1 -0
@@ -78,6 +78,7 @@ struct i915_dependency {unsigned long flags;#define I915_DEPENDENCY_ALLOC BIT(0)#define I915_DEPENDENCY_EXTERNAL BIT(1) +#define I915_DEPENDENCY_WEAK BIT(2) };#endif /* _I915_SCHEDULER_TYPES_H_ */
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -4722,7 +4722,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
@@ -719,7 +719,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/gpu/drm/tegra/drm.c +2 -1
@@ -1039,6 +1039,7 @@ void tegra_drm_free(struct tegra_drm *tegra, size_t size, void *virt,static bool host1x_drm_wants_iommu (struct host1x_device *dev) { +struct host1x *host1x =dev_get_drvdata (dev->dev.parent);struct iommu_domain *domain;/*
@@ -1076,7 +1077,7 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev)* sufficient and whether or not the host1x is attached to an IOMMU * doesn't matter. */ -if (!domain &&dma_get_mask (dev->dev.parent) <=DMA_BIT_MASK (32 )) +if (!domain &&host1x_get_dma_mask (host1x) <=DMA_BIT_MASK (32 ))return true;return domain !=NULL ;
drivers/gpu/host1x/dev.c +13 -0
@@ -502,6 +502,19 @@ static void __exit tegra_host1x_exit(void) }module_exit (tegra_host1x_exit); +/** +* host1x_get_dma_mask() - query the supported DMA mask for host1x +* @host1x: host1x instance +* +* Note that this returns the supported DMA mask for host1x, which can be +* different from the applicable DMA mask under certain circumstances. +*/ +u64 host1x_get_dma_mask (struct host1x *host1x) +{ +return host1x->info->dma_mask; +} +EXPORT_SYMBOL (host1x_get_dma_mask); +MODULE_AUTHOR ("Thierry Reding <[email protected]>" );MODULE_AUTHOR ("Terje Bergstrom <[email protected]>" );MODULE_DESCRIPTION ("Host1x driver for Tegra products" );
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/hwmon/drivetemp.c +1 -1
@@ -346,7 +346,7 @@ static int drivetemp_identify_sata(struct drivetemp_data *st) st->have_temp_highest =temp_is_valid (buf[SCT_STATUS_TEMP_HIGHEST ]);if (!have_sct_data_table) - goto skip_sct; + goto skip_sct_data;/* Request and read temperature history table */ memset (buf,'\0' ,sizeof (st->smartdata));
drivers/infiniband/core/cache.c +5 -2
@@ -1536,8 +1536,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 -2
@@ -1292,11 +1292,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 =fill_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/core/rdma_core.c +2 -1
@@ -459,7 +459,8 @@ alloc_begin_fd_uobject(const struct uverbs_api_object *obj,struct ib_uobject *uobj;struct file *filp; -if (WARN_ON (fd_type->fops->release != &uverbs_uobject_fd_release)) +if (WARN_ON (fd_type->fops->release != &uverbs_uobject_fd_release && + fd_type->fops->release != &uverbs_async_event_release))return ERR_PTR (-EINVAL ); new_fd =get_unused_fd_flags (O_CLOEXEC );
drivers/infiniband/core/uverbs.h +4 -0
@@ -219,6 +219,7 @@ void ib_uverbs_init_event_queue(struct ib_uverbs_event_queue *ev_queue);void ib_uverbs_init_async_event_file (struct ib_uverbs_async_event_file *ev_file);void ib_uverbs_free_event_queue (struct ib_uverbs_event_queue *event_queue);void ib_uverbs_flow_resources_free (struct ib_uflow_resources *uflow_res); +int uverbs_async_event_release (struct inode *inode,struct file *filp);int ib_alloc_ucontext (struct uverbs_attr_bundle *attrs);int ib_init_ucontext (struct uverbs_attr_bundle *attrs);
@@ -227,6 +228,9 @@ void ib_uverbs_release_ucq(struct ib_uverbs_completion_event_file *ev_file, struct ib_ucq_object *uobj);void ib_uverbs_release_uevent (struct ib_uevent_object *uobj);void ib_uverbs_release_file (struct kref *ref); +void ib_uverbs_async_handler (struct ib_uverbs_async_event_file *async_file, +__u64 element,__u64 event, +struct list_head *obj_list,u32 *counter);void ib_uverbs_comp_handler (struct ib_cq *cq,void *cq_context);void ib_uverbs_cq_event_handler (struct ib_event *event,void *context_ptr);
drivers/infiniband/core/uverbs_main.c +4 -8
@@ -346,7 +346,7 @@ const struct file_operations uverbs_async_event_fops = { .owner = THIS_MODULE, .read = ib_uverbs_async_event_read, .poll = ib_uverbs_async_event_poll, - .release = uverbs_uobject_fd_release, + .release = uverbs_async_event_release, .fasync = ib_uverbs_async_event_fasync, .llseek = no_llseek, };
@@ -386,10 +386,9 @@ void ib_uverbs_comp_handler(struct ib_cq *cq, void *cq_context)kill_fasync (&ev_queue->async_queue,SIGIO ,POLL_IN ); } -static void -ib_uverbs_async_handler (struct ib_uverbs_async_event_file *async_file, -__u64 element,__u64 event,struct list_head *obj_list, -u32 *counter) +void ib_uverbs_async_handler (struct ib_uverbs_async_event_file *async_file, +__u64 element,__u64 event, +struct list_head *obj_list,u32 *counter) {struct ib_uverbs_event *entry;unsigned long flags;
@@ -1187,9 +1186,6 @@ static void ib_uverbs_free_hw_resources(struct ib_uverbs_device *uverbs_dev,*/ mutex_unlock (&uverbs_dev->lists_mutex); -ib_uverbs_async_handler (READ_ONCE (file->async_file),0 , -IB_EVENT_DEVICE_FATAL ,NULL ,NULL ); -uverbs_destroy_ufile_hw (file,RDMA_REMOVE_DRIVER_REMOVE );kref_put (&file->ref, ib_uverbs_release_file);
drivers/infiniband/core/uverbs_std_types_async_fd.c +29 -1
@@ -26,10 +26,38 @@ static int uverbs_async_event_destroy_uobj(struct ib_uobject *uobj, container_of(uobj, struct ib_uverbs_async_event_file, uobj);ib_unregister_event_handler (&event_file->event_handler); -ib_uverbs_free_event_queue (&event_file->ev_queue); + +if (why ==RDMA_REMOVE_DRIVER_REMOVE ) +ib_uverbs_async_handler (event_file,0 ,IB_EVENT_DEVICE_FATAL , +NULL ,NULL );return 0 ; } +int uverbs_async_event_release (struct inode *inode,struct file *filp) +{ +struct ib_uverbs_async_event_file *event_file; +struct ib_uobject *uobj = filp->private_data; +int ret; + +if (!uobj) +return uverbs_uobject_fd_release (inode, filp); + + event_file = + container_of(uobj, struct ib_uverbs_async_event_file, uobj); + +/* +* The async event FD has to deliver IB_EVENT_DEVICE_FATAL even after +* disassociation, so cleaning the event list must only happen after +* release. The user knows it has reached the end of the event stream +* when it sees IB_EVENT_DEVICE_FATAL. +*/ +uverbs_uobject_get (uobj); + ret =uverbs_uobject_fd_release (inode, filp); +ib_uverbs_free_event_queue (&event_file->ev_queue); +uverbs_uobject_put (uobj); +return ret; +} + DECLARE_UVERBS_NAMED_METHOD( UVERBS_METHOD_ASYNC_EVENT_ALLOC, UVERBS_ATTR_FD(UVERBS_ATTR_ASYNC_EVENT_ALLOC_FD_HANDLE,
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/iommu/amd_iommu.c +134 -41
384 lines not on this page · raw message
drivers/iommu/amd_iommu_types.h +7 -2
@@ -468,8 +468,7 @@ struct protection_domain {iommu core code */ spinlock_t lock;/* mostly used to lock the page table*/ u16 id;/* the domain id written to the device table */ -int mode;/* paging mode (0-6 levels) */ -u64 *pt_root;/* page table root pointer */ +atomic64_t pt_root;/* pgtable root and pgtable mode */ int glx;/* Number of levels for GCR3 table */ u64 *gcr3_tbl;/* Guest CR3 table */ unsigned long flags;/* flags to find out type of domain */
@@ -477,6 +476,12 @@ struct protection_domain {unsigned dev_iommu[MAX_IOMMUS ];/* per-IOMMU reference count */ }; +/* For decocded pt_root */ +struct domain_pgtable { +int mode; +u64 *root; +}; +/* * Structure where we save information about one hardware AMD IOMMU in the * system.
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
@@ -605,10 +605,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
@@ -360,6 +360,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/dsa/ocelot/felix.c +1 -0
@@ -397,6 +397,7 @@ static int felix_init_structs(struct felix *felix, int num_phys_ports) ocelot->stats_layout = felix->info->stats_layout; ocelot->num_stats = felix->info->num_stats; ocelot->shared_queue_sz = felix->info->shared_queue_sz; + ocelot->num_mact_rows = felix->info->num_mact_rows; ocelot->ops = felix->info->ops; port_phy_modes = kcalloc(num_phys_ports, sizeof(phy_interface_t),
drivers/net/dsa/ocelot/felix.h +1 -0
@@ -15,6 +15,7 @@ struct felix_info {const u32 *const *map;const struct ocelot_ops *ops;int shared_queue_sz; +int num_mact_rows;const struct ocelot_stat_layout *stats_layout;unsigned int num_stats;int num_ports;
drivers/net/dsa/ocelot/felix_vsc9959.c +1 -0
@@ -1090,6 +1090,7 @@ struct felix_info felix_info_vsc9959 = { .stats_layout = vsc9959_stats_layout, .num_stats = ARRAY_SIZE(vsc9959_stats_layout), .shared_queue_sz = 128 * 1024, + .num_mact_rows = 2048, .num_ports = 6, .switch_pci_bar = 4, .imdio_pci_bar = 0,
drivers/net/ethernet/broadcom/Kconfig +1 -0
@@ -69,6 +69,7 @@ config BCMGENET select BCM7XXX_PHY select MDIO_BCM_UNIMAC select DIMLIB + select BROADCOM_PHY if ARCH_BCM2835 help This driver supports the built-in Ethernet MACs found in the Broadcom BCM7xxx Set Top Box family chipset.
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 ); }
@@ -335,7 +335,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);
@@ -374,7 +374,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);
@@ -393,13 +393,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 );
@@ -974,7 +974,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;
@@ -984,7 +984,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); }
@@ -1715,7 +1715,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) {
@@ -2457,6 +2457,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;
@@ -3121,7 +3126,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
@@ -382,6 +382,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
@@ -625,7 +625,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/mscc/ocelot.c +11 -6
@@ -1016,10 +1016,8 @@ int ocelot_fdb_dump(struct ocelot *ocelot, int port, {int i, j; -/* Loop through all the mac tables entries. There are 1024 rows of 4 -* entries. -*/ -for (i =0 ; i <1024 ; i++) { +/* Loop through all the mac tables entries. */ +for (i =0 ; i < ocelot->num_mact_rows; i++) {for (j =0 ; j <4 ; j++) {struct ocelot_mact_entry entry;bool is_static;
@@ -1446,8 +1444,15 @@ static void ocelot_port_attr_stp_state_set(struct ocelot *ocelot, int port,void ocelot_set_ageing_time (struct ocelot *ocelot,unsigned int msecs) { -ocelot_write (ocelot,ANA_AUTOAGE_AGE_PERIOD (msecs /2 ), -ANA_AUTOAGE ); +unsigned int age_period =ANA_AUTOAGE_AGE_PERIOD (msecs /2000 ); + +/* Setting AGE_PERIOD to zero effectively disables automatic aging, +* which is clearly not what our intention is. So avoid that. +*/ +if (!age_period) + age_period =1 ; + +ocelot_rmw (ocelot, age_period,ANA_AUTOAGE_AGE_PERIOD_M ,ANA_AUTOAGE ); }EXPORT_SYMBOL (ocelot_set_ageing_time);
drivers/net/ethernet/mscc/ocelot_regs.c +1 -0
@@ -431,6 +431,7 @@ int ocelot_chip_init(struct ocelot *ocelot, const struct ocelot_ops *ops) ocelot->stats_layout = ocelot_stats_layout; ocelot->num_stats =ARRAY_SIZE (ocelot_stats_layout); ocelot->shared_queue_sz =224 *1024 ; + ocelot->num_mact_rows =1024 ; ocelot->ops = ops; ret =ocelot_regfields_init (ocelot, ocelot_regfields);
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
@@ -2127,6 +2127,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/ethernet/stmicro/stmmac/dwmac5.c +1 -1
@@ -624,7 +624,7 @@ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg, total_offset += offset; } - total_ctr = cfg->ctr[0 ] + cfg->ctr[1 ] *1000000000 ; + total_ctr = cfg->ctr[0 ] + cfg->ctr[1 ] *1000000000ULL ; total_ctr += total_offset; ctr_low =do_div (total_ctr,1000000000 );
drivers/net/hyperv/netvsc_drv.c +2 -1
@@ -710,7 +710,8 @@ static int netvsc_xmit(struct sk_buff *skb, struct net_device *net, bool xdp_tx) goto drop; } -static int netvsc_start_xmit (struct sk_buff *skb,struct net_device *ndev) +static netdev_tx_t netvsc_start_xmit (struct sk_buff *skb, +struct net_device *ndev) {return netvsc_xmit (skb, ndev, false); }
drivers/net/phy/microchip_t1.c +171 -0
164 lines not on this page · raw message
drivers/pinctrl/intel/pinctrl-baytrail.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/pinctrl/intel/pinctrl-cherryview.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/pinctrl/intel/pinctrl-sunrisepoint.c +8 -7
Lines of this file are not shown. View the raw message.
fs/eventpoll.c +28 -20
48 lines not on this page · raw message
init/main.c +57 -18
75 lines not on this page · raw message
kernel/trace/bpf_trace.c +62 -32
94 lines not on this page · 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/testing/selftests/bpf/prog_tests/mmap.c +9 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_overhead.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 +129 -58
187 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.