Linux 5.16.20
Greg Kroah-Hartman
maintainer----------------------------
Note, this is the LAST 5.16.y kernel release. It is now end-of-life.
Please move to the 5.17.y branch at this point in time.
----------------------------
I'm announcing the release of the 5.16.20 kernel.
All users of the 5.16 kernel series must upgrade.
The updated 5.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.16.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/virt/kvm/devices/vcpu.rst | 2 Makefile | 2 arch/alpha/kernel/rtc.c | 7 arch/arm64/include/asm/cputype.h | 2 arch/arm64/include/asm/kvm_host.h | 1 arch/arm64/kernel/patching.c | 4 arch/arm64/kernel/proton-pack.c | 1 arch/arm64/kernel/smp.c | 2 arch/arm64/kvm/arm.c | 4 arch/arm64/kvm/pmu-emul.c | 33 arch/mips/boot/dts/ingenic/jz4780.dtsi | 2 arch/mips/include/asm/setup.h | 2 arch/mips/kernel/traps.c | 22 arch/mips/ralink/ill_acc.c | 1 arch/parisc/kernel/patch.c | 25 arch/powerpc/boot/dts/fsl/t104xrdb.dtsi | 4 arch/powerpc/include/asm/interrupt.h | 2 arch/powerpc/include/asm/page.h | 6 arch/powerpc/kernel/rtas.c | 6 arch/powerpc/kernel/secvar-sysfs.c | 9 arch/powerpc/kexec/core.c | 15 arch/powerpc/kvm/book3s_64_entry.S | 10 arch/powerpc/mm/book3s64/hash_utils.c | 54 arch/powerpc/mm/mem.c | 2 arch/powerpc/mm/pageattr.c | 32 arch/powerpc/perf/callchain.h | 9 arch/powerpc/perf/callchain_64.c | 27 arch/powerpc/platforms/Kconfig.cputype | 3 arch/riscv/lib/memmove.S | 368 +++++- arch/um/include/asm/xor.h | 4 arch/x86/Kconfig | 5 arch/x86/events/intel/core.c | 8 arch/x86/include/asm/bug.h | 4 arch/x86/include/asm/irq_stack.h | 3 arch/x86/include/asm/kvm_host.h | 1 arch/x86/include/asm/msi.h | 19 arch/x86/include/asm/perf_event.h | 5 arch/x86/kernel/fpu/xstate.c | 2 arch/x86/kernel/hpet.c | 8 arch/x86/kernel/static_call.c | 5 arch/x86/kvm/emulate.c | 4 arch/x86/kvm/kvm_emulate.h | 1 arch/x86/kvm/pmu.c | 18 arch/x86/kvm/svm/avic.c | 7 arch/x86/kvm/svm/pmu.c | 9 arch/x86/kvm/svm/svm.h | 4 arch/x86/kvm/svm/svm_onhyperv.c | 1 arch/x86/kvm/vmx/pmu_intel.c | 14 arch/x86/kvm/x86.c | 6 arch/x86/mm/tlb.c | 37 arch/x86/power/cpu.c | 21 arch/x86/xen/smp_hvm.c | 6 arch/x86/xen/time.c | 24 arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi | 8 arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi | 8 arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi | 4 drivers/ata/sata_dwc_460ex.c | 6 drivers/base/power/trace.c | 6 drivers/block/drbd/drbd_int.h | 8 drivers/block/drbd/drbd_main.c | 6 drivers/block/drbd/drbd_nl.c | 41 drivers/block/drbd/drbd_state.c | 18 drivers/block/drbd/drbd_state_change.h | 8 drivers/char/virtio_console.c | 8 drivers/clk/clk-si5341.c | 16 drivers/clk/clk.c | 24 drivers/clk/mediatek/clk-mt8192.c | 36 drivers/clk/rockchip/clk-rk3568.c | 6 drivers/clk/ti/clk.c | 13 drivers/cpufreq/cppc_cpufreq.c | 43 drivers/dma/sh/shdma-base.c | 4 drivers/gpio/gpiolib.c | 19 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 1 drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 24 drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 80 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 6 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 80 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c | 6 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 15 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 3 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 2 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c | 2 drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 11 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 8 drivers/gpu/drm/bridge/nwl-dsi.c | 18 drivers/gpu/drm/drm_edid.c | 19 drivers/gpu/drm/drm_panel_orientation_quirks.c | 6 drivers/gpu/drm/imx/dw_hdmi-imx.c | 8 drivers/gpu/drm/imx/imx-ldb.c | 2 drivers/gpu/drm/imx/parallel-display.c | 4 drivers/gpu/drm/msm/dsi/dsi_host.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c | 1 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c | 1 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h | 1 drivers/gpu/drm/panel/panel-ilitek-ili9341.c | 4 drivers/gpu/drm/v3d/v3d_gem.c | 6 drivers/hv/channel_mgmt.c | 6 drivers/hv/vmbus_drv.c | 9 drivers/infiniband/core/cm.c | 3 drivers/infiniband/hw/hfi1/mmu_rb.c | 6 drivers/infiniband/hw/mlx5/mr.c | 5 drivers/infiniband/sw/rdmavt/qp.c | 6 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 1 drivers/iommu/omap-iommu.c | 2 drivers/irqchip/irq-gic-v3-its.c | 28 drivers/irqchip/irq-gic-v3.c | 14 drivers/irqchip/irq-gic.c | 6 drivers/md/dm-ioctl.c | 2 drivers/md/dm-rq.c | 7 drivers/md/dm.c | 11 drivers/misc/habanalabs/common/memory.c | 30 drivers/misc/habanalabs/common/mmu/mmu_v1.c | 2 drivers/mmc/core/block.c | 46 drivers/mmc/host/mmci_stm32_sdmmc.c | 6 drivers/mmc/host/renesas_sdhi_core.c | 4 drivers/mmc/host/sdhci-xenon.c | 10 drivers/net/can/usb/etas_es58x/es58x_fd.c | 3 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 5 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 14 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 2 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c | 4 drivers/net/ethernet/intel/ice/ice.h | 2 drivers/net/ethernet/intel/ice/ice_lib.c | 3 drivers/net/ethernet/intel/ice/ice_main.c | 6 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 4 drivers/net/ethernet/intel/ice/ice_xsk.c | 6 drivers/net/ethernet/marvell/mv643xx_eth.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 1 drivers/net/ethernet/mellanox/mlx5/core/port.c | 23 drivers/net/ethernet/qlogic/qed/qed_debug.c | 2 drivers/net/ethernet/qlogic/qede/qede_fp.c | 3 drivers/net/ethernet/sfc/efx_channels.c | 148 +- drivers/net/ethernet/sfc/rx_common.c | 3 drivers/net/ethernet/sfc/tx.c | 3 drivers/net/ethernet/sfc/tx_common.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 3 drivers/net/macvtap.c | 6 drivers/net/mdio/mdio-mscc-miim.c | 6 drivers/net/phy/sfp-bus.c | 6 drivers/net/tap.c | 3 drivers/net/tun.c | 3 drivers/net/vrf.c | 15 drivers/net/wireless/ath/ath11k/ahb.c | 2 drivers/net/wireless/ath/ath11k/mhi.c | 2 drivers/net/wireless/ath/ath11k/pci.c | 10 drivers/net/wireless/ath/ath5k/eeprom.c | 3 drivers/net/wireless/intel/iwlwifi/fw/api/dbg-tlv.h | 5 drivers/net/wireless/intel/iwlwifi/mvm/phy-ctxt.c | 31 drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 5 drivers/net/wireless/mediatek/mt76/dma.c | 1 drivers/net/wireless/mediatek/mt76/mt76.h | 2 drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 2 drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 1 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 1 drivers/net/wireless/realtek/rtw89/core.c | 5 drivers/opp/debugfs.c | 5 drivers/opp/opp.h | 1 drivers/parisc/dino.c | 41 drivers/parisc/gsc.c | 31 drivers/parisc/gsc.h | 1 drivers/parisc/lasi.c | 7 drivers/parisc/wax.c | 7 drivers/pci/controller/pci-aardvark.c | 16 drivers/pci/endpoint/functions/pci-epf-test.c | 14 drivers/pci/hotplug/pciehp_hpc.c | 2 drivers/perf/qcom_l2_pmu.c | 6 drivers/phy/amlogic/phy-meson-gxl-usb2.c | 5 drivers/phy/amlogic/phy-meson8b-usb2.c | 9 drivers/platform/x86/hp-wmi.c | 93 + drivers/power/supply/axp20x_battery.c | 13 drivers/power/supply/axp288_charger.c | 14 drivers/ptp/ptp_sysfs.c | 4 drivers/regulator/atc260x-regulator.c | 1 drivers/regulator/rtq2134-regulator.c | 1 drivers/rtc/rtc-cmos.c | 19 drivers/rtc/rtc-mc146818-lib.c | 42 drivers/rtc/rtc-wm8350.c | 11 drivers/scsi/aha152x.c | 6 drivers/scsi/bfa/bfad_attr.c | 26 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 68 + drivers/scsi/libfc/fc_exch.c | 1 drivers/scsi/mpi3mr/mpi3mr_fw.c | 2 drivers/scsi/mpi3mr/mpi3mr_os.c | 2 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 5 drivers/scsi/mvsas/mv_init.c | 4 drivers/scsi/pm8001/pm8001_hwi.c | 27 drivers/scsi/pm8001/pm8001_sas.c | 2 drivers/scsi/pm8001/pm80xx_hwi.c | 17 drivers/scsi/scsi_scan.c | 5 drivers/scsi/sd.c | 2 drivers/scsi/smartpqi/smartpqi_init.c | 45 drivers/scsi/sr.c | 2 drivers/scsi/ufs/ufshcd-pci.c | 17 drivers/scsi/ufs/ufshpb.c | 11 drivers/scsi/zorro7xx.c | 2 drivers/spi/spi-bcm-qspi.c | 4 drivers/spi/spi.c | 4 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 3 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 6 drivers/staging/wfx/main.c | 7 drivers/tty/serial/samsung_tty.c | 5 drivers/usb/cdns3/cdnsp-debug.h | 305 ++--- drivers/usb/dwc3/dwc3-omap.c | 2 drivers/usb/dwc3/dwc3-pci.c | 11 drivers/usb/gadget/udc/tegra-xudc.c | 20 drivers/usb/host/ehci-pci.c | 9 drivers/vdpa/mlx5/net/mlx5_vnet.c | 21 drivers/vfio/pci/vfio_pci_rdwr.c | 2 drivers/vhost/net.c | 1 drivers/video/fbdev/core/fbmem.c | 9 drivers/w1/slaves/w1_therm.c | 8 fs/btrfs/extent_io.h | 2 fs/btrfs/inode.c | 22 fs/btrfs/ioctl.c | 20 fs/btrfs/volumes.c | 65 - fs/btrfs/zoned.c | 9 fs/ceph/dir.c | 11 fs/ceph/inode.c | 10 fs/file_table.c | 1 fs/io_uring.c | 79 - fs/jfs/inode.c | 3 fs/minix/inode.c | 3 fs/nfs/dir.c | 10 fs/nfs/direct.c | 48 fs/nfs/file.c | 4 fs/nfs/inode.c | 1 fs/nfs/internal.h | 17 fs/nfs/nfs42proc.c | 9 fs/nfs/nfs4file.c | 6 fs/nfs/nfs4state.c | 12 fs/nfs/pagelist.c | 10 fs/nfs/pnfs_nfs.c | 8 fs/nfs/write.c | 34 include/linux/gpio/driver.h | 9 include/linux/ipv6.h | 2 include/linux/mc146818rtc.h | 3 include/linux/mmzone.h | 11 include/linux/nfs_fs.h | 10 include/linux/static_call.h | 5 include/linux/vfio_pci_core.h | 9 include/net/arp.h | 1 include/net/bluetooth/bluetooth.h | 14 include/net/mctp.h | 2 include/net/net_namespace.h | 6 include/trace/events/sunrpc.h | 1 include/uapi/linux/bpf.h | 6 include/uapi/linux/can/isotp.h | 28 init/main.c | 8 kernel/Makefile | 3 kernel/events/core.c | 3 kernel/sched/core.c | 2 kernel/static_call.c | 542 --------- kernel/static_call_inline.c | 543 ++++++++++ lib/Kconfig.debug | 3 lib/Kconfig.ubsan | 13 lib/logic_iomem.c | 8 lib/lz4/lz4_decompress.c | 8 lib/test_ubsan.c | 22 mm/highmem.c | 4 mm/mempolicy.c | 1 mm/mremap.c | 3 mm/rmap.c | 25 net/batman-adv/multicast.c | 2 net/bluetooth/hci_event.c | 3 net/bluetooth/l2cap_core.c | 1 net/bpf/test_run.c | 4 net/can/isotp.c | 12 net/core/dev.c | 3 net/core/filter.c | 30 net/core/net_namespace.c | 17 net/core/rtnetlink.c | 13 net/core/skbuff.c | 15 net/ipv4/arp.c | 9 net/ipv4/fib_frontend.c | 5 net/ipv4/fib_semantics.c | 7 net/ipv4/inet_hashtables.c | 53 net/ipv6/addrconf.c | 4 net/ipv6/inet6_hashtables.c | 5 net/ipv6/ip6_input.c | 2 net/ipv6/ip6mr.c | 8 net/ipv6/route.c | 2 net/mctp/af_mctp.c | 46 net/mctp/route.c | 16 net/netfilter/nf_conntrack_core.c | 85 + net/netlabel/netlabel_kapi.c | 2 net/openvswitch/actions.c | 2 net/openvswitch/flow_netlink.c | 99 + net/rxrpc/net_ns.c | 2 net/sctp/outqueue.c | 6 net/smc/af_smc.c | 8 net/smc/smc_core.c | 2 net/smc/smc_tx.c | 25 net/smc/smc_tx.h | 1 net/sunrpc/clnt.c | 7 net/sunrpc/sched.c | 7 net/sunrpc/svcsock.c | 4 net/sunrpc/xprt.c | 23 net/sunrpc/xprtrdma/transport.c | 2 net/sunrpc/xprtsock.c | 70 - net/tls/tls_sw.c | 2 net/wireless/scan.c | 9 scripts/Makefile.ubsan | 1 tools/build/feature/Makefile | 9 tools/lib/bpf/Makefile | 4 tools/perf/Makefile.config | 6 tools/perf/arch/arm64/util/arm-spe.c | 6 tools/perf/perf.c | 2 tools/perf/util/session.c | 15 tools/perf/util/setup.py | 8 tools/testing/selftests/bpf/progs/test_sk_lookup.c | 3 tools/testing/selftests/bpf/xdpxceiver.c | 80 - tools/testing/selftests/bpf/xdpxceiver.h | 2 virt/kvm/kvm_main.c | 2 323 files changed, 3427 insertions(+), 2060 deletions(-)
Adam Wujek (1):
clk: si5341: fix reported clk_rate when output divider is 2
Adrian Hunter (2):
perf tools: Fix perf's libperf_print callback
scsi: ufs: ufs-pci: Add support for Intel MTL
Aharon Landau (2):
RDMA/mlx5: Don't remove cache MRs when a delay is needed RDMA/mlx5: Add a missing update of cache->last_add
Alex Deucher (3):
drm/amdkfd: make CRAT table missing message informational only drm/amdgpu/smu10: fix SoC/fclk units in auto mode drm/amdgpu: don't use BACO for reset in S3
Alex Williamson (1):
vfio/pci: Stub vfio_pci_vga_rw when !CONFIG_VFIO_PCI_VGA
Alexander Lobakin (1):
MIPS: fix fortify panic when copying asm exception handlers
Amjad Ouled-Ameur (3):
phy: amlogic: phy-meson-gxl-usb2: fix shared reset controller use
phy: amlogic: meson8b-usb2: Use dev_err_probe()
phy: amlogic: meson8b-usb2: fix shared reset control use
Anatolii Gerasymenko (2):
ice: Set txq_teid to ICE_INVAL_TEID on ring creation
ice: Do not skip not enabled queues in ice_vc_dis_qs_msg
Andre Przywara (1):
irqchip/gic, gic-v3: Prevent GSI to SGI translations
Andrea Parri (Microsoft) (1):
Drivers: hv: vmbus: Replace smp_store_mb() with virt_store_mb()
Andrew Lunn (1):
net: ethernet: mv643xx: Fix over zealous checking of_get_mac_address()
Andy Gospodarek (1):
bnxt_en: reserve space inside receive page for skb_shared_info
Anisse Astier (1):
drm: Add orientation quirk for GPD Win Max
Arnaldo Carvalho de Melo (4):
perf build: Don't use -ffat-lto-objects in the python feature test when building with clang-13 perf python: Fix probing for some clang command line options
tools build: Filter out options and warnings not supported by clang
tools build: Use $(shell ) instead of `` to get embedded libperl's ccopts
Avraham Stern (1):
cfg80211: don't add non transmitted BSS to 6GHz scanned channels
Axel Lin (2):
regulator: rtq2134: Fix missing active_discharge_on setting
regulator: atc260x: Fix missing active_discharge_on setting
Ben Greear (1):
mt76: mt7921: fix crash when startup fails.
Benjamin Beichler (1):
um: fix and optimize xor select template for CONFIG64 and timetravel mode
Benjamin Marty (1):
drm/amdgpu/display: change pipe policy for DCN 2.1
CHANDAN VURDIGERE NATARAJ (1):
drm/amd/display: Fix by adding FPU protection for dcn30_internal_validate_bw
Chanho Park (1):
arm64: Add part number for Arm Cortex-A78AE
Chen-Yu Tsai (1):
net: stmmac: Fix unset max_speed difference between DT and non-DT platforms
ChenXiaoSong (2):
Revert "NFSv4: Handle the special Linux file open access mode"
NFSv4: fix open failure with O_ACCMODE flag
Christian Lamparter (1):
ata: sata_dwc_460ex: Fix crash due to OOB write
Christian Löhle (1):
mmc: block: Check for errors after write on SPI
Christophe JAILLET (1):
scsi: zorro7xx: Fix a resource leak in zorro7xx_remove_one()
Christophe Leroy (3):
powerpc/set_memory: Avoid spinlock recursion in change_page_attr() powerpc/64: Fix build failure with allyesconfig in book3s_64_entry.S
static_call: Don't make __static_call_return0 static
Dale Zhao (1):
drm/amd/display: Add signal type check when verify stream backends same
Damien Le Moal (6):
scsi: pm8001: Fix pm80xx_pci_mem_copy() interface
scsi: pm8001: Fix pm8001_mpi_task_abort_resp()
scsi: pm8001: Fix task leak in pm8001_send_abort_all()
scsi: pm8001: Fix tag leaks on error
scsi: pm8001: Fix memory leak in pm8001_chip_fw_flash_update_req()
scsi: mpt3sas: Fix use after free in _scsih_expander_node_remove()Dan Carpenter (2):
drm/amdgpu: fix off by one in amdgpu_gfx_kiq_acquire()
rtc: mc146818-lib: fix signedness bug in mc146818_get_time()
Daniel Mack (1):
drm/panel: ili9341: fix optional regulator handling
Daniel Thompson (1):
drm/msm/dsi: Remove spurious IRQF_ONESHOT flag
Dave Hansen (1):
x86/mm/tlb: Revert retpoline avoidance approach
David Ahern (1):
ipv6: Fix stats accounting in ip6_pkt_drop
Denis Nikitin (1):
perf session: Remap buf if there is no space for event
Deren Wu (1):
mt76: fix monitor mode crash with sdio driver
Don Brace (1):
scsi: smartpqi: Fix rmmod stack trace
Dongli Zhang (1):
xen: delay xen_hvm_init_time_ops() if kdump is boot on vcpu>=32
Douglas Miller (1):
RDMA/hfi1: Fix use-after-free bug for mm struct
Dust Li (2):
net/smc: correct settings of RMB window update limit net/smc: send directly on setting TCP_NODELAY
Emily Deng (1):
drm/amdgpu/vcn: Fix the register setting for vcn1
Eric Dumazet (3):
ipv6: make mc_forwarding atomic
net: initialize init_net earlier
rxrpc: fix a race in rxrpc_exit_net()
Ethan Lien (1):
btrfs: fix qgroup reserve overflow the qgroup limit
Eugene Syromiatnikov (1):
io_uring: implement compat handling for IORING_REGISTER_IOWQ_AFF
Evgeny Boger (1):
power: supply: axp20x_battery: properly report current when discharging
Eyal Birger (1):
vrf: fix packet sniffing for traffic originating from ip tunnels
Feng Tang (1):
lib/Kconfig.debug: add ARCH dependency for FUNCTION_ALIGN option
Florian Westphal (1):
netfilter: conntrack: revisit gc autotuning
Gal Pressman (1):
net/mlx5e: Remove overzealous validations in netlink EEPROM query
Greg Kroah-Hartman (1):
Linux 5.16.20
Guilherme G. Piccoli (1):
Drivers: hv: vmbus: Fix potential crash on module unload
Guo Ren (1):
arm64: patch_text: Fixup last cpu should be master
Guo Xuenan (1):
lz4: fix LZ4_decompress_safe_partial read out of bound
H. Nikolaus Schaller (1):
usb: dwc3: omap: fix "unbalanced disables for smps10_out1" on omap5evm
Haimin Zhang (1):
jfs: prevent NULL deref in diFree
Hangyu Hua (2):
mips: ralink: fix a refcount leak in ill_acc_of_setup() powerpc/secvar: fix refcount leak in format_show()
Hans de Goede (2):
power: supply: axp288-charger: Set Vhold to 4.4V
usb: dwc3: pci: Set the swnode from inside dwc3_pci_quirks()
Harold Huang (1):
tuntap: add sanity checks about msg_controllen in sendmsg
Helge Deller (1):
parisc: Fix CPU affinity for Lasi, WAX and Dino chips
Hou Wenlong (1):
KVM: x86/emulator: Emulate RDPID only if it is enabled in guest
Hou Zhiqiang (1):
PCI: endpoint: Fix alignment fault error in copy tests
Ido Schimmel (1):
ipv4: Invalidate neighbour for broadcast address upon address addition
Ilan Peer (1):
iwlwifi: mvm: Correctly set fragmented EBS
Ilya Maximets (2):
net: openvswitch: don't send internal clone attribute to the userspace.
net: openvswitch: fix leak of nested actions
Ivan Vecera (1):
ice: Clear default forwarding VSI during VSI release
Jakub Kicinski (3):
net: account alternate interface name memory
net: limit altnames to 64k total
Revert "selftests: net: Add tls config dependency for tls selftests"
Jakub Sitnicki (3):
bpf: Make dst_port field in struct bpf_sock 16-bit wide
bpf: Make remote_port field in struct bpf_sk_lookup 16-bit wide selftests/bpf: Fix u8 narrow load checks for bpf_sk_lookup remote_port
James Clark (1):
perf: arm-spe: Fix perf report --mem-mode
Jamie Bainbridge (2):
sctp: count singleton chunks in assoc user stats
qede: confirm skb is allocated before using
Jani Nikula (1):
drm/edid: improve non-desktop quirk logging
Jason Wang (1):
vdpa: mlx5: prevent cvq work from hogging CPU
Jean-Philippe Brucker (1):
skbuff: fix coalescing for page_pool fragment recycling
Jens Axboe (3):
io_uring: don't check req->file in io_fsync_prep()
io_uring: defer splice/tee file validity check until command issue
io_uring: fix race between timeout flush and removal
Jianglei Nie (1):
scsi: libfc: Fix use after free in fc_exch_abts_resp()
Jiasheng Jiang (2):
rtc: wm8350: Handle error for wm8350_register_irq drm/imx: imx-ldb: Check for null pointer after calling kmemdup
Jim Mattson (2):
KVM: x86/pmu: Use different raw event masks for AMD and Intel
KVM: x86/svm: Clear reserved bits written to PerfEvtSeln MSRs
Jiri Kosina (1):
rtw89: fix RCU usage in rtw89_core_txq_push()
Jiri Slaby (1):
serial: samsung_tty: do not unlock port->lock for uart_write_wakeup()
Johan Almbladh (1):
mt76: mt7915: fix injected MPDU transmission to not use HW A-MSDU
Johannes Berg (1):
lib/logic_iomem: correct fallback config references
Johannes Thumshirn (1):
btrfs: zoned: traverse devices under chunk_mutex in btrfs_can_activate_zone
John David Anglin (1):
parisc: Fix patch code locking and flushing
John Garry (1):
scsi: core: Fix sbitmap depth in scsi_realloc_sdev_budget_map()
Jordy Zomer (1):
dm ioctl: prevent potential spectre v1 gadget
Jorge Lopez (2):
platform/x86: hp-wmi: Fix SW_TABLET_MODE detection method platform/x86: hp-wmi: Fix 0x05 error code reported by several WMI calls
José Expósito (2):
clk: mediatek: Fix memory leaks on probe drm/imx: Fix memory leak in imx_pd_connector_get_modes
Kaiwen Hu (1):
btrfs: prevent subvol with swapfile from being deleted
Kalle Valo (2):
ath11k: pci: fix crash on suspend if board file is not found
ath11k: mhi: use mhi_sync_power_up()
Kamal Dasu (1):
spi: bcm-qspi: fix MSPI only access with bcm_qspi_exec_mem_op()
Kan Liang (2):
perf/x86/intel: Update the FRONTEND MSR mask on Sapphire Rapids perf/x86/intel: Don't extend the pseudo-encoding to GP counters
Karol Herbst (1):
drm/nouveau/pmu: Add missing callbacks for Tegra devices
Kees Cook (1):
ubsan: remove CONFIG_UBSAN_OBJECT_SIZE
Kefeng Wang (2):
powerpc: Fix virt_addr_valid() for 64-bit Book3E & 32-bit Revert "powerpc: Set max_mapnr correctly"
Kevin Groeneveld (1):
scsi: sr: Fix typo in CDROM(CLOSETRAY|EJECT) handling
Krzysztof Kozlowski (1):
MIPS: ingenic: correct unit node address
Lee Jones (1):
drm/amdkfd: Create file descriptor after client is added to smi_clients list
Li Chen (1):
PCI: endpoint: Fix misused goto label
Like Xu (1):
KVM: x86/pmu: Fix and isolate TSX-specific performance event logic
Liu Ying (1):
drm/imx: dw_hdmi-imx: Fix bailout in error cases of probe
Lorenzo Bianconi (1):
mt76: dma: initialize skip_unmap in mt76_dma_rx_fill
Luca Coelho (1):
iwlwifi: fix small doc mistake for iwl_fw_ini_addr_val
Lucas Denefle (1):
w1: w1_therm: fixes w1_seq for ds28ea00 sensors
Luiz Augusto von Dentz (2):
Bluetooth: Fix not checking for valid hdev on bt_dev_{info,warn,err,dbg}
Bluetooth: Fix use after free in hci_send_acl
Lv Yunlong (1):
drbd: Fix five use after free bugs in get_initial_state
Maciej Fijalkowski (3):
ice: synchronize_rcu() when terminating rings
ice: xsk: fix VSI state check in ice_xsk_wakeup()
ice: clear cmd_type_offset_bsz for TX rings
Magnus Karlsson (1):
selftests, xsk: Fix bpf_res cleanup test
Mahesh Rajashekhara (1):
scsi: smartpqi: Fix kdump issue when controller is locked up
Manish Chopra (1):
qed: fix ethtool register dump
Manivannan Sadhasivam (1):
PCI: pciehp: Add Qualcomm quirk for Command Completed erratum
Marc Zyngier (3):
KVM: arm64: Do not change the PMU event filter after a VCPU has run irqchip/gic-v3: Fix GICR_CTLR.RWP polling
irqchip/gic-v4: Wait for GICR_VPENDBASER.Dirty to clear before descheduling
Mark Zhang (1):
IB/cm: Cancel mad on the DREQ event when the state is MRA_REP_RCVD
Martin Habets (1):
sfc: Do not free an empty page_ring
Martin K. Petersen (1):
scsi: sd: sd_read_cpr() requires VPD pages
Mateusz Jończyk (3):
rtc: mc146818-lib: change return values of mc146818_get_time()
rtc: Check return value from mc146818_get_time()
rtc: mc146818-lib: fix RTC presence check
Matt Johnston (2):
mctp: Fix check for dev_hard_header() result
mctp: Use output netdev to allocate skb headroom
Mauricio Faria de Oliveira (1):
mm: fix race between MADV_FREE reclaim and blkdev direct IO read
Max Filippov (2):
xtensa: fix DTC warning unit_address_format
highmem: fix checks in __kmap_local_sched_{in,out}
Maxim Kiselev (1):
powerpc: dts: t104xrdb: fix phy type for FMAN 4/5
Maxim Mikityanskiy (2):
net/mlx5e: Disable TX queues before registering the netdev
bpf: Support dual-stack sockets in bpf_tcp_check_syncookie
Maxime Ripard (1):
clk: Enforce that disjoints limits are invalid
Miaohe Lin (1):
mm/mempolicy: fix mpol_new leak in shared_policy_replace
Miaoqian Lin (1):
dpaa2-ptp: Fix refcount leak in dpaa2_ptp_probe
Michael Chan (1):
bnxt_en: Eliminate unintended link toggle during FW reset
Michael Ellerman (1):
powerpc/64e: Tie PPC_BOOK3E_64 to PPC_FSL_BOOK3E
Michael T. Kloos (1):
riscv: Fixed misaligned memory access. Fixed pointer comparison.
Michael Walle (2):
net: sfp: add 2500base-X quirk for Lantech SFP module
net: phy: mscc-miim: reject clause 45 register accesses
Michael Wu (1):
mmc: core: Fixup support for writeback-cache for eMMC and SD
Mike Snitzer (1):
dm: requeue IO if mapping table not yet available
Minghao Chi (CGEL ZTE) (1):
Bluetooth: use memset avoid memory leaks
Miri Korenblit (1):
iwlwifi: mvm: move only to an enabled channel
Namhyung Kim (1):
perf/core: Inherit event_caps
Naresh Kamboju (1):
selftests: net: Add tls config dependency for tls selftests
Nathan Chancellor (1):
x86/Kconfig: Do not allow CONFIG_X86_X32_ABI=y with llvm-objcopy
Neal Liu (1):
usb: ehci: add pci device support for Aspeed platforms
NeilBrown (4):
SUNRPC/xprt: async tasks mustn't block waiting for memory
SUNRPC: remove scheduling boost for "SWAPPER" tasks.
NFS: swap IO handling is slightly different for O_DIRECT IO
NFS: swap-out must always use STABLE writes.
Nicholas Kazlauskas (1):
drm/amd/display: Use PSR version selected during set_psr_caps
Nicholas Piggin (1):
powerpc/64s/hash: Make hash faults work in NMI context
Niels Dossche (1):
IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition
Nikolay Aleksandrov (1):
net: ipv4: fix route with nexthop object delete warning
Oded Gabbay (1):
habanalabs: reject host map with mmu disabled
Ohad Sharabi (1):
habanalabs: fix possible memory leak in MMU DR fini
Oliver Hartkopp (1):
can: isotp: set default value for N_As to 50 micro seconds
Pali Rohár (2):
PCI: aardvark: Fix support for MSI interrupts Revert "mmc: sdhci-xenon: fix annoying 1.8V regulator warning"
Paolo Bonzini (2):
mmmremap.c: avoid pointless invalidate_range_start/end on mremap(old_size=0)
KVM: avoid NULL pointer dereference in kvm_dirty_ring_push
Pavan Chebbi (1):
bnxt_en: Synchronize tx when xdp redirects happen on same ring
Pavel Begunkov (2):
io_uring: nospec index for tags on files update
io_uring: don't touch scm_fp_list after queueing skb
Pawan Gupta (2):
x86/pm: Save the MSR validity status at context setup x86/speculation: Restore speculation related MSRs during S3 resume
Pawel Laszczak (1):
usb: cdnsp: fix cdnsp_decode_trb function to properly handle ret value
Peter Gonda (1):
KVM: SVM: Fix kvm_cache_regs.h inclusions for is_guest_mode()
Peter Zijlstra (2):
x86: Annotate call_on_stack() x86,static_call: Fix __static_call_return0 for i386
Phil Auld (1):
arch/arm64: Fix topology initialization for core scheduling
Philip Yang (4):
drm/amdkfd: Don't take process mutex for svm ioctls drm/amdkfd: Ensure mm remain valid in svm deferred_list work drm/amdkfd: svm range restore work deadlock when process exit drm/amdkfd: Fix variable set but not used warning
Philipp Zabel (1):
drm/edid: remove non_desktop quirk for HPN-3515 and LEN-B800.
Pierre Gondois (1):
cpufreq: CPPC: Fix performance/frequency conversion
Qi Liu (1):
scsi: hisi_sas: Free irq vectors in order for v3 HW
Qinghua Jin (1):
minix: fix bug when opening a file with O_DIRECT
Qu Wenruo (2):
btrfs: remove device item and update super block in the same transaction
btrfs: avoid defragging extents whose next extents are not targets
Rajneesh Bhardwaj (1):
drm/amdgpu: Fix recursive locking warning
Randy Dunlap (3):
scsi: aha152x: Fix aha152x_setup() __setup handler return value init/main.c: return 1 from handled __setup() functions
virtio_console: eliminate anonymous module_init & module_exit
Ray Jui (1):
bnxt_en: Prevent XDP redirect from running when stopping TX queue
Reto Buerki (1):
x86/msi: Fix msi message data shadow struct
Sascha Hauer (1):
clk: rockchip: drop CLK_SET_RATE_PARENT from dclk_vop* on rk3568
Sebastian Andrzej Siewior (2):
tcp: Don't acquire inet_listen_hashbucket::lock with disabled BH.
sched: Teach the forced-newidle balancer about CPU affinity limitation.
Shirish S (1):
amd/display: set backlight only if required
Shreeya Patel (1):
gpio: Restrict usage of GPIO chip irq members before initialization
Sourabh Jain (1):
powerpc: Set crashkernel offset to mid of RMA region
Sreekanth Reddy (2):
scsi: mpi3mr: Fix reporting of actual data transfer size
scsi: mpi3mr: Fix memory leaks
Stefan Wahren (2):
staging: vchiq_arm: Avoid NULL ptr deref in vchiq_dump_platform_instances
staging: vchiq_core: handle NULL result of find_service_by_handle
Sung Joon Kim (1):
drm/amd/display: reset lane settings after each PHY repeater LT
Suravee Suthikulpanit (1):
KVM: SVM: Allow AVIC support on system w/ physical APIC ID > 255
Sven Eckelmann (1):
macvtap: advertise link netns via netlink
Taehee Yoo (2):
net: sfc: add missing xdp queue reinitialization
net: sfc: fix using uninitialized xdp tx_queue
Thomas Zimmermann (1):
fbdev: Fix unregistering of framebuffers without device
Tony Lindgren (2):
clk: ti: Preserve node in ti_dt_clocks_register() iommu/omap: Fix regression in probe for NULL pointer dereference
Tony Lu (1):
net/smc: Send directly when TCP_CORK is cleared
Trond Myklebust (8):
NFSv4: Protect the state recovery thread against direct reclaim
SUNRPC: Fix socket waits for write buffer space
NFS: nfsiod should not block forever in mempool_alloc()
NFS: Avoid writeback threads getting stuck in mempool_alloc()
SUNRPC: Handle ENOMEM in call_transmit_status()
SUNRPC: Handle low memory situations in call_status()
SUNRPC: svc_tcp_sendmsg() should handle errors from xdr_alloc_bvec()
SUNRPC: Ensure we flush any closed sockets before xs_xprt_free()
Venkateswara Naralasetty (1):
ath11k: fix kernel panic during unload/load ath11k modules
Vincent Mailhol (2):
can: etas_es58x: es58x_fd_rx_event_msg(): initialize rx_event_msg before calling es58x_check_msg_len() x86/bug: Prevent shadowing in __WARN_FLAGS
Vinod Koul (2):
spi: core: add dma_map_dev for __spi_unmap_msg()
dmaengine: Revert "dmaengine: shdma: Fix runtime PM imbalance on error"
Viresh Kumar (1):
opp: Expose of-node's name in debugfs
Waiman Long (1):
mm/sparsemem: fix 'mem_section' will never be NULL gcc 12 warning
Wang Yufen (1):
netlabel: fix out-of-bounds memory accesses
Wayne Chang (2):
usb: gadget: tegra-xudc: Do not program SPARAM
usb: gadget: tegra-xudc: Fix control endpoint's definitions
Wolfram Sang (1):
mmc: renesas_sdhi: don't overwrite TAP settings when HS400 tuning is complete
Xiang Chen (1):
scsi: hisi_sas: Limit users changing debugfs BIST count value
Xiaoke Wang (1):
staging: wfx: fix an error handling in wfx_init_common()
Xiaomeng Tong (3):
scsi: ufs: ufshpb: Fix a NULL check on list iterator
drbd: fix an invalid memory access caused by incorrect use of list iterator
perf: qcom_l2_pmu: fix an incorrect NULL check on list iterator
Xin Xiong (2):
drm/amd/amdgpu/amdgpu_cs: fix refcount leak of a dma_fence obj NFSv4.2: fix reference count leaks in _nfs42_proc_copy_notify()
Xiubo Li (2):
ceph: fix inode reference leakage in ceph_get_snapdir()
ceph: fix memory leak in ceph_readdir when note_last_dentry returns error
Yang Guang (3):
ptp: replace snprintf with sysfs_emit
scsi: mvsas: Replace snprintf() with sysfs_emit()
scsi: bfa: Replace snprintf() with sysfs_emit()
Yang Li (1):
mt76: mt7615: Fix assigning negative values to unsigned variable
Yang Zhong (1):
x86/fpu/xstate: Fix the ARCH_REQ_XCOMP_PERM implementation
Yann Gautier (1):
mmc: mmci: stm32: correctly check all elements of sg list
Yonghong Song (1):
libbpf: Fix build issue with llvm-readelf
Yongzhi Liu (3):
drm/amd/display: Fix memory leak
drm/bridge: Add missing pm_runtime_put_sync
drm/v3d: fix missing unlock
Zekun Shen (1):
ath5k: fix OOB in ath5k_eeprom_read_pcal_info_5111
Zhou Guanghui (1):
iommu/arm-smmu-v3: fix event handling soft lockup
Ziyang Xuan (1):
net/tls: fix slab-out-of-bounds bug in decrypt_internal
Greg Kroah-Hartman
maintainerDocumentation/virt/kvm/devices/vcpu.rst +1 -1
@@ -70,7 +70,7 @@ irqchip. -ENODEV PMUv3 not supported or GIC not initialized -ENXIO PMUv3 not properly configured or in-kernel irqchip not configured as required prior to calling this attribute - -EBUSY PMUv3 already initialized + -EBUSY PMUv3 already initialized or a VCPU has already run -EINVAL Invalid filter range ======= ======================================================
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 16 -SUBLEVEL = 19 +SUBLEVEL = 20 EXTRAVERSION = NAME = Gobble Gobble
arch/alpha/kernel/rtc.c +6 -1
@@ -80,7 +80,12 @@ init_rtc_epoch(void)static int alpha_rtc_read_time (struct device *dev,struct rtc_time *tm) { -mc146818_get_time (tm); +int ret =mc146818_get_time (tm); + +if (ret <0 ) { +dev_err_ratelimited (dev,"unable to read current time\n" ); +return ret; + }/* Adjust for non-default epochs. It's easier to depend on the generic __get_rtc_time and adjust the epoch here than create
arch/arm64/include/asm/cputype.h +2 -0
@@ -75,6 +75,7 @@#define ARM_CPU_PART_CORTEX_A77 0xD0D#define ARM_CPU_PART_NEOVERSE_V1 0xD40#define ARM_CPU_PART_CORTEX_A78 0xD41 +#define ARM_CPU_PART_CORTEX_A78AE 0xD42#define ARM_CPU_PART_CORTEX_X1 0xD44#define ARM_CPU_PART_CORTEX_A510 0xD46#define ARM_CPU_PART_CORTEX_A710 0xD47
@@ -123,6 +124,7 @@#define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77)#define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1)#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78) +#define MIDR_CORTEX_A78AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78AE)#define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1)#define MIDR_CORTEX_A510 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A510)#define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710)
arch/arm64/include/asm/kvm_host.h +1 -0
@@ -137,6 +137,7 @@ struct kvm_arch {/* Memory Tagging Extension enabled for the guest */ bool mte_enabled; +bool ran_once; };struct kvm_vcpu_fault_info {
arch/arm64/kernel/patching.c +2 -2
@@ -117,8 +117,8 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg)int i, ret =0 ;struct aarch64_insn_patch *pp = arg; -/* The first CPU becomes master */ -if (atomic_inc_return (&pp->cpu_count) ==1 ) { +/* The last CPU becomes master */ +if (atomic_inc_return (&pp->cpu_count) ==num_online_cpus ()) {for (i =0 ; ret ==0 && i < pp->insn_cnt; i++) ret =aarch64_insn_patch_text_nosync (pp->text_addrs[i], pp->new_insns[i]);
arch/arm64/kernel/proton-pack.c +1 -0
@@ -853,6 +853,7 @@ u8 spectre_bhb_loop_affected(int scope)if (scope ==SCOPE_LOCAL_CPU ) {static const struct midr_range spectre_bhb_k32_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A78 ), +MIDR_ALL_VERSIONS (MIDR_CORTEX_A78AE ),MIDR_ALL_VERSIONS (MIDR_CORTEX_A78C ),MIDR_ALL_VERSIONS (MIDR_CORTEX_X1 ),MIDR_ALL_VERSIONS (MIDR_CORTEX_A710 ),
arch/arm64/kernel/smp.c +1 -1
@@ -234,6 +234,7 @@ asmlinkage notrace void secondary_start_kernel(void)* Log the CPU info before it is marked online and might get read. */ cpuinfo_store_cpu (); +store_cpu_topology (cpu);/* * Enable GIC and timers.
@@ -242,7 +243,6 @@ asmlinkage notrace void secondary_start_kernel(void)ipi_setup (cpu); -store_cpu_topology (cpu);numa_add_cpu (cpu);/*
arch/arm64/kvm/arm.c +4 -0
@@ -629,6 +629,10 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu)if (kvm_vm_is_protected (kvm))kvm_call_hyp_nvhe (__pkvm_vcpu_init_traps, vcpu); +mutex_lock (&kvm->lock); + kvm->arch.ran_once = true; +mutex_unlock (&kvm->lock); +return ret; }
arch/arm64/kvm/pmu-emul.c +20 -13
@@ -921,6 +921,8 @@ static bool pmu_irq_is_valid(struct kvm *kvm, int irq)int kvm_arm_pmu_v3_set_attr (struct kvm_vcpu *vcpu,struct kvm_device_attr *attr) { +struct kvm *kvm = vcpu->kvm; +if (!kvm_vcpu_has_pmu (vcpu))return -ENODEV ;
@@ -938,7 +940,7 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)int __user *uaddr = (int __user *)(long )attr->addr;int irq; -if (!irqchip_in_kernel (vcpu->kvm)) +if (!irqchip_in_kernel (kvm))return -EINVAL ;if (get_user (irq, uaddr))
@@ -948,7 +950,7 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)if (!(irq_is_ppi (irq) ||irq_is_spi (irq)))return -EINVAL ; -if (!pmu_irq_is_valid (vcpu->kvm, irq)) +if (!pmu_irq_is_valid (kvm, irq))return -EINVAL ;if (kvm_arm_pmu_irq_initialized (vcpu))
@@ -963,7 +965,7 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)struct kvm_pmu_event_filter filter;int nr_events; - nr_events =kvm_pmu_event_mask (vcpu->kvm) +1 ; + nr_events =kvm_pmu_event_mask (kvm) +1 ; uaddr = (struct kvm_pmu_event_filter __user *)(long )attr->addr;
@@ -975,12 +977,17 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) filter.action != KVM_PMU_EVENT_DENY))return -EINVAL ; -mutex_lock (&vcpu->kvm->lock); +mutex_lock (&kvm->lock); + +if (kvm->arch.ran_once) { +mutex_unlock (&kvm->lock); +return -EBUSY ; + } -if (!vcpu->kvm->arch.pmu_filter) { - vcpu->kvm->arch.pmu_filter =bitmap_alloc (nr_events,GFP_KERNEL_ACCOUNT ); -if (!vcpu->kvm->arch.pmu_filter) { -mutex_unlock (&vcpu->kvm->lock); +if (!kvm->arch.pmu_filter) { + kvm->arch.pmu_filter =bitmap_alloc (nr_events,GFP_KERNEL_ACCOUNT ); +if (!kvm->arch.pmu_filter) { +mutex_unlock (&kvm->lock);return -ENOMEM ; }
@@ -991,17 +998,17 @@ int kvm_arm_pmu_v3_set_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr)* events, the default is to allow. */ if (filter.action ==KVM_PMU_EVENT_ALLOW ) -bitmap_zero (vcpu->kvm->arch.pmu_filter, nr_events); +bitmap_zero (kvm->arch.pmu_filter, nr_events);else -bitmap_fill (vcpu->kvm->arch.pmu_filter, nr_events); +bitmap_fill (kvm->arch.pmu_filter, nr_events); }if (filter.action ==KVM_PMU_EVENT_ALLOW ) -bitmap_set (vcpu->kvm->arch.pmu_filter, filter.base_event, filter.nevents); +bitmap_set (kvm->arch.pmu_filter, filter.base_event, filter.nevents);else -bitmap_clear (vcpu->kvm->arch.pmu_filter, filter.base_event, filter.nevents); +bitmap_clear (kvm->arch.pmu_filter, filter.base_event, filter.nevents); -mutex_unlock (&vcpu->kvm->lock); +mutex_unlock (&kvm->lock);return 0 ; }
arch/mips/boot/dts/ingenic/jz4780.dtsi +1 -1
@@ -470,7 +470,7 @@ efuse: efuse@d0 { #address-cells = <1>; #size-cells = <1>; - eth0_addr: eth-mac-addr@0x22 { + eth0_addr: eth-mac-addr@22 { reg = <0x22 0x6>; }; };
arch/mips/include/asm/setup.h +1 -1
@@ -16,7 +16,7 @@ static inline void setup_8250_early_printk_port(unsigned long base, unsigned int reg_shift, unsigned int timeout) {}#endif -extern void set_handler (unsigned long offset,void *addr,unsigned long len); +void set_handler (unsigned long offset,const void *addr,unsigned long len);extern void set_uncached_handler (unsigned long offset,void *addr,unsigned long len);typedef void (*vi_handler_t )(void );
arch/mips/kernel/traps.c +11 -11
@@ -2091,19 +2091,19 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs)* If no shadow set is selected then use the default handler * that does normal register saving and standard interrupt exit */ -extern char except_vec_vi, except_vec_vi_lui; -extern char except_vec_vi_ori, except_vec_vi_end; -extern char rollback_except_vec_vi; -char *vec_start =using_rollback_handler () ? - &rollback_except_vec_vi : &except_vec_vi; +extern const u8 except_vec_vi[], except_vec_vi_lui[]; +extern const u8 except_vec_vi_ori[], except_vec_vi_end[]; +extern const u8 rollback_except_vec_vi[]; +const u8 *vec_start =using_rollback_handler () ? + rollback_except_vec_vi : except_vec_vi;#if defined(CONFIG_CPU_MICROMIPS ) || defined(CONFIG_CPU_BIG_ENDIAN ) -const int lui_offset = &except_vec_vi_lui - vec_start +2 ; -const int ori_offset = &except_vec_vi_ori - vec_start +2 ; +const int lui_offset = except_vec_vi_lui - vec_start +2 ; +const int ori_offset = except_vec_vi_ori - vec_start +2 ;#else -const int lui_offset = &except_vec_vi_lui - vec_start; -const int ori_offset = &except_vec_vi_ori - vec_start; +const int lui_offset = except_vec_vi_lui - vec_start; +const int ori_offset = except_vec_vi_ori - vec_start;#endif -const int handler_len = &except_vec_vi_end - vec_start; +const int handler_len = except_vec_vi_end - vec_start;if (handler_len >VECTORSPACING ) {/*
@@ -2311,7 +2311,7 @@ void per_cpu_trap_init(bool is_boot_cpu) }/* Install CPU exception handler */ -void set_handler (unsigned long offset,void *addr,unsigned long size) +void set_handler (unsigned long offset,const void *addr,unsigned long size) {#ifdef CONFIG_CPU_MICROMIPS memcpy ((void *)(ebase + offset), ((unsigned char *)addr -1 ), size);
arch/mips/ralink/ill_acc.c +1 -0
@@ -61,6 +61,7 @@ static int __init ill_acc_of_setup(void) pdev =of_find_device_by_node (np);if (!pdev) {pr_err ("%pOFn: failed to lookup pdev\n" , np); +of_node_put (np);return -EINVAL ; }
arch/parisc/kernel/patch.c +11 -14
@@ -40,10 +40,7 @@ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags, *need_unmap =1 ;set_fixmap (fixmap,page_to_phys (page)); -if (flags) -raw_spin_lock_irqsave (&patch_lock, *flags); -else -__acquire (&patch_lock); +raw_spin_lock_irqsave (&patch_lock, *flags);return (void *) (__fix_to_virt (fixmap) + (uintaddr & ~PAGE_MASK )); }
@@ -52,10 +49,7 @@ static void __kprobes patch_unmap(int fixmap, unsigned long *flags) {clear_fixmap (fixmap); -if (flags) -raw_spin_unlock_irqrestore (&patch_lock, *flags); -else -__release (&patch_lock); +raw_spin_unlock_irqrestore (&patch_lock, *flags); }void __kprobes __patch_text_multiple (void *addr,u32 *insn,unsigned int len)
@@ -67,8 +61,9 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)int mapped;/* Make sure we don't have any aliases in cache */ -flush_kernel_vmap_range (addr, len); -flush_icache_range (start, end); +flush_kernel_dcache_range_asm (start, end); +flush_kernel_icache_range_asm (start, end); +flush_tlb_kernel_range (start, end); p = fixmap =patch_map (addr,FIX_TEXT_POKE0 , &flags, &mapped);
@@ -81,8 +76,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)* We're crossing a page boundary, so * need to remap */ -flush_kernel_vmap_range ((void *)fixmap, - (p-fixmap) *sizeof (*p)); +flush_kernel_dcache_range_asm ((unsigned long )fixmap, + (unsigned long )p); +flush_tlb_kernel_range ((unsigned long )fixmap, + (unsigned long )p);if (mapped)patch_unmap (FIX_TEXT_POKE0 , &flags); p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags,
@@ -90,10 +87,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len) } } -flush_kernel_vmap_range ((void *)fixmap, (p-fixmap) *sizeof (*p)); +flush_kernel_dcache_range_asm ((unsigned long )fixmap, (unsigned long )p); +flush_tlb_kernel_range ((unsigned long )fixmap, (unsigned long )p);if (mapped)patch_unmap (FIX_TEXT_POKE0 , &flags); -flush_icache_range (start, end); }void __kprobes __patch_text (void *addr,u32 insn)
arch/powerpc/boot/dts/fsl/t104xrdb.dtsi +2 -2
@@ -139,12 +139,12 @@ pca9546@77 { fman@400000 { ethernet@e6000 { phy-handle = <&phy_rgmii_0>; - phy-connection-type = "rgmii"; + phy-connection-type = "rgmii-id"; }; ethernet@e8000 { phy-handle = <&phy_rgmii_1>; - phy-connection-type = "rgmii"; + phy-connection-type = "rgmii-id"; }; mdio0: mdio@fc000 {
arch/powerpc/include/asm/interrupt.h +1 -1
@@ -567,7 +567,7 @@ DECLARE_INTERRUPT_HANDLER_RAW(do_slb_fault);DECLARE_INTERRUPT_HANDLER (do_bad_slb_fault);/* hash_utils.c */ -DECLARE_INTERRUPT_HANDLER_RAW (do_hash_fault); +DECLARE_INTERRUPT_HANDLER (do_hash_fault);/* fault.c */ DECLARE_INTERRUPT_HANDLER (do_page_fault);
arch/powerpc/include/asm/page.h +5 -1
@@ -132,7 +132,11 @@ static inline bool pfn_valid(unsigned long pfn)#define virt_to_page (kaddr) pfn_to_page(virt_to_pfn(kaddr))#define pfn_to_kaddr (pfn) __va((pfn) << PAGE_SHIFT) -#define virt_addr_valid (kaddr) pfn_valid(virt_to_pfn(kaddr)) +#define virt_addr_valid (vaddr) ({ \ + unsigned long _addr = (unsigned long)vaddr; \ + _addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \ + pfn_valid(virt_to_pfn(_addr)); \ +})/* * On Book-E parts we need __va to parse the device tree and we can't
arch/powerpc/kernel/rtas.c +6 -0
@@ -1235,6 +1235,12 @@ int __init early_init_dt_scan_rtas(unsigned long node, entryp =of_get_flat_dt_prop (node,"linux,rtas-entry" ,NULL ); sizep =of_get_flat_dt_prop (node,"rtas-size" ,NULL ); +#ifdef CONFIG_PPC64 +/* need this feature to decide the crashkernel offset */ +if (of_get_flat_dt_prop (node,"ibm,hypertas-functions" ,NULL )) + powerpc_firmware_features |=FW_FEATURE_LPAR ; +#endif +if (basep && entryp && sizep) { rtas.base = *basep; rtas.entry = *entryp;
arch/powerpc/kernel/secvar-sysfs.c +6 -3
@@ -26,15 +26,18 @@ static ssize_t format_show(struct kobject *kobj, struct kobj_attribute *attr,const char *format; node =of_find_compatible_node (NULL ,NULL ,"ibm,secvar-backend" ); -if (!of_device_is_available (node)) -return -ENODEV ; +if (!of_device_is_available (node)) { + rc = -ENODEV ; + goto out; + } rc =of_property_read_string (node,"format" , &format);if (rc) -return rc; + goto out; rc =sprintf (buf,"%s\n" , format); +out:of_node_put (node);return rc;
arch/powerpc/kexec/core.c +11 -4
@@ -134,11 +134,18 @@ void __init reserve_crashkernel(void)if (!crashk_res.start) {#ifdef CONFIG_PPC64 /* -* On 64bit we split the RMO in half but cap it at half of -* a small SLB (128MB) since the crash kernel needs to place -* itself and some stacks to be in the first segment. +* On the LPAR platform place the crash kernel to mid of +* RMA size (512MB or more) to ensure the crash kernel +* gets enough space to place itself and some stack to be +* in the first segment. At the same time normal kernel +* also get enough space to allocate memory for essential +* system resource in the first segment. Keep the crash +* kernel starts at 128MB offset on other platforms. */ - crashk_res.start =min (0x8000000ULL , (ppc64_rma_size /2 )); +if (firmware_has_feature (FW_FEATURE_LPAR )) + crashk_res.start = ppc64_rma_size /2 ; +else + crashk_res.start =min (0x8000000ULL , (ppc64_rma_size /2 ));#else crashk_res.start =KDUMP_KERNELBASE ;#endif
arch/powerpc/kvm/book3s_64_entry.S +8 -2
@@ -407,10 +407,16 @@ END_FTR_SECTION_IFSET(CPU_FTR_DAWR1) */ ld r10,HSTATE_SCRATCH0(r13) cmpwi r10,BOOK3S_INTERRUPT_MACHINE_CHECK - beq machine_check_common + beq .Lcall_machine_check_common cmpwi r10,BOOK3S_INTERRUPT_SYSTEM_RESET - beq system_reset_common + beq .Lcall_system_reset_common b . + +.Lcall_machine_check_common: + b machine_check_common + +.Lcall_system_reset_common: + b system_reset_common #endif
arch/powerpc/mm/book3s64/hash_utils.c +8 -46
84 lines not on this page · raw message
arch/powerpc/mm/mem.c +1 -1
@@ -256,7 +256,7 @@ void __init mem_init(void)#endif high_memory = (void *)__va (max_low_pfn *PAGE_SIZE ); -set_max_mapnr (max_low_pfn); +set_max_mapnr (max_pfn);kasan_late_init ();
arch/powerpc/mm/pageattr.c +13 -19
@@ -15,12 +15,14 @@#include <asm/pgtable.h> +static pte_basic_t pte_update_delta (pte_t *ptep,unsigned long addr, +unsigned long old,unsigned long new) +{ +return pte_update (&init_mm, addr, ptep, old & ~new, new & ~old,0 ); +} +/* -* Updates the attributes of a page in three steps: -* -* 1. take the page_table_lock -* 2. install the new entry with the updated attributes -* 3. flush the TLB +* Updates the attributes of a page atomically. * * This sequence is safe against concurrent updates, and also allows updating the * attributes of a page currently being executed or accessed.
@@ -28,25 +30,21 @@static int change_page_attr (pte_t *ptep,unsigned long addr,void *data) {long action = (long )data; -pte_t pte; -spin_lock (&init_mm.page_table_lock); - - pte =ptep_get (ptep); - -/* modify the PTE bits as desired, then apply */ +/* modify the PTE bits as desired */ switch (action) {case SET_MEMORY_RO : - pte =pte_wrprotect (pte); +/* Don't clear DIRTY bit */ +pte_update_delta (ptep, addr, _PAGE_KERNEL_RW & ~_PAGE_DIRTY, _PAGE_KERNEL_RO);break ;case SET_MEMORY_RW : - pte =pte_mkwrite (pte_mkdirty (pte)); +pte_update_delta (ptep, addr, _PAGE_KERNEL_RO, _PAGE_KERNEL_RW);break ;case SET_MEMORY_NX : - pte =pte_exprotect (pte); +pte_update_delta (ptep, addr, _PAGE_KERNEL_ROX, _PAGE_KERNEL_RO);break ;case SET_MEMORY_X : - pte =pte_mkexec (pte); +pte_update_delta (ptep, addr, _PAGE_KERNEL_RO, _PAGE_KERNEL_ROX);break ;case SET_MEMORY_NP :pte_update (&init_mm, addr, ptep, _PAGE_PRESENT,0 ,0 );
@@ -59,16 +57,12 @@ static int change_page_attr(pte_t *ptep, unsigned long addr, void *data)break ; } -pte_update (&init_mm, addr, ptep, ~0UL ,pte_val (pte),0 ); -/* See ptesync comment in radix__set_pte_at() */ if (radix_enabled ()) asmvolatile ("ptesync" : : :"memory" );flush_tlb_kernel_range (addr, addr +PAGE_SIZE ); -spin_unlock (&init_mm.page_table_lock); -return 0 ; }
arch/powerpc/perf/callchain.h +1 -8
@@ -2,7 +2,6 @@#ifndef _POWERPC_PERF_CALLCHAIN_H#define _POWERPC_PERF_CALLCHAIN_H -int read_user_stack_slow (const void __user *ptr,void *buf,int nb);void perf_callchain_user_64 (struct perf_callchain_entry_ctx *entry,struct pt_regs *regs); void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
@@ -26,17 +25,11 @@ static inline int __read_user_stack(const void __user *ptr, void *ret, size_t size) {unsigned long addr = (unsigned long )ptr; -int rc;if (addr >TASK_SIZE - size || (addr & (size -1 )))return -EFAULT ; - rc =copy_from_user_nofault (ret, ptr, size); - -if (IS_ENABLED (CONFIG_PPC64 ) && !radix_enabled () && rc) -return read_user_stack_slow (ptr, ret, size); - -return rc; +return copy_from_user_nofault (ret, ptr, size); }#endif /* _POWERPC_PERF_CALLCHAIN_H */
arch/powerpc/perf/callchain_64.c +0 -27
@@ -18,33 +18,6 @@#include "callchain.h" -/* -* On 64-bit we don't want to invoke hash_page on user addresses from -* interrupt context, so if the access faults, we read the page tables -* to find which page (if any) is mapped and access it directly. Radix -* has no need for this so it doesn't use read_user_stack_slow. -*/ -int read_user_stack_slow (const void __user *ptr,void *buf,int nb) -{ - -unsigned long addr = (unsigned long ) ptr; -unsigned long offset; -struct page *page; -void *kaddr; - -if (get_user_page_fast_only (addr,FOLL_WRITE , &page)) { - kaddr =page_address (page); - -/* align address to page boundary */ - offset = addr & ~PAGE_MASK ; - -memcpy (buf, kaddr + offset, nb); -put_page (page); -return 0 ; - } -return -EFAULT ; -} -static int read_user_stack_64 (const unsigned long __user *ptr,unsigned long *ret) {return __read_user_stack (ptr, ret,sizeof (*ret));
arch/powerpc/platforms/Kconfig.cputype +2 -1
@@ -111,6 +111,7 @@ config PPC_BOOK3S_64 config PPC_BOOK3E_64 bool "Embedded processors" + select PPC_FSL_BOOK3E select PPC_FPU # Make it a choice ? select PPC_SMP_MUXED_IPI select PPC_DOORBELL
@@ -287,7 +288,7 @@ config FSL_BOOKE config PPC_FSL_BOOK3E bool select ARCH_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64 - select FSL_EMB_PERFMON + imply FSL_EMB_PERFMON select PPC_SMP_MUXED_IPI select PPC_DOORBELL default y if FSL_BOOKE
arch/riscv/lib/memmove.S +310 -58
374 lines not on this page · raw message
arch/um/include/asm/xor.h +3 -1
@@ -4,8 +4,10 @@#ifdef CONFIG_64BIT #undef CONFIG_X86_32 +#define TT_CPU_INF_XOR_DEFAULT (AVX_SELECT(&xor_block_sse_pf64))#else #define CONFIG_X86_32 1 +#define TT_CPU_INF_XOR_DEFAULT (AVX_SELECT(&xor_block_8regs))#endif #include <asm/cpufeature.h>
@@ -16,7 +18,7 @@#undef XOR_SELECT_TEMPLATE/* pick an arbitrary one - measuring isn't possible with inf-cpu */ #define XOR_SELECT_TEMPLATE (x) \ - (time_travel_mode == TT_MODE_INFCPU ? &xor_block_8regs : NULL) + (time_travel_mode == TT_MODE_INFCPU ? TT_CPU_INF_XOR_DEFAULT : x))#endif #endif
arch/x86/Kconfig +5 -0
@@ -2827,6 +2827,11 @@ config IA32_AOUT config X86_X32 bool "x32 ABI for 64-bit mode" depends on X86_64 + # llvm-objcopy does not convert x86_64 .note.gnu.property or + # compressed debug sections to x86_x32 properly: + # https://github.com/ClangBuiltLinux/linux/issues/514 + # https://github.com/ClangBuiltLinux/linux/issues/1141 + depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm) help Include code to run binaries for the x32 native 32-bit ABI for 64-bit processors. An x32 process gets access to the
arch/x86/events/intel/core.c +6 -2
@@ -281,7 +281,7 @@ static struct extra_reg intel_spr_extra_regs[] __read_mostly = {INTEL_UEVENT_EXTRA_REG (0x012a ,MSR_OFFCORE_RSP_0 ,0x3fffffffffull ,RSP_0 ),INTEL_UEVENT_EXTRA_REG (0x012b ,MSR_OFFCORE_RSP_1 ,0x3fffffffffull ,RSP_1 ),INTEL_UEVENT_PEBS_LDLAT_EXTRA_REG (0x01cd ), -INTEL_UEVENT_EXTRA_REG (0x01c6 ,MSR_PEBS_FRONTEND ,0x7fff17 ,FE ), +INTEL_UEVENT_EXTRA_REG (0x01c6 ,MSR_PEBS_FRONTEND ,0x7fff1f ,FE ),INTEL_UEVENT_EXTRA_REG (0x40ad ,MSR_PEBS_FRONTEND ,0x7 ,FE ),INTEL_UEVENT_EXTRA_REG (0x04c2 ,MSR_PEBS_FRONTEND ,0x8 ,FE ),EVENT_EXTRA_END
@@ -5521,7 +5521,11 @@ static void intel_pmu_check_event_constraints(struct event_constraint *event_con/* Disabled fixed counters which are not in CPUID */ c->idxmsk64 &= intel_ctrl; -if (c->idxmsk64 !=INTEL_PMC_MSK_FIXED_REF_CYCLES ) +/* +* Don't extend the pseudo-encoding to the +* generic counters +*/ +if (!use_fixed_pseudo_encoding (c->code)) c->idxmsk64 |= (1ULL << num_counters) -1 ; } c->idxmsk64 &=
arch/x86/include/asm/bug.h +2 -2
@@ -77,9 +77,9 @@ do { \*/ #define __WARN_FLAGS (flags) \ do { \ - __auto_type f = BUGFLAG_WARNING|(flags); \ + __auto_type __flags = BUGFLAG_WARNING|(flags); \ instrumentation_begin(); \ - _BUG_FLAGS(ASM_UD2, f, ASM_REACHABLE); \ + _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE); \ instrumentation_end(); \ } while (0)
arch/x86/include/asm/irq_stack.h +2 -1
@@ -99,7 +99,8 @@ }#define ASM_CALL_ARG0 \ - "call %P[__func] \n" + "call %P[__func] \n" \ + ASM_REACHABLE#define ASM_CALL_ARG1 \ "movq %[arg1], %%rdi \n" \
arch/x86/include/asm/kvm_host.h +1 -0
@@ -503,6 +503,7 @@ struct kvm_pmu {u64 global_ctrl_mask;u64 global_ovf_ctrl_mask;u64 reserved_bits; +u64 raw_event_mask;u8 version;struct kvm_pmc gp_counters[INTEL_PMC_MAX_GENERIC ];struct kvm_pmc fixed_counters[INTEL_PMC_MAX_FIXED ];
arch/x86/include/asm/msi.h +11 -8
@@ -12,14 +12,17 @@ int pci_msi_prepare(struct irq_domain *domain, struct device *dev, int nvec,/* Structs and defines for the X86 specific MSI message format */ typedef struct x86_msi_data { -u32 vector :8 , - delivery_mode :3 , - dest_mode_logical :1 , - reserved :2 , - active_low :1 , - is_level :1 ; - -u32 dmar_subhandle; +union { +struct { +u32 vector :8 , + delivery_mode :3 , + dest_mode_logical :1 , + reserved :2 , + active_low :1 , + is_level :1 ; + }; +u32 dmar_subhandle; + }; } __attribute__ ((packed))arch_msi_msg_data_t ;#define arch_msi_msg_data x86_msi_data
arch/x86/include/asm/perf_event.h +5 -0
@@ -241,6 +241,11 @@ struct x86_pmu_capability {#define INTEL_PMC_IDX_FIXED_SLOTS (INTEL_PMC_IDX_FIXED + 3)#define INTEL_PMC_MSK_FIXED_SLOTS (1ULL << INTEL_PMC_IDX_FIXED_SLOTS) +static inline bool use_fixed_pseudo_encoding (u64 code) +{ +return !(code &0xff ); +} +/* * We model BTS tracing as another fixed-mode PMC. *
arch/x86/kernel/fpu/xstate.c +1 -1
@@ -1626,7 +1626,7 @@ static int __xstate_request_perm(u64 permitted, u64 requested)return ret;/* Pairs with the READ_ONCE() in xstate_get_group_perm() */ -WRITE_ONCE (fpu->perm.__state_perm, requested); +WRITE_ONCE (fpu->perm.__state_perm, mask);/* Protected by sighand lock */ fpu->perm.__state_size = ksize; fpu->perm.__user_state_size = usize;
arch/x86/kernel/hpet.c +6 -2
@@ -1435,8 +1435,12 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)hpet_rtc_timer_reinit ();memset (&curr_time,0 ,sizeof (struct rtc_time )); -if (hpet_rtc_flags & (RTC_UIE |RTC_AIE )) -mc146818_get_time (&curr_time); +if (hpet_rtc_flags & (RTC_UIE |RTC_AIE )) { +if (unlikely (mc146818_get_time (&curr_time) <0 )) { +pr_err_ratelimited ("unable to read current time from RTC\n" ); +return IRQ_HANDLED ; + } + }if (hpet_rtc_flags &RTC_UIE && curr_time.tm_sec != hpet_prev_update_sec) {
arch/x86/kernel/static_call.c +2 -3
@@ -12,10 +12,9 @@ enum insn_type { };/* -* data16 data16 xorq %rax, %rax - a single 5 byte instruction that clears %rax -* The REX.W cancels the effect of any data16. +* cs cs cs xorl %eax, %eax - a single 5 byte instruction that clears %[er]ax */ -static const u8 xor5rax[] = {0x66 ,0x66 ,0x48 ,0x31 ,0xc0 }; +static const u8 xor5rax[] = {0x2e ,0x2e ,0x2e ,0x31 ,0xc0 };static void __ref __static_call_transform (void *insn,enum insn_type type,void *func) {
arch/x86/kvm/emulate.c +3 -1
@@ -3514,8 +3514,10 @@ static int em_rdpid(struct x86_emulate_ctxt *ctxt) {u64 tsc_aux =0 ; -if (ctxt->ops->get_msr (ctxt,MSR_TSC_AUX , &tsc_aux)) +if (!ctxt->ops->guest_has_rdpid (ctxt))return emulate_ud (ctxt); + + ctxt->ops->get_msr (ctxt,MSR_TSC_AUX , &tsc_aux); ctxt->dst.val = tsc_aux;return X86EMUL_CONTINUE ; }
arch/x86/kvm/kvm_emulate.h +1 -0
@@ -226,6 +226,7 @@ struct x86_emulate_ops {bool (*guest_has_long_mode)(struct x86_emulate_ctxt *ctxt);bool (*guest_has_movbe)(struct x86_emulate_ctxt *ctxt);bool (*guest_has_fxsr)(struct x86_emulate_ctxt *ctxt); +bool (*guest_has_rdpid)(struct x86_emulate_ctxt *ctxt);void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt,bool masked);
arch/x86/kvm/pmu.c +7 -11
@@ -96,8 +96,7 @@ static void kvm_perf_overflow_intr(struct perf_event *perf_event,static void pmc_reprogram_counter (struct kvm_pmc *pmc,u32 type,u64 config,bool exclude_user, -bool exclude_kernel,bool intr, -bool in_tx,bool in_tx_cp) +bool exclude_kernel,bool intr) {struct perf_event *event;struct perf_event_attr attr = {
@@ -113,16 +112,14 @@ static void pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type, attr.sample_period =get_sample_period (pmc, pmc->counter); -if (in_tx) - attr.config |=HSW_IN_TX ; -if (in_tx_cp) { +if ((attr.config &HSW_IN_TX_CHECKPOINTED ) && +guest_cpuid_is_intel (pmc->vcpu)) {/* * HSW_IN_TX_CHECKPOINTED is not supported with nonzero * period. Just clear the sample period so at least * allocating the counter doesn't fail. */ attr.sample_period =0 ; - attr.config |=HSW_IN_TX_CHECKPOINTED ; } event = perf_event_create_kernel_counter(&attr, -1, current,
@@ -178,6 +175,7 @@ void reprogram_gp_counter(struct kvm_pmc *pmc, u64 eventsel)struct kvm *kvm = pmc->vcpu->kvm;struct kvm_pmu_event_filter *filter;int i; +struct kvm_pmu *pmu =vcpu_to_pmu (pmc->vcpu);bool allow_event = true;if (eventsel &ARCH_PERFMON_EVENTSEL_PIN_CONTROL )
@@ -217,7 +215,7 @@ void reprogram_gp_counter(struct kvm_pmc *pmc, u64 eventsel) }if (type ==PERF_TYPE_RAW ) - config = eventsel &AMD64_RAW_EVENT_MASK ; + config = eventsel & pmu->raw_event_mask;if (pmc->current_config == eventsel &&pmc_resume_counter (pmc))return ;
@@ -228,9 +226,7 @@ void reprogram_gp_counter(struct kvm_pmc *pmc, u64 eventsel)pmc_reprogram_counter (pmc, type, config, !(eventsel &ARCH_PERFMON_EVENTSEL_USR ), !(eventsel &ARCH_PERFMON_EVENTSEL_OS ), - eventsel &ARCH_PERFMON_EVENTSEL_INT , - (eventsel &HSW_IN_TX ), - (eventsel &HSW_IN_TX_CHECKPOINTED )); + eventsel &ARCH_PERFMON_EVENTSEL_INT ); }EXPORT_SYMBOL_GPL (reprogram_gp_counter);
@@ -266,7 +262,7 @@ void reprogram_fixed_counter(struct kvm_pmc *pmc, u8 ctrl, int idx) kvm_x86_ops.pmu_ops->find_fixed_event (idx), !(en_field &0x2 ),/* exclude user */ !(en_field &0x1 ),/* exclude kernel */ - pmi, false, false); + pmi); }EXPORT_SYMBOL_GPL (reprogram_fixed_counter);
arch/x86/kvm/svm/avic.c +1 -6
@@ -949,15 +949,10 @@ avic_update_iommu_vcpu_affinity(struct kvm_vcpu *vcpu, int cpu, bool r)void avic_vcpu_load (struct kvm_vcpu *vcpu,int cpu) {u64 entry; -/* ID = 0xff (broadcast), ID > 0xff (reserved) */ int h_physical_id =kvm_cpu_get_apicid (cpu);struct vcpu_svm *svm =to_svm (vcpu); -/* -* Since the host physical APIC id is 8 bits, -* we can support host APIC ID upto 255. -*/ -if (WARN_ON (h_physical_id >AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK )) +if (WARN_ON (h_physical_id & ~AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK ))return ; entry =READ_ONCE (*(svm->avic_physical_id_cache));
arch/x86/kvm/svm/pmu.c +4 -5
@@ -260,12 +260,10 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)/* MSR_EVNTSELn */ pmc =get_gp_pmc_amd (pmu, msr,PMU_TYPE_EVNTSEL );if (pmc) { -if (data == pmc->eventsel) -return 0 ; -if (!(data & pmu->reserved_bits)) { + data &= ~pmu->reserved_bits; +if (data != pmc->eventsel)reprogram_gp_counter (pmc, data); -return 0 ; - } +return 0 ; }return 1 ;
@@ -282,6 +280,7 @@ static void amd_pmu_refresh(struct kvm_vcpu *vcpu) pmu->counter_bitmask[KVM_PMC_GP ] = ((u64 )1 <<48 ) -1 ; pmu->reserved_bits =0xfffffff000280000ull ; + pmu->raw_event_mask =AMD64_RAW_EVENT_MASK ; pmu->version =1 ;/* not applicable to AMD; but clean them to prevent any fall out */ pmu->counter_bitmask[KVM_PMC_FIXED ] =0 ;
arch/x86/kvm/svm/svm.h +3 -1
@@ -22,6 +22,8 @@#include <asm/svm.h> #include <asm/sev-common.h> +#include "kvm_cache_regs.h" +#define __sme_page_pa (x) __sme_set(page_to_pfn(x) << PAGE_SHIFT)#define IOPM_SIZE PAGE_SIZE * 3
@@ -508,7 +510,7 @@ extern struct kvm_x86_nested_ops svm_nested_ops;#define AVIC_LOGICAL_ID_ENTRY_VALID_BIT 31#define AVIC_LOGICAL_ID_ENTRY_VALID_MASK (1 << 31) -#define AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK (0xFFULL) +#define AVIC_PHYSICAL_ID_ENTRY_HOST_PHYSICAL_ID_MASK GENMASK_ULL(11, 0)#define AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK (0xFFFFFFFFFFULL << 12)#define AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK (1ULL << 62)#define AVIC_PHYSICAL_ID_ENTRY_VALID_MASK (1ULL << 63)
arch/x86/kvm/svm/svm_onhyperv.c +0 -1
@@ -4,7 +4,6 @@*/ #include <linux/kvm_host.h> -#include "kvm_cache_regs.h" #include <asm/mshyperv.h>
arch/x86/kvm/vmx/pmu_intel.c +11 -3
@@ -395,6 +395,7 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)struct kvm_pmc *pmc;u32 msr = msr_info->index;u64 data = msr_info->data; +u64 reserved_bits;switch (msr) {case MSR_CORE_PERF_FIXED_CTR_CTRL :
@@ -449,7 +450,11 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) }else if ((pmc =get_gp_pmc (pmu, msr,MSR_P6_EVNTSEL0 ))) {if (data == pmc->eventsel)return 0 ; -if (!(data & pmu->reserved_bits)) { + reserved_bits = pmu->reserved_bits; +if ((pmc->idx ==2 ) && + (pmu->raw_event_mask &HSW_IN_TX_CHECKPOINTED )) + reserved_bits ^=HSW_IN_TX_CHECKPOINTED ; +if (!(data & reserved_bits)) {reprogram_gp_counter (pmc, data);return 0 ; }
@@ -476,6 +481,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) pmu->counter_bitmask[KVM_PMC_FIXED ] =0 ; pmu->version =0 ; pmu->reserved_bits =0xffffffff00200000ull ; + pmu->raw_event_mask =X86_RAW_EVENT_MASK ; entry =kvm_find_cpuid_entry (vcpu,0xa ,0 );if (!entry)
@@ -522,8 +528,10 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) entry =kvm_find_cpuid_entry (vcpu,7 ,0 );if (entry && (boot_cpu_has (X86_FEATURE_HLE ) ||boot_cpu_has (X86_FEATURE_RTM )) && - (entry->ebx & (X86_FEATURE_HLE |X86_FEATURE_RTM ))) - pmu->reserved_bits ^=HSW_IN_TX |HSW_IN_TX_CHECKPOINTED ; + (entry->ebx & (X86_FEATURE_HLE |X86_FEATURE_RTM ))) { + pmu->reserved_bits ^=HSW_IN_TX ; + pmu->raw_event_mask |= (HSW_IN_TX |HSW_IN_TX_CHECKPOINTED ); + }bitmap_set (pmu->all_valid_pmc_idx,0 , pmu->nr_arch_gp_counters);
arch/x86/kvm/x86.c +6 -0
@@ -7466,6 +7466,11 @@ static bool emulator_guest_has_fxsr(struct x86_emulate_ctxt *ctxt)return guest_cpuid_has (emul_to_vcpu (ctxt),X86_FEATURE_FXSR ); } +static bool emulator_guest_has_rdpid (struct x86_emulate_ctxt *ctxt) +{ +return guest_cpuid_has (emul_to_vcpu (ctxt),X86_FEATURE_RDPID ); +} +static ulong emulator_read_gpr (struct x86_emulate_ctxt *ctxt,unsigned reg) {return kvm_register_read_raw (emul_to_vcpu (ctxt), reg);
@@ -7548,6 +7553,7 @@ static const struct x86_emulate_ops emulate_ops = { .guest_has_long_mode = emulator_guest_has_long_mode, .guest_has_movbe = emulator_guest_has_movbe, .guest_has_fxsr = emulator_guest_has_fxsr, + .guest_has_rdpid = emulator_guest_has_rdpid, .set_nmi_mask = emulator_set_nmi_mask, .get_hflags = emulator_get_hflags, .exiting_smm = emulator_exiting_smm,
arch/x86/mm/tlb.c +5 -32
@@ -854,13 +854,11 @@ static void flush_tlb_func(void *info) nr_invalidate); } -static bool tlb_is_not_lazy (int cpu) +static bool tlb_is_not_lazy (int cpu,void *data) {return !per_cpu (cpu_tlbstate_shared.is_lazy, cpu); } -static DEFINE_PER_CPU(cpumask_t, flush_tlb_mask); - DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state_shared, cpu_tlbstate_shared);EXPORT_PER_CPU_SYMBOL (cpu_tlbstate_shared);
@@ -889,36 +887,11 @@ STATIC_NOPV void native_flush_tlb_multi(const struct cpumask *cpumask,* up on the new contents of what used to be page tables, while * doing a speculative memory access. */ -if (info->freed_tables) { +if (info->freed_tables)on_each_cpu_mask (cpumask, flush_tlb_func, (void *)info, true); - }else { -/* -* Although we could have used on_each_cpu_cond_mask(), -* open-coding it has performance advantages, as it eliminates -* the need for indirect calls or retpolines. In addition, it -* allows to use a designated cpumask for evaluating the -* condition, instead of allocating one. -* -* This code works under the assumption that there are no nested -* TLB flushes, an assumption that is already made in -* flush_tlb_mm_range(). -* -* cond_cpumask is logically a stack-local variable, but it is -* more efficient to have it off the stack and not to allocate -* it on demand. Preemption is disabled and this code is -* non-reentrant. -*/ -struct cpumask *cond_cpumask =this_cpu_ptr (&flush_tlb_mask); -int cpu; - -cpumask_clear (cond_cpumask); - -for_each_cpu (cpu, cpumask) { -if (tlb_is_not_lazy (cpu)) -__cpumask_set_cpu (cpu, cond_cpumask); - } -on_each_cpu_mask (cond_cpumask, flush_tlb_func, (void *)info, true); - } +else +on_each_cpu_cond_mask (tlb_is_not_lazy, flush_tlb_func, + (void *)info,1 , cpumask); } void flush_tlb_multi(const struct cpumask *cpumask,
arch/x86/power/cpu.c +19 -2
@@ -40,7 +40,8 @@ static void msr_save_context(struct saved_context *ctxt)struct saved_msr *end = msr + ctxt->saved_msrs.num;while (msr < end) { - msr->valid = !rdmsrl_safe (msr->info.msr_no, &msr->info.reg.q); +if (msr->valid) +rdmsrl (msr->info.msr_no, msr->info.reg.q); msr++; } }
@@ -424,8 +425,10 @@ static int msr_build_context(const u32 *msr_id, const int num) }for (i = saved_msrs->num, j =0 ; i < total_num; i++, j++) { +u64 dummy; + msr_array[i].info.msr_no = msr_id[j]; - msr_array[i].valid = false; + msr_array[i].valid = !rdmsrl_safe (msr_id[j], &dummy); msr_array[i].info.reg.q =0 ; } saved_msrs->num = total_num;
@@ -500,10 +503,24 @@ static int pm_cpu_check(const struct x86_cpu_id *c)return ret; } +static void pm_save_spec_msr (void ) +{ +u32 spec_msr_id[] = { +MSR_IA32_SPEC_CTRL , +MSR_IA32_TSX_CTRL , +MSR_TSX_FORCE_ABORT , +MSR_IA32_MCU_OPT_CTRL , +MSR_AMD64_LS_CFG , + }; + +msr_build_context (spec_msr_id,ARRAY_SIZE (spec_msr_id)); +} +static int pm_check_save_msr (void ) {dmi_check_system (msr_save_dmi_table);pm_cpu_check (msr_save_cpu_table); +pm_save_spec_msr ();return 0 ; }
arch/x86/xen/smp_hvm.c +6 -0
@@ -19,6 +19,12 @@ static void __init xen_hvm_smp_prepare_boot_cpu(void)*/ xen_vcpu_setup (0 ); +/* +* Called again in case the kernel boots on vcpu >= MAX_VIRT_CPUS. +* Refer to comments in xen_hvm_init_time_ops(). +*/ +xen_hvm_init_time_ops (); +/* * The alternative logic (which patches the unlock/lock) runs before * the smp bootup up code is activated. Hence we need to set this up
arch/x86/xen/time.c +23 -1
@@ -558,6 +558,11 @@ static void xen_hvm_setup_cpu_clockevents(void)void __init xen_hvm_init_time_ops (void ) { +static bool hvm_time_initialized; + +if (hvm_time_initialized) +return ; +/* * vector callback is needed otherwise we cannot receive interrupts * on cpu > 0 and at this point we don't know how many cpus are
@@ -567,7 +572,22 @@ void __init xen_hvm_init_time_ops(void)return ;if (!xen_feature (XENFEAT_hvm_safe_pvclock)) { -pr_info ("Xen doesn't support pvclock on HVM, disable pv timer" ); +pr_info_once ("Xen doesn't support pvclock on HVM, disable pv timer" ); +return ; + } + +/* +* Only MAX_VIRT_CPUS 'vcpu_info' are embedded inside 'shared_info'. +* The __this_cpu_read(xen_vcpu) is still NULL when Xen HVM guest +* boots on vcpu >= MAX_VIRT_CPUS (e.g., kexec), To access +* __this_cpu_read(xen_vcpu) via xen_clocksource_read() will panic. +* +* The xen_hvm_init_time_ops() should be called again later after +* __this_cpu_read(xen_vcpu) is available. +*/ +if (!__this_cpu_read (xen_vcpu)) { +pr_info ("Delay xen_init_time_common() as kernel is running on vcpu=%d\n" , +xen_vcpu_nr (0 ));return ; }
@@ -577,6 +597,8 @@ void __init xen_hvm_init_time_ops(void) x86_cpuinit.setup_percpu_clockev = xen_hvm_setup_cpu_clockevents; x86_platform.set_wallclock = xen_set_wallclock; + + hvm_time_initialized = true; }#endif
arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi +4 -4
@@ -8,19 +8,19 @@ flash: flash@00000000 { reg = <0x00000000 0x08000000>; bank-width = <2>; device-width = <2>; - partition@0x0 { + partition@0 { label = "data"; reg = <0x00000000 0x06000000>; }; - partition@0x6000000 { + partition@6000000 { label = "boot loader area"; reg = <0x06000000 0x00800000>; }; - partition@0x6800000 { + partition@6800000 { label = "kernel image"; reg = <0x06800000 0x017e0000>; }; - partition@0x7fe0000 { + partition@7fe0000 { label = "boot environment"; reg = <0x07fe0000 0x00020000>; };
arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi +4 -4
@@ -8,19 +8,19 @@ flash: flash@08000000 { reg = <0x08000000 0x01000000>; bank-width = <2>; device-width = <2>; - partition@0x0 { + partition@0 { label = "boot loader area"; reg = <0x00000000 0x00400000>; }; - partition@0x400000 { + partition@400000 { label = "kernel image"; reg = <0x00400000 0x00600000>; }; - partition@0xa00000 { + partition@a00000 { label = "data"; reg = <0x00a00000 0x005e0000>; }; - partition@0xfe0000 { + partition@fe0000 { label = "boot environment"; reg = <0x00fe0000 0x00020000>; };
arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi +2 -2
@@ -8,11 +8,11 @@ flash: flash@08000000 { reg = <0x08000000 0x00400000>; bank-width = <2>; device-width = <2>; - partition@0x0 { + partition@0 { label = "boot loader area"; reg = <0x00000000 0x003f0000>; }; - partition@0x3f0000 { + partition@3f0000 { label = "boot environment"; reg = <0x003f0000 0x00010000>; };
drivers/ata/sata_dwc_460ex.c +5 -1
@@ -145,7 +145,11 @@ struct sata_dwc_device {#endif }; -#define SATA_DWC_QCMD_MAX 32 +/* +* Allow one extra special slot for commands and DMA management +* to account for libata internal commands. +*/ +#define SATA_DWC_QCMD_MAX (ATA_MAX_QUEUE + 1)struct sata_dwc_device_port {struct sata_dwc_device *hsdev;
drivers/base/power/trace.c +5 -1
@@ -120,7 +120,11 @@ static unsigned int read_magic_time(void)struct rtc_time time;unsigned int val; -mc146818_get_time (&time); +if (mc146818_get_time (&time) <0 ) { +pr_err ("Unable to read current time from RTC\n" ); +return 0 ; + } +pr_info ("RTC time: %ptRt, date: %ptRd\n" , &time, &time); val = time.tm_year;/* 100 years */ if (val >100 )
drivers/block/drbd/drbd_int.h +4 -4
@@ -1642,22 +1642,22 @@ struct sib_info { };void drbd_bcast_event (struct drbd_device *device,const struct sib_info *sib); -extern void notify_resource_state (struct sk_buff *, +extern int notify_resource_state (struct sk_buff *,unsigned int ,struct drbd_resource *,struct resource_info *,enum drbd_notification_type ); -extern void notify_device_state (struct sk_buff *, +extern int notify_device_state (struct sk_buff *,unsigned int ,struct drbd_device *,struct device_info *,enum drbd_notification_type ); -extern void notify_connection_state (struct sk_buff *, +extern int notify_connection_state (struct sk_buff *,unsigned int ,struct drbd_connection *,struct connection_info *,enum drbd_notification_type ); -extern void notify_peer_device_state(struct sk_buff *, +extern int notify_peer_device_state(struct sk_buff *, unsigned int, struct drbd_peer_device *, struct peer_device_info *,
drivers/block/drbd/drbd_main.c +2 -4
@@ -2791,12 +2791,12 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigif (init_submitter (device)) { err =ERR_NOMEM ; - goto out_idr_remove_vol; + goto out_idr_remove_from_resource; } err =add_disk (disk);if (err) - goto out_idr_remove_vol; + goto out_idr_remove_from_resource;/* inherit the connection state */ device->state.conn =first_connection (resource)->cstate;
@@ -2810,8 +2810,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigdrbd_debugfs_device_add (device);return NO_ERROR ; -out_idr_remove_vol: -idr_remove (&connection->peer_devices, vnr); out_idr_remove_from_resource:for_each_connection (connection, resource) { peer_device =idr_remove (&connection->peer_devices, vnr);
drivers/block/drbd/drbd_nl.c +25 -16
156 lines not on this page · raw message
drivers/block/drbd/drbd_state.c +9 -9
@@ -1537,7 +1537,7 @@ int drbd_bitmap_io_from_worker(struct drbd_device *device,return rv; } -void notify_resource_state_change (struct sk_buff *skb, +int notify_resource_state_change (struct sk_buff *skb,unsigned int seq,struct drbd_resource_state_change *resource_state_change,enum drbd_notification_type type)
@@ -1550,10 +1550,10 @@ void notify_resource_state_change(struct sk_buff *skb, .res_susp_fen = resource_state_change->susp_fen[NEW], }; -notify_resource_state (skb, seq, resource, &resource_info, type); +return notify_resource_state (skb, seq, resource, &resource_info, type); } -void notify_connection_state_change (struct sk_buff *skb, +int notify_connection_state_change (struct sk_buff *skb,unsigned int seq,struct drbd_connection_state_change *connection_state_change,enum drbd_notification_type type)
@@ -1564,10 +1564,10 @@ void notify_connection_state_change(struct sk_buff *skb, .conn_role = connection_state_change->peer_role[NEW], }; -notify_connection_state (skb, seq, connection, &connection_info, type); +return notify_connection_state (skb, seq, connection, &connection_info, type); } -void notify_device_state_change (struct sk_buff *skb, +int notify_device_state_change (struct sk_buff *skb,unsigned int seq,struct drbd_device_state_change *device_state_change,enum drbd_notification_type type)
@@ -1577,10 +1577,10 @@ void notify_device_state_change(struct sk_buff *skb, .dev_disk_state = device_state_change->disk_state[NEW], }; -notify_device_state (skb, seq, device, &device_info, type); +return notify_device_state (skb, seq, device, &device_info, type); } -void notify_peer_device_state_change (struct sk_buff *skb, +int notify_peer_device_state_change (struct sk_buff *skb,unsigned int seq,struct drbd_peer_device_state_change *p,enum drbd_notification_type type)
@@ -1594,7 +1594,7 @@ void notify_peer_device_state_change(struct sk_buff *skb, .peer_resync_susp_dependency = p->resync_susp_dependency[NEW], }; -notify_peer_device_state (skb, seq, peer_device, &peer_device_info, type); +return notify_peer_device_state (skb, seq, peer_device, &peer_device_info, type); }static void broadcast_state_change (struct drbd_state_change *state_change)
@@ -1602,7 +1602,7 @@ static void broadcast_state_change(struct drbd_state_change *state_change)struct drbd_resource_state_change *resource_state_change = &state_change->resource[0 ];bool resource_state_has_changed;unsigned int n_device, n_connection, n_peer_device, n_peer_devices; -void (*last_func)(struct sk_buff *,unsigned int ,void *, +int (*last_func)(struct sk_buff *,unsigned int ,void *,enum drbd_notification_type ) =NULL ;void *last_arg =NULL ;
drivers/block/drbd/drbd_state_change.h +4 -4
@@ -44,19 +44,19 @@ extern struct drbd_state_change *remember_old_state(struct drbd_resource *, gfp_extern void copy_old_to_new_state_change (struct drbd_state_change *);extern void forget_state_change (struct drbd_state_change *); -extern void notify_resource_state_change (struct sk_buff *, +extern int notify_resource_state_change (struct sk_buff *,unsigned int ,struct drbd_resource_state_change *,enum drbd_notification_type type); -extern void notify_connection_state_change (struct sk_buff *, +extern int notify_connection_state_change (struct sk_buff *,unsigned int ,struct drbd_connection_state_change *,enum drbd_notification_type type); -extern void notify_device_state_change (struct sk_buff *, +extern int notify_device_state_change (struct sk_buff *,unsigned int ,struct drbd_device_state_change *,enum drbd_notification_type type); -extern void notify_peer_device_state_change (struct sk_buff *, +extern int notify_peer_device_state_change (struct sk_buff *,unsigned int ,struct drbd_peer_device_state_change *,enum drbd_notification_type type);
drivers/char/virtio_console.c +4 -4
@@ -2245,7 +2245,7 @@ static struct virtio_driver virtio_rproc_serial = { .remove = virtcons_remove, }; -static int __init init (void ) +static int __init virtio_console_init (void ) {int err;
@@ -2280,7 +2280,7 @@ static int __init init(void)return err; } -static void __exit fini(void) +static void __exit virtio_console_fini(void) {reclaim_dma_bufs ();
@@ -2290,8 +2290,8 @@ static void __exit fini(void)class_destroy (pdrvdata.class);debugfs_remove_recursive (pdrvdata.debugfs_dir); } -module_init (init); -module_exit (fini); +module_init (virtio_console_init); +module_exit (virtio_console_fini);MODULE_DESCRIPTION ("Virtio console driver" );MODULE_LICENSE ("GPL" );
drivers/clk/clk-si5341.c +9 -7
@@ -798,6 +798,15 @@ static unsigned long si5341_output_clk_recalc_rate(struct clk_hw *hw,u32 r_divider;u8 r[3 ]; + err =regmap_read (output->data->regmap, +SI5341_OUT_CONFIG (output), &val); +if (err <0 ) +return err; + +/* If SI5341_OUT_CFG_RDIV_FORCE2 is set, r_divider is 2 */ +if (val &SI5341_OUT_CFG_RDIV_FORCE2 ) +return parent_rate /2 ; + err =regmap_bulk_read (output->data->regmap,SI5341_OUT_R_REG (output), r,3 );if (err <0 )
@@ -814,13 +823,6 @@ static unsigned long si5341_output_clk_recalc_rate(struct clk_hw *hw, r_divider +=1 ; r_divider <<=1 ; - err =regmap_read (output->data->regmap, -SI5341_OUT_CONFIG (output), &val); -if (err <0 ) -return err; - -if (val &SI5341_OUT_CFG_RDIV_FORCE2 ) - r_divider =2 ;return parent_rate / r_divider; }
drivers/clk/clk.c +24 -0
@@ -631,6 +631,24 @@ static void clk_core_get_boundaries(struct clk_core *core, *max_rate =min (*max_rate, clk_user->max_rate); } +static bool clk_core_check_boundaries (struct clk_core *core, +unsigned long min_rate, +unsigned long max_rate) +{ +struct clk *user; + +lockdep_assert_held (&prepare_lock); + +if (min_rate > core->max_rate || max_rate < core->min_rate) +return false; + +hlist_for_each_entry (user, &core->clks, clks_node) +if (min_rate > user->max_rate || max_rate < user->min_rate) +return false; + +return true; +} +void clk_hw_set_rate_range (struct clk_hw *hw,unsigned long min_rate,unsigned long max_rate) {
@@ -2347,6 +2365,11 @@ int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max) clk->min_rate = min; clk->max_rate = max; +if (!clk_core_check_boundaries (clk->core, min, max)) { + ret = -EINVAL ; + goto out; + } + rate =clk_core_get_rate_nolock (clk->core);if (rate < min || rate > max) {/*
@@ -2375,6 +2398,7 @@ int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max) } } +out:if (clk->exclusive_count)clk_core_rate_protect (clk->core);
drivers/clk/mediatek/clk-mt8192.c +30 -6
@@ -1236,9 +1236,17 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev) r =mtk_clk_register_gates (node, infra_clks,ARRAY_SIZE (infra_clks), clk_data);if (r) -return r; + goto free_clk_data; + + r =of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); +if (r) + goto free_clk_data; + +return r; -return of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); +free_clk_data: +mtk_free_clk_data (clk_data); +return r; }static int clk_mt8192_peri_probe (struct platform_device *pdev)
@@ -1253,9 +1261,17 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev) r =mtk_clk_register_gates (node, peri_clks,ARRAY_SIZE (peri_clks), clk_data);if (r) -return r; + goto free_clk_data; + + r =of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); +if (r) + goto free_clk_data; -return of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); +return r; + +free_clk_data: +mtk_free_clk_data (clk_data); +return r; }static int clk_mt8192_apmixed_probe (struct platform_device *pdev)
@@ -1271,9 +1287,17 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev)mtk_clk_register_plls (node, plls,ARRAY_SIZE (plls), clk_data); r =mtk_clk_register_gates (node, apmixed_clks,ARRAY_SIZE (apmixed_clks), clk_data);if (r) -return r; + goto free_clk_data; -return of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); + r =of_clk_add_provider (node, of_clk_src_onecell_get, clk_data); +if (r) + goto free_clk_data; + +return r; + +free_clk_data: +mtk_free_clk_data (clk_data); +return r; }static const struct of_device_id of_match_clk_mt8192[] = {
drivers/clk/rockchip/clk-rk3568.c +3 -3
@@ -1038,13 +1038,13 @@ static struct rockchip_clk_branch rk3568_clk_branches[] __initdata = { RK3568_CLKGATE_CON(20), 8, GFLAGS),GATE (HCLK_VOP ,"hclk_vop" ,"hclk_vo" ,0 ,RK3568_CLKGATE_CON (20 ),9 ,GFLAGS ), -COMPOSITE (DCLK_VOP0 ,"dclk_vop0" , hpll_vpll_gpll_cpll_p,CLK_SET_RATE_PARENT |CLK_SET_RATE_NO_REPARENT , +COMPOSITE (DCLK_VOP0 ,"dclk_vop0" , hpll_vpll_gpll_cpll_p,CLK_SET_RATE_NO_REPARENT ,RK3568_CLKSEL_CON (39 ),10 ,2 ,MFLAGS ,0 ,8 ,DFLAGS ,RK3568_CLKGATE_CON (20 ),10 ,GFLAGS ), -COMPOSITE (DCLK_VOP1 ,"dclk_vop1" , hpll_vpll_gpll_cpll_p,CLK_SET_RATE_PARENT |CLK_SET_RATE_NO_REPARENT , +COMPOSITE (DCLK_VOP1 ,"dclk_vop1" , hpll_vpll_gpll_cpll_p,CLK_SET_RATE_NO_REPARENT ,RK3568_CLKSEL_CON (40 ),10 ,2 ,MFLAGS ,0 ,8 ,DFLAGS ,RK3568_CLKGATE_CON (20 ),11 ,GFLAGS ), -COMPOSITE (DCLK_VOP2 ,"dclk_vop2" , hpll_vpll_gpll_cpll_p,0 , +COMPOSITE (DCLK_VOP2 ,"dclk_vop2" , hpll_vpll_gpll_cpll_p,CLK_SET_RATE_NO_REPARENT ,RK3568_CLKSEL_CON (41 ),10 ,2 ,MFLAGS ,0 ,8 ,DFLAGS ,RK3568_CLKGATE_CON (20 ),12 ,GFLAGS ), GATE(CLK_VOP_PWM, "clk_vop_pwm", "xin24m", 0,
drivers/clk/ti/clk.c +8 -5
@@ -131,7 +131,7 @@ int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops)void __init ti_dt_clocks_register (struct ti_dt_clk oclks[]) {struct ti_dt_clk *c; -struct device_node *node, *parent; +struct device_node *node, *parent, *child;struct clk *clk;struct of_phandle_args clkspec;char buf[64 ];
@@ -171,10 +171,13 @@ void __init ti_dt_clocks_register(struct ti_dt_clk oclks[]) node =of_find_node_by_name (NULL , buf);if (num_args && compat_mode) { parent = node; - node =of_get_child_by_name (parent,"clock" ); -if (!node) - node =of_get_child_by_name (parent,"clk" ); -of_node_put (parent); + child =of_get_child_by_name (parent,"clock" ); +if (!child) + child =of_get_child_by_name (parent,"clk" ); +if (child) { +of_node_put (parent); + node = child; + } } clkspec.np = node;
drivers/cpufreq/cppc_cpufreq.c +21 -22
80 lines not on this page · raw message
drivers/dma/sh/shdma-base.c +1 -3
@@ -115,10 +115,8 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx) ret =pm_runtime_get (schan->dev);spin_unlock_irq (&schan->chan_lock); -if (ret <0 ) { +if (ret <0 )dev_err (schan->dev,"%s(): GET = %d\n" , __func__, ret); -pm_runtime_put (schan->dev); - }pm_runtime_barrier (schan->dev);
drivers/gpio/gpiolib.c +19 -0
@@ -1368,6 +1368,16 @@ static int gpiochip_to_irq(struct gpio_chip *gc, unsigned int offset) {struct irq_domain *domain = gc->irq.domain; +#ifdef CONFIG_GPIOLIB_IRQCHIP +/* +* Avoid race condition with other code, which tries to lookup +* an IRQ before the irqchip has been properly registered, +* i.e. while gpiochip is still being brought up. +*/ +if (!gc->irq.initialized) +return -EPROBE_DEFER ; +#endif +if (!gpiochip_irqchip_irq_valid (gc, offset))return -ENXIO ;
@@ -1557,6 +1567,15 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,acpi_gpiochip_request_interrupts (gc); +/* +* Using barrier() here to prevent compiler from reordering +* gc->irq.initialized before initialization of above +* GPIO chip irq members. +*/ +barrier (); + + gc->irq.initialized = true; +return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +1 -0
@@ -1510,6 +1510,7 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data,return 0 ;default : +dma_fence_put (fence);return -EINVAL ; } }
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +1 -1
@@ -266,7 +266,7 @@ static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev,* adev->gfx.mec.num_pipe_per_mec * adev->gfx.mec.num_queue_per_pipe; -while (queue_bit-- >= 0) { +while (--queue_bit >= 0) { if (test_bit(queue_bit, adev->gfx.mec.queue_bitmap)) continue;
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +2 -1
@@ -1286,7 +1286,8 @@ void amdgpu_bo_release_notify(struct ttm_buffer_object *bo) !(abo->flags & AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE)) return; -dma_resv_lock (bo->base.resv,NULL ); +if (WARN_ON_ONCE (!dma_resv_trylock (bo->base.resv))) +return ; r =amdgpu_fill_buffer (abo,AMDGPU_POISON , bo->base.resv, &fence);if (!WARN_ON (r)) {
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +2 -2
@@ -569,8 +569,8 @@ static void vcn_v3_0_mc_resume_dpg_mode(struct amdgpu_device *adev, int inst_idx AMDGPU_GPU_PAGE_ALIGN(sizeof(struct amdgpu_fw_shared)), 0, indirect);/* VCN global tiling registers */ -WREG32_SOC15_DPG_MODE (0 ,SOC15_DPG_MODE_OFFSET ( -UVD ,0 , mmUVD_GFX10_ADDR_CONFIG), adev->gfx.config.gb_addr_config,0 , indirect); +WREG32_SOC15_DPG_MODE (inst_idx,SOC15_DPG_MODE_OFFSET ( +UVD , inst_idx, mmUVD_GFX10_ADDR_CONFIG), adev->gfx.config.gb_addr_config,0 , indirect); }static void vcn_v3_0_disable_static_power_gating (struct amdgpu_device *adev,int inst)
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +0 -4
@@ -1840,13 +1840,9 @@ static int kfd_ioctl_svm(struct file *filep, struct kfd_process *p, void *data)if (!args->start_addr || !args->size)return -EINVAL ; -mutex_lock (&p->mutex); - r =svm_ioctl (p, args->op, args->start_addr, args->size, args->nattr, args->attrs); -mutex_unlock (&p->mutex); - return r; }#else
drivers/gpu/drm/amd/amdkfd/kfd_crat.c +1 -1
@@ -1563,7 +1563,7 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)/* Fetch the CRAT table from ACPI */ status =acpi_get_table (CRAT_SIGNATURE ,0 , &crat_table);if (status ==AE_NOT_FOUND ) { -pr_warn ("CRAT table not found\n" ); +pr_info ("CRAT table not found\n" );return -ENODATA ; }else if (ACPI_FAILURE (status)) {const char *err =acpi_format_exception (status);
drivers/gpu/drm/amd/amdkfd/kfd_process.c +0 -1
@@ -1150,7 +1150,6 @@ static void kfd_process_notifier_release(struct mmu_notifier *mn,cancel_delayed_work_sync (&p->eviction_work);cancel_delayed_work_sync (&p->restore_work); -cancel_delayed_work_sync (&p->svms.restore_work);mutex_lock (&p->mutex);
drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c +15 -9
@@ -270,15 +270,6 @@ int kfd_smi_event_open(struct kfd_dev *dev, uint32_t *fd)return ret; } - ret =anon_inode_getfd (kfd_smi_name, &kfd_smi_ev_fops, (void *)client, -O_RDWR ); -if (ret <0 ) { -kfifo_free (&client->fifo); -kfree (client); -return ret; - } - *fd = ret; -init_waitqueue_head (&client->wait_queue);spin_lock_init (&client->lock); client->events =0 ;
@@ -288,5 +279,20 @@ int kfd_smi_event_open(struct kfd_dev *dev, uint32_t *fd)list_add_rcu (&client->list, &dev->smi_clients);spin_unlock (&dev->smi_lock); + ret =anon_inode_getfd (kfd_smi_name, &kfd_smi_ev_fops, (void *)client, +O_RDWR ); +if (ret <0 ) { +spin_lock (&dev->smi_lock); +list_del_rcu (&client->list); +spin_unlock (&dev->smi_lock); + +synchronize_rcu (); + +kfifo_free (&client->fifo); +kfree (client); +return ret; + } + *fd = ret; +return 0 ; }
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +45 -35
152 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +4 -3
@@ -3924,7 +3924,7 @@ static u32 convert_brightness_to_user(const struct amdgpu_dm_backlight_caps *cap max - min); } -static int amdgpu_dm_backlight_set_level (struct amdgpu_display_manager *dm, +static void amdgpu_dm_backlight_set_level (struct amdgpu_display_manager *dm,int bl_idx,u32 user_brightness) {
@@ -3955,7 +3955,8 @@ static int amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,DRM_DEBUG ("DM: Failed to update backlight on eDP[%d]\n" , bl_idx); } -return rc ?0 :1 ; +if (rc) + dm->actual_brightness[bl_idx] = user_brightness; }static int amdgpu_dm_backlight_update_status (struct backlight_device *bd)
@@ -9804,7 +9805,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)/* restore the backlight level */ for (i =0 ; i < dm->num_of_edps; i++) {if (dm->backlight_dev[i] && - (amdgpu_dm_backlight_get_level (dm, i) != dm->brightness[i])) + (dm->actual_brightness[i] != dm->brightness[i]))amdgpu_dm_backlight_set_level (dm, i, dm->brightness[i]); }#endif
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +6 -0
@@ -540,6 +540,12 @@ struct amdgpu_display_manager {* cached backlight values. */ u32 brightness[AMDGPU_DM_MAX_NUM_EDP ]; +/** +* @actual_brightness: +* +* last successfully applied backlight values. +*/ +u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP ]; };enum dsc_clock_force_state {
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c +60 -20
220 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c +2 -4
@@ -74,10 +74,8 @@ bool amdgpu_dm_link_setup_psr(struct dc_stream_state *stream) link = stream->link; - psr_config.psr_version = link->dpcd_caps.psr_caps.psr_version; - -if (psr_config.psr_version >0 ) { - psr_config.psr_exit_link_training_required =0x1 ; +if (link->psr_settings.psr_version !=DC_PSR_VERSION_UNSUPPORTED ) { + psr_config.psr_version = link->psr_settings.psr_version; psr_config.psr_frame_capture_indication_req =0 ; psr_config.psr_rfb_setup_time =0x37 ; psr_config.psr_sdp_transmit_line_num_deadline =0x20 ;
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +10 -5
@@ -2124,21 +2124,26 @@ static enum link_training_result dp_perform_8b_10b_link_training( repeater_id--) { status =perform_clock_recovery_sequence (link, lt_settings, repeater_id); -if (status !=LINK_TRAINING_SUCCESS ) +if (status !=LINK_TRAINING_SUCCESS ) { +repeater_training_done (link, repeater_id);break ; + } status =perform_channel_equalization_sequence (link, lt_settings, repeater_id); +repeater_training_done (link, repeater_id); +if (status !=LINK_TRAINING_SUCCESS )break ; -repeater_training_done (link, repeater_id); +for (lane =0 ; lane <LANE_COUNT_DP_MAX ; lane++) { + lt_settings->dpcd_lane_settings[lane].raw =0 ; + lt_settings->hw_lane_settings[lane].VOLTAGE_SWING =0 ; + lt_settings->hw_lane_settings[lane].PRE_EMPHASIS =0 ; + } } - -for (lane =0 ; lane < (uint8_t )lt_settings->link_settings.lane_count; lane++) - lt_settings->dpcd_lane_settings[lane].raw =0 ; }if (status ==LINK_TRAINING_SUCCESS ) {
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +3 -0
@@ -1640,6 +1640,9 @@ static bool are_stream_backends_same(if (is_timing_changed (stream_a, stream_b))return false; +if (stream_a->signal != stream_b->signal) +return false; +if (stream_a->dpms_off != stream_b->dpms_off)return false;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +1 -1
@@ -874,7 +874,7 @@ static const struct dc_debug_options debug_defaults_drv = { .clock_trace = true, .disable_pplib_clock_request = true, .min_disp_clk_khz = 100000, - .pipe_split_policy = MPC_SPLIT_DYNAMIC, + .pipe_split_policy = MPC_SPLIT_AVOID_MULT_DISP, .force_single_disp_pipe_split = false, .disable_dcc = DCC_ENABLE, .vsr_support = true,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +2 -0
@@ -2013,7 +2013,9 @@ bool dcn31_validate_bandwidth(struct dc *dc,BW_VAL_TRACE_COUNT (); +DC_FP_START (); out =dcn30_internal_validate_bw (dc, context, pipes, &pipe_cnt, &vlevel, fast_validate); +DC_FP_END ();// Disable fast_validate to set min dcfclk in alculate_wm_and_dlg if (pipe_cnt ==0 )
drivers/gpu/drm/amd/pm/amdgpu_dpm.c +11 -0
@@ -1045,6 +1045,17 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)if (!pp_funcs || !pp_funcs->get_asic_baco_capability)return false; +/* Don't use baco for reset in S3. +* This is a workaround for some platforms +* where entering BACO during suspend +* seems to cause reboots or hangs. +* This might be related to the fact that BACO controls +* power to the whole GPU including devices like audio and USB. +* Powering down/up everything may adversely affect these other +* devices. Needs more investigation. +*/ +if (adev->in_s3) +return false;if (pp_funcs->get_asic_baco_capability (pp_handle, &baco_cap))return false;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c +4 -4
@@ -773,13 +773,13 @@ static int smu10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,smum_send_msg_to_smc_with_parameter (hwmgr, PPSMC_MSG_SetHardMinFclkByFreq, hwmgr->display_config->num_display >3 ? - data->clock_vol_info.vdd_dep_on_fclk->entries[0 ].clk : + (data->clock_vol_info.vdd_dep_on_fclk->entries[0 ].clk /100 ) : min_mclk,NULL );smum_send_msg_to_smc_with_parameter (hwmgr, PPSMC_MSG_SetHardMinSocclkByFreq, - data->clock_vol_info.vdd_dep_on_socclk->entries[0 ].clk, + data->clock_vol_info.vdd_dep_on_socclk->entries[0 ].clk /100 ,NULL ); smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_SetHardMinVcn,
@@ -792,11 +792,11 @@ static int smu10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr, NULL);smum_send_msg_to_smc_with_parameter (hwmgr, PPSMC_MSG_SetSoftMaxFclkByFreq, - data->clock_vol_info.vdd_dep_on_fclk->entries[index_fclk].clk, + data->clock_vol_info.vdd_dep_on_fclk->entries[index_fclk].clk /100 ,NULL );smum_send_msg_to_smc_with_parameter (hwmgr, PPSMC_MSG_SetSoftMaxSocclkByFreq, - data->clock_vol_info.vdd_dep_on_socclk->entries[index_socclk].clk, + data->clock_vol_info.vdd_dep_on_socclk->entries[index_socclk].clk /100 ,NULL ); smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_SetSoftMaxVcn,
drivers/gpu/drm/bridge/nwl-dsi.c +12 -6
@@ -861,18 +861,19 @@ nwl_dsi_bridge_mode_set(struct drm_bridge *bridge,memcpy (&dsi->mode, adjusted_mode,sizeof (dsi->mode));drm_mode_debug_printmodeline (adjusted_mode); -pm_runtime_get_sync (dev); +if (pm_runtime_resume_and_get (dev) <0 ) +return ;if (clk_prepare_enable (dsi->lcdif_clk) <0 ) -return ; + goto runtime_put;if (clk_prepare_enable (dsi->core_clk) <0 ) -return ; + goto runtime_put;/* Step 1 from DSI reset-out instructions */ ret =reset_control_deassert (dsi->rst_pclk);if (ret <0 ) {DRM_DEV_ERROR (dev,"Failed to deassert PCLK: %d\n" , ret); -return ; + goto runtime_put; }/* Step 2 from DSI reset-out instructions */
@@ -882,13 +883,18 @@ nwl_dsi_bridge_mode_set(struct drm_bridge *bridge, ret =reset_control_deassert (dsi->rst_esc);if (ret <0 ) {DRM_DEV_ERROR (dev,"Failed to deassert ESC: %d\n" , ret); -return ; + goto runtime_put; } ret =reset_control_deassert (dsi->rst_byte);if (ret <0 ) {DRM_DEV_ERROR (dev,"Failed to deassert BYTE: %d\n" , ret); -return ; + goto runtime_put; } + +return ; + +runtime_put: +pm_runtime_put_sync (dev); } static void
drivers/gpu/drm/drm_edid.c +10 -9
@@ -212,9 +212,7 @@ static const struct edid_quirk {/* Windows Mixed Reality Headsets */ EDID_QUIRK ('A' ,'C' ,'R' ,0x7fce ,EDID_QUIRK_NON_DESKTOP ), -EDID_QUIRK ('H' ,'P' ,'N' ,0x3515 ,EDID_QUIRK_NON_DESKTOP ),EDID_QUIRK ('L' ,'E' ,'N' ,0x0408 ,EDID_QUIRK_NON_DESKTOP ), -EDID_QUIRK ('L' ,'E' ,'N' ,0xb800 ,EDID_QUIRK_NON_DESKTOP ),EDID_QUIRK ('F' ,'U' ,'J' ,0x1970 ,EDID_QUIRK_NON_DESKTOP ),EDID_QUIRK ('D' ,'E' ,'L' ,0x7fce ,EDID_QUIRK_NON_DESKTOP ), EDID_QUIRK('S', 'E', 'C', 0x144a, EDID_QUIRK_NON_DESKTOP),
@@ -5327,17 +5325,13 @@ u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edi info->width_mm = edid->width_cm *10 ; info->height_mm = edid->height_cm *10 ; - info->non_desktop = !!(quirks &EDID_QUIRK_NON_DESKTOP ); -drm_get_monitor_range (connector, edid); -DRM_DEBUG_KMS ("non_desktop set to %d\n" , info->non_desktop); -if (edid->revision <3 ) -return quirks; + goto out;if (!(edid->input &DRM_EDID_INPUT_DIGITAL )) -return quirks; + goto out; info->color_formats |=DRM_COLOR_FORMAT_RGB444 ;drm_parse_cea_ext (connector, edid);
@@ -5358,7 +5352,7 @@ u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edi/* Only defined for 1.4 with digital displays */ if (edid->revision <4 ) -return quirks; + goto out;switch (edid->input &DRM_EDID_DIGITAL_DEPTH_MASK ) {case DRM_EDID_DIGITAL_DEPTH_6 :
@@ -5395,6 +5389,13 @@ u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edidrm_update_mso (connector, edid); +out: +if (quirks &EDID_QUIRK_NON_DESKTOP ) { +drm_dbg_kms (connector->dev,"Non-desktop display%s\n" , + info->non_desktop ?" (redundant quirk)" :"" ); + info->non_desktop = true; + } +return quirks; }
drivers/gpu/drm/drm_panel_orientation_quirks.c +6 -0
@@ -180,6 +180,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MicroPC"), }, .driver_data = (void *)&lcd720x1280_rightside_up, + }, { /* GPD Win Max */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"GPD" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1619-01"), + }, + .driver_data = (void *)&lcd800x1280_rightside_up, }, { /** GPD Pocket, note that the the DMI data is less generic then * it seems, devices with a board-vendor of "AMI Corporation"
drivers/gpu/drm/imx/dw_hdmi-imx.c +7 -1
@@ -222,6 +222,7 @@ static int dw_hdmi_imx_probe(struct platform_device *pdev)struct device_node *np = pdev->dev.of_node;const struct of_device_id *match =of_match_node (dw_hdmi_imx_dt_ids, np);struct imx_hdmi *hdmi; +int ret; hdmi =devm_kzalloc (&pdev->dev,sizeof (*hdmi),GFP_KERNEL );if (!hdmi)
@@ -243,10 +244,15 @@ static int dw_hdmi_imx_probe(struct platform_device *pdev) hdmi->bridge =of_drm_find_bridge (np);if (!hdmi->bridge) {dev_err (hdmi->dev,"Unable to find bridge\n" ); +dw_hdmi_remove (hdmi->hdmi);return -ENODEV ; } -return component_add (&pdev->dev, &dw_hdmi_imx_ops); + ret =component_add (&pdev->dev, &dw_hdmi_imx_ops); +if (ret) +dw_hdmi_remove (hdmi->hdmi); + +return ret; }static int dw_hdmi_imx_remove (struct platform_device *pdev)
drivers/gpu/drm/imx/imx-ldb.c +2 -0
@@ -572,6 +572,8 @@ static int imx_ldb_panel_ddc(struct device *dev, edidp =of_get_property (child,"edid" , &edid_len);if (edidp) { channel->edid =kmemdup (edidp, edid_len,GFP_KERNEL ); +if (!channel->edid) +return -ENOMEM ; }else if (!channel->panel) {/* fallback to display-timings node */ ret = of_get_drm_display_mode(child,
drivers/gpu/drm/imx/parallel-display.c +3 -1
@@ -75,8 +75,10 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) ret =of_get_drm_display_mode (np, &imxpd->mode, &imxpd->bus_flags,OF_USE_NATIVE_MODE ); -if (ret) +if (ret) { +drm_mode_destroy (connector->dev, mode);return ret; + }drm_mode_copy (mode, &imxpd->mode); mode->type |=DRM_MODE_TYPE_DRIVER |DRM_MODE_TYPE_PREFERRED ;
drivers/gpu/drm/msm/dsi/dsi_host.c +1 -1
@@ -1871,7 +1871,7 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)/* do not autoenable, will be enabled later */ ret =devm_request_irq (&pdev->dev, msm_host->irq, dsi_host_irq, -IRQF_TRIGGER_HIGH |IRQF_ONESHOT |IRQF_NO_AUTOEN , +IRQF_TRIGGER_HIGH |IRQF_NO_AUTOEN ,"dsi_isr" , msm_host);if (ret <0 ) { dev_err(&pdev->dev, "failed to request IRQ%u: %d\n",
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c +1 -0
@@ -216,6 +216,7 @@ gm20b_pmu = { .intr = gt215_pmu_intr, .recv = gm20b_pmu_recv, .initmsg = gm20b_pmu_initmsg, + .reset = gf100_pmu_reset, };#if IS_ENABLED (CONFIG_ARCH_TEGRA_210_SOC )
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c +1 -1
@@ -23,7 +23,7 @@*/ #include "priv.h" -static void +void gp102_pmu_reset (struct nvkm_pmu *pmu) {struct nvkm_device *device = pmu->subdev.device;
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c +1 -0
@@ -83,6 +83,7 @@ gp10b_pmu = { .intr = gt215_pmu_intr, .recv = gm20b_pmu_recv, .initmsg = gm20b_pmu_initmsg, + .reset = gp102_pmu_reset, };#if IS_ENABLED (CONFIG_ARCH_TEGRA_210_SOC )
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h +1 -0
@@ -41,6 +41,7 @@ int gt215_pmu_send(struct nvkm_pmu *, u32[2], u32, u32, u32, u32);bool gf100_pmu_enabled (struct nvkm_pmu *);void gf100_pmu_reset (struct nvkm_pmu *); +void gp102_pmu_reset (struct nvkm_pmu *pmu);void gk110_pmu_pgob (struct nvkm_pmu *,bool );
drivers/gpu/drm/panel/panel-ilitek-ili9341.c +3 -1
@@ -612,8 +612,10 @@ static int ili9341_dbi_probe(struct spi_device *spi, struct gpio_desc *dc,int ret; vcc =devm_regulator_get_optional (dev,"vcc" ); -if (IS_ERR (vcc)) +if (IS_ERR (vcc)) {dev_err (dev,"get optional vcc failed\n" ); + vcc =NULL ; + } dbidev =devm_drm_dev_alloc (dev, &ili9341_dbi_driver, struct mipi_dbi_dev, drm);
drivers/gpu/drm/v3d/v3d_gem.c +4 -2
@@ -798,7 +798,7 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data,if (!render->base.perfmon) { ret = -ENOENT ; - goto fail; + goto fail_perfmon; } }
@@ -847,6 +847,7 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data, fail_unreserve:mutex_unlock (&v3d->sched_lock);
Lines of this file are not shown. View the raw message.
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/misc/habanalabs/common/memory.c +11 -19
Lines of this file are not shown. View the raw message.
drivers/misc/habanalabs/common/mmu/mmu_v1.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/mmc/core/block.c +42 -4
46 lines not on this page · raw message
drivers/net/can/usb/etas_es58x/es58x_fd.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt.h +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +1 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_lib.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_main.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_xsk.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/mv643xx_eth.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/port.c +0 -23
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qed/qed_debug.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qede/qede_fp.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/sfc/efx_channels.c +82 -66
148 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath5k/eeprom.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/api/dbg-tlv.h +2 -3
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/phy-ctxt.c +22 -9
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/scan.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/dma.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7921/main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw89/core.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/parisc/dino.c +33 -8
41 lines not on this page · raw message
drivers/pci/endpoint/functions/pci-epf-test.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/phy/amlogic/phy-meson-gxl-usb2.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/platform/x86/hp-wmi.c +63 -30
93 lines not on this page · raw message
drivers/rtc/rtc-mc146818-lib.c +34 -8
42 lines not on this page · raw message
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +61 -7
68 lines not on this page · raw message
drivers/scsi/smartpqi/smartpqi_init.c +25 -20
45 lines not on this page · raw message
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/usb/cdns3/cdnsp-debug.h +154 -151
305 lines not on this page · raw message
fs/btrfs/volumes.c +28 -37
65 lines not on this page · raw message
fs/io_uring.c +40 -39
79 lines not on this page · raw message
fs/nfs/direct.c +32 -16
48 lines not on this page · raw message
kernel/static_call.c +1 -541
542 lines not on this page · raw message
kernel/static_call_inline.c new file +543 -0
543 lines not on this page · raw message
net/ipv4/inet_hashtables.c +32 -21
53 lines not on this page · raw message
net/mctp/af_mctp.c +33 -13
46 lines not on this page · raw message
net/netfilter/nf_conntrack_core.c +68 -17
85 lines not on this page · raw message
net/openvswitch/flow_netlink.c +93 -6
99 lines not on this page · raw message
net/sunrpc/xprtsock.c +52 -18
70 lines not on this page · raw message
tools/testing/selftests/bpf/progs/test_sk_lookup.c +1 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/xdpxceiver.c +49 -31
80 lines not on this page · raw message
tools/testing/selftests/bpf/xdpxceiver.h +1 -1
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.