Linux 5.11.7
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.11.7 kernel.
All users of the 5.11 kernel series must upgrade.
The updated 5.11.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.11.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/ABI/testing/sysfs-devices-memory | 5 Documentation/admin-guide/mm/memory-hotplug.rst | 4 Documentation/gpu/todo.rst | 21 + Documentation/networking/netdev-FAQ.rst | 72 ---- Documentation/process/stable-kernel-rules.rst | 6 Documentation/process/submitting-patches.rst | 5 Documentation/virt/kvm/api.rst | 3 Makefile | 14 arch/arm64/include/asm/kvm_asm.h | 4 arch/arm64/include/asm/kvm_hyp.h | 8 arch/arm64/include/asm/memory.h | 5 arch/arm64/include/asm/mmu_context.h | 5 arch/arm64/include/asm/pgtable-prot.h | 1 arch/arm64/include/asm/pgtable.h | 3 arch/arm64/kernel/head.S | 2 arch/arm64/kernel/perf_event.c | 2 arch/arm64/kvm/arm.c | 7 arch/arm64/kvm/hyp/entry.S | 2 arch/arm64/kvm/hyp/nvhe/debug-sr.c | 12 arch/arm64/kvm/hyp/nvhe/host.S | 20 - arch/arm64/kvm/hyp/nvhe/hyp-main.c | 6 arch/arm64/kvm/hyp/nvhe/switch.c | 14 arch/arm64/kvm/hyp/nvhe/tlb.c | 3 arch/arm64/kvm/hyp/pgtable.c | 1 arch/arm64/kvm/hyp/vhe/tlb.c | 3 arch/arm64/kvm/mmu.c | 3 arch/arm64/kvm/reset.c | 12 arch/arm64/mm/init.c | 12 arch/arm64/mm/mmu.c | 5 arch/mips/crypto/Makefile | 4 arch/mips/include/asm/traps.h | 3 arch/mips/kernel/cpu-probe.c | 6 arch/mips/kernel/cpu-r3k-probe.c | 3 arch/mips/kernel/traps.c | 10 arch/powerpc/include/asm/code-patching.h | 2 arch/powerpc/include/asm/machdep.h | 3 arch/powerpc/include/asm/ptrace.h | 7 arch/powerpc/include/asm/switch_to.h | 10 arch/powerpc/kernel/asm-offsets.c | 2 arch/powerpc/kernel/exceptions-64s.S | 2 arch/powerpc/kernel/head_book3s_32.S | 9 arch/powerpc/kernel/pci-common.c | 10 arch/powerpc/kernel/process.c | 2 arch/powerpc/kernel/traps.c | 5 arch/powerpc/lib/sstep.c | 4 arch/powerpc/perf/core-book3s.c | 23 + arch/powerpc/platforms/pseries/msi.c | 25 + arch/s390/kernel/smp.c | 2 arch/sparc/include/asm/mman.h | 54 +-- arch/sparc/mm/init_32.c | 3 arch/x86/entry/common.c | 3 arch/x86/entry/entry_64_compat.S | 2 arch/x86/events/intel/core.c | 5 arch/x86/include/asm/insn-eval.h | 2 arch/x86/include/asm/proto.h | 1 arch/x86/include/asm/ptrace.h | 15 arch/x86/kernel/kvmclock.c | 19 - arch/x86/kernel/sev-es.c | 22 + arch/x86/kernel/traps.c | 3 arch/x86/kernel/unwind_orc.c | 12 arch/x86/kvm/lapic.c | 11 arch/x86/lib/insn-eval.c | 66 +++ block/blk-zoned.c | 38 ++ crypto/Kconfig | 2 drivers/base/memory.c | 25 - drivers/base/swnode.c | 3 drivers/base/test/Makefile | 1 drivers/block/rsxx/core.c | 1 drivers/block/zram/zram_drv.c | 17 - drivers/clk/qcom/gdsc.c | 10 drivers/clk/qcom/gdsc.h | 3 drivers/clk/qcom/gpucc-msm8998.c | 8 drivers/cpufreq/qcom-cpufreq-hw.c | 6 drivers/firmware/efi/libstub/efi-stub.c | 16 drivers/gpio/gpio-pca953x.c | 78 +--- drivers/gpio/gpiolib-acpi.c | 19 - drivers/gpio/gpiolib.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 49 +- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 1 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 6 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 8 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 48 ++ drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 66 +++ drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 48 +- drivers/gpu/drm/drm_fb_helper.c | 2 drivers/gpu/drm/drm_gem_shmem_helper.c | 32 + drivers/gpu/drm/drm_ioc32.c | 11 drivers/gpu/drm/i915/gt/intel_engine_cs.c | 7 drivers/gpu/drm/i915/i915_cmd_parser.c | 19 - drivers/gpu/drm/i915/i915_drv.h | 2 drivers/gpu/drm/meson/meson_drv.c | 11 drivers/gpu/drm/nouveau/nouveau_bo.c | 6 drivers/gpu/drm/qxl/qxl_display.c | 1 drivers/gpu/drm/radeon/radeon.h | 2 drivers/gpu/drm/radeon/radeon_gem.c | 4 drivers/gpu/drm/radeon/radeon_prime.c | 2 drivers/gpu/drm/tiny/gm12u320.c | 44 ++ drivers/gpu/drm/ttm/ttm_pool.c | 4 drivers/gpu/drm/udl/udl_drv.c | 17 + drivers/gpu/drm/udl/udl_drv.h | 1 drivers/gpu/drm/udl/udl_main.c | 10 drivers/hid/hid-logitech-dj.c | 7 drivers/i2c/busses/i2c-rcar.c | 13 drivers/input/keyboard/applespi.c | 21 - drivers/iommu/amd/init.c | 45 ++ drivers/iommu/intel/svm.c | 13 drivers/media/platform/rockchip/rkisp1/rkisp1-params.c | 1 drivers/media/platform/vsp1/vsp1_drm.c | 6 drivers/media/rc/Makefile | 1 drivers/media/rc/keymaps/Makefile | 1 drivers/media/rc/keymaps/rc-cec.c | 28 - drivers/media/rc/rc-main.c | 6 drivers/media/usb/usbtv/usbtv-audio.c | 2 drivers/misc/fastrpc.c | 5 drivers/misc/pvpanic.c | 1 drivers/mmc/core/bus.c | 11 drivers/mmc/core/mmc.c | 15 drivers/mmc/host/mmci.c | 10 drivers/mmc/host/mtk-sd.c | 18 - drivers/mmc/host/mxs-mmc.c | 2 drivers/mmc/host/sdhci-iproc.c | 18 + drivers/net/Kconfig | 2 drivers/net/can/flexcan.c | 24 - drivers/net/can/m_can/tcan4x5x.c | 6 drivers/net/dsa/sja1105/sja1105_main.c | 2 drivers/net/ethernet/atheros/alx/main.c | 7 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 drivers/net/ethernet/cadence/macb_main.c | 15 drivers/net/ethernet/davicom/dm9000.c | 21 + drivers/net/ethernet/freescale/enetc/enetc.c | 93 ++--- drivers/net/ethernet/freescale/enetc/enetc.h | 5 drivers/net/ethernet/freescale/enetc/enetc_hw.h | 18 - drivers/net/ethernet/freescale/enetc/enetc_pf.c | 98 ++++- drivers/net/ethernet/freescale/enetc/enetc_vf.c | 7 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 6 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 drivers/net/ethernet/ibm/ibmvnic.c | 17 - drivers/net/ethernet/intel/i40e/i40e_main.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 5 drivers/net/ethernet/intel/ixgbevf/ipsec.c | 5 drivers/net/ethernet/mediatek/mtk_star_emac.c | 5 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 drivers/net/ethernet/mellanox/mlxsw/reg.h | 1 drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c | 5 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 7 drivers/net/ethernet/mellanox/mlxsw/switchx2.c | 3 drivers/net/ethernet/mscc/ocelot_flower.c | 3 drivers/net/ethernet/realtek/r8169_main.c | 2 drivers/net/ethernet/renesas/sh_eth.c | 7 drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 5 drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 19 + drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 4 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c | 2 drivers/net/ethernet/stmicro/stmmac/hwif.h | 2 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 19 - drivers/net/netdevsim/netdev.c | 1 drivers/net/phy/dp83822.c | 9 drivers/net/phy/dp83tc811.c | 11 drivers/net/phy/phy.c | 6 drivers/net/phy/phy_device.c | 6 drivers/net/usb/qmi_wwan.c | 14 drivers/net/wan/lapbether.c | 3 drivers/net/wireless/ath/ath11k/mac.c | 4 drivers/net/wireless/ath/ath9k/ath9k.h | 3 drivers/net/wireless/ath/ath9k/xmit.c | 6 drivers/net/wireless/mediatek/mt76/dma.c | 11 drivers/nvme/host/fc.c | 2 drivers/opp/core.c | 48 +- drivers/opp/opp.h | 2 drivers/pci/controller/pci-xgene-msi.c | 10 drivers/pci/controller/pcie-mediatek.c | 7 drivers/pci/pci.c | 4 drivers/pci/pcie/Kconfig | 8 drivers/pci/pcie/Makefile | 1 drivers/pci/pcie/bw_notification.c | 138 -------- drivers/pci/pcie/err.c | 3 drivers/pci/pcie/portdrv.h | 6 drivers/pci/pcie/portdrv_pci.c | 1 drivers/perf/arm_dmc620_pmu.c | 1 drivers/platform/olpc/olpc-ec.c | 15 drivers/platform/x86/amd-pmc.c | 14 drivers/s390/block/dasd.c | 6 drivers/s390/cio/vfio_ccw_ops.c | 6 drivers/s390/crypto/vfio_ap_ops.c | 2 drivers/s390/net/qeth_core.h | 3 drivers/s390/net/qeth_core_main.c | 128 +++---- drivers/scsi/libiscsi.c | 11 drivers/scsi/pm8001/pm8001_hwi.c | 14 drivers/scsi/ufs/ufs-sysfs.c | 3 drivers/scsi/ufs/ufs.h | 6 drivers/scsi/ufs/ufshcd.c | 82 ++-- drivers/scsi/ufs/ufshcd.h | 6 drivers/spi/spi-stm32.c | 15 drivers/staging/comedi/drivers/addi_apci_1032.c | 4 drivers/staging/comedi/drivers/addi_apci_1500.c | 18 - drivers/staging/comedi/drivers/adv_pci1710.c | 10 drivers/staging/comedi/drivers/das6402.c | 2 drivers/staging/comedi/drivers/das800.c | 2 drivers/staging/comedi/drivers/dmm32at.c | 2 drivers/staging/comedi/drivers/me4000.c | 2 drivers/staging/comedi/drivers/pcl711.c | 2 drivers/staging/comedi/drivers/pcl818.c | 2 drivers/staging/ks7010/ks_wlan_net.c | 6 drivers/staging/rtl8188eu/core/rtw_ap.c | 5 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6 drivers/staging/rtl8192e/rtl8192e/rtl_wx.c | 7 drivers/staging/rtl8192u/r8192U_wx.c | 6 drivers/staging/rtl8712/rtl871x_cmd.c | 6 drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 2 drivers/target/target_core_pr.c | 15 drivers/target/target_core_transport.c | 15 drivers/tty/serial/max310x.c | 29 - drivers/usb/class/cdc-acm.c | 5 drivers/usb/class/usblp.c | 16 drivers/usb/core/usb.c | 32 + drivers/usb/dwc3/dwc3-qcom.c | 77 ++++ drivers/usb/gadget/function/f_uac1.c | 1 drivers/usb/gadget/function/f_uac2.c | 2 drivers/usb/gadget/function/u_ether_configfs.h | 5 drivers/usb/gadget/udc/s3c2410_udc.c | 4 drivers/usb/host/xhci-pci.c | 13 drivers/usb/host/xhci-ring.c | 3 drivers/usb/host/xhci.c | 78 ++-- drivers/usb/host/xhci.h | 1 drivers/usb/renesas_usbhs/pipe.c | 2 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/cp210x.c | 3 drivers/usb/serial/io_edgeport.c | 26 - drivers/usb/usbip/stub_dev.c | 42 ++ drivers/usb/usbip/vhci_sysfs.c | 39 ++ drivers/usb/usbip/vudc_sysfs.c | 49 ++ drivers/xen/events/events_2l.c | 22 - drivers/xen/events/events_base.c | 130 +++++-- drivers/xen/events/events_fifo.c | 7 drivers/xen/events/events_internal.h | 14 fs/binfmt_misc.c | 29 - fs/block_dev.c | 11 fs/cifs/cifsfs.c | 2 fs/cifs/cifsglob.h | 11 fs/cifs/connect.c | 10 fs/cifs/sess.c | 1 fs/cifs/smb2inode.c | 1 fs/cifs/smb2misc.c | 8 fs/cifs/smb2ops.c | 10 fs/cifs/smb2proto.h | 3 fs/cifs/transport.c | 2 fs/configfs/file.c | 6 fs/ext4/super.c | 9 fs/io_uring.c | 3 fs/nfs/dir.c | 40 +- fs/nfs/nfs4proc.c | 2 fs/pnode.h | 2 fs/udf/inode.c | 9 include/linux/acpi.h | 10 include/linux/can/skb.h | 8 include/linux/compiler-clang.h | 6 include/linux/gpio/consumer.h | 2 include/linux/memblock.h | 4 include/linux/memcontrol.h | 6 include/linux/memory.h | 3 include/linux/perf_event.h | 2 include/linux/pgtable.h | 4 include/linux/sched/mm.h | 3 include/linux/seqlock.h | 5 include/linux/stop_machine.h | 11 include/linux/textsearch.h | 2 include/linux/usb.h | 2 include/linux/virtio_net.h | 7 include/media/rc-map.h | 7 include/target/target_core_backend.h | 1 include/uapi/linux/l2tp.h | 1 include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2 kernel/events/core.c | 42 ++ kernel/sched/core.c | 126 +++---- kernel/sched/membarrier.c | 4 kernel/sysctl.c | 8 kernel/time/hrtimer.c | 60 ++- lib/Kconfig.kasan | 1 lib/logic_pio.c | 3 lib/test_kasan.c | 10 mm/highmem.c | 17 - mm/huge_memory.c | 2 mm/madvise.c | 13 mm/memcontrol.c | 15 mm/memory.c | 8 mm/memory_hotplug.c | 2 mm/page_alloc.c | 167 ++++------ mm/slub.c | 2 net/core/skbuff.c | 2 net/dsa/tag_mtk.c | 19 - net/dsa/tag_rtl4_a.c | 12 net/ethtool/channels.c | 26 - net/ipv4/cipso_ipv4.c | 11 net/ipv4/ip_tunnel.c | 5 net/ipv4/ip_vti.c | 6 net/ipv4/nexthop.c | 10 net/ipv4/tcp.c | 26 + net/ipv4/udp_offload.c | 2 net/ipv6/calipso.c | 14 net/ipv6/ip6_gre.c | 16 net/ipv6/ip6_tunnel.c | 10 net/ipv6/ip6_vti.c | 6 net/ipv6/sit.c | 2 net/l2tp/l2tp_core.c | 41 +- net/l2tp/l2tp_core.h | 1 net/l2tp/l2tp_netlink.c | 6 net/mpls/mpls_gso.c | 3 net/mptcp/protocol.c | 40 -- net/mptcp/protocol.h | 15 net/mptcp/subflow.c | 4 net/netfilter/nf_nat_proto.c | 25 + net/netfilter/x_tables.c | 6 net/netlabel/netlabel_cipso_v4.c | 3 net/qrtr/qrtr.c | 4 net/sched/sch_api.c | 8 net/sunrpc/sched.c | 5 samples/bpf/xdpsock_user.c | 2 security/commoncap.c | 12 sound/pci/hda/hda_bind.c | 4 sound/pci/hda/hda_controller.c | 7 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_ca0132.c | 1 sound/pci/hda/patch_conexant.c | 62 ++- sound/pci/hda/patch_hdmi.c | 13 sound/usb/card.c | 6 sound/usb/quirks.c | 11 sound/usb/usbaudio.h | 1 tools/bpf/resolve_btfids/main.c | 5 tools/lib/bpf/xsk.c | 5 tools/perf/Makefile.perf | 2 tools/perf/util/sort.c | 4 tools/perf/util/trace-event-read.c | 1 tools/testing/selftests/bpf/progs/netif_receive_skb.c | 13 tools/testing/selftests/bpf/progs/test_tunnel_kern.c | 6 tools/testing/selftests/bpf/verifier/array_access.c | 3 tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh | 9 342 files changed, 2820 insertions(+), 1656 deletions(-)
Adrian Hunter (1):
mmc: core: Fix partition switch time for eMMC
Alain Volmat (1):
spi: stm32: make spurious and overrun interrupts visible
Aleksandr Miloserdov (2):
scsi: target: core: Add cmd length set before cmd complete
scsi: target: core: Prevent underflow for service actions
Alex Deucher (4):
drm/amdgpu/display: simplify backlight setting drm/amdgpu/display: don't assert in set backlight function drm/amdgpu/display: handle aux backlight in backlight_get_brightness drm/amdgpu: fix S0ix handling when the CONFIG_AMD_PMC=m
Alexander Shiyan (1):
Revert "serial: max310x: rework RX interrupt handling"
Andreas Larsson (1):
sparc32: Limit memblock allocation to low memory
Andrew Scull (1):
KVM: arm64: Fix nVHE hyp panic host context restore
Andrey Konovalov (4):
kasan: fix memory corruption in kasan_bitops_tags test
arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL kasan, mm: fix crash with HW_TAGS and DEBUG_PAGEALLOC
kasan: fix KASAN_STACK dependency for HW_TAGS
Andy Lutomirski (1):
x86/entry: Fix entry/exit mismatch on failed fast 32-bit syscalls
Andy Shevchenko (3):
gpiolib: acpi: Add ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER quirk
gpiolib: acpi: Allow to find GpioInt() resource by name and index
gpio: pca953x: Set IRQ type when handle Intel Galileo Gen 2
AngeloGioacchino Del Regno (2):
clk: qcom: gdsc: Implement NO_RET_PERIPH flag
clk: qcom: gpucc-msm8998: Add resets, cxc, fix flags on gpu_gx_gdsc
Anna-Maria Behnsen (1):
hrtimer: Update softirq_expires_next correctly after __hrtimer_get_next_event()
Anshuman Khandual (1):
arm64/mm: Fix pfn_valid() for ZONE_DEVICE based memory
Anthony DeRossi (1):
drm/ttm: Fix TTM page pool accounting
Antonio Terceiro (1):
perf build: Fix ccache usage in $(CC) when generating arch errno table
Antony Antony (1):
ixgbe: fail to create xfrm offload of IPsec tunnel mode SA
Ard Biesheuvel (2):
arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds
efi: stub: omit SetVirtualAddressMap() if marked unsupported in RT_PROP table
Arjun Roy (1):
tcp: Fix sign comparison bug in getsockopt(TCP_ZEROCOPY_RECEIVE)
Arnd Bergmann (5):
net: phy: make mdio_bus_phy_suspend/resume as __maybe_unused drivers/base: build kunit tests without structleak plugin
memblock: fix section mismatch warning
stop_machine: mark helpers __always_inline linux/compiler-clang.h: define HAVE_BUILTIN_BSWAP*
Artem Lapkin (1):
drm: meson_drv add shutdown function
Athira Rajeev (2):
powerpc/perf: Fix handling of privilege level checks in perf interrupt context powerpc/perf: Record counter overflow always if SAMPLE_IP is unset
Atish Patra (1):
net: macb: Add default usrio config to default gem config
Aurelien Aptel (1):
cifs: fix credit accounting for extra channel
Balazs Nemeth (2):
net: check if protocol extracted by virtio_net_hdr_set_proto is correct
net: avoid infinite loop in mpls_gso_segment when mpls_hlen == 0
Beata Michalska (1):
opp: Don't drop extra references to OPPs accidentally
Benjamin Coddington (1):
SUNRPC: Set memalloc_nofs_save() for sync tasks
Biao Huang (1):
net: ethernet: mtk-star-emac: fix wrong unmap in RX handling
Biju Das (2):
media: v4l: vsp1: Fix uif null pointer access
media: v4l: vsp1: Fix bru null pointer access
Bjorn Helgaas (1):
PCI/LINK: Remove bandwidth notification
Can Guo (1):
scsi: ufs: Protect some contexts from unexpected clock scaling
Catalin Marinas (1):
arm64: mte: Map hotplugged memory as Normal Tagged
Chaotian Jing (1):
mmc: mediatek: fix race condition between msdc_request_timeout and irq
Christian Brauner (1):
mount: fix mounting of detached mounts onto targets that reside on shared mounts
Christian König (1):
drm/radeon: also init GEM funcs in radeon_gem_prime_import_sg_table
Christophe JAILLET (1):
mmc: mxs-mmc: Fix a resource leak in an error handling path in 'mxs_mmc_probe()'
Christophe Leroy (2):
powerpc/603: Fix protection of user pages mapped with PROT_NONE
powerpc: Fix missing declaration of [en/dis]able_kernel_vsx()
Colin Ian King (1):
qxl: Fix uninitialised struct field head.surface_id
DENG Qingfang (2):
net: dsa: tag_rtl4_a: fix egress tags
net: dsa: tag_mtk: fix 802.1ad VLAN egress
Dafna Hirschfeld (1):
media: rkisp1: params: fix wrong bits settings
Daiyue Zhang (1):
configfs: fix a use-after-free in __configfs_open_file
Dan Carpenter (6):
USB: gadget: u_ether: Fix a configfs return code
staging: rtl8192u: fix ->ssid overflow in r8192_wx_set_scan()
staging: rtl8188eu: prevent ->ssid overflow in rtw_wx_set_scan()
staging: rtl8712: unterminated string leads to read overflow
staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
staging: ks7010: prevent buffer overflow in ks_wlan_set_scan()
Daniel Axtens (1):
powerpc/64s/exception: Clean up a missed SRR specifier
Daniel Borkmann (1):
net: Fix gro aggregation for udp encaps with zero csum
Daniel Vetter (1):
drm/compat: Clear bounce structures
Daniele Palmas (1):
net: usb: qmi_wwan: allow qmimux add/del with master up
Danielle Ratson (2):
selftests: forwarding: Fix race condition in mirror installation
mlxsw: spectrum_ethtool: Add an external speed to PTYS register
Dave Airlie (1):
drm/nouveau: fix dma syncing for loops (v2)
David Hildenbrand (1):
drivers/base/memory: don't store phys_device in memory blocks
Davide Caratti (1):
mptcp: fix length of ADD_ADDR with port sub-option
Dmitry Baryshkov (1):
misc: fastrpc: restrict user apps from sending kernel RPC messages
Dmitry V. Levin (1):
uapi: nfnetlink_cthelper.h: fix userspace compilation error
Edwin Peer (1):
bnxt_en: reliably allocate IRQ table on reset to avoid crash
Eric Dumazet (1):
tcp: add sanity tests to TCP_QUEUE_SEQ
Eric Farman (1):
s390/cio: return -EFAULT if copy_to_user() fails
Eric W. Biederman (1):
Revert 95ebabde382c ("capabilities: Don't allow writing ambiguous v3 file capabilities")
Evan Quan (1):
drm/amd/pm: correct the watermark settings for Polaris
Felix Fietkau (1):
ath9k: fix transmitting to stations in dynamic SMPS mode
Filipe Laíns (1):
HID: logitech-dj: add support for the new lightspeed connection iteration
Florian Westphal (3):
netfilter: nf_nat: undo erroneous tcp edemux lookup
mptcp: reset last_snd on subflow close
mptcp: put subflow sock on connect error
Forest Crossman (1):
usb: xhci: Fix ASMedia ASM1042A and ASM3242 DMA addressing
Frank Li (1):
mmc: cqhci: Fix random crash when remove mmc module/card
Geert Uytterhoeven (1):
PCI: Fix pci_register_io_range() memory leak
Greg Kroah-Hartman (1):
Linux 5.11.7
Greg Kurz (1):
powerpc/pseries: Don't enforce MSI affinity with kdump
Guangbin Huang (1):
net: phy: fix save wrong speed and duplex problem if autoneg is on
Hangbin Liu (1):
selftests/bpf: No need to drop the packet when there is no geneve opt
Hans Verkuil (1):
media: rc: compile rc-cec.c into rc-core
Hayes Wang (1):
r8169: fix r8168fp_adjust_ocp_cmd function
Heikki Krogerus (1):
software node: Fix node registration
Heiko Carstens (1):
s390/smp: __smp_rescan_cpus() - move cpumask away from stack
Hillf Danton (1):
netdevsim: init u64 stats for 32bit hardware
Holger Hoffstätte (2):
drm/amdgpu/display: use GFP_ATOMIC in dcn21_validate_bandwidth_fp() drm/amd/display: Fix nested FPU context in dcn21_validate_bandwidth()
Ian Abbott (9):
staging: comedi: addi_apci_1032: Fix endian problem for COS sample
staging: comedi: addi_apci_1500: Fix endian problem for command sample
staging: comedi: adv_pci1710: Fix endian problem for AI command data
staging: comedi: das6402: Fix endian problem for AI command data
staging: comedi: das800: Fix endian problem for AI command data
staging: comedi: dmm32at: Fix endian problem for AI command data
staging: comedi: me4000: Fix endian problem for AI command data
staging: comedi: pcl711: Fix endian problem for AI command data
staging: comedi: pcl818: Fix endian problem for AI command data
Ian Rogers (1):
perf traceevent: Ensure read cmdlines are null terminated.
Ido Schimmel (2):
nexthop: Do not flush blackhole nexthops when loopback goes down
mlxsw: spectrum_router: Ignore routes using a deleted nexthop object
Ilya Leoshkevich (1):
selftests/bpf: Use the last page in test_snprintf_btf on s390
Ioana Ciornei (1):
net: phy: ti: take into account all possible interrupt sources
Jaegeuk Kim (1):
scsi: ufs: WB is only available on LUN #0 to #7
Jakub Kicinski (2):
ethernet: alx: fix order of calls on resume
docs: networking: drop special stable handling
James Smart (1):
nvme-fc: fix racing controller reset and create association
Jan Kara (1):
block: Try to handle busy underlying device on discard
Jason A. Donenfeld (1):
net: always use icmp{,v6}_ndo_send from ndo_start_xmit
Jens Axboe (1):
io_uring: perform IOPOLL reaping if canceler is thread itself
Jeremy Linton (1):
mmc: sdhci-iproc: Add ACPI bindings for the RPi
Jia He (1):
KVM: arm64: Fix range alignment when walking page tables
Jia-Ju Bai (2):
net: qrtr: fix error return code of qrtr_sendmsg()
block: rsxx: fix error return code of rsxx_pci_probe()
Jian Shen (3):
net: hns3: fix error mask definition of flow director
net: hns3: fix query vlan mask value error for flow director
net: hns3: fix bug when calculating the TCAM table info
Jiri Wiesner (1):
ibmvnic: always store valid MAC address
Joakim Zhang (6):
can: flexcan: assert FRZ bit in flexcan_chip_freeze()
can: flexcan: enable RX FIFO after FRZ/HALT valid
can: flexcan: invoke flexcan_chip_freeze() to enter freeze mode
net: stmmac: stop each tx channel independently
net: stmmac: fix watchdog timeout during suspend/resume stress test
net: stmmac: fix wrongly set buffer2 valid when sph unsupport
Joerg Roedel (4):
x86/sev-es: Introduce ip_within_syscall_gap() helper x86/sev-es: Check regs->sp is trusted before adjusting #VC IST stack x86/sev-es: Correctly track IRQ states in runtime #VC handler x86/sev-es: Use __copy_from_user_inatomic()
Johan Hovold (1):
gpio: fix gpio-device list corruption
John Ernberg (1):
ALSA: usb: Add Plantronics C320-M USB ctrl msg delay quirk
Jordan Niethe (1):
powerpc/sstep: Fix VSX instruction emulation
Josh Poimboeuf (1):
x86/unwind/orc: Disable KASAN checking in the ORC unwinder, part 2
Juergen Gross (3):
xen/events: reset affinity of 2-level event when tearing it down xen/events: don't unmask an event channel when an eoi is pending xen/events: avoid handling the same event on two cpus at the same time
Julian Wiedmann (4):
s390/qeth: fix memory leak after failed TX Buffer allocation s390/qeth: improve completion of pending TX buffers s390/qeth: schedule TX NAPI on QAOB completion s390/qeth: fix notification for pending buffers during teardown
Junlin Yang (1):
ibmvnic: remove excessive irqsave
Kai-Heng Feng (1):
ALSA: usb-audio: Disable USB autosuspend properly in setup_disable_autosuspend()
Kalle Valo (1):
ath11k: fix AP mode for QCA6390
Kan Liang (2):
perf/core: Flush PMU internal buffers for per-CPU events perf/x86/intel: Set PERF_ATTACH_SCHED_CB for large PEBS and LBR
Karan Singhal (1):
USB: serial: cp210x: add ID for Acuity Brands nLight Air Adapter
Keita Suzuki (1):
i40e: Fix memory leak in i40e_probe
Keith Busch (1):
PCI/ERR: Retain status from error notification
Kenneth Feng (1):
drm/amd/pm: bug fix for pcie dpm
Kevin(Yudong) Yang (1):
net/mlx4_en: update moderation when config reset
Khalid Aziz (1):
sparc64: Use arch_validate_flags() to validate ADI flag
Krzysztof Wilczyński (1):
PCI: mediatek: Add missing of_node_put() to fix reference leak
Kun-Chuan Hsieh (1):
tools/resolve_btfids: Fix build error with older host toolchains
Lee Gibson (2):
staging: rtl8712: Fix possible buffer overflow in r8712_sitesurvey_cmd
staging: rtl8192e: Fix possible buffer overflow in _rtl92e_wx_set_scan
Lin Feng (1):
sysctl.c: fix underflow value setting risk in vm_table
Linus Torvalds (1):
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
Lior Ribak (1):
binfmt_misc: fix possible deadlock in bm_register_write
Lorenzo Bianconi (1):
mt76: dma: do not report truncated frames to mac80211
Lu Baolu (1):
iommu/vt-d: Clear PRQ overflow only when PRQ is empty
Lubomir Rintel (1):
Platform: OLPC: Fix probe error handling
Maciej Fijalkowski (2):
samples, bpf: Add missing munmap in xdpsock
libbpf: Clear map_info before each bpf_obj_get_info_by_fd
Maciej W. Rozycki (1):
crypto: mips/poly1305 - enable for all MIPS processors
Marc Zyngier (3):
KVM: arm64: Ensure I-cache isolation between vcpus of a same VM
KVM: arm64: Reject VM creation when the default IPA size is unsupported
KVM: arm64: Fix exclusive limit for IPA size
Martin Kaiser (1):
PCI: xgene-msi: Fix race in installing chained irq handler
Mathias Nyman (2):
xhci: Improve detection of device initiated wake signal.
xhci: Fix repeated xhci wake after suspend due to uncleared internal wake state
Mathieu Desnoyers (1):
sched/membarrier: fix missing local execution of ipi_sync_rq_state()
Matthew Wilcox (Oracle) (1):
include/linux/sched/mm.h: use rcu_dereference in in_vfork()
Matthias Kaehlcke (1):
usb: dwc3: qcom: Honor wakeup enabled/disabled state
Matthias Schiffer (1):
net: l2tp: reduce log level of messages in receive path, add counter instead
Maxim Mikityanskiy (1):
media: usbtv: Fix deadlock on suspend
Maximilian Heyne (1):
net: sched: avoid duplicates in classes dump
Michael Ellerman (1):
powerpc/64: Fix stack trace not displaying final frame
Michal Suchanek (1):
ibmvnic: Fix possibly uninitialized old_num_tx_queues variable warning.
Mike Christie (1):
scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling
Mike Rapoport (1):
mm/page_alloc.c: refactor initialization of struct page for holes in memory layout
Minchan Kim (2):
zram: fix return value on writeback_store
zram: fix broken page writeback
Nadav Amit (1):
mm/userfaultfd: fix memory corruption due to writeprotect
Naveen N. Rao (1):
powerpc/64s: Fix instruction encoding for lis in ppc_function_entry()
Neil Roberts (2):
drm/shmem-helper: Check for purged buffers in fault handler drm/shmem-helper: Don't remove the offset in vm_area_struct pgoff
Nicholas Piggin (2):
powerpc: improve handling of unrecoverable system reset
powerpc: Fix inverted SET_FULL_REGS bitop
Niv Sardi (1):
USB: serial: ch341: add new Product ID
Noralf Trønnes (1):
drm/shmem-helpers: vunmap: Don't put pages for dma-buf
OGAWA Hirofumi (1):
mm/highmem.c: fix zero_user_segments() with start > end
Oleksij Rempel (1):
can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership
Oliver O'Halloran (1):
powerpc/pci: Add ppc_md.discover_phbs()
Ondrej Mosnacek (1):
NFSv4.2: fix return value of _nfs4_get_security_label()
Ong Boon Leong (2):
net: stmmac: fix incorrect DMA channel intr enable setting of EQoS v4.10
net: stmmac: Fix VLAN filter delete timeout issue in Intel mGBE SGMII
Pan Bian (1):
platform/x86: amd-pmc: put device on error paths
Paolo Abeni (2):
mptcp: always graft subflow socket to parent
mptcp: fix memory accounting on allocation error
Paul Cercueil (2):
net: davicom: Fix regulator not turned off on failed probe
net: davicom: Fix regulator not turned off on driver removal
Paul Moore (1):
cipso,calipso: resolve a number of problems with the DOI refcounts
Paulo Alcantara (2):
cifs: return proper error code in statfs(2)
cifs: do not send close in compound create+close requests
Pavel Skripkin (3):
ALSA: usb-audio: fix NULL ptr dereference in usb_audio_probe
ALSA: usb-audio: fix use after free in usb_audio_disconnect
USB: serial: io_edgeport: fix memory leak in edge_startup
Pete Zaitcev (1):
USB: usblp: fix a hang in poll() if disconnected
Peter Zijlstra (7):
seqlock,lockdep: Fix seqcount_latch_init()
sched: Fix migration_cpu_stop() requeueing
sched: Collate affine_move_task() stoppers
sched: Simplify migration_cpu_stop()
sched: Optimize migration_cpu_stop()
sched: Fix affine_move_task() self-concurrency
sched: Simplify set_affinity_pending refcounts
Ravi Bangoria (1):
perf report: Fix -F for branch & mem modes
Rob Herring (1):
arm64: perf: Fix 64-bit event counter read truncation
Ronald Tschalär (1):
Input: applespi - don't wait for responses to commands indefinitely.
Ruslan Bilovol (2):
usb: gadget: f_uac2: always increase endpoint max_packet_size by one audio slot
usb: gadget: f_uac1: stop playback on function disable
Sasha Levin (1):
kbuild: clamp SUBLEVEL to 255
Sean Christopherson (1):
KVM: x86: Ensure deadline timer has truly expired before posting its IRQ
Sebastian Reichel (1):
USB: serial: cp210x: add some more GE USB IDs
Serge Semin (1):
usb: dwc3: qcom: Add missing DWC3 OF node refcount decrement
Sergey Shtylyov (3):
sh_eth: fix TRSCER mask for SH771x
sh_eth: fix TRSCER mask for R7S9210
sh_eth: fix TRSCER mask for R7S72100
Shawn Guo (3):
usb: dwc3: qcom: add URS Host support for sdm845 ACPI boot
usb: dwc3: qcom: add ACPI device id for sc8180x
cpufreq: qcom-hw: fix dereferencing freed memory 'data'
Shile Zhang (1):
misc/pvpanic: Export module FDT device table
Shin'ichiro Kawasaki (1):
block: Discard page cache of zone reset target range
Shuah Khan (6):
usbip: fix stub_dev to check for stream socket
usbip: fix vhci_hcd to check for stream socket
usbip: fix vudc to check for stream socket
usbip: fix stub_dev usbip_sockfd_store() races leading to gpf
usbip: fix vhci_hcd attach_store() races leading to gpf
usbip: fix vudc usbip_sockfd_store races leading to gpf
Simeon Simeonoff (1):
ALSA: hda/ca0132: Add Sound BlasterX AE-5 Plus support
Stanislaw Gruszka (1):
usb: xhci: do not perform Soft Retry for some xHCI hosts
Stefan Haberland (2):
s390/dasd: fix hanging DASD driver unbind s390/dasd: fix hanging IO request during DASD driver unbind
Steven J. Magnani (1):
udf: fix silent AED tagLocation corruption
Suravee Suthikulpanit (1):
iommu/amd: Fix performance counter initialization
Suren Baghdasaryan (1):
mm/madvise: replace ptrace attach requirement for process_madvise
Suzuki K Poulose (1):
KVM: arm64: nvhe: Save the SPE context early
Takashi Iwai (8):
drm/amd/display: Add a backlight module option
ALSA: hda/hdmi: Cancel pending works before suspend
ALSA: hda/conexant: Add quirk for mute LED control on HP ZBook G5
ALSA: hda: Drop the BATCH workaround for AMD controllers
ALSA: hda: Flush pending unsolicited events before suspend
ALSA: hda: Avoid spurious unsol event handling during S3/S4
ALSA: usb-audio: Fix "cannot get freq eq" errors on Dell AE515 sound bar
ALSA: usb-audio: Apply the control quirk to Plantronics headsets
Theodore Ts'o (1):
ext4: don't try to processed freed blocks until mballoc is initialized
Thomas Bogendoerfer (1):
MIPS: kernel: Reserve exception base early to prevent corruption
Thomas Zimmermann (1):
drm: Use USB controller's DMA mask when importing dmabufs
Tong Zhang (1):
drm/fb-helper: only unmap if buffer not null
Torin Cooper-Bennun (1):
can: tcan4x5x: tcan4x5x_init(): fix initialization - clear MRAM before entering Normal Mode
Trond Myklebust (2):
NFS: Don't revalidate the directory permissions on a lookup failure
NFS: Don't gratuitously clear the inode cache when lookup failed
Tvrtko Ursulin (1):
drm/i915: Wedge the GPU if command parser setup fails
Vasily Averin (1):
netfilter: x_tables: gpf inside xt_find_revision()
Vladimir Oltean (11):
net: enetc: don't overwrite the RSS indirection table when initializing
net: enetc: initialize RFS/RSS memories for unused ports too
net: enetc: take the MDIO lock only once per NAPI poll cycle
net: enetc: fix incorrect TPID when receiving 802.1ad tagged packets
net: enetc: don't disable VLAN filtering in IFF_PROMISC mode
net: enetc: force the RGMII speed and duplex instead of operating in inband mode
net: enetc: remove bogus write to SIRXIDR from enetc_setup_rxbdr
net: enetc: keep RX ring consumer index in sync with hardware
net: mscc: ocelot: properly reject destination IP keys in VCAP IS1
net: dsa: sja1105: fix SGMII PCS being forced to SPEED_UNKNOWN instead of SPEED_10
net: enetc: allow hardware timestamping on TX queues with tc-etf enabled
Wang Qing (2):
s390/cio: return -EFAULT if copy_to_user() fails again s390/crypto: return -EFAULT if copy_to_user() fails
Wanpeng Li (1):
KVM: kvmclock: Fix vCPUs > 64 can't be online/hotpluged
Wei Yongjun (3):
USB: gadget: udc: s3c2410_udc: fix return value check in s3c2410_udc_probe()
cpufreq: qcom-hw: Fix return value check in qcom_cpufreq_hw_cpu_init() perf/arm_dmc620_pmu: Fix error return code in dmc620_pmu_device_probe()
Will Deacon (1):
KVM: arm64: Avoid corrupting vCPU context register in guest exit
Willem de Bruijn (1):
net: expand textsearch ts_state to fit skb_seq_state
Wolfram Sang (2):
i2c: rcar: faster irq code to minimize HW race condition
i2c: rcar: optimize cacheline to minimize HW race condition
Wong Vee Khee (1):
stmmac: intel: Fixes clock registration error seen for multiple interfaces
Xie He (1):
net: lapbether: Remove netif_start_queue / netif_stop_queue
Yann Gautier (1):
mmc: mmci: Add MMC_CAP_NEED_RSP_BUSY for the stm32 variants
Yauheni Kaliuta (1):
selftests/bpf: Mask bpf_csum_diff() return value to 16 bits in test_verifier
Yinjun Zhang (1):
ethtool: fix the check logic of at least one channel for RX/TX
Yorick de Wid (1):
Goodix Fingerprint device is not a modem
Yoshihiro Shimoda (1):
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM
Zhou Guanghui (2):
mm/memcg: set memcg when splitting page
mm/memcg: rename mem_cgroup_split_huge_fixup to split_page_memcg and add nr_pages argument
akshatzen (1):
scsi: pm80xx: Fix missing tag_free in NVMD DATA req
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-devices-memory +3 -2
@@ -26,8 +26,9 @@ Date: September 2008 Contact: Badari Pulavarty <[email protected]> Description: The file /sys/devices/system/memory/memoryX/phys_device - is read-only and is designed to show the name of physical - memory device. Implementation is currently incomplete. + is read-only; it is a legacy interface only ever used on s390x + to expose the covered storage increment. +Users: Legacy s390-tools lsmem/chmem What: /sys/devices/system/memory/memoryX/phys_index Date: September 2008
Documentation/admin-guide/mm/memory-hotplug.rst +2 -2
@@ -160,8 +160,8 @@ Under each memory block, you can see 5 files: "online_movable", "online", "offline" command which will be performed on all sections in the block. -``phys_device`` read-only: designed to show the name of physical memory - device. This is not well implemented now. +``phys_device`` read-only: legacy interface only ever used on s390x to + expose the covered storage increment. ``removable`` read-only: contains an integer value indicating whether the memory block is removable or not removable. A value of 1 indicates that the memory
Documentation/gpu/todo.rst +21 -0
@@ -594,6 +594,27 @@ Some of these date from the very introduction of KMS in 2008 ... Level: Intermediate +Remove automatic page mapping from dma-buf importing +---------------------------------------------------- + +When importing dma-bufs, the dma-buf and PRIME frameworks automatically map +imported pages into the importer's DMA area. drm_gem_prime_fd_to_handle() and +drm_gem_prime_handle_to_fd() require that importers call dma_buf_attach() +even if they never do actual device DMA, but only CPU access through +dma_buf_vmap(). This is a problem for USB devices, which do not support DMA +operations. + +To fix the issue, automatic page mappings should be removed from the +buffer-sharing code. Fixing this is a bit more involved, since the import/export +cache is also tied to &drm_gem_object.import_attach. Meanwhile we paper over +this problem for USB devices by fishing out the USB host controller device, as +long as that supports DMA. Otherwise importing can still needlessly fail. + +Contact: Thomas Zimmermann <[email protected]>, Daniel Vetter + +Level: Advanced + + Better Testing ==============
Documentation/networking/netdev-FAQ.rst +6 -66
79 lines not on this page · raw message
Documentation/process/stable-kernel-rules.rst +0 -6
@@ -35,12 +35,6 @@ Rules on what kind of patches are accepted, and which ones are not, into the Procedure for submitting patches to the -stable tree ---------------------------------------------------- - - If the patch covers files in net/ or drivers/net please follow netdev stable - submission guidelines as described in - :ref:`Documentation/networking/netdev-FAQ.rst <netdev-FAQ>` - after first checking the stable networking queue at - https://patchwork.kernel.org/bundle/netdev/stable/?state=* - to ensure the requested patch is not already queued up. - Security patches should not be handled (solely) by the -stable review process but should follow the procedures in :ref:`Documentation/admin-guide/security-bugs.rst <securitybugs>`.
Documentation/process/submitting-patches.rst +0 -5
@@ -250,11 +250,6 @@ should also read :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>` in addition to this file. -Note, however, that some subsystem maintainers want to come to their own -conclusions on which patches should go to the stable trees. The networking -maintainer, in particular, would rather not see individual developers -adding lines like the above to their patches. - If changes affect userland-kernel interfaces, please send the MAN-PAGES maintainer (as listed in the MAINTAINERS file) a man-pages patch, or at least a notification of the change, so that some information makes its way
Documentation/virt/kvm/api.rst +3 -0
@@ -182,6 +182,9 @@ is dependent on the CPU capability and the kernel configuration. The limit can be retrieved using KVM_CAP_ARM_VM_IPA_SIZE of the KVM_CHECK_EXTENSION ioctl() at run-time. +Creation of the VM will fail if the requested IPA size (whether it is +implicit or explicit) is unsupported on the host. + Please note that configuring the IPA size does not affect the capability exposed by the guest CPUs in ID_AA64MMFR0_EL1[PARange]. It only affects size of the address translated by the stage2 level (guest physical to
Makefile +10 -4
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 11 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = 💕 Valentine's Day Edition 💕
@@ -1246,9 +1246,15 @@ define filechk_utsrelease.h endef define filechk_version.h - echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ - echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' + if [ $(SUBLEVEL) -gt 255 ]; then \ + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \ + else \ + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ + fi; \ + echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \ + ((c) > 255 ? 255 : (c)))' endef $(version_h): FORCE
arch/arm64/include/asm/kvm_asm.h +2 -2
@@ -47,7 +47,7 @@#define __KVM_HOST_SMCCC_FUNC___kvm_flush_vm_context 2#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa 3#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid 4 -#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_local_vmid 5 +#define __KVM_HOST_SMCCC_FUNC___kvm_flush_cpu_context 5#define __KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff 6#define __KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs 7#define __KVM_HOST_SMCCC_FUNC___vgic_v3_get_ich_vtr_el2 8
@@ -183,10 +183,10 @@ DECLARE_KVM_HYP_SYM(__bp_harden_hyp_vecs);#define __bp_harden_hyp_vecs CHOOSE_HYP_SYM(__bp_harden_hyp_vecs)extern void __kvm_flush_vm_context (void ); +extern void __kvm_flush_cpu_context (struct kvm_s2_mmu *mmu);extern void __kvm_tlb_flush_vmid_ipa (struct kvm_s2_mmu *mmu,phys_addr_t ipa,int level);extern void __kvm_tlb_flush_vmid (struct kvm_s2_mmu *mmu); -extern void __kvm_tlb_flush_local_vmid (struct kvm_s2_mmu *mmu);extern void __kvm_timer_set_cntvoff (u64 cntvoff);
arch/arm64/include/asm/kvm_hyp.h +7 -1
@@ -83,6 +83,11 @@ void sysreg_restore_guest_state_vhe(struct kvm_cpu_context *ctxt);void __debug_switch_to_guest (struct kvm_vcpu *vcpu);void __debug_switch_to_host (struct kvm_vcpu *vcpu); +#ifdef __KVM_NVHE_HYPERVISOR__ +void __debug_save_host_buffers_nvhe (struct kvm_vcpu *vcpu); +void __debug_restore_host_buffers_nvhe (struct kvm_vcpu *vcpu); +#endif +void __fpsimd_save_state (struct user_fpsimd_state *fp_regs);void __fpsimd_restore_state (struct user_fpsimd_state *fp_regs);
@@ -97,7 +102,8 @@ bool kvm_host_psci_handler(struct kvm_cpu_context *host_ctxt);void __noreturn hyp_panic (void );#ifdef __KVM_NVHE_HYPERVISOR__ -void __noreturn __hyp_do_panic (bool restore_host,u64 spsr,u64 elr,u64 par); +void __noreturn __hyp_do_panic (struct kvm_cpu_context *host_ctxt,u64 spsr, +u64 elr,u64 par);#endif #endif /* __ARM64_KVM_HYP_H__ */
arch/arm64/include/asm/memory.h +5 -0
@@ -315,6 +315,11 @@ static inline void *phys_to_virt(phys_addr_t x)#define ARCH_PFN_OFFSET ((unsigned long)PHYS_PFN_OFFSET)#if !defined(CONFIG_SPARSEMEM_VMEMMAP ) || defined(CONFIG_DEBUG_VIRTUAL ) +#define page_to_virt (x) ({ \ + __typeof__(x) __page = x; \ + void *__addr = __va(page_to_phys(__page)); \ + (void *)__tag_set((const void *)__addr, page_kasan_tag(__page));\ +})#define virt_to_page (x) pfn_to_page(virt_to_pfn(x))#else #define page_to_virt (x) ({ \
arch/arm64/include/asm/mmu_context.h +1 -4
@@ -65,10 +65,7 @@ extern u64 idmap_ptrs_per_pgd;static inline bool __cpu_uses_extended_idmap (void ) { -if (IS_ENABLED (CONFIG_ARM64_VA_BITS_52 )) -return false; - -return unlikely (idmap_t0sz !=TCR_T0SZ (VA_BITS )); +return unlikely (idmap_t0sz !=TCR_T0SZ (vabits_actual)); }/*
arch/arm64/include/asm/pgtable-prot.h +0 -1
@@ -66,7 +66,6 @@ extern bool arm64_use_ng_mappings;#define _PAGE_DEFAULT (_PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))#define PAGE_KERNEL __pgprot(PROT_NORMAL) -#define PAGE_KERNEL_TAGGED __pgprot(PROT_NORMAL_TAGGED)#define PAGE_KERNEL_RO __pgprot((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY)#define PAGE_KERNEL_ROX __pgprot((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY)#define PAGE_KERNEL_EXEC __pgprot(PROT_NORMAL & ~PTE_PXN)
arch/arm64/include/asm/pgtable.h +3 -0
@@ -486,6 +486,9 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd) __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN)#define pgprot_device (prot) \ __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN) +#define pgprot_tagged (prot) \ + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_TAGGED)) +#define pgprot_mhp pgprot_tagged/* * DMA allocations for non-coherent devices use what the Arm architecture calls * "Normal non-cacheable" memory, which permits speculation, unaligned accesses
arch/arm64/kernel/head.S +1 -1
@@ -319,7 +319,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables) */ adrp x5, __idmap_text_end clz x5, x5 - cmp x5, TCR_T0SZ(VA_BITS) // default T0SZ small enough? + cmp x5, TCR_T0SZ(VA_BITS_MIN) // default T0SZ small enough? b.ge 1f // .. then skip VA range extension adr_l x6, idmap_t0sz
arch/arm64/kernel/perf_event.c +1 -1
@@ -460,7 +460,7 @@ static inline int armv8pmu_counter_has_overflowed(u32 pmnc, int idx)return pmnc &BIT (ARMV8_IDX_TO_COUNTER (idx)); } -static inline u32 armv8pmu_read_evcntr (int idx) +static inline u64 armv8pmu_read_evcntr (int idx) {u32 counter =ARMV8_IDX_TO_COUNTER (idx);
arch/arm64/kvm/arm.c +6 -1
@@ -385,11 +385,16 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) last_ran =this_cpu_ptr (mmu->last_vcpu_ran);/* +* We guarantee that both TLBs and I-cache are private to each +* vcpu. If detecting that a vcpu from the same VM has +* previously run on the same physical CPU, call into the +* hypervisor code to nuke the relevant contexts. +* * We might get preempted before the vCPU actually runs, but * over-invalidation doesn't affect correctness. */ if (*last_ran != vcpu->vcpu_id) { -kvm_call_hyp (__kvm_tlb_flush_local_vmid, mmu); +kvm_call_hyp (__kvm_flush_cpu_context, mmu); *last_ran = vcpu->vcpu_id; }
arch/arm64/kvm/hyp/entry.S +1 -1
@@ -146,7 +146,7 @@ SYM_INNER_LABEL(__guest_exit, SYM_L_GLOBAL) // Now restore the hyp regs restore_callee_saved_regs x2 - set_loaded_vcpu xzr, x1, x2 + set_loaded_vcpu xzr, x2, x3 alternative_if ARM64_HAS_RAS_EXTN // If we have the RAS extensions we can consume a pending error
arch/arm64/kvm/hyp/nvhe/debug-sr.c +10 -2
@@ -58,16 +58,24 @@ static void __debug_restore_spe(u64 pmscr_el1)write_sysreg_s (pmscr_el1,SYS_PMSCR_EL1 ); } -void __debug_switch_to_guest (struct kvm_vcpu *vcpu) +void __debug_save_host_buffers_nvhe (struct kvm_vcpu *vcpu) {/* Disable and flush SPE data generation */ __debug_save_spe (&vcpu->arch.host_debug_state.pmscr_el1); +} + +void __debug_switch_to_guest (struct kvm_vcpu *vcpu) +{__debug_switch_to_guest_common (vcpu); } -void __debug_switch_to_host (struct kvm_vcpu *vcpu) +void __debug_restore_host_buffers_nvhe (struct kvm_vcpu *vcpu) {__debug_restore_spe (vcpu->arch.host_debug_state.pmscr_el1); +} + +void __debug_switch_to_host (struct kvm_vcpu *vcpu) +{__debug_switch_to_host_common (vcpu); }
arch/arm64/kvm/hyp/nvhe/host.S +10 -10
@@ -71,10 +71,15 @@ SYM_FUNC_START(__host_enter) SYM_FUNC_END(__host_enter) /* - * void __noreturn __hyp_do_panic(bool restore_host, u64 spsr, u64 elr, u64 par); + * void __noreturn __hyp_do_panic(struct kvm_cpu_context *host_ctxt, u64 spsr, + * u64 elr, u64 par); */ SYM_FUNC_START(__hyp_do_panic) - /* Load the format arguments into x1-7 */ + mov x29, x0 + + /* Load the format string into x0 and arguments into x1-7 */ + ldr x0, =__hyp_panic_string + mov x6, x3 get_vcpu_ptr x7, x3
@@ -89,13 +94,8 @@ SYM_FUNC_START(__hyp_do_panic) ldr lr, =panic msr elr_el2, lr - /* - * Set the panic format string and enter the host, conditionally - * restoring the host context. - */ - cmp x0, xzr - ldr x0, =__hyp_panic_string - b.eq __host_enter_without_restoring + /* Enter the host, conditionally restoring the host context. */ + cbz x29, __host_enter_without_restoring b __host_enter_for_panic SYM_FUNC_END(__hyp_do_panic)
@@ -150,7 +150,7 @@ SYM_FUNC_END(__hyp_do_panic) .macro invalid_host_el1_vect .align 7 - mov x0, xzr /* restore_host = false */ + mov x0, xzr /* host_ctxt = NULL */ mrs x1, spsr_el2 mrs x2, elr_el2 mrs x3, par_el1
arch/arm64/kvm/hyp/nvhe/hyp-main.c +3 -3
@@ -46,11 +46,11 @@ static void handle___kvm_tlb_flush_vmid(struct kvm_cpu_context *host_ctxt)__kvm_tlb_flush_vmid (kern_hyp_va (mmu)); } -static void handle___kvm_tlb_flush_local_vmid (struct kvm_cpu_context *host_ctxt) +static void handle___kvm_flush_cpu_context (struct kvm_cpu_context *host_ctxt) { DECLARE_REG(struct kvm_s2_mmu *, mmu, host_ctxt, 1); -__kvm_tlb_flush_local_vmid (kern_hyp_va (mmu)); +__kvm_flush_cpu_context (kern_hyp_va (mmu)); }static void handle___kvm_timer_set_cntvoff (struct kvm_cpu_context *host_ctxt)
@@ -115,7 +115,7 @@ static const hcall_t *host_hcall[] = {HANDLE_FUNC (__kvm_flush_vm_context),HANDLE_FUNC (__kvm_tlb_flush_vmid_ipa),HANDLE_FUNC (__kvm_tlb_flush_vmid), -HANDLE_FUNC (__kvm_tlb_flush_local_vmid), +HANDLE_FUNC (__kvm_flush_cpu_context),HANDLE_FUNC (__kvm_timer_set_cntvoff),HANDLE_FUNC (__kvm_enable_ssbs), HANDLE_FUNC(__vgic_v3_get_ich_vtr_el2),
arch/arm64/kvm/hyp/nvhe/switch.c +11 -3
@@ -192,6 +192,14 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu) pmu_switch_needed =__pmu_switch_to_guest (host_ctxt);__sysreg_save_state_nvhe (host_ctxt); +/* +* We must flush and disable the SPE buffer for nVHE, as +* the translation regime(EL1&0) is going to be loaded with +* that of the guest. And we must do this before we change the +* translation regime to EL2 (via MDCR_EL2_E2PB == 0) and +* before we load guest Stage1. +*/ +__debug_save_host_buffers_nvhe (vcpu);__adjust_pc (vcpu);
@@ -234,11 +242,12 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)if (vcpu->arch.flags &KVM_ARM64_FP_ENABLED )__fpsimd_save_fpexc32 (vcpu); +__debug_switch_to_host (vcpu);/* * This must come after restoring the host sysregs, since a non-VHE * system may enable SPE here and make use of the TTBRs. */ -__debug_switch_to_host (vcpu); +__debug_restore_host_buffers_nvhe (vcpu);if (pmu_switch_needed)__pmu_switch_to_host (host_ctxt);
@@ -257,7 +266,6 @@ void __noreturn hyp_panic(void)u64 spsr =read_sysreg_el2 (SYS_SPSR );u64 elr =read_sysreg_el2 (SYS_ELR );u64 par =read_sysreg_par (); -bool restore_host = true;struct kvm_cpu_context *host_ctxt;struct kvm_vcpu *vcpu;
@@ -271,7 +279,7 @@ void __noreturn hyp_panic(void)__sysreg_restore_state_nvhe (host_ctxt); } -__hyp_do_panic (restore_host, spsr, elr, par); +__hyp_do_panic (host_ctxt, spsr, elr, par);unreachable (); }
arch/arm64/kvm/hyp/nvhe/tlb.c +2 -1
@@ -123,7 +123,7 @@ void __kvm_tlb_flush_vmid(struct kvm_s2_mmu *mmu)__tlb_switch_to_host (&cxt); } -void __kvm_tlb_flush_local_vmid (struct kvm_s2_mmu *mmu) +void __kvm_flush_cpu_context (struct kvm_s2_mmu *mmu) {struct tlb_inv_context cxt;
@@ -131,6 +131,7 @@ void __kvm_tlb_flush_local_vmid(struct kvm_s2_mmu *mmu)__tlb_switch_to_guest (mmu, &cxt);__tlbi (vmalle1); + asmvolatile ("ic iallu" );dsb (nsh);isb ();
arch/arm64/kvm/hyp/pgtable.c +1 -0
@@ -225,6 +225,7 @@ static inline int __kvm_pgtable_visit(struct kvm_pgtable_walk_data *data, goto out;if (!table) { + data->addr =ALIGN_DOWN (data->addr,kvm_granule_size (level)); data->addr +=kvm_granule_size (level); goto out; }
arch/arm64/kvm/hyp/vhe/tlb.c +2 -1
@@ -127,7 +127,7 @@ void __kvm_tlb_flush_vmid(struct kvm_s2_mmu *mmu)__tlb_switch_to_host (&cxt); } -void __kvm_tlb_flush_local_vmid (struct kvm_s2_mmu *mmu) +void __kvm_flush_cpu_context (struct kvm_s2_mmu *mmu) {struct tlb_inv_context cxt;
@@ -135,6 +135,7 @@ void __kvm_tlb_flush_local_vmid(struct kvm_s2_mmu *mmu)__tlb_switch_to_guest (mmu, &cxt);__tlbi (vmalle1); + asmvolatile ("ic iallu" );dsb (nsh);isb ();
arch/arm64/kvm/mmu.c +1 -2
@@ -1309,8 +1309,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,* Prevent userspace from creating a memory region outside of the IPA * space addressable by the KVM guest IPA space. */ -if (memslot->base_gfn + memslot->npages >= - (kvm_phys_size (kvm) >>PAGE_SHIFT )) +if ((memslot->base_gfn + memslot->npages) > (kvm_phys_size (kvm) >>PAGE_SHIFT ))return -EFAULT ;mmap_read_lock (current->mm);
arch/arm64/kvm/reset.c +8 -4
@@ -324,10 +324,9 @@ int kvm_set_ipa_limit(void) } kvm_ipa_limit =id_aa64mmfr0_parange_to_phys_shift (parange); -WARN (kvm_ipa_limit <KVM_PHYS_SHIFT , -"KVM IPA Size Limit (%d bits) is smaller than default size\n" , - kvm_ipa_limit); -kvm_info ("IPA Size Limit: %d bits\n" , kvm_ipa_limit); +kvm_info ("IPA Size Limit: %d bits%s\n" , kvm_ipa_limit, + ((kvm_ipa_limit <KVM_PHYS_SHIFT ) ? +" (Reduced IPA size, limited VM/VMM compatibility)" :"" ));return 0 ; }
@@ -356,6 +355,11 @@ int kvm_arm_setup_stage2(struct kvm *kvm, unsigned long type)return -EINVAL ; }else { phys_shift =KVM_PHYS_SHIFT ; +if (phys_shift > kvm_ipa_limit) { +pr_warn_once ("%s using unsupported default IPA limit, upgrade your VMM\n" , + current->comm); +return -EINVAL ; + } } mmfr0 =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 );
arch/arm64/mm/init.c +12 -0
@@ -230,6 +230,18 @@ int pfn_valid(unsigned long pfn)if (!valid_section (__pfn_to_section (pfn)))return 0 ; + +/* +* ZONE_DEVICE memory does not have the memblock entries. +* memblock_is_map_memory() check for ZONE_DEVICE based +* addresses will always fail. Even the normal hotplugged +* memory will never have MEMBLOCK_NOMAP flag set in their +* memblock entries. Skip memblock search for all non early +* memory sections covering all of hotplug memory including +* both normal and ZONE_DEVICE based. +*/ +if (!early_section (__pfn_to_section (pfn))) +return pfn_section_valid (__pfn_to_section (pfn), pfn);#endif return memblock_is_map_memory (addr); }
arch/arm64/mm/mmu.c +3 -2
@@ -40,7 +40,7 @@#define NO_BLOCK_MAPPINGS BIT(0)#define NO_CONT_MAPPINGS BIT(1) -u64 idmap_t0sz =TCR_T0SZ (VA_BITS ); +u64 idmap_t0sz =TCR_T0SZ (VA_BITS_MIN );u64 idmap_ptrs_per_pgd =PTRS_PER_PGD ; u64 __section(".mmuoff.data.write") vabits_actual;
@@ -512,7 +512,8 @@ static void __init map_mem(pgd_t *pgdp)* if MTE is present. Otherwise, it has the same attributes as * PAGE_KERNEL. */ -__map_memblock (pgdp, start, end,PAGE_KERNEL_TAGGED , flags); +__map_memblock (pgdp, start, end,pgprot_tagged (PAGE_KERNEL ), + flags); }/*
arch/mips/crypto/Makefile +2 -2
@@ -12,8 +12,8 @@ AFLAGS_chacha-core.o += -O2 # needed to fill branch delay slots obj-$(CONFIG_CRYPTO_POLY1305_MIPS) += poly1305-mips.o poly1305-mips-y := poly1305-core.o poly1305-glue.o -perlasm-flavour-$(CONFIG_CPU_MIPS32) := o32 -perlasm-flavour-$(CONFIG_CPU_MIPS64) := 64 +perlasm-flavour-$(CONFIG_32BIT) := o32 +perlasm-flavour-$(CONFIG_64BIT) := 64 quiet_cmd_perlasm = PERLASM $@ cmd_perlasm = $(PERL) $(<) $(perlasm-flavour-y) $(@)
arch/mips/include/asm/traps.h +3 -0
@@ -24,6 +24,9 @@ extern void (*board_ebase_setup)(void);extern void (*board_cache_error_setup)(void );extern int register_nmi_notifier (struct notifier_block *nb); +extern void reserve_exception_space (phys_addr_t addr,unsigned long size); + +#define VECTORSPACING 0x100/* for EI/VI mode */ #define nmi_notifier (fn, pri) \ ({ \
arch/mips/kernel/cpu-probe.c +6 -0
@@ -26,6 +26,7 @@#include <asm/elf.h> #include <asm/pgtable-bits.h> #include <asm/spram.h> +#include <asm/traps.h> #include <linux/uaccess.h> #include "fpu-probe.h"
@@ -1619,6 +1620,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) c->cputype =CPU_BMIPS3300 ; __cpu_name[cpu] ="Broadcom BMIPS3300" ;set_elf_platform (cpu,"bmips3300" ); +reserve_exception_space (0x400 ,VECTORSPACING *64 );break ;case PRID_IMP_BMIPS43XX : {int rev = c->processor_id &PRID_REV_MASK ;
@@ -1629,6 +1631,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) __cpu_name[cpu] ="Broadcom BMIPS4380" ;set_elf_platform (cpu,"bmips4380" ); c->options |=MIPS_CPU_RIXI ; +reserve_exception_space (0x400 ,VECTORSPACING *64 ); }else { c->cputype =CPU_BMIPS4350 ; __cpu_name[cpu] ="Broadcom BMIPS4350" ;
@@ -1645,6 +1648,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu) __cpu_name[cpu] ="Broadcom BMIPS5000" ;set_elf_platform (cpu,"bmips5000" ); c->options |=MIPS_CPU_ULRI |MIPS_CPU_RIXI ; +reserve_exception_space (0x1000 ,VECTORSPACING *64 );break ; } }
@@ -2124,6 +2128,8 @@ void cpu_probe(void)if (cpu ==0 ) __ua_limit = ~((1ull << cpu_vmbits) -1 );#endif + +reserve_exception_space (0 ,0x1000 ); }void cpu_report (void )
arch/mips/kernel/cpu-r3k-probe.c +3 -0
@@ -21,6 +21,7 @@#include <asm/fpu.h> #include <asm/mipsregs.h> #include <asm/elf.h> +#include <asm/traps.h> #include "fpu-probe.h"
@@ -158,6 +159,8 @@ void cpu_probe(void)cpu_set_fpu_opts (c); elsecpu_set_nofpu_opts (c ); + +reserve_exception_space (0 ,0x400 ); }void cpu_report (void )
arch/mips/kernel/traps.c +5 -5
@@ -2009,13 +2009,16 @@ void __noreturn nmi_exception_handler(struct pt_regs *regs)nmi_exit (); } -#define VECTORSPACING 0x100/* for EI/VI mode */ -unsigned long ebase;EXPORT_SYMBOL_GPL (ebase);unsigned long exception_handlers[32 ];unsigned long vi_handlers[64 ]; +void reserve_exception_space (phys_addr_t addr,unsigned long size) +{ +memblock_reserve (addr, size); +} +void __init *set_except_vector (int n,void *addr) {unsigned long handler = (unsigned long ) addr;
@@ -2367,10 +2370,7 @@ void __init trap_init(void)if (!cpu_has_mips_r2_r6) { ebase =CAC_BASE ; - ebase_pa =virt_to_phys ((void *)ebase); vec_size =0x400 ; - -memblock_reserve (ebase_pa, vec_size); }else {if (cpu_has_veic || cpu_has_vint) vec_size =0x200 +VECTORSPACING *64 ;
arch/powerpc/include/asm/code-patching.h +1 -1
@@ -73,7 +73,7 @@ void __patch_exception(int exc, unsigned long addr);#endif #define OP_RT_RA_MASK 0xffff0000UL -#define LIS_R2 0x3c020000UL +#define LIS_R2 0x3c400000UL#define ADDIS_R2_R12 0x3c4c0000UL#define ADDI_R2_R2 0x38420000UL
arch/powerpc/include/asm/machdep.h +3 -0
@@ -59,6 +59,9 @@ struct machdep_calls {int (*pcibios_root_bridge_prepare)(struct pci_host_bridge *bridge); +/* finds all the pci_controllers present at boot */ +void (*discover_phbs)(void ); +/* To setup PHBs when using automatic OF platform driver for PCI */ int (*pci_setup_phb)(struct pci_controller *host);
arch/powerpc/include/asm/ptrace.h +5 -2
@@ -70,6 +70,9 @@ struct pt_regs };#endif + +#define STACK_FRAME_WITH_PT_REGS (STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)) +#ifdef __powerpc64__/*
@@ -192,7 +195,7 @@ static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)#define TRAP_FLAGS_MASK 0x11#define TRAP (regs) ((regs)->trap & ~TRAP_FLAGS_MASK)#define FULL_REGS (regs) (((regs)->trap & 1) == 0) -#define SET_FULL_REGS (regs) ((regs)->trap |= 1) +#define SET_FULL_REGS (regs) ((regs)->trap &= ~1)#endif #define CHECK_FULL_REGS (regs) BUG_ON(!FULL_REGS(regs))#define NV_REG_POISON 0xdeadbeefdeadbeefUL
@@ -207,7 +210,7 @@ static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)#define TRAP_FLAGS_MASK 0x1F#define TRAP (regs) ((regs)->trap & ~TRAP_FLAGS_MASK)#define FULL_REGS (regs) (((regs)->trap & 1) == 0) -#define SET_FULL_REGS (regs) ((regs)->trap |= 1) +#define SET_FULL_REGS (regs) ((regs)->trap &= ~1)#define IS_CRITICAL_EXC (regs) (((regs)->trap & 2) != 0)#define IS_MCHECK_EXC (regs) (((regs)->trap & 4) != 0)#define IS_DEBUG_EXC (regs) (((regs)->trap & 8) != 0)
arch/powerpc/include/asm/switch_to.h +10 -0
@@ -71,6 +71,16 @@ static inline void disable_kernel_vsx(void) {msr_check_and_clear (MSR_FP |MSR_VEC |MSR_VSX ); } +#else +static inline void enable_kernel_vsx (void ) +{ +BUILD_BUG (); +} + +static inline void disable_kernel_vsx (void ) +{ +BUILD_BUG (); +}#endif #ifdef CONFIG_SPE
arch/powerpc/kernel/asm-offsets.c +1 -1
@@ -309,7 +309,7 @@ int main(void)/* Interrupt register frame */ DEFINE (INT_FRAME_SIZE ,STACK_INT_FRAME_SIZE ); -DEFINE (SWITCH_FRAME_SIZE ,STACK_FRAME_OVERHEAD +sizeof (struct pt_regs )); +DEFINE (SWITCH_FRAME_SIZE ,STACK_FRAME_WITH_PT_REGS );STACK_PT_REGS_OFFSET (GPR0 , gpr[0 ]);STACK_PT_REGS_OFFSET (GPR1 , gpr[1 ]);STACK_PT_REGS_OFFSET (GPR2 , gpr[2 ]);
arch/powerpc/kernel/exceptions-64s.S +1 -1
@@ -470,7 +470,7 @@ DEFINE_FIXED_SYMBOL(\name\()_common_real) ld r10,PACAKMSR(r13) /* get MSR value for kernel */ /* MSR[RI] is clear iff using SRR regs */ - .if IHSRR == EXC_HV_OR_STD + .if IHSRR_IF_HVMODE BEGIN_FTR_SECTION xori r10,r10,MSR_RI END_FTR_SECTION_IFCLR(CPU_FTR_HVMODE)
arch/powerpc/kernel/head_book3s_32.S +6 -3
@@ -447,11 +447,12 @@ InstructionTLBMiss: cmplw 0,r1,r3 #endif mfspr r2, SPRN_SDR1 - li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC + li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC | _PAGE_USER rlwinm r2, r2, 28, 0xfffff000 #ifdef CONFIG_MODULES bgt- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ #endif 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */
@@ -510,10 +511,11 @@ DataLoadTLBMiss: lis r1, TASK_SIZE@h /* check if kernel address */ cmplw 0,r1,r3 mfspr r2, SPRN_SDR1 - li r1, _PAGE_PRESENT | _PAGE_ACCESSED + li r1, _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER rlwinm r2, r2, 28, 0xfffff000 bgt- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1, _PAGE_PRESENT | _PAGE_ACCESSED addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */
@@ -587,10 +589,11 @@ DataStoreTLBMiss: lis r1, TASK_SIZE@h /* check if kernel address */ cmplw 0,r1,r3 mfspr r2, SPRN_SDR1 - li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED + li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER rlwinm r2, r2, 28, 0xfffff000 bgt- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */
arch/powerpc/kernel/pci-common.c +10 -0
@@ -1699,3 +1699,13 @@ static void fixup_hide_host_resource_fsl(struct pci_dev *dev) }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MOTOROLA ,PCI_ANY_ID , fixup_hide_host_resource_fsl);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_FREESCALE ,PCI_ANY_ID , fixup_hide_host_resource_fsl); + + +static int __init discover_phbs (void ) +{ +if (ppc_md.discover_phbs) + ppc_md.discover_phbs (); + +return 0 ; +} +core_initcall (discover_phbs);
arch/powerpc/kernel/process.c +1 -1
@@ -2176,7 +2176,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack,* See if this is an exception frame. * We look for the "regshere" marker in the current frame. */ -if (validate_sp (sp, tsk,STACK_INT_FRAME_SIZE ) +if (validate_sp (sp, tsk,STACK_FRAME_WITH_PT_REGS ) && stack[STACK_FRAME_MARKER ] ==STACK_FRAME_REGS_MARKER ) {struct pt_regs *regs = (struct pt_regs *) (sp +STACK_FRAME_OVERHEAD );
arch/powerpc/kernel/traps.c +4 -1
@@ -503,8 +503,11 @@ void system_reset_exception(struct pt_regs *regs)die ("Unrecoverable nested System Reset" , regs,SIGABRT );#endif /* Must die if the interrupt is not recoverable */ -if (!(regs->msr &MSR_RI )) +if (!(regs->msr &MSR_RI )) { +/* For the reason explained in die_mce, nmi_exit before die */ +nmi_exit ();die ("Unrecoverable System Reset" , regs,SIGABRT ); + }if (saved_hsrrs) {mtspr (SPRN_HSRR0 , hsrr0);
arch/powerpc/lib/sstep.c +2 -2
@@ -904,7 +904,7 @@ static nokprobe_inline int do_vsx_load(struct instruction_op *op,if (!address_ok (regs, ea, size) ||copy_mem_in (mem, ea, size, regs))return -EFAULT ; - nr_vsx_regs = size /sizeof (__vector128); + nr_vsx_regs =max (1ul , size /sizeof (__vector128));emulate_vsx_load (op, buf, mem, cross_endian);preempt_disable ();if (reg <32 ) {
@@ -951,7 +951,7 @@ static nokprobe_inline int do_vsx_store(struct instruction_op *op,if (!address_ok (regs, ea, size))return -EFAULT ; - nr_vsx_regs = size /sizeof (__vector128); + nr_vsx_regs =max (1ul , size /sizeof (__vector128));preempt_disable ();if (reg <32 ) {/* FP regs + extensions */
arch/powerpc/perf/core-book3s.c +17 -6
@@ -212,7 +212,7 @@ static inline void perf_get_data_addr(struct perf_event *event, struct pt_regs *if (!(mmcra &MMCRA_SAMPLE_ENABLE ) || sdar_valid) *addrp =mfspr (SPRN_SDAR ); -if (is_kernel_addr (mfspr (SPRN_SDAR )) &&perf_allow_kernel (&event->attr) !=0 ) +if (is_kernel_addr (mfspr (SPRN_SDAR )) && event->attr.exclude_kernel) *addrp =0 ; }
@@ -506,7 +506,7 @@ static void power_pmu_bhrb_read(struct perf_event *event, struct cpu_hw_events ** addresses, hence include a check before filtering code */ if (!(ppmu->flags &PPMU_ARCH_31 ) && -is_kernel_addr (addr) &&perf_allow_kernel (&event->attr) !=0 ) +is_kernel_addr (addr) && event->attr.exclude_kernel)continue ;/* Branches are read most recent first (ie. mfbhrb 0 is
@@ -2149,7 +2149,17 @@ static void record_and_restart(struct perf_event *event, unsigned long val, left += period;if (left <=0 ) left = period; - record =siar_valid (regs); + +/* +* If address is not requested in the sample via +* PERF_SAMPLE_IP, just record that sample irrespective +* of SIAR valid check. +*/ +if (event->attr.sample_type &PERF_SAMPLE_IP ) + record =siar_valid (regs); +else + record =1 ; + event->hw.last_period = event->hw.sample_period; }if (left <0x80000000LL )
@@ -2167,9 +2177,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,* MMCR2. Check attr.exclude_kernel and address to drop the sample in * these cases. */ -if (event->attr.exclude_kernel && record) -if (is_kernel_addr (mfspr (SPRN_SIAR ))) - record =0 ; +if (event->attr.exclude_kernel && + (event->attr.sample_type &PERF_SAMPLE_IP ) && +is_kernel_addr (mfspr (SPRN_SIAR ))) + record =0 ;/* * Finally record data if requested.
arch/powerpc/platforms/pseries/msi.c +23 -2
@@ -4,6 +4,7 @@* Copyright 2006-2007 Michael Ellerman, IBM Corp. */ +#include <linux/crash_dump.h> #include <linux/device.h> #include <linux/irq.h> #include <linux/msi.h>
@@ -458,8 +459,28 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)return hwirq; } - virq =irq_create_mapping_affinity (NULL , hwirq, - entry->affinity); +/* +* Depending on the number of online CPUs in the original +* kernel, it is likely for CPU #0 to be offline in a kdump +* kernel. The associated IRQs in the affinity mappings +* provided by irq_create_affinity_masks() are thus not +* started by irq_startup(), as per-design for managed IRQs. +* This can be a problem with multi-queue block devices driven +* by blk-mq : such a non-started IRQ is very likely paired +* with the single queue enforced by blk-mq during kdump (see +* blk_mq_alloc_tag_set()). This causes the device to remain +* silent and likely hangs the guest at some point. +* +* We don't really care for fine-grained affinity when doing +* kdump actually : simply ignore the pre-computed affinity +* masks in this case and let the default mask with all CPUs +* be used when creating the IRQ mappings. +*/ +if (is_kdump_kernel ()) + virq =irq_create_mapping (NULL , hwirq); +else + virq =irq_create_mapping_affinity (NULL , hwirq, + entry->affinity);if (!virq) {pr_debug ("rtas_msi: Failed mapping hwirq %d\n" , hwirq);
arch/s390/kernel/smp.c +1 -1
@@ -770,7 +770,7 @@ static int smp_add_core(struct sclp_core_entry *core, cpumask_t *avail,static int __smp_rescan_cpus (struct sclp_core_info *info,bool early) {struct sclp_core_entry *core; -cpumask_t avail; +static cpumask_t avail;bool configured;u16 core_id;int nr, i;
arch/sparc/include/asm/mman.h +29 -25
64 lines not on this page · raw message
arch/sparc/mm/init_32.c +3 -0
@@ -197,6 +197,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) size =memblock_phys_mem_size () -memblock_reserved_size (); *pages_avail = (size >>PAGE_SHIFT ) - high_pages; +/* Only allow low memory to be allocated via memblock allocation */ +memblock_set_current_limit (max_low_pfn <<PAGE_SHIFT ); +return max_pfn; }
arch/x86/entry/common.c +2 -1
@@ -128,7 +128,8 @@ static noinstr bool __do_fast_syscall_32(struct pt_regs *regs) regs->ax = -EFAULT ;instrumentation_end (); -syscall_exit_to_user_mode (regs); +local_irq_disable (); +irqentry_exit_to_user_mode (regs);return false; }
arch/x86/entry/entry_64_compat.S +2 -0
@@ -210,6 +210,8 @@ SYM_CODE_START(entry_SYSCALL_compat) /* Switch to the kernel stack */ movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp +SYM_INNER_LABEL(entry_SYSCALL_compat_safe_stack, SYM_L_GLOBAL) + /* Construct struct pt_regs on stack */ pushq $__USER32_DS /* pt_regs->ss */ pushq %r8 /* pt_regs->sp */
arch/x86/events/intel/core.c +4 -1
@@ -3578,8 +3578,10 @@ static int intel_pmu_hw_config(struct perf_event *event)if (!(event->attr.freq || (event->attr.wakeup_events && !event->attr.watermark))) { event->hw.flags |=PERF_X86_EVENT_AUTO_RELOAD ;if (!(event->attr.sample_type & - ~intel_pmu_large_pebs_flags (event))) + ~intel_pmu_large_pebs_flags (event))) { event->hw.flags |=PERF_X86_EVENT_LARGE_PEBS ; + event->attach_state |=PERF_ATTACH_SCHED_CB ; + } }if (x86_pmu.pebs_aliases) x86_pmu.pebs_aliases (event);
@@ -3592,6 +3594,7 @@ static int intel_pmu_hw_config(struct perf_event *event) ret =intel_pmu_setup_lbr_filter (event);if (ret)return ret; + event->attach_state |=PERF_ATTACH_SCHED_CB ;/* * BTS is set up earlier in this path, so don't account twice
arch/x86/include/asm/insn-eval.h +2 -0
@@ -23,6 +23,8 @@ unsigned long insn_get_seg_base(struct pt_regs *regs, int seg_reg_idx);int insn_get_code_seg_params (struct pt_regs *regs);int insn_fetch_from_user (struct pt_regs *regs,unsigned char buf[MAX_INSN_SIZE ]); +int insn_fetch_from_user_inatomic (struct pt_regs *regs, +unsigned char buf[MAX_INSN_SIZE ]);bool insn_decode (struct insn *insn,struct pt_regs *regs,unsigned char buf[MAX_INSN_SIZE ],int buf_size);
arch/x86/include/asm/proto.h +1 -0
@@ -25,6 +25,7 @@ void __end_SYSENTER_singlestep_region(void);void entry_SYSENTER_compat (void );void __end_entry_SYSENTER_compat (void );void entry_SYSCALL_compat (void ); +void entry_SYSCALL_compat_safe_stack (void );void entry_INT80_compat (void );#ifdef CONFIG_XEN_PV void xen_entry_INT80_compat (void );
arch/x86/include/asm/ptrace.h +15 -0
@@ -94,6 +94,8 @@ struct pt_regs {#include <asm/paravirt_types.h> #endif +#include <asm/proto.h> +struct cpuinfo_x86 ;struct task_struct ;
@@ -175,6 +177,19 @@ static inline bool any_64bit_mode(struct pt_regs *regs)#ifdef CONFIG_X86_64 #define current_user_stack_pointer () current_pt_regs()->sp#define compat_user_stack_pointer () current_pt_regs()->sp + +static inline bool ip_within_syscall_gap (struct pt_regs *regs) +{ +bool ret = (regs->ip >= (unsigned long )entry_SYSCALL_64 && + regs->ip < (unsigned long )entry_SYSCALL_64_safe_stack); + +#ifdef CONFIG_IA32_EMULATION + ret = ret || (regs->ip >= (unsigned long )entry_SYSCALL_compat && + regs->ip < (unsigned long )entry_SYSCALL_compat_safe_stack); +#endif + +return ret; +}#endif static inline unsigned long kernel_stack_pointer (struct pt_regs *regs)
arch/x86/kernel/kvmclock.c +9 -10
@@ -268,21 +268,20 @@ static void __init kvmclock_init_mem(void)static int __init kvm_setup_vsyscall_timeinfo (void ) { -#ifdef CONFIG_X86_64 -u8 flags; +kvmclock_init_mem (); -if (!per_cpu (hv_clock_per_cpu,0 ) || !kvmclock_vsyscall) -return 0 ; +#ifdef CONFIG_X86_64 +if (per_cpu (hv_clock_per_cpu,0 ) && kvmclock_vsyscall) { +u8 flags; - flags =pvclock_read_flags (&hv_clock_boot[0 ].pvti); -if (!(flags &PVCLOCK_TSC_STABLE_BIT )) -return 0 ; + flags =pvclock_read_flags (&hv_clock_boot[0 ].pvti); +if (!(flags &PVCLOCK_TSC_STABLE_BIT )) +return 0 ; - kvm_clock.vdso_clock_mode =VDSO_CLOCKMODE_PVCLOCK ; + kvm_clock.vdso_clock_mode =VDSO_CLOCKMODE_PVCLOCK ; + }#endif -kvmclock_init_mem (); -return 0 ; }early_initcall (kvm_setup_vsyscall_timeinfo);
arch/x86/kernel/sev-es.c +17 -5
@@ -121,8 +121,18 @@ static void __init setup_vc_stacks(int cpu)cea_set_pte ((void *)vaddr, pa,PAGE_KERNEL ); } -static __always_inline bool on_vc_stack(unsigned long sp) +static __always_inline bool on_vc_stack(struct pt_regs *regs) { +unsigned long sp = regs->sp; + +/* User-mode RSP is not trusted */ +if (user_mode (regs)) +return false; + +/* SYSCALL gap still has user-mode RSP */ +if (ip_within_syscall_gap (regs)) +return false; +return ((sp >=__this_cpu_ist_bottom_va (VC )) && (sp <__this_cpu_ist_top_va (VC ))); }
@@ -144,7 +154,7 @@ void noinstr __sev_es_ist_enter(struct pt_regs *regs) old_ist =__this_cpu_read (cpu_tss_rw.x86_tss.ist[IST_INDEX_VC ]);/* Make room on the IST stack */ -if (on_vc_stack (regs->sp)) +if (on_vc_stack (regs)) new_ist =ALIGN_DOWN (regs->sp,8 ) -sizeof (old_ist);else new_ist = old_ist -sizeof (old_ist);
@@ -248,7 +258,7 @@ static enum es_result vc_decode_insn(struct es_em_ctxt *ctxt)int res;if (user_mode (ctxt->regs)) { - res =insn_fetch_from_user (ctxt->regs, buffer); + res =insn_fetch_from_user_inatomic (ctxt->regs, buffer);if (!res) { ctxt->fi.vector =X86_TRAP_PF ; ctxt->fi.error_code =X86_PF_INSTR |X86_PF_USER ;
@@ -1248,13 +1258,12 @@ static __always_inline bool on_vc_fallback_stack(struct pt_regs *regs)DEFINE_IDTENTRY_VC_SAFE_STACK (exc_vmm_communication) {struct sev_es_runtime_data *data =this_cpu_read (runtime_data); +irqentry_state_t irq_state;struct ghcb_state state;struct es_em_ctxt ctxt;enum es_result result;struct ghcb *ghcb; -lockdep_assert_irqs_disabled (); -/* * Handle #DB before calling into !noinstr code to avoid recursive #DB. */
@@ -1263,6 +1272,8 @@ DEFINE_IDTENTRY_VC_SAFE_STACK(exc_vmm_communication)return ; } + irq_state =irqentry_nmi_enter (regs); +lockdep_assert_irqs_disabled ();instrumentation_begin ();/*
@@ -1325,6 +1336,7 @@ DEFINE_IDTENTRY_VC_SAFE_STACK(exc_vmm_communication) out:instrumentation_end (); +irqentry_nmi_exit (regs, irq_state);return ;
arch/x86/kernel/traps.c +1 -2
@@ -694,8 +694,7 @@ asmlinkage __visible noinstr struct pt_regs *vc_switch_off_ist(struct pt_regs *r* In the SYSCALL entry path the RSP value comes from user-space - don't * trust it and switch to the current kernel stack */ -if (regs->ip >= (unsigned long )entry_SYSCALL_64 && - regs->ip < (unsigned long )entry_SYSCALL_64_safe_stack) { +if (ip_within_syscall_gap (regs)) { sp =this_cpu_read (cpu_current_top_of_stack); goto sync; }
arch/x86/kernel/unwind_orc.c +6 -6
@@ -367,8 +367,8 @@ static bool deref_stack_regs(struct unwind_state *state, unsigned long addr,if (!stack_access_ok (state, addr,sizeof (struct pt_regs )))return false; - *ip = regs->ip; - *sp = regs->sp; + *ip =READ_ONCE_NOCHECK (regs->ip); + *sp =READ_ONCE_NOCHECK (regs->sp);return true; }
@@ -380,8 +380,8 @@ static bool deref_stack_iret_regs(struct unwind_state *state, unsigned long addrif (!stack_access_ok (state, addr,IRET_FRAME_SIZE ))return false; - *ip = regs->ip; - *sp = regs->sp; + *ip =READ_ONCE_NOCHECK (regs->ip); + *sp =READ_ONCE_NOCHECK (regs->sp);return true; }
@@ -402,12 +402,12 @@ static bool get_reg(struct unwind_state *state, unsigned int reg_off,return false;if (state->full_regs) { - *val = ((unsigned long *)state->regs)[reg]; + *val =READ_ONCE_NOCHECK (((unsigned long *)state->regs)[reg]);return true; }if (state->prev_regs) { - *val = ((unsigned long *)state->prev_regs)[reg]; + *val =READ_ONCE_NOCHECK (((unsigned long *)state->prev_regs)[reg]);return true; }
arch/x86/kvm/lapic.c +10 -1
@@ -1641,7 +1641,16 @@ static void apic_timer_expired(struct kvm_lapic *apic, bool from_timer_fn) }if (kvm_use_posted_timer_interrupt (apic->vcpu)) { -kvm_wait_lapic_expire (vcpu); +/* +* Ensure the guest's timer has truly expired before posting an +* interrupt. Open code the relevant checks to avoid querying +* lapic_timer_int_injected(), which will be false since the +* interrupt isn't yet injected. Waiting until after injecting +* is not an option since that won't help a posted interrupt. +*/ +if (vcpu->arch.apic->lapic_timer.expired_tscdeadline && + vcpu->arch.apic->lapic_timer.timer_advance_ns) +__kvm_wait_lapic_expire (vcpu);kvm_apic_inject_pending_timer_irqs (apic);return ; }
arch/x86/lib/insn-eval.c +52 -14
82 lines not on this page · raw message
block/blk-zoned.c +36 -2
@@ -318,6 +318,22 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,return 0 ; } +static int blkdev_truncate_zone_range (struct block_device *bdev,fmode_t mode, +const struct blk_zone_range *zrange) +{ +loff_t start, end; + +if (zrange->sector + zrange->nr_sectors <= zrange->sector || + zrange->sector + zrange->nr_sectors >get_capacity (bdev->bd_disk)) +/* Out of range */ +return -EINVAL ; + + start = zrange->sector <<SECTOR_SHIFT ; + end = ((zrange->sector + zrange->nr_sectors) <<SECTOR_SHIFT ) -1 ; + +return truncate_bdev_range (bdev, mode, start, end); +} +/* * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing. * Called from blkdev_ioctl.
@@ -329,6 +345,7 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,struct request_queue *q;struct blk_zone_range zrange;enum req_opf op; +int ret;if (!argp)return -EINVAL ;
@@ -352,6 +369,11 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,switch (cmd) {case BLKRESETZONE : op =REQ_OP_ZONE_RESET ; + +/* Invalidate the page cache, including dirty pages. */ + ret =blkdev_truncate_zone_range (bdev, mode, &zrange); +if (ret) +return ret;break ;case BLKOPENZONE : op =REQ_OP_ZONE_OPEN ;
@@ -366,8 +388,20 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,return -ENOTTY ; } -return blkdev_zone_mgmt (bdev, op, zrange.sector, zrange.nr_sectors, -GFP_KERNEL ); + ret =blkdev_zone_mgmt (bdev, op, zrange.sector, zrange.nr_sectors, +GFP_KERNEL ); + +/* +* Invalidate the page cache again for zone reset: writes can only be +* direct for zoned devices so concurrent writes would not add any page +* to the page cache after/during reset. The page cache may be filled +* again due to concurrent reads though and dropping the pages for +* these is fine. +*/ +if (!ret && cmd ==BLKRESETZONE ) + ret =blkdev_truncate_zone_range (bdev, mode, &zrange); + +return ret; } static inline unsigned long *blk_alloc_zone_bitmap(int node,
crypto/Kconfig +1 -1
@@ -772,7 +772,7 @@ config CRYPTO_POLY1305_X86_64 config CRYPTO_POLY1305_MIPS tristate "Poly1305 authenticator algorithm (MIPS optimized)" - depends on CPU_MIPS32 || (CPU_MIPS64 && 64BIT) + depends on MIPS select CRYPTO_ARCH_HAVE_LIB_POLY1305 config CRYPTO_MD4
drivers/base/memory.c +9 -16
@@ -290,20 +290,20 @@ static ssize_t state_store(struct device *dev, struct device_attribute *attr, }/* -* phys_device is a bad name for this. What I really want -* is a way to differentiate between memory ranges that -* are part of physical devices that constitute -* a complete removable unit or fru. -* i.e. do these ranges belong to the same physical device, -* s.t. if I offline all of these sections I can then -* remove the physical device? +* Legacy interface that we cannot remove: s390x exposes the storage increment +* covered by a memory block, allowing for identifying which memory blocks +* comprise a storage increment. Since a memory block spans complete +* storage increments nowadays, this interface is basically unused. Other +* archs never exposed != 0. */ static ssize_t phys_device_show (struct device *dev,struct device_attribute *attr,char *buf) {struct memory_block *mem =to_memory_block (dev); +unsigned long start_pfn =section_nr_to_pfn (mem->start_section_nr); -return sysfs_emit (buf,"%d\n" , mem->phys_device); +return sysfs_emit (buf,"%d\n" , +arch_get_memory_phys_device (start_pfn)); }#ifdef CONFIG_MEMORY_HOTREMOVE
@@ -488,11 +488,7 @@ static DEVICE_ATTR_WO(soft_offline_page);static DEVICE_ATTR_WO (hard_offline_page);#endif -/* -* Note that phys_device is optional. It is here to allow for -* differentiation between which *physical* devices each -* section belongs to... -*/ +/* See phys_device_show(). */ int __weak arch_get_memory_phys_device (unsigned long start_pfn) {return 0 ;
@@ -574,7 +570,6 @@ int register_memory(struct memory_block *memory)static int init_memory_block (unsigned long block_id,unsigned long state) {struct memory_block *mem; -unsigned long start_pfn;int ret =0 ; mem =find_memory_block_by_id (block_id);
@@ -588,8 +583,6 @@ static int init_memory_block(unsigned long block_id, unsigned long state) mem->start_section_nr = block_id * sections_per_block; mem->state = state; - start_pfn =section_nr_to_pfn (mem->start_section_nr); - mem->phys_device =arch_get_memory_phys_device (start_pfn); mem->nid =NUMA_NO_NODE ; ret =register_memory (mem);
drivers/base/swnode.c +3 -0
@@ -786,6 +786,9 @@ int software_node_register(const struct software_node *node)if (software_node_to_swnode (node))return -EEXIST ; +if (node->parent && !parent) +return -EINVAL ; +return PTR_ERR_OR_ZERO (swnode_register (node, parent,0 )); }EXPORT_SYMBOL_GPL (software_node_register);
drivers/base/test/Makefile +1 -0
@@ -2,3 +2,4 @@ obj-$(CONFIG_TEST_ASYNC_DRIVER_PROBE) += test_async_driver_probe.o obj-$(CONFIG_KUNIT_DRIVER_PE_TEST) += property-entry-test.o +CFLAGS_REMOVE_property-entry-test.o += -fplugin-arg-structleak_plugin-byref -fplugin-arg-structleak_plugin-byref-all
drivers/block/rsxx/core.c +1 -0
@@ -871,6 +871,7 @@ static int rsxx_pci_probe(struct pci_dev *dev, card->event_wq =create_singlethread_workqueue (DRIVER_NAME "_event" );if (!card->event_wq) {dev_err (CARD_TO_DEV (card),"Failed card event setup.\n" ); + st = -ENOMEM ; goto failed_event_handler; }
drivers/block/zram/zram_drv.c +11 -6
@@ -628,7 +628,7 @@ static ssize_t writeback_store(struct device *dev,struct bio_vec bio_vec;struct page *page;ssize_t ret = len; -int mode; +int mode, err;unsigned long blk_idx =0 ;if (sysfs_streq (buf,"idle" ))
@@ -639,8 +639,8 @@ static ssize_t writeback_store(struct device *dev,if (strncmp (buf,PAGE_WB_SIG ,sizeof (PAGE_WB_SIG ) -1 ))return -EINVAL ; - ret =kstrtol (buf +sizeof (PAGE_WB_SIG ) -1 ,10 , &index); -if (ret || index >= nr_pages) +if (kstrtol (buf +sizeof (PAGE_WB_SIG ) -1 ,10 , &index) || + index >= nr_pages)return -EINVAL ; nr_pages =1 ;
@@ -664,7 +664,7 @@ static ssize_t writeback_store(struct device *dev, goto release_init_lock; } -while (nr_pages--) { +for (; nr_pages !=0 ; index++, nr_pages--) {struct bio_vec bvec; bvec.bv_page = page;
@@ -729,12 +729,17 @@ static ssize_t writeback_store(struct device *dev,* XXX: A single page IO would be inefficient for write * but it would be not bad as starter. */ - ret =submit_bio_wait (&bio); -if (ret) { + err =submit_bio_wait (&bio); +if (err) {zram_slot_lock (zram, index);zram_clear_flag (zram, index,ZRAM_UNDER_WB );zram_clear_flag (zram, index,ZRAM_IDLE );zram_slot_unlock (zram, index); +/* +* Return last IO error unless every IO were +* not suceeded. +*/ + ret = err;continue ; }
drivers/clk/qcom/gdsc.c +8 -2
@@ -183,7 +183,10 @@ static inline int gdsc_assert_reset(struct gdsc *sc)static inline void gdsc_force_mem_on (struct gdsc *sc) {int i; -u32 mask =RETAIN_MEM |RETAIN_PERIPH ; +u32 mask =RETAIN_MEM ; + +if (!(sc->flags &NO_RET_PERIPH )) + mask |=RETAIN_PERIPH ;for (i =0 ; i < sc->cxc_count; i++)regmap_update_bits (sc->regmap, sc->cxcs[i], mask, mask);
@@ -192,7 +195,10 @@ static inline void gdsc_force_mem_on(struct gdsc *sc)static inline void gdsc_clear_mem_on (struct gdsc *sc) {int i; -u32 mask =RETAIN_MEM |RETAIN_PERIPH ; +u32 mask =RETAIN_MEM ; + +if (!(sc->flags &NO_RET_PERIPH )) + mask |=RETAIN_PERIPH ;for (i =0 ; i < sc->cxc_count; i++)regmap_update_bits (sc->regmap, sc->cxcs[i], mask,0 );
drivers/clk/qcom/gdsc.h +2 -1
@@ -42,7 +42,7 @@ struct gdsc {#define PWRSTS_ON BIT(2)#define PWRSTS_OFF_ON (PWRSTS_OFF | PWRSTS_ON)#define PWRSTS_RET_ON (PWRSTS_RET | PWRSTS_ON) -const u8 flags; +const u16 flags;#define VOTABLE BIT(0)#define CLAMP_IO BIT(1)#define HW_CTRL BIT(2)
@@ -51,6 +51,7 @@ struct gdsc {#define POLL_CFG_GDSCR BIT(5)#define ALWAYS_ON BIT(6)#define RETAIN_FF_ENABLE BIT(7) +#define NO_RET_PERIPH BIT(8)struct reset_controller_dev *rcdev;unsigned int *resets;unsigned int reset_count;
drivers/clk/qcom/gpucc-msm8998.c +6 -2
@@ -253,12 +253,16 @@ static struct gdsc gpu_cx_gdsc = {static struct gdsc gpu_gx_gdsc = { .gdscr =0x1094 , .clamp_io_ctrl =0x130 , + .resets = (unsigned int []){GPU_GX_BCR }, + .reset_count =1 , + .cxcs = (unsigned int []){0x1098 }, + .cxc_count =1 , .pd = { .name ="gpu_gx" , }, .parent = &gpu_cx_gdsc.pd, - .pwrsts =PWRSTS_OFF_ON , - .flags =CLAMP_IO |AON_RESET , + .pwrsts =PWRSTS_OFF_ON |PWRSTS_RET , + .flags =CLAMP_IO |SW_RESET |AON_RESET |NO_RET_PERIPH , };static struct clk_regmap *gpucc_msm8998_clocks[] = {
drivers/cpufreq/qcom-cpufreq-hw.c +3 -3
@@ -317,9 +317,9 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy) } base =ioremap (res->start,resource_size (res)); -if (IS_ERR (base)) { +if (!base) {dev_err (dev,"failed to map resource %pR\n" , res); - ret =PTR_ERR (base); + ret = -ENOMEM ; goto release_region; }
@@ -368,7 +368,7 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy) error:kfree (data); unmap_base: -iounmap (data->base); +iounmap (base); release_region:release_mem_region (res->start,resource_size (res));return ret;
drivers/firmware/efi/libstub/efi-stub.c +16 -0
@@ -96,6 +96,18 @@ static void install_memreserve_table(void)efi_err ("Failed to install memreserve config table!\n" ); } +static u32 get_supported_rt_services (void ) +{ +const efi_rt_properties_table_t *rt_prop_table; +u32 supported =EFI_RT_SUPPORTED_ALL ; + + rt_prop_table =get_efi_config_table (EFI_RT_PROPERTIES_TABLE_GUID ); +if (rt_prop_table) + supported &= rt_prop_table->runtime_services_supported; + +return supported; +} +/* * EFI entry point for the arm/arm64 EFI stubs. This is the entrypoint * that is described in the PE/COFF header. Most of the code is the same
@@ -250,6 +262,10 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, (prop_tbl->memory_protection_attribute &EFI_PROPERTIES_RUNTIME_MEMORY_PROTECTION_NON_EXECUTABLE_PE_DATA ); +/* force efi_novamap if SetVirtualAddressMap() is unsupported */ + efi_novamap |= !(get_supported_rt_services () & +EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP ); +/* hibernation expects the runtime regions to stay in the same place */ if (!IS_ENABLED (CONFIG_HIBERNATION ) && !efi_nokaslr && !flat_va_mapping) {/*
drivers/gpio/gpio-pca953x.c +23 -55
90 lines not on this page · raw message
drivers/gpio/gpiolib-acpi.c +14 -5
@@ -677,6 +677,7 @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)if (!lookup->desc) {const struct acpi_resource_gpio *agpio = &ares->data.gpio;bool gpioint = agpio->connection_type ==ACPI_RESOURCE_GPIO_TYPE_INT ; +struct gpio_desc *desc;u16 pin_index;if (lookup->info.quirks &ACPI_GPIO_QUIRK_ONLY_GPIOIO && gpioint)
@@ -689,8 +690,12 @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)if (pin_index >= agpio->pin_table_length)return 1 ; - lookup->desc =acpi_get_gpiod (agpio->resource_source.string_ptr, +if (lookup->info.quirks &ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER ) + desc =gpio_to_desc (agpio->pin_table[pin_index]); +else + desc =acpi_get_gpiod (agpio->resource_source.string_ptr, agpio->pin_table[pin_index]); + lookup->desc = desc; lookup->info.pin_config = agpio->pin_config; lookup->info.debounce = agpio->debounce_timeout; lookup->info.gpioint = gpioint;
@@ -940,8 +945,9 @@ struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode, }/** -* acpi_dev_gpio_irq_get() - Find GpioInt and translate it to Linux IRQ number +* acpi_dev_gpio_irq_get_by() - Find GpioInt and translate it to Linux IRQ number * @adev: pointer to a ACPI device to get IRQ from +* @name: optional name of GpioInt resource * @index: index of GpioInt resource (starting from %0) * * If the device has one or more GpioInt resources, this function can be
@@ -951,9 +957,12 @@ struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,* The function is idempotent, though each time it runs it will configure GPIO * pin direction according to the flags in GpioInt resource. * +* The function takes optional @name parameter. If the resource has a property +* name, then only those will be taken into account. +* * Return: Linux IRQ number (> %0) on success, negative errno on failure. */ -int acpi_dev_gpio_irq_get (struct acpi_device *adev,int index) +int acpi_dev_gpio_irq_get_by (struct acpi_device *adev,const char *name,int index) {int idx, i;unsigned int irq_flags;
@@ -963,7 +972,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)struct acpi_gpio_info info;struct gpio_desc *desc; - desc =acpi_get_gpiod_by_index (adev,NULL , i, &info); + desc =acpi_get_gpiod_by_index (adev, name, i, &info);/* Ignore -EPROBE_DEFER, it only matters if idx matches */ if (IS_ERR (desc) &&PTR_ERR (desc) != -EPROBE_DEFER )
@@ -1008,7 +1017,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) }return -ENOENT ; } -EXPORT_SYMBOL_GPL (acpi_dev_gpio_irq_get); +EXPORT_SYMBOL_GPL (acpi_dev_gpio_irq_get_by); static acpi_status acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
drivers/gpio/gpiolib.c +4 -0
@@ -473,8 +473,12 @@ EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);static void gpiodevice_release (struct device *dev) {struct gpio_device *gdev =dev_get_drvdata (dev); +unsigned long flags; +spin_lock_irqsave (&gpio_lock, flags);list_del (&gdev->list); +spin_unlock_irqrestore (&gpio_lock, flags); +ida_free (&gpio_ida, gdev->id);kfree_const (gdev->label);kfree (gdev->descs);
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
@@ -179,6 +179,7 @@ extern uint amdgpu_smu_memory_pool_size;extern uint amdgpu_dc_feature_mask;extern uint amdgpu_dc_debug_mask;extern uint amdgpu_dm_abm_level; +extern int amdgpu_backlight;extern struct amdgpu_mgpu_info mgpu_info;extern int amdgpu_ras_enable;extern uint amdgpu_ras_mask;
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +1 -1
@@ -903,7 +903,7 @@ void amdgpu_acpi_fini(struct amdgpu_device *adev)*/ bool amdgpu_acpi_is_s0ix_supported (struct amdgpu_device *adev) { -#if defined(CONFIG_AMD_PMC ) +#if defined(CONFIG_AMD_PMC ) || defined(CONFIG_AMD_PMC_MODULE )if (acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 ) {if (adev->flags &AMD_IS_APU )return true;
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +4 -0
@@ -777,6 +777,10 @@ uint amdgpu_dm_abm_level;MODULE_PARM_DESC (abmlevel,"ABM level (0 = off (default), 1-4 = backlight reduction level) " );module_param_named (abmlevel, amdgpu_dm_abm_level, uint,0444 ); +int amdgpu_backlight =-1 ; +MODULE_PARM_DESC (backlight,"Backlight control (0 = pwm, 1 = aux, -1 auto (default))" ); +module_param_named (backlight, amdgpu_backlight, bint,0444 ); +/** * DOC: tmz (int) * Trusted Memory Zone (TMZ) is a method to protect data being written
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +29 -20
74 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/core/dc_link.c +0 -1
@@ -2571,7 +2571,6 @@ bool dc_link_set_backlight_level(const struct dc_link *link,if (pipe_ctx->plane_state ==NULL ) frame_ramp =0 ; }else { -ASSERT (false);return false; }
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +1 -5
@@ -1062,8 +1062,6 @@ static void patch_bounding_box(struct dc *dc, struct _vcs_dpi_soc_bounding_box_s {int i; -DC_FP_START (); -if (dc->bb_overrides.sr_exit_time_ns) {for (i =0 ; i <WM_SET_COUNT ; i++) { dc->clk_mgr->bw_params->wm_table.entries[i].sr_exit_time_us =
@@ -1088,8 +1086,6 @@ static void patch_bounding_box(struct dc *dc, struct _vcs_dpi_soc_bounding_box_s dc->bb_overrides.dram_clock_change_latency_ns /1000.0 ; } } - -DC_FP_END (); } void dcn21_calculate_wm(
@@ -1339,7 +1335,7 @@ static noinline bool dcn21_validate_bandwidth_fp(struct dc *dc,int vlevel =0 ;int pipe_split_from[MAX_PIPES ];int pipe_cnt =0 ; -display_e2e_pipe_params_st *pipes =kzalloc (dc->res_pool->pipe_count *sizeof (display_e2e_pipe_params_st),GFP_KERNEL ); +display_e2e_pipe_params_st *pipes =kzalloc (dc->res_pool->pipe_count *sizeof (display_e2e_pipe_params_st),GFP_ATOMIC );DC_LOGGER_INIT (dc->ctx->logger);BW_VAL_TRACE_COUNT ();
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +4 -4
@@ -5216,10 +5216,10 @@ static int smu7_set_watermarks_for_clocks_ranges(struct pp_hwmgr *hwmgr,for (j =0 ; j < dep_sclk_table->count; j++) { valid_entry = false;for (k =0 ; k < watermarks->num_wm_sets; k++) { -if (dep_sclk_table->entries[i].clk /10 >= watermarks->wm_clk_ranges[k].wm_min_eng_clk_in_khz && - dep_sclk_table->entries[i].clk /10 < watermarks->wm_clk_ranges[k].wm_max_eng_clk_in_khz && - dep_mclk_table->entries[i].clk /10 >= watermarks->wm_clk_ranges[k].wm_min_mem_clk_in_khz && - dep_mclk_table->entries[i].clk /10 < watermarks->wm_clk_ranges[k].wm_max_mem_clk_in_khz) { +if (dep_sclk_table->entries[i].clk >= watermarks->wm_clk_ranges[k].wm_min_eng_clk_in_khz /10 && + dep_sclk_table->entries[i].clk < watermarks->wm_clk_ranges[k].wm_max_eng_clk_in_khz /10 && + dep_mclk_table->entries[i].clk >= watermarks->wm_clk_ranges[k].wm_min_mem_clk_in_khz /10 && + dep_mclk_table->entries[i].clk < watermarks->wm_clk_ranges[k].wm_max_mem_clk_in_khz /10 ) { valid_entry = true; table->DisplayWatermark[i][j] = watermarks->wm_clk_ranges[k].wm_set_id;break ;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +48 -0
66 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +66 -0
78 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +27 -21
73 lines not on this page · raw message
drivers/gpu/drm/drm_fb_helper.c +1 -1
@@ -2043,7 +2043,7 @@ static void drm_fbdev_cleanup(struct drm_fb_helper *fb_helper)if (shadow)vfree (shadow); -else +else if (fb_helper->buffer)drm_client_buffer_vunmap (fb_helper->buffer);drm_client_framebuffer_delete (fb_helper->buffer);
drivers/gpu/drm/drm_gem_shmem_helper.c +22 -10
@@ -357,13 +357,14 @@ static void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem,if (--shmem->vmap_use_count >0 )return ; -if (obj->import_attach) +if (obj->import_attach) {dma_buf_vunmap (obj->import_attach->dmabuf, map); -else + }else {vunmap (shmem->vaddr); +drm_gem_shmem_put_pages (shmem); + } shmem->vaddr =NULL ; -drm_gem_shmem_put_pages (shmem); }/*
@@ -525,14 +526,28 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf)struct drm_gem_object *obj = vma->vm_private_data;struct drm_gem_shmem_object *shmem =to_drm_gem_shmem_obj (obj);loff_t num_pages = obj->size >>PAGE_SHIFT ; +vm_fault_t ret;struct page *page; +pgoff_t page_offset; -if (vmf->pgoff >= num_pages ||WARN_ON_ONCE (!shmem->pages)) -return VM_FAULT_SIGBUS ; +/* We don't use vmf->pgoff since that has the fake offset */ + page_offset = (vmf->address - vma->vm_start) >>PAGE_SHIFT ; - page = shmem->pages[vmf->pgoff]; +mutex_lock (&shmem->pages_lock); -return vmf_insert_page (vma, vmf->address, page); +if (page_offset >= num_pages || +WARN_ON_ONCE (!shmem->pages) || + shmem->madv <0 ) { + ret =VM_FAULT_SIGBUS ; + }else { + page = shmem->pages[page_offset]; + + ret =vmf_insert_page (vma, vmf->address, page); + } + +mutex_unlock (&shmem->pages_lock); + +return ret; }static void drm_gem_shmem_vm_open (struct vm_area_struct *vma)
@@ -581,9 +596,6 @@ int drm_gem_shmem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)struct drm_gem_shmem_object *shmem;int ret; -/* Remove the fake offset */ - vma->vm_pgoff -=drm_vma_node_start (&obj->vma_node); -if (obj->import_attach) {/* Drop the reference drm_gem_mmap_obj() acquired.*/ drm_gem_object_put (obj);
drivers/gpu/drm/drm_ioc32.c +11 -0
@@ -99,6 +99,8 @@ static int compat_drm_version(struct file *file, unsigned int cmd,if (copy_from_user (&v32, (void __user *)arg,sizeof (v32)))return -EFAULT ; +memset (&v,0 ,sizeof (v)); + v = (struct drm_version ) { .name_len = v32.name_len, .name =compat_ptr (v32.name),
@@ -137,6 +139,9 @@ static int compat_drm_getunique(struct file *file, unsigned int cmd,if (copy_from_user (&uq32, (void __user *)arg,sizeof (uq32)))return -EFAULT ; + +memset (&uq,0 ,sizeof (uq)); + uq = (struct drm_unique ){ .unique_len = uq32.unique_len, .unique =compat_ptr (uq32.unique),
@@ -265,6 +270,8 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd,if (copy_from_user (&c32, argp,sizeof (c32)))return -EFAULT ; +memset (&client,0 ,sizeof (client)); + client.idx = c32.idx; err =drm_ioctl_kernel (file, drm_getclient, &client,0 );
@@ -852,6 +859,8 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,if (copy_from_user (&req32, argp,sizeof (req32)))return -EFAULT ; +memset (&req,0 ,sizeof (req)); + req.request.type = req32.request.type; req.request.sequence = req32.request.sequence; req.request.signal = req32.request.signal;
@@ -889,6 +898,8 @@ static int compat_drm_mode_addfb2(struct file *file, unsigned int cmd,struct drm_mode_fb_cmd2 req64;int err; +memset (&req64,0 ,sizeof (req64)); +if (copy_from_user (&req64, argp, offsetof(drm_mode_fb_cmd232_t , modifier)))return -EFAULT ;
drivers/gpu/drm/i915/gt/intel_engine_cs.c +6 -1
@@ -709,9 +709,12 @@ static int engine_setup_common(struct intel_engine_cs *engine) goto err_status; } + err =intel_engine_init_cmd_parser (engine); +if (err) + goto err_cmd_parser; +intel_engine_init_active (engine,ENGINE_PHYSICAL );intel_engine_init_execlists (engine); -intel_engine_init_cmd_parser (engine);intel_engine_init__pm (engine);intel_engine_init_retire (engine);
@@ -725,6 +728,8 @@ static int engine_setup_common(struct intel_engine_cs *engine)return 0 ; +err_cmd_parser: +intel_breadcrumbs_free (engine->breadcrumbs); err_status:cleanup_status_page (engine);return err;
drivers/gpu/drm/i915/i915_cmd_parser.c +13 -6
@@ -939,7 +939,7 @@ static void fini_hash_table(struct intel_engine_cs *engine)* struct intel_engine_cs based on whether the platform requires software * command parsing. */ -void intel_engine_init_cmd_parser (struct intel_engine_cs *engine) +int intel_engine_init_cmd_parser (struct intel_engine_cs *engine) {const struct drm_i915_cmd_table *cmd_tables;int cmd_table_count;
@@ -947,7 +947,7 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)if (!IS_GEN (engine->i915,7 ) && !(IS_GEN (engine->i915,9 ) && engine->class ==COPY_ENGINE_CLASS )) -return ; +return 0 ;switch (engine->class) {case RENDER_CLASS :
@@ -1012,19 +1012,19 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)break ;default :MISSING_CASE (engine->class); -return ; + goto out; }if (!validate_cmds_sorted (engine, cmd_tables, cmd_table_count)) {drm_err (&engine->i915->drm,"%s: command descriptions are not sorted\n" , engine->name); -return ; + goto out; }if (!validate_regs_sorted (engine)) {drm_err (&engine->i915->drm,"%s: registers are not sorted\n" , engine->name); -return ; + goto out; } ret =init_hash_table (engine, cmd_tables, cmd_table_count);
@@ -1032,10 +1032,17 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)drm_err (&engine->i915->drm,"%s: initialised failed!\n" , engine->name);fini_hash_table (engine); -return ; + goto out; } engine->flags |=I915_ENGINE_USING_CMD_PARSER ; + +out: +if (intel_engine_requires_cmd_parser (engine) && + !intel_engine_using_cmd_parser (engine)) +return -EINVAL ; + +return 0 ; }/**
drivers/gpu/drm/i915/i915_drv.h +1 -1
@@ -1947,7 +1947,7 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type);/* i915_cmd_parser.c */ int i915_cmd_parser_get_version (struct drm_i915_private *dev_priv); -void intel_engine_init_cmd_parser (struct intel_engine_cs *engine); +int intel_engine_init_cmd_parser (struct intel_engine_cs *engine);void intel_engine_cleanup_cmd_parser (struct intel_engine_cs *engine); int intel_engine_cmd_parser(struct intel_engine_cs *engine, struct i915_vma *batch,
drivers/gpu/drm/meson/meson_drv.c +11 -0
@@ -482,6 +482,16 @@ static int meson_probe_remote(struct platform_device *pdev,return count; } +static void meson_drv_shutdown (struct platform_device *pdev) +{ +struct meson_drm *priv =dev_get_drvdata (&pdev->dev); +struct drm_device *drm = priv->drm; + +DRM_DEBUG_DRIVER ("\n" ); +drm_kms_helper_poll_fini (drm); +drm_atomic_helper_shutdown (drm); +} +static int meson_drv_probe (struct platform_device *pdev) {struct component_match *match =NULL ;
@@ -553,6 +563,7 @@ static const struct dev_pm_ops meson_drv_pm_ops = {static struct platform_driver meson_drm_platform_driver = { .probe = meson_drv_probe, + .shutdown = meson_drv_shutdown, .driver = { .name ="meson-drm" , .of_match_table = dt_match,
drivers/gpu/drm/nouveau/nouveau_bo.c +4 -2
@@ -556,7 +556,8 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)if (nvbo->force_coherent)return ; -for (i =0 ; i < ttm_dma->num_pages; ++i) { + i =0 ; +while (i < ttm_dma->num_pages) {struct page *p = ttm_dma->pages[i];size_t num_pages =1 ;
@@ -587,7 +588,8 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)if (nvbo->force_coherent)return ; -for (i =0 ; i < ttm_dma->num_pages; ++i) { + i =0 ; +while (i < ttm_dma->num_pages) {struct page *p = ttm_dma->pages[i];size_t num_pages =1 ;
drivers/gpu/drm/qxl/qxl_display.c +1 -0
@@ -328,6 +328,7 @@ static void qxl_crtc_update_monitors_config(struct drm_crtc *crtc, head.id = i; head.flags =0 ; + head.surface_id =0 ; oldcount = qdev->monitors_config->count;if (crtc->state->active) {struct drm_display_mode *mode = &crtc->mode;
drivers/gpu/drm/radeon/radeon.h +2 -0
@@ -575,6 +575,8 @@ struct radeon_gem {struct list_head objects; }; +extern const struct drm_gem_object_funcs radeon_gem_object_funcs; +int radeon_gem_init (struct radeon_device *rdev);void radeon_gem_fini (struct radeon_device *rdev); int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
drivers/gpu/drm/radeon/radeon_gem.c +2 -2
@@ -43,7 +43,7 @@ struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj);int radeon_gem_prime_pin (struct drm_gem_object *obj);void radeon_gem_prime_unpin (struct drm_gem_object *obj); -static const struct drm_gem_object_funcs radeon_gem_object_funcs; +const struct drm_gem_object_funcs radeon_gem_object_funcs;static void radeon_gem_object_free (struct drm_gem_object *gobj) {
@@ -227,7 +227,7 @@ static int radeon_gem_handle_lockup(struct radeon_device *rdev, int r)return r; } -static const struct drm_gem_object_funcs radeon_gem_object_funcs = { +const struct drm_gem_object_funcs radeon_gem_object_funcs = { .free = radeon_gem_object_free, .open = radeon_gem_object_open, .close = radeon_gem_object_close,
drivers/gpu/drm/radeon/radeon_prime.c +2 -0
@@ -56,6 +56,8 @@ struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev,if (ret)return ERR_PTR (ret); + bo->tbo.base.funcs = &radeon_gem_object_funcs; +mutex_lock (&rdev->gem.mutex);list_add_tail (&bo->list, &rdev->gem.objects);mutex_unlock (&rdev->gem.mutex);
drivers/gpu/drm/tiny/gm12u320.c +36 -8
108 lines not on this page · raw message
drivers/gpu/drm/ttm/ttm_pool.c +2 -2
@@ -268,13 +268,13 @@ static void ttm_pool_type_init(struct ttm_pool_type *pt, struct ttm_pool *pool,/* Remove a pool_type from the global shrinker list and free all pages */ static void ttm_pool_type_fini (struct ttm_pool_type *pt) { -struct page *p, *tmp; +struct page *p;mutex_lock (&shrinker_lock);list_del (&pt->shrinker_list);mutex_unlock (&shrinker_lock); -list_for_each_entry_safe (p, tmp, &pt->pages, lru) +while ((p =ttm_pool_type_take (pt)))ttm_pool_free_page (pt->pool, pt->caching, pt->order, p); }
drivers/gpu/drm/udl/udl_drv.c +17 -0
@@ -32,6 +32,22 @@ static int udl_usb_resume(struct usb_interface *interface)return drm_mode_config_helper_resume (dev); } +/* +* FIXME: Dma-buf sharing requires DMA support by the importing device. +* This function is a workaround to make USB devices work as well. +* See todo.rst for how to fix the issue in the dma-buf framework. +*/ +static struct drm_gem_object *udl_driver_gem_prime_import (struct drm_device *dev, +struct dma_buf *dma_buf) +{ +struct udl_device *udl =to_udl (dev); + +if (!udl->dmadev) +return ERR_PTR (-ENODEV ); + +return drm_gem_prime_import_dev (dev, dma_buf, udl->dmadev); +} +DEFINE_DRM_GEM_FOPS (udl_driver_fops);static const struct drm_driver driver = {
@@ -40,6 +56,7 @@ static const struct drm_driver driver = {/* GEM hooks */ .fops = &udl_driver_fops,DRM_GEM_SHMEM_DRIVER_OPS , + .gem_prime_import = udl_driver_gem_prime_import, .name = DRIVER_NAME, .desc = DRIVER_DESC,
drivers/gpu/drm/udl/udl_drv.h +1 -0
@@ -50,6 +50,7 @@ struct urb_list {struct udl_device {struct drm_device drm;struct device *dev; +struct device *dmadev;struct drm_simple_display_pipe display_pipe;
drivers/gpu/drm/udl/udl_main.c +10 -0
@@ -315,6 +315,10 @@ int udl_init(struct udl_device *udl)DRM_DEBUG ("\n" ); + udl->dmadev =usb_intf_get_dma_device (to_usb_interface (dev->dev)); +if (!udl->dmadev) +drm_warn (dev,"buffer sharing not supported" );/* not an error */ +mutex_init (&udl->gem_lock);if (!udl_parse_vendor_descriptor (udl)) {
@@ -343,12 +347,18 @@ int udl_init(struct udl_device *udl) err:if (udl->urbs.count)udl_free_urb_list (dev); +put_device (udl->dmadev);DRM_ERROR ("%d\n" , ret);return ret; }int udl_drop_usb (struct drm_device *dev) { +struct udl_device *udl =to_udl (dev); +udl_free_urb_list (dev); +put_device (udl->dmadev); + udl->dmadev =NULL ; +return 0 ; }
drivers/hid/hid-logitech-dj.c +6 -1
@@ -995,7 +995,12 @@ static void logi_hidpp_recv_queue_notif(struct hid_device *hdev, workitem.reports_supported |=STD_KEYBOARD ;break ;case 0x0d : - device_type ="eQUAD Lightspeed 1_1" ; + device_type ="eQUAD Lightspeed 1.1" ; +logi_hidpp_dev_conn_notif_equad (hdev, hidpp_report, &workitem); + workitem.reports_supported |=STD_KEYBOARD ; +break ; +case 0x0f : + device_type ="eQUAD Lightspeed 1.2" ;logi_hidpp_dev_conn_notif_equad (hdev, hidpp_report, &workitem); workitem.reports_supported |=STD_KEYBOARD ;break ;
drivers/i2c/busses/i2c-rcar.c +5 -8
@@ -91,7 +91,6 @@#define RCAR_BUS_PHASE_START (MDBS | MIE | ESG)#define RCAR_BUS_PHASE_DATA (MDBS | MIE) -#define RCAR_BUS_MASK_DATA (~(ESG | FSB) & 0xFF)#define RCAR_BUS_PHASE_STOP (MDBS | MIE | FSB)#define RCAR_IRQ_SEND (MNR | MAL | MST | MAT | MDE)
@@ -120,6 +119,7 @@ enum rcar_i2c_type { };struct rcar_i2c_priv { +u32 flags;void __iomem *io;struct i2c_adapter adap;struct i2c_msg *msg;
@@ -130,7 +130,6 @@ struct rcar_i2c_priv {int pos;u32 icccr; -u32 flags;u8 recovery_icmcr;/* protected by adapter lock */ enum rcar_i2c_type devtype;struct i2c_client *slave;
@@ -621,7 +620,7 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)/* * This driver has a lock-free design because there are IP cores (at least * R-Car Gen2) which have an inherent race condition in their hardware design. -* There, we need to clear RCAR_BUS_MASK_DATA bits as soon as possible after +* There, we need to switch to RCAR_BUS_PHASE_DATA as soon as possible after * the interrupt was generated, otherwise an unwanted repeated message gets * generated. It turned out that taking a spinlock at the beginning of the ISR * was already causing repeated messages. Thus, this driver was converted to
@@ -630,13 +629,11 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)static irqreturn_t rcar_i2c_irq (int irq,void *ptr) {struct rcar_i2c_priv *priv = ptr; -u32 msr, val; +u32 msr;/* Clear START or STOP immediately, except for REPSTART after read */ -if (likely (!(priv->flags &ID_P_REP_AFTER_RD ))) { - val =rcar_i2c_read (priv,ICMCR ); -rcar_i2c_write (priv,ICMCR , val &RCAR_BUS_MASK_DATA ); - } +if (likely (!(priv->flags &ID_P_REP_AFTER_RD ))) +rcar_i2c_write (priv,ICMCR ,RCAR_BUS_PHASE_DATA ); msr =rcar_i2c_read (priv,ICMSR );
drivers/input/keyboard/applespi.c +15 -6
@@ -48,6 +48,7 @@#include <linux/efi.h> #include <linux/input.h> #include <linux/input/mt.h> +#include <linux/ktime.h> #include <linux/leds.h> #include <linux/module.h> #include <linux/spinlock.h>
@@ -409,7 +410,7 @@ struct applespi_data {unsigned int cmd_msg_cntr;/* lock to protect the above parameters and flags below */ spinlock_t cmd_msg_lock; -bool cmd_msg_queued; +ktime_t cmd_msg_queued;enum applespi_evt_type cmd_evt_type;struct led_classdev backlight_info;
@@ -729,7 +730,7 @@ static void applespi_msg_complete(struct applespi_data *applespi,wake_up_all (&applespi->drain_complete);if (is_write_msg) { - applespi->cmd_msg_queued = false; + applespi->cmd_msg_queued =0 ;applespi_send_cmd_msg (applespi); }
@@ -771,8 +772,16 @@ static int applespi_send_cmd_msg(struct applespi_data *applespi)return 0 ;/* check whether send is in progress */ -if (applespi->cmd_msg_queued) -return 0 ; +if (applespi->cmd_msg_queued) { +if (ktime_ms_delta (ktime_get (), applespi->cmd_msg_queued) <1000 ) +return 0 ; + +dev_warn (&applespi->spi->dev,"Command %d timed out\n" , + applespi->cmd_evt_type); + + applespi->cmd_msg_queued =0 ; + applespi->write_active = false; + }/* set up packet */ memset (packet,0 ,APPLESPI_PACKET_SIZE );
@@ -869,7 +878,7 @@ static int applespi_send_cmd_msg(struct applespi_data *applespi)return sts; } - applespi->cmd_msg_queued = true; + applespi->cmd_msg_queued =ktime_get_coarse (); applespi->write_active = true;return 0 ;
@@ -1921,7 +1930,7 @@ static int __maybe_unused applespi_resume(struct device *dev) applespi->drain = false; applespi->have_cl_led_on = false; applespi->have_bl_level =0 ; - applespi->cmd_msg_queued = false; + applespi->cmd_msg_queued =0 ; applespi->read_active = false; applespi->write_active = false;
drivers/iommu/amd/init.c +34 -11
76 lines not on this page · raw message
drivers/iommu/intel/svm.c +11 -2
@@ -1079,8 +1079,17 @@ static irqreturn_t prq_event_thread(int irq, void *d)* Clear the page request overflow bit and wake up all threads that * are waiting for the completion of this handling. */ -if (readl (iommu->reg +DMAR_PRS_REG ) &DMA_PRS_PRO ) -writel (DMA_PRS_PRO , iommu->reg +DMAR_PRS_REG ); +if (readl (iommu->reg +DMAR_PRS_REG ) &DMA_PRS_PRO ) { +pr_info_ratelimited ("IOMMU: %s: PRQ overflow detected\n" , + iommu->name); + head =dmar_readq (iommu->reg +DMAR_PQH_REG ) &PRQ_RING_MASK ; + tail =dmar_readq (iommu->reg +DMAR_PQT_REG ) &PRQ_RING_MASK ; +if (head == tail) { +writel (DMA_PRS_PRO , iommu->reg +DMAR_PRS_REG ); +pr_info_ratelimited ("IOMMU: %s: PRQ overflow cleared" , + iommu->name); + } + }if (!completion_done (&iommu->prq_complete))complete (&iommu->prq_complete);
drivers/media/platform/rockchip/rkisp1/rkisp1-params.c +0 -1
@@ -1288,7 +1288,6 @@ static void rkisp1_params_config_parameter(struct rkisp1_params *params)memset (hst.hist_weight,0x01 ,sizeof (hst.hist_weight));rkisp1_hst_config (params, &hst);rkisp1_param_set_bits (params,RKISP1_CIF_ISP_HIST_PROP , - ~RKISP1_CIF_ISP_HIST_PROP_MODE_MASK | rkisp1_hst_params_default_config.mode);/* set the range */
drivers/media/platform/vsp1/vsp1_drm.c +3 -3
@@ -245,7 +245,7 @@ static int vsp1_du_pipeline_setup_brx(struct vsp1_device *vsp1, brx = &vsp1->bru->entity; else if (pipe->brx && !drm_pipe->force_brx_release) brx = pipe->brx; - else if (!vsp1->bru->entity.pipe) + else if (vsp1_feature(vsp1, VSP1_HAS_BRU) && !vsp1->bru->entity.pipe) brx = &vsp1->bru->entity; else brx = &vsp1->brs->entity;
@@ -462,9 +462,9 @@ static int vsp1_du_pipeline_setup_inputs(struct vsp1_device *vsp1,* make sure it is present in the pipeline's list of entities if it * wasn't already. */ -if (!use_uif) { +if (drm_pipe->uif && !use_uif) { drm_pipe->uif->pipe =NULL ; - }else if (!drm_pipe->uif->pipe) { + }else if (drm_pipe->uif && !drm_pipe->uif->pipe) { drm_pipe->uif->pipe = pipe;list_add_tail (&drm_pipe->uif->list_pipe, &pipe->entities); }
drivers/media/rc/Makefile +1 -0
@@ -5,6 +5,7 @@ obj-y += keymaps/ obj-$(CONFIG_RC_CORE) += rc-core.o rc-core-y := rc-main.o rc-ir-raw.o rc-core-$(CONFIG_LIRC) += lirc_dev.o +rc-core-$(CONFIG_MEDIA_CEC_RC) += keymaps/rc-cec.o rc-core-$(CONFIG_BPF_LIRC_MODE2) += bpf-lirc.o obj-$(CONFIG_IR_NEC_DECODER) += ir-nec-decoder.o obj-$(CONFIG_IR_RC5_DECODER) += ir-rc5-decoder.o
drivers/media/rc/keymaps/Makefile +0 -1
@@ -21,7 +21,6 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \ rc-behold.o \ rc-behold-columbus.o \ rc-budget-ci-old.o \ - rc-cec.o \ rc-cinergy-1400.o \ rc-cinergy.o \ rc-d680-dmb.o \
drivers/media/rc/keymaps/rc-cec.c +11 -17
@@ -1,5 +1,15 @@// SPDX-License-Identifier: GPL-2.0-or-later /* Keytable for the CEC remote control +* +* This keymap is unusual in that it can't be built as a module, +* instead it is registered directly in rc-main.c if CONFIG_MEDIA_CEC_RC +* is set. This is because it can be called from drm_dp_cec_set_edid() via +* cec_register_adapter() in an asynchronous context, and it is not +* allowed to use request_module() to load rc-cec.ko in that case. +* +* Since this keymap is only used if CONFIG_MEDIA_CEC_RC is set, we +* just compile this keymap into the rc-core module and never as a +* separate module. * * Copyright (c) 2015 by Kamil Debski */
@@ -152,7 +162,7 @@ static struct rc_map_table cec[] = {/* 0x77-0xff: Reserved */ }; -static struct rc_map_list cec_map = { +struct rc_map_list cec_map = { .map = { .scan = cec, .size =ARRAY_SIZE (cec),
@@ -160,19 +170,3 @@ static struct rc_map_list cec_map = { .name = RC_MAP_CEC, } }; - -static int __init init_rc_map_cec (void ) -{ -return rc_map_register (&cec_map); -} - -static void __exit exit_rc_map_cec(void) -{ -rc_map_unregister (&cec_map); -} - -module_init (init_rc_map_cec); -module_exit (exit_rc_map_cec); - -MODULE_LICENSE ("GPL" ); -MODULE_AUTHOR ("Kamil Debski" );
drivers/media/rc/rc-main.c +6 -0
@@ -2069,6 +2069,9 @@ static int __init rc_core_init(void)led_trigger_register_simple ("rc-feedback" , &led_feedback);rc_map_register (&empty_map); +#ifdef CONFIG_MEDIA_CEC_RC +rc_map_register (&cec_map); +#endif return 0 ; }
@@ -2078,6 +2081,9 @@ static void __exit rc_core_exit(void)lirc_dev_exit ();class_unregister (&rc_class);led_trigger_unregister_simple (led_feedback); +#ifdef CONFIG_MEDIA_CEC_RC +rc_map_unregister (&cec_map); +#endif rc_map_unregister (&empty_map); }
drivers/media/usb/usbtv/usbtv-audio.c +1 -1
@@ -371,7 +371,7 @@ void usbtv_audio_free(struct usbtv *usbtv)cancel_work_sync (&usbtv->snd_trigger);if (usbtv->snd && usbtv->udev) { -snd_card_free (usbtv->snd); +snd_card_free_when_closed (usbtv->snd); usbtv->snd =NULL ; } }
drivers/misc/fastrpc.c +5 -0
@@ -950,6 +950,11 @@ static int fastrpc_internal_invoke(struct fastrpc_user *fl, u32 kernel,if (!fl->cctx->rpdev)return -EPIPE ; +if (handle ==FASTRPC_INIT_HANDLE && !kernel) { +dev_warn_ratelimited (fl->sctx->dev,"user app trying to send a kernel RPC message (%d)\n" , handle); +return -EPERM ; + } + ctx =fastrpc_context_alloc (fl, kernel, sc, args);if (IS_ERR (ctx))return PTR_ERR (ctx);
drivers/misc/pvpanic.c +1 -0
@@ -92,6 +92,7 @@ static const struct of_device_id pvpanic_mmio_match[] = { { .compatible = "qemu,pvpanic-mmio", }, {} }; +MODULE_DEVICE_TABLE (of, pvpanic_mmio_match);static const struct acpi_device_id pvpanic_device_ids[] = { {"QEMU0001" ,0 },
drivers/mmc/core/bus.c +5 -6
@@ -399,11 +399,6 @@ void mmc_remove_card(struct mmc_card *card)mmc_remove_card_debugfs (card);#endif -if (host->cqe_enabled) { - host->cqe_ops->cqe_disable (host); - host->cqe_enabled = false; - } -if (mmc_card_present (card)) {if (mmc_host_is_spi (card->host)) { pr_info("%s: SPI card removed\n",
@@ -416,6 +411,10 @@ void mmc_remove_card(struct mmc_card *card)of_node_put (card->dev.of_node); } +if (host->cqe_enabled) { + host->cqe_ops->cqe_disable (host); + host->cqe_enabled = false; + } +put_device (&card->dev); } -
drivers/mmc/core/mmc.c +11 -4
@@ -423,10 +423,6 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)/* EXT_CSD value is in units of 10ms, but we store in ms */ card->ext_csd.part_time =10 * ext_csd[EXT_CSD_PART_SWITCH_TIME ]; -/* Some eMMC set the value too low so set a minimum */ -if (card->ext_csd.part_time && - card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) - card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ;/* Sleep / awake timeout in 100ns units */ if (sa_shift >0 && sa_shift <=0x17 )
@@ -616,6 +612,17 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd) card->ext_csd.data_sector_size =512 ; } +/* +* GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined +* when accessing a specific field", so use it here if there is no +* PARTITION_SWITCH_TIME. +*/ +if (!card->ext_csd.part_time) + card->ext_csd.part_time = card->ext_csd.generic_cmd6_time; +/* Some eMMC set the value too low so set a minimum */ +if (card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) + card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ; +/* eMMC v5 or later */ if (card->ext_csd.rev >=7 ) { memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
drivers/mmc/host/mmci.c +9 -1
@@ -1241,7 +1241,11 @@ mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c)if (!cmd->busy_timeout) cmd->busy_timeout =10 *MSEC_PER_SEC ; - clks = (unsigned long long )cmd->busy_timeout * host->cclk; +if (cmd->busy_timeout > host->mmc->max_busy_timeout) + clks = (unsigned long long )host->mmc->max_busy_timeout * host->cclk; +else + clks = (unsigned long long )cmd->busy_timeout * host->cclk; +do_div (clks,MSEC_PER_SEC );writel_relaxed (clks, host->base +MMCIDATATIMER ); }
@@ -2091,6 +2095,10 @@ static int mmci_probe(struct amba_device *dev, mmc->caps |=MMC_CAP_WAIT_WHILE_BUSY ; } +/* Variants with mandatory busy timeout in HW needs R1B responses. */ +if (variant->busy_timeout) + mmc->caps |=MMC_CAP_NEED_RSP_BUSY ; +/* Prepare a CMD12 - needed to clear the DPSM on some variants. */ host->stop_abort.opcode =MMC_STOP_TRANSMISSION ; host->stop_abort.arg =0 ;
drivers/mmc/host/mtk-sd.c +10 -8
@@ -1127,13 +1127,13 @@ static void msdc_track_cmd_data(struct msdc_host *host,static void msdc_request_done (struct msdc_host *host,struct mmc_request *mrq) {unsigned long flags; -bool ret; - ret =cancel_delayed_work (&host->req_timeout); -if (!ret) { -/* delay work already running */ -return ; - } +/* +* No need check the return value of cancel_delayed_work, as only ONE +* path will go here! +*/ +cancel_delayed_work (&host->req_timeout); +spin_lock_irqsave (&host->lock, flags); host->mrq =NULL ;spin_unlock_irqrestore (&host->lock, flags);
@@ -1155,7 +1155,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,bool done = false;bool sbc_error;unsigned long flags; -u32 *rsp = cmd->resp; +u32 *rsp; if (mrq->sbc && cmd == mrq->cmd && (events & (MSDC_INT_ACMDRDY | MSDC_INT_ACMDCRCERR
@@ -1176,6 +1176,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,if (done)return true; + rsp = cmd->resp;sdr_clr_bits (host->base +MSDC_INTEN , cmd_ints_mask);
@@ -1363,7 +1364,7 @@ static void msdc_data_xfer_next(struct msdc_host *host,static bool msdc_data_xfer_done (struct msdc_host *host,u32 events,struct mmc_request *mrq,struct mmc_data *data) { -struct mmc_command *stop = data->stop; +struct mmc_command *stop;unsigned long flags;bool done; unsigned int check_data = events &
@@ -1379,6 +1380,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,if (done)return true; + stop = data->stop;
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/atheros/alx/main.c +5 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/cadence/macb_main.c +8 -7
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/enetc/enetc.c +50 -43
93 lines not on this page · raw message
drivers/net/ethernet/freescale/enetc/enetc.h +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/enetc/enetc_hw.h +15 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/enetc/enetc_pf.c +81 -17
98 lines not on this page · raw message
drivers/net/ethernet/freescale/enetc/enetc_vf.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +3 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_main.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ixgbevf/ipsec.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mediatek/mtk_star_emac.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/reg.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlxsw/switchx2.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mscc/ocelot_flower.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/realtek/r8169_main.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +18 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +0 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/hwif.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +14 -5
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/dma.c +7 -4
Lines of this file are not shown. View the raw message.
drivers/opp/core.c +25 -23
48 lines not on this page · raw message
drivers/pci/pcie/bw_notification.c deleted +0 -138
138 lines not on this page · raw message
drivers/s390/net/qeth_core_main.c +60 -68
128 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.c +50 -32
82 lines not on this page · raw message
drivers/staging/comedi/drivers/addi_apci_1032.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/addi_apci_1500.c +9 -9
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/adv_pci1710.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/das6402.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/das800.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/dmm32at.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/me4000.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/pcl711.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/comedi/drivers/pcl818.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8188eu/core/rtw_ap.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c +4 -3
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8712/rtl871x_ioctl_linux.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/target/target_core_transport.c +11 -4
Lines of this file are not shown. View the raw message.
drivers/usb/dwc3/dwc3-qcom.c +69 -8
77 lines not on this page · raw message
drivers/usb/gadget/function/u_ether_configfs.h +2 -3
Lines of this file are not shown. View the raw message.
drivers/usb/host/xhci.c +43 -35
78 lines not on this page · raw message
drivers/usb/usbip/stub_dev.c +35 -7
42 lines not on this page · raw message
drivers/usb/usbip/vudc_sysfs.c +42 -7
49 lines not on this page · raw message
drivers/xen/events/events_base.c +100 -30
130 lines not on this page · raw message
include/uapi/linux/netfilter/nfnetlink_cthelper.h +1 -1
Lines of this file are not shown. View the raw message.
kernel/events/core.c +38 -4
42 lines not on this page · raw message
kernel/sched/core.c +62 -64
126 lines not on this page · raw message
kernel/time/hrtimer.c +39 -21
60 lines not on this page · raw message
mm/page_alloc.c +82 -85
167 lines not on this page · raw message
net/l2tp/l2tp_core.c +22 -19
41 lines not on this page · raw message
sound/pci/hda/patch_conexant.c +45 -17
62 lines not on this page · raw message
tools/testing/selftests/bpf/progs/netif_receive_skb.c +10 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_tunnel_kern.c +2 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/array_access.c +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh +9 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.