Linux 5.14.4
Subsystems (2)
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.14.4 kernel.
All users of the 5.14 kernel series must upgrade.
The updated 5.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.14.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/fault-injection/provoke-crashes.rst | 2 Makefile | 2 arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts | 2 arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi | 4 arch/arm/boot/dts/at91-sam9x60ek.dts | 16 arch/arm/boot/dts/at91-sama5d3_xplained.dts | 29 + arch/arm/boot/dts/at91-sama5d4_xplained.dts | 19 arch/arm/boot/dts/meson8.dtsi | 5 arch/arm/boot/dts/meson8b-ec100.dts | 4 arch/arm/boot/dts/meson8b-mxq.dts | 4 arch/arm/boot/dts/meson8b-odroidc1.dts | 4 arch/arm64/boot/dts/exynos/exynos7.dtsi | 2 arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 17 arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 11 arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz.dtsi | 2 arch/arm64/boot/dts/qcom/sc7280.dtsi | 6 arch/arm64/boot/dts/qcom/sm8250.dtsi | 2 arch/arm64/boot/dts/qcom/sm8350.dtsi | 8 arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi | 1 arch/arm64/boot/dts/renesas/r8a77995-draak.dts | 4 arch/arm64/kvm/arm.c | 7 arch/arm64/kvm/vgic/vgic-v2.c | 36 - arch/arm64/kvm/vgic/vgic-v3.c | 36 - arch/arm64/kvm/vgic/vgic.c | 38 + arch/arm64/kvm/vgic/vgic.h | 2 arch/m68k/Kconfig.cpu | 8 arch/m68k/coldfire/clk.c | 2 arch/m68k/emu/nfeth.c | 4 arch/m68k/include/asm/atomic.h | 4 arch/parisc/boot/compressed/misc.c | 2 arch/s390/include/asm/kvm_host.h | 1 arch/s390/include/asm/lowcore.h | 3 arch/s390/include/asm/processor.h | 2 arch/s390/kernel/asm-offsets.c | 1 arch/s390/kernel/debug.c | 176 ++++---- arch/s390/kernel/entry.S | 11 arch/s390/kernel/ipl.c | 3 arch/s390/kernel/machine_kexec.c | 1 arch/s390/kernel/setup.c | 9 arch/s390/kernel/smp.c | 31 + arch/s390/kvm/interrupt.c | 12 arch/s390/kvm/kvm-s390.c | 2 arch/s390/kvm/kvm-s390.h | 2 arch/s390/mm/kasan_init.c | 41 - arch/s390/pci/pci.c | 7 arch/s390/pci/pci_clp.c | 33 - arch/x86/crypto/aesni-intel_glue.c | 5 arch/x86/events/intel/uncore_snbep.c | 40 + arch/x86/include/asm/mce.h | 1 arch/x86/kernel/cpu/mce/core.c | 11 arch/x86/kvm/mmu/mmu.c | 19 arch/x86/kvm/mmu/tdp_mmu.c | 20 arch/x86/kvm/vmx/nested.c | 7 arch/x86/kvm/vmx/vmx.c | 3 arch/x86/kvm/x86.c | 4 block/bfq-iosched.c | 3 block/bio.c | 15 block/blk-crypto.c | 2 block/blk-merge.c | 18 block/blk-throttle.c | 32 + block/blk.h | 2 block/elevator.c | 3 block/mq-deadline.c | 2 certs/Makefile | 8 crypto/ecc.h | 5 crypto/tcrypt.c | 29 - drivers/acpi/prmt.c | 10 drivers/ata/libata-core.c | 2 drivers/auxdisplay/hd44780.c | 2 drivers/base/dd.c | 16 drivers/base/firmware_loader/main.c | 20 drivers/base/regmap/regmap.c | 2 drivers/bcma/main.c | 6 drivers/block/nbd.c | 86 +++ drivers/bluetooth/btusb.c | 18 drivers/char/tpm/Kconfig | 1 drivers/char/tpm/tpm_ibmvtpm.c | 26 - drivers/char/tpm/tpm_ibmvtpm.h | 2 drivers/clk/mvebu/kirkwood.c | 1 drivers/clocksource/sh_cmt.c | 30 - drivers/counter/104-quad-8.c | 5 drivers/crypto/hisilicon/sec2/sec.h | 5 drivers/crypto/hisilicon/sec2/sec_main.c | 34 - drivers/crypto/mxs-dcp.c | 45 +- drivers/crypto/omap-aes.c | 8 drivers/crypto/omap-des.c | 8 drivers/crypto/omap-sham.c | 14 drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c | 4 drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c | 4 drivers/crypto/qat/qat_common/adf_common_drv.h | 8 drivers/crypto/qat/qat_common/adf_init.c | 5 drivers/crypto/qat/qat_common/adf_isr.c | 7 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 3 drivers/crypto/qat/qat_common/adf_vf2pf_msg.c | 12 drivers/crypto/qat/qat_common/adf_vf_isr.c | 7 drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c | 4 drivers/edac/i10nm_base.c | 6 drivers/edac/mce_amd.c | 3 drivers/firmware/raspberrypi.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 54 +- drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 286 ++++++++++--- drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 3 drivers/gpu/drm/bridge/ite-it66121.c | 2 drivers/gpu/drm/drm_of.c | 6 drivers/gpu/drm/exynos/exynos_drm_g2d.c | 3 drivers/gpu/drm/gma500/oaktrail_lvds.c | 2 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 10 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 68 +-- drivers/gpu/drm/msm/dp/dp_display.c | 31 - drivers/gpu/drm/msm/dsi/dsi.c | 6 drivers/gpu/drm/msm/msm_drv.c | 1 drivers/gpu/drm/mxsfb/mxsfb_drv.c | 3 drivers/gpu/drm/mxsfb/mxsfb_drv.h | 1 drivers/gpu/drm/mxsfb/mxsfb_kms.c | 40 + drivers/gpu/drm/mxsfb/mxsfb_regs.h | 9 drivers/gpu/drm/panfrost/panfrost_device.c | 3 drivers/gpu/drm/rcar-du/rcar_du_drv.c | 2 drivers/hv/hv_snapshot.c | 1 drivers/hwmon/Makefile | 1 drivers/hwmon/pmbus/bpa-rs600.c | 25 - drivers/i2c/busses/i2c-highlander.c | 2 drivers/i2c/busses/i2c-hix5hd2.c | 2 drivers/i2c/busses/i2c-iop3xx.c | 6 drivers/i2c/busses/i2c-mt65xx.c | 2 drivers/i2c/busses/i2c-s3c2410.c | 2 drivers/i2c/busses/i2c-synquacer.c | 2 drivers/i2c/busses/i2c-xlp9xx.c | 2 drivers/infiniband/hw/mlx5/mr.c | 2 drivers/irqchip/irq-apple-aic.c | 2 drivers/irqchip/irq-gic-v3.c | 23 + drivers/irqchip/irq-loongson-pch-pic.c | 19 drivers/leds/blink/leds-lgm-sso.c | 23 - drivers/leds/flash/leds-rt8515.c | 4 drivers/leds/leds-is31fl32xx.c | 1 drivers/leds/leds-lt3593.c | 5 drivers/leds/trigger/ledtrig-audio.c | 37 + drivers/md/bcache/super.c | 16 drivers/md/raid1.c | 19 drivers/md/raid10.c | 14 drivers/media/i2c/tda1997x.c | 1 drivers/media/platform/atmel/atmel-sama5d2-isc.c | 17 drivers/media/platform/coda/coda-bit.c | 18 drivers/media/platform/omap3isp/isp.c | 4 drivers/media/platform/qcom/venus/helpers.c | 3 drivers/media/platform/qcom/venus/hfi_msgs.c | 2 drivers/media/platform/qcom/venus/venc.c | 2 drivers/media/platform/rcar-vin/rcar-v4l2.c | 4 drivers/media/platform/rockchip/rga/rga.c | 27 + drivers/media/platform/vsp1/vsp1_entity.c | 4 drivers/media/spi/cxd2880-spi.c | 7 drivers/media/usb/dvb-usb/dvb-usb-i2c.c | 9 drivers/media/usb/dvb-usb/dvb-usb-init.c | 2 drivers/media/usb/dvb-usb/nova-t-usb2.c | 6 drivers/media/usb/dvb-usb/vp702x.c | 12 drivers/media/usb/em28xx/em28xx-input.c | 1 drivers/media/usb/go7007/go7007-driver.c | 26 - drivers/media/usb/go7007/go7007-usb.c | 2 drivers/misc/lkdtm/core.c | 2 drivers/misc/pvpanic/pvpanic.c | 2 drivers/mmc/host/dw_mmc.c | 1 drivers/mmc/host/moxart-mmc.c | 1 drivers/mmc/host/sdhci.c | 1 drivers/net/dsa/b53/b53_common.c | 10 drivers/net/dsa/b53/b53_priv.h | 2 drivers/net/dsa/bcm_sf2.c | 1 drivers/net/dsa/mt7530.c | 13 drivers/net/dsa/mv88e6xxx/chip.c | 18 drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c | 3 drivers/net/ethernet/google/gve/gve_adminq.c | 6 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 23 - drivers/net/ethernet/intel/ice/ice_main.c | 13 drivers/net/ethernet/intel/ice/ice_ptp.c | 55 ++ drivers/net/ethernet/marvell/octeontx2/af/common.h | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 35 + drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 9 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c | 22 - drivers/net/ethernet/marvell/octeontx2/af/rvu_reg.h | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c | 16 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h | 3 drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c | 1 drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 4 drivers/net/ethernet/mellanox/mlx5/core/dev.c | 2 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en/fs.h | 6 drivers/net/ethernet/mellanox/mlx5/core/en/qos.c | 15 drivers/net/ethernet/mellanox/mlx5/core/en/qos.h | 4 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 10 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 18 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 18 drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c | 1 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 5 drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c | 18 drivers/net/ethernet/mellanox/mlx5/core/lag.c | 1 drivers/net/ethernet/mellanox/mlx5/core/lag_mp.c | 8 drivers/net/ethernet/mellanox/mlx5/core/lag_mp.h | 2 drivers/net/ethernet/pensando/ionic/ionic_devlink.c | 14 drivers/net/ethernet/qualcomm/qca_spi.c | 2 drivers/net/ethernet/qualcomm/qca_uart.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 5 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 47 +- drivers/net/ethernet/ti/am65-cpsw-nuss.h | 2 drivers/net/phy/marvell10g.c | 8 drivers/net/usb/asix_devices.c | 1 drivers/net/wireless/ath/ath6kl/wmi.c | 4 drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 2 drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 14 drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 1 drivers/net/wireless/rsi/rsi_91x_hal.c | 4 drivers/net/wireless/rsi/rsi_91x_usb.c | 1 drivers/nvme/host/rdma.c | 4 drivers/nvme/host/tcp.c | 4 drivers/nvme/target/fabrics-cmd.c | 9 drivers/pci/pci.c | 25 - drivers/power/supply/axp288_fuel_gauge.c | 4 drivers/power/supply/cw2015_battery.c | 4 drivers/power/supply/max17042_battery.c | 2 drivers/power/supply/smb347-charger.c | 10 drivers/regulator/tps65910-regulator.c | 10 drivers/regulator/vctrl-regulator.c | 73 +-- drivers/s390/cio/css.c | 17 drivers/s390/crypto/ap_bus.c | 25 - drivers/s390/crypto/ap_bus.h | 10 drivers/s390/crypto/ap_queue.c | 20 drivers/s390/crypto/zcrypt_ccamisc.c | 8 drivers/soc/mediatek/mt8183-mmsys.h | 21 drivers/soc/mediatek/mtk-mmsys.c | 7 drivers/soc/mediatek/mtk-mmsys.h | 133 ++++-- drivers/soc/qcom/rpmhpd.c | 5 drivers/soc/qcom/smsm.c | 11 drivers/soc/rockchip/Kconfig | 4 drivers/spi/spi-coldfire-qspi.c | 2 drivers/spi/spi-davinci.c | 8 drivers/spi/spi-fsl-dspi.c | 1 drivers/spi/spi-pic32.c | 1 drivers/spi/spi-sprd-adi.c | 2 drivers/spi/spi-zynq-qspi.c | 8 drivers/staging/clocking-wizard/Kconfig | 2 drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c | 11 drivers/staging/media/tegra-video/vi.c | 4 drivers/tty/serial/fsl_lpuart.c | 2 drivers/tty/tty_io.c | 4 drivers/usb/dwc3/dwc3-meson-g12a.c | 2 drivers/usb/dwc3/dwc3-qcom.c | 4 drivers/usb/gadget/udc/at91_udc.c | 4 drivers/usb/gadget/udc/bdc/bdc_core.c | 30 - drivers/usb/gadget/udc/mv_u3d_core.c | 19 drivers/usb/gadget/udc/renesas_usb3.c | 17 drivers/usb/gadget/udc/s3c2410_udc.c | 4 drivers/usb/host/ehci-orion.c | 8 drivers/usb/host/ohci-tmio.c | 3 drivers/usb/misc/brcmstb-usb-pinmap.c | 2 drivers/usb/phy/phy-fsl-usb.c | 2 drivers/usb/phy/phy-tahvo.c | 4 drivers/usb/phy/phy-twl6030-usb.c | 5 drivers/video/backlight/pwm_bl.c | 54 +- drivers/video/fbdev/core/fbmem.c | 6 fs/cifs/cifs_unicode.c | 9 fs/cifs/fs_context.c | 11 fs/cifs/readdir.c | 23 + fs/debugfs/file.c | 8 fs/f2fs/file.c | 5 fs/f2fs/super.c | 11 fs/fcntl.c | 18 fs/fuse/file.c | 30 + fs/fuse/fuse_i.h | 19 fs/fuse/inode.c | 60 ++ fs/gfs2/ops_fstype.c | 43 + fs/gfs2/super.c | 61 -- fs/io-wq.c | 105 +++- fs/io_uring.c | 5 fs/iomap/swapfile.c | 6 fs/isofs/inode.c | 27 - fs/isofs/isofs.h | 1 fs/isofs/joliet.c | 4 fs/lockd/svclock.c | 2 fs/nfsd/nfs4state.c | 4 fs/udf/misc.c | 13 fs/udf/super.c | 75 +-- fs/udf/udf_sb.h | 2 fs/udf/unicode.c | 4 include/linux/blkdev.h | 16 include/linux/energy_model.h | 16 include/linux/hrtimer.h | 5 include/linux/local_lock_internal.h | 42 + include/linux/mlx5/mlx5_ifc.h | 3 include/linux/power/max17042_battery.h | 2 include/linux/sunrpc/svc.h | 1 include/linux/time64.h | 9 include/net/dsa.h | 2 include/net/pkt_cls.h | 3 include/trace/events/io_uring.h | 6 include/trace/events/sunrpc.h | 8 include/uapi/linux/bpf.h | 2 kernel/bpf/verifier.c | 31 - kernel/cgroup/cpuset.c | 95 ++-- kernel/cpu_pm.c | 50 +- kernel/irq/timings.c | 2 kernel/locking/mutex.c | 15 kernel/power/energy_model.c | 4 kernel/rcu/tree_stall.h | 26 + kernel/sched/core.c | 25 - kernel/sched/deadline.c | 8 kernel/sched/debug.c | 7 kernel/sched/fair.c | 2 kernel/sched/sched.h | 2 kernel/sched/topology.c | 65 ++ kernel/time/hrtimer.c | 92 +++- kernel/time/posix-cpu-timers.c | 2 kernel/time/tick-internal.h | 3 lib/mpi/mpiutil.c | 2 lib/test_scanf.c | 4 net/6lowpan/debugfs.c | 3 net/bluetooth/cmtp/cmtp.h | 2 net/bluetooth/hci_core.c | 22 - net/bluetooth/mgmt.c | 2 net/bluetooth/sco.c | 11 net/core/devlink.c | 36 + net/dsa/Kconfig | 13 net/dsa/Makefile | 3 net/dsa/dsa_priv.h | 2 net/dsa/port.c | 21 net/dsa/slave.c | 6 net/dsa/tag_8021q.c | 2 net/ipv4/route.c | 48 +- net/ipv4/tcp_ipv4.c | 5 net/ipv6/route.c | 5 net/mac80211/main.c | 2 net/mac80211/tx.c | 4 net/netlabel/netlabel_cipso_v4.c | 8 net/qrtr/qrtr.c | 8 net/sched/sch_cbq.c | 2 net/sched/sch_htb.c | 97 ++-- net/sunrpc/svc.c | 15 samples/bpf/xdp_redirect_cpu_user.c | 2 samples/pktgen/pktgen_sample04_many_flows.sh | 12 samples/pktgen/pktgen_sample05_flow_per_thread.sh | 12 security/integrity/ima/Kconfig | 1 security/integrity/ima/ima_mok.c | 2 sound/soc/codecs/rt5682-i2c.c | 15 sound/soc/codecs/tlv320aic32x4.c | 2 sound/soc/codecs/wcd9335.c | 23 - sound/soc/codecs/wm_adsp.c | 2 sound/soc/fsl/fsl_rpmsg.c | 20 sound/soc/intel/boards/kbl_da7219_max98927.c | 55 -- sound/soc/intel/common/soc-acpi-intel-cml-match.c | 2 sound/soc/intel/common/soc-acpi-intel-kbl-match.c | 2 sound/soc/intel/skylake/skl-topology.c | 25 - sound/soc/mediatek/mt8183/mt8183-afe-pcm.c | 43 + sound/soc/mediatek/mt8192/mt8192-afe-pcm.c | 27 - sound/usb/card.c | 4 sound/usb/pcm.c | 3 sound/usb/usbaudio.h | 1 tools/bootconfig/main.c | 4 tools/bpf/bpftool/prog.c | 5 tools/include/uapi/linux/bpf.h | 2 tools/lib/bpf/Makefile | 10 tools/lib/bpf/libbpf.c | 20 tools/perf/util/bpf-event.c | 4 tools/perf/util/bpf_counter.c | 3 tools/testing/selftests/bpf/prog_tests/btf.c | 1 tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c | 2 tools/testing/selftests/bpf/progs/test_core_autosize.c | 20 tools/testing/selftests/bpf/test_maps.c | 4 364 files changed, 3226 insertions(+), 1743 deletions(-)
Abhishek Naik (1):
iwlwifi: skip first element in the WTAS ACPI table
Adrian Ratiu (1):
char: tpm: Kconfig: remove bad i2c cr50 select
Ahmad Fatoum (1):
brcmfmac: pcie: fix oops on failure to resume and reprobe
Alex Elder (1):
arm64: dts: qcom: sm8350: fix IPA interconnects
Alexander Antonov (1):
perf/x86/intel/uncore: Fix IIO cleanup mapping procedure for SNR/ICX
Alexander Gordeev (2):
s390/kasan: fix large PMD pages address alignment check s390/smp: enable DAT before CPU restart callback is called
Amit Engel (1):
nvmet: pass back cntlid on successful completion
Anand Moon (3):
ARM: dts: meson8b: odroidc1: Fix the pwm regulator supply properties
ARM: dts: meson8b: mxq: Fix the pwm regulator supply properties
ARM: dts: meson8b: ec100: Fix the pwm regulator supply properties
Andrew Jeffery (1):
ARM: dts: everest: Add phase corrections for eMMC
Andrey Ignatov (1):
bpf: Fix possible out of bound write in narrow load handling
Andrii Nakryiko (1):
libbpf: Re-build libbpf.so when libbpf.map changes
Andy Duan (1):
tty: serial: fsl_lpuart: fix the wrong mapbase value
Andy Shevchenko (6):
lib/test_scanf: Handle n_bits == 0 in random tests
leds: lgm-sso: Put fwnode in any case during ->probe()
leds: lgm-sso: Don't spam logs when probe is deferred
leds: lt3593: Put fwnode in any case during ->probe()
leds: rt8515: Put fwnode in any case during ->probe()
leds: lgm-sso: Propagate error codes from callee to callerArd Biesheuvel (1):
crypto: x86/aes-ni - add missing error checks in XTS code
Aubrey Li (1):
ACPI: PRM: Find PRMT table before parsing it
Austin Kim (1):
IMA: remove -Wmissing-prototypes warning
Baokun Li (1):
nbd: add the check to prevent overflow in __nbd_ioctl()
Ben Hutchings (1):
crypto: omap - Fix inconsistent locking of device lists
Benjamin Coddington (1):
lockd: Fix invalid lockowner cast after vfs_test_lock
Biju Das (1):
arm64: dts: renesas: hihope-rzg2-ex: Add EtherAVB internal rx delay
Bjorn Andersson (1):
soc: qcom: rpmhpd: Use corner in power_off
Bob Peterson (1):
gfs2: init system threads before freeze lock
Borislav Petkov (1):
x86/mce: Defer processing of early errors
Brett Creeley (1):
ice: Only lock to update netdev dev_addr
CK Hu (1):
soc: mmsys: mediatek: add mask to mmsys routes
Cezary Rojewski (3):
ASoC: Intel: kbl_da7219_max98927: Fix format selection for max98373
ASoC: Intel: Skylake: Leave data as is when invoking TLV IPCs
ASoC: Intel: Skylake: Fix module resource and format selection
Charles Keepax (1):
ASoC: wm_adsp: Put debugfs_remove_recursive back in
Chen-Yu Tsai (3):
irqchip/gic-v3: Fix priority comparison when non-secure priorities are used
regulator: vctrl: Use locked regulator_get_voltage in probe path
regulator: vctrl: Avoid lockdep warning in enable/disable ops
Chih-Kang Chang (1):
mac80211: Fix insufficient headroom issue for AMSDU
Chris Packham (1):
hwmon: (pmbus/bpa-rs600) Don't use rated limits as warn limits
Christoph Hellwig (1):
bcache: add proper error unwinding in bcache_device_init
Christophe JAILLET (9):
spi: coldfire-qspi: Use clk_disable_unprepare in the remove function
media: cxd2880-spi: Fix an error handling path
drm/msm/dsi: Fix some reference counted resource leaks
firmware: raspberrypi: Fix a leak in 'rpi_firmware_get()'
usb: bdc: Fix an error handling path in 'bdc_probe()' when no suitable DMA config is available
usb: bdc: Fix a resource leak in the error handling path of 'bdc_probe()'
ASoC: wcd9335: Fix a double irq free in the remove function
ASoC: wcd9335: Fix a memory leak in the error handling path of the probe function
ASoC: wcd9335: Disable irq on slave ports in the remove function
Chuck Lever (1):
SUNRPC: Fix a NULL pointer deref in trace_svc_stats_latency()
Chunguang Xu (1):
blk-throtl: optimize IOPS throttle for large IO scenarios
Chunyan Zhang (1):
spi: sprd: Fix the wrong WDG_LOAD_VAL
Claudiu Beznea (1):
ARM: dts: at91: add pinctrl-{names, 0} for all gpios
Colin Ian King (4):
gfs2: Fix memory leak of object lsi on error return path 6lowpan: iphc: Fix an off-by-one check of array index
media: venus: venc: Fix potential null pointer dereference on pointer fmt
Bluetooth: increase BTNAMSIZ to 21 chars to fix potential buffer overflow
Curtis Malainey (1):
ASoC: Intel: Fix platform ID matching
Damien Le Moal (1):
libata: fix ata_host_start()
Dan Carpenter (9):
media: v4l2-subdev: fix some NULL vs IS_ERR() checks
media: rockchip/rga: fix error handling in probe
Bluetooth: sco: prevent information leak in sco_conn_defer_accept()
mac80211: remove unnecessary NULL check in ieee80211_register_hw()
rsi: fix error code in rsi_load_9116_firmware()
rsi: fix an error code in rsi_probe()
m68k: coldfire: return success for clk_enable(NULL)
ath6kl: wmi: fix an error code in ath6kl_wmi_sync_point()
net: qrtr: make checks in qrtr_endpoint_post() stricter
Daniel Thompson (1):
backlight: pwm_bl: Improve bootloader/kernel device handover
David Heidelberg (2):
drm/msm/mdp4: refactor HW revision detection into read_mdp_hw_revision drm/msm/mdp4: move HW revision detection to earlier phase
Desmond Cheong Zhi Xi (3):
fcntl: fix potential deadlocks for &fown_struct.lock
fcntl: fix potential deadlock for &fasync_struct.fa_lock
Bluetooth: fix repeated calls to sco_sock_kill
Dietmar Eggemann (1):
sched/deadline: Fix missing clock update in migrate_task_rq_dl()
Dima Chumak (1):
net/mlx5: Lag, fix multipath lag activation
Dmitry Baryshkov (2):
arm64: dts: qcom: sm8250: fix usb2 qmp phy node drm/msm/dpu: make dpu_hw_ctl_clear_all_blendstages clear necessary LMs
Dmitry Osipenko (2):
regulator: tps65910: Silence deferred probe error
power: supply: smb347-charger: Add missing pin control activation
Dmytro Linkin (1):
net/mlx5e: Use correct eswitch for stack devices with lag
Dongliang Mu (4):
media: dvb-usb: fix uninit-value in dvb_usb_adapter_dvb_init
media: dvb-usb: fix uninit-value in vp702x_read_mac_addr
media: dvb-usb: Fix error handling in dvb_usb_i2c_init
media: em28xx-input: fix refcount bug in em28xx_usb_disconnect
Douglas Anderson (2):
ASoC: rt5682: Properly turn off regulators if wrong device ID
ASoC: rt5682: Remove unused variable in rt5682_i2c_remove()
Dylan Hung (1):
ARM: dts: aspeed-g6: Fix HVI3C function-group in pinctrl dtsi
Eric Biggers (1):
blk-crypto: fix check for too-large dun_bytes
Eric Dumazet (3):
ipv6: make exception cache less predictible
ipv4: make exception cache less predictible
ipv4: fix endianness issue in inet_rtm_getroute_build_skb()
Eugen Hristev (1):
media: atmel: atmel-sama5d2-isc: fix YUYV format
Evgeny Novikov (1):
usb: ehci-orion: Handle errors of clk_prepare_enable() in probe
Frederic Weisbecker (1):
posix-cpu-timers: Force next expiration recalc after itimer reset
Geert Uytterhoeven (5):
m68k: Fix invalid RMW_INSNS on CPUs that lack CAS
m68k: Fix asm register constraints for atomic ops
soc: rockchip: ROCKCHIP_GRF should not default to y, unconditionally
arm64: dts: renesas: r8a77995: draak: Remove bogus adv7511w properties
usb: gadget: udc: renesas_usb3: Fix soc_device_match() abuse
Geetha sowjanya (2):
octeontx2-af: Check capability flag while freeing ipolicer memory
octeontx2-af: cn10k: Use FLIT0 register instead of FLIT1
Giovanni Cabiddu (4):
crypto: qat - do not ignore errors from enable_vf2pf_comms()
crypto: qat - handle both source of interrupt in VF ISR
crypto: qat - do not export adf_iov_putmsg()
crypto: qat - use proper type for vf_mask
Greg Kroah-Hartman (1):
Linux 5.14.4
Guoqing Jiang (1):
raid1: ensure write behind bio has less than BIO_MAX_VECS sectors
Haiyue Wang (1):
gve: fix the wrong AdminQ buffer overflow check
Halil Pasic (1):
KVM: s390: index kvm->arch.idle_mask by vcpu_idx
Hans de Goede (2):
power: supply: axp288_fuel_gauge: Report register-address on readb / writeb errors
leds: trigger: audio: Add an activate callback to ensure the initial brightness is set
Harald Freudenberger (2):
s390/zcrypt: fix wrong offset index for APKA master key valid state s390/ap: fix state machine hang after failure to enable irq
Harshvardhan Jha (1):
drm/gma500: Fix end of loop tests for list_for_each_entry
He Fengqing (1):
bpf: Fix potential memleak and UAF in the verifier.
Helge Deller (1):
parisc: Fix unaligned-access crash in bootloader
Hongbo Li (1):
lib/mpi: use kcalloc in mpi_resize
Hou Tao (1):
nbd: do del_gendisk() asynchronously for NBD_DESTROY_ON_DISCONNECT
Huacai Chen (1):
irqchip/loongson-pch-pic: Improve edge triggered interrupt support
Ilya Leoshkevich (1):
selftests/bpf: Fix test_core_autosize on big-endian machines
J. Bruce Fields (1):
nfsd4: Fix forced-expiry locking
Jacob Keller (3):
ice: fix Tx queue iteration for Tx timestamp enablement
ice: add lock around Tx timestamp tracker flush
ice: restart periodic outputs around time changes
Jaegeuk Kim (1):
f2fs: guarantee to write dirty data when enabling checkpoint back
Jan Kara (1):
udf: Check LVID earlier
Jens Axboe (4):
io-wq: remove GFP_ATOMIC allocation off schedule out path
io_uring: IORING_OP_WRITE needs hash_reg_file set
io_uring: io_uring_complete() trace should take an integer
io-wq: check max_worker limits if a worker transitions bound state
Jeongtae Park (1):
regmap: fix the offset of register error log
Jiapeng Chong (2):
leds: is31fl32xx: Fix missing error code in is31fl32xx_parse_dt() net/mlx5: Fix missing return value in mlx5_devlink_eswitch_inline_mode_set()
John Fastabend (1):
bpf, selftests: Fix test_maps now that sockmap supports UDP
Jose Blanquicet (1):
selftests/bpf: Fix bpf-iter-tcp4 test to print correctly the dest IP
Judy Hsiao (1):
arm64: dts: qcom: sc7180: Set adau wakeup delay to 80 ms
Juhee Kang (1):
samples: pktgen: add missing IPv6 option to pktgen scripts
Julia Lawall (1):
drm/of: free the right object
Julio Faracco (1):
bootconfig: Fix missing return check of xbc_node_compose_key function
Jun Miao (1):
Bluetooth: btusb: Fix a unspported condition to set available debug features
Justin M. Forbes (1):
iwlwifi Add support for ax201 in Samsung Galaxy Book Flex2 Alpha
Kai Ye (2):
crypto: hisilicon/sec - fix the abnormal exiting process
crypto: hisilicon/sec - modify the hardware endian configuration
Kai-Heng Feng (2):
drm/amdgpu/acp: Make PM domain really work
Bluetooth: Move shutdown callback before flushing tx and rx queue
Kevin Mitchell (1):
lkdtm: replace SCSI_DISPATCH_CMD with SCSI_QUEUE_RQ
Krzysztof Hałasa (1):
media: TDA1997x: enable EDID support
Krzysztof Kozlowski (1):
arm64: dts: exynos: correct GIC CPU interfaces address range on Exynos7
Kuniyuki Iwashima (1):
bpf: Fix a typo of reuseport map in bpf.h.
Kuogee Hsieh (2):
drm/msm/dp: update is_connected status base on sink count at dp_pm_resume() drm/msm/dp: replug event is converted into an unplug followed by an plug events
Lars Poeschel (1):
auxdisplay: hd44780: Fix oops on module unloading
Laurent Pinchart (1):
drm: rcar-du: Don't put reference to drm_device in rcar_du_remove()
Len Baker (1):
CIFS: Fix a potencially linear read overflow
Leon Romanovsky (5):
ionic: cleanly release devlink instance
net: ti: am65-cpsw-nuss: fix wrong devlink release order
devlink: Clear whole devlink_flash_notify struct
net/mlx5: Remove all auxiliary devices at the unregister event
devlink: Break parameter notification sequence to be before/after unload/load driver
Linus Walleij (1):
clk: kirkwood: Fix a clocking boot regression
Luben Tuikov (2):
drm/amd/pm: Fix a bug communicating with the SMU (v5) drm/amd/pm: Fix a bug in semaphore double-lock
Lukas Bulwahn (2):
clk: staging: correct reference to config IOMEM to config HAS_IOMEM
hwmon: remove amd_energy driver in Makefile
Lukas Hannen (1):
time: Handle negative seconds correctly in timespec64_to_ns()
Lukasz Luba (1):
PM: EM: Increase energy calculation precision
Mansur Alisha Shaik (1):
media: venus: helper: do not set constrained parameters for UBWC
Maor Dickman (1):
net/mlx5: E-Switch, Set vhca id valid flag when creating indir fwd group
Marc Zyngier (2):
KVM: arm64: Unregister HYP sections from kmemleak in protected mode
KVM: arm64: vgic: Resample HW pending state on deactivation
Marco Chiappero (2):
crypto: qat - fix reuse of completion variable
crypto: qat - fix naming for init/shutdown VF to PF notifications
Marek Vasut (4):
ASoC: tlv320aic32x4: Fix TAS2505/TAS2521 channel count
drm: mxsfb: Enable recovery on underflow
drm: mxsfb: Increase number of outstanding requests on V4 and newer HW
drm: mxsfb: Clear FIFO_CLEAR bit
Martin Blumenstingl (1):
ARM: dts: meson8: Use a higher default GPU clock frequency
Martin KaFai Lau (1):
tcp: seq_file: Avoid skipping sk during tcp_seek_last_pos
Martynas Pumputis (1):
libbpf: Fix removal of inner map in bpf_object__create_map
Matija Glavinic Pecotic (1):
spi: davinci: invoke chipselect callback
Matthew Cover (1):
bpf, samples: Add missing mprog-disable to xdp_redirect_cpu's optstring
Maxim Levitsky (1):
KVM: VMX: avoid running vmx_handle_exit_irqoff in case of emulation
Maxim Mikityanskiy (3):
net/mlx5e: Prohibit inner indir TIRs in IPoIB net/mlx5e: Block LRO if firmware asks for tunneled LRO
sch_htb: Fix inconsistency when leaf qdisc creation fails
Mian Yousaf Kaukab (1):
crypto: ecc - handle unaligned input buffer in ecc_swap_digits
Mihai Carabas (1):
misc/pvpanic: fix set driver data
Mika Penttilä (1):
sched/numa: Fix is_core_idle()
Miklos Szeredi (3):
fuse: truncate pagecache on atomic_o_trunc
fuse: flush extending writes
fuse: wait for writepages in syncfs
Ming Lei (1):
block: return ELEVATOR_DISCARD_MERGE if possible
Nadezda Lutovinova (1):
usb: gadget: mv_u3d: request_irq() after initializing UDC
Naveen Mamindlapalli (1):
octeontx2-pf: send correct vlan priority mask to npc_install_flow_req
Nguyen Dinh Phi (1):
tty: Fix data race between tiocsti() and flush_to_ldisc()
Niklas Schnelle (2):
s390/pci: fix misleading rc in clp_set_pci_fn() RDMA/mlx5: Fix number of allocated XLT entries
Oleksij Rempel (1):
net: usb: asix: ax88772: add missing stop
Pali Rohár (3):
udf: Fix iocharset=utf8 mount option
isofs: joliet: Fix iocharset=utf8 mount option
arm64: dts: marvell: armada-37xx: Extend PCIe MEM space
Paolo Bonzini (1):
KVM: x86: clamp host mapping level to max_level in kvm_mmu_max_mapping_level
Parav Pandit (1):
net/mlx5: Fix unpublish devlink parameters
Pavel Begunkov (3):
io_uring: limit fixed table size by RLIMIT_NOFILE
io_uring: fail links of cancelled timeouts
bio: fix page leak bio_add_hw_page failure
Pavel Skripkin (6):
m68k: emu: Fix invalid free in nfeth_cleanup()
block: nbd: add sanity check for first_minor
media: go7007: fix memory leak in go7007_usb_probe
media: go7007: remove redundant initialization
net: cipso: fix warnings in netlbl_cipsov4_add_std
Bluetooth: add timeout sanity check to hci_inquiry
Peter Oberparleiter (2):
s390/debug: keep debug data on resize
s390/debug: fix debug area life cycle
Peter Robinson (1):
power: supply: cw2015: use dev_err_probe to allow deferred probe
Peter Zijlstra (1):
locking/mutex: Fix HANDOFF condition
Philipp Zabel (1):
media: coda: fix frame_mem_ctrl for YUV420 and YVU420 formats
Phong Hoang (1):
clocksource/drivers/sh_cmt: Fix wrong setting if don't request IRQ for clock source channel
Qiuxu Zhuo (1):
EDAC/i10nm: Fix NVDIMM detection
Quanyang Wang (1):
spi: spi-zynq-qspi: use wait_for_completion_timeout to make zynq_qspi_exec_mem_op not interruptible
Quentin Monnet (2):
libbpf: Return non-null error on failures in libbpf_find_prog_btf_id()
tools: Free BTF objects at various locations
Quentin Perret (2):
sched/deadline: Fix reset_on_fork reporting of DL tasks
sched: Fix UCLAMP_FLAG_IDLE setting
Rafael J. Wysocki (2):
PCI: PM: Avoid forcing PCI_D0 for wakeup reasons inconsistently
PCI: PM: Enable PME if it can be signaled from D3cold
Robert Foss (1):
drm: bridge: it66121: Check drm_bridge_attach retval
Roi Dayan (1):
net/mlx5e: Fix possible use-after-free deleting fdb rule
Ronnie Sahlberg (1):
cifs: Do not leak EDEADLK to dgetents64 for STATUS_USER_SESSION_DELETED
Ruozhu Li (2):
nvme-tcp: don't update queue count when failing to set io queues
nvme-rdma: don't update queue count when failing to set io queues
Sean Anderson (1):
crypto: mxs-dcp - Check for DMA mapping errors
Sean Christopherson (3):
Revert "KVM: x86: mmu: Add guest physical address check in translate_gpa()"
KVM: x86/mmu: Avoid collision with !PRESENT SPTEs in TDP MMU lpage stats
KVM: nVMX: Unconditionally clear nested.pi_pending on nested VM-Enter
Sebastian Krzyszkowiak (1):
power: supply: max17042_battery: fix typo in MAx17042_TOFF
Sergey Senozhatsky (1):
rcu/tree: Handle VM stoppage in stall detection
Sergey Shtylyov (16):
i2c: highlander: add IRQ check
usb: dwc3: meson-g12a: add IRQ check
usb: dwc3: qcom: add IRQ check
usb: gadget: udc: at91: add IRQ check
usb: gadget: udc: s3c2410: add IRQ check
usb: misc: brcmstb-usb-pinmap: add IRQ check
usb: phy: fsl-usb: add IRQ check
usb: phy: twl6030: add IRQ checks
usb: host: ohci-tmio: add IRQ check
usb: phy: tahvo: add IRQ check
i2c: synquacer: fix deferred probing
i2c: iop3xx: fix deferred probing
i2c: s3c2410: fix IRQ check
i2c: hix5hd2: fix IRQ check
i2c: mt65xx: fix IRQ check
i2c: xlp9xx: fix main IRQ check
Shengjiu Wang (1):
ASoC: fsl_rpmsg: Check -EPROBE_DEFER for getting clocks
Shuyi Cheng (1):
libbpf: Fix the possible memory leak on error
Sibi Sankar (1):
arm64: dts: qcom: sc7280: Fixup the cpufreq node
Smita Koralahalli (1):
EDAC/mce_amd: Do not load edac_mce_amd module on guests
Stefan Assmann (1):
i40e: improve locking of mac_filter_hash
Stefan Berger (2):
certs: Trigger creation of RSA module signing key if it's not an RSA key
tpm: ibmvtpm: Avoid error message when process gets signal while waiting
Stefan Wahren (1):
net: qualcomm: fix QCA7000 checksum handling
Stephan Gerhold (1):
soc: qcom: smsm: Fix missed interrupts if state changes while masked
Steve French (1):
smb3: fix posix extensions mount option
Steven Price (1):
drm/of: free the iterator object on failure
Stian Skjelstad (1):
udf_get_extendedattr() had no boundary checks.
Subbaraya Sundeep (4):
octeontx2-af: cn10k: Fix SDP base channel number
octeontx2-af: Fix loop in free and unmap counter
octeontx2-af: Fix mailbox errors in nix_rss_flowkey_cfg
octeontx2-af: Fix static code analyzer reported issues
Sudarsana Reddy Kalluru (1):
atlantic: Fix driver resume flow.
Sunil Goutham (3):
octeontx2-pf: Don't install VLAN offload rule if netdev is down
octeontx2-pf: Fix algorithm index in MCAM rules with RSS action
octeontx2-af: Set proper errorcode for IPv4 checksum errors
Sven Eckelmann (1):
debugfs: Return error during {full/open}_proxy_open() on rmmod
Sven Peter (1):
irqchip/apple-aic: Fix irq_disable from within irq handlers
THOBY Simon (1):
IMA: remove the dependency on CRYPTO_MD5
Takashi Iwai (1):
ALSA: usb-audio: Add lowlatency module option
Tedd Ho-Jeong An (1):
Bluetooth: mgmt: Fix wrong opcode in the response for add_adv cmd
Tetsuo Handa (1):
fbmem: don't allow too huge resolutions
Thomas Gleixner (3):
hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns()
hrtimer: Ensure timerfd notification for HIGHRES=n locking/local_lock: Add missing owner initialization
Tianjia Zhang (1):
crypto: tcrypt - Fix missing return value check
Tony Lindgren (6):
crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop()
spi: spi-fsl-dspi: Fix issue with uninitialized dma_slave_config
spi: spi-pic32: Fix issue with uninitialized dma_slave_config
mmc: sdhci: Fix issue with uninitialized dma_slave_config
mmc: dw_mmc: Fix issue with uninitialized dma_slave_config
mmc: moxart: Fix issue with uninitialized dma_slave_config
Valentin Schneider (3):
sched/topology: Skip updating masks for non-online nodes sched/debug: Don't update sched_domain debug directories before sched_debug_init()
PM: cpu: Make notifier chain use a raw_spinlock_t
Vignesh Raghavendra (1):
net: ti: am65-cpsw-nuss: fix RX IRQ state after .ndo_stop()
Vineeth Vijayan (1):
s390/cio: add dev_busid sysfs entry for each subchannel
Vitaly Kuznetsov (1):
hv_utils: Set the maximum packet size for VSS driver to the length of the receive buffer
Vladimir Oltean (6):
net: dsa: build tag_8021q.c as part of DSA core
net: dsa: tag_sja1105: optionally build as module when switch driver is module if PTP is enabled
net: dsa: stop syncing the bridge mcast_router attribute at join time
net: dsa: mt7530: remove the .port_set_mrouter implementation
net: dsa: don't disable multicast flooding to the CPU even without an IGMP querier
net: phy: marvell10g: fix broken PHY interrupts for anyone after us in the driver probe list
Voon Weifeng (1):
net: stmmac: fix INTR TBU status affecting irq count statistic
Waiman Long (3):
cgroup/cpuset: Fix a partition bug with hotplug cgroup/cpuset: Miscellaneous code cleanup cgroup/cpuset: Fix violation of cpuset locking rule
Wei Li (1):
drm/msm: Fix error return code in msm_drm_init()
Wei Yongjun (3):
drm/panfrost: Fix missing clk_disable_unprepare() on error in panfrost_clk_init()
media: omap3isp: Fix missing unlock in isp_subdev_notifier_complete() drm/exynos: g2d: fix missing unlock on error in g2d_runqueue_worker()
William Breathitt Gray (1):
counter: 104-quad-8: Return error when invalid mode during ceiling_write
Xiao Ni (1):
md/raid10: Remove unnecessary rcu_dereference in raid10_handle_discard
Xiyu Yang (1):
net: sched: Fix qdisc_rate_table refcount leak when get tcf_block failed
Xu Yu (1):
mm/swap: consider max pages in iomap_swapfile_add_extent
Yanfei Xu (2):
rcu: Fix to include first blocked task in stall warning
rcu: Fix stall-warning deadlock due to non-release of rcu_node ->lock
Yang Yingliang (1):
octeontx2-pf: cn10k: Fix error return code in otx2_set_flowkey_cfg()
Yizhuo (1):
media: atomisp: fix the uninitialized use and rename "retvalue"
Zelin Deng (1):
KVM: x86: Update vCPU's hv_clock before back to guest when tsc_offset is adjusted
Zenghui Yu (1):
bcma: Fix memory leak for internally-handled cores
Zhang Qilong (2):
ASoC: mediatek: mt8192:Fix Unbalanced pm_runtime_enable in mt8192_afe_pcm_dev_probe
ASoC: mediatek: mt8183: Fix Unbalanced pm_runtime_enable in mt8183_afe_pcm_dev_probe
Zhen Lei (4):
genirq/timings: Fix error return code in irq_timings_test_irqs()
firmware: fix theoretical UAF race with firmware cache and resume driver core: Fix error return code in really_probe()
media: venus: hfi: fix return value check in sys_get_prop_image_version()
Greg Kroah-Hartman
maintainerDocumentation/fault-injection/provoke-crashes.rst +1 -1
@@ -29,7 +29,7 @@ recur_count cpoint_name Where in the kernel to trigger the action. It can be one of INT_HARDWARE_ENTRY, INT_HW_IRQ_EN, INT_TASKLET_ENTRY, - FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_DISPATCH_CMD, + FS_DEVRW, MEM_SWAPOUT, TIMERADD, SCSI_QUEUE_RQ, IDE_CORE_CP, or DIRECT cpoint_type
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 14 -SUBLEVEL = 3 +SUBLEVEL = 4 EXTRAVERSION = NAME = Opossums on Parade
arch/arm/boot/dts/aspeed-bmc-ibm-everest.dts +1 -1
@@ -2832,7 +2832,7 @@ &pinctrl_emmc_default { &emmc { status = "okay"; - clk-phase-mmc-hs200 = <180>, <180>; + clk-phase-mmc-hs200 = <210>, <228>; }; &fsim0 {
arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi +2 -2
@@ -208,12 +208,12 @@ pinctrl_gpiu7_default: gpiu7_default { }; pinctrl_hvi3c3_default: hvi3c3_default { - function = "HVI3C3"; + function = "I3C3"; groups = "HVI3C3"; }; pinctrl_hvi3c4_default: hvi3c4_default { - function = "HVI3C4"; + function = "I3C4"; groups = "HVI3C4"; };
arch/arm/boot/dts/at91-sam9x60ek.dts +15 -1
@@ -92,6 +92,8 @@ sw1 { leds { compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_leds>; status = "okay"; /* Conflict with pwm0. */ red {
@@ -537,6 +539,10 @@ AT91_PIOA 18 AT91_PERIPH_A (AT91_PINCTRL_PULL_UP | AT91_PINCTRL_DRIVE_STRENGTH_H AT91_PIOA 19 AT91_PERIPH_A (AT91_PINCTRL_PULL_UP | AT91_PINCTRL_DRIVE_STRENGTH_HI) /* PA19 DAT2 periph A with pullup */ AT91_PIOA 20 AT91_PERIPH_A (AT91_PINCTRL_PULL_UP | AT91_PINCTRL_DRIVE_STRENGTH_HI)>; /* PA20 DAT3 periph A with pullup */ }; + pinctrl_sdmmc0_cd: sdmmc0_cd { + atmel,pins = + <AT91_PIOA 23 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; }; sdmmc1 {
@@ -569,6 +575,14 @@ pinctrl_usb_default: usb_default { AT91_PIOD 16 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; }; }; + + leds { + pinctrl_gpio_leds: gpio_leds { + atmel,pins = <AT91_PIOB 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOB 12 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOB 13 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + }; }; /* pinctrl */ &pwm0 {
@@ -580,7 +594,7 @@ &pwm0 { &sdmmc0 { bus-width = <4>; pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_sdmmc0_default>; + pinctrl-0 = <&pinctrl_sdmmc0_default &pinctrl_sdmmc0_cd>; status = "okay"; cd-gpios = <&pioA 23 GPIO_ACTIVE_LOW>; disable-wp;
arch/arm/boot/dts/at91-sama5d3_xplained.dts +29 -0
@@ -57,6 +57,8 @@ slot@0 { }; spi0: spi@f0004000 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi0_cs>; cs-gpios = <&pioD 13 0>, <0>, <0>, <&pioD 16 0>; status = "okay"; };
@@ -169,6 +171,8 @@ slot@0 { }; spi1: spi@f8008000 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi1_cs>; cs-gpios = <&pioC 25 0>; status = "okay"; };
@@ -248,6 +252,26 @@ pinctrl_usb_default: usb_default { <AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; }; + + pinctrl_gpio_leds: gpio_leds_default { + atmel,pins = + <AT91_PIOE 23 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 24 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + + pinctrl_spi0_cs: spi0_cs_default { + atmel,pins = + <AT91_PIOD 13 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOD 16 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + + pinctrl_spi1_cs: spi1_cs_default { + atmel,pins = <AT91_PIOC 25 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + + pinctrl_vcc_mmc0_reg_gpio: vcc_mmc0_reg_gpio_default { + atmel,pins = <AT91_PIOE 2 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; }; }; };
@@ -339,6 +363,8 @@ rootfs@800000 { vcc_mmc0_reg: fixedregulator_mmc0 { compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_vcc_mmc0_reg_gpio>; gpio = <&pioE 2 GPIO_ACTIVE_LOW>; regulator-name = "mmc0-card-supply"; regulator-min-microvolt = <3300000>;
@@ -362,6 +388,9 @@ bp3 { leds { compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_leds>; + status = "okay"; d2 { label = "d2";
arch/arm/boot/dts/at91-sama5d4_xplained.dts +19 -0
@@ -90,6 +90,8 @@ usart4: serial@fc010000 { }; spi1: spi@fc018000 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_spi0_cs>; cs-gpios = <&pioB 21 0>; status = "okay"; };
@@ -147,6 +149,19 @@ pinctrl_macb0_phy_irq: macb0_phy_irq_0 { atmel,pins = <AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; }; + pinctrl_spi0_cs: spi0_cs_default { + atmel,pins = + <AT91_PIOB 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + pinctrl_gpio_leds: gpio_leds_default { + atmel,pins = + <AT91_PIOD 30 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 15 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; + pinctrl_vcc_mmc1_reg: vcc_mmc1_reg { + atmel,pins = + <AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; }; }; };
@@ -252,6 +267,8 @@ pb_user1 { leds { compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_gpio_leds>; status = "okay"; d8 {
@@ -278,6 +295,8 @@ vcc_3v3_reg: fixedregulator_3v3 { vcc_mmc1_reg: fixedregulator_mmc1 { compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_vcc_mmc1_reg>; gpio = <&pioE 4 GPIO_ACTIVE_LOW>; regulator-name = "VDD MCI1"; regulator-min-microvolt = <3300000>;
arch/arm/boot/dts/meson8.dtsi +5 -0
@@ -304,8 +304,13 @@ mali: gpu@c0000 { "pp2", "ppmmu2", "pp4", "ppmmu4", "pp5", "ppmmu5", "pp6", "ppmmu6"; resets = <&reset RESET_MALI>; + clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_MALI>; clock-names = "bus", "core"; + + assigned-clocks = <&clkc CLKID_MALI>; + assigned-clock-rates = <318750000>; + operating-points-v2 = <&gpu_opp_table>; #cooling-cells = <2>; /* min followed by max */ };
arch/arm/boot/dts/meson8b-ec100.dts +2 -2
@@ -148,7 +148,7 @@ vcck: regulator-vcck { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; - vin-supply = <&vcc_5v>; + pwm-supply = <&vcc_5v>; pwms = <&pwm_cd 0 1148 0>; pwm-dutycycle-range = <100 0>;
@@ -232,7 +232,7 @@ vddee: regulator-vddee { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; - vin-supply = <&vcc_5v>; + pwm-supply = <&vcc_5v>; pwms = <&pwm_cd 1 1148 0>; pwm-dutycycle-range = <100 0>;
arch/arm/boot/dts/meson8b-mxq.dts +3 -1
@@ -34,6 +34,8 @@ vcck: regulator-vcck { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; + pwm-supply = <&vcc_5v>; + pwms = <&pwm_cd 0 1148 0>; pwm-dutycycle-range = <100 0>;
@@ -79,7 +81,7 @@ vddee: regulator-vddee { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; - vin-supply = <&vcc_5v>; + pwm-supply = <&vcc_5v>; pwms = <&pwm_cd 1 1148 0>; pwm-dutycycle-range = <100 0>;
arch/arm/boot/dts/meson8b-odroidc1.dts +2 -2
@@ -131,7 +131,7 @@ vcck: regulator-vcck { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; - vin-supply = <&p5v0>; + pwm-supply = <&p5v0>; pwms = <&pwm_cd 0 12218 0>; pwm-dutycycle-range = <91 0>;
@@ -163,7 +163,7 @@ vddee: regulator-vddee { regulator-min-microvolt = <860000>; regulator-max-microvolt = <1140000>; - vin-supply = <&p5v0>; + pwm-supply = <&p5v0>; pwms = <&pwm_cd 1 12218 0>; pwm-dutycycle-range = <91 0>;
arch/arm64/boot/dts/exynos/exynos7.dtsi +1 -1
@@ -102,7 +102,7 @@ gic: interrupt-controller@11001000 { #address-cells = <0>; interrupt-controller; reg = <0x11001000 0x1000>, - <0x11002000 0x1000>, + <0x11002000 0x2000>, <0x11004000 0x2000>, <0x11006000 0x2000>; };
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +17 -0
@@ -135,6 +135,23 @@ &pcie0 { pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>; status = "okay"; reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>; + /* + * U-Boot port for Turris Mox has a bug which always expects that "ranges" DT property + * contains exactly 2 ranges with 3 (child) address cells, 2 (parent) address cells and + * 2 size cells and also expects that the second range starts at 16 MB offset. If these + * conditions are not met then U-Boot crashes during loading kernel DTB file. PCIe address + * space is 128 MB long, so the best split between MEM and IO is to use fixed 16 MB window + * for IO and the rest 112 MB (64+32+16) for MEM, despite that maximal IO size is just 64 kB. + * This bug is not present in U-Boot ports for other Armada 3700 devices and is fixed in + * U-Boot version 2021.07. See relevant U-Boot commits (the last one contains fix): + * https://source.denx.de/u-boot/u-boot/-/commit/cb2ddb291ee6fcbddd6d8f4ff49089dfe580f5d7 + * https://source.denx.de/u-boot/u-boot/-/commit/c64ac3b3185aeb3846297ad7391fc6df8ecd73bf + * https://source.denx.de/u-boot/u-boot/-/commit/4a82fca8e330157081fc132a591ebd99ba02ee33 + */ + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0xe8000000 0 0xe8000000 0 0x01000000 /* Port 0 IO */ + 0x82000000 0 0xe9000000 0 0xe9000000 0 0x07000000>; /* Port 0 MEM */ /* enabled by U-Boot if PCIe module is present */ status = "disabled";
arch/arm64/boot/dts/marvell/armada-37xx.dtsi +9 -2
@@ -489,8 +489,15 @@ pcie0: pcie@d0070000 { #interrupt-cells = <1>; msi-parent = <&pcie0>; msi-controller; - ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x1000000 /* Port 0 MEM */ - 0x81000000 0 0xe9000000 0 0xe9000000 0 0x10000>; /* Port 0 IO*/ + /* + * The 128 MiB address range [0xe8000000-0xf0000000] is + * dedicated for PCIe and can be assigned to 8 windows + * with size a power of two. Use one 64 KiB window for + * IO at the end and the remaining seven windows + * (totaling 127 MiB) for MEM. + */ + ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x07f00000 /* Port 0 MEM */ + 0x81000000 0 0xefff0000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */ interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc 0>, <0 0 0 2 &pcie_intc 1>,
arch/arm64/boot/dts/qcom/sc7180-trogdor-coachz.dtsi +1 -1
@@ -23,7 +23,7 @@ / { adau7002: audio-codec-1 { compatible = "adi,adau7002"; IOVDD-supply = <&pp1800_l15a>; - wakeup-delay-ms = <15>; + wakeup-delay-ms = <80>; #sound-dai-cells = <0>; };
arch/arm64/boot/dts/qcom/sc7280.dtsi +3 -3
@@ -1437,9 +1437,9 @@ rpmhcc: clock-controller { cpufreq_hw: cpufreq@18591000 { compatible = "qcom,cpufreq-epss"; - reg = <0 0x18591000 0 0x1000>, - <0 0x18592000 0 0x1000>, - <0 0x18593000 0 0x1000>; + reg = <0 0x18591100 0 0x900>, + <0 0x18592100 0 0x900>, + <0 0x18593100 0 0x900>; clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_GPLL0>; clock-names = "xo", "alternate"; #freq-domain-cells = <1>;
arch/arm64/boot/dts/qcom/sm8250.dtsi +1 -1
@@ -2210,7 +2210,7 @@ usb_2_qmpphy: phy@88eb000 { <&gcc GCC_USB3_PHY_SEC_BCR>; reset-names = "phy", "common"; - usb_2_ssphy: lane@88eb200 { + usb_2_ssphy: lanes@88eb200 { reg = <0 0x088eb200 0 0x200>, <0 0x088eb400 0 0x200>, <0 0x088eb800 0 0x800>;
arch/arm64/boot/dts/qcom/sm8350.dtsi +3 -5
@@ -666,12 +666,10 @@ ipa: ipa@1e40000 { clocks = <&rpmhcc RPMH_IPA_CLK>; clock-names = "core"; - interconnects = <&aggre2_noc MASTER_IPA &gem_noc SLAVE_LLCC>, - <&mc_virt MASTER_LLCC &mc_virt SLAVE_EBI1>, + interconnects = <&aggre2_noc MASTER_IPA &mc_virt SLAVE_EBI1>, <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_IPA_CFG>; - interconnect-names = "ipa_to_llcc", - "llcc_to_ebi1", - "appss_to_ipa"; + interconnect-names = "memory", + "config"; qcom,smem-states = <&ipa_smp2p_out 0>, <&ipa_smp2p_out 1>;
arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi +1 -0
@@ -20,6 +20,7 @@ &avb { pinctrl-names = "default"; phy-handle = <&phy0>; tx-internal-delay-ps = <2000>; + rx-internal-delay-ps = <1800>; status = "okay"; phy0: ethernet-phy@0 {
arch/arm64/boot/dts/renesas/r8a77995-draak.dts +0 -4
@@ -277,10 +277,6 @@ hdmi-encoder@39 { interrupt-parent = <&gpio1>; interrupts = <28 IRQ_TYPE_LEVEL_LOW>; - /* Depends on LVDS */ - max-clock = <135000000>; - min-vrefresh = <50>; - adi,input-depth = <8>; adi,input-colorspace = "rgb"; adi,input-clock = "1x";
arch/arm64/kvm/arm.c +7 -0
@@ -15,6 +15,7 @@#include <linux/fs.h> #include <linux/mman.h> #include <linux/sched.h> +#include <linux/kmemleak.h> #include <linux/kvm.h> #include <linux/kvm_irqfd.h> #include <linux/irqbypass.h>
@@ -1986,6 +1987,12 @@ static int finalize_hyp_mode(void)if (ret)return ret; +/* +* Exclude HYP BSS from kmemleak so that it doesn't get peeked +* at, which would end badly once the section is inaccessible. +* None of other sections should ever be introspected. +*/ +kmemleak_free_part (__hyp_bss_start, __hyp_bss_end - __hyp_bss_start); ret =pkvm_mark_hyp_section (__hyp_bss);if (ret)return ret;
arch/arm64/kvm/vgic/vgic-v2.c +5 -31
@@ -60,6 +60,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)u32 val = cpuif->vgic_lr[lr];u32 cpuid, intid = val &GICH_LR_VIRTUALID ;struct vgic_irq *irq; +bool deactivated;/* Extract the source vCPU id from the LR */ cpuid = val &GICH_LR_PHYSID_CPUID ;
@@ -75,7 +76,8 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)raw_spin_lock (&irq->irq_lock); -/* Always preserve the active bit */ +/* Always preserve the active bit, note deactivation */ + deactivated = irq->active && !(val &GICH_LR_ACTIVE_BIT ); irq->active = !!(val &GICH_LR_ACTIVE_BIT );if (irq->active &&vgic_irq_is_sgi (intid))
@@ -96,36 +98,8 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)if (irq->config ==VGIC_CONFIG_LEVEL && !(val &GICH_LR_STATE )) irq->pending_latch = false; -/* -* Level-triggered mapped IRQs are special because we only -* observe rising edges as input to the VGIC. -* -* If the guest never acked the interrupt we have to sample -* the physical line and set the line level, because the -* device state could have changed or we simply need to -* process the still pending interrupt later. -* -* If this causes us to lower the level, we have to also clear -* the physical active state, since we will otherwise never be -* told when the interrupt becomes asserted again. -* -* Another case is when the interrupt requires a helping hand -* on deactivation (no HW deactivation, for example). -*/ -if (vgic_irq_is_mapped_level (irq)) { -bool resample = false; - -if (val &GICH_LR_PENDING_BIT ) { - irq->line_level =vgic_get_phys_line_level (irq); - resample = !irq->line_level; - }else if (vgic_irq_needs_resampling (irq) && - !(irq->active || irq->pending_latch)) { - resample = true; - } - -if (resample) -vgic_irq_set_phys_active (irq, false); - } +/* Handle resampling for mapped interrupts if required */ +vgic_irq_handle_resampling (irq, deactivated, val &GICH_LR_PENDING_BIT );raw_spin_unlock (&irq->irq_lock);vgic_put_irq (vcpu->kvm, irq);
arch/arm64/kvm/vgic/vgic-v3.c +5 -31
@@ -46,6 +46,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)u32 intid, cpuid;struct vgic_irq *irq;bool is_v2_sgi = false; +bool deactivated; cpuid = val &GICH_LR_PHYSID_CPUID ; cpuid >>=GICH_LR_PHYSID_CPUID_SHIFT ;
@@ -68,7 +69,8 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)raw_spin_lock (&irq->irq_lock); -/* Always preserve the active bit */ +/* Always preserve the active bit, note deactivation */ + deactivated = irq->active && !(val &ICH_LR_ACTIVE_BIT ); irq->active = !!(val &ICH_LR_ACTIVE_BIT );if (irq->active && is_v2_sgi)
@@ -89,36 +91,8 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)if (irq->config ==VGIC_CONFIG_LEVEL && !(val &ICH_LR_STATE )) irq->pending_latch = false; -/* -* Level-triggered mapped IRQs are special because we only -* observe rising edges as input to the VGIC. -* -* If the guest never acked the interrupt we have to sample -* the physical line and set the line level, because the -* device state could have changed or we simply need to -* process the still pending interrupt later. -* -* If this causes us to lower the level, we have to also clear -* the physical active state, since we will otherwise never be -* told when the interrupt becomes asserted again. -* -* Another case is when the interrupt requires a helping hand -* on deactivation (no HW deactivation, for example). -*/ -if (vgic_irq_is_mapped_level (irq)) { -bool resample = false; - -if (val &ICH_LR_PENDING_BIT ) { - irq->line_level =vgic_get_phys_line_level (irq); - resample = !irq->line_level; - }else if (vgic_irq_needs_resampling (irq) && - !(irq->active || irq->pending_latch)) { - resample = true; - } - -if (resample) -vgic_irq_set_phys_active (irq, false); - } +/* Handle resampling for mapped interrupts if required */ +vgic_irq_handle_resampling (irq, deactivated, val &ICH_LR_PENDING_BIT );raw_spin_unlock (&irq->irq_lock);vgic_put_irq (vcpu->kvm, irq);
arch/arm64/kvm/vgic/vgic.c +38 -0
@@ -1022,3 +1022,41 @@ bool kvm_vgic_map_is_active(struct kvm_vcpu *vcpu, unsigned int vintid)return map_is_active; } + +/* +* Level-triggered mapped IRQs are special because we only observe rising +* edges as input to the VGIC. +* +* If the guest never acked the interrupt we have to sample the physical +* line and set the line level, because the device state could have changed +* or we simply need to process the still pending interrupt later. +* +* We could also have entered the guest with the interrupt active+pending. +* On the next exit, we need to re-evaluate the pending state, as it could +* otherwise result in a spurious interrupt by injecting a now potentially +* stale pending state. +* +* If this causes us to lower the level, we have to also clear the physical +* active state, since we will otherwise never be told when the interrupt +* becomes asserted again. +* +* Another case is when the interrupt requires a helping hand on +* deactivation (no HW deactivation, for example). +*/ +void vgic_irq_handle_resampling (struct vgic_irq *irq, +bool lr_deactivated,bool lr_pending) +{ +if (vgic_irq_is_mapped_level (irq)) { +bool resample = false; + +if (unlikely (vgic_irq_needs_resampling (irq))) { + resample = !(irq->active || irq->pending_latch); + }else if (lr_pending || (lr_deactivated && irq->line_level)) { + irq->line_level =vgic_get_phys_line_level (irq); + resample = !irq->line_level; + } + +if (resample) +vgic_irq_set_phys_active (irq, false); + } +}
arch/arm64/kvm/vgic/vgic.h +2 -0
@@ -169,6 +169,8 @@ void vgic_irq_set_phys_active(struct vgic_irq *irq, bool active);bool vgic_queue_irq_unlock (struct kvm *kvm,struct vgic_irq *irq,unsigned long flags);void vgic_kick_vcpus (struct kvm *kvm); +void vgic_irq_handle_resampling (struct vgic_irq *irq, +bool lr_deactivated,bool lr_pending);int vgic_check_ioaddr (struct kvm *kvm,phys_addr_t *ioaddr,phys_addr_t addr,phys_addr_t alignment);
arch/m68k/Kconfig.cpu +7 -1
@@ -26,6 +26,7 @@ config COLDFIRE bool "Coldfire CPU family support" select ARCH_HAVE_CUSTOM_GPIO_H select CPU_HAS_NO_BITFIELDS + select CPU_HAS_NO_CAS select CPU_HAS_NO_MULDIV64 select GENERIC_CSUM select GPIOLIB
@@ -39,6 +40,7 @@ config M68000 bool depends on !MMU select CPU_HAS_NO_BITFIELDS + select CPU_HAS_NO_CAS select CPU_HAS_NO_MULDIV64 select CPU_HAS_NO_UNALIGNED select GENERIC_CSUM
@@ -54,6 +56,7 @@ config M68000 config MCPU32 bool select CPU_HAS_NO_BITFIELDS + select CPU_HAS_NO_CAS select CPU_HAS_NO_UNALIGNED select CPU_NO_EFFICIENT_FFS help
@@ -383,7 +386,7 @@ config ADVANCED config RMW_INSNS bool "Use read-modify-write instructions" - depends on ADVANCED + depends on ADVANCED && !CPU_HAS_NO_CAS help This allows to use certain instructions that work with indivisible read-modify-write bus cycles. While this is faster than the
@@ -450,6 +453,9 @@ config M68K_L2_CACHE config CPU_HAS_NO_BITFIELDS bool +config CPU_HAS_NO_CAS + bool + config CPU_HAS_NO_MULDIV64 bool
arch/m68k/coldfire/clk.c +1 -1
@@ -78,7 +78,7 @@ int clk_enable(struct clk *clk)unsigned long flags;if (!clk) -return -EINVAL ; +return 0 ;spin_lock_irqsave (&clk_lock, flags);if ((clk->enabled++ ==0 ) && clk->clk_ops)
arch/m68k/emu/nfeth.c +2 -2
@@ -254,8 +254,8 @@ static void __exit nfeth_cleanup(void)for (i =0 ; i <MAX_UNIT ; i++) {if (nfeth_dev[i]) { -unregister_netdev (nfeth_dev[0 ]); -free_netdev (nfeth_dev[0 ]); +unregister_netdev (nfeth_dev[i]); +free_netdev (nfeth_dev[i]); } }free_irq (nfEtherIRQ, nfeth_interrupt);
arch/m68k/include/asm/atomic.h +2 -2
@@ -48,7 +48,7 @@ static inline int arch_atomic_##op##_return(int i, atomic_t *v) \ " casl %2,%1,%0\n" \ " jne 1b" \ : "+m" (*v), "=&d" (t), "=&d" (tmp) \ - : "g" (i), "2" (arch_atomic_read(v))); \ + : "di" (i), "2" (arch_atomic_read(v))); \return t; \ }
@@ -63,7 +63,7 @@ static inline int arch_atomic_fetch_##op(int i, atomic_t *v) \ " casl %2,%1,%0\n" \ " jne 1b" \ : "+m" (*v), "=&d" (t), "=&d" (tmp) \ - : "g" (i), "2" (arch_atomic_read(v))); \ + : "di" (i), "2" (arch_atomic_read(v))); \return tmp; \ }
arch/parisc/boot/compressed/misc.c +1 -1
@@ -26,7 +26,7 @@extern char input_data[];extern int input_len;/* output_len is inserted by the linker possibly at an unaligned address */ -extern __le32 output_len__aligned(1) ; +extern char output_len;extern char _text, _end;extern char _bss, _ebss;extern char _startcode_end;
arch/s390/include/asm/kvm_host.h +1 -0
@@ -957,6 +957,7 @@ struct kvm_arch{atomic64_t cmma_dirty_pages;/* subset of available cpu features enabled by user space */ DECLARE_BITMAP (cpu_feat,KVM_S390_VM_CPU_FEAT_NR_BITS ); +/* indexed by vcpu_idx */ DECLARE_BITMAP (idle_mask,KVM_MAX_VCPUS );struct kvm_s390_gisa_interrupt gisa_int;struct kvm_s390_pv pv;
arch/s390/include/asm/lowcore.h +2 -1
@@ -124,7 +124,8 @@ struct lowcore {/* Restart function and parameter. */ __u64 restart_fn;/* 0x0370 */ __u64 restart_data;/* 0x0378 */ -__u64 restart_source;/* 0x0380 */ +__u32 restart_source;/* 0x0380 */ +__u32 restart_flags;/* 0x0384 */ /* Address space pointer. */ __u64 kernel_asce;/* 0x0388 */
arch/s390/include/asm/processor.h +2 -0
@@ -26,6 +26,8 @@#define _CIF_MCCK_GUEST BIT(CIF_MCCK_GUEST)#define _CIF_DEDICATED_CPU BIT(CIF_DEDICATED_CPU) +#define RESTART_FLAG_CTLREGS _AC(1 << 0, U) +#ifndef __ASSEMBLY__#include <linux/cpumask.h>
arch/s390/kernel/asm-offsets.c +1 -0
@@ -116,6 +116,7 @@ int main(void)OFFSET (__LC_RESTART_FN, lowcore, restart_fn);OFFSET (__LC_RESTART_DATA, lowcore, restart_data);OFFSET (__LC_RESTART_SOURCE, lowcore, restart_source); +OFFSET (__LC_RESTART_FLAGS, lowcore, restart_flags);OFFSET (__LC_KERNEL_ASCE, lowcore, kernel_asce);OFFSET (__LC_USER_ASCE, lowcore, user_asce);OFFSET (__LC_LPP, lowcore, lpp);
arch/s390/kernel/debug.c +109 -67
252 lines not on this page · raw message
arch/s390/kernel/entry.S +7 -4
@@ -624,12 +624,15 @@ ENTRY(mcck_int_handler) 4: j 4b ENDPROC(mcck_int_handler) -# -# PSW restart interrupt handler -# ENTRY(restart_int_handler) ALTERNATIVE "", ".insn s,0xb2800000,_LPP_OFFSET", 40 stg %r15,__LC_SAVE_AREA_RESTART + TSTMSK __LC_RESTART_FLAGS,RESTART_FLAG_CTLREGS,4 + jz 0f + la %r15,4095 + lctlg %c0,%c15,__LC_CREGS_SAVE_AREA-4095(%r15) +0: larl %r15,.Lstosm_tmp + stosm 0(%r15),0x04 # turn dat on, keep irqs off lg %r15,__LC_RESTART_STACK xc STACK_FRAME_OVERHEAD(__PT_SIZE,%r15),STACK_FRAME_OVERHEAD(%r15) stmg %r0,%r14,STACK_FRAME_OVERHEAD+__PT_R0(%r15)
@@ -638,7 +641,7 @@ ENTRY(restart_int_handler) xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15) lg %r1,__LC_RESTART_FN # load fn, parm & source cpu lg %r2,__LC_RESTART_DATA - lg %r3,__LC_RESTART_SOURCE + lgf %r3,__LC_RESTART_SOURCE ltgr %r3,%r3 # test source cpu address jm 1f # negative -> skip source stop 0: sigp %r4,%r3,SIGP_SENSE # sigp sense to source cpu
arch/s390/kernel/ipl.c +0 -3
@@ -179,8 +179,6 @@ static inline int __diag308(unsigned long subcode, void *addr)int diag308 (unsigned long subcode,void *addr) { -if (IS_ENABLED (CONFIG_KASAN )) -__arch_local_irq_stosm (0x04 );/* enable DAT */ diag_stat_inc (DIAG_STAT_X308 );return __diag308 (subcode, addr); }
@@ -1843,7 +1841,6 @@ static struct kobj_attribute on_restart_attr = __ATTR_RW(on_restart);static void __do_restart (void *ignore) { -__arch_local_irq_stosm (0x04 );/* enable DAT */ smp_send_stop ();#ifdef CONFIG_CRASH_DUMP crash_kexec (NULL );
arch/s390/kernel/machine_kexec.c +0 -1
@@ -263,7 +263,6 @@ static void __do_machine_kexec(void *data)*/ static void __machine_kexec (void *data) { -__arch_local_irq_stosm (0x04 );/* enable DAT */ pfault_fini ();tracing_off ();debug_locks_off ();
arch/s390/kernel/setup.c +8 -1
@@ -421,7 +421,7 @@ static void __init setup_lowcore_dat_off(void) lc->restart_stack = (unsigned long ) restart_stack; lc->restart_fn = (unsigned long ) do_restart; lc->restart_data =0 ; - lc->restart_source =-1UL ; + lc->restart_source =-1U ; mcck_stack = (unsigned long )memblock_alloc (THREAD_SIZE ,THREAD_SIZE );if (!mcck_stack)
@@ -450,12 +450,19 @@ static void __init setup_lowcore_dat_off(void)static void __init setup_lowcore_dat_on (void ) { +struct lowcore *lc = lowcore_ptr[0 ]; +__ctl_clear_bit (0 ,28 ); S390_lowcore.external_new_psw.mask |=PSW_MASK_DAT ; S390_lowcore.svc_new_psw.mask |=PSW_MASK_DAT ; S390_lowcore.program_new_psw.mask |=PSW_MASK_DAT ; S390_lowcore.io_new_psw.mask |=PSW_MASK_DAT ; +__ctl_store (S390_lowcore.cregs_save_area,0 ,15 );__ctl_set_bit (0 ,28 ); +mem_assign_absolute (S390_lowcore.restart_flags,RESTART_FLAG_CTLREGS ); +mem_assign_absolute (S390_lowcore.program_new_psw, lc->program_new_psw); +memcpy_absolute (&S390_lowcore.cregs_save_area, lc->cregs_save_area, +sizeof (S390_lowcore.cregs_save_area)); }static struct resource code_resource = {
arch/s390/kernel/smp.c +22 -9
@@ -252,6 +252,7 @@ static void pcpu_prepare_secondary(struct pcpu *pcpu, int cpu)cpumask_set_cpu (cpu, &init_mm.context.cpu_attach_mask);cpumask_set_cpu (cpu,mm_cpumask (&init_mm)); lc->cpu_nr = cpu; + lc->restart_flags =RESTART_FLAG_CTLREGS ; lc->spinlock_lockval =arch_spin_lockval (cpu); lc->spinlock_index =0 ; lc->percpu_offset = __per_cpu_offset[cpu];
@@ -297,7 +298,7 @@ static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data) lc->restart_stack = lc->nodat_stack; lc->restart_fn = (unsigned long ) func; lc->restart_data = (unsigned long ) data; - lc->restart_source =-1UL ; + lc->restart_source =-1U ;pcpu_sigp_retry (pcpu,SIGP_RESTART ,0 ); }
@@ -311,12 +312,12 @@ static void __pcpu_delegate(pcpu_delegate_fn *func, void *data)func (data);/* should not return */ } -static void __no_sanitize_address pcpu_delegate(struct pcpu *pcpu, -pcpu_delegate_fn *func, -void *data,unsigned long stack) +static void pcpu_delegate (struct pcpu *pcpu, +pcpu_delegate_fn *func, +void *data,unsigned long stack) {struct lowcore *lc = lowcore_ptr[pcpu - pcpu_devices]; -unsigned long source_cpu =stap (); +unsigned int source_cpu =stap ();__load_psw_mask (PSW_KERNEL_BITS |PSW_MASK_DAT );if (pcpu->address == source_cpu) {
@@ -569,6 +570,9 @@ static void smp_ctl_bit_callback(void *info)__ctl_load (cregs,0 ,15 ); } +static DEFINE_SPINLOCK (ctl_lock); +static unsigned long ctlreg; +/* * Set a bit in a control register of all cpus */
@@ -576,6 +580,11 @@ void smp_ctl_set_bit(int cr, int bit) {struct ec_creg_mask_parms parms = {1UL << bit,-1UL , cr }; +spin_lock (&ctl_lock); +memcpy_absolute (&ctlreg, &S390_lowcore.cregs_save_area[cr],sizeof (ctlreg)); +__set_bit (bit, &ctlreg); +memcpy_absolute (&S390_lowcore.cregs_save_area[cr], &ctlreg,sizeof (ctlreg)); +spin_unlock (&ctl_lock);on_each_cpu (smp_ctl_bit_callback, &parms,1 ); }EXPORT_SYMBOL (smp_ctl_set_bit);
@@ -587,6 +596,11 @@ void smp_ctl_clear_bit(int cr, int bit) {struct ec_creg_mask_parms parms = {0 , ~(1UL << bit), cr }; +spin_lock (&ctl_lock); +memcpy_absolute (&ctlreg, &S390_lowcore.cregs_save_area[cr],sizeof (ctlreg)); +__clear_bit (bit, &ctlreg); +memcpy_absolute (&S390_lowcore.cregs_save_area[cr], &ctlreg,sizeof (ctlreg)); +spin_unlock (&ctl_lock);on_each_cpu (smp_ctl_bit_callback, &parms,1 ); }EXPORT_SYMBOL (smp_ctl_clear_bit);
@@ -895,14 +909,13 @@ static void smp_init_secondary(void)/* * Activate a secondary processor. */ -static void __no_sanitize_address smp_start_secondary(void *cpuvoid) +static void smp_start_secondary (void *cpuvoid) { S390_lowcore.restart_stack = (unsigned long ) restart_stack; S390_lowcore.restart_fn = (unsigned long ) do_restart; S390_lowcore.restart_data =0 ; - S390_lowcore.restart_source =-1UL ; -__ctl_load (S390_lowcore.cregs_save_area,0 ,15 ); -__load_psw_mask (PSW_KERNEL_BITS |PSW_MASK_DAT ); + S390_lowcore.restart_source =-1U ; + S390_lowcore.restart_flags =0 ;call_on_stack_noreturn (smp_init_secondary, S390_lowcore.kernel_stack); }
arch/s390/kvm/interrupt.c +6 -6
@@ -419,13 +419,13 @@ static unsigned long deliverable_irqs(struct kvm_vcpu *vcpu)static void __set_cpu_idle (struct kvm_vcpu *vcpu) {kvm_s390_set_cpuflags (vcpu,CPUSTAT_WAIT ); -set_bit (vcpu->vcpu_id, vcpu->kvm->arch.idle_mask); +set_bit (kvm_vcpu_get_idx (vcpu), vcpu->kvm->arch.idle_mask); }static void __unset_cpu_idle (struct kvm_vcpu *vcpu) {kvm_s390_clear_cpuflags (vcpu,CPUSTAT_WAIT ); -clear_bit (vcpu->vcpu_id, vcpu->kvm->arch.idle_mask); +clear_bit (kvm_vcpu_get_idx (vcpu), vcpu->kvm->arch.idle_mask); }static void __reset_intercept_indicators (struct kvm_vcpu *vcpu)
@@ -3050,18 +3050,18 @@ int kvm_s390_get_irq_state(struct kvm_vcpu *vcpu, __u8 __user *buf, int len)static void __airqs_kick_single_vcpu (struct kvm *kvm,u8 deliverable_mask) { -int vcpu_id, online_vcpus =atomic_read (&kvm->online_vcpus); +int vcpu_idx, online_vcpus =atomic_read (&kvm->online_vcpus);struct kvm_s390_gisa_interrupt *gi = &kvm->arch.gisa_int;struct kvm_vcpu *vcpu; -for_each_set_bit (vcpu_id, kvm->arch.idle_mask, online_vcpus) { - vcpu =kvm_get_vcpu (kvm, vcpu_id); +for_each_set_bit (vcpu_idx, kvm->arch.idle_mask, online_vcpus) { + vcpu =kvm_get_vcpu (kvm, vcpu_idx);if (psw_ioint_disabled (vcpu))continue ; deliverable_mask &= (u8)(vcpu->arch.sie_block->gcr[6 ] >>24 );if (deliverable_mask) {/* lately kicked but not yet running */ -if (test_and_set_bit (vcpu_id, gi->kicked_mask)) +if (test_and_set_bit (vcpu_idx, gi->kicked_mask))return ;kvm_s390_vcpu_wakeup (vcpu);return ;
arch/s390/kvm/kvm-s390.c +1 -1
@@ -4044,7 +4044,7 @@ static int vcpu_pre_run(struct kvm_vcpu *vcpu)kvm_s390_patch_guest_per_regs (vcpu); } -clear_bit (vcpu->vcpu_id, vcpu->kvm->arch.gisa_int.kicked_mask); +clear_bit (kvm_vcpu_get_idx (vcpu), vcpu->kvm->arch.gisa_int.kicked_mask); vcpu->arch.sie_block->icptcode =0 ; cpuflags =atomic_read (&vcpu->arch.sie_block->cpuflags);
arch/s390/kvm/kvm-s390.h +1 -1
@@ -79,7 +79,7 @@ static inline int is_vcpu_stopped(struct kvm_vcpu *vcpu)static inline int is_vcpu_idle (struct kvm_vcpu *vcpu) { -return test_bit (vcpu->vcpu_id, vcpu->kvm->arch.idle_mask); +return test_bit (kvm_vcpu_get_idx (vcpu), vcpu->kvm->arch.idle_mask); }static inline int kvm_is_ucontrol (struct kvm *kvm)
arch/s390/mm/kasan_init.c +20 -21
56 lines not on this page · raw message
arch/s390/pci/pci.c +4 -3
@@ -661,9 +661,10 @@ int zpci_enable_device(struct zpci_dev *zdev) {int rc; - rc =clp_enable_fh (zdev,ZPCI_NR_DMA_SPACES ); -if (rc) +if (clp_enable_fh (zdev,ZPCI_NR_DMA_SPACES )) { + rc = -EIO ; goto out; + } rc =zpci_dma_init_device (zdev);if (rc)
@@ -684,7 +685,7 @@ int zpci_disable_device(struct zpci_dev *zdev)* The zPCI function may already be disabled by the platform, this is * detected in clp_disable_fh() which becomes a no-op. */ -return clp_disable_fh (zdev); +return clp_disable_fh (zdev) ? -EIO :0 ; }/**
arch/s390/pci/pci_clp.c +16 -17
@@ -213,15 +213,19 @@ int clp_query_pci_fn(struct zpci_dev *zdev) }static int clp_refresh_fh (u32 fid); -/* -* Enable/Disable a given PCI function and update its function handle if -* necessary +/** +* clp_set_pci_fn() - Execute a command on a PCI function +* @zdev: Function that will be affected +* @nr_dma_as: DMA address space number +* @command: The command code to execute +* +* Returns: 0 on success, < 0 for Linux errors (e.g. -ENOMEM), and +* > 0 for non-success platform responses */ static int clp_set_pci_fn (struct zpci_dev *zdev,u8 nr_dma_as,u8 command) {struct clp_req_rsp_set_pci *rrb;int rc, retries =100 ; -u32 fid = zdev->fid; rrb =clp_alloc_block (GFP_KERNEL );if (!rrb)
@@ -245,17 +249,16 @@ static int clp_set_pci_fn(struct zpci_dev *zdev, u8 nr_dma_as, u8 command) } }while (rrb->response.hdr.rsp ==CLP_RC_SETPCIFN_BUSY ); -if (rc || rrb->response.hdr.rsp !=CLP_RC_OK ) { -zpci_err ("Set PCI FN:\n" ); -zpci_err_clp (rrb->response.hdr.rsp, rc); - } -if (!rc && rrb->response.hdr.rsp ==CLP_RC_OK ) { zdev->fh = rrb->response.fh; - }else if (!rc && rrb->response.hdr.rsp ==CLP_RC_SETPCIFN_ALRDY && - rrb->response.fh ==0 ) { + }else if (!rc && rrb->response.hdr.rsp ==CLP_RC_SETPCIFN_ALRDY ) {/* Function is already in desired state - update handle */ - rc =clp_refresh_fh (fid); + rc =clp_refresh_fh (zdev->fid); + }else { +zpci_err ("Set PCI FN:\n" ); +zpci_err_clp (rrb->response.hdr.rsp, rc); +if (!rc) + rc = rrb->response.hdr.rsp; }clp_free_block (rrb);return rc;
@@ -301,17 +304,13 @@ int clp_enable_fh(struct zpci_dev *zdev, u8 nr_dma_as) rc =clp_set_pci_fn (zdev, nr_dma_as,CLP_SET_ENABLE_PCI_FN );zpci_dbg (3 ,"ena fid:%x, fh:%x, rc:%d\n" , zdev->fid, zdev->fh, rc); -if (rc) - goto out; - -if (zpci_use_mio (zdev)) { +if (!rc &&zpci_use_mio (zdev)) { rc =clp_set_pci_fn (zdev, nr_dma_as,CLP_SET_ENABLE_MIO );zpci_dbg (3 ,"ena mio fid:%x, fh:%x, rc:%d\n" , zdev->fid, zdev->fh, rc);if (rc)clp_disable_fh (zdev); } -out:return rc; }
arch/x86/crypto/aesni-intel_glue.c +5 -0
@@ -849,6 +849,8 @@ static int xts_crypt(struct skcipher_request *req, bool encrypt)return -EINVAL ; err =skcipher_walk_virt (&walk, req, false); +if (err) +return err;if (unlikely (tail >0 && walk.nbytes < walk.total)) {int blocks =DIV_ROUND_UP (req->cryptlen,AES_BLOCK_SIZE ) -2 ;
@@ -862,7 +864,10 @@ static int xts_crypt(struct skcipher_request *req, bool encrypt)skcipher_request_set_crypt (&subreq, req->src, req->dst, blocks *AES_BLOCK_SIZE , req->iv); req = &subreq; + err =skcipher_walk_virt (&walk, req, false); +if (err) +return err; }else { tail =0 ; }
arch/x86/events/intel/uncore_snbep.c +28 -12
@@ -3838,26 +3838,32 @@ pmu_iio_set_mapping(struct intel_uncore_type *type, struct attribute_group *ag)return ret; } -static int skx_iio_set_mapping (struct intel_uncore_type *type) -{ -return pmu_iio_set_mapping (type, &skx_iio_mapping_group); -} - -static void skx_iio_cleanup_mapping (struct intel_uncore_type *type) +static void +pmu_iio_cleanup_mapping (struct intel_uncore_type *type,struct attribute_group *ag) { -struct attribute **attr = skx_iio_mapping_group.attrs; +struct attribute **attr = ag->attrs;if (!attr)return ;for (; *attr; attr++)kfree ((*attr)->name); -kfree (attr_to_ext_attr (*skx_iio_mapping_group.attrs)); -kfree (skx_iio_mapping_group.attrs); - skx_iio_mapping_group.attrs =NULL ; +kfree (attr_to_ext_attr (*ag->attrs)); +kfree (ag->attrs); + ag->attrs =NULL ;kfree (type->topology); } +static int skx_iio_set_mapping (struct intel_uncore_type *type) +{ +return pmu_iio_set_mapping (type, &skx_iio_mapping_group); +} + +static void skx_iio_cleanup_mapping (struct intel_uncore_type *type) +{ +pmu_iio_cleanup_mapping (type, &skx_iio_mapping_group); +} +static struct intel_uncore_type skx_uncore_iio = { .name ="iio" , .num_counters =4 ,
@@ -4501,6 +4507,11 @@ static int snr_iio_set_mapping(struct intel_uncore_type *type)return pmu_iio_set_mapping (type, &snr_iio_mapping_group); } +static void snr_iio_cleanup_mapping (struct intel_uncore_type *type) +{ +pmu_iio_cleanup_mapping (type, &snr_iio_mapping_group); +} +static struct intel_uncore_type snr_uncore_iio = { .name ="iio" , .num_counters =4 ,
@@ -4517,7 +4528,7 @@ static struct intel_uncore_type snr_uncore_iio = { .attr_update = snr_iio_attr_update, .get_topology = snr_iio_get_topology, .set_mapping = snr_iio_set_mapping, - .cleanup_mapping = skx_iio_cleanup_mapping, + .cleanup_mapping = snr_iio_cleanup_mapping, };static struct intel_uncore_type snr_uncore_irp = {
@@ -5092,6 +5103,11 @@ static int icx_iio_set_mapping(struct intel_uncore_type *type)return pmu_iio_set_mapping (type, &icx_iio_mapping_group); } +static void icx_iio_cleanup_mapping (struct intel_uncore_type *type) +{ +pmu_iio_cleanup_mapping (type, &icx_iio_mapping_group); +} +static struct intel_uncore_type icx_uncore_iio = { .name ="iio" , .num_counters =4 ,
@@ -5109,7 +5125,7 @@ static struct intel_uncore_type icx_uncore_iio = { .attr_update = icx_iio_attr_update, .get_topology = icx_iio_get_topology, .set_mapping = icx_iio_set_mapping, - .cleanup_mapping = skx_iio_cleanup_mapping, + .cleanup_mapping = icx_iio_cleanup_mapping, };static struct intel_uncore_type icx_uncore_irp = {
arch/x86/include/asm/mce.h +1 -0
@@ -265,6 +265,7 @@ enum mcp_flags {MCP_TIMESTAMP =BIT (0 ),/* log time stamp */ MCP_UC =BIT (1 ),/* log uncorrected errors */ MCP_DONTLOG =BIT (2 ),/* only clear, don't log */ + MCP_QUEUE_LOG = BIT(3), /* only queue to genpool */ };bool machine_check_poll (enum mcp_flags flags,mce_banks_t *b);
arch/x86/kernel/cpu/mce/core.c +8 -3
@@ -817,7 +817,10 @@ bool machine_check_poll(enum mcp_flags flags, mce_banks_t *b)if (mca_cfg.dont_log_ce && !mce_usable_address (&m)) goto clear_it; -mce_log (&m); +if (flags &MCP_QUEUE_LOG ) +mce_gen_pool_add (&m); +else +mce_log (&m); clear_it:/*
@@ -1639,10 +1642,12 @@ static void __mcheck_cpu_init_generic(void) m_fl =MCP_DONTLOG ;/* -* Log the machine checks left over from the previous reset. +* Log the machine checks left over from the previous reset. Log them +* only, do not start processing them. That will happen in mcheck_late_init() +* when all consumers have been registered on the notifier chain. */ bitmap_fill (all_banks,MAX_NR_BANKS ); -machine_check_poll (MCP_UC | m_fl, &all_banks); +machine_check_poll (MCP_UC |MCP_QUEUE_LOG | m_fl, &all_banks);cr4_set_bits (X86_CR4_MCE );
arch/x86/kvm/mmu/mmu.c +5 -14
@@ -323,12 +323,6 @@ static bool check_mmio_spte(struct kvm_vcpu *vcpu, u64 spte)static gpa_t translate_gpa (struct kvm_vcpu *vcpu,gpa_t gpa,u32 access,struct x86_exception *exception) { -/* Check if guest physical address doesn't exceed guest maximum */ -if (kvm_vcpu_is_illegal_gpa (vcpu, gpa)) { - exception->error_code |=PFERR_RSVD_MASK ; -return UNMAPPED_GVA ; - } -return gpa; }
@@ -2852,6 +2846,7 @@ int kvm_mmu_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn, int max_level) {struct kvm_lpage_info *linfo; +int host_level; max_level =min (max_level, max_huge_page_level);for ( ; max_level >PG_LEVEL_4K ; max_level--) {
@@ -2863,7 +2858,8 @@ int kvm_mmu_max_mapping_level(struct kvm *kvm,if (max_level ==PG_LEVEL_4K )return PG_LEVEL_4K ; -return host_pfn_mapping_level (kvm, gfn, pfn, slot); + host_level =host_pfn_mapping_level (kvm, gfn, pfn, slot); +return min (host_level, max_level); } int kvm_mmu_hugepage_adjust(struct kvm_vcpu *vcpu, gfn_t gfn,
@@ -2887,17 +2883,12 @@ int kvm_mmu_hugepage_adjust(struct kvm_vcpu *vcpu, gfn_t gfn,if (!slot)return PG_LEVEL_4K ; - level =kvm_mmu_max_mapping_level (vcpu->kvm, slot, gfn, pfn, max_level); -if (level ==PG_LEVEL_4K ) -return level; - - *req_level = level =min (level, max_level); -/* * Enforce the iTLB multihit workaround after capturing the requested * level, which will be used to do precise, accurate accounting. */ -if (huge_page_disallowed) + *req_level = level =kvm_mmu_max_mapping_level (vcpu->kvm, slot, gfn, pfn, max_level); +if (level ==PG_LEVEL_4K || huge_page_disallowed)return PG_LEVEL_4K ;/*
arch/x86/kvm/mmu/tdp_mmu.c +13 -7
@@ -412,6 +412,7 @@ static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,bool was_leaf = was_present &&is_last_spte (old_spte, level);bool is_leaf = is_present &&is_last_spte (new_spte, level);bool pfn_changed =spte_to_pfn (old_spte) !=spte_to_pfn (new_spte); +bool was_large, is_large;WARN_ON (level >PT64_ROOT_MAX_LEVEL );WARN_ON (level <PG_LEVEL_4K );
@@ -445,13 +446,6 @@ static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,trace_kvm_tdp_mmu_spte_changed (as_id, gfn, level, old_spte, new_spte); -if (is_large_pte (old_spte) !=is_large_pte (new_spte)) { -if (is_large_pte (old_spte)) -atomic64_sub (1 , (atomic64_t *)&kvm->stat.lpages); -else -atomic64_add (1 , (atomic64_t *)&kvm->stat.lpages); - } -/* * The only times a SPTE should be changed from a non-present to * non-present state is when an MMIO entry is installed/modified/
@@ -477,6 +471,18 @@ static void __handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,return ; } +/* +* Update large page stats if a large page is being zapped, created, or +* is replacing an existing shadow page. +*/ + was_large = was_leaf &&is_large_pte (old_spte); + is_large = is_leaf &&is_large_pte (new_spte); +if (was_large != is_large) { +if (was_large) +atomic64_sub (1 , (atomic64_t *)&kvm->stat.lpages); +else +atomic64_add (1 , (atomic64_t *)&kvm->stat.lpages); + }if (was_leaf &&is_dirty_spte (old_spte) && (!is_present || !is_dirty_spte (new_spte) || pfn_changed))
arch/x86/kvm/vmx/nested.c +3 -4
@@ -2223,12 +2223,11 @@ static void prepare_vmcs02_early(struct vcpu_vmx *vmx, struct vmcs12 *vmcs12) ~PIN_BASED_VMX_PREEMPTION_TIMER);/* Posted interrupts setting is only taken from vmcs12. */ -if (nested_cpu_has_posted_intr (vmcs12)) { + vmx->nested.pi_pending = false; +if (nested_cpu_has_posted_intr (vmcs12)) vmx->nested.posted_intr_nv = vmcs12->posted_intr_nv; - vmx->nested.pi_pending = false; - }else { +else exec_control &= ~PIN_BASED_POSTED_INTR ; - }pin_controls_set (vmx, exec_control);/*
arch/x86/kvm/vmx/vmx.c +3 -0
@@ -6368,6 +6368,9 @@ static void vmx_handle_exit_irqoff(struct kvm_vcpu *vcpu) {struct vcpu_vmx *vmx =to_vmx (vcpu); +if (vmx->emulation_required) +return ; +if (vmx->exit_reason.basic ==EXIT_REASON_EXTERNAL_INTERRUPT )handle_external_interrupt_irqoff (vcpu);else if (vmx->exit_reason.basic ==EXIT_REASON_EXCEPTION_NMI )
arch/x86/kvm/x86.c +4 -0
@@ -3316,6 +3316,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)if (!msr_info->host_initiated) {s64 adj = data - vcpu->arch.ia32_tsc_adjust_msr;adjust_tsc_offset_guest (vcpu, adj); +/* Before back to guest, tsc_timestamp must be adjusted +* as well, otherwise guest's percpu pvclock time could jump. +*/ +kvm_make_request (KVM_REQ_CLOCK_UPDATE , vcpu); } vcpu->arch.ia32_tsc_adjust_msr = data; }
block/bfq-iosched.c +3 -0
@@ -2361,6 +2361,9 @@ static int bfq_request_merge(struct request_queue *q, struct request **req, __rq =bfq_find_rq_fmerge (bfqd, bio, q);if (__rq &&elv_bio_merge_ok (__rq, bio)) { *req = __rq; + +if (blk_discard_mergable (__rq)) +return ELEVATOR_DISCARD_MERGE ;return ELEVATOR_FRONT_MERGE ; }
block/bio.c +13 -2
@@ -979,6 +979,14 @@ static int bio_iov_bvec_set_append(struct bio *bio, struct iov_iter *iter)return 0 ; } +static void bio_put_pages (struct page **pages,size_t size,size_t off) +{ +size_t i, nr =DIV_ROUND_UP (size + (off & ~PAGE_MASK ),PAGE_SIZE ); + +for (i =0 ; i < nr; i++) +put_page (pages[i]); +} +#define PAGE_PTRS_PER_BVEC (sizeof(struct bio_vec) / sizeof(struct page *))/**
@@ -1023,8 +1031,10 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)if (same_page)put_page (page); }else { -if (WARN_ON_ONCE (bio_full (bio, len))) -return -EINVAL ; +if (WARN_ON_ONCE (bio_full (bio, len))) { +bio_put_pages (pages + i, left, offset); +return -EINVAL ; + }__bio_add_page (bio, page, len, offset); } offset =0 ;
@@ -1069,6 +1079,7 @@ static int __bio_iov_append_get_pages(struct bio *bio, struct iov_iter *iter) len =min_t (size_t,PAGE_SIZE - offset, left);if (bio_add_hw_page (q, bio, page, len, offset, max_append_sectors, &same_page) != len) { +bio_put_pages (pages + i, left, offset); ret = -EINVAL ;break ; }
block/blk-crypto.c +1 -1
@@ -332,7 +332,7 @@ int blk_crypto_init_key(struct blk_crypto_key *blk_key, const u8 *raw_key,if (mode->keysize ==0 )return -EINVAL ; -if (dun_bytes ==0 || dun_bytes >BLK_CRYPTO_MAX_IV_SIZE ) +if (dun_bytes ==0 || dun_bytes > mode->ivsize)return -EINVAL ;if (!is_power_of_2 (data_unit_size))
block/blk-merge.c +2 -16
@@ -348,6 +348,8 @@ void __blk_queue_split(struct bio **bio, unsigned int *nr_segs)trace_block_split (split, (*bio)->bi_iter.bi_sector);submit_bio_noacct (*bio); *bio = split; + +blk_throtl_charge_bio_split (*bio); } }
@@ -705,22 +707,6 @@ static void blk_account_io_merge_request(struct request *req) } } -/* -* Two cases of handling DISCARD merge: -* If max_discard_segments > 1, the driver takes every bio -* as a range and send them to controller together. The ranges -* needn't to be contiguous. -* Otherwise, the bios/requests will be handled as same as -* others which should be contiguous. -*/ -static inline bool blk_discard_mergable (struct request *req) -{ -if (req_op (req) ==REQ_OP_DISCARD && -queue_max_discard_segments (req->q) >1 ) -return true; -return false; -} -static enum elv_merge blk_try_req_merge (struct request *req,struct request *next) {
block/blk-throttle.c +32 -0
@@ -178,6 +178,9 @@ struct throtl_grp {unsigned int bad_bio_cnt;/* bios exceeding latency threshold */ unsigned long bio_cnt_reset_time; +atomic_t io_split_cnt[2 ]; +atomic_t last_io_split_cnt[2 ]; +struct blkg_rwstat stat_bytes;struct blkg_rwstat stat_ios; };
@@ -777,6 +780,8 @@ static inline void throtl_start_new_slice_with_credit(struct throtl_grp *tg, tg->bytes_disp[rw] =0 ; tg->io_disp[rw] =0 ; +atomic_set (&tg->io_split_cnt[rw],0 ); +/* * Previous slice has expired. We must have trimmed it after last * bio dispatch. That means since start of last slice, we never used
@@ -799,6 +804,9 @@ static inline void throtl_start_new_slice(struct throtl_grp *tg, bool rw) tg->io_disp[rw] =0 ; tg->slice_start[rw] = jiffies; tg->slice_end[rw] = jiffies + tg->td->throtl_slice; + +atomic_set (&tg->io_split_cnt[rw],0 ); + throtl_log(&tg->service_queue, "[%c] new slice start=%lu end=%lu jiffies=%lu", rw == READ ? 'R' : 'W', tg->slice_start[rw],
@@ -1031,6 +1039,9 @@ static bool tg_may_dispatch(struct throtl_grp *tg, struct bio *bio, jiffies + tg->td->throtl_slice); } +if (iops_limit !=UINT_MAX ) + tg->io_disp[rw] +=atomic_xchg (&tg->io_split_cnt[rw],0 ); +if (tg_with_in_bps_limit (tg, bio, bps_limit, &bps_wait) &&tg_with_in_iops_limit (tg, bio, iops_limit, &iops_wait)) {if (wait)
@@ -2052,12 +2063,14 @@ static void throtl_downgrade_check(struct throtl_grp *tg) }if (tg->iops[READ ][LIMIT_LOW ]) { + tg->last_io_disp[READ ] +=atomic_xchg (&tg->last_io_split_cnt[READ ],0 ); iops = tg->last_io_disp[READ ] *HZ / elapsed_time;if (iops >= tg->iops[READ ][LIMIT_LOW ]) tg->last_low_overflow_time[READ ] = now; }if (tg->iops[WRITE ][LIMIT_LOW ]) { + tg->last_io_disp[WRITE ] +=atomic_xchg (&tg->last_io_split_cnt[WRITE ],0 ); iops = tg->last_io_disp[WRITE ] *HZ / elapsed_time;if (iops >= tg->iops[WRITE ][LIMIT_LOW ]) tg->last_low_overflow_time[WRITE ] = now;
@@ -2176,6 +2189,25 @@ static inline void throtl_update_latency_buckets(struct throtl_data *td) }#endif +void blk_throtl_charge_bio_split (struct bio *bio) +{ +struct blkcg_gq *blkg = bio->bi_blkg; +struct throtl_grp *parent =blkg_to_tg (blkg); +struct throtl_service_queue *parent_sq; +bool rw =bio_data_dir (bio); + +do { +if (!parent->has_rules[rw]) +break ; + +atomic_inc (&parent->io_split_cnt[rw]); +atomic_inc (&parent->last_io_split_cnt[rw]); + + parent_sq = parent->service_queue.parent_sq; + parent =sq_to_tg (parent_sq); + }while (parent); +} +bool blk_throtl_bio (struct bio *bio) {struct request_queue *q = bio->bi_bdev->bd_disk->queue;
block/blk.h +2 -0
@@ -289,11 +289,13 @@ int create_task_io_context(struct task_struct *task, gfp_t gfp_mask, int node);extern int blk_throtl_init (struct request_queue *q);extern void blk_throtl_exit (struct request_queue *q);extern void blk_throtl_register_queue (struct request_queue *q); +extern void blk_throtl_charge_bio_split (struct bio *bio);bool blk_throtl_bio (struct bio *bio);#else /* CONFIG_BLK_DEV_THROTTLING */ static inline int blk_throtl_init (struct request_queue *q) {return 0 ; }static inline void blk_throtl_exit (struct request_queue *q) { }static inline void blk_throtl_register_queue (struct request_queue *q) { } +static inline void blk_throtl_charge_bio_split (struct bio *bio) { }static inline bool blk_throtl_bio (struct bio *bio) {return false; }#endif /* CONFIG_BLK_DEV_THROTTLING */ #ifdef CONFIG_BLK_DEV_THROTTLING_LOW
block/elevator.c +3 -0
@@ -336,6 +336,9 @@ enum elv_merge elv_merge(struct request_queue *q, struct request **req, __rq =elv_rqhash_find (q, bio->bi_iter.bi_sector);if (__rq &&elv_bio_merge_ok (__rq, bio)) { *req = __rq; + +if (blk_discard_mergable (__rq)) +return ELEVATOR_DISCARD_MERGE ;return ELEVATOR_BACK_MERGE ; }
block/mq-deadline.c +2 -0
@@ -629,6 +629,8 @@ static int dd_request_merge(struct request_queue *q, struct request **rq,if (elv_bio_merge_ok (__rq, bio)) { *rq = __rq; +if (blk_discard_mergable (__rq)) +return ELEVATOR_DISCARD_MERGE ;return ELEVATOR_FRONT_MERGE ; } }
certs/Makefile +8 -0
@@ -57,11 +57,19 @@ endif redirect_openssl = 2>&1 quiet_redirect_openssl = 2>&1 silent_redirect_openssl = 2>/dev/null +openssl_available = $(shell openssl help 2>/dev/null && echo yes) # We do it this way rather than having a boolean option for enabling an # external private key, because 'make randconfig' might enable such a # boolean option and we unfortunately can't make it depend on !RANDCONFIG. ifeq ($(CONFIG_MODULE_SIG_KEY),"certs/signing_key.pem") + +ifeq ($(openssl_available),yes) +X509TEXT=$(shell openssl x509 -in "certs/signing_key.pem" -text 2>/dev/null) + +$(if $(findstring rsaEncryption,$(X509TEXT)),,$(shell rm -f "certs/signing_key.pem")) +endif + $(obj)/signing_key.pem: $(obj)/x509.genkey @$(kecho) "###" @$(kecho) "### Now generating an X.509 key pair to be used for signing modules."
crypto/ecc.h +3 -2
@@ -27,6 +27,7 @@#define _CRYPTO_ECC_H#include <crypto/ecc_curve.h> +#include <asm/unaligned.h> /* One digit is u64 qword. */ #define ECC_CURVE_NIST_P192_DIGITS 3
@@ -46,13 +47,13 @@* @out: Output array * @ndigits: Number of digits to copy */ -static inline void ecc_swap_digits (const u64 *in,u64 *out,unsigned int ndigits) +static inline void ecc_swap_digits (const void *in,u64 *out,unsigned int ndigits) {const __be64 *src = (__force __be64 *)in;int i;for (i =0 ; i < ndigits; i++) - out[i] =be64_to_cpu (src[ndigits -1 - i]); + out[i] =get_unaligned_be64 (&src[ndigits -1 - i]); }/**
crypto/tcrypt.c +19 -10
@@ -290,6 +290,11 @@ static void test_mb_aead_speed(const char *algo, int enc, int secs, } ret =crypto_aead_setauthsize (tfm, authsize); +if (ret) { +pr_err ("alg: aead: Failed to setauthsize for %s: %d\n" , algo, + ret); + goto out_free_tfm; + }for (i =0 ; i < num_mb; ++i)if (testmgr_alloc_buf (data[i].xbuf)) {
@@ -315,7 +320,7 @@ static void test_mb_aead_speed(const char *algo, int enc, int secs,for (i =0 ; i < num_mb; ++i) { data[i].req =aead_request_alloc (tfm,GFP_KERNEL );if (!data[i].req) { -pr_err ("alg: skcipher: Failed to allocate request for %s\n" , +pr_err ("alg: aead: Failed to allocate request for %s\n" , algo);while (i--)aead_request_free (data[i].req);
@@ -567,13 +572,19 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs, sgout = &sg[9 ]; tfm =crypto_alloc_aead (algo,0 ,0 ); -if (IS_ERR (tfm)) {pr_err ("alg: aead: Failed to load transform for %s: %ld\n" , algo,PTR_ERR (tfm)); goto out_notfm; } + ret =crypto_aead_setauthsize (tfm, authsize); +if (ret) { +pr_err ("alg: aead: Failed to setauthsize for %s: %d\n" , algo, + ret); + goto out_noreq; + } +crypto_init_wait (&wait);printk (KERN_INFO "\ntesting speed of %s (%s) %s\n" , algo,get_driver_name (crypto_aead, tfm), e);
@@ -611,8 +622,13 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs,break ; } } + ret =crypto_aead_setkey (tfm, key, *keysize); - ret =crypto_aead_setauthsize (tfm, authsize); +if (ret) { +pr_err ("setkey() failed flags=%x: %d\n" , +crypto_aead_get_flags (tfm), ret); + goto out; + } iv_len =crypto_aead_ivsize (tfm);if (iv_len)
@@ -622,15 +638,8 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs,printk (KERN_INFO "test %u (%d bit key, %d byte blocks): " , i, *keysize *8 , bs); -memset (tvmem[0 ],0xff ,PAGE_SIZE ); -if (ret) { -pr_err ("setkey() failed flags=%x\n" , -crypto_aead_get_flags (tfm)); - goto out; - } -sg_init_aead (sg, xbuf, bs + (enc ?0 : authsize), assoc, aad_size);
drivers/acpi/prmt.c +9 -1
@@ -288,10 +288,18 @@ static acpi_status acpi_platformrt_space_handler(u32 function,void __init init_prmt (void ) { +struct acpi_table_header *tbl;acpi_status status; -int mc =acpi_table_parse_entries (ACPI_SIG_PRMT ,sizeof (struct acpi_table_prmt ) + +int mc; + + status =acpi_get_table (ACPI_SIG_PRMT ,0 , &tbl); +if (ACPI_FAILURE (status)) +return ; + + mc =acpi_table_parse_entries (ACPI_SIG_PRMT ,sizeof (struct acpi_table_prmt ) +sizeof (struct acpi_table_prmt_header ),0 , acpi_parse_prmt,0 ); +acpi_put_table (tbl);/* * Return immediately if PRMT table is not present or no PRM module found. */
drivers/ata/libata-core.c +1 -1
@@ -5573,7 +5573,7 @@ int ata_host_start(struct ata_host *host) have_stop =1 ; } -if (host->ops->host_stop) +if (host->ops && host->ops->host_stop) have_stop =1 ;if (have_stop) {
drivers/auxdisplay/hd44780.c +1 -1
@@ -323,8 +323,8 @@ static int hd44780_remove(struct platform_device *pdev) {struct charlcd *lcd =platform_get_drvdata (pdev); -kfree (lcd->drvdata);charlcd_unregister (lcd); +kfree (lcd->drvdata);kfree (lcd);return 0 ;
drivers/base/dd.c +10 -6
@@ -580,7 +580,8 @@ static int really_probe(struct device *dev, struct device_driver *drv) goto probe_failed; } -if (driver_sysfs_add (dev)) { + ret =driver_sysfs_add (dev); +if (ret) {pr_err ("%s: driver_sysfs_add(%s) failed\n" , __func__,dev_name (dev)); goto probe_failed;
@@ -602,15 +603,18 @@ static int really_probe(struct device *dev, struct device_driver *drv) goto probe_failed; } -if (device_add_groups (dev, drv->dev_groups)) { + ret =device_add_groups (dev, drv->dev_groups); +if (ret) {dev_err (dev,"device_add_groups() failed\n" ); goto dev_groups_failed; } -if (dev_has_sync_state (dev) && -device_create_file (dev, &dev_attr_state_synced)) { -dev_err (dev,"state_synced sysfs add failed\n" ); - goto dev_sysfs_state_synced_failed; +if (dev_has_sync_state (dev)) { + ret =device_create_file (dev, &dev_attr_state_synced); +if (ret) { +dev_err (dev,"state_synced sysfs add failed\n" ); + goto dev_sysfs_state_synced_failed; + } }if (test_remove) {
drivers/base/firmware_loader/main.c +8 -12
@@ -165,7 +165,7 @@ static inline int fw_state_wait(struct fw_priv *fw_priv)return __fw_state_wait_common (fw_priv,MAX_SCHEDULE_TIMEOUT ); } -static int fw_cache_piggyback_on_request (const char *name); +static void fw_cache_piggyback_on_request (struct fw_priv *fw_priv); static struct fw_priv *__allocate_fw_priv(const char *fw_name, struct firmware_cache *fwc,
@@ -707,10 +707,8 @@ int assign_fw(struct firmware *fw, struct device *device)* on request firmware. */ if (!(fw_priv->opt_flags &FW_OPT_NOCACHE ) && - fw_priv->fwc->state ==FW_LOADER_START_CACHE ) { -if (fw_cache_piggyback_on_request (fw_priv->fw_name)) -kref_get (&fw_priv->ref); - } + fw_priv->fwc->state ==FW_LOADER_START_CACHE ) +fw_cache_piggyback_on_request (fw_priv);/* pass the pages buffer to driver at the last minute */ fw_set_page_data (fw_priv, fw);
@@ -1259,11 +1257,11 @@ static int __fw_entry_found(const char *name)return 0 ; } -static int fw_cache_piggyback_on_request (const char *name) +static void fw_cache_piggyback_on_request (struct fw_priv *fw_priv) { -struct firmware_cache *fwc = &fw_cache; +const char *name = fw_priv->fw_name; +struct firmware_cache *fwc = fw_priv->fwc;struct fw_cache_entry *fce; -int ret =0 ;spin_lock (&fwc->name_lock);if (__fw_entry_found (name))
@@ -1271,13 +1269,12 @@ static int fw_cache_piggyback_on_request(const char *name) fce =alloc_fw_cache_entry (name);if (fce) { - ret =1 ;list_add (&fce->list, &fwc->fw_names); +kref_get (&fw_priv->ref);pr_debug ("%s: fw: %s\n" , __func__, name); } found:spin_unlock (&fwc->name_lock); -return ret; }static void free_fw_cache_entry (struct fw_cache_entry *fce)
@@ -1508,9 +1505,8 @@ static inline void unregister_fw_pm_ops(void) unregister_pm_notifier(&fw_cache.pm_notify); }#else -static int fw_cache_piggyback_on_request (const char *name) +static void fw_cache_piggyback_on_request (struct fw_priv *fw_priv) { -return 0 ; }static inline int register_fw_pm_ops (void ) {
drivers/base/regmap/regmap.c +1 -1
@@ -1667,7 +1667,7 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,if (ret) {dev_err (map->dev,"Error in caching of register: %x ret: %d\n" , - reg + i, ret); + reg +regmap_get_offset (map, i), ret);return ret; } }
drivers/bcma/main.c +3 -3
@@ -236,6 +236,7 @@ EXPORT_SYMBOL(bcma_core_irq);void bcma_prepare_core (struct bcma_bus *bus,struct bcma_device *core) { +device_initialize (&core->dev); core->dev.release = bcma_release_core_dev; core->dev.bus = &bcma_bus_type;dev_set_name (&core->dev,"bcma%d:%d" , bus->num, core->core_index);
@@ -277,11 +278,10 @@ static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core) {int err; - err =device_register (&core->dev); + err =device_add (&core->dev);if (err) {bcma_err (bus,"Could not register dev for core 0x%03X\n" , core->id.id); -put_device (&core->dev);return ; } core->dev_registered = true;
@@ -372,7 +372,7 @@ void bcma_unregister_cores(struct bcma_bus *bus)/* Now noone uses internally-handled cores, we can free them */ list_for_each_entry_safe (core, tmp, &bus->cores, list) {list_del (&core->list); -kfree (core); +put_device (&core->dev); } }
drivers/block/nbd.c +75 -11
165 lines not on this page · raw message
drivers/bluetooth/btusb.c +10 -8
@@ -2921,10 +2921,11 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)/* Read the Intel supported features and if new exception formats * supported, need to load the additional DDC config to enable. */ -btintel_read_debug_features (hdev, &features); - -/* Set DDC mask for available debug features */ -btintel_set_debug_features (hdev, &features); + err =btintel_read_debug_features (hdev, &features); +if (!err) { +/* Set DDC mask for available debug features */ +btintel_set_debug_features (hdev, &features); + }/* Read the Intel version information after loading the FW */ err =btintel_read_version (hdev, &ver);
@@ -3017,10 +3018,11 @@ static int btusb_setup_intel_newgen(struct hci_dev *hdev)/* Read the Intel supported features and if new exception formats * supported, need to load the additional DDC config to enable. */ -btintel_read_debug_features (hdev, &features); - -/* Set DDC mask for available debug features */ -btintel_set_debug_features (hdev, &features); + err =btintel_read_debug_features (hdev, &features); +if (!err) { +/* Set DDC mask for available debug features */ +btintel_set_debug_features (hdev, &features); + }/* Read the Intel version information after loading the FW */ err =btintel_read_version_tlv (hdev, &version);
drivers/char/tpm/Kconfig +0 -1
@@ -89,7 +89,6 @@ config TCG_TIS_SYNQUACER config TCG_TIS_I2C_CR50 tristate "TPM Interface Specification 2.0 Interface (I2C - CR50)" depends on I2C - select TCG_CR50 help This is a driver for the Google cr50 I2C TPM interface which is a custom microcontroller and requires a custom i2c protocol interface
drivers/char/tpm/tpm_ibmvtpm.c +15 -11
@@ -106,17 +106,12 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) {struct ibmvtpm_dev *ibmvtpm =dev_get_drvdata (&chip->dev);u16 len; -int sig;if (!ibmvtpm->rtce_buf) {dev_err (ibmvtpm->dev,"ibmvtpm device is not ready\n" );return 0 ; } - sig =wait_event_interruptible (ibmvtpm->wq, !ibmvtpm->tpm_processing_cmd); -if (sig) -return -EINTR ; - len = ibmvtpm->res_len;if (count < len) {
@@ -237,7 +232,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)* set the processing flag before the Hcall, since we may get the * result (interrupt) before even being able to check rc. */ - ibmvtpm->tpm_processing_cmd = true; + ibmvtpm->tpm_processing_cmd =1 ; again: rc = ibmvtpm_send_crq(ibmvtpm->vdev,
@@ -255,7 +250,7 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) goto again; }dev_err (ibmvtpm->dev,"tpm_ibmvtpm_send failed rc=%d\n" , rc); - ibmvtpm->tpm_processing_cmd = false; + ibmvtpm->tpm_processing_cmd =0 ; }spin_unlock (&ibmvtpm->rtce_lock);
@@ -269,7 +264,9 @@ static void tpm_ibmvtpm_cancel(struct tpm_chip *chip)static u8 tpm_ibmvtpm_status (struct tpm_chip *chip) { -return 0 ; +struct ibmvtpm_dev *ibmvtpm =dev_get_drvdata (&chip->dev); + +return ibmvtpm->tpm_processing_cmd; }/**
@@ -457,7 +454,7 @@ static const struct tpm_class_ops tpm_ibmvtpm = { .send = tpm_ibmvtpm_send, .cancel = tpm_ibmvtpm_cancel, .status = tpm_ibmvtpm_status, - .req_complete_mask = 0, + .req_complete_mask = 1, .req_complete_val = 0, .req_canceled = tpm_ibmvtpm_req_canceled, };
@@ -550,7 +547,7 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq,case VTPM_TPM_COMMAND_RES :/* len of the data in rtce buffer */ ibmvtpm->res_len =be16_to_cpu (crq->len); - ibmvtpm->tpm_processing_cmd = false; + ibmvtpm->tpm_processing_cmd =0 ;wake_up_interruptible (&ibmvtpm->wq);return ;default :
@@ -688,8 +685,15 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, goto init_irq_cleanup; } -if (!strcmp (id->compat,"IBM,vtpm20" )) { + +if (!strcmp (id->compat,"IBM,vtpm20" )) chip->flags |=TPM_CHIP_FLAG_TPM2 ; + + rc =tpm_get_timeouts (chip); +if (rc) + goto init_irq_cleanup; + +if (chip->flags &TPM_CHIP_FLAG_TPM2 ) { rc =tpm2_get_cc_attrs_tbl (chip);if (rc) goto init_irq_cleanup;
drivers/char/tpm/tpm_ibmvtpm.h +1 -1
@@ -41,7 +41,7 @@ struct ibmvtpm_dev {wait_queue_head_t wq;u16 res_len;u32 vtpm_version; -bool tpm_processing_cmd; +u8 tpm_processing_cmd; };#define CRQ_RES_BUF_SIZE PAGE_SIZE
drivers/clk/mvebu/kirkwood.c +1 -0
@@ -265,6 +265,7 @@ static const char *powersave_parents[] = {static const struct clk_muxing_soc_desc kirkwood_mux_desc[]__initconst = { {"powersave" , powersave_parents,ARRAY_SIZE (powersave_parents),11 ,1 ,0 }, + { } }; static struct clk *clk_muxing_get_src(
drivers/clocksource/sh_cmt.c +18 -12
@@ -579,7 +579,8 @@ static int sh_cmt_start(struct sh_cmt_channel *ch, unsigned long flag) ch->flags |= flag;/* setup timeout if no clockevent */ -if ((flag ==FLAG_CLOCKSOURCE ) && (!(ch->flags &FLAG_CLOCKEVENT ))) +if (ch->cmt->num_channels ==1 && + flag ==FLAG_CLOCKSOURCE && (!(ch->flags &FLAG_CLOCKEVENT )))__sh_cmt_set_next (ch, ch->max_match_value); out:raw_spin_unlock_irqrestore (&ch->lock, flags);
@@ -621,20 +622,25 @@ static struct sh_cmt_channel *cs_to_sh_cmt(struct clocksource *cs)static u64 sh_cmt_clocksource_read (struct clocksource *cs) {struct sh_cmt_channel *ch =cs_to_sh_cmt (cs); -unsigned long flags;u32 has_wrapped; -u64 value; -u32 raw; -raw_spin_lock_irqsave (&ch->lock, flags); - value = ch->total_cycles; - raw =sh_cmt_get_counter (ch, &has_wrapped); +if (ch->cmt->num_channels ==1 ) { +unsigned long flags; +u64 value; +u32 raw; -if (unlikely (has_wrapped)) - raw += ch->match_value +1 ; -raw_spin_unlock_irqrestore (&ch->lock, flags); +raw_spin_lock_irqsave (&ch->lock, flags); + value = ch->total_cycles; + raw =sh_cmt_get_counter (ch, &has_wrapped); + +if (unlikely (has_wrapped)) + raw += ch->match_value +1 ; +raw_spin_unlock_irqrestore (&ch->lock, flags); + +return value + raw; + } -return value + raw; +return sh_cmt_get_counter (ch, &has_wrapped); }static int sh_cmt_clocksource_enable (struct clocksource *cs)
@@ -697,7 +703,7 @@ static int sh_cmt_register_clocksource(struct sh_cmt_channel *ch, cs->disable = sh_cmt_clocksource_disable; cs->suspend = sh_cmt_clocksource_suspend; cs->resume = sh_cmt_clocksource_resume; - cs->mask =CLOCKSOURCE_MASK (sizeof (u64) *8 ); + cs->mask =CLOCKSOURCE_MASK (ch->cmt->info->width); cs->flags =CLOCK_SOURCE_IS_CONTINUOUS ; dev_info(&ch->cmt->pdev->dev, "ch%u: used as clock source\n",
drivers/counter/104-quad-8.c +3 -2
@@ -715,12 +715,13 @@ static ssize_t quad8_count_ceiling_write(struct counter_device *counter,case 1 :case 3 :quad8_preset_register_set (priv, count->id, ceiling); -break ; +mutex_unlock (&priv->lock); +return len; }mutex_unlock (&priv->lock); -return len; +return -EINVAL ; } static ssize_t quad8_count_preset_enable_read(struct counter_device *counter,
drivers/crypto/hisilicon/sec2/sec.h +0 -5
@@ -157,11 +157,6 @@ struct sec_ctx {struct device *dev; }; -enum sec_endian { -SEC_LE =0 , -SEC_32BE , -SEC_64BE -};enum sec_debug_file_index {SEC_CLEAR_ENABLE ,
drivers/crypto/hisilicon/sec2/sec_main.c +11 -23
@@ -312,31 +312,20 @@ static const struct pci_device_id sec_dev_ids[] = { };MODULE_DEVICE_TABLE (pci, sec_dev_ids); -static u8 sec_get_endian (struct hisi_qm *qm) +static void sec_set_endian (struct hisi_qm *qm) {u32 reg; -/* -* As for VF, it is a wrong way to get endian setting by -* reading a register of the engine -*/ -if (qm->pdev->is_virtfn) { -dev_err_ratelimited (&qm->pdev->dev, -"cannot access a register in VF!\n" ); -return SEC_LE ; - } reg =readl_relaxed (qm->io_base +SEC_CONTROL_REG ); -/* BD little endian mode */ -if (!(reg &BIT (0 ))) -return SEC_LE ; + reg &= ~(BIT (1 ) |BIT (0 )); +if (!IS_ENABLED (CONFIG_64BIT )) + reg |=BIT (1 ); -/* BD 32-bits big endian mode */ -else if (!(reg &BIT (1 ))) -return SEC_32BE ; -/* BD 64-bits big endian mode */ -else -return SEC_64BE ; +if (!IS_ENABLED (CONFIG_CPU_LITTLE_ENDIAN )) + reg |=BIT (0 ); + +writel_relaxed (reg, qm->io_base +SEC_CONTROL_REG ); }static void sec_open_sva_prefetch (struct hisi_qm *qm)
@@ -429,9 +418,7 @@ static int sec_engine_init(struct hisi_qm *qm) qm->io_base + SEC_BD_ERR_CHK_EN_REG3);/* config endian */ - reg =readl_relaxed (qm->io_base +SEC_CONTROL_REG ); - reg |=sec_get_endian (qm); -writel_relaxed (reg, qm->io_base +SEC_CONTROL_REG ); +sec_set_endian (qm);return 0 ; }
@@ -984,7 +971,8 @@ static int sec_probe(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; err_alg_unregister: -hisi_qm_alg_unregister (qm, &sec_devices); +if (qm->qp_num >= ctx_q_num) +hisi_qm_alg_unregister (qm, &sec_devices); err_qm_stop:sec_debugfs_exit (qm);hisi_qm_stop (qm,QM_NORMAL );
drivers/crypto/mxs-dcp.c +35 -10
90 lines not on this page · raw message
drivers/crypto/omap-aes.c +4 -4
@@ -1175,9 +1175,9 @@ static int omap_aes_probe(struct platform_device *pdev)spin_lock_init (&dd->lock);INIT_LIST_HEAD (&dd->list); -spin_lock (&list_lock); +spin_lock_bh (&list_lock);list_add_tail (&dd->list, &dev_list); -spin_unlock (&list_lock); +spin_unlock_bh (&list_lock);/* Initialize crypto engine */ dd->engine =crypto_engine_alloc_init (dev,1 );
@@ -1264,9 +1264,9 @@ static int omap_aes_remove(struct platform_device *pdev)if (!dd)return -ENODEV ; -spin_lock (&list_lock); +spin_lock_bh (&list_lock);list_del (&dd->list); -spin_unlock (&list_lock); +spin_unlock_bh (&list_lock);for (i = dd->pdata->algs_info_size -1 ; i >=0 ; i--)for (j = dd->pdata->algs_info[i].registered -1 ; j >=0 ; j--) {
drivers/crypto/omap-des.c +4 -4
@@ -1033,9 +1033,9 @@ static int omap_des_probe(struct platform_device *pdev)INIT_LIST_HEAD (&dd->list); -spin_lock (&list_lock); +spin_lock_bh (&list_lock);list_add_tail (&dd->list, &dev_list); -spin_unlock (&list_lock); +spin_unlock_bh (&list_lock);/* Initialize des crypto engine */ dd->engine =crypto_engine_alloc_init (dev,1 );
@@ -1094,9 +1094,9 @@ static int omap_des_remove(struct platform_device *pdev)if (!dd)return -ENODEV ; -spin_lock (&list_lock); +spin_lock_bh (&list_lock);list_del (&dd->list); -spin_unlock (&list_lock); +spin_unlock_bh (&list_lock);for (i = dd->pdata->algs_info_size -1 ; i >=0 ; i--)for (j = dd->pdata->algs_info[i].registered -1 ; j >=0 ; j--)
drivers/crypto/omap-sham.c +7 -7
@@ -1736,7 +1736,7 @@ static void omap_sham_done_task(unsigned long data)if (test_and_clear_bit (FLAGS_OUTPUT_READY , &dd->flags)) goto finish; }else if (test_bit (FLAGS_DMA_READY , &dd->flags)) { -if (test_and_clear_bit (FLAGS_DMA_ACTIVE , &dd->flags)) { +if (test_bit (FLAGS_DMA_ACTIVE , &dd->flags)) {omap_sham_update_dma_stop (dd);if (dd->err) { err = dd->err;
@@ -2144,9 +2144,9 @@ static int omap_sham_probe(struct platform_device *pdev) (rev & dd->pdata->major_mask) >> dd->pdata->major_shift, (rev & dd->pdata->minor_mask) >> dd->pdata->minor_shift); -spin_lock (&sham.lock); +spin_lock_bh (&sham.lock);list_add_tail (&dd->list, &sham.dev_list); -spin_unlock (&sham.lock); +spin_unlock_bh (&sham.lock); dd->engine =crypto_engine_alloc_init (dev,1 );if (!dd->engine) {
@@ -2194,9 +2194,9 @@ static int omap_sham_probe(struct platform_device *pdev) err_engine_start:crypto_engine_exit (dd->engine); err_engine: -spin_lock (&sham.lock); +spin_lock_bh (&sham.lock);list_del (&dd->list); -spin_unlock (&sham.lock); +spin_unlock_bh (&sham.lock); err_pm:pm_runtime_disable (dev);if (!dd->polling_mode)
@@ -2215,9 +2215,9 @@ static int omap_sham_remove(struct platform_device *pdev) dd =platform_get_drvdata (pdev);if (!dd)return -ENODEV ; -spin_lock (&sham.lock); +spin_lock_bh (&sham.lock);list_del (&dd->list); -spin_unlock (&sham.lock); +spin_unlock_bh (&sham.lock);for (i = dd->pdata->algs_info_size -1 ; i >=0 ; i--)for (j = dd->pdata->algs_info[i].registered -1 ; j >=0 ; j--) { crypto_unregister_ahash(
drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c +2 -2
@@ -81,10 +81,10 @@ void adf_init_hw_data_c3xxxiov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c +2 -2
@@ -81,10 +81,10 @@ void adf_init_hw_data_c62xiov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/crypto/qat/qat_common/adf_common_drv.h +4 -4
@@ -198,8 +198,8 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,void adf_enable_pf2vf_interrupts (struct adf_accel_dev *accel_dev);void adf_disable_pf2vf_interrupts (struct adf_accel_dev *accel_dev); -int adf_vf2pf_init (struct adf_accel_dev *accel_dev); -void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev); +int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev); +void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev);int adf_init_pf_wq (void );void adf_exit_pf_wq (void );int adf_init_vf_wq (void );
@@ -222,12 +222,12 @@ static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev) { } -static inline int adf_vf2pf_init (struct adf_accel_dev *accel_dev) +static inline int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev) {return 0 ; } -static inline void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev) +static inline void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev) { }
drivers/crypto/qat/qat_common/adf_init.c +3 -2
@@ -61,6 +61,7 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)struct service_hndl *service;struct list_head *list_itr;struct adf_hw_device_data *hw_data = accel_dev->hw_device; +int ret;if (!hw_data) { dev_err(&GET_DEV(accel_dev),
@@ -127,9 +128,9 @@ int adf_dev_init(struct adf_accel_dev *accel_dev) } hw_data->enable_error_correction (accel_dev); - hw_data->enable_vf2pf_comms (accel_dev); + ret = hw_data->enable_vf2pf_comms (accel_dev); -return 0 ; +return ret; }EXPORT_SYMBOL_GPL (adf_dev_init);
drivers/crypto/qat/qat_common/adf_isr.c +4 -3
@@ -15,6 +15,8 @@#include "adf_transport_access_macros.h" #include "adf_transport_internal.h" +#define ADF_MAX_NUM_VFS 32 +static int adf_enable_msix (struct adf_accel_dev *accel_dev) {struct adf_accel_pci *pci_dev_info = &accel_dev->accel_pci_dev;
@@ -72,7 +74,7 @@ static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)struct adf_bar *pmisc = &GET_BARS (accel_dev)[hw_data->get_misc_bar_id (hw_data)];void __iomem *pmisc_bar_addr = pmisc->virt_addr; -u32 vf_mask; +unsigned long vf_mask;/* Get the interrupt sources triggered by VFs */ vf_mask = ((ADF_CSR_RD(pmisc_bar_addr, ADF_ERRSOU5) &
@@ -93,8 +95,7 @@ static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)* unless the VF is malicious and is attempting to * flood the host OS with VF2PF interrupts. */ -for_each_set_bit (i, (const unsigned long *)&vf_mask, - (sizeof (vf_mask) *BITS_PER_BYTE )) { +for_each_set_bit (i, &vf_mask,ADF_MAX_NUM_VFS ) { vf_info = accel_dev->pf.vf_info + i;if (!__ratelimit (&vf_info->vf2pf_ratelimit)) {
drivers/crypto/qat/qat_common/adf_pf2vf_msg.c +2 -1
@@ -186,7 +186,6 @@ int adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)return ret; } -EXPORT_SYMBOL_GPL (adf_iov_putmsg);void adf_vf2pf_req_hndl (struct adf_accel_vf_info *vf_info) {
@@ -316,6 +315,8 @@ static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev) msg |=ADF_PFVF_COMPATIBILITY_VERSION <<ADF_VF2PF_COMPAT_VER_REQ_SHIFT ;BUILD_BUG_ON (ADF_PFVF_COMPATIBILITY_VERSION >255 ); +reinit_completion (&accel_dev->vf.iov_msg_completion); +/* Send request from VF to PF */ ret =adf_iov_putmsg (accel_dev, msg,0 );if (ret) {
drivers/crypto/qat/qat_common/adf_vf2pf_msg.c +6 -6
@@ -5,14 +5,14 @@#include "adf_pf2vf_msg.h" /** -* adf_vf2pf_init() - send init msg to PF +* adf_vf2pf_notify_init() - send init msg to PF * @accel_dev: Pointer to acceleration VF device. * * Function sends an init message from the VF to a PF * * Return: 0 on success, error code otherwise. */ -int adf_vf2pf_init (struct adf_accel_dev *accel_dev) +int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev) {u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM | (ADF_VF2PF_MSGTYPE_INIT <<ADF_VF2PF_MSGTYPE_SHIFT ));
@@ -25,17 +25,17 @@ int adf_vf2pf_init(struct adf_accel_dev *accel_dev)set_bit (ADF_STATUS_PF_RUNNING , &accel_dev->status);return 0 ; } -EXPORT_SYMBOL_GPL (adf_vf2pf_init); +EXPORT_SYMBOL_GPL (adf_vf2pf_notify_init);/** -* adf_vf2pf_shutdown() - send shutdown msg to PF +* adf_vf2pf_notify_shutdown() - send shutdown msg to PF * @accel_dev: Pointer to acceleration VF device. * * Function sends a shutdown message from the VF to a PF * * Return: void */ -void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev) +void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev) {u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM | (ADF_VF2PF_MSGTYPE_SHUTDOWN <<ADF_VF2PF_MSGTYPE_SHIFT ));
@@ -45,4 +45,4 @@ void adf_vf2pf_shutdown(struct adf_accel_dev *accel_dev)dev_err (&GET_DEV (accel_dev),"Failed to send Shutdown event to PF\n" ); } -EXPORT_SYMBOL_GPL (adf_vf2pf_shutdown); +EXPORT_SYMBOL_GPL (adf_vf2pf_notify_shutdown);
drivers/crypto/qat/qat_common/adf_vf_isr.c +4 -3
@@ -160,6 +160,7 @@ static irqreturn_t adf_isr(int irq, void *privdata)struct adf_bar *pmisc = &GET_BARS (accel_dev)[hw_data->get_misc_bar_id (hw_data)];void __iomem *pmisc_bar_addr = pmisc->virt_addr; +bool handled = false;u32 v_int;/* Read VF INT source CSR to determine the source of VF interrupt */
@@ -172,7 +173,7 @@ static irqreturn_t adf_isr(int irq, void *privdata)/* Schedule tasklet to handle interrupt BH */ tasklet_hi_schedule (&accel_dev->vf.pf2vf_bh_tasklet); -return IRQ_HANDLED ; + handled = true; }/* Check bundle interrupt */
@@ -184,10 +185,10 @@ static irqreturn_t adf_isr(int irq, void *privdata) csr_ops->write_csr_int_flag_and_col (bank->csr_addr, bank->bank_number,0 );tasklet_hi_schedule (&bank->resp_handler); -return IRQ_HANDLED ; + handled = true; } -return IRQ_NONE ; +return handled ?IRQ_HANDLED :IRQ_NONE ; }static int adf_request_msi_irq (struct adf_accel_dev *accel_dev)
drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c +2 -2
@@ -81,10 +81,10 @@ void adf_init_hw_data_dh895xcciov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/edac/i10nm_base.c +3 -3
@@ -33,9 +33,9 @@#define I10NM_GET_DIMMMTR (m, i, j) \ readl((m)->mbase + ((m)->hbm_mc ? 0x80c : 0x2080c) + \ (i) * (m)->chan_mmio_sz + (j) * 4) -#define I10NM_GET_MCDDRTCFG (m, i, j) \ +#define I10NM_GET_MCDDRTCFG (m, i) \ readl((m)->mbase + ((m)->hbm_mc ? 0x970 : 0x20970) + \ - (i) * (m)->chan_mmio_sz + (j) * 4) + (i) * (m)->chan_mmio_sz)#define I10NM_GET_MCMTR (m, i) \ readl((m)->mbase + ((m)->hbm_mc ? 0xef8 : 0x20ef8) + \ (i) * (m)->chan_mmio_sz)
@@ -321,10 +321,10 @@ static int i10nm_get_dimm_config(struct mem_ctl_info *mci, ndimms =0 ; amap =I10NM_GET_AMAP (imc, i); + mcddrtcfg =I10NM_GET_MCDDRTCFG (imc, i);for (j =0 ; j < imc->num_dimms; j++) { dimm =edac_get_dimm (mci, i, j,0 ); mtr =I10NM_GET_DIMMMTR (imc, i, j); - mcddrtcfg =I10NM_GET_MCDDRTCFG (imc, i, j);edac_dbg (1 ,"dimmmtr 0x%x mcddrtcfg 0x%x (mc%d ch%d dimm%d)\n" , mtr, mcddrtcfg, imc->mc, i, j);
drivers/edac/mce_amd.c +3 -0
@@ -1246,6 +1246,9 @@ static int __init mce_amd_init(void) c->x86_vendor != X86_VENDOR_HYGON)return -ENODEV ; +if (cpu_feature_enabled (X86_FEATURE_HYPERVISOR )) +return -ENODEV ; +if (boot_cpu_has (X86_FEATURE_SMCA )) { xec_mask =0x3f ; goto out;
drivers/firmware/raspberrypi.c +8 -2
@@ -329,12 +329,18 @@ struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node) fw =platform_get_drvdata (pdev);if (!fw) -return NULL ; + goto err_put_device;if (!kref_get_unless_zero (&fw->consumers)) -return NULL ; + goto err_put_device; + +put_device (&pdev->dev);return fw; + +err_put_device: +put_device (&pdev->dev); +return NULL ; }EXPORT_SYMBOL_GPL (rpi_firmware_get);
drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c +26 -28
92 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c +240 -46
129 lines not on this page · raw message
drivers/gpu/drm/exynos/exynos_drm_g2d.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c +6 -4
Lines of this file are not shown. View the raw message.
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +38 -30
68 lines not on this page · raw message
drivers/gpu/drm/panfrost/panfrost_device.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/irqchip/irq-loongson-pch-pic.c +18 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/atmel/atmel-sama5d2-isc.c +17 -0
Lines of this file are not shown. View the raw message.
drivers/media/platform/coda/coda-bit.c +13 -5
Lines of this file are not shown. View the raw message.
drivers/media/platform/qcom/venus/helpers.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/media/platform/qcom/venus/hfi_msgs.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/qcom/venus/venc.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/media/platform/rcar-vin/rcar-v4l2.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/media/platform/rockchip/rga/rga.c +22 -5
Lines of this file are not shown. View the raw message.
drivers/media/platform/vsp1/vsp1_entity.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/media/usb/dvb-usb/dvb-usb-i2c.c +7 -2
Lines of this file are not shown. View the raw message.
drivers/media/usb/dvb-usb/dvb-usb-init.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/media/usb/dvb-usb/nova-t-usb2.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/media/usb/em28xx/em28xx-input.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/media/usb/go7007/go7007-driver.c +0 -26
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/google/gve/gve_adminq.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +20 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_main.c +9 -4
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_ptp.c +54 -1
55 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/common.h +0 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c +24 -11
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +12 -10
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_reg.h +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +15 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/dev.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/devlink.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/fs.h +0 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c +6 -9
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/qos.h +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +16 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +18 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/esw/indir_table.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c +2 -16
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lag.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lag_mp.c +8 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lag_mp.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_devlink.c +7 -7
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qualcomm/qca_spi.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qualcomm/qca_uart.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +3 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/ti/am65-cpsw-nuss.c +28 -19
47 lines not on this page · raw message
drivers/net/ethernet/ti/am65-cpsw-nuss.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/acpi.c +7 -7
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/power/supply/axp288_fuel_gauge.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/power/supply/max17042_battery.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/regulator/vctrl-regulator.c +43 -30
73 lines not on this page · raw message
drivers/soc/mediatek/mtk-mmsys.h +93 -40
133 lines not on this page · raw message
drivers/staging/clocking-wizard/Kconfig +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c +7 -4
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/udc/bdc/bdc_core.c +15 -15
Lines of this file are not shown. View the raw message.
drivers/video/backlight/pwm_bl.c +28 -26
54 lines not on this page · raw message
fs/fuse/inode.c +60 -0
60 lines not on this page · raw message
fs/gfs2/ops_fstype.c +43 -0
43 lines not on this page · raw message
fs/gfs2/super.c +6 -55
61 lines not on this page · raw message
fs/io-wq.c +70 -35
105 lines not on this page · raw message
fs/udf/super.c +35 -40
75 lines not on this page · raw message
include/linux/local_lock_internal.h +23 -19
42 lines not on this page · raw message
kernel/cgroup/cpuset.c +56 -39
95 lines not on this page · raw message
kernel/cpu_pm.c +38 -12
50 lines not on this page · raw message
kernel/sched/topology.c +65 -0
65 lines not on this page · raw message
kernel/time/hrtimer.c +69 -23
92 lines not on this page · raw message
net/ipv4/route.c +31 -17
48 lines not on this page · raw message
net/sched/sch_htb.c +62 -35
97 lines not on this page · raw message
samples/pktgen/pktgen_sample04_many_flows.sh +7 -5
Lines of this file are not shown. View the raw message.
samples/pktgen/pktgen_sample05_flow_per_thread.sh +7 -5
Lines of this file are not shown. View the raw message.
sound/soc/intel/boards/kbl_da7219_max98927.c +7 -48
55 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-cml-match.c +1 -1
Lines of this file are not shown. View the raw message.
sound/soc/intel/common/soc-acpi-intel-kbl-match.c +1 -1
Lines of this file are not shown. View the raw message.
sound/soc/intel/skylake/skl-topology.c +10 -15
Lines of this file are not shown. View the raw message.
sound/soc/mediatek/mt8183/mt8183-afe-pcm.c +27 -16
43 lines not on this page · raw message
sound/soc/mediatek/mt8192/mt8192-afe-pcm.c +17 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/btf.c +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_core_autosize.c +15 -5
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_maps.c +2 -2
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.
Alan J. Wylie
Acked-by Peter Zijlstra (Intel)Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
In reply to Greg Kroah-HartmanQuoted 1 line · Greg Kroah-Hartman
I'm announcing the release of the 5.14.4 kernel.
I'm seeing a regression in 5.14.4
Running Nextcloud (a PHP web application) with a PostgreSQL backend
All was fine with 5.14.3
With 5.14.4, Nextcloud hangs loading events/contacts, etc.
As well as the web interface hanging, running this command on the command line also errors:
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/lib/private/Files/AppData/AppData.php on line 41
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/3rdparty/symfony/console/Application.php on line 65
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/lib/public/Files/SimpleFS/ISimpleRoot.php on line 68
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/apps/theming/lib/ImageManager.php on line 313
Note that the above commands were all run immediately after each other, but showed up in different php scripts.
Similar errors appear in the Apache log.
After reverting this commit in 5.14.4, Nextcloud resumed working.
$ git revert 564005805aadec9cb7e5dc4e14071b8f87cd6b58
This commit is 406dd42bd1ba0c01babf9cde169bb319e52f6147 in Linus's tree
I'll be more than happy to help with debugging / diagnosing this
The server is running up-to-date Gentoo.
postgres (PostgreSQL) 13.3
PHP 7.4.21 (cli) (built: Jul 11 2021 06:14:49) ( ZTS ) Server version: Apache/2.4.48 (Unix) Nextcloud 21.0.3
$ git bisect bad 564005805aadec9cb7e5dc4e14071b8f87cd6b58 is the first bad commit commit 564005805aadec9cb7e5dc4e14071b8f87cd6b58 Author: Frederic Weisbecker <[email protected]> Date: Mon Jul 26 14:55:10 2021 +0200
posix-cpu-timers: Force next expiration recalc after itimer reset
[ Upstream commit 406dd42bd1ba0c01babf9cde169bb319e52f6147 ]
When an itimer deactivates a previously armed expiration, it simply doesn't do anything. As a result the process wide cputime counter keeps running and the tick dependency stays set until it reaches the old ghost expiration value.
This can be reproduced with the following snippet:
void trigger_process_counter(void)
{
struct itimerval n = {};
n.it_value.tv_sec = 100; setitimer(ITIMER_VIRTUAL, &n, NULL); n.it_value.tv_sec = 0; setitimer(ITIMER_VIRTUAL, &n, NULL);
}
Fix this with resetting the relevant base expiration. This is similar to disarming a timer.
kernel/time/posix-cpu-timers.c | 2 -- 1 file changed, 2 deletions(-)
$
$ git bisect log git bisect start # bad: [d6f7bb5bb29096b2935c55deeb545616dab74406] Linux 5.14.4 git bisect bad d6f7bb5bb29096b2935c55deeb545616dab74406 # good: [d27a14321366788cef927dbe69854f34460b3f7c] Linux 5.14.3 git bisect good d27a14321366788cef927dbe69854f34460b3f7c # bad: [203baf2a84d30b468ae80868344e7685b8f4124b] net: dsa: tag_sja1105: optionally build as module when switch driver is module if PTP is enabled git bisect bad 203baf2a84d30b468ae80868344e7685b8f4124b # bad: [d031746f556b344d87033bc9dcee1a65dd6a56a3] drm/panfrost: Fix missing clk_disable_unprepare() on error in panfrost_clk_init() git bisect bad d031746f556b344d87033bc9dcee1a65dd6a56a3 # bad: [115540457feae9a215e5c16e434f71b80860038f] io-wq: remove GFP_ATOMIC allocation off schedule out path git bisect bad 115540457feae9a215e5c16e434f71b80860038f # bad: [923c1c5ca5a81958a8bfd891bc16c319c4bb9e6d] nvme-tcp: don't update queue count when failing to set io queues git bisect bad 923c1c5ca5a81958a8bfd891bc16c319c4bb9e6d # good: [f02146cf84e6165cae177aea30acdea7b8d76cf3] EDAC/mce_amd: Do not load edac_mce_amd module on guests git bisect good f02146cf84e6165cae177aea30acdea7b8d76cf3 # bad: [796c0a620178d68900fb2f4bf987cd89a9b38090] udf: Fix iocharset=utf8 mount option git bisect bad 796c0a620178d68900fb2f4bf987cd89a9b38090 # bad: [0d7541f439be37dabb7546889503d16ac59ec29f] hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns() git bisect bad 0d7541f439be37dabb7546889503d16ac59ec29f # bad: [564005805aadec9cb7e5dc4e14071b8f87cd6b58] posix-cpu-timers: Force next expiration recalc after itimer reset git bisect bad 564005805aadec9cb7e5dc4e14071b8f87cd6b58 # first bad commit: [564005805aadec9cb7e5dc4e14071b8f87cd6b58] posix-cpu-timers: Force next expiration recalc after itimer reset $
Signature · 4 lines
Alan J. Wylie https://www.wylie.me.uk/ Dance like no-one's watching. / Encrypt like everyone is. Security is inversely proportional to convenience
Greg Kroah-Hartman
maintainerRe: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
Quoted 35 lines · Alan J. Wylie
Quoted 1 line · Greg Kroah-Hartman
I'm announcing the release of the 5.14.4 kernel.
I'm seeing a regression in 5.14.4
Running Nextcloud (a PHP web application) with a PostgreSQL backend
All was fine with 5.14.3
With 5.14.4, Nextcloud hangs loading events/contacts, etc.
As well as the web interface hanging, running this command on the command line also errors:
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/lib/private/Files/AppData/AppData.php on line 41# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/3rdparty/symfony/console/Application.php on line 65# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/lib/public/Files/SimpleFS/ISimpleRoot.php on line 68# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --on" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/apps/theming/lib/ImageManager.php on line 313Note that the above commands were all run immediately after each other, but showed up in different php scripts.
Quoted 7 lines
Similar errors appear in the Apache log.
After reverting this commit in 5.14.4, Nextcloud resumed working.
$ git revert 564005805aadec9cb7e5dc4e14071b8f87cd6b58This commit is
406dd42bd1ba0c01babf9cde169bb319e52f6147in Linus's tree
Thanks for bisecting this down.
Does 5.15-rc1 also fail in this same way, or does it work ok?
thanks,
greg k-h
Re: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
Quoted 1 line · at 20:09 on Wed 15-Sep-2021 Greg Kroah-Hartman ([email protected])…
Does 5.15-rc1 also fail in this same way, or does it work ok?
It fails
# uname -a Linux bilbo 5.15.0-rc1 #1 SMP PREEMPT Wed Sep 15 19:19:48 BST 2021 x86_64 AMD FX(tm)-4300 Quad-Core Processor AuthenticAMD GNU/Linux
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --off" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/3rdparty/symfony/console/Application.php on line 65
Regards
Alan
Signature · 4 lines
Alan J. Wylie https://www.wylie.me.uk/ Dance like no-one's watching. / Encrypt like everyone is. Security is inversely proportional to convenience
Greg Kroah-Hartman
maintainerRe: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
Quoted 6 lines · Alan J. Wylie
Quoted 1 line · at 20:09 on Wed 15-Sep-2021 Greg Kroah-Hartman ([email protected])…
Does 5.15-rc1 also fail in this same way, or does it work ok?
It fails
Quoted 8 lines
# uname -a Linux bilbo 5.15.0-rc1 #1 SMP PREEMPT Wed Sep 15 19:19:48 BST 2021 x86_64 AMD FX(tm)-4300 Quad-Core Processor AuthenticAMD GNU/Linux# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --off" PHP Fatal error: Maximum execution time of 0 seconds exceeded in /var/www/htdocs/nextcloud/3rdparty/symfony/console/Application.php on line 65
Thanks for testing this and letting us know so quickly.
I'll go drop this from all of the pending stable queues, and revert it from the released stable trees and push out an update in a few hours.
thanks,
greg k-h
Frederic Weisbecker
maintainerRe: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
In reply to Alan J. WylieQuoted 26 lines · Alan J. Wylie
564005805aadec9cb7e5dc4e14071b8f87cd6b58is the first bad commit commit564005805aadec9cb7e5dc4e14071b8f87cd6b58Author: Frederic Weisbecker <[email protected]> Date: Mon Jul 26 14:55:10 2021 +0200posix-cpu-timers: Force next expiration recalc after itimer reset
[ Upstream commit
406dd42bd1ba0c01babf9cde169bb319e52f6147]When an itimer deactivates a previously armed expiration, it simply doesn't do anything. As a result the process wide cputime counter keeps running and the tick dependency stays set until it reaches the old ghost expiration value.
This can be reproduced with the following snippet:
void
trigger_process_counter(void)
{
struct itimerval n = {};n.it_value.tv_sec = 100;
setitimer(ITIMER_VIRTUAL, &n, NULL); n.it_value.tv_sec = 0;setitimer(ITIMER_VIRTUAL, &n, NULL);
}
Quoted 9 lines
Fix this with resetting the relevant base expiration. This is similar to disarming a timer.
Signed-off-by Frederic Weisbecker <[email protected]>Signed-off-by Thomas Gleixner <[email protected]>Signed-off-by Sasha Levin <[email protected]>
Right, this should fix the issue: https://lore.kernel.org/lkml/[email protected]/
Thanks!
Re: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
Quoted 2 lines · Frederic Weisbecker
Right, this should fix the issue: https://lore.kernel.org/lkml/[email protected]/
Hmm.
Can you explain why the fix isn't just to revert that original commit?
It looks like the only real difference is that now it does *extra work* with all that tick_nohz_dep_set_signal().
Isn't it easier to just leave any old timer ticking, and not do the extra work until it expires and you notice "ok, it's not important"?
IOW, that original commit explicitly broke the only case it changed - the timer being disabled. So why isn't it just reverted? What is it that kleeps us wanting to do the extra work for the disabled timer case?
As long as it's fixed, I'm all ok with this, but I'm looking at the commit message for that broken commit, and I'm looking at the commit message for the fix, and I'm not seeing an actual _explanation_ for this churn.
Linus
Frederic Weisbecker
maintainerRe: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
Quoted 20 lines · Linus Torvalds
Quoted 2 lines · Frederic Weisbecker
Right, this should fix the issue: https://lore.kernel.org/lkml/[email protected]/
Hmm.
Can you explain why the fix isn't just to revert that original commit?
It looks like the only real difference is that now it does *extra work* with all that
tick_nohz_dep_set_signal().Isn't it easier to just leave any old timer ticking, and not do the extra work until it expires and you notice "ok, it's not important"?
IOW, that original commit explicitly broke the only case it changed - the timer being disabled. So why isn't it just reverted? What is it that kleeps us wanting to do the extra work for the disabled timer case?
Quoted 4 lines
As long as it's fixed, I'm all ok with this, but I'm looking at the commit message for that broken commit, and I'm looking at the commit message for the fix, and I'm not seeing an actual _explanation_ for this churn.
The commit indeed failed to explain correctly the actual issue.
When a process wide posix cpu timer (eg: itimer) is elapsing, all the threads inside that process contend on their cputime updates (account_group_user_time() and account_group_system_time())
The overhead just consists in concurrent atomic64_add() calls on every tick but still... And this can remain for a very long while, until the previous value of the timer expiry is reached.
The other symptom, more of a corner case for most, is that the CPUs running any thread of that process won't be able to enter in nohz_full mode, again until the old timer expiry is reached.
Re: Regression in posix-cpu-timers.c (was Re: Linux 5.14.4)
In reply to Frederic WeisbeckerQuoted 1 line · at 20:31 on Wed 15-Sep-2021 Frederic Weisbecker ([email protected]) wrote:
Right, this should fix the issue: https://lore.kernel.org/lkml/[email protected]/
Indeed it does.
# uname -a Linux bilbo 5.14.4-dirty #15 SMP PREEMPT Wed Sep 15 20:10:28 BST 2021 x86_64 AMD FX(tm)-4300 Quad-Core Processor AuthenticAMD GNU/Linux
# su apache -s /bin/bash -c "cd /var/www/htdocs/nextcloud/ && php occ maintenance:mode --off" Maintenance mode disabled #
$ git diff
kernel/time/posix-cpu-timers.c +2 -1
@@ -1346,7 +1346,8 @@ void set_process_cpu_timer(struct task_struct *tsk, unsigned int clkid, } } - *newval += now; +if (*newval) + *newval += now; }/*
Thanks
Alan
Signature · 4 lines
Alan J. Wylie https://www.wylie.me.uk/ Dance like no-one's watching. / Encrypt like everyone is. Security is inversely proportional to convenience