Linux 5.16.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.16.11 kernel.
All users of the 5.16 kernel series must upgrade.
The updated 5.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.16.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
.mailmap | 3 Makefile | 2 arch/arm/mach-omap2/display.c | 2 arch/arm/mach-omap2/omap_hwmod.c | 4 arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 6 arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts | 8 arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 6 arch/arm64/boot/dts/amlogic/meson-sm1-sei610.dts | 8 arch/arm64/include/asm/el2_setup.h | 2 arch/parisc/include/asm/bitops.h | 8 arch/parisc/lib/iomap.c | 18 arch/parisc/mm/init.c | 9 arch/powerpc/kernel/head_book3s_32.S | 4 arch/powerpc/lib/sstep.c | 2 arch/x86/include/asm/bug.h | 20 arch/x86/kernel/fpu/regset.c | 9 arch/x86/kernel/ptrace.c | 4 arch/x86/kvm/pmu.c | 15 arch/x86/kvm/pmu.h | 3 arch/x86/kvm/svm/avic.c | 2 arch/x86/kvm/svm/nested.c | 26 arch/x86/kvm/svm/pmu.c | 8 arch/x86/kvm/svm/svm.c | 19 arch/x86/kvm/vmx/pmu_intel.c | 9 arch/x86/kvm/vmx/vmx.c | 1 arch/x86/kvm/xen.c | 97 + arch/x86/xen/enlighten_pv.c | 4 arch/x86/xen/smp_pv.c | 26 block/bfq-iosched.c | 2 block/blk-core.c | 10 block/elevator.c | 2 block/genhd.c | 14 crypto/af_alg.c | 3 drivers/acpi/processor_idle.c | 5 drivers/acpi/x86/s2idle.c | 12 drivers/ata/libata-core.c | 1 drivers/block/mtip32xx/mtip32xx.c | 2 drivers/block/rbd.c | 2 drivers/block/xen-blkfront.c | 2 drivers/char/random.c | 5 drivers/dma/ptdma/ptdma-dev.c | 17 drivers/dma/sh/rcar-dmac.c | 9 drivers/dma/stm32-dmamux.c | 4 drivers/edac/edac_mc.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 37 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c | 7 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c | 6 drivers/gpu/drm/amd/display/dc/core/dc.c | 2 drivers/gpu/drm/amd/display/dc/dc.h | 1 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c | 61 - drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c | 9 drivers/gpu/drm/drm_atomic_uapi.c | 14 drivers/gpu/drm/drm_gem_cma_helper.c | 1 drivers/gpu/drm/i915/Kconfig | 1 drivers/gpu/drm/i915/display/intel_opregion.c | 15 drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 6 drivers/gpu/drm/i915/intel_pm.c | 4 drivers/gpu/drm/mediatek/mtk_dsi.c | 167 +-- drivers/gpu/drm/nouveau/nvkm/falcon/base.c | 8 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c | 31 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h | 2 drivers/gpu/drm/radeon/atombios_encoders.c | 3 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 14 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 4 drivers/hid/amd-sfh-hid/amd_sfh_pcie.h | 2 drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c | 4 drivers/hid/hid-apple.c | 16 drivers/hid/hid-elo.c | 1 drivers/hid/hid-ids.h | 1 drivers/hid/hid-quirks.c | 1 drivers/hid/i2c-hid/i2c-hid-of-goodix.c | 28 drivers/hv/vmbus_drv.c | 5 drivers/i2c/busses/i2c-brcmstb.c | 2 drivers/i2c/busses/i2c-qcom-cci.c | 16 drivers/irqchip/irq-sifive-plic.c | 1 drivers/md/dm.c | 2 drivers/mmc/core/block.c | 28 drivers/mtd/devices/phram.c | 12 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 2 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 3 drivers/mtd/nand/raw/ingenic/ingenic_ecc.c | 7 drivers/mtd/nand/raw/qcom_nandc.c | 14 drivers/mtd/parsers/qcomsmempart.c | 33 drivers/net/bonding/bond_3ad.c | 30 drivers/net/bonding/bond_main.c | 5 drivers/net/dsa/Kconfig | 1 drivers/net/dsa/lan9303-core.c | 13 drivers/net/dsa/lantiq_gswip.c | 2 drivers/net/dsa/mv88e6xxx/chip.c | 7 drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 drivers/net/ethernet/broadcom/bgmac-platform.c | 23 drivers/net/ethernet/cadence/macb_main.c | 2 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c | 4 drivers/net/ethernet/intel/ice/ice_lib.c | 6 drivers/net/ethernet/microchip/sparx5/sparx5_packet.c | 2 drivers/net/ethernet/mscc/ocelot.c | 6 drivers/net/ethernet/netronome/nfp/flower/cmsg.h | 2 drivers/net/ieee802154/at86rf230.c | 13 drivers/net/ieee802154/ca8210.c | 4 drivers/net/netdevsim/fib.c | 4 drivers/net/phy/mediatek-ge.c | 3 drivers/net/usb/qmi_wwan.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 6 drivers/net/wireless/intel/iwlwifi/Kconfig | 13 drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 11 drivers/net/wireless/intel/iwlwifi/fw/api/commands.h | 5 drivers/net/wireless/intel/iwlwifi/fw/api/filter.h | 88 - drivers/net/wireless/intel/iwlwifi/fw/api/rs.h | 1 drivers/net/wireless/intel/iwlwifi/fw/file.h | 2 drivers/net/wireless/intel/iwlwifi/fw/rs.c | 33 drivers/net/wireless/intel/iwlwifi/iwl-csr.h | 3 drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | 203 ---- drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 240 ---- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 13 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 1 drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 2 drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c | 3 drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 3 drivers/nvme/host/core.c | 11 drivers/nvme/host/multipath.c | 2 drivers/nvme/host/rdma.c | 1 drivers/nvme/host/tcp.c | 1 drivers/parisc/ccio-dma.c | 3 drivers/parisc/sba_iommu.c | 3 drivers/pci/controller/pci-hyperv.c | 13 drivers/phy/broadcom/phy-brcm-usb.c | 38 drivers/phy/mediatek/phy-mtk-tphy.c | 2 drivers/pinctrl/bcm/Kconfig | 1 drivers/platform/x86/amd-pmc.c | 13 drivers/platform/x86/intel/speed_select_if/isst_if_common.c | 97 + drivers/platform/x86/touchscreen_dmi.c | 24 drivers/scsi/lpfc/lpfc.h | 1 drivers/scsi/lpfc/lpfc_attr.c | 3 drivers/scsi/lpfc/lpfc_els.c | 20 drivers/scsi/lpfc/lpfc_nportdisc.c | 5 drivers/scsi/pm8001/pm8001_hwi.c | 18 drivers/scsi/pm8001/pm8001_sas.c | 5 drivers/scsi/pm8001/pm80xx_hwi.c | 30 drivers/scsi/qedi/qedi_fw.c | 6 drivers/scsi/scsi_scan.c | 55 + drivers/scsi/ufs/ufshcd.c | 58 - drivers/scsi/ufs/ufshcd.h | 2 drivers/soc/aspeed/aspeed-lpc-ctrl.c | 7 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 20 drivers/tee/optee/core.c | 1 drivers/tee/optee/ffa_abi.c | 70 - drivers/tee/optee/optee_private.h | 4 drivers/tee/optee/smc_abi.c | 13 drivers/tee/tee_core.c | 6 drivers/tty/n_tty.c | 6 drivers/tty/serial/8250/8250_gsc.c | 2 fs/btrfs/ioctl.c | 5 fs/btrfs/send.c | 4 fs/cifs/connect.c | 8 fs/cifs/fs_context.c | 4 fs/cifs/sess.c | 11 fs/cifs/xattr.c | 2 fs/io_uring.c | 5 fs/ksmbd/smb2pdu.c | 7 fs/ksmbd/smb_common.c | 5 fs/ksmbd/vfs.h | 1 fs/nfs/dir.c | 4 fs/nfs/inode.c | 9 fs/nfs/nfs4proc.c | 3 fs/quota/dquot.c | 11 fs/super.c | 19 fs/sync.c | 18 include/linux/blkdev.h | 3 include/linux/bpf.h | 101 +- include/linux/bpf_verifier.h | 17 include/linux/compiler.h | 21 include/linux/netdevice.h | 2 include/linux/sched.h | 1 include/linux/tee_drv.h | 14 include/net/addrconf.h | 2 include/net/bond_3ad.h | 2 include/net/dsa.h | 1 include/net/ip6_fib.h | 10 include/net/ipv6.h | 5 include/net/netns/ipv6.h | 3 kernel/async.c | 3 kernel/bpf/btf.c | 12 kernel/bpf/cgroup.c | 2 kernel/bpf/helpers.c | 12 kernel/bpf/map_iter.c | 4 kernel/bpf/ringbuf.c | 2 kernel/bpf/syscall.c | 2 kernel/bpf/verifier.c | 488 ++++------ kernel/cred.c | 9 kernel/fork.c | 17 kernel/locking/lockdep.c | 4 kernel/module.c | 25 kernel/stackleak.c | 5 kernel/sys.c | 20 kernel/trace/bpf_trace.c | 26 kernel/trace/trace.c | 4 kernel/ucount.c | 3 lib/iov_iter.c | 2 mm/mprotect.c | 2 net/ax25/af_ax25.c | 9 net/bridge/br_multicast.c | 4 net/core/bpf_sk_storage.c | 2 net/core/drop_monitor.c | 11 net/core/filter.c | 64 - net/core/rtnetlink.c | 6 net/core/sock_map.c | 2 net/dsa/dsa.c | 1 net/dsa/dsa_priv.h | 1 net/dsa/tag_lan9303.c | 21 net/ipv4/fib_lookup.h | 7 net/ipv4/fib_semantics.c | 6 net/ipv4/fib_trie.c | 22 net/ipv4/ping.c | 11 net/ipv4/route.c | 4 net/ipv6/addrconf.c | 4 net/ipv6/ip6_flowlabel.c | 4 net/ipv6/mcast.c | 2 net/ipv6/route.c | 19 net/mac80211/mlme.c | 29 net/mctp/route.c | 11 net/netfilter/nf_conntrack_proto_sctp.c | 9 net/netfilter/nft_synproxy.c | 4 net/sched/act_api.c | 13 net/sched/cls_api.c | 6 net/sched/sch_api.c | 22 net/sched/sch_generic.c | 29 net/smc/af_smc.c | 10 net/sunrpc/xprtrdma/verbs.c | 3 net/tipc/node.c | 13 net/vmw_vsock/af_vsock.c | 1 net/wireless/core.c | 17 scripts/kconfig/confdata.c | 13 scripts/kconfig/preprocess.c | 2 sound/core/memalloc.c | 15 sound/pci/hda/hda_intel.c | 5 sound/pci/hda/patch_realtek.c | 40 sound/soc/codecs/tas2770.c | 7 sound/soc/codecs/wm_adsp.c | 3 sound/soc/mediatek/Kconfig | 2 sound/soc/qcom/lpass-platform.c | 8 sound/soc/soc-ops.c | 41 sound/usb/implicit.c | 4 sound/usb/mixer.c | 9 tools/lib/subcmd/subcmd-util.h | 11 tools/perf/util/bpf-loader.c | 3 tools/testing/kunit/kunit_kernel.py | 1 tools/testing/selftests/bpf/prog_tests/ksyms_btf.c | 14 tools/testing/selftests/bpf/progs/test_ksyms_btf_write_check.c | 29 tools/testing/selftests/clone3/clone3.c | 2 tools/testing/selftests/exec/Makefile | 4 tools/testing/selftests/kselftest_harness.h | 4 tools/testing/selftests/kvm/Makefile | 1 tools/testing/selftests/mincore/mincore_selftest.c | 20 tools/testing/selftests/mount_setattr/mount_setattr_test.c | 4 tools/testing/selftests/netfilter/nft_concat_range.sh | 2 tools/testing/selftests/netfilter/nft_fib.sh | 1 tools/testing/selftests/netfilter/nft_zones_many.sh | 12 tools/testing/selftests/openat2/Makefile | 2 tools/testing/selftests/openat2/helpers.h | 12 tools/testing/selftests/openat2/openat2_test.c | 12 tools/testing/selftests/pidfd/pidfd.h | 13 tools/testing/selftests/pidfd/pidfd_fdinfo_test.c | 22 tools/testing/selftests/pidfd/pidfd_test.c | 6 tools/testing/selftests/pidfd/pidfd_wait.c | 5 tools/testing/selftests/rtc/settings | 2 tools/testing/selftests/vDSO/vdso_test_abi.c | 135 +- tools/testing/selftests/zram/zram.sh | 15 tools/testing/selftests/zram/zram01.sh | 33 tools/testing/selftests/zram/zram02.sh | 1 tools/testing/selftests/zram/zram_lib.sh | 134 +- 281 files changed, 2217 insertions(+), 2068 deletions(-)
Aaron Liu (1):
drm/amdgpu: add utcl2_harvest to gc 10.3.1
Ajish Koshy (1):
scsi: pm80xx: Fix double completion for SATA devices
Al Cooper (1):
phy: usb: Leave some clocks running during suspend
Alex Henrie (1):
HID: apple: Set the tilde quirk flag on the Wellspring 5 and later
Alexey Khoroshilov (1):
net: dsa: lantiq_gswip: fix use after free in gswip_remove()
Amir Goldstein (1):
cifs: fix set of group SID via NTSD xattrs
Anders Roxell (1):
powerpc/lib/sstep: fix 'ptesync' build error
Andy Lutomirski (1):
x86/ptrace: Fix xfpregs_set()'s incorrect xmm clearing
Andy Shevchenko (1):
parisc: Add ioread64_lo_hi() and iowrite64_lo_hi()
AngeloGioacchino Del Regno (1):
drm/mediatek: mtk_dsi: Avoid EPROBE_DEFER loop with external bridge
Ansuel Smith (2):
mtd: parsers: qcom: Fix kernel panic on skipped partition
mtd: parsers: qcom: Fix missing free for pparts in cleanup
Arnaldo Carvalho de Melo (1):
perf bpf: Defer freeing string after possible strlen() on it
Axel Rasmussen (2):
pidfd: fix test failure due to stack overflow on some arches
selftests: fixup build warnings in pidfd / clone3 tests
Bart Van Assche (2):
scsi: ufs: Remove dead code
scsi: ufs: Fix a deadlock in the error handler
Basavaraj Natikar (3):
HID: amd_sfh: Add illuminance mask to limit ALS max value
HID: amd_sfh: Increase sensor command timeout
HID: amd_sfh: Correct the structure field name
Ben Skeggs (1):
drm/nouveau/pmu/gm200-: use alternate falcon reset sequence
Brenda Streiff (1):
kconfig: let 'shell' return enough output for deep path names
Bryan O'Donoghue (1):
mtd: rawnand: qcom: Fix clock sequencing in qcom_nandc_probe()
Charles Keepax (1):
ASoC: wm_adsp: Correct control read size when parsing compressed buffer
Cheng Jui Wang (1):
lockdep: Correct lock_classes index mapping
Christian Brauner (2):
mailmap: update Christian Brauner's email address
tests: fix idmapped mount_setattr test
Christian Eggers (1):
mtd: rawnand: gpmi: don't leak PM reference in error path
Christian Hewitt (3):
arm64: dts: meson-gx: add ATF BL32 reserved-memory region
arm64: dts: meson-g12: add ATF BL32 reserved-memory region
arm64: dts: meson-g12: drop BL32 region from SEI510/SEI610
Christian König (1):
drm/amdgpu: fix logic inversion in check
Christian Löhle (1):
mmc: block: fix read single on recovery logic
Christoph Hellwig (1):
block: fix surprise removal for drivers calling blk_set_queue_dying
Christophe JAILLET (1):
dmaengine: ptdma: Fix the error handling path in pt_core_init()
Christophe Leroy (1):
powerpc/603: Fix boot failure with DEBUG_PAGEALLOC and KFENCE
Cristian Marussi (4):
selftests: openat2: Print also errno in failure messages
selftests: openat2: Add missing dependency in Makefile
selftests: openat2: Skip testcases that fail with EOPNOTSUPP
selftests: skip mincore.check_file_mmap when fs lacks needed support
DENG Qingfang (1):
net: phy: mediatek: remove PHY mode check on MT7531
Dan Aloni (1):
xprtrdma: fix pointer derefs in error cases of rpcrdma_ep_create
Dan Carpenter (1):
mtd: phram: Prevent divide by zero bug in phram_setup()
Danie du Toit (1):
nfp: flower: netdev offload check for ip6gretap
Daniel Thompson (1):
HID: i2c-hid: goodix: Fix a lockdep splat
Darrick J. Wong (3):
vfs: make freeze_super abort when sync_filesystem returns error
vfs: make sync_filesystem return errors from ->sync_fs
quota: make dquot_quota_sync return errors from ->sync_fsDavid Woodhouse (1):
KVM: x86/xen: Fix runstate updates to be atomic when preempting vCPU
Dmytro Laktyushkin (1):
drm/amd/display: fix yellow carp wm clamping
Dongliang Mu (1):
HID: elo: fix memory leak in elo_probe
Duoming Zhou (1):
ax25: improve the incomplete fix to avoid UAF and NPD bugs
Dāvis Mosāns (1):
btrfs: send: in case of IO error log it
Eliav Farber (1):
EDAC: Fix calculation of returned address and next offset in edac_align_ptr()
Eric Dumazet (7):
ipv4: fix data races in fib_alias_hw_flags_set
ipv6: fix data-race in fib6_info_hw_flags_set / fib6_purge_rt
drop_monitor: fix data-race in dropmon_net_event / trace_napi_poll_hit
net_sched: add __rcu annotation to netdev->qdisc
crypto: af_alg - get rid of alg_memory_allocated
bonding: fix data-races around agg_select_timer
net: sched: limit TC_ACT_REPEAT loops
Eric W. Biederman (5):
ucounts: Base set_cred_ucounts changes on the real user
ucounts: Handle wrapping in is_ucounts_overlimit
ucounts: Enforce RLIMIT_NPROC not RLIMIT_NPROC+1
rlimit: Fix RLIMIT_NPROC enforcement failure caused by capability calls in set_user
ucounts: Move RLIMIT_NPROC handling after set_user
Florian Westphal (2):
selftests: netfilter: reduce zone stress test running time
netfilter: conntrack: don't refresh sctp entries in closed state
Gatis Peisenieks (1):
atl1c: fix tx timeout after link flap on Mikrotik 10/25G NIC
Greg Kroah-Hartman (1):
Linux 5.16.11
Guo Ren (1):
irqchip/sifive-plic: Add missing thead,c900-plic match string
Hangbin Liu (2):
selftests: netfilter: fix exit value for nft_concat_range
selftests: netfilter: disable rp_filter on router
Hao Luo (9):
bpf: Introduce composable reg, ret and arg types.
bpf: Replace ARG_XXX_OR_NULL with ARG_XXX | PTR_MAYBE_NULL
bpf: Replace RET_XXX_OR_NULL with RET_XXX | PTR_MAYBE_NULL
bpf: Replace PTR_TO_XXX_OR_NULL with PTR_TO_XXX | PTR_MAYBE_NULL
bpf: Introduce MEM_RDONLY flag
bpf: Convert PTR_TO_MEM_OR_NULL to composable types.
bpf: Make per_cpu_ptr return rdonly PTR_TO_MEM.
bpf: Add MEM_RDONLY for helper args that are pointers to rdonly mem. bpf/selftests: Test PTR_TO_RDONLY_MEM
Helge Deller (1):
parisc: Show error if wrong 32/64-bit compiler is being used
Ignat Korchagin (1):
ipv6: mcast: use rcu-safe version of ipv6_get_lladdr()
Igor Pylypiv (1):
Revert "module, async: async_synchronize_full() on module init iff async is used"
Jae Hyun Yoo (1):
soc: aspeed: lpc-ctrl: Block error printing on probe defer cases
JaeSang Yoo (1):
tracing: Fix tp_printk option related with tp_printk_stop_on_boot
James Smart (1):
scsi: lpfc: Fix pt2pt NVMe PRLI reject LOGO loop
Jan Beulich (1):
x86/Xen: streamline (and fix) PV CPU enumeration
Jani Nikula (1):
drm/i915/opregion: check port number bounds for SWSCI display power state
Jason A. Donenfeld (1):
random: wake up /dev/random writers after zap
Jens Wiklander (2):
tee: export teedev_open() and teedev_close_context()
optee: use driver internal tee_context for some rpc
Jesse Brandeburg (1):
ice: enable parsing IPSEC SPI headers for RSS
Jiasheng Jiang (3):
mac80211: mlme: check for null after calling kmemdup
dmaengine: sh: rcar-dmac: Check for error num after setting mask
dmaengine: sh: rcar-dmac: Check for error num after dma_set_max_seg_size
Jim Mattson (2):
KVM: x86/pmu: Don't truncate the PerfEvtSeln MSR when creating a perf event
KVM: x86/pmu: Use AMD64_RAW_EVENT_MASK for PERF_TYPE_RAW
Jing Leng (1):
kconfig: fix failing to generate auto.conf
Joakim Tjernlund (1):
arm64: Correct wrong label in macro __init_el2_gicv3
Johannes Berg (4):
iwlwifi: fix use-after-free
iwlwifi: pcie: fix locking when "HW not ready"
iwlwifi: pcie: gen2: fix locking when "HW not ready"
cfg80211: fix race in netlink owner interface destruction
John David Anglin (3):
parisc: Drop __init from map_pages declaration
parisc: Fix data TLB miss in sba_unmap_sg
parisc: Fix sglist access in ccio-dma.c
John Garry (2):
scsi: pm8001: Fix use-after-free for aborted TMF sas_task
scsi: pm8001: Fix use-after-free for aborted SSP/STP sas_task
Jon Maloy (2):
tipc: fix wrong publisher node address in link publications
tipc: fix wrong notification node addresses
Jonas Gorski (1):
Revert "net: ethernet: bgmac: Use devm_platform_ioremap_resource_byname"
Julian Braha (2):
ASoC: mediatek: fix unmet dependency on GPIOLIB for SND_SOC_DMIC
pinctrl: bcm63xx: fix unmet dependency on REGMAP for GPIO_REGMAP
Kees Cook (2):
gcc-plugins/stackleak: Use noinstr in favor of notrace
libsubcmd: Fix use-after-free for realloc(..., 0)
Laibin Qiu (1):
block/wbt: fix negative inflight counter when remove scsi device
Li Zhijian (1):
kselftest: signal all child processes
Like Xu (1):
KVM: x86/pmu: Refactoring find_arch_event() to pmc_perf_hw_id()
Linus Torvalds (2):
mm: don't try to NUMA-migrate COW pages that have other uses
tty: n_tty: do not look ahead for EOL character past the end of the buffer
Long Li (1):
PCI: hv: Fix NUMA node assignment when kernel boots with custom NUMA topology
Luca Coelho (2):
iwlwifi: remove deprecated broadcast filtering feature
iwlwifi: mvm: don't send SAR GEO command for 3160 devices
Mans Rullgard (3):
net: dsa: lan9303: fix reset on probe
net: dsa: lan9303: handle hwaccel VLAN tags
net: dsa: lan9303: add VLAN IDs to master device
Marc St-Amand (1):
net: macb: Align the dma and coherent dma masks
Mario Limonciello (6):
platform/x86: amd-pmc: Correct usage of SMU version drm/amd: Warn users about potential s0ix problems
drm/amd: add support to check whether the system is set to s3 drm/amd: Only run s3 or s0ix if system is configured properly
ACPI: PM: Revert "Only mark EC GPE for wakeup on Intel systems" display/amd: decrease message verbosity about watermarks table failure
Mark Brown (4):
ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw()
ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_range()
ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_sx()
ASoC: ops: Fix stereo change notifications in snd_soc_put_xr_sx()
Martin Povišer (1):
ASoC: tas2770: Insert post reset delay
Matteo Martelli (1):
ALSA: usb-audio: revert to IMPLICIT_FB_FIXED_DEV for M-Audio FastTrack Ultra
Matthew Auld (1):
drm/i915/ttm: tweak priority hint selection
Max Kellermann (1):
lib/iov_iter: initialize "flags" in new pipe_buffer
Maxim Levitsky (4):
KVM: x86: nSVM/nVMX: set nested_run_pending on VM entry which is a result of RSM
KVM: x86: SVM: don't passthrough SMAP/SMEP/PKE bits in !NPT && !gCR0.PG case
KVM: x86: nSVM: fix potential NULL derefernce on nested migration
KVM: x86: nSVM: mark vmcb01 as dirty when restoring SMM saved state
Miaoqian Lin (3):
dmaengine: stm32-dmamux: Fix PM disable depth imbalance in stm32_dmamux_probe
mtd: rawnand: ingenic: Fix missing put_device in ingenic_ecc_get
Drivers: hv: vmbus: Fix memory leak in vmbus_add_channel_kobj
Michał Winiarski (1):
kunit: tool: Import missing importlib.abc
Mike Christie (1):
scsi: qedi: Fix ABBA deadlock in qedi_process_tmf_resp() and qedi_process_cmd_cleanup_resp()
Ming Lei (1):
scsi: core: Reallocate device's budget map on queue depth change
Miquel Raynal (2):
net: ieee802154: at86rf230: Stop leaking skb's
net: ieee802154: ca8210: Fix lifs/sifs periodsMiri Korenblit (2):
iwlwifi: mvm: fix condition which checks the version of rate_n_flags
iwlwifi: fix iwl_legacy_rate_to_fw_idx
Muhammad Usama Anjum (2):
selftests: kvm: Remove absent target file selftests/exec: Add non-regular to TEST_GEN_PROGS
Namjae Jeon (2):
ksmbd: fix same UniqueId for dot and dotdot entries
ksmbd: don't align last entry offset in smb2 query directory
Nicholas Bishop (1):
drm/radeon: Fix backlight control on iMac 12,1
Nick Desaulniers (1):
x86/bug: Merge annotate_reachable() into _BUG_FLAGS() asm
Nícolas F. R. A. Prado (1):
selftests: rtc: Increase test timeout so that all tests run
Oleksandr Mazur (1):
net: bridge: multicast: notify switchdev driver whenever MC processing gets disabled
Pablo Neira Ayuso (1):
netfilter: nft_synproxy: unregister hooks on init error path
Padmanabha Srinivasaiah (1):
staging: vc04_services: Fix RCU dereference check
Phil Elwell (1):
brcmfmac: firmware: Fix crash in brcm_alt_fw_path
Qu Wenruo (2):
btrfs: don't hold CPU for too long when defragging a file
btrfs: defrag: don't try to defrag extents which are under writeback
Radu Bulie (1):
dpaa2-eth: Initialize mutex used in one step timestamping path
Rafał Miłecki (1):
i2c: brcmstb: fix support for DSL and CM variants
Rajib Mahapatra (1):
drm/amdgpu: skipping SDMA hw_init and hw_fini for S0ix.
Randy Dunlap (1):
serial: parisc: GSC: fix build when IOSAPIC is not set
Robin Murphy (1):
drm/cma-helper: Set VM_DONTEXPAND for mmap
Roman Li (1):
drm/amd/display: Cap pflip irqs per max otg number
Sagi Grimberg (3):
nvme: fix a possible use-after-free in controller reset during load
nvme-tcp: fix possible use-after-free in transport error_recovery work
nvme-rdma: fix possible use-after-free in transport error_recovery work
Sascha Hauer (1):
drm/rockchip: dw_hdmi: Do not leave clock enabled in error case
Sean Christopherson (1):
Revert "svm: Add warning message for AVIC IPI invalid target"
Sergio Costas (1):
HID:Add support for UGTABLET WP5540
Seth Forshee (1):
vsock: remove vsock from connected table when connect is interrupted by a signal
Shakeel Butt (1):
mm: io_uring: allow oom-killer from io_uring_setup
Shyam Prasad N (1):
cifs: unlock chan_lock before calling cifs_put_tcp_session
Siva Mullati (1):
drm/i915/gvt: Make DRM_I915_GVT depend on X86
Slark Xiao (1):
net: usb: qmi_wwan: Add support for Dell DW5829e
Srinivas Pandruvada (1):
platform/x86: ISST: Fix possible circular locking dependency detected
Steen Hegelund (1):
net: sparx5: do not refer to skb after passing it on
Stephen Boyd (1):
ASoC: qcom: Actually clear DMA interrupt register for HDMI
Steve French (2):
cifs: fix confusing unneeded warning message on smb2.1 and earlier
smb3: fix snapshot mount option
Takashi Iwai (6):
ALSA: usb-audio: Don't abort resume upon errors
ALSA: memalloc: Fix dma_need_sync() checks
ALSA: memalloc: invalidate SG pages before sync
ALSA: hda/realtek: Fix deadlock by COEF mutex
ALSA: hda: Fix regression on forced probe mask option
ALSA: hda: Fix missing codec probe on Shenker Dock 15
Tom Rix (2):
mctp: fix use after free
dpaa2-switch: fix default return of dpaa2_switch_flower_parse_mirror_key
Trond Myklebust (3):
NFS: Remove an incorrect revalidation in nfs4_update_changeattr_locked()
NFS: LOOKUP_DIRECTORY is also ok with symlinks
NFS: Do not report writeback errors in nfs_getattr()
Ville Syrjälä (3):
drm/atomic: Don't pollute crtc_state->mode_blob with error pointers drm/i915: Fix dbuf slice config lookup
drm/i915: Fix mbus join config lookup
Vincenzo Frascino (1):
kselftest: Fix vdso_test_abi return status
Vladimir Oltean (2):
net: dsa: mv88e6xxx: flush switchdev FDB workqueue before removing VLAN
net: mscc: ocelot: fix use-after-free in ocelot_vlan_del()
Vladimir Zapolskiy (2):
i2c: qcom-cci: don't delete an unregistered adapter
i2c: qcom-cci: don't put a device tree node before i2c_add_adapter()
Waiman Long (1):
copy_process(): Move fd_install() out of sighand->siglock critical section
Wan Jiabing (2):
ARM: OMAP2+: hwmod: Add of_node_put() before break
phy: phy-mtk-tphy: Fix duplicated argument in phy-mtk-tphy
Wen Gu (1):
net/smc: Avoid overwriting the copies of clcsock callback functions
Willem de Bruijn (1):
ipv6: per-netns exclusive flowlabel checks
Woody Suwalski (1):
ACPI: processor: idle: fix lockup regression on 32-bit ThinkPad T40
Xin Long (1):
ping: fix the dif and sdif check in ping_lookup
Yang Xu (3):
selftests/zram: Skip max_comp_streams interface on newer kernel selftests/zram01.sh: Fix compression ratio calculation selftests/zram: Adapt the situation that /dev/zram0 is being used
Ye Guojin (1):
ARM: OMAP2+: adjust the location of put_device() call in omapdss_init_of
Yifan Zhang (1):
drm/amd/pm: correct the sequence of sending gpu reset msg
Yu Huang (1):
ALSA: hda/realtek: Add quirk for Legion Y9000X 2019
Yuka Kawajiri (1):
platform/x86: touchscreen_dmi: Add info for the RWC NANOTE P8 AY07J 2-in-1
Zhang Changzhong (1):
bonding: force carrier update when releasing slave
Zoltán Böszörményi (1):
ata: libata-core: Disable TRIM on M88V29
david regan (1):
mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status
Greg Kroah-Hartman
maintainer.mailmap +3 -0
@@ -74,6 +74,9 @@ Chris Chiu <[email protected]> <[email protected]> Christian Borntraeger <[email protected]> <[email protected]> Christian Borntraeger <[email protected]> <[email protected]> Christian Borntraeger <[email protected]> <[email protected]> +Christian Brauner <[email protected]> <[email protected]> +Christian Brauner <[email protected]> <[email protected]> +Christian Brauner <[email protected]> <[email protected]> Christophe Ricard <[email protected]> Christoph Hellwig <[email protected]> Colin Ian King <[email protected]> <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 16 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Gobble Gobble
arch/arm/mach-omap2/display.c +1 -1
@@ -263,9 +263,9 @@ static int __init omapdss_init_of(void) } r =of_platform_populate (node,NULL ,NULL , &pdev->dev); +put_device (&pdev->dev);if (r) {pr_err ("Unable to populate DSS submodule devices\n" ); -put_device (&pdev->dev);return r; }
arch/arm/mach-omap2/omap_hwmod.c +3 -1
@@ -752,8 +752,10 @@ static int __init _init_clkctrl_providers(void)for_each_matching_node (np, ti_clkctrl_match_table) { ret =_setup_clkctrl_provider (np); -if (ret) +if (ret) { +of_node_put (np);break ; + } }return ret;
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi +6 -0
@@ -107,6 +107,12 @@ secmon_reserved: secmon@5000000 { no-map; }; + /* 32 MiB reserved for ARM Trusted Firmware (BL32) */ + secmon_reserved_bl32: secmon@5300000 { + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + linux,cma { compatible = "shared-dma-pool"; reusable;
arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts +0 -8
@@ -157,14 +157,6 @@ vddio_ao1v8: regulator-vddio_ao1v8 { regulator-always-on; }; - reserved-memory { - /* TEE Reserved Memory */ - bl32_reserved: bl32@5000000 { - reg = <0x0 0x05300000 0x0 0x2000000>; - no-map; - }; - }; - sdio_pwrseq: sdio-pwrseq { compatible = "mmc-pwrseq-simple"; reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
arch/arm64/boot/dts/amlogic/meson-gx.dtsi +6 -0
@@ -49,6 +49,12 @@ secmon_reserved_alt: secmon@5000000 { no-map; }; + /* 32 MiB reserved for ARM Trusted Firmware (BL32) */ + secmon_reserved_bl32: secmon@5300000 { + reg = <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + linux,cma { compatible = "shared-dma-pool"; reusable;
arch/arm64/boot/dts/amlogic/meson-sm1-sei610.dts +0 -8
@@ -203,14 +203,6 @@ vddio_ao1v8: regulator-vddio_ao1v8 { regulator-always-on; }; - reserved-memory { - /* TEE Reserved Memory */ - bl32_reserved: bl32@5000000 { - reg = <0x0 0x05300000 0x0 0x2000000>; - no-map; - }; - }; - sdio_pwrseq: sdio-pwrseq { compatible = "mmc-pwrseq-simple"; reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
arch/arm64/include/asm/el2_setup.h +1 -1
@@ -106,7 +106,7 @@ msr_s SYS_ICC_SRE_EL2, x0 isb // Make sure SRE is now set mrs_s x0, SYS_ICC_SRE_EL2 // Read SRE back, - tbz x0, #0, 1f // and check that it sticks + tbz x0, #0, .Lskip_gicv3_\@ // and check that it sticks msr_s SYS_ICH_HCR_EL2, xzr // Reset ICC_HCR_EL2 to defaults .Lskip_gicv3_\@: .endm
arch/parisc/include/asm/bitops.h +8 -0
@@ -12,6 +12,14 @@#include <asm/barrier.h> #include <linux/atomic.h> +/* compiler build environment sanity checks: */ +#if !defined(CONFIG_64BIT ) && defined(__LP64__) +#error "Please use 'ARCH=parisc' to build the 32-bit kernel." +#endif +#if defined(CONFIG_64BIT ) && !defined(__LP64__) +#error "Please use 'ARCH=parisc64' to build the 64-bit kernel." +#endif +/* See http://marc.theaimsgroup.com/?t=108826637900003 for discussion * on use of volatile and __*_bit() (set/clear/change): * *_bit() want use of volatile.
arch/parisc/lib/iomap.c +18 -0
@@ -346,6 +346,16 @@ u64 ioread64be(const void __iomem *addr)return *((u64 *)addr); } +u64 ioread64_lo_hi (const void __iomem *addr) +{ +u32 low, high; + + low =ioread32 (addr); + high =ioread32 (addr +sizeof (u32)); + +return low + ((u64 )high <<32 ); +} +u64 ioread64_hi_lo (const void __iomem *addr) {u32 low, high;
@@ -419,6 +429,12 @@ void iowrite64be(u64 datum, void __iomem *addr) } } +void iowrite64_lo_hi (u64 val,void __iomem *addr) +{ +iowrite32 (val, addr); +iowrite32 (val >>32 , addr +sizeof (u32)); +} +void iowrite64_hi_lo (u64 val,void __iomem *addr) {iowrite32 (val >>32 , addr +sizeof (u32));
@@ -530,6 +546,7 @@ EXPORT_SYMBOL(ioread32);EXPORT_SYMBOL (ioread32be);EXPORT_SYMBOL (ioread64);EXPORT_SYMBOL (ioread64be); +EXPORT_SYMBOL (ioread64_lo_hi);EXPORT_SYMBOL (ioread64_hi_lo);EXPORT_SYMBOL (iowrite8);EXPORT_SYMBOL (iowrite16);
@@ -538,6 +555,7 @@ EXPORT_SYMBOL(iowrite32);EXPORT_SYMBOL (iowrite32be);EXPORT_SYMBOL (iowrite64);EXPORT_SYMBOL (iowrite64be); +EXPORT_SYMBOL (iowrite64_lo_hi);EXPORT_SYMBOL (iowrite64_hi_lo);EXPORT_SYMBOL (ioread8_rep);EXPORT_SYMBOL (ioread16_rep);
arch/parisc/mm/init.c +4 -5
@@ -337,9 +337,9 @@ static void __init setup_bootmem(void)static bool kernel_set_to_readonly; -static void __init map_pages (unsigned long start_vaddr, -unsigned long start_paddr,unsigned long size, -pgprot_t pgprot,int force) +static void __ref map_pages (unsigned long start_vaddr, +unsigned long start_paddr,unsigned long size, +pgprot_t pgprot,int force) {pmd_t *pmd;pte_t *pg_table;
@@ -449,7 +449,7 @@ void __init set_kernel_text_rw(int enable_read_write)flush_tlb_all (); } -void __ref free_initmem (void ) +void free_initmem (void ) {unsigned long init_begin = (unsigned long )__init_begin;unsigned long init_end = (unsigned long )__init_end;
@@ -463,7 +463,6 @@ void __ref free_initmem(void)/* The init text pages are marked R-X. We have to * flush the icache and mark them RW- * -* This is tricky, because map_pages is in the init section. * Do a dummy remap of the data section first (the data * section is already PAGE_KERNEL) to pull in the TLB entries * for map_kernel */
arch/powerpc/kernel/head_book3s_32.S +2 -2
@@ -421,14 +421,14 @@ InstructionTLBMiss: */ /* Get PTE (linux-style) and check access */ mfspr r3,SPRN_IMISS -#ifdef CONFIG_MODULES +#if defined(CONFIG_MODULES) || defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) lis r1, TASK_SIZE@h /* check if kernel address */ cmplw 0,r1,r3 #endif mfspr r2, SPRN_SDR1 li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC | _PAGE_USER rlwinm r2, r2, 28, 0xfffff000 -#ifdef CONFIG_MODULES +#if defined(CONFIG_MODULES) || defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) bgt- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC
arch/powerpc/lib/sstep.c +2 -0
@@ -3264,12 +3264,14 @@ void emulate_update_regs(struct pt_regs *regs, struct instruction_op *op)case BARRIER_EIEIO :eieio ();break ; +#ifdef CONFIG_PPC64 case BARRIER_LWSYNC : asmvolatile ("lwsync" : : :"memory" );break ;case BARRIER_PTESYNC : asmvolatile ("ptesync" : : :"memory" );break ; +#endif }break ;
arch/x86/include/asm/bug.h +11 -9
@@ -22,7 +22,7 @@#ifdef CONFIG_DEBUG_BUGVERBOSE -#define _BUG_FLAGS (ins, flags) \ +#define _BUG_FLAGS (ins, flags, extra) \ do { \ asm_inline volatile("1:\t" ins "\n" \ ".pushsection __bug_table,\"aw\"\n" \
@@ -31,7 +31,8 @@ do { \"\t.word %c1" "\t# bug_entry::line\n" \"\t.word %c2" "\t# bug_entry::flags\n" \"\t.org 2b+%c3\n" \ -".popsection" \ +".popsection\n" \ + extra \ : : "i" (__FILE__), "i" (__LINE__), \"i" (flags), \ "i" (sizeof(struct bug_entry))); \
@@ -39,14 +40,15 @@ do { \#else /* !CONFIG_DEBUG_BUGVERBOSE */ -#define _BUG_FLAGS (ins, flags) \ +#define _BUG_FLAGS (ins, flags, extra) \ do { \ asm_inline volatile("1:\t" ins "\n" \ ".pushsection __bug_table,\"aw\"\n" \ "2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n" \ "\t.word %c0" "\t# bug_entry::flags\n" \ "\t.org 2b+%c1\n" \ - ".popsection" \ + ".popsection\n" \ + extra \ : : "i" (flags), \ "i" (sizeof(struct bug_entry))); \ } while (0)
@@ -55,7 +57,7 @@ do { \#else -#define _BUG_FLAGS (ins, flags) asm volatile(ins) +#define _BUG_FLAGS (ins, flags, extra) asm volatile(ins)#endif /* CONFIG_GENERIC_BUG */
@@ -63,8 +65,8 @@ do { \#define BUG () \ do { \ instrumentation_begin(); \ - _BUG_FLAGS(ASM_UD2, 0); \ - unreachable(); \ + _BUG_FLAGS(ASM_UD2, 0, ""); \ + __builtin_unreachable(); \ } while (0)/*
@@ -75,9 +77,9 @@ do { \*/ #define __WARN_FLAGS (flags) \ do { \ + __auto_type f = BUGFLAG_WARNING|(flags); \ instrumentation_begin(); \ - _BUG_FLAGS(ASM_UD2, BUGFLAG_WARNING|(flags)); \ - annotate_reachable(); \ + _BUG_FLAGS(ASM_UD2, f, ASM_REACHABLE); \ instrumentation_end(); \ } while (0)
arch/x86/kernel/fpu/regset.c +4 -5
@@ -91,11 +91,9 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset, const void *kbuf, const void __user *ubuf) { struct fpu *fpu = &target->thread.fpu; -struct user32_fxsr_struct newstate; +struct fxregs_state newstate;int ret; -BUILD_BUG_ON (sizeof (newstate) !=sizeof (struct fxregs_state )); -if (!cpu_feature_enabled (X86_FEATURE_FXSR ))return -ENODEV ;
@@ -116,9 +114,10 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset,/* Copy the state */ memcpy (&fpu->fpstate->regs.fxsave, &newstate,sizeof (newstate)); -/* Clear xmm8..15 */ +/* Clear xmm8..15 for 32-bit callers */ BUILD_BUG_ON (sizeof (fpu->__fpstate.regs.fxsave.xmm_space) !=16 *16 ); -memset (&fpu->fpstate->regs.fxsave.xmm_space[8 ],0 ,8 *16 ); +if (in_ia32_syscall ()) +memset (&fpu->fpstate->regs.fxsave.xmm_space[8 *4 ],0 ,8 *16 );/* Mark FP and SSE as in use when XSAVE is enabled */ if (use_xsave ())
arch/x86/kernel/ptrace.c +2 -2
@@ -1224,7 +1224,7 @@ static struct user_regset x86_64_regsets[] __ro_after_init = { }, [REGSET_FP] = { .core_note_type = NT_PRFPREG, - .n = sizeof(struct user_i387_struct) / sizeof(long), + .n = sizeof(struct fxregs_state) / sizeof(long), .size = sizeof(long), .align = sizeof(long), .active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set },
@@ -1271,7 +1271,7 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { }, [REGSET_XFP] = { .core_note_type = NT_PRXFPREG, - .n = sizeof(struct user32_fxsr_struct) / sizeof(u32), + .n = sizeof(struct fxregs_state) / sizeof(u32), .size = sizeof(u32), .align = sizeof(u32), .active = regset_xregset_fpregs_active, .regset_get = xfpregs_get, .set = xfpregs_set },
arch/x86/kvm/pmu.c +5 -10
@@ -95,7 +95,7 @@ static void kvm_perf_overflow_intr(struct perf_event *perf_event, }static void pmc_reprogram_counter (struct kvm_pmc *pmc,u32 type, -unsigned config,bool exclude_user, +u64 config,bool exclude_user,bool exclude_kernel,bool intr,bool in_tx,bool in_tx_cp) {
@@ -173,8 +173,8 @@ static bool pmc_resume_counter(struct kvm_pmc *pmc)void reprogram_gp_counter (struct kvm_pmc *pmc,u64 eventsel) { -unsigned config, type =PERF_TYPE_RAW ; -u8 event_select, unit_mask; +u64 config; +u32 type =PERF_TYPE_RAW ;struct kvm *kvm = pmc->vcpu->kvm;struct kvm_pmu_event_filter *filter;int i;
@@ -206,23 +206,18 @@ void reprogram_gp_counter(struct kvm_pmc *pmc, u64 eventsel)if (!allow_event)return ; - event_select = eventsel &ARCH_PERFMON_EVENTSEL_EVENT ; - unit_mask = (eventsel &ARCH_PERFMON_EVENTSEL_UMASK ) >>8 ; -if (!(eventsel & (ARCH_PERFMON_EVENTSEL_EDGE |ARCH_PERFMON_EVENTSEL_INV |ARCH_PERFMON_EVENTSEL_CMASK |HSW_IN_TX |HSW_IN_TX_CHECKPOINTED ))) { - config = kvm_x86_ops.pmu_ops->find_arch_event (pmc_to_pmu (pmc), - event_select, - unit_mask); + config = kvm_x86_ops.pmu_ops->pmc_perf_hw_id (pmc);if (config !=PERF_COUNT_HW_MAX ) type =PERF_TYPE_HARDWARE ; }if (type ==PERF_TYPE_RAW ) - config = eventsel &X86_RAW_EVENT_MASK ; + config = eventsel &AMD64_RAW_EVENT_MASK ;if (pmc->current_config == eventsel &&pmc_resume_counter (pmc))return ;
arch/x86/kvm/pmu.h +1 -2
@@ -24,8 +24,7 @@ struct kvm_event_hw_type_mapping { };struct kvm_pmu_ops { -unsigned (*find_arch_event)(struct kvm_pmu *pmu,u8 event_select, -u8 unit_mask); +unsigned int (*pmc_perf_hw_id)(struct kvm_pmc *pmc);unsigned (*find_fixed_event)(int idx);bool (*pmc_is_enabled)(struct kvm_pmc *pmc);struct kvm_pmc *(*pmc_idx_to_pmc)(struct kvm_pmu *pmu,int pmc_idx);
arch/x86/kvm/svm/avic.c +0 -2
@@ -342,8 +342,6 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)avic_kick_target_vcpus (vcpu->kvm, apic, icrl, icrh);break ;case AVIC_IPI_FAILURE_INVALID_TARGET : -WARN_ONCE (1 ,"Invalid IPI target: index=%u, vcpu=%d, icr=%#0x:%#0x\n" , - index, vcpu->vcpu_id, icrh, icrl);break ;case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE :WARN_ONCE (1 ,"Invalid backing page\n" );
arch/x86/kvm/svm/nested.c +14 -12
@@ -1389,18 +1389,6 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu, !nested_vmcb_valid_sregs(vcpu, save)) goto out_free; -/* -* While the nested guest CR3 is already checked and set by -* KVM_SET_SREGS, it was set when nested state was yet loaded, -* thus MMU might not be initialized correctly. -* Set it again to fix this. -*/ - - ret =nested_svm_load_cr3 (&svm->vcpu, vcpu->arch.cr3, -nested_npt_enabled (svm), false); -if (WARN_ON_ONCE (ret)) - goto out_free; -/* * All checks done, we can enter guest mode. Userspace provides
@@ -1426,6 +1414,20 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,svm_switch_vmcb (svm, &svm->nested.vmcb02);nested_vmcb02_prepare_control (svm); + +/* +* While the nested guest CR3 is already checked and set by +* KVM_SET_SREGS, it was set when nested state was yet loaded, +* thus MMU might not be initialized correctly. +* Set it again to fix this. +*/ + + ret =nested_svm_load_cr3 (&svm->vcpu, vcpu->arch.cr3, +nested_npt_enabled (svm), false); +if (WARN_ON_ONCE (ret)) + goto out_free; + +kvm_make_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu); ret =0 ; out_free:
arch/x86/kvm/svm/pmu.c +4 -4
@@ -134,10 +134,10 @@ static inline struct kvm_pmc *get_gp_pmc_amd(struct kvm_pmu *pmu, u32 msr,return &pmu->gp_counters[msr_to_index (msr)]; } -static unsigned amd_find_arch_event (struct kvm_pmu *pmu, -u8 event_select, -u8 unit_mask) +static unsigned int amd_pmc_perf_hw_id (struct kvm_pmc *pmc) { +u8 event_select = pmc->eventsel &ARCH_PERFMON_EVENTSEL_EVENT ; +u8 unit_mask = (pmc->eventsel &ARCH_PERFMON_EVENTSEL_UMASK ) >>8 ;int i;for (i =0 ; i <ARRAY_SIZE (amd_event_mapping); i++)
@@ -319,7 +319,7 @@ static void amd_pmu_reset(struct kvm_vcpu *vcpu) }struct kvm_pmu_ops amd_pmu_ops = { - .find_arch_event = amd_find_arch_event, + .pmc_perf_hw_id = amd_pmc_perf_hw_id, .find_fixed_event = amd_find_fixed_event, .pmc_is_enabled = amd_pmc_is_enabled, .pmc_idx_to_pmc = amd_pmc_idx_to_pmc,
arch/x86/kvm/svm/svm.c +17 -2
@@ -1795,6 +1795,7 @@ void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) {struct vcpu_svm *svm =to_svm (vcpu);u64 hcr0 = cr0; +bool old_paging =is_paging (vcpu);#ifdef CONFIG_X86_64 if (vcpu->arch.efer &EFER_LME && !vcpu->arch.guest_state_protected) {
@@ -1811,8 +1812,11 @@ void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)#endif vcpu->arch.cr0 = cr0; -if (!npt_enabled) +if (!npt_enabled) { hcr0 |=X86_CR0_PG |X86_CR0_WP ; +if (old_paging !=is_paging (vcpu)) +svm_set_cr4 (vcpu,kvm_read_cr4 (vcpu)); + }/* * re-enable caching here because the QEMU bios
@@ -1856,8 +1860,12 @@ void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)svm_flush_tlb (vcpu); vcpu->arch.cr4 = cr4; -if (!npt_enabled) +if (!npt_enabled) { cr4 |=X86_CR4_PAE ; + +if (!is_paging (vcpu)) + cr4 &= ~(X86_CR4_SMEP |X86_CR4_SMAP |X86_CR4_PKE ); + } cr4 |= host_cr4_mce;to_svm (vcpu)->vmcb->save.cr4 = cr4;vmcb_mark_dirty (to_svm (vcpu)->vmcb,VMCB_CR );
@@ -4441,10 +4449,17 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)* Enter the nested guest now */ +vmcb_mark_all_dirty (svm->vmcb01.ptr); + vmcb12 = map.hva;nested_load_control_from_vmcb12 (svm, &vmcb12->control); ret =enter_svm_guest_mode (vcpu, vmcb12_gpa, vmcb12, false); +if (ret) + goto unmap_save; + + svm->nested.nested_run_pending =1 ; + unmap_save:kvm_vcpu_unmap (vcpu, &map_save, true); unmap_map:
arch/x86/kvm/vmx/pmu_intel.c +5 -4
@@ -68,10 +68,11 @@ static void global_ctrl_changed(struct kvm_pmu *pmu, u64 data)reprogram_counter (pmu, bit); } -static unsigned intel_find_arch_event (struct kvm_pmu *pmu, -u8 event_select, -u8 unit_mask) +static unsigned int intel_pmc_perf_hw_id (struct kvm_pmc *pmc) { +struct kvm_pmu *pmu =pmc_to_pmu (pmc); +u8 event_select = pmc->eventsel &ARCH_PERFMON_EVENTSEL_EVENT ; +u8 unit_mask = (pmc->eventsel &ARCH_PERFMON_EVENTSEL_UMASK ) >>8 ;int i;for (i =0 ; i <ARRAY_SIZE (intel_arch_events); i++)
@@ -703,7 +704,7 @@ static void intel_pmu_cleanup(struct kvm_vcpu *vcpu) }struct kvm_pmu_ops intel_pmu_ops = { - .find_arch_event = intel_find_arch_event, + .pmc_perf_hw_id = intel_pmc_perf_hw_id, .find_fixed_event = intel_find_fixed_event, .pmc_is_enabled = intel_pmc_is_enabled, .pmc_idx_to_pmc = intel_pmc_idx_to_pmc,
arch/x86/kvm/vmx/vmx.c +1 -0
@@ -7534,6 +7534,7 @@ static int vmx_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)if (ret)return ret; + vmx->nested.nested_run_pending =1 ; vmx->nested.smm.guest_mode = false; }return 0 ;
arch/x86/kvm/xen.c +67 -30
162 lines not on this page · raw message
arch/x86/xen/enlighten_pv.c +0 -4
@@ -1341,10 +1341,6 @@ asmlinkage __visible void __init xen_start_kernel(void)xen_acpi_sleep_register (); -/* Avoid searching for BIOS MP tables */ - x86_init.mpparse.find_smp_config = x86_init_noop; - x86_init.mpparse.get_smp_config = x86_init_uint_noop; -xen_boot_params_init_edd ();#ifdef CONFIG_ACPI
arch/x86/xen/smp_pv.c +6 -20
@@ -148,28 +148,12 @@ int xen_smp_intr_init_pv(unsigned int cpu)return rc; } -static void __init xen_fill_possible_map (void ) -{ -int i, rc; - -if (xen_initial_domain ()) -return ; - -for (i =0 ; i < nr_cpu_ids; i++) { - rc =HYPERVISOR_vcpu_op (VCPUOP_is_up, i,NULL ); -if (rc >=0 ) { - num_processors++; -set_cpu_possible (i, true); - } - } -} - -static void __init xen_filter_cpu_maps (void ) +static void __init _get_smp_config (unsigned int early) {int i, rc;unsigned int subtract =0 ; -if (!xen_initial_domain ()) +if (early)return ; num_processors =0 ;
@@ -210,7 +194,6 @@ static void __init xen_pv_smp_prepare_boot_cpu(void)* sure the old memory can be recycled. */ make_lowmem_page_readwrite (xen_initial_gdt); -xen_filter_cpu_maps ();xen_setup_vcpu_info_placement ();/*
@@ -476,5 +459,8 @@ static const struct smp_ops xen_smp_ops __initconst = {void __init xen_smp_init (void ) { smp_ops = xen_smp_ops; -xen_fill_possible_map (); + +/* Avoid searching for BIOS MP tables */ + x86_init.mpparse.find_smp_config = x86_init_noop; + x86_init.mpparse.get_smp_config = _get_smp_config; }
block/bfq-iosched.c +2 -0
@@ -6878,6 +6878,8 @@ static void bfq_exit_queue(struct elevator_queue *e)spin_unlock_irq (&bfqd->lock);#endif +wbt_enable_default (bfqd->queue); +kfree (bfqd); }
block/blk-core.c +2 -8
@@ -324,13 +324,6 @@ void blk_queue_start_drain(struct request_queue *q)wake_up_all (&q->mq_freeze_wq); } -void blk_set_queue_dying (struct request_queue *q) -{ -blk_queue_flag_set (QUEUE_FLAG_DYING , q); -blk_queue_start_drain (q); -} -EXPORT_SYMBOL_GPL (blk_set_queue_dying); -/** * blk_cleanup_queue - shutdown a request queue * @q: request queue to shutdown
@@ -348,7 +341,8 @@ void blk_cleanup_queue(struct request_queue *q)WARN_ON_ONCE (blk_queue_registered (q));/* mark @q DYING, no new request or merges will be allowed afterwards */ -blk_set_queue_dying (q); +blk_queue_flag_set (QUEUE_FLAG_DYING , q); +blk_queue_start_drain (q);blk_queue_flag_set (QUEUE_FLAG_NOMERGES , q);blk_queue_flag_set (QUEUE_FLAG_NOXMERGES , q);
block/elevator.c +0 -2
@@ -523,8 +523,6 @@ void elv_unregister_queue(struct request_queue *q)kobject_del (&e->kobj); e->registered =0 ; -/* Re-enable throttling in case elevator disabled it */ -wbt_enable_default (q); } }
block/genhd.c +14 -0
@@ -549,6 +549,20 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk, }EXPORT_SYMBOL (device_add_disk); +/** +* blk_mark_disk_dead - mark a disk as dead +* @disk: disk to mark as dead +* +* Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O +* to this disk. +*/ +void blk_mark_disk_dead (struct gendisk *disk) +{ +set_bit (GD_DEAD , &disk->state); +blk_queue_start_drain (disk->queue); +} +EXPORT_SYMBOL_GPL (blk_mark_disk_dead); +/** * del_gendisk - remove the gendisk * @disk: the struct gendisk to remove
crypto/af_alg.c +0 -3
@@ -25,12 +25,9 @@ struct alg_type_list {struct list_head list; }; -static atomic_long_t alg_memory_allocated; -static struct proto alg_proto = { .name ="ALG" , .owner =THIS_MODULE , - .memory_allocated = &alg_memory_allocated, .obj_size =sizeof (struct alg_sock ), };
drivers/acpi/processor_idle.c +5 -0
@@ -95,6 +95,11 @@ static const struct dmi_system_id processor_power_dmi_table[] = { DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), DMI_MATCH(DMI_PRODUCT_NAME,"L8400B series Notebook PC")}, (void *)1}, + /* T40 can not handle C3 idle state */ + { set_max_cstate, "IBM ThinkPad T40", { + DMI_MATCH(DMI_SYS_VENDOR, "IBM"), + DMI_MATCH(DMI_PRODUCT_NAME, "23737CU")}, + (void *)2}, {}, };
drivers/acpi/x86/s2idle.c +4 -8
@@ -424,15 +424,11 @@ static int lps0_device_attach(struct acpi_device *adev, mem_sleep_current =PM_SUSPEND_TO_IDLE ;/* -* Some Intel based LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U don't -* use intel-hid or intel-vbtn but require the EC GPE to be enabled while -* suspended for certain wakeup devices to work, so mark it as wakeup-capable. -* -* Only enable on !AMD as enabling this universally causes problems for a number -* of AMD based systems. +* Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the +* EC GPE to be enabled while suspended for certain wakeup devices to +* work, so mark it as wakeup-capable. */ -if (!acpi_s2idle_vendor_amd ()) -acpi_ec_mark_gpe_for_wake (); +acpi_ec_mark_gpe_for_wake ();return 0 ; }
drivers/ata/libata-core.c +1 -0
@@ -4079,6 +4079,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {/* devices that don't properly handle TRIM commands */ { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, }, + { "M88V29*", NULL, ATA_HORKAGE_NOTRIM, },/* * As defined, the DRAT (Deterministic Read After Trim) and RZAT
drivers/block/mtip32xx/mtip32xx.c +1 -1
@@ -4113,7 +4113,7 @@ static void mtip_pci_remove(struct pci_dev *pdev) "Completion workers still active!\n"); } -blk_set_queue_dying (dd->queue); +blk_mark_disk_dead (dd->disk);set_bit (MTIP_DDF_REMOVE_PENDING_BIT , &dd->dd_flag);/* Clean up the block layer. */
drivers/block/rbd.c +1 -1
@@ -7186,7 +7186,7 @@ static ssize_t do_rbd_remove(struct bus_type *bus,* IO to complete/fail. */ blk_mq_freeze_queue (rbd_dev->disk->queue); -blk_set_queue_dying (rbd_dev->disk->queue); +blk_mark_disk_dead (rbd_dev->disk); }del_gendisk (rbd_dev->disk);
drivers/block/xen-blkfront.c +1 -1
@@ -2129,7 +2129,7 @@ static void blkfront_closing(struct blkfront_info *info)/* No more blkif_request(). */ blk_mq_stop_hw_queues (info->rq); -blk_set_queue_dying (info->rq); +blk_mark_disk_dead (info->gd);set_capacity (info->gd,0 );for_each_rinfo (info, rinfo, i) {
drivers/char/random.c +4 -1
@@ -1963,7 +1963,10 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)*/ if (!capable (CAP_SYS_ADMIN ))return -EPERM ; - input_pool.entropy_count =0 ; +if (xchg (&input_pool.entropy_count,0 ) && random_write_wakeup_bits) { +wake_up_interruptible (&random_write_wait); +kill_fasync (&fasync,SIGIO ,POLL_OUT ); + }return 0 ;case RNDRESEEDCRNG :if (!capable (CAP_SYS_ADMIN ))
drivers/dma/ptdma/ptdma-dev.c +9 -8
@@ -207,7 +207,7 @@ int pt_core_init(struct pt_device *pt)if (!cmd_q->qbase) {dev_err (dev,"unable to allocate command queue\n" ); ret = -ENOMEM ; - goto e_dma_alloc; + goto e_destroy_pool; } cmd_q->qidx =0 ;
@@ -229,8 +229,10 @@ int pt_core_init(struct pt_device *pt)/* Request an irq */ ret =request_irq (pt->pt_irq, pt_core_irq_handler,0 ,dev_name (pt->dev), pt); -if (ret) - goto e_pool; +if (ret) { +dev_err (dev,"unable to allocate an IRQ\n" ); + goto e_free_dma; + }/* Update the device registers with queue information. */ cmd_q->qcontrol &= ~CMD_Q_SIZE ;
@@ -250,21 +252,20 @@ int pt_core_init(struct pt_device *pt)/* Register the DMA engine support */ ret =pt_dmaengine_register (pt);if (ret) - goto e_dmaengine; + goto e_free_irq;/* Set up debugfs entries */ ptdma_debugfs_setup (pt);return 0 ; -e_dmaengine: +e_free_irq:free_irq (pt->pt_irq, pt); -e_dma_alloc: +e_free_dma:dma_free_coherent (dev, cmd_q->qsize, cmd_q->qbase, cmd_q->qbase_dma); -e_pool: -dev_err (dev,"unable to allocate an IRQ\n" ); +e_destroy_pool:dma_pool_destroy (pt->cmd_q.dma_pool);return ret;
drivers/dma/sh/rcar-dmac.c +7 -2
@@ -1868,8 +1868,13 @@ static int rcar_dmac_probe(struct platform_device *pdev) dmac->dev = &pdev->dev;platform_set_drvdata (pdev, dmac); -dma_set_max_seg_size (dmac->dev,RCAR_DMATCR_MASK ); -dma_set_mask_and_coherent (dmac->dev,DMA_BIT_MASK (40 )); + ret =dma_set_max_seg_size (dmac->dev,RCAR_DMATCR_MASK ); +if (ret) +return ret; + + ret =dma_set_mask_and_coherent (dmac->dev,DMA_BIT_MASK (40 )); +if (ret) +return ret; ret =rcar_dmac_parse_of (&pdev->dev, dmac);if (ret <0 )
drivers/dma/stm32-dmamux.c +3 -1
@@ -292,10 +292,12 @@ static int stm32_dmamux_probe(struct platform_device *pdev) ret =of_dma_router_register (node, stm32_dmamux_route_allocate, &stm32_dmamux->dmarouter);if (ret) - goto err_clk; + goto pm_disable;return 0 ; +pm_disable: +pm_runtime_disable (&pdev->dev); err_clk:clk_disable_unprepare (stm32_dmamux->clk);
drivers/edac/edac_mc.c +1 -1
@@ -213,7 +213,7 @@ void *edac_align_ptr(void **p, unsigned int size, int n_elems)else return (char *)ptr; - r = (unsigned long )p % align; + r = (unsigned long )ptr % align;if (r ==0 )return (char *)ptr;
drivers/gpu/drm/amd/amdgpu/amdgpu.h +8 -2
@@ -1406,12 +1406,10 @@ int amdgpu_acpi_smart_shift_update(struct drm_device *dev, enum amdgpu_ss ss_staint amdgpu_acpi_pcie_notify_device_ready (struct amdgpu_device *adev);void amdgpu_acpi_get_backlight_caps (struct amdgpu_dm_backlight_caps *caps); -bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev);void amdgpu_acpi_detect (void );#else static inline int amdgpu_acpi_init (struct amdgpu_device *adev) {return 0 ; }static inline void amdgpu_acpi_fini (struct amdgpu_device *adev) { } -static inline bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev) {return false; }static inline void amdgpu_acpi_detect (void ) { }static inline bool amdgpu_acpi_is_power_shift_control_supported (void ) {return false; } static inline int amdgpu_acpi_power_shift_control(struct amdgpu_device *adev,
@@ -1420,6 +1418,14 @@ static inline int amdgpu_acpi_smart_shift_update(struct drm_device *dev, enum amdgpu_ss ss_state) { return 0; }#endif +#if defined(CONFIG_ACPI ) && defined(CONFIG_SUSPEND ) +bool amdgpu_acpi_is_s3_active (struct amdgpu_device *adev); +bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev); +#else +static inline bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev) {return false; } +static inline bool amdgpu_acpi_is_s3_active (struct amdgpu_device *adev) {return false; } +#endif +int amdgpu_cs_find_mapping (struct amdgpu_cs_parser *parser,uint64_t addr,struct amdgpu_bo **bo,struct amdgpu_bo_va_mapping **mapping);
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +32 -5
@@ -1031,6 +1031,20 @@ void amdgpu_acpi_detect(void) } } +#if IS_ENABLED (CONFIG_SUSPEND ) +/** +* amdgpu_acpi_is_s3_active +* +* @adev: amdgpu_device_pointer +* +* returns true if supported, false if not. +*/ +bool amdgpu_acpi_is_s3_active (struct amdgpu_device *adev) +{ +return !(adev->flags &AMD_IS_APU ) || + (pm_suspend_target_state ==PM_SUSPEND_MEM ); +} +/** * amdgpu_acpi_is_s0ix_active *
@@ -1040,11 +1054,24 @@ void amdgpu_acpi_detect(void)*/ bool amdgpu_acpi_is_s0ix_active (struct amdgpu_device *adev) { -#if IS_ENABLED (CONFIG_AMD_PMC ) &&IS_ENABLED (CONFIG_SUSPEND ) -if (acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 ) { -if (adev->flags &AMD_IS_APU ) -return pm_suspend_target_state ==PM_SUSPEND_TO_IDLE ; +if (!(adev->flags &AMD_IS_APU ) || + (pm_suspend_target_state !=PM_SUSPEND_TO_IDLE )) +return false; + +if (!(acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 )) { +dev_warn_once (adev->dev, +"Power consumption will be higher as BIOS has not been configured for suspend-to-idle.\n" +"To use suspend-to-idle change the sleep mode in BIOS setup.\n" ); +return false; } -#endif + +#if !IS_ENABLED (CONFIG_AMD_PMC ) +dev_warn_once (adev->dev, +"Power consumption will be higher as the kernel has not been compiled with CONFIG_AMD_PMC.\n" );return false; +#else +return true; +#endif /* CONFIG_AMD_PMC */ } + +#endif /* CONFIG_SUSPEND */
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +8 -0
@@ -2236,6 +2236,7 @@ static void amdgpu_drv_delayed_reset_work_handler(struct work_struct *work)static int amdgpu_pmops_prepare (struct device *dev) {struct drm_device *drm_dev =dev_get_drvdata (dev); +struct amdgpu_device *adev =drm_to_adev (drm_dev);/* Return a positive number here so * DPM_FLAG_SMART_SUSPEND works properly
@@ -2243,6 +2244,13 @@ static int amdgpu_pmops_prepare(struct device *dev)if (amdgpu_device_supports_boco (drm_dev))return pm_runtime_suspended (dev); +/* if we will not support s3 or s2i for the device +* then skip suspend +*/ +if (!amdgpu_acpi_is_s0ix_active (adev) && + !amdgpu_acpi_is_s3_active (adev)) +return 1 ; +return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 -1
@@ -1913,7 +1913,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,unsigned i;int r; -if (direct_submit && !ring->sched.ready) { +if (!direct_submit && !ring->sched.ready) {DRM_ERROR ("Trying to move memory with ring turned off.\n" );return -EINVAL ; }
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c +6 -1
@@ -543,7 +543,9 @@ static void gfxhub_v2_1_utcl2_harvest(struct amdgpu_device *adev) adev->gfx.config.max_sh_per_se * adev->gfx.config.max_shader_engines); -if (adev->ip_versions[GC_HWIP ][0 ] ==IP_VERSION (10 ,3 ,3 )) { +switch (adev->ip_versions[GC_HWIP ][0 ]) { +case IP_VERSION (10 ,3 ,1 ): +case IP_VERSION (10 ,3 ,3 ):/* Get SA disabled bitmap from eFuse setting */ efuse_setting =RREG32_SOC15 (GC ,0 , mmCC_GC_SA_UNIT_DISABLE); efuse_setting &=CC_GC_SA_UNIT_DISABLE__SA_DISABLE_MASK ;
@@ -566,6 +568,9 @@ static void gfxhub_v2_1_utcl2_harvest(struct amdgpu_device *adev) disabled_sa = tmp;WREG32_SOC15 (GC ,0 , mmGCUTCL2_HARVEST_BYPASS_GROUPS_YELLOW_CARP, disabled_sa); +break ; +default : +break ; } }
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +8 -0
@@ -2057,6 +2057,10 @@ static int sdma_v4_0_suspend(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +/* SMU saves SDMA state for us */ +if (adev->in_s0ix) +return 0 ; +return sdma_v4_0_hw_fini (adev); }
@@ -2064,6 +2068,10 @@ static int sdma_v4_0_resume(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +/* SMU restores SDMA state for us */ +if (adev->in_s0ix) +return 0 ; +return sdma_v4_0_hw_init (adev); }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -1
@@ -3629,7 +3629,7 @@ static int dcn10_register_irq_handlers(struct amdgpu_device *adev)/* Use GRPH_PFLIP interrupt */ for (i =DCN_1_0__SRCID__HUBP0_FLIP_INTERRUPT ; - i <=DCN_1_0__SRCID__HUBP0_FLIP_INTERRUPT + adev->mode_info.num_crtc -1 ; + i <=DCN_1_0__SRCID__HUBP0_FLIP_INTERRUPT + dc->caps.max_otg_num -1 ; i++) { r =amdgpu_irq_add_id (adev,SOC15_IH_CLIENTID_DCE , i, &adev->pageflip_irq);if (r) {
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c +5 -1
@@ -120,7 +120,11 @@ int dcn31_smu_send_msg_with_param( result =dcn31_smu_wait_for_response (clk_mgr,10 ,200000 );if (result == VBIOSSMC_Result_Failed) { -ASSERT (0 ); +if (msg_id == VBIOSSMC_MSG_TransferTableDram2Smu && + param ==TABLE_WATERMARKS ) +DC_LOG_WARNING ("Watermarks table not configured properly by SMU" ); +else +ASSERT (0 );REG_WRITE (MP1_SMN_C2PMSG_91 , VBIOSSMC_Result_OK);return -1 ; }
drivers/gpu/drm/amd/display/dc/core/dc.c +2 -0
@@ -1237,6 +1237,8 @@ struct dc *dc_create(const struct dc_init_data *init_params) dc->caps.max_dp_protocol_version =DP_VERSION_1_4 ; + dc->caps.max_otg_num = dc->res_pool->res_cap->num_timing_generator; +if (dc->res_pool->dmcu !=NULL ) dc->versions.dmcu_version = dc->res_pool->dmcu->dmcu_version; }
drivers/gpu/drm/amd/display/dc/dc.h +1 -0
@@ -190,6 +190,7 @@ struct dc_caps {#endif bool vbios_lttpr_aware;bool vbios_lttpr_enable; +uint32_t max_otg_num; };struct dc_bug_wa {
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubbub.c +32 -29
236 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c +2 -7
@@ -282,14 +282,9 @@ static int yellow_carp_post_smu_init(struct smu_context *smu)static int yellow_carp_mode_reset (struct smu_context *smu,int type) { -int ret =0 , index =0 ; - - index =smu_cmn_to_asic_specific_index (smu,CMN2ASIC_MAPPING_MSG , - SMU_MSG_GfxDeviceDriverReset); -if (index <0 ) -return index == -EACCES ?0 : index; +int ret =0 ; - ret =smu_cmn_send_smc_msg_with_param (smu, (uint16_t )index, type,NULL ); + ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_GfxDeviceDriverReset, type,NULL );if (ret)dev_err (smu->adev->dev,"Failed to mode reset!\n" );
drivers/gpu/drm/drm_atomic_uapi.c +8 -6
@@ -76,15 +76,17 @@ int drm_atomic_set_mode_for_crtc(struct drm_crtc_state *state, state->mode_blob =NULL ;if (mode) { +struct drm_property_blob *blob; +drm_mode_convert_to_umode (&umode, mode); - state->mode_blob = -drm_property_create_blob (state->crtc->dev, -sizeof (umode), - &umode); -if (IS_ERR (state->mode_blob)) -return PTR_ERR (state->mode_blob); + blob =drm_property_create_blob (crtc->dev, +sizeof (umode), &umode); +if (IS_ERR (blob)) +return PTR_ERR (blob);drm_mode_copy (&state->mode, mode); + + state->mode_blob = blob; state->enable = true; drm_dbg_atomic(crtc->dev, "Set [MODE:%s] for [CRTC:%d:%s] state %p\n",
drivers/gpu/drm/drm_gem_cma_helper.c +1 -0
@@ -518,6 +518,7 @@ int drm_gem_cma_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)*/ vma->vm_pgoff -=drm_vma_node_start (&obj->vma_node); vma->vm_flags &= ~VM_PFNMAP ; + vma->vm_flags |=VM_DONTEXPAND ; cma_obj =to_drm_gem_cma_obj (obj);
drivers/gpu/drm/i915/Kconfig +1 -0
@@ -101,6 +101,7 @@ config DRM_I915_USERPTR config DRM_I915_GVT bool "Enable Intel GVT-g graphics virtualization host support" depends on DRM_I915 + depends on X86 depends on 64BIT default n help
drivers/gpu/drm/i915/display/intel_opregion.c +15 -0
@@ -360,6 +360,21 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, port++; } +/* +* The port numbering and mapping here is bizarre. The now-obsolete +* swsci spec supports ports numbered [0..4]. Port E is handled as a +* special case, but port F and beyond are not. The functionality is +* supposed to be obsolete for new platforms. Just bail out if the port +* number is out of bounds after mapping. +*/ +if (port >4 ) { +drm_dbg_kms (&dev_priv->drm, +"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n" , + intel_encoder->base.base.id, intel_encoder->base.name, +port_name (intel_encoder->port), port); +return -EINVAL ; + } +if (!enable) parm |=4 <<8 ;
drivers/gpu/drm/i915/gem/i915_gem_ttm.c +2 -4
@@ -787,11 +787,9 @@ static void i915_ttm_adjust_lru(struct drm_i915_gem_object *obj)if (obj->mm.madv !=I915_MADV_WILLNEED ) { bo->priority =I915_TTM_PRIO_PURGE ; }else if (!i915_gem_object_has_pages (obj)) { -if (bo->priority <I915_TTM_PRIO_HAS_PAGES ) - bo->priority =I915_TTM_PRIO_HAS_PAGES ; + bo->priority =I915_TTM_PRIO_NO_PAGES ; }else { -if (bo->priority >I915_TTM_PRIO_NO_PAGES ) - bo->priority =I915_TTM_PRIO_NO_PAGES ; + bo->priority =I915_TTM_PRIO_HAS_PAGES ; }ttm_bo_move_to_lru_tail (bo, bo->resource,NULL );
drivers/gpu/drm/i915/intel_pm.c +2 -2
@@ -4843,7 +4843,7 @@ static bool check_mbus_joined(u8 active_pipes, {int i; -for (i =0 ; i < dbuf_slices[i].active_pipes; i++) { +for (i =0 ; dbuf_slices[i].active_pipes !=0 ; i++) {if (dbuf_slices[i].active_pipes == active_pipes)return dbuf_slices[i].join_mbus; }
@@ -4860,7 +4860,7 @@ static u8 compute_dbuf_slices(enum pipe pipe, u8 active_pipes, bool join_mbus, {int i; -for (i =0 ; i < dbuf_slices[i].active_pipes; i++) { +for (i =0 ; dbuf_slices[i].active_pipes !=0 ; i++) {if (dbuf_slices[i].active_pipes == active_pipes && dbuf_slices[i].join_mbus == join_mbus)return dbuf_slices[i].dbuf_mask[pipe];
drivers/gpu/drm/mediatek/mtk_dsi.c +84 -83
216 lines not on this page · raw message
drivers/gpu/drm/nouveau/nvkm/falcon/base.c +6 -2
@@ -117,8 +117,12 @@ nvkm_falcon_disable(struct nvkm_falcon *falcon)int nvkm_falcon_reset (struct nvkm_falcon *falcon) { -nvkm_falcon_disable (falcon); -return nvkm_falcon_enable (falcon); +if (!falcon->func->reset) { +nvkm_falcon_disable (falcon); +return nvkm_falcon_enable (falcon); + } + +return falcon->func->reset (falcon); }int
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c +30 -1
@@ -23,9 +23,38 @@*/ #include "priv.h" +static int +gm200_pmu_flcn_reset (struct nvkm_falcon *falcon) +{ +struct nvkm_pmu *pmu =container_of (falcon,typeof (*pmu), falcon); + +nvkm_falcon_wr32 (falcon,0x014 ,0x0000ffff ); + pmu->func->reset (pmu); +return nvkm_falcon_enable (falcon); +} + +const struct nvkm_falcon_func +gm200_pmu_flcn = { + .debug =0xc08 , + .fbif =0xe00 , + .load_imem = nvkm_falcon_v1_load_imem, + .load_dmem = nvkm_falcon_v1_load_dmem, + .read_dmem = nvkm_falcon_v1_read_dmem, + .bind_context = nvkm_falcon_v1_bind_context, + .wait_for_halt = nvkm_falcon_v1_wait_for_halt, + .clear_interrupt = nvkm_falcon_v1_clear_interrupt, + .set_start_addr = nvkm_falcon_v1_set_start_addr, + .start = nvkm_falcon_v1_start, + .enable = nvkm_falcon_v1_enable, + .disable = nvkm_falcon_v1_disable, + .reset = gm200_pmu_flcn_reset, + .cmdq = {0x4a0 ,0x4b0 ,4 }, + .msgq = {0x4c8 ,0x4cc ,0 }, +}; +static const struct nvkm_pmu_func gm200_pmu = { - .flcn = >215_pmu_flcn, + .flcn = &gm200_pmu_flcn, .enabled = gf100_pmu_enabled, .reset = gf100_pmu_reset, };
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c +1 -1
@@ -211,7 +211,7 @@ gm20b_pmu_recv(struct nvkm_pmu *pmu)static const struct nvkm_pmu_func gm20b_pmu = { - .flcn = >215_pmu_flcn, + .flcn = &gm200_pmu_flcn, .enabled = gf100_pmu_enabled, .intr = gt215_pmu_intr, .recv = gm20b_pmu_recv,
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c +1 -1
@@ -39,7 +39,7 @@ gp102_pmu_enabled(struct nvkm_pmu *pmu)static const struct nvkm_pmu_func gp102_pmu = { - .flcn = >215_pmu_flcn, + .flcn = &gm200_pmu_flcn, .enabled = gp102_pmu_enabled, .reset = gp102_pmu_reset, };
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c +1 -1
@@ -78,7 +78,7 @@ gp10b_pmu_acr = {static const struct nvkm_pmu_func gp10b_pmu = { - .flcn = >215_pmu_flcn, + .flcn = &gm200_pmu_flcn, .enabled = gf100_pmu_enabled, .intr = gt215_pmu_intr, .recv = gm20b_pmu_recv,
drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h +2 -0
@@ -44,6 +44,8 @@ void gf100_pmu_reset(struct nvkm_pmu *);void gk110_pmu_pgob (struct nvkm_pmu *,bool ); +extern const struct nvkm_falcon_func gm200_pmu_flcn; +void gm20b_pmu_acr_bld_patch (struct nvkm_acr *,u32 ,s64 );void gm20b_pmu_acr_bld_write (struct nvkm_acr *,u32 ,struct nvkm_acr_lsfw *);int gm20b_pmu_acr_boot (struct nvkm_falcon *);
drivers/gpu/drm/radeon/atombios_encoders.c +2 -1
@@ -198,7 +198,8 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,* so don't register a backlight device */ if ((rdev->pdev->subsystem_vendor ==PCI_VENDOR_ID_APPLE ) && - (rdev->pdev->device ==0x6741 )) + (rdev->pdev->device ==0x6741 ) && + !dmi_match (DMI_PRODUCT_NAME ,"iMac12,1" ))return ;if (!radeon_encoder->enc_priv)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +7 -7
@@ -529,13 +529,6 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,return ret; } - ret =clk_prepare_enable (hdmi->vpll_clk); -if (ret) { -DRM_DEV_ERROR (hdmi->dev,"Failed to enable HDMI vpll: %d\n" , - ret); -return ret; - } - hdmi->phy =devm_phy_optional_get (dev,"hdmi" );if (IS_ERR (hdmi->phy)) { ret =PTR_ERR (hdmi->phy);
@@ -544,6 +537,13 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,return ret; } + ret =clk_prepare_enable (hdmi->vpll_clk); +if (ret) { +DRM_DEV_ERROR (hdmi->dev,"Failed to enable HDMI vpll: %d\n" , + ret); +return ret; + } +drm_encoder_helper_add (encoder, &dw_hdmi_rockchip_encoder_helper_funcs);drm_simple_encoder_init (drm, encoder,DRM_MODE_ENCODER_TMDS );
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +2 -2
@@ -37,11 +37,11 @@ static int amd_sfh_wait_response_v2(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_ {union cmd_response cmd_resp; -/* Get response with status within a max of 800 ms timeout */ +/* Get response with status within a max of 1600 ms timeout */ if (!readl_poll_timeout (mp2->mmio +AMD_P2C_MSG (0 ), cmd_resp.resp, (cmd_resp.response_v2.response == sensor_sts && cmd_resp.response_v2.status ==0 && (sid ==0xff || - cmd_resp.response_v2.sensor_id == sid)),500 ,800000 )) + cmd_resp.response_v2.sensor_id == sid)),500 ,1600000 ))return cmd_resp.response_v2.response;return SENSOR_DISABLED ;
drivers/hid/amd-sfh-hid/amd_sfh_pcie.h +1 -1
@@ -49,7 +49,7 @@ union sfh_cmd_base { } s;struct {u32 cmd_id :4 ; -u32 intr_enable :1 ; +u32 intr_disable :1 ;u32 rsvd1 :3 ;u32 length :7 ;u32 mem_type :1 ;
drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c +3 -1
@@ -27,6 +27,7 @@#define HID_USAGE_SENSOR_STATE_READY_ENUM 0x02#define HID_USAGE_SENSOR_STATE_INITIALIZING_ENUM 0x05#define HID_USAGE_SENSOR_EVENT_DATA_UPDATED_ENUM 0x04 +#define ILLUMINANCE_MASK GENMASK(14, 0)int get_report_descriptor (int sensor_idx,u8 *rep_desc) {
@@ -246,7 +247,8 @@ u8 get_input_report(u8 current_index, int sensor_idx, int report_id, struct amd_get_common_inputs (&als_input.common_property, report_id);/* For ALS ,V2 Platforms uses C2P_MSG5 register instead of DRAM access method */ if (supported_input ==V2_STATUS ) - als_input.illuminance_value = (int )readl (privdata->mmio +AMD_C2P_MSG (5 )); + als_input.illuminance_value = +readl (privdata->mmio +AMD_C2P_MSG (5 )) &ILLUMINANCE_MASK ;else als_input.illuminance_value = (int )sensor_virt_addr[0 ] /AMD_SFH_FW_MULTIPLIER ;
drivers/hid/hid-apple.c +8 -8
@@ -580,49 +580,49 @@ static const struct hid_device_id apple_devices[] = { { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI), .driver_data = APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO), - .driver_data = APPLE_HAS_FN }, + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
drivers/hid/hid-elo.c +1 -0
@@ -262,6 +262,7 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)return 0 ; err_free: +usb_put_dev (udev);kfree (priv);return ret; }
drivers/hid/hid-ids.h +1 -0
@@ -1365,6 +1365,7 @@#define USB_VENDOR_ID_UGTIZER 0x2179#define USB_DEVICE_ID_UGTIZER_TABLET_GP0610 0x0053#define USB_DEVICE_ID_UGTIZER_TABLET_GT5040 0x0077 +#define USB_DEVICE_ID_UGTIZER_TABLET_WP5540 0x0004#define USB_VENDOR_ID_VIEWSONIC 0x0543#define USB_DEVICE_ID_VIEWSONIC_PD1011 0xe621
drivers/hid/hid-quirks.c +1 -0
@@ -187,6 +187,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_WP5540), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT },
drivers/hid/i2c-hid/i2c-hid-of-goodix.c +12 -16
@@ -27,7 +27,6 @@ struct i2c_hid_of_goodix {struct regulator *vdd;struct notifier_block nb; -struct mutex regulator_mutex;struct gpio_desc *reset_gpio;const struct goodix_i2c_hid_timing_data *timings; };
@@ -67,8 +66,6 @@ static int ihid_goodix_vdd_notify(struct notifier_block *nb, container_of(nb, struct i2c_hid_of_goodix, nb);int ret =NOTIFY_OK ; -mutex_lock (&ihid_goodix->regulator_mutex); -switch (event) {case REGULATOR_EVENT_PRE_DISABLE :gpiod_set_value_cansleep (ihid_goodix->reset_gpio,1 );
@@ -87,8 +84,6 @@ static int ihid_goodix_vdd_notify(struct notifier_block *nb,break ; } -mutex_unlock (&ihid_goodix->regulator_mutex); -return ret; }
@@ -102,8 +97,6 @@ static int i2c_hid_of_goodix_probe(struct i2c_client *client,if (!ihid_goodix)return -ENOMEM ; -mutex_init (&ihid_goodix->regulator_mutex); - ihid_goodix->ops.power_up = goodix_i2c_hid_power_up; ihid_goodix->ops.power_down = goodix_i2c_hid_power_down;
@@ -130,25 +123,28 @@ static int i2c_hid_of_goodix_probe(struct i2c_client *client,* long. Holding the controller in reset apparently draws extra * power. */ -mutex_lock (&ihid_goodix->regulator_mutex); ihid_goodix->nb.notifier_call = ihid_goodix_vdd_notify; ret =devm_regulator_register_notifier (ihid_goodix->vdd, &ihid_goodix->nb); -if (ret) { -mutex_unlock (&ihid_goodix->regulator_mutex); +if (ret)return dev_err_probe (&client->dev, ret,"regulator notifier request failed\n" ); - }/* * If someone else is holding the regulator on (or the regulator is * an always-on one) we might never be told to deassert reset. Do it -* now. Here we'll assume that someone else might have _just -* barely_ turned the regulator on so we'll do the full -* "post_power_delay" just in case. +* now... and temporarily bump the regulator reference count just to +* make sure it is impossible for this to race with our own notifier! +* We also assume that someone else might have _just barely_ turned +* the regulator on so we'll do the full "post_power_delay" just in +* case. */ -if (ihid_goodix->reset_gpio &®ulator_is_enabled (ihid_goodix->vdd)) +if (ihid_goodix->reset_gpio &®ulator_is_enabled (ihid_goodix->vdd)) { + ret =regulator_enable (ihid_goodix->vdd); +if (ret) +return ret;goodix_i2c_hid_deassert_reset (ihid_goodix, true); -mutex_unlock (&ihid_goodix->regulator_mutex); +regulator_disable (ihid_goodix->vdd); + }return i2c_hid_core_probe (client, &ihid_goodix->ops,0x0001 ,0 ); }
drivers/hv/vmbus_drv.c +4 -1
@@ -2027,8 +2027,10 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel) kobj->kset = dev->channels_kset; ret =kobject_init_and_add (kobj, &vmbus_chan_ktype,NULL ,"%u" , relid); -if (ret) +if (ret) { +kobject_put (kobj);return ret; + } ret =sysfs_create_group (kobj, &vmbus_chan_group);
@@ -2037,6 +2039,7 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel)* The calling functions' error handling paths will cleanup the * empty channel directory. */ +kobject_put (kobj);dev_err (device,"Unable to set up channel sysfs files\n" );return ret; }
drivers/i2c/busses/i2c-brcmstb.c +1 -1
@@ -673,7 +673,7 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)/* set the data in/out register size for compatible SoCs */ if (of_device_is_compatible (dev->device->of_node, -"brcmstb,brcmper-i2c" )) +"brcm,brcmper-i2c" )) dev->data_regsz =sizeof (u8);else dev->data_regsz =sizeof (u32);
drivers/i2c/busses/i2c-qcom-cci.c +11 -5
@@ -558,7 +558,7 @@ static int cci_probe(struct platform_device *pdev) cci->master[idx].adap.quirks = &cci->data->quirks; cci->master[idx].adap.algo = &cci_algo; cci->master[idx].adap.dev.parent = dev; - cci->master[idx].adap.dev.of_node = child; + cci->master[idx].adap.dev.of_node =of_node_get (child); cci->master[idx].master = idx; cci->master[idx].cci = cci;
@@ -643,8 +643,10 @@ static int cci_probe(struct platform_device *pdev)continue ; ret =i2c_add_adapter (&cci->master[i].adap); -if (ret <0 ) +if (ret <0 ) { +of_node_put (cci->master[i].adap.dev.of_node); goto error_i2c; + } }pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC );
@@ -655,9 +657,11 @@ static int cci_probe(struct platform_device *pdev)return 0 ; error_i2c: -for (; i >=0 ; i--) { -if (cci->master[i].cci) +for (--i ; i >=0 ; i--) { +if (cci->master[i].cci) {i2c_del_adapter (&cci->master[i].adap); +of_node_put (cci->master[i].adap.dev.of_node); + } } error:disable_irq (cci->irq);
@@ -673,8 +677,10 @@ static int cci_remove(struct platform_device *pdev)int i;for (i =0 ; i < cci->data->num_masters; i++) { -if (cci->master[i].cci) +if (cci->master[i].cci) {i2c_del_adapter (&cci->master[i].adap); +of_node_put (cci->master[i].adap.dev.of_node); + }cci_halt (cci, i); }
drivers/irqchip/irq-sifive-plic.c +1 -0
@@ -398,3 +398,4 @@ static int __init plic_init(struct device_node *node,IRQCHIP_DECLARE (sifive_plic,"sifive,plic-1.0.0" , plic_init);IRQCHIP_DECLARE (riscv_plic0,"riscv,plic0" , plic_init);/* for legacy systems */ +IRQCHIP_DECLARE (thead_c900_plic,"thead,c900-plic" , plic_init);/* for firmware driver */
drivers/md/dm.c +1 -1
@@ -2140,7 +2140,7 @@ static void __dm_destroy(struct mapped_device *md, bool wait)set_bit (DMF_FREEING , &md->flags);spin_unlock (&_minor_lock); -blk_set_queue_dying (md->queue); +blk_mark_disk_dead (md->disk);/* * Take suspend_lock so that presuspend and postsuspend methods
drivers/mmc/core/block.c +14 -14
@@ -1682,31 +1682,31 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)struct mmc_card *card = mq->card;struct mmc_host *host = card->host;blk_status_t error =BLK_STS_OK ; -int retries =0 ; do { u32 status; int err; + int retries = 0; - mmc_blk_rw_rq_prep(mqrq, card, 1, mq); + while (retries++ <= MMC_READ_SINGLE_RETRIES) { + mmc_blk_rw_rq_prep(mqrq, card, 1, mq); - mmc_wait_for_req(host, mrq); + mmc_wait_for_req(host, mrq); - err = mmc_send_status(card, &status); - if (err) - goto error_exit; - - if (!mmc_host_is_spi(host) && - !mmc_ready_for_data(status)) { - err = mmc_blk_fix_state(card, req); + err = mmc_send_status(card, &status); if (err) goto error_exit; - } - if (mrq->cmd->error && retries++ < MMC_READ_SINGLE_RETRIES) - continue; + if (!mmc_host_is_spi(host) && + !mmc_ready_for_data(status)) { + err = mmc_blk_fix_state(card, req); + if (err) + goto error_exit; + } - retries = 0; + if (!mrq->cmd->error) + break; + } if (mrq->cmd->error || mrq->data->error ||
drivers/mtd/devices/phram.c +8 -4
@@ -264,16 +264,20 @@ static int phram_setup(const char *val) } } -if (erasesize) -div_u64_rem (len, (uint32_t )erasesize, &rem); -if (len ==0 || erasesize ==0 || erasesize > len - || erasesize >UINT_MAX || rem) { + || erasesize >UINT_MAX ) {parse_err ("illegal erasesize or len\n" ); ret = -EINVAL ; goto error; } +div_u64_rem (len, (uint32_t )erasesize, &rem); +if (rem) { +parse_err ("len is not multiple of erasesize\n" ); + ret = -EINVAL ; + goto error; + } + ret =register_device (name, start, len, (uint32_t )erasesize);if (ret) goto error;
drivers/mtd/nand/raw/brcmnand/brcmnand.c +1 -1
@@ -2106,7 +2106,7 @@ static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip, mtd->oobsize / trans, host->hwcfg.sector_size_1k); -if (!ret) { +if (ret != -EBADMSG ) { *err_addr =brcmnand_get_uncorrecc_addr (ctrl);if (*err_addr)
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +2 -1
@@ -2291,7 +2291,7 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, this->hw.must_apply_timings = false; ret =gpmi_nfc_apply_timings (this);if (ret) -return ret; + goto out_pm; }dev_dbg (this->dev,"%s: %d instructions\n" , __func__, op->ninstrs);
@@ -2420,6 +2420,7 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, this->bch = false; +out_pm:pm_runtime_mark_last_busy (this->dev);pm_runtime_put_autosuspend (this->dev);
drivers/mtd/nand/raw/ingenic/ingenic_ecc.c +6 -1
@@ -68,9 +68,14 @@ static struct ingenic_ecc *ingenic_ecc_get(struct device_node *np)struct ingenic_ecc *ecc; pdev =of_find_device_by_node (np); -if (!pdev || !platform_get_drvdata (pdev)) +if (!pdev)return ERR_PTR (-EPROBE_DEFER ); +if (!platform_get_drvdata (pdev)) { +put_device (&pdev->dev); +return ERR_PTR (-EPROBE_DEFER ); + } + ecc =platform_get_drvdata (pdev);clk_prepare_enable (ecc->clk);
drivers/mtd/nand/raw/qcom_nandc.c +6 -8
@@ -2,7 +2,6 @@/* * Copyright (c) 2016, The Linux Foundation. All rights reserved. */ -#include <linux/clk.h> #include <linux/slab.h> #include <linux/bitops.h>
@@ -3063,10 +3062,6 @@ static int qcom_nandc_probe(struct platform_device *pdev)if (dma_mapping_error (dev, nandc->base_dma))return -ENXIO ; - ret =qcom_nandc_alloc (nandc); -if (ret) - goto err_nandc_alloc; - ret =clk_prepare_enable (nandc->core_clk);if (ret) goto err_core_clk;
@@ -3075,6 +3070,10 @@ static int qcom_nandc_probe(struct platform_device *pdev)if (ret) goto err_aon_clk; + ret =qcom_nandc_alloc (nandc); +if (ret) + goto err_nandc_alloc; + ret =qcom_nandc_setup (nandc);if (ret) goto err_setup;
@@ -3086,15 +3085,14 @@ static int qcom_nandc_probe(struct platform_device *pdev)return 0 ; err_setup: +qcom_nandc_unalloc (nandc); +err_nandc_alloc:clk_disable_unprepare (nandc->aon_clk); err_aon_clk:clk_disable_unprepare (nandc->core_clk); err_core_clk: -qcom_nandc_unalloc (nandc); -err_nandc_alloc:dma_unmap_resource (dev, res->start,resource_size (res),DMA_BIDIRECTIONAL ,0 ); -return ret; }
drivers/mtd/parsers/qcomsmempart.c +21 -12
@@ -58,11 +58,11 @@ static int parse_qcomsmem_part(struct mtd_info *mtd,const struct mtd_partition **pparts, struct mtd_part_parser_data *data) { + size_t len = SMEM_FLASH_PTABLE_HDR_LEN; +int ret, i, j, tmpparts, numparts =0 ;struct smem_flash_pentry *pentry;struct smem_flash_ptable *ptable; -size_t len =SMEM_FLASH_PTABLE_HDR_LEN ;struct mtd_partition *parts; -int ret, i, numparts;char *name, *c; if (IS_ENABLED(CONFIG_MTD_SPI_NOR_USE_4K_SECTORS)
@@ -87,8 +87,8 @@ static int parse_qcomsmem_part(struct mtd_info *mtd, }/* Ensure that # of partitions is less than the max we have allocated */ - numparts =le32_to_cpu (ptable->numparts); -if (numparts >SMEM_FLASH_PTABLE_MAX_PARTS_V4 ) { + tmpparts =le32_to_cpu (ptable->numparts); +if (tmpparts >SMEM_FLASH_PTABLE_MAX_PARTS_V4 ) {pr_err ("Partition numbers exceed the max limit\n" );return -EINVAL ; }
@@ -116,11 +116,17 @@ static int parse_qcomsmem_part(struct mtd_info *mtd,return PTR_ERR (ptable); } +for (i =0 ; i < tmpparts; i++) { + pentry = &ptable->pentry[i]; +if (pentry->name[0 ] !='\0' ) + numparts++; + } + parts =kcalloc (numparts,sizeof (*parts),GFP_KERNEL );if (!parts)return -ENOMEM ; -for (i =0 ; i < numparts; i++) { +for (i =0 , j =0 ; i < tmpparts; i++) { pentry = &ptable->pentry[i];if (pentry->name[0 ] =='\0' )continue ;
@@ -135,24 +141,25 @@ static int parse_qcomsmem_part(struct mtd_info *mtd,for (c = name; *c !='\0' ; c++) *c =tolower (*c); - parts[i].name = name; - parts[i].offset =le32_to_cpu (pentry->offset) * mtd->erasesize; - parts[i].mask_flags = pentry->attr; - parts[i].size =le32_to_cpu (pentry->length) * mtd->erasesize; + parts[j].name = name; + parts[j].offset =le32_to_cpu (pentry->offset) * mtd->erasesize; + parts[j].mask_flags = pentry->attr; + parts[j].size =le32_to_cpu (pentry->length) * mtd->erasesize;pr_debug ("%d: %s offs=0x%08x size=0x%08x attr:0x%08x\n" , i, pentry->name,le32_to_cpu (pentry->offset),le32_to_cpu (pentry->length), pentry->attr); + j++; }pr_debug ("SMEM partition table found: ver: %d len: %d\n" , -le32_to_cpu (ptable->version), numparts); +le32_to_cpu (ptable->version), tmpparts); *pparts = parts;return numparts; out_free_parts: -while (--i >=0 ) -kfree (parts[i].name); +while (--j >=0 ) +kfree (parts[j].name);kfree (parts); *pparts =NULL ;
@@ -166,6 +173,8 @@ static void parse_qcomsmem_cleanup(const struct mtd_partition *pparts,for (i =0 ; i < nr_parts; i++)kfree (pparts[i].name); + +kfree (pparts); }static const struct of_device_id qcomsmem_of_match_table[] = {
drivers/net/bonding/bond_3ad.c +25 -5
@@ -225,7 +225,7 @@ static inline int __check_agg_selection_timer(struct port *port)if (bond ==NULL )return 0 ; -return BOND_AD_INFO (bond).agg_select_timer ?1 :0 ; +return atomic_read (&BOND_AD_INFO (bond).agg_select_timer) ?1 :0 ; }/**
@@ -1995,7 +1995,7 @@ static void ad_marker_response_received(struct bond_marker *marker,*/ void bond_3ad_initiate_agg_selection (struct bonding *bond,int timeout) { -BOND_AD_INFO (bond).agg_select_timer = timeout; +atomic_set (&BOND_AD_INFO (bond).agg_select_timer, timeout); }/**
@@ -2278,6 +2278,28 @@ void bond_3ad_update_ad_actor_settings(struct bonding *bond)spin_unlock_bh (&bond->mode_lock); } +/** +* bond_agg_timer_advance - advance agg_select_timer +* @bond: bonding structure +* +* Return true when agg_select_timer reaches 0. +*/ +static bool bond_agg_timer_advance (struct bonding *bond) +{ +int val, nval; + +while (1 ) { + val =atomic_read (&BOND_AD_INFO (bond).agg_select_timer); +if (!val) +return false; + nval = val -1 ; +if (atomic_cmpxchg (&BOND_AD_INFO (bond).agg_select_timer, + val, nval) == val) +break ; + } +return nval ==0 ; +} +/** * bond_3ad_state_machine_handler - handle state machines timeout * @work: work context to fetch bonding struct to work on from
@@ -2313,9 +2335,7 @@ void bond_3ad_state_machine_handler(struct work_struct *work)if (!bond_has_slaves (bond)) goto re_arm; -/* check if agg_select_timer timer after initialize is timed out */ -if (BOND_AD_INFO (bond).agg_select_timer && - !(--BOND_AD_INFO (bond).agg_select_timer)) { +if (bond_agg_timer_advance (bond)) { slave =bond_first_slave_rcu (bond); port = slave ? &(SLAVE_AD_INFO (slave)->port) :NULL ;
drivers/net/bonding/bond_main.c +2 -3
@@ -2377,10 +2377,9 @@ static int __bond_release_one(struct net_device *bond_dev,bond_select_active_slave (bond); } -if (!bond_has_slaves (bond)) { -bond_set_carrier (bond); +bond_set_carrier (bond); +if (!bond_has_slaves (bond))eth_hw_addr_random (bond_dev); - }unblock_netpoll_tx ();synchronize_rcu ();
drivers/net/dsa/Kconfig +1 -0
@@ -82,6 +82,7 @@ config NET_DSA_REALTEK_SMI config NET_DSA_SMSC_LAN9303 tristate + depends on VLAN_8021Q || VLAN_8021Q=n select NET_DSA_TAG_LAN9303 select REGMAP help
drivers/net/dsa/lan9303-core.c +10 -3
@@ -10,6 +10,7 @@#include <linux/mii.h> #include <linux/phy.h> #include <linux/if_bridge.h> +#include <linux/if_vlan.h> #include <linux/etherdevice.h> #include "lan9303.h"
@@ -1083,21 +1084,27 @@ static void lan9303_adjust_link(struct dsa_switch *ds, int port,static int lan9303_port_enable (struct dsa_switch *ds,int port,struct phy_device *phy) { +struct dsa_port *dp =dsa_to_port (ds, port);struct lan9303 *chip = ds->priv; -if (!dsa_is_user_port (ds, port)) +if (!dsa_port_is_user (dp))return 0 ; +vlan_vid_add (dp->cpu_dp->master,htons (ETH_P_8021Q ), port); +return lan9303_enable_processing_port (chip, port); }static void lan9303_port_disable (struct dsa_switch *ds,int port) { +struct dsa_port *dp =dsa_to_port (ds, port);struct lan9303 *chip = ds->priv; -if (!dsa_is_user_port (ds, port)) +if (!dsa_port_is_user (dp))return ; +vlan_vid_del (dp->cpu_dp->master,htons (ETH_P_8021Q ), port); +lan9303_disable_processing_port (chip, port);lan9303_phy_write (ds, chip->phy_addr_base + port,MII_BMCR ,BMCR_PDOWN ); }
@@ -1309,7 +1316,7 @@ static int lan9303_probe_reset_gpio(struct lan9303 *chip, struct device_node *np) { chip->reset_gpio =devm_gpiod_get_optional (chip->dev,"reset" , -GPIOD_OUT_LOW ); +GPIOD_OUT_HIGH );if (IS_ERR (chip->reset_gpio))return PTR_ERR (chip->reset_gpio);
drivers/net/dsa/lantiq_gswip.c +1 -1
@@ -2217,8 +2217,8 @@ static int gswip_remove(struct platform_device *pdev)if (priv->ds->slave_mii_bus) {mdiobus_unregister (priv->ds->slave_mii_bus); -mdiobus_free (priv->ds->slave_mii_bus);of_node_put (priv->ds->slave_mii_bus->dev.of_node); +mdiobus_free (priv->ds->slave_mii_bus); }for (i =0 ; i < priv->num_gphy_fw; i++)
drivers/net/dsa/mv88e6xxx/chip.c +7 -0
@@ -2290,6 +2290,13 @@ static int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port,if (!mv88e6xxx_max_vid (chip))return -EOPNOTSUPP ; +/* The ATU removal procedure needs the FID to be mapped in the VTU, +* but FDB deletion runs concurrently with VLAN deletion. Flush the DSA +* switchdev workqueue to ensure that all FDB entries are deleted +* before we remove the VLAN. +*/ +dsa_flush_workqueue (); +mv88e6xxx_reg_lock (chip); err =mv88e6xxx_port_get_pvid (chip, port, &pvid);
drivers/net/ethernet/atheros/atl1c/atl1c_main.c +1 -1
@@ -900,7 +900,7 @@ static void atl1c_clean_tx_ring(struct atl1c_adapter *adapter,atl1c_clean_buffer (pdev, buffer_info); } -netdev_reset_queue (adapter->netdev); +netdev_tx_reset_queue (netdev_get_tx_queue (adapter->netdev, queue));/* Zero out Tx-buffers */ memset(tpd_ring->desc, 0, sizeof(struct atl1c_tpd_desc) *
drivers/net/ethernet/broadcom/bgmac-platform.c +16 -7
@@ -172,6 +172,7 @@ static int bgmac_probe(struct platform_device *pdev) {struct device_node *np = pdev->dev.of_node;struct bgmac *bgmac; +struct resource *regs;int ret; bgmac =bgmac_alloc (&pdev->dev);
@@ -208,15 +209,23 @@ static int bgmac_probe(struct platform_device *pdev)if (IS_ERR (bgmac->plat.base))return PTR_ERR (bgmac->plat.base); - bgmac->plat.idm_base =devm_platform_ioremap_resource_byname (pdev,"idm_base" ); -if (IS_ERR (bgmac->plat.idm_base)) -return PTR_ERR (bgmac->plat.idm_base); -else +/* The idm_base resource is optional for some platforms */ + regs =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"idm_base" ); +if (regs) { + bgmac->plat.idm_base =devm_ioremap_resource (&pdev->dev, regs); +if (IS_ERR (bgmac->plat.idm_base)) +return PTR_ERR (bgmac->plat.idm_base); bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK ; + } - bgmac->plat.nicpm_base =devm_platform_ioremap_resource_byname (pdev,"nicpm_base" ); -if (IS_ERR (bgmac->plat.nicpm_base)) -return PTR_ERR (bgmac->plat.nicpm_base); +/* The nicpm_base resource is optional for some platforms */ + regs =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"nicpm_base" ); +if (regs) { + bgmac->plat.nicpm_base =devm_ioremap_resource (&pdev->dev, + regs); +if (IS_ERR (bgmac->plat.nicpm_base)) +return PTR_ERR (bgmac->plat.nicpm_base); + } bgmac->read = platform_bgmac_read; bgmac->write = platform_bgmac_write;
drivers/net/ethernet/cadence/macb_main.c +1 -1
@@ -4749,7 +4749,7 @@ static int macb_probe(struct platform_device *pdev)#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT if (GEM_BFEXT (DAW64 ,gem_readl (bp,DCFG6 ))) { -dma_set_mask (&pdev->dev,DMA_BIT_MASK (44 )); +dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (44 )); bp->hw_dma_cap |=HW_DMA_CAP_64B ; }#endif
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +1 -1
@@ -4338,7 +4338,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev) }INIT_WORK (&priv->tx_onestep_tstamp, dpaa2_eth_tx_onestep_tstamp); - +mutex_init (&priv->onestep_tstamp_lock);skb_queue_head_init (&priv->tx_skbs); priv->rx_copybreak =DPAA2_ETH_DEFAULT_COPYBREAK ;
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c +3 -1
@@ -532,6 +532,7 @@ static int dpaa2_switch_flower_parse_mirror_key(struct flow_cls_offload *cls,struct flow_rule *rule =flow_cls_offload_flow_rule (cls);struct flow_dissector *dissector = rule->match.dissector;struct netlink_ext_ack *extack = cls->common.extack; +int ret = -EOPNOTSUPP ; if (dissector->used_keys & ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
@@ -561,9 +562,10 @@ static int dpaa2_switch_flower_parse_mirror_key(struct flow_cls_offload *cls, } *vlan = (u16 )match.key->vlan_id; + ret =0 ; } -return 0 ; +return ret; } static int
drivers/net/ethernet/intel/ice/ice_lib.c +6 -0
@@ -1641,6 +1641,12 @@ static void ice_vsi_set_rss_flow_fld(struct ice_vsi *vsi)if (status)dev_dbg (dev,"ice_add_rss_cfg failed for sctp6 flow, vsi = %d, error = %s\n" , vsi_num,ice_stat_str (status)); + + status =ice_add_rss_cfg (hw, vsi_handle,ICE_FLOW_HASH_ESP_SPI , +ICE_FLOW_SEG_HDR_ESP ); +if (status) +dev_dbg (dev,"ice_add_rss_cfg failed for esp/spi flow, vsi = %d, error = %d\n" , + vsi_num, status); }/**
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c +1 -1
@@ -145,9 +145,9 @@ static void sparx5_xtr_grp(struct sparx5 *sparx5, u8 grp, bool byte_swap)skb_put (skb, byte_cnt -ETH_FCS_LEN );eth_skb_pad (skb); skb->protocol =eth_type_trans (skb, netdev); -netif_rx (skb); netdev->stats.rx_bytes += skb->len; netdev->stats.rx_packets++; +netif_rx (skb); } static int sparx5_inject(struct sparx5 *sparx5,
drivers/net/ethernet/mscc/ocelot.c +5 -1
@@ -480,14 +480,18 @@ EXPORT_SYMBOL(ocelot_vlan_add);int ocelot_vlan_del (struct ocelot *ocelot,int port,u16 vid) {struct ocelot_port *ocelot_port = ocelot->ports[port]; +bool del_pvid = false;int err; +if (ocelot_port->pvid_vlan && ocelot_port->pvid_vlan->vid == vid) + del_pvid = true; + err =ocelot_vlan_member_del (ocelot, port, vid);if (err)return err;/* Ingress */ -if (ocelot_port->pvid_vlan && ocelot_port->pvid_vlan->vid == vid) +if (del_pvid)ocelot_port_set_pvid (ocelot, port,NULL );/* Egress */
drivers/net/ethernet/netronome/nfp/flower/cmsg.h +2 -0
@@ -723,6 +723,8 @@ static inline bool nfp_fl_is_netdev_to_offload(struct net_device *netdev)return true;if (netif_is_gretap (netdev))return true; +if (netif_is_ip6gretap (netdev)) +return true;return false; }
drivers/net/ieee802154/at86rf230.c +11 -2
@@ -100,6 +100,7 @@ struct at86rf230_local {unsigned long cal_timeout;bool is_tx;bool is_tx_from_off; +bool was_tx;u8 tx_retry;struct sk_buff *tx_skb;struct at86rf230_state_change tx;
@@ -343,7 +344,11 @@ at86rf230_async_error_recover_complete(void *context)if (ctx->free)kfree (ctx); -ieee802154_wake_queue (lp->hw); +if (lp->was_tx) { + lp->was_tx =0 ; +dev_kfree_skb_any (lp->tx_skb); +ieee802154_wake_queue (lp->hw); + } } static void
@@ -352,7 +357,11 @@ at86rf230_async_error_recover(void *context)struct at86rf230_state_change *ctx = context;struct at86rf230_local *lp = ctx->lp; - lp->is_tx =0 ; +if (lp->is_tx) { + lp->was_tx =1 ; + lp->is_tx =0 ; + } +at86rf230_async_state_change (lp, ctx,STATE_RX_AACK_ON , at86rf230_async_error_recover_complete); }
drivers/net/ieee802154/ca8210.c +2 -2
@@ -2975,8 +2975,8 @@ static void ca8210_hw_setup(struct ieee802154_hw *ca8210_hw) ca8210_hw->phy->cca.opt =NL802154_CCA_OPT_ENERGY_CARRIER_AND ; ca8210_hw->phy->cca_ed_level =-9800 ; ca8210_hw->phy->symbol_duration =16 ; - ca8210_hw->phy->lifs_period =40 ; - ca8210_hw->phy->sifs_period =12 ; + ca8210_hw->phy->lifs_period =40 * ca8210_hw->phy->symbol_duration; + ca8210_hw->phy->sifs_period =12 * ca8210_hw->phy->symbol_duration; ca8210_hw->flags =IEEE802154_HW_AFILT | IEEE802154_HW_OMIT_CKSUM |
drivers/net/netdevsim/fib.c +2 -2
@@ -623,14 +623,14 @@ static int nsim_fib6_rt_append(struct nsim_fib_data *data,if (err) goto err_fib6_rt_nh_del; - fib6_event->rt_arr[i]->trap = true; +WRITE_ONCE (fib6_event->rt_arr[i]->trap, true); }return 0 ; err_fib6_rt_nh_del:for (i--; i >=0 ; i--) { - fib6_event->rt_arr[i]->trap = false; +WRITE_ONCE (fib6_event->rt_arr[i]->trap, false);nsim_fib6_rt_nh_del (fib6_rt, fib6_event->rt_arr[i]); }return err;
drivers/net/phy/mediatek-ge.c +0 -3
@@ -55,9 +55,6 @@ static int mt7530_phy_config_init(struct phy_device *phydev)static int mt7531_phy_config_init (struct phy_device *phydev) { -if (phydev->interface !=PHY_INTERFACE_MODE_INTERNAL ) -return -EINVAL ; -mtk_gephy_config_init (phydev);/* PHY link down power saving enable */
drivers/net/usb/qmi_wwan.c +2 -0
@@ -1399,6 +1399,8 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */ {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */ {QMI_FIXED_INTF(0x413c, 0x81e0, 0)}, /* Dell Wireless 5821e with eSIM support*/ + {QMI_FIXED_INTF(0x413c, 0x81e4, 0)}, /* Dell Wireless 5829e with eSIM support*/ + {QMI_FIXED_INTF(0x413c, 0x81e6, 0)}, /* Dell Wireless 5829e */ {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */ {QMI_FIXED_INTF(0x03f0, 0x9d1d, 1)}, /* HP lt4120 Snapdragon X5 LTE */ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c +4 -2
@@ -693,7 +693,7 @@ int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req, {struct brcmf_fw_item *first = &req->items[0 ];struct brcmf_fw *fwctx; -char *alt_path; +char *alt_path =NULL ;int ret;brcmf_dbg (TRACE ,"enter: dev=%s\n" ,dev_name (dev));
@@ -712,7 +712,9 @@ int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req, fwctx->done = fw_cb;/* First try alternative board-specific path if any */ - alt_path =brcm_alt_fw_path (first->path, fwctx->req->board_type); +if (fwctx->req->board_type) + alt_path =brcm_alt_fw_path (first->path, + fwctx->req->board_type);if (alt_path) { ret = request_firmware_nowait(THIS_MODULE, true, alt_path, fwctx->dev, GFP_KERNEL, fwctx,
drivers/net/wireless/intel/iwlwifi/Kconfig +0 -13
@@ -79,19 +79,6 @@ config IWLWIFI_OPMODE_MODULAR comment "WARNING: iwlwifi is useless without IWLDVM or IWLMVM" depends on IWLDVM=n && IWLMVM=n -config IWLWIFI_BCAST_FILTERING - bool "Enable broadcast filtering" - depends on IWLMVM - help - Say Y here to enable default bcast filtering configuration. - - Enabling broadcast filtering will drop any incoming wireless - broadcast frames, except some very specific predefined - patterns (e.g. incoming arp requests). - - If unsure, don't enable this option, as some programs might - expect incoming broadcasts for their normal operations. - menu "Debugging Options" config IWLWIFI_DEBUG
drivers/net/wireless/intel/iwlwifi/fw/acpi.c +6 -5
@@ -1,7 +1,7 @@// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2017 Intel Deutschland GmbH -* Copyright (C) 2019-2021 Intel Corporation +* Copyright (C) 2019-2022 Intel Corporation */ #include <linux/uuid.h> #include "iwl-drv.h"
@@ -873,10 +873,11 @@ bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt)* only one using version 36, so skip this version entirely. */ return IWL_UCODE_SERIAL (fwrt->fw->ucode_ver) >=38 || -IWL_UCODE_SERIAL (fwrt->fw->ucode_ver) ==17 || - (IWL_UCODE_SERIAL (fwrt->fw->ucode_ver) ==29 && - ((fwrt->trans->hw_rev &CSR_HW_REV_TYPE_MSK ) == -CSR_HW_REV_TYPE_7265D )); + (IWL_UCODE_SERIAL (fwrt->fw->ucode_ver) ==17 && + fwrt->trans->hw_rev !=CSR_HW_REV_TYPE_3160 ) || + (IWL_UCODE_SERIAL (fwrt->fw->ucode_ver) ==29 && + ((fwrt->trans->hw_rev &CSR_HW_REV_TYPE_MSK ) == +CSR_HW_REV_TYPE_7265D )); }IWL_EXPORT_SYMBOL (iwl_sar_geo_support);
drivers/net/wireless/intel/iwlwifi/fw/api/commands.h +0 -5
@@ -505,11 +505,6 @@ enum iwl_legacy_cmds {*/ DEBUG_LOG_MSG = 0xf7, -/** -* @BCAST_FILTER_CMD: &struct iwl_bcast_filter_cmd -*/ - BCAST_FILTER_CMD = 0xcf, -/** * @MCAST_FILTER_CMD: &struct iwl_mcast_filter_cmd */
drivers/net/wireless/intel/iwlwifi/fw/api/filter.h +0 -88
92 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/fw/api/rs.h +0 -1
@@ -710,7 +710,6 @@ struct iwl_lq_cmd {u8 iwl_fw_rate_idx_to_plcp (int idx);u32 iwl_new_rate_from_v1 (u32 rate_v1); -u32 iwl_legacy_rate_to_fw_idx (u32 rate_n_flags);const struct iwl_rate_mcs_info *iwl_rate_mcs (int idx);const char *iwl_rs_pretty_ant (u8 ant);const char *iwl_rs_pretty_bw (int bw);
drivers/net/wireless/intel/iwlwifi/fw/file.h +0 -2
@@ -182,7 +182,6 @@ struct iwl_ucode_capa {* @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version) * @IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT: General support for uAPSD * @IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD: P2P client supports uAPSD power save -* @IWL_UCODE_TLV_FLAGS_BCAST_FILTERING: uCode supports broadcast filtering. * @IWL_UCODE_TLV_FLAGS_EBS_SUPPORT: this uCode image supports EBS. */ enum iwl_ucode_tlv_flag {
@@ -197,7 +196,6 @@ enum iwl_ucode_tlv_flag {IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT =BIT (24 ),IWL_UCODE_TLV_FLAGS_EBS_SUPPORT =BIT (25 ), IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD = BIT(26), - IWL_UCODE_TLV_FLAGS_BCAST_FILTERING = BIT(29), };typedef unsigned int __bitwise iwl_ucode_tlv_api_t ;
drivers/net/wireless/intel/iwlwifi/fw/rs.c +18 -15
@@ -91,6 +91,20 @@ const char *iwl_rs_pretty_bw(int bw) }IWL_EXPORT_SYMBOL (iwl_rs_pretty_bw); +static u32 iwl_legacy_rate_to_fw_idx (u32 rate_n_flags) +{ +int rate = rate_n_flags &RATE_LEGACY_RATE_MSK_V1 ; +int idx; +bool ofdm = !(rate_n_flags &RATE_MCS_CCK_MSK_V1 ); +int offset = ofdm ?IWL_FIRST_OFDM_RATE :0 ; +int last = ofdm ?IWL_RATE_COUNT_LEGACY :IWL_FIRST_OFDM_RATE ; + +for (idx = offset; idx < last; idx++) +if (iwl_fw_rate_idx_to_plcp (idx) == rate) +return idx - offset; +return IWL_RATE_INVALID ; +} +u32 iwl_new_rate_from_v1 (u32 rate_v1) {u32 rate_v2 =0 ;
@@ -144,7 +158,10 @@ u32 iwl_new_rate_from_v1(u32 rate_v1) }else {u32 legacy_rate =iwl_legacy_rate_to_fw_idx (rate_v1); -WARN_ON (legacy_rate <0 ); +if (WARN_ON_ONCE (legacy_rate ==IWL_RATE_INVALID )) + legacy_rate = (rate_v1 &RATE_MCS_CCK_MSK_V1 ) ? +IWL_FIRST_CCK_RATE :IWL_FIRST_OFDM_RATE ; + rate_v2 |= legacy_rate;if (!(rate_v1 &RATE_MCS_CCK_MSK_V1 )) rate_v2 |=RATE_MCS_LEGACY_OFDM_MSK ;
@@ -172,20 +189,6 @@ u32 iwl_new_rate_from_v1(u32 rate_v1) }IWL_EXPORT_SYMBOL (iwl_new_rate_from_v1); -u32 iwl_legacy_rate_to_fw_idx (u32 rate_n_flags) -{ -int rate = rate_n_flags &RATE_LEGACY_RATE_MSK_V1 ; -int idx; -bool ofdm = !(rate_n_flags &RATE_MCS_CCK_MSK_V1 ); -int offset = ofdm ?IWL_FIRST_OFDM_RATE :0 ; -int last = ofdm ?IWL_RATE_COUNT_LEGACY :IWL_FIRST_OFDM_RATE ; - -for (idx = offset; idx < last; idx++) -if (iwl_fw_rate_idx_to_plcp (idx) == rate) -return idx - offset; -return -1 ; -} -int rs_pretty_print_rate (char *buf,int bufsz,const u32 rate) {char *type;
drivers/net/wireless/intel/iwlwifi/iwl-csr.h +2 -1
@@ -1,6 +1,6 @@/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* -* Copyright (C) 2005-2014, 2018-2021 Intel Corporation +* Copyright (C) 2005-2014, 2018-2022 Intel Corporation * Copyright (C) 2013-2014 Intel Mobile Communications GmbH * Copyright (C) 2016 Intel Deutschland GmbH */
@@ -326,6 +326,7 @@ enum {#define CSR_HW_REV_TYPE_2x00 (0x0000100)#define CSR_HW_REV_TYPE_105 (0x0000110)#define CSR_HW_REV_TYPE_135 (0x0000120) +#define CSR_HW_REV_TYPE_3160 (0x0000164)#define CSR_HW_REV_TYPE_7265D (0x0000210)#define CSR_HW_REV_TYPE_NONE (0x00001F0)#define CSR_HW_REV_TYPE_QNJ (0x0000360)
drivers/net/wireless/intel/iwlwifi/iwl-drv.c +2 -0
@@ -1656,6 +1656,8 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context) out_unbind:complete (&drv->request_firmware_complete);device_release_driver (drv->trans->dev); +/* drv has just been freed by the release */ + failure = false; free:if (failure)iwl_dealloc_ucode (drv);
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c +0 -203
102 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/mvm/fw.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +0 -240
240 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +0 -13
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/tx.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/pcie/trans.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel/speed_select_if/isst_if_common.c +63 -34
97 lines not on this page · raw message
drivers/platform/x86/touchscreen_dmi.c +24 -0
Lines of this file are not shown. View the raw message.
drivers/scsi/scsi_scan.c +50 -5
55 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.c +14 -44
58 lines not on this page · raw message
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +18 -2
Lines of this file are not shown. View the raw message.
drivers/tee/optee/ffa_abi.c +40 -30
70 lines not on this page · raw message
include/linux/bpf.h +77 -24
101 lines not on this page · raw message
kernel/bpf/verifier.c +242 -246
488 lines not on this page · raw message
net/core/filter.c +32 -32
64 lines not on this page · raw message
net/netfilter/nf_conntrack_proto_sctp.c +9 -0
Lines of this file are not shown. View the raw message.
sound/soc/soc-ops.c +31 -10
41 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/ksyms_btf.c +14 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_ksyms_btf_write_check.c new file +29 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/clone3/clone3.c +0 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/kselftest_harness.h +3 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mincore/mincore_selftest.c +14 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/mount_setattr/mount_setattr_test.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/nft_concat_range.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/nft_fib.sh +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/nft_zones_many.sh +6 -6
Lines of this file are not shown. View the raw message.
tools/testing/selftests/openat2/Makefile +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/openat2/helpers.h +7 -5
Lines of this file are not shown. View the raw message.
tools/testing/selftests/openat2/openat2_test.c +11 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/pidfd/pidfd_fdinfo_test.c +18 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/pidfd/pidfd_test.c +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/pidfd/pidfd_wait.c +2 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vDSO/vdso_test_abi.c +62 -73
135 lines not on this page · raw message
tools/testing/selftests/zram/zram01.sh +9 -24
Lines of this file are not shown. View the raw message.
tools/testing/selftests/zram/zram_lib.sh +88 -46
134 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.