Linux 5.10.38
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.38 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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
------------
.gitignore | 1 Documentation/arm/memory.rst | 7 Documentation/devicetree/bindings/media/renesas,vin.yaml | 46 Documentation/devicetree/bindings/serial/8250.yaml | 5 Documentation/dontdiff | 1 MAINTAINERS | 1 Makefile | 4 arch/arc/include/asm/page.h | 12 arch/arc/include/asm/pgtable.h | 12 arch/arc/include/uapi/asm/page.h | 1 arch/arc/kernel/entry.S | 4 arch/arc/mm/init.c | 11 arch/arc/mm/ioremap.c | 5 arch/arc/mm/tlb.c | 2 arch/arm/boot/dts/dra7-l4.dtsi | 4 arch/arm/boot/dts/dra7.dtsi | 20 arch/arm/include/asm/fixmap.h | 2 arch/arm/include/asm/memory.h | 5 arch/arm/include/asm/prom.h | 4 arch/arm/kernel/atags.h | 4 arch/arm/kernel/atags_parse.c | 6 arch/arm/kernel/devtree.c | 6 arch/arm/kernel/head.S | 9 arch/arm/kernel/hw_breakpoint.c | 2 arch/arm/kernel/setup.c | 19 arch/arm/mm/init.c | 1 arch/arm/mm/mmu.c | 20 arch/arm/mm/pv-fixup-asm.S | 4 arch/arm64/include/asm/daifflags.h | 3 arch/arm64/kernel/entry-common.c | 17 arch/arm64/kernel/entry.S | 85 - arch/arm64/mm/flush.c | 4 arch/arm64/mm/proc.S | 12 arch/ia64/include/asm/module.h | 6 arch/ia64/kernel/module.c | 29 arch/mips/include/asm/div64.h | 55 - arch/mips/kernel/cpu-probe.c | 3 arch/powerpc/kernel/head_32.h | 6 arch/powerpc/kernel/iommu.c | 4 arch/powerpc/kernel/setup_32.c | 2 arch/powerpc/kernel/smp.c | 6 arch/powerpc/lib/feature-fixups.c | 35 arch/powerpc/mm/book3s64/hash_utils.c | 13 arch/powerpc/platforms/pseries/hotplug-cpu.c | 3 arch/riscv/kernel/smp.c | 2 arch/x86/include/asm/idtentry.h | 15 arch/x86/include/asm/kvm_host.h | 4 arch/x86/kernel/nmi.c | 10 arch/x86/kvm/cpuid.c | 3 arch/x86/kvm/emulate.c | 2 arch/x86/kvm/kvm_emulate.h | 1 arch/x86/kvm/lapic.c | 2 arch/x86/kvm/mmu/mmu.c | 49 arch/x86/kvm/vmx/nested.c | 29 arch/x86/kvm/vmx/vmx.c | 30 arch/x86/kvm/x86.c | 40 block/bfq-iosched.c | 3 block/blk-iocost.c | 14 block/blk-mq-sched.c | 8 block/blk-mq.c | 11 block/kyber-iosched.c | 5 block/mq-deadline.c | 3 drivers/acpi/device_pm.c | 1 drivers/acpi/scan.c | 1 drivers/base/power/runtime.c | 10 drivers/block/nbd.c | 3 drivers/block/rnbd/rnbd-clt.c | 12 drivers/block/rnbd/rnbd-clt.h | 2 drivers/bluetooth/btusb.c | 4 drivers/char/tpm/tpm2-cmd.c | 1 drivers/char/tpm/tpm_tis_core.c | 22 drivers/clk/samsung/clk-exynos7.c | 7 drivers/clocksource/timer-ti-dm-systimer.c | 144 ++ drivers/cpufreq/intel_pstate.c | 14 drivers/crypto/ccp/sev-dev.c | 4 drivers/dma/idxd/cdev.c | 129 -- drivers/dma/idxd/device.c | 5 drivers/dma/idxd/dma.c | 77 + drivers/dma/idxd/idxd.h | 25 drivers/dma/idxd/init.c | 2 drivers/dma/idxd/irq.c | 4 drivers/dma/idxd/sysfs.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c | 1 drivers/gpu/drm/amd/display/dc/core/dc.c | 4 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c | 15 drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c | 2 drivers/gpu/drm/i915/display/intel_overlay.c | 2 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 2 drivers/gpu/drm/i915/gt/gen8_ppgtt.c | 1 drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 4 drivers/gpu/drm/i915/i915_active.c | 3 drivers/gpu/drm/msm/dp/dp_audio.c | 1 drivers/gpu/drm/msm/dp/dp_display.c | 11 drivers/gpu/drm/msm/dp/dp_display.h | 1 drivers/gpu/drm/radeon/radeon.h | 1 drivers/gpu/drm/radeon/radeon_atombios.c | 26 drivers/gpu/drm/radeon/radeon_pm.c | 8 drivers/gpu/drm/radeon/si_dpm.c | 3 drivers/hwmon/occ/common.c | 5 drivers/hwmon/occ/common.h | 2 drivers/hwtracing/coresight/coresight-platform.c | 6 drivers/i2c/busses/i2c-mt65xx.c | 9 drivers/i2c/i2c-dev.c | 9 drivers/iio/accel/Kconfig | 1 drivers/iio/common/hid-sensors/Kconfig | 1 drivers/iio/gyro/Kconfig | 1 drivers/iio/gyro/mpu3050-core.c | 13 drivers/iio/humidity/Kconfig | 1 drivers/iio/light/Kconfig | 2 drivers/iio/light/gp2ap002.c | 5 drivers/iio/light/tsl2583.c | 8 drivers/iio/magnetometer/Kconfig | 1 drivers/iio/orientation/Kconfig | 2 drivers/iio/pressure/Kconfig | 1 drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 1 drivers/iio/temperature/Kconfig | 1 drivers/infiniband/hw/hfi1/ipoib.h | 3 drivers/infiniband/hw/hfi1/ipoib_tx.c | 14 drivers/iommu/amd/init.c | 49 drivers/iommu/intel/iommu.c | 5 drivers/net/can/m_can/m_can.c | 3 drivers/net/can/spi/mcp251x.c | 35 drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 19 drivers/net/ethernet/cisco/enic/enic_main.c | 7 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 127 +- drivers/net/ethernet/hisilicon/hns3/hns3_enet.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c | 3 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.h | 3 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 27 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c | 2 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 6 drivers/net/ethernet/intel/i40e/i40e_client.c | 1 drivers/net/ethernet/intel/i40e/i40e_common.c | 4 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 7 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 8 drivers/net/ethernet/intel/i40e/i40e_type.h | 7 drivers/net/ethernet/intel/iavf/iavf_main.c | 2 drivers/net/ethernet/intel/ice/ice_lib.c | 123 +- drivers/net/ethernet/intel/ice/ice_txrx.h | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 1 drivers/net/wireless/ath/ath11k/wmi.c | 53 - drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 35 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c | 1 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 12 drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 4 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c | 19 drivers/net/wireless/quantenna/qtnfmac/event.c | 6 drivers/net/wireless/realtek/rtw88/main.h | 2 drivers/net/wireless/realtek/rtw88/phy.c | 14 drivers/net/wireless/realtek/rtw88/phy.h | 1 drivers/net/wireless/realtek/rtw88/reg.h | 5 drivers/net/wireless/realtek/rtw88/rtw8822c.c | 27 drivers/net/wireless/wl3501.h | 47 drivers/net/wireless/wl3501_cs.c | 54 - drivers/nvme/host/core.c | 3 drivers/nvme/target/io-cmd-bdev.c | 10 drivers/nvme/target/nvmet.h | 16 drivers/nvme/target/rdma.c | 4 drivers/pci/controller/pcie-iproc-msi.c | 2 drivers/pci/endpoint/functions/pci-epf-test.c | 18 drivers/pci/endpoint/pci-epc-core.c | 42 drivers/pci/probe.c | 1 drivers/pinctrl/samsung/pinctrl-exynos.c | 10 drivers/pwm/pwm-atmel.c | 2 drivers/remoteproc/qcom_q6v5_mss.c | 30 drivers/rpmsg/qcom_glink_native.c | 1 drivers/rtc/rtc-ds1307.c | 12 drivers/rtc/rtc-fsl-ftm-alarm.c | 1 drivers/scsi/qla2xxx/qla_init.c | 3 drivers/scsi/ufs/ufshcd.c | 7 drivers/staging/media/rkvdec/rkvdec.c | 2 drivers/thermal/qcom/tsens.c | 6 drivers/thermal/thermal_of.c | 7 drivers/usb/class/cdc-wdm.c | 30 drivers/usb/core/hub.c | 6 drivers/usb/dwc2/core.h | 2 drivers/usb/dwc2/gadget.c | 3 drivers/usb/dwc3/dwc3-omap.c | 5 drivers/usb/dwc3/dwc3-pci.c | 1 drivers/usb/dwc3/gadget.c | 11 drivers/usb/host/fotg210-hcd.c | 4 drivers/usb/host/xhci-ext-caps.h | 5 drivers/usb/host/xhci-pci.c | 8 drivers/usb/host/xhci.c | 6 drivers/usb/musb/mediatek.c | 2 drivers/usb/typec/tcpm/tcpm.c | 6 drivers/usb/typec/ucsi/ucsi.c | 46 drivers/usb/typec/ucsi/ucsi.h | 6 drivers/xen/gntdev.c | 4 drivers/xen/unpopulated-alloc.c | 16 fs/btrfs/file.c | 36 fs/btrfs/tree-log.c | 3 fs/ceph/export.c | 4 fs/dax.c | 35 fs/debugfs/inode.c | 2 fs/dlm/config.c | 23 fs/dlm/debug_fs.c | 1 fs/dlm/lowcomms.c | 5 fs/dlm/midcomms.c | 7 fs/ext4/fast_commit.c | 2 fs/f2fs/compress.c | 55 - fs/f2fs/data.c | 6 fs/f2fs/f2fs.h | 86 - fs/f2fs/file.c | 184 ++- fs/f2fs/gc.c | 62 - fs/f2fs/inline.c | 3 fs/f2fs/segment.c | 86 + fs/f2fs/segment.h | 14 fs/f2fs/super.c | 2 fs/fuse/cuse.c | 2 fs/fuse/file.c | 9 fs/fuse/virtio_fs.c | 3 fs/hfsplus/extents.c | 7 fs/hugetlbfs/inode.c | 5 fs/jbd2/recovery.c | 5 fs/nfs/callback_proc.c | 17 fs/nfs/flexfilelayout/flexfilelayout.c | 2 fs/nfs/inode.c | 8 fs/nfs/nfs42proc.c | 31 fs/nfs/nfs4proc.c | 56 - fs/nfsd/nfs4state.c | 24 fs/proc/generic.c | 2 fs/squashfs/file.c | 6 include/linux/cpuhotplug.h | 1 include/linux/elevator.h | 2 include/linux/i2c.h | 2 include/linux/mm.h | 32 include/linux/mm_types.h | 4 include/linux/nfs_xdr.h | 11 include/linux/pci-epc.h | 6 include/linux/pci-epf.h | 1 include/linux/pm.h | 1 include/net/page_pool.h | 12 include/trace/events/f2fs.h | 1 include/trace/events/sunrpc.h | 1 include/uapi/linux/f2fs.h | 87 + include/uapi/linux/netfilter/xt_SECMARK.h | 6 kernel/dma/swiotlb.c | 3 kernel/kexec_file.c | 4 kernel/resource.c | 4 kernel/sched/core.c | 2 kernel/sched/fair.c | 12 kernel/watchdog.c | 40 lib/kobject_uevent.c | 9 lib/nlattr.c | 2 lib/test_kasan.c | 29 mm/gup.c | 94 - mm/hugetlb.c | 11 mm/khugepaged.c | 18 mm/ksm.c | 1 mm/migrate.c | 7 mm/shmem.c | 34 net/bluetooth/hci_event.c | 2 net/bluetooth/l2cap_core.c | 4 net/bluetooth/l2cap_sock.c | 8 net/bridge/br_arp_nd_proxy.c | 4 net/core/flow_dissector.c | 6 net/core/page_pool.c | 12 net/ethtool/ioctl.c | 2 net/ethtool/netlink.c | 3 net/ipv6/ip6_vti.c | 2 net/mac80211/mlme.c | 5 net/mptcp/subflow.c | 3 net/netfilter/nf_tables_api.c | 4 net/netfilter/nfnetlink_osf.c | 2 net/netfilter/nft_set_hash.c | 10 net/netfilter/xt_SECMARK.c | 88 + net/sched/cls_flower.c | 36 net/sched/sch_taprio.c | 6 net/sctp/sm_make_chunk.c | 2 net/sctp/sm_statefuns.c | 28 net/smc/af_smc.c | 4 net/sunrpc/clnt.c | 12 net/sunrpc/svcsock.c | 2 net/sunrpc/xprt.c | 12 net/sunrpc/xprtrdma/frwr_ops.c | 2 net/sunrpc/xprtrdma/rpc_rdma.c | 3 net/sunrpc/xprtrdma/transport.c | 6 net/sunrpc/xprtrdma/verbs.c | 10 net/sunrpc/xprtrdma/xprt_rdma.h | 2 net/tipc/netlink_compat.c | 2 net/xdp/xsk_queue.h | 7 samples/bpf/tracex1_kern.c | 4 scripts/Makefile.modpost | 15 scripts/kconfig/nconf.c | 2 scripts/mod/modpost.c | 15 security/keys/trusted-keys/trusted_tpm1.c | 8 sound/firewire/bebob/bebob_stream.c | 12 sound/pci/hda/ideapad_s740_helper.c | 492 ++++++++++ sound/pci/hda/patch_hdmi.c | 4 sound/pci/hda/patch_realtek.c | 11 sound/pci/rme9652/hdsp.c | 3 sound/pci/rme9652/hdspm.c | 3 sound/pci/rme9652/rme9652.c | 3 sound/soc/codecs/rt286.c | 23 sound/soc/codecs/rt5670.c | 12 sound/soc/intel/boards/bytcr_rt5640.c | 20 sound/soc/intel/boards/sof_sdw.c | 11 sound/soc/sh/rcar/core.c | 69 + sound/soc/sh/rcar/ssi.c | 16 tools/lib/bpf/ringbuf.c | 30 tools/perf/Makefile.config | 1 tools/perf/util/Build | 7 tools/testing/selftests/drivers/net/mlxsw/mirror_gre_scale.sh | 3 tools/testing/selftests/drivers/net/mlxsw/sch_red_core.sh | 4 tools/testing/selftests/lib.mk | 4 tools/testing/selftests/net/forwarding/mirror_lib.sh | 19 tools/testing/selftests/powerpc/security/entry_flush.c | 2 tools/testing/selftests/powerpc/security/flush_utils.h | 4 tools/testing/selftests/powerpc/security/rfi_flush.c | 2 virt/kvm/kvm_main.c | 7 319 files changed, 3311 insertions(+), 1472 deletions(-)
Abhijeet Rao (1):
xhci-pci: Allow host runtime PM as default for Intel Alder Lake xHCI
Alexander Aring (4):
fs: dlm: fix debugfs dump
fs: dlm: add errno handling to check callback
fs: dlm: check on minimum msglen size
fs: dlm: flush swork on shutdown
Alexandru Ardelean (1):
iio: hid-sensors: select IIO_TRIGGERED_BUFFER under HID_SENSOR_IIO_TRIGGER
Alexey Kardashevskiy (1):
powerpc/iommu: Annotate nested lock for lockdep
Anastasia Kovaleva (1):
scsi: qla2xxx: Prevent PRLI in target mode
Andy Shevchenko (1):
usb: typec: ucsi: Put fwnode in any case during ->probe()
Anthony Wang (1):
drm/amd/display: Force vsync flip when reconfiguring MPCC
Anup Patel (1):
RISC-V: Fix error code returned by riscv_hartid_to_cpuid()
Archie Pusaka (2):
Bluetooth: Set CONF_NOT_COMPLETE as l2cap_chan default
Bluetooth: check for zapped sk before connecting
Ard Biesheuvel (4):
ARM: 9011/1: centralize phys-to-virt conversion of DT/ATAGS address
ARM: 9012/1: move device tree mapping out of linear region
ARM: 9020/1: mm: use correct section size macro to describe the FDT virtual address
ARM: 9027/1: head.S: explicitly map DT even if it lives in the first physical section
Arnd Bergmann (1):
ext4: fix debug format string warning
Axel Rasmussen (1):
userfaultfd: release page in error path to avoid BUG_ON
Ayush Garg (1):
Bluetooth: Fix incorrect status handling in LE PHY UPDATE event
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Fix error while calculating PPS out values
Baptiste Lepers (1):
sunrpc: Fix misplaced barrier in call_decode
Bart Van Assche (1):
blk-mq: Swap two calls in blk_mq_exit_queue()
Bence Csókás (1):
i2c: Add I2C_AQ_NO_REP_START adapter quirk
Benjamin Segall (1):
kvm: exit halt polling on need_resched() as well
Bjorn Andersson (1):
remoteproc: qcom_q6v5_mss: Validate p_filesz in ELF loader
Brendan Jackman (1):
libbpf: Fix signed overflow in ringbuf_process_ring
Can Guo (3):
scsi: ufs: core: Do not put UFS power into LPM if link is broken
scsi: ufs: core: Cancel rpm_dev_flush_recheck_work during system suspend
scsi: ufs: core: Narrow down fast path in system suspend path
Catalin Marinas (1):
arm64: Fix race condition on PG_dcache_clean in __sync_icache_dcache()
Chaitanya Kulkarni (2):
nvmet: add lba to sect conversion helpers
nvmet: fix inline bio check for bdev-ns
Chao Yu (13):
f2fs: move ioctl interface definitions to separated file
f2fs: fix compat F2FS_IOC_{MOVE,GARBAGE_COLLECT}_RANGE
f2fs: fix to allow migrating fully valid segment
f2fs: fix panic during f2fs_resize_fs()
f2fs: fix to align to section for fallocate() on pinned file
f2fs: fix to update last i_size if fallocate partially succeeds
f2fs: fix to avoid touching checkpointed data in get_victim()
f2fs: fix to cover __allocate_new_section() with curseg_lock
f2fs: fix to avoid accessing invalid fio in f2fs_allocate_data_block()
f2fs: avoid unneeded data copy in f2fs_ioc_move_range()
f2fs: compress: fix to free compress page correctly
f2fs: compress: fix race condition of overwrite vs truncate
f2fs: compress: fix to assign cc.cluster_idx correctly
Chris Dion (1):
SUNRPC: Handle major timeout in xprt_adjust_timeout()
Christoph Hellwig (1):
nvme: do not try to reconfigure APST when the controller is not live
Christophe JAILLET (4):
usb: fotg210-hcd: Fix an error message
usb: musb: Fix an error message
ACPI: scan: Fix a memory leak in an error handling path
xhci: Do not use GFP_KERNEL in (potentially) atomic context
Christophe Leroy (1):
powerpc/32: Statically initialise first emergency context
Chuck Lever (5):
SUNRPC: Move fault injection call sites
SUNRPC: Remove trace_xprt_transmit_queued
xprtrdma: Avoid Receive Queue wrapping
xprtrdma: Fix cwnd update ordering
xprtrdma: rpcrdma_mr_pop() already does list_del_init()
Chunfeng Yun (1):
usb: core: hub: fix race condition about TRSMRCY of resume
Claire Chang (1):
swiotlb: Fix the type of index
Colin Ian King (5):
KEYS: trusted: Fix memory leak on object td
f2fs: fix a redundant call to f2fs_balance_fs if an error occurs
dmaengine: idxd: Fix potential null dereference on pointer status fs/proc/generic.c: fix incorrect pde_is_permanent check
iio: tsl2583: Fix division by a zero lux_val
Cong Wang (1):
smc: disallow TCP_ULP in smc_setsockopt()
Dan Carpenter (1):
SUNRPC: fix ternary sign expansion bug in tracing
Dan Williams (1):
xen/unpopulated-alloc: consolidate pgmap manipulation
Dave Jiang (2):
dmaengine: idxd: fix dma device lifetime
dmaengine: idxd: fix cdev setup and free device lifetime issues
David Bauer (1):
mt76: mt76x0: disable GTK offloading
David Hildenbrand (2):
kernel/resource: make walk_system_ram_res() find all busy IORESOURCE_SYSTEM_RAM resources kernel/resource: make walk_mem_res() find all busy IORESOURCE_MEM resources
David Matlack (1):
kvm: Cap halt polling at kvm->max_halt_poll_ns
David Ward (3):
ASoC: rt286: Generalize support for ALC3263 codec
ASoC: rt286: Make RT286_SET_GPIO_* readable and writable drm/amd/display: Initialize attribute for hdcp_srm sysfs file
Dingchen (David) Zhang (1):
drm/amd/display: add handling for hdcp2 rx id list validation
Dinghao Liu (2):
iio: light: gp2ap002: Fix rumtime PM imbalance on error
iio: proximity: pulsedlight: Fix rumtime PM imbalance on error
Dmitry Baryshkov (1):
PCI: Release OF node in pci_scan_device()'s error path
Dmitry Osipenko (1):
iio: gyro: mpu3050: Fix reported temperature value
Du Cheng (1):
net: sched: tapr: prevent cycle_time == 0 in parse_taprio_schedule
Eddie James (1):
hwmon: (occ) Fix poll rate limiting
Emmanuel Grumbach (1):
mac80211: clear the beacon's CRC after channel switch
Eric Dumazet (2):
ip6_vti: proper dev_{hold|put} in ndo_[un]init methods
netfilter: nftables: avoid overflows in nft_hash_buckets()
Fabio Estevam (1):
media: rkvdec: Remove of_match_ptr()
Felix Fietkau (2):
mt76: mt7615: fix entering driver-own state on mt7663
net: ethernet: mtk_eth_soc: fix RX VLAN offload
Fernando Fernandez Mancera (1):
ethtool: fix missing NLM_F_MULTI flag when dumping
Ferry Toth (1):
usb: dwc3: pci: Enable usb2-gadget-lpm-disable for Intel Merrifield
Filipe Manana (1):
btrfs: fix race leading to unpersisted data and metadata on fsync
Frieder Schrempf (1):
can: mcp251x: fix resume from sleep before interface was brought up
Geert Uytterhoeven (1):
dt-bindings: media: renesas,vin: Make resets optional on R-Car Gen1
Greg Kroah-Hartman (4):
Revert "iommu/vt-d: Remove WO permissions on second-level paging entries" Revert "iommu/vt-d: Preset Access/Dirty bits for IOVA over FL"
kobject_uevent: remove warning in init_uevent_argv()
Linux 5.10.38
Guangbin Huang (1):
net: hns3: remediate a potential overflow risk of bd_num_list
Guangqing Zhu (1):
thermal/drivers/tsens: Fix missing put_device error
Gustavo A. R. Silva (5):
sctp: Fix out-of-bounds warning in sctp_process_asconf_param()
flow_dissector: Fix out-of-bounds warning in __skb_flow_bpf_to_target()
ethtool: ioctl: Fix out-of-bounds warning in store_link_ksettings_for_user()
wl3501_cs: Fix out-of-bounds warnings in wl3501_send_pkt
wl3501_cs: Fix out-of-bounds warnings in wl3501_mgmt_join
Hans de Goede (3):
ASoC: Intel: bytcr_rt5640: Enable jack-detect support on Asus T100TAF
ASoC: Intel: bytcr_rt5640: Add quirk for the Chuwi Hi8 tablet
ASoC: rt5670: Add a quirk for the Dell Venue 10 Pro 5055
Hao Chen (1):
net: hns3: fix for vxlan gpe tx checksum bug
Hoang Le (1):
tipc: convert dest node's address to network order
J. Bruce Fields (1):
nfsd: ensure new clients break delegations
Jack Pham (3):
usb: dwc3: gadget: Free gadget structure only after freeing endpoints
usb: dwc3: gadget: Enable suspend events
usb: typec: ucsi: Retrieve all the PDOs instead of just the first 4
Jarkko Sakkinen (2):
tpm, tpm_tis: Extend locality handling to TPM2 in tpm_tis_gen_interrupt() tpm, tpm_tis: Reserve locality in tpm_tis_resume()
Jaroslaw Gawin (1):
i40e: fix the restart auto-negotiation after FEC modified
Jeff Layton (1):
ceph: fix inode leak on getattr error in __fh_to_dentry
Jia-Ju Bai (3):
thermal: thermal_of: Fix error return code of thermal_of_populate_bind_params()
rpmsg: qcom_glink_native: fix error return code of qcom_glink_rx_data()
kernel: kexec_file: fix error return code of kexec_calculate_store_digests()
Jian Shen (1):
net: hns3: add check for HNS3_NIC_STATE_INITED in hns3_reset_notify_up_enet()
Jinzhou Su (1):
drm/amdgpu: Add mem sync flag for IB allocated by SA
Jiri Olsa (1):
perf tools: Fix dynamic libbpf link
Johannes Berg (1):
iwlwifi: pcie: make cfg vs. trans_cfg more robust
Jonathan McDowell (1):
net: stmmac: Set FIFO sizes for ipq806x
Jouni Roivas (1):
hfsplus: prevent corruption in shrinking truncate
Juergen Gross (1):
xen/gntdev: fix gntdev_mmap() error exit path
Kai Vehmanen (1):
ALSA: hda/hdmi: fix race in handling acomp ELD notification at resume
Kai-Heng Feng (1):
drm/radeon/dpm: Disable sclk switching on Oland when two 4K 60Hz monitors are connected
Kees Cook (3):
drm/radeon: Fix off-by-one power_state index heap overwrite drm/radeon: Avoid power table parsing memory leaks
debugfs: Make debugfs_allow RO after init
Kishon Vijay Abraham I (3):
PCI: endpoint: Make *_get_first_free_bar() take into account 64 bit BAR
PCI: endpoint: Add helper API to get the 'next' unreserved BAR
PCI: endpoint: Make *_free_bar() to return error codes on failure
Krzysztof Kozlowski (1):
pinctrl: samsung: use 'int' for register masks in Exynos
Kuninori Morimoto (2):
ASoC: rsnd: call rsnd_ssi_master_clk_start() from rsnd_ssi_init()
ASoC: rsnd: check all BUSIF status when error
Kuogee Hsieh (1):
drm/msm/dp: initialize audio_comp when audio starts
Lai Jiangshan (1):
KVM/VMX: Invoke NMI non-IST entry instead of IST entry
Lee Gibson (1):
qtnfmac: Fix possible buffer overflow in qtnf_event_handle_external_auth
Lu Baolu (2):
iommu/vt-d: Preset Access/Dirty bits for IOVA over FL iommu/vt-d: Remove WO permissions on second-level paging entries
Lv Yunlong (2):
ethernet:enic: Fix a use after free bug in enic_hard_start_xmit drm/i915/gt: Fix a double free in gen8_preallocate_top_level_pdp
Maciej W. Rozycki (3):
MIPS: Reinstate platform `__div64_32' handler
MIPS: Avoid DIVU in `__div64_32' is result would be zero
MIPS: Avoid handcoded DIVU in `__div64_32' altogether
Maciej Żenczykowski (1):
net: fix nla_strcmp to handle more then one trailing null character
Magnus Karlsson (1):
i40e: fix broken XDP support
Marc Kleine-Budde (2):
can: mcp251xfd: mcp251xfd_probe(): add missing can_rx_offload_del() in error path
can: m_can: m_can_tx_work_queue(): fix tx_skb race condition
Marc Zyngier (1):
arm64: entry: factor irq triage logic into macros
Marcel Hamer (1):
usb: dwc3: omap: improve extcon initialization
Mark Rutland (1):
arm64: entry: always set GIC_PRIO_PSR_I_SET during entry
Masahiro Yamada (1):
kbuild: generate Module.symvers only when vmlinux exists
Mateusz Palczewski (1):
i40e: Fix PHY type identifiers for 2.5G and 5G adapters
Matthew Wilcox (Oracle) (1):
mm: fix struct page layout on 32-bit systems
Maxim Mikityanskiy (1):
net/mlx5e: Use net_prefetchw instead of prefetchw in MPWQE TX datapath
Maximilian Luz (1):
usb: xhci: Increase timeout for HC halt
Md Haris Iqbal (2):
block/rnbd-clt: Change queue_depth type in rnbd_clt_session to size_t block/rnbd-clt: Check the return value of the function rtrs_clt_query
Miaohe Lin (4):
khugepaged: fix wrong result value for trace_mm_collapse_huge_page_isolate() mm/hugeltb: handle the error case in hugetlb_fix_reserve_counts() mm/migrate.c: fix potential indeterminate pte entry in migrate_vma_insert_page()
ksm: fix potential missing rmap_item for stable_node
Michael Chan (1):
bnxt_en: Add PCI IDs for Hyper-V VF devices.
Michael Ellerman (3):
powerpc/pseries: Stop calling printk in rtas_stop_self() powerpc/64s: Fix crashes when toggling stf barrier powerpc/64s: Fix crashes when toggling entry flush barrier
Michael Walle (1):
rtc: fsl-ftm-alarm: add MODULE_TABLE()
Michal Kalderon (1):
nvmet-rdma: Fix NULL deref when SEND is completed with error
Mihai Moldovan (1):
kconfig: nconf: stop endless search loops
Mike Marciniszyn (1):
IB/hfi1: Correct oversized ring allocation
Mikhail Durnev (1):
ASoC: rsnd: core: Check convert rate in rsnd_hw_params
Miklos Szeredi (2):
virtiofs: fix userns
cuse: prevent clone
Ming Lei (1):
blk-mq: plug request for shared sbitmap
Nikola Livic (1):
pNFS/flexfiles: fix incorrect size check in decode_nfs_fh()
Nikolay Aleksandrov (1):
net: bridge: when suppression is enabled exclude RARP packets
Nobuhiro Iwamatsu (1):
rtc: ds1307: Fix wday settings for rx8130
Odin Ugedal (1):
sched/fair: Fix unfairness caused by missing load decay
Olga Kornievskaia (1):
NFSv4.2 fix handling of sr_eof in SEEK's reply
Oliver Neukum (1):
cdc-wdm: untangle a circular dependency between callback and softint
Omar Sandoval (1):
kyber: fix out of bounds access when preempted
Pablo Neira Ayuso (3):
netfilter: xt_SECMARK: add new revision to fix structure layout
netfilter: nfnetlink_osf: Fix a missing skb_header_pointer() NULL check
netfilter: nftables: Fix a memleak from userdata error path in new objects
Pali Rohár (1):
PCI: iproc: Fix return value of iproc_msi_irq_domain_alloc()
Paolo Abeni (1):
mptcp: fix splat when closing unaccepted socket
Paul M Stillwell Jr (1):
ice: handle increasing Tx or Rx ring sizes
Paul Menzel (1):
Revert "iommu/amd: Fix performance counter initialization"
Pavel Tatashin (3):
mm/gup: check every subpage of a compound page during isolation mm/gup: return an error on migration failure
mm/gup: check for isolation errors
Paweł Chmiel (1):
clk: exynos7: Mark aclk_fsys1_200 as critical
Peng Li (1):
net: hns3: use netif_tx_disable to stop the transmit queue
Peter Collingbourne (2):
kasan: fix unit tests with CONFIG_UBSAN_LOCAL_BOUNDS enabled
arm64: mte: initialize RGSR_EL1.SEED in __cpu_setup
Peter Xu (1):
mm/hugetlb: fix F_SEAL_FUTURE_WRITE
Petr Machata (2):
selftests: mlxsw: Increase the tolerance of backlog buildup
selftests: mlxsw: Fix mausezahn invocation in ERSPAN scale test
Petr Mladek (4):
watchdog: rename __touch_watchdog() to a better descriptive name
watchdog: explicitly update timestamp when reporting softlockup watchdog/softlockup: remove logic that tried to prevent repeated reports
watchdog: fix barriers when printing backtraces from all CPUs
Phil Elwell (1):
usb: dwc2: Fix gadget DMA unmap direction
Phillip Lougher (1):
squashfs: fix divide error in calculate_skip()
Po-Hao Huang (1):
rtw88: 8822c: add LC calibration for RTL8822C
Pradeep Kumar Chitrapu (1):
ath11k: fix thermal temperature read
Qii Wang (1):
i2c: mediatek: Fix send master code at more than 1MHz
Quentin Perret (1):
sched: Fix out-of-bound access in uclamp
Rafael J. Wysocki (1):
cpufreq: intel_pstate: Use HWP if enabled by platform firmware
Ramesh Babu B (1):
net: stmmac: Clear receive all(RA) bit when promiscuous mode is off
Robin Singh (1):
drm/amd/display: fixed divide by zero kernel crash during dsc enablement
Russell Currey (1):
selftests/powerpc: Fix L1D flushing tests for Power10
Sandeep Singh (1):
xhci: Add reset resume quirk for AMD xhci controller.
Sander Vanheule (1):
mt76: mt7615: support loading EEPROM for MT7613BE
Sean Christopherson (6):
KVM: x86/mmu: Remove the defunct update_pte() paging hook
crypto: ccp: Free SEV device if SEV init fails
KVM: x86: Emulate RDPID only if RDTSCP is supported
KVM: x86: Move RDPID emulation intercept to its own enum
KVM: VMX: Do not advertise RDPID if ENABLE_RDTSCP control is unsupported
KVM: VMX: Disable preemption when probing user return MSRs
Sergei Trofimovich (1):
ia64: module: fix symbolizer crash on fdescr
Shayne Chen (1):
mt76: mt7915: fix txpower init for TSSI off chips
Shradha Todi (1):
PCI: endpoint: Fix NULL pointer dereference for ->get_features()
Sibi Sankar (1):
remoteproc: qcom_q6v5_mss: Replace ioremap with memremap
Srikar Dronamraju (1):
powerpc/smp: Set numa node before updating mask
Stefan Assmann (1):
iavf: remove duplicate free resources calls
Stéphane Marchesin (1):
drm/i915: Fix crash in auto_retire
Sumeet Pawnikar (1):
ACPI: PM: Add ACPI ID of Alder Lake Fan
Sun Ke (1):
nbd: Fix NULL pointer in flush_workqueue
Suravee Suthikulpanit (1):
iommu/amd: Remove performance counter pre-initialization test
Suzuki K Poulose (1):
coresight: Do not scan for graph if none is present
Takashi Iwai (1):
ALSA: hda/realtek: Add quirk for Lenovo Ideapad S740
Takashi Sakamoto (1):
ALSA: bebob: enable to deliver MIDI messages for multiple ports
Tejun Heo (1):
blk-iocost: fix weight updates of inner active iocgs
Tetsuo Handa (1):
Bluetooth: initialize skb_queue_head at l2cap_chan_create()
Thomas Gleixner (2):
KVM: x86: Cancel pvclock_gtod_work on module removal
KVM: x86: Prevent deadlock against tk_core.seq
Tiezhu Yang (1):
MIPS: Loongson64: Use _CACHE_UNCACHED instead of _CACHE_UNCACHED_ACCELERATED
Tong Zhang (3):
ALSA: hdsp: don't disable if not enabled
ALSA: hdspm: don't disable if not enabled
ALSA: rme9652: don't disable if not enabled
Tony Lindgren (3):
PM: runtime: Fix unpaired parent child_count for force_resume clocksource/drivers/timer-ti-dm: Prepare to handle dra7 timer wrap issue clocksource/drivers/timer-ti-dm: Handle dra7 timer wrap errata i940
Trond Myklebust (5):
NFS: nfs4_bitmask_adjust() must not change the server global bitmasks
NFS: Fix attribute bitmask in _nfs42_proc_fallocate() NFSv4.2: Always flush out writes in nfs42_proc_fallocate()
NFS: Deal correctly with attribute generation counter overflow NFSv4.x: Don't return NFS4ERR_NOMATCHING_LAYOUT if we're unmounting
Tvrtko Ursulin (1):
drm/i915/overlay: Fix active retire callback alignment
Uwe Kleine-König (1):
pwm: atmel: Fix duty cycle calculation in .get_state()
Vaibhav Jain (1):
powerpc/mm: Add cond_resched() while removing hpte mappings
Vamshi Krishna Gopal (1):
ASoC: Intel: sof_sdw: add quirk for new ADL-P Rvp
Ville Syrjälä (2):
drm/i915: Avoid div-by-zero on gen2 drm/i915: Read C0DRB3/C1DRB3 as 16 bits again
Vineet Gupta (1):
ARC: entry: fix off-by-one error in syscall number validation
Vitaly Kuznetsov (1):
KVM: nVMX: Always make an attempt to map eVMCS after migration
Vivek Goyal (4):
fuse: invalidate attrs when page writeback completes
dax: Add an enum for specifying dax wakup mode
dax: Add a wakeup mode parameter to put_unlocked_entry()
dax: Wake up all waiters after invalidating dax entry
Vladimir Isaev (2):
ARC: mm: PAE: use 40-bit physical page mask
ARC: mm: Use max_high_pfn as a HIGHMEM zone border
Vladimir Oltean (1):
net/sched: cls_flower: use ntohs for struct flow_dissector_key_ports
Wanpeng Li (1):
KVM: LAPIC: Accurately guarantee busy wait for timer to expire when using hv_timer
Wesley Cheng (1):
usb: dwc3: gadget: Return success always for kick transfer in ep queue
Wolfram Sang (1):
i2c: bail out early when RDWR parameters are wrong
Xin Long (2):
sctp: do asoc update earlier in sctp_sf_do_dupcook_a
sctp: fix a SCTP_MIB_CURRESTAB leak in sctp_sf_do_dupcook_b
Xuan Zhuo (1):
xsk: Fix for xp_aligned_validate_desc() when len == chunk_size
Yang Yingliang (1):
PCI: endpoint: Fix missing destroy_workqueue()
Yaqi Chen (1):
samples/bpf: Fix broken tracex1 due to kprobe argument change
Yi Zhuang (1):
f2fs: Fix a hungtask problem in atomic write
Yonghong Song (1):
selftests: Set CC to clang in lib.mk if LLVM is set
Yufeng Mo (3):
net: hns3: fix incorrect configuration for igu_egu_hw_err
net: hns3: initialize the message content in hclge_get_link_mode()
net: hns3: disable phy loopback setting in hclge_mac_start_phy
Yunjian Wang (1):
i40e: Fix use-after-free in i40e_client_subtask()
Yunsheng Lin (1):
net: hns3: add handling for xmit skb with recursive fraglist
Zhen Lei (4):
tpm: fix error return code in tpm2_get_cc_attrs_tbl()
ARM: 9064/1: hw_breakpoint: Do not directly check the event's overflow_handler hook xen/unpopulated-alloc: fix error return code in fill_list()
dt-bindings: serial: 8250: Remove duplicated compatible strings
mark-yw.chen (1):
Bluetooth: btusb: Enable quirk boolean flag for Mediatek Chip.
Greg Kroah-Hartman
maintainer.gitignore +1 -0
@@ -55,6 +55,7 @@ modules.order /tags /TAGS /linux +/modules-only.symvers /vmlinux /vmlinux.32 /vmlinux.symvers
Documentation/arm/memory.rst +6 -1
@@ -45,9 +45,14 @@ fffe8000 fffeffff DTCM mapping area for platforms with fffe0000 fffe7fff ITCM mapping area for platforms with ITCM mounted inside the CPU. -ffc00000 ffefffff Fixmap mapping region. Addresses provided +ffc80000 ffefffff Fixmap mapping region. Addresses provided by fix_to_virt() will be located here. +ffc00000 ffc7ffff Guard region + +ff800000 ffbfffff Permanent, fixed read-only mapping of the + firmware provided DT blob + fee00000 feffffff Mapping of PCI I/O space. This is a static mapping within the vmalloc space.
Documentation/devicetree/bindings/media/renesas,vin.yaml +29 -17
52 lines not on this page · raw message
Documentation/devicetree/bindings/serial/8250.yaml +0 -5
@@ -93,11 +93,6 @@ properties: - mediatek,mt7622-btif - mediatek,mt7623-btif - const: mediatek,mtk-btif - - items: - - enum: - - mediatek,mt7622-btif - - mediatek,mt7623-btif - - const: mediatek,mtk-btif - items: - const: mrvl,mmp-uart - const: intel,xscale-uart
Documentation/dontdiff +1 -0
@@ -178,6 +178,7 @@ mktables mktree mkutf8data modpost +modules-only.symvers modules.builtin modules.builtin.modinfo modules.nsdeps
MAINTAINERS +1 -0
@@ -6694,6 +6694,7 @@ F: Documentation/filesystems/f2fs.rst F: fs/f2fs/ F: include/linux/f2fs_fs.h F: include/trace/events/f2fs.h +F: include/uapi/linux/f2fs.h F71805F HARDWARE MONITORING DRIVER M: Jean Delvare <[email protected]>
Makefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 37 +SUBLEVEL = 38 EXTRAVERSION = NAME = Dare mighty things
@@ -1483,7 +1483,7 @@ endif # CONFIG_MODULES # make distclean Remove editor backup files, patch leftover files and the like # Directories & files removed with 'make clean' -CLEAN_FILES += include/ksym vmlinux.symvers \ +CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \ modules.builtin modules.builtin.modinfo modules.nsdeps \ compile_commands.json
arch/arc/include/asm/page.h +12 -0
@@ -7,6 +7,18 @@#include <uapi/asm/page.h> +#ifdef CONFIG_ARC_HAS_PAE40 + +#define MAX_POSSIBLE_PHYSMEM_BITS 40 +#define PAGE_MASK_PHYS (0xff00000000ull | PAGE_MASK) + +#else /* CONFIG_ARC_HAS_PAE40 */ + +#define MAX_POSSIBLE_PHYSMEM_BITS 32 +#define PAGE_MASK_PHYS PAGE_MASK + +#endif /* CONFIG_ARC_HAS_PAE40 */ +#ifndef __ASSEMBLY__#define clear_page (paddr) memset((paddr), 0, PAGE_SIZE)
arch/arc/include/asm/pgtable.h +3 -9
@@ -107,8 +107,8 @@#define ___DEF (_PAGE_PRESENT | _PAGE_CACHEABLE)/* Set of bits not changed in pte_modify */ -#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL) - +#define _PAGE_CHG_MASK (PAGE_MASK_PHYS | _PAGE_ACCESSED | _PAGE_DIRTY | \ + _PAGE_SPECIAL)/* More Abbrevaited helpers */ #define PAGE_U_NONE __pgprot(___DEF)#define PAGE_U_R __pgprot(___DEF | _PAGE_READ)
@@ -132,13 +132,7 @@#define PTE_BITS_IN_PD0 (_PAGE_GLOBAL | _PAGE_PRESENT | _PAGE_HW_SZ)#define PTE_BITS_RWX (_PAGE_EXECUTE | _PAGE_WRITE | _PAGE_READ) -#ifdef CONFIG_ARC_HAS_PAE40 -#define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE) -#define MAX_POSSIBLE_PHYSMEM_BITS 40 -#else -#define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE) -#define MAX_POSSIBLE_PHYSMEM_BITS 32 -#endif +#define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK_PHYS | _PAGE_CACHEABLE)/************************************************************************** * Mapping of vm_flags (Generic VM) to PTE flags (arch specific)
arch/arc/include/uapi/asm/page.h +0 -1
@@ -33,5 +33,4 @@#define PAGE_MASK (~(PAGE_SIZE-1)) -#endif /* _UAPI__ASM_ARC_PAGE_H */
arch/arc/kernel/entry.S +2 -2
@@ -177,7 +177,7 @@ tracesys: ; Do the Sys Call as we normally would. ; Validate the Sys Call number - cmp r8, NR_syscalls + cmp r8, NR_syscalls - 1 mov.hi r0, -ENOSYS bhi tracesys_exit
@@ -255,7 +255,7 @@ ENTRY(EV_Trap) ;============ Normal syscall case ; syscall num shd not exceed the total system calls avail - cmp r8, NR_syscalls + cmp r8, NR_syscalls - 1 mov.hi r0, -ENOSYS bhi .Lret_from_system_call
arch/arc/mm/init.c +10 -1
@@ -158,7 +158,16 @@ void __init setup_arch_memory(void) min_high_pfn =PFN_DOWN (high_mem_start); max_high_pfn =PFN_DOWN (high_mem_start + high_mem_sz); - max_zone_pfn[ZONE_HIGHMEM ] = min_low_pfn; +/* +* max_high_pfn should be ok here for both HIGHMEM and HIGHMEM+PAE. +* For HIGHMEM without PAE max_high_pfn should be less than +* min_low_pfn to guarantee that these two regions don't overlap. +* For PAE case highmem is greater than lowmem, so it is natural +* to use max_high_pfn. +* +* In both cases, holes should be handled by pfn_valid(). +*/ + max_zone_pfn[ZONE_HIGHMEM ] = max_high_pfn; high_memory = (void *)(min_high_pfn <<PAGE_SHIFT );kmap_init ();
arch/arc/mm/ioremap.c +3 -2
@@ -53,9 +53,10 @@ EXPORT_SYMBOL(ioremap);void __iomem *ioremap_prot (phys_addr_t paddr,unsigned long size,unsigned long flags) { +unsigned int off;unsigned long vaddr;struct vm_struct *area; -phys_addr_t off, end; +phys_addr_t end;pgprot_t prot =__pgprot (flags);/* Don't allow wraparound, zero size */
@@ -72,7 +73,7 @@ void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,/* Mappings have to be page-aligned */ off = paddr & ~PAGE_MASK ; - paddr &=PAGE_MASK ; + paddr &=PAGE_MASK_PHYS ; size =PAGE_ALIGN (end +1 ) - paddr;/*
arch/arc/mm/tlb.c +1 -1
@@ -576,7 +576,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr_unaligned, pte_t *ptep) {unsigned long vaddr = vaddr_unaligned &PAGE_MASK ; -phys_addr_t paddr =pte_val (*ptep) &PAGE_MASK ; +phys_addr_t paddr =pte_val (*ptep) &PAGE_MASK_PHYS ;struct page *page =pfn_to_page (pte_pfn (*ptep));create_tlb (vma, vaddr, ptep);
arch/arm/boot/dts/dra7-l4.dtsi +2 -2
@@ -1168,7 +1168,7 @@ timer2: timer@0 { }; }; - target-module@34000 { /* 0x48034000, ap 7 46.0 */ + timer3_target: target-module@34000 { /* 0x48034000, ap 7 46.0 */ compatible = "ti,sysc-omap4-timer", "ti,sysc"; reg = <0x34000 0x4>, <0x34010 0x4>;
@@ -1195,7 +1195,7 @@ timer3: timer@0 { }; }; - target-module@36000 { /* 0x48036000, ap 9 4e.0 */ + timer4_target: target-module@36000 { /* 0x48036000, ap 9 4e.0 */ compatible = "ti,sysc-omap4-timer", "ti,sysc"; reg = <0x36000 0x4>, <0x36010 0x4>;
arch/arm/boot/dts/dra7.dtsi +20 -0
@@ -46,6 +46,7 @@ aliases { timer { compatible = "arm,armv7-timer"; + status = "disabled"; /* See ARM architected timer wrap erratum i940 */ interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
@@ -1090,3 +1091,22 @@ timer@0 { assigned-clock-parents = <&sys_32k_ck>; }; }; + +/* Local timers, see ARM architected timer wrap erratum i940 */ +&timer3_target { + ti,no-reset-on-init; + ti,no-idle; + timer@0 { + assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER3_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; + }; +}; + +&timer4_target { + ti,no-reset-on-init; + ti,no-idle; + timer@0 { + assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER4_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; + }; +};
arch/arm/include/asm/fixmap.h +1 -1
@@ -2,7 +2,7 @@#ifndef _ASM_FIXMAP_H#define _ASM_FIXMAP_H -#define FIXADDR_START 0xffc00000UL +#define FIXADDR_START 0xffc80000UL#define FIXADDR_END 0xfff00000UL#define FIXADDR_TOP (FIXADDR_END - PAGE_SIZE)
arch/arm/include/asm/memory.h +5 -0
@@ -67,6 +67,10 @@*/ #define XIP_VIRT_ADDR (physaddr) (MODULES_VADDR + ((physaddr) & 0x000fffff)) +#define FDT_FIXED_BASE UL(0xff800000) +#define FDT_FIXED_SIZE (2 * SECTION_SIZE) +#define FDT_VIRT_BASE (physbase) ((void *)(FDT_FIXED_BASE | (physbase) % SECTION_SIZE)) +#if !defined(CONFIG_SMP ) && !defined(CONFIG_ARM_LPAE )/* * Allow 16MB-aligned ioremap pages
@@ -107,6 +111,7 @@ extern unsigned long vectors_base;#define MODULES_VADDR PAGE_OFFSET#define XIP_VIRT_ADDR (physaddr) (physaddr) +#define FDT_VIRT_BASE (physbase) ((void *)(physbase))#endif /* !CONFIG_MMU */
arch/arm/include/asm/prom.h +2 -2
@@ -9,12 +9,12 @@#ifdef CONFIG_OF -extern const struct machine_desc *setup_machine_fdt (unsigned int dt_phys); +extern const struct machine_desc *setup_machine_fdt (void *dt_virt);extern void __init arm_dt_init_cpu_maps (void );#else /* CONFIG_OF */ -static inline const struct machine_desc *setup_machine_fdt (unsigned int dt_phys) +static inline const struct machine_desc *setup_machine_fdt (void *dt_virt) {return NULL ; }
arch/arm/kernel/atags.h +2 -2
@@ -2,11 +2,11 @@void convert_to_tag_list (struct tag *tags);#ifdef CONFIG_ATAGS -const struct machine_desc *setup_machine_tags (phys_addr_t __atags_pointer, +const struct machine_desc *setup_machine_tags (void *__atags_vaddr,unsigned int machine_nr);#else static inline const struct machine_desc *__init __noreturn -setup_machine_tags (phys_addr_t __atags_pointer,unsigned int machine_nr) +setup_machine_tags (void *__atags_vaddr,unsigned int machine_nr) {early_print ("no ATAGS support: can't continue\n" );while (true);
arch/arm/kernel/atags_parse.c +3 -3
@@ -174,7 +174,7 @@ static void __init squash_mem_tags(struct tag *tag) }const struct machine_desc *__init -setup_machine_tags (phys_addr_t __atags_pointer,unsigned int machine_nr) +setup_machine_tags (void *atags_vaddr,unsigned int machine_nr) {struct tag *tags = (struct tag *)&default_tags;const struct machine_desc *mdesc =NULL , *p;
@@ -195,8 +195,8 @@ setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)if (!mdesc)return NULL ; -if (__atags_pointer) - tags =phys_to_virt (__atags_pointer); +if (atags_vaddr) + tags = atags_vaddr;else if (mdesc->atag_offset) tags = (void *)(PAGE_OFFSET + mdesc->atag_offset);
arch/arm/kernel/devtree.c +3 -3
@@ -203,12 +203,12 @@ static const void * __init arch_get_next_mach(const char *const **match)/** * setup_machine_fdt - Machine setup when an dtb was passed to the kernel -* @dt_phys: physical address of dt blob +* @dt_virt: virtual address of dt blob * * If a dtb was passed to the kernel in r2, then use it to choose the * correct machine_desc and to setup the system. */ -const struct machine_desc *__init setup_machine_fdt (unsigned int dt_phys) +const struct machine_desc *__init setup_machine_fdt (void *dt_virt) {const struct machine_desc *mdesc, *mdesc_best =NULL ;
@@ -221,7 +221,7 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) mdesc_best = &__mach_desc_GENERIC_DT;#endif -if (!dt_phys || !early_init_dt_verify (phys_to_virt (dt_phys))) +if (!dt_virt || !early_init_dt_verify (dt_virt))return NULL ; mdesc =of_flat_dt_match_machine (mdesc_best, arch_get_next_mach);
arch/arm/kernel/head.S +4 -5
@@ -274,11 +274,10 @@ __create_page_tables: * We map 2 sections in case the ATAGs/DTB crosses a section boundary. */ mov r0, r2, lsr #SECTION_SHIFT - movs r0, r0, lsl #SECTION_SHIFT - subne r3, r0, r8 - addne r3, r3, #PAGE_OFFSET - addne r3, r4, r3, lsr #(SECTION_SHIFT - PMD_ORDER) - orrne r6, r7, r0 + cmp r2, #0 + ldrne r3, =FDT_FIXED_BASE >> (SECTION_SHIFT - PMD_ORDER) + addne r3, r3, r4 + orrne r6, r7, r0, lsl #SECTION_SHIFT strne r6, [r3], #1 << PMD_ORDER addne r6, r6, #1 << SECTION_SHIFT strne r6, [r3]
arch/arm/kernel/hw_breakpoint.c +1 -1
@@ -886,7 +886,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs) info->trigger = addr;pr_debug ("breakpoint fired: address = 0x%x\n" , addr);perf_bp_event (bp, regs); -if (!bp->overflow_handler) +if (is_default_overflow_handler (bp))enable_single_step (bp, addr); goto unlock; }
arch/arm/kernel/setup.c +14 -5
@@ -18,6 +18,7 @@#include <linux/of_platform.h> #include <linux/init.h> #include <linux/kexec.h> +#include <linux/libfdt.h> #include <linux/of_fdt.h> #include <linux/cpu.h> #include <linux/interrupt.h>
@@ -1081,19 +1082,27 @@ void __init hyp_mode_check(void)void __init setup_arch (char **cmdline_p) { -const struct machine_desc *mdesc; +const struct machine_desc *mdesc =NULL ; +void *atags_vaddr =NULL ; + +if (__atags_pointer) + atags_vaddr =FDT_VIRT_BASE (__atags_pointer);setup_processor (); - mdesc =setup_machine_fdt (__atags_pointer); +if (atags_vaddr) { + mdesc =setup_machine_fdt (atags_vaddr); +if (mdesc) +memblock_reserve (__atags_pointer, +fdt_totalsize (atags_vaddr)); + }if (!mdesc) - mdesc =setup_machine_tags (__atags_pointer, __machine_arch_type); + mdesc =setup_machine_tags (atags_vaddr, __machine_arch_type);if (!mdesc) {early_print ("\nError: invalid dtb and unrecognized/unsupported machine ID\n" );early_print (" r1=0x%08x, r2=0x%08x\n" , __machine_arch_type, __atags_pointer);if (__atags_pointer) -early_print (" r2[]=%*ph\n" ,16 , -phys_to_virt (__atags_pointer)); +early_print (" r2[]=%*ph\n" ,16 , atags_vaddr);dump_machine_table (); }
arch/arm/mm/init.c +0 -1
@@ -223,7 +223,6 @@ void __init arm_memblock_init(const struct machine_desc *mdesc)if (mdesc->reserve) mdesc->reserve (); -early_init_fdt_reserve_self ();early_init_fdt_scan_reserved_mem ();/* reserve memory for DMA contiguous allocations */
arch/arm/mm/mmu.c +14 -6
@@ -39,6 +39,8 @@#include "mm.h" #include "tcm.h" +extern unsigned long __atags_pointer; +/* * empty_zero_page is a special page that is used for * zero-initialized data and COW.
@@ -946,7 +948,7 @@ static void __init create_mapping(struct map_desc *md)return ; } -if ((md->type ==MT_DEVICE || md->type ==MT_ROM ) && +if (md->type ==MT_DEVICE && md->virtual >=PAGE_OFFSET && md->virtual <FIXADDR_START && (md->virtual <VMALLOC_START || md->virtual >=VMALLOC_END )) { pr_warn("BUG: mapping for 0x%08llx at 0x%08lx out of vmalloc space\n",
@@ -1333,6 +1335,15 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)for (addr =VMALLOC_START ; addr < (FIXADDR_TOP &PMD_MASK ); addr +=PMD_SIZE )pmd_clear (pmd_off_k (addr)); +if (__atags_pointer) { +/* create a read-only mapping of the device tree */ + map.pfn =__phys_to_pfn (__atags_pointer &SECTION_MASK ); + map.virtual =FDT_FIXED_BASE ; + map.length =FDT_FIXED_SIZE ; + map.type =MT_ROM ; +create_mapping (&map); + } +/* * Map the kernel if it is XIP. * It is always first in the modulearea.
@@ -1489,8 +1500,7 @@ static void __init map_lowmem(void) }#ifdef CONFIG_ARM_PV_FIXUP -extern unsigned long __atags_pointer; -typedef void pgtables_remap (long long offset,unsigned long pgd,void *bdata); +typedef void pgtables_remap (long long offset,unsigned long pgd);pgtables_remap lpae_pgtables_remap_asm;/*
@@ -1503,7 +1513,6 @@ static void __init early_paging_init(const struct machine_desc *mdesc)unsigned long pa_pgd;unsigned int cr, ttbcr;long long offset; -void *boot_data;if (!mdesc->pv_fixup)return ;
@@ -1520,7 +1529,6 @@ static void __init early_paging_init(const struct machine_desc *mdesc)*/ lpae_pgtables_remap = (pgtables_remap *)(unsigned long )__pa (lpae_pgtables_remap_asm); pa_pgd =__pa (swapper_pg_dir); - boot_data =__va (__atags_pointer);barrier (); pr_info("Switching physical address space to 0x%08llx\n",
@@ -1556,7 +1564,7 @@ static void __init early_paging_init(const struct machine_desc *mdesc)* needs to be assembly. It's fairly simple, as we're using the * temporary tables setup by the initial assembly code. */ -lpae_pgtables_remap (offset, pa_pgd, boot_data); +lpae_pgtables_remap (offset, pa_pgd);/* Re-enable the caches and cacheable TLB walks */ asmvolatile ("mcr p15, 0, %0, c2, c0, 2" : :"r" (ttbcr));
arch/arm/mm/pv-fixup-asm.S +2 -2
@@ -39,8 +39,8 @@ ENTRY(lpae_pgtables_remap_asm) /* Update level 2 entries for the boot data */ add r7, r2, #0x1000 - add r7, r7, r3, lsr #SECTION_SHIFT - L2_ORDER - bic r7, r7, #(1 << L2_ORDER) - 1 + movw r3, #FDT_FIXED_BASE >> (SECTION_SHIFT - L2_ORDER) + add r7, r7, r3 ldrd r4, r5, [r7] adds r4, r4, r0 adc r5, r5, r1
arch/arm64/include/asm/daifflags.h +3 -0
@@ -131,6 +131,9 @@ static inline void local_daif_inherit(struct pt_regs *regs)if (interrupts_enabled (regs))trace_hardirqs_on (); +if (system_uses_irq_prio_masking ()) +gic_write_pmr (regs->pmr_save); +/* * We can't use local_daif_restore(regs->pstate) here as * system_has_prio_mask_debugging() won't restore the I bit if it can
arch/arm64/kernel/entry-common.c +0 -17
@@ -178,14 +178,6 @@ static void noinstr el1_dbg(struct pt_regs *regs, unsigned long esr) {unsigned long far =read_sysreg (far_el1); -/* -* The CPU masked interrupts, and we are leaving them masked during -* do_debug_exception(). Update PMR as if we had called -* local_daif_mask(). -*/ -if (system_uses_irq_prio_masking ()) -gic_write_pmr (GIC_PRIO_IRQON |GIC_PRIO_PSR_I_SET ); -arm64_enter_el1_dbg (regs);do_debug_exception (far, esr, regs);arm64_exit_el1_dbg (regs);
@@ -350,9 +342,6 @@ static void noinstr el0_dbg(struct pt_regs *regs, unsigned long esr)/* Only watchpoints write FAR_EL1, otherwise its UNKNOWN */ unsigned long far =read_sysreg (far_el1); -if (system_uses_irq_prio_masking ()) -gic_write_pmr (GIC_PRIO_IRQON |GIC_PRIO_PSR_I_SET ); -enter_from_user_mode ();do_debug_exception (far, esr, regs);local_daif_restore (DAIF_PROCCTX_NOIRQ );
@@ -360,9 +349,6 @@ static void noinstr el0_dbg(struct pt_regs *regs, unsigned long esr) static void noinstr el0_svc(struct pt_regs *regs) { -if (system_uses_irq_prio_masking ()) -gic_write_pmr (GIC_PRIO_IRQON |GIC_PRIO_PSR_I_SET ); -enter_from_user_mode ();do_el0_svc (regs); }
@@ -437,9 +423,6 @@ static void noinstr el0_cp15(struct pt_regs *regs, unsigned long esr) static void noinstr el0_svc_compat(struct pt_regs *regs) { -if (system_uses_irq_prio_masking ()) -gic_write_pmr (GIC_PRIO_IRQON |GIC_PRIO_PSR_I_SET ); -enter_from_user_mode ();do_el0_svc_compat (regs); }
arch/arm64/kernel/entry.S +40 -45
128 lines not on this page · raw message
arch/arm64/mm/flush.c +3 -1
@@ -55,8 +55,10 @@ void __sync_icache_dcache(pte_t pte) {struct page *page =pte_page (pte); -if (!test_and_set_bit (PG_dcache_clean, &page->flags)) +if (!test_bit (PG_dcache_clean, &page->flags)) {sync_icache_aliases (page_address (page),page_size (page)); +set_bit (PG_dcache_clean, &page->flags); + } }EXPORT_SYMBOL_GPL (__sync_icache_dcache);
arch/arm64/mm/proc.S +12 -0
@@ -444,6 +444,18 @@ SYM_FUNC_START(__cpu_setup) mov x10, #(SYS_GCR_EL1_RRND | SYS_GCR_EL1_EXCL_MASK) msr_s SYS_GCR_EL1, x10 + /* + * If GCR_EL1.RRND=1 is implemented the same way as RRND=0, then + * RGSR_EL1.SEED must be non-zero for IRG to produce + * pseudorandom numbers. As RGSR_EL1 is UNKNOWN out of reset, we + * must initialize it. + */ + mrs x10, CNTVCT_EL0 + ands x10, x10, #SYS_RGSR_EL1_SEED_MASK + csinc x10, x10, xzr, ne + lsl x10, x10, #SYS_RGSR_EL1_SEED_SHIFT + msr_s SYS_RGSR_EL1, x10 + /* clear any pending tag check faults in TFSR*_EL1 */ msr_s SYS_TFSR_EL1, xzr msr_s SYS_TFSRE0_EL1, xzr
arch/ia64/include/asm/module.h +5 -1
@@ -14,16 +14,20 @@struct elf64_shdr ;/* forward declration */ struct mod_arch_specific { +/* Used only at module load time. */ struct elf64_shdr *core_plt;/* core PLT section */ struct elf64_shdr *init_plt;/* init PLT section */ struct elf64_shdr *got;/* global offset table */ struct elf64_shdr *opd;/* official procedure descriptors */ struct elf64_shdr *unwind;/* unwind-table section */ unsigned long gp;/* global-pointer for module */ +unsigned int next_got_entry;/* index of next available got entry */ +/* Used at module run and cleanup time. */ void *core_unw_table;/* core unwind-table cookie returned by unwinder */ void *init_unw_table;/* init unwind-table cookie returned by unwinder */ -unsigned int next_got_entry;/* index of next available got entry */ +void *opd_addr;/* symbolize uses .opd to get to actual function */ +unsigned long opd_size; };#define ARCH_SHF_SMALL SHF_IA_64_SHORT
arch/ia64/kernel/module.c +25 -4
@@ -905,9 +905,31 @@ register_unwind_table (struct module *mod)int module_finalize (const Elf_Ehdr *hdr,const Elf_Shdr *sechdrs,struct module *mod) { +struct mod_arch_specific *mas = &mod->arch; +DEBUGP ("%s: init: entry=%p\n" , __func__, mod->init); -if (mod->arch.unwind) +if (mas->unwind)register_unwind_table (mod); + +/* +* ".opd" was already relocated to the final destination. Store +* it's address for use in symbolizer. +*/ + mas->opd_addr = (void *)mas->opd->sh_addr; + mas->opd_size = mas->opd->sh_size; + +/* +* Module relocation was already done at this point. Section +* headers are about to be deleted. Wipe out load-time context. +*/ + mas->core_plt =NULL ; + mas->init_plt =NULL ; + mas->got =NULL ; + mas->opd =NULL ; + mas->unwind =NULL ; + mas->gp =0 ; + mas->next_got_entry =0 ; +return 0 ; }
@@ -926,10 +948,9 @@ module_arch_cleanup (struct module *mod)void *dereference_module_function_descriptor (struct module *mod,void *ptr) { -Elf64_Shdr *opd = mod->arch.opd; +struct mod_arch_specific *mas = &mod->arch; -if (ptr < (void *)opd->sh_addr || - ptr >= (void *)(opd->sh_addr + opd->sh_size)) +if (ptr < mas->opd_addr || ptr >= mas->opd_addr + mas->opd_size)return ptr;return dereference_function_descriptor (ptr);
arch/mips/include/asm/div64.h +39 -16
87 lines not on this page · raw message
arch/mips/kernel/cpu-probe.c +0 -3
@@ -1739,7 +1739,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)set_isa (c,MIPS_CPU_ISA_M64R2 );break ; } - c->writecombine = _CACHE_UNCACHED_ACCELERATED; c->ases |= (MIPS_ASE_LOONGSON_MMI |MIPS_ASE_LOONGSON_EXT |MIPS_ASE_LOONGSON_EXT2 );break ;
@@ -1769,7 +1768,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)* register, we correct it here. */ c->options |=MIPS_CPU_FTLB |MIPS_CPU_TLBINV |MIPS_CPU_LDPTE ; - c->writecombine = _CACHE_UNCACHED_ACCELERATED; c->ases |= (MIPS_ASE_LOONGSON_MMI |MIPS_ASE_LOONGSON_CAM |MIPS_ASE_LOONGSON_EXT |MIPS_ASE_LOONGSON_EXT2 ); c->ases &= ~MIPS_ASE_VZ ;/* VZ of Loongson-3A2000/3000 is incomplete */
@@ -1780,7 +1778,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)set_elf_platform (cpu,"loongson3a" );set_isa (c,MIPS_CPU_ISA_M64R2 );decode_cpucfg (c); - c->writecombine = _CACHE_UNCACHED_ACCELERATED;break ;default :panic ("Unknown Loongson Processor ID!" );
arch/powerpc/kernel/head_32.h +1 -5
@@ -338,11 +338,7 @@ lis r1, emergency_ctx@ha#endif lwz r1, emergency_ctx@l(r1) - cmpwi cr1, r1, 0 - bne cr1, 1f - lis r1, init_thread_union@ha - addi r1, r1, init_thread_union@l -1: addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE + addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE EXCEPTION_PROLOG_2 SAVE_NVGPRS(r11) addi r3, r1, STACK_FRAME_OVERHEAD
arch/powerpc/kernel/iommu.c +2 -2
@@ -1050,7 +1050,7 @@ int iommu_take_ownership(struct iommu_table *tbl)spin_lock_irqsave (&tbl->large_pool.lock, flags);for (i =0 ; i < tbl->nr_pools; i++) -spin_lock (&tbl->pools[i].lock); +spin_lock_nest_lock (&tbl->pools[i].lock, &tbl->large_pool.lock);iommu_table_release_pages (tbl);
@@ -1078,7 +1078,7 @@ void iommu_release_ownership(struct iommu_table *tbl)spin_lock_irqsave (&tbl->large_pool.lock, flags);for (i =0 ; i < tbl->nr_pools; i++) -spin_lock (&tbl->pools[i].lock); +spin_lock_nest_lock (&tbl->pools[i].lock, &tbl->large_pool.lock);memset (tbl->it_map,0 , sz);
arch/powerpc/kernel/setup_32.c +1 -1
@@ -164,7 +164,7 @@ void __init irqstack_early_init(void) }#ifdef CONFIG_VMAP_STACK -void *emergency_ctx[NR_CPUS ]__ro_after_init ; +void *emergency_ctx[NR_CPUS ]__ro_after_init = {[0 ] = &init_stack};void __init emergency_stack_init (void ) {
arch/powerpc/kernel/smp.c +3 -3
@@ -1442,6 +1442,9 @@ void start_secondary(void *unused)vdso_getcpu_init ();#endif +set_numa_node (numa_cpu_lookup_table[cpu]); +set_numa_mem (local_memory_node (numa_cpu_lookup_table[cpu])); +/* Update topology CPU masks */ add_cpu_to_masks (cpu);
@@ -1460,9 +1463,6 @@ void start_secondary(void *unused) shared_caches = true; } -set_numa_node (numa_cpu_lookup_table[cpu]); -set_numa_mem (local_memory_node (numa_cpu_lookup_table[cpu])); -smp_wmb ();notify_cpu_starting (cpu);set_cpu_online (cpu, true);
arch/powerpc/lib/feature-fixups.c +32 -3
@@ -14,6 +14,7 @@#include <linux/string.h> #include <linux/init.h> #include <linux/sched/mm.h> +#include <linux/stop_machine.h> #include <asm/cputable.h> #include <asm/code-patching.h> #include <asm/page.h>
@@ -227,11 +228,25 @@ static void do_stf_exit_barrier_fixups(enum stf_barrier_type types) : "unknown"); } +static int __do_stf_barrier_fixups (void *data) +{ +enum stf_barrier_type *types = data; + +do_stf_entry_barrier_fixups (*types); +do_stf_exit_barrier_fixups (*types); + +return 0 ; +}void do_stf_barrier_fixups (enum stf_barrier_type types) { -do_stf_entry_barrier_fixups (types); -do_stf_exit_barrier_fixups (types); +/* +* The call to the fallback entry flush, and the fallback/sync-ori exit +* flush can not be safely patched in/out while other CPUs are executing +* them. So call __do_stf_barrier_fixups() on one CPU while all other CPUs +* spin in the stop machine core with interrupts hard disabled. +*/ +stop_machine (__do_stf_barrier_fixups, &types,NULL ); }void do_uaccess_flush_fixups (enum l1d_flush_type types)
@@ -284,8 +299,9 @@ void do_uaccess_flush_fixups(enum l1d_flush_type types) : "unknown"); } -void do_entry_flush_fixups (enum l1d_flush_type types) +static int __do_entry_flush_fixups (void *data) { +enum l1d_flush_type types = *(enum l1d_flush_type *)data;unsigned int instrs[3 ], *dest;long *start, *end;int i;
@@ -354,6 +370,19 @@ void do_entry_flush_fixups(enum l1d_flush_type types) : "ori type" : (types &L1D_FLUSH_MTTRIG ) ?"mttrig type" : "unknown"); + +return 0 ; +} + +void do_entry_flush_fixups (enum l1d_flush_type types) +{ +/* +* The call to the fallback flush can not be safely patched in/out while +* other CPUs are executing it. So call __do_entry_flush_fixups() on one +* CPU while all other CPUs spin in the stop machine core with interrupts +* hard disabled. +*/ +stop_machine (__do_entry_flush_fixups, &types,NULL ); }void do_rfi_flush_fixups (enum l1d_flush_type types)
arch/powerpc/mm/book3s64/hash_utils.c +12 -1
@@ -336,7 +336,7 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,int htab_remove_mapping (unsigned long vstart,unsigned long vend,int psize,int ssize) { -unsigned long vaddr; +unsigned long vaddr, time_limit;unsigned int step, shift;int rc;int ret =0 ;
@@ -349,8 +349,19 @@ int htab_remove_mapping(unsigned long vstart, unsigned long vend,/* Unmap the full range specificied */ vaddr =ALIGN_DOWN (vstart, step); + time_limit = jiffies +HZ ; +for (;vaddr < vend; vaddr += step) { rc = mmu_hash_ops.hpte_removebolted (vaddr, psize, ssize); + +/* +* For large number of mappings introduce a cond_resched() +* to prevent softlockup warnings. +*/ +if (time_after (jiffies, time_limit)) { +cond_resched (); + time_limit = jiffies +HZ ; + }if (rc == -ENOENT ) { ret = -ENOENT ;continue ;
arch/powerpc/platforms/pseries/hotplug-cpu.c +0 -3
@@ -47,9 +47,6 @@ static void rtas_stop_self(void)BUG_ON (rtas_stop_self_token ==RTAS_UNKNOWN_SERVICE ); -printk ("cpu %u (hwid %u) Ready to die...\n" , -smp_processor_id (),hard_smp_processor_id ()); -rtas_call_unlocked (&args, rtas_stop_self_token,0 ,1 ,NULL );panic ("Alas, I survived.\n" );
arch/riscv/kernel/smp.c +1 -1
@@ -54,7 +54,7 @@ int riscv_hartid_to_cpuid(int hartid)return i;pr_err ("Couldn't find cpu id for hartid [%d]\n" , hartid); -return i; +return -ENOENT ; }void riscv_cpuid_to_hartid_mask (const struct cpumask *in,struct cpumask *out)
arch/x86/include/asm/idtentry.h +15 -0
@@ -588,6 +588,21 @@ DECLARE_IDTENTRY_RAW(X86_TRAP_MC, exc_machine_check);#endif /* NMI */ + +#if defined(CONFIG_X86_64 ) &&IS_ENABLED (CONFIG_KVM_INTEL ) +/* +* Special NOIST entry point for VMX which invokes this on the kernel +* stack. asm_exc_nmi() requires an IST to work correctly vs. the NMI +* 'executing' marker. +* +* On 32bit this just uses the regular NMI entry point because 32-bit does +* not have ISTs. +*/ +DECLARE_IDTENTRY (X86_TRAP_NMI , exc_nmi_noist); +#else +#define asm_exc_nmi_noist asm_exc_nmi +#endif +DECLARE_IDTENTRY_NMI (X86_TRAP_NMI , exc_nmi);#ifdef CONFIG_XEN_PV DECLARE_IDTENTRY_RAW (X86_TRAP_NMI , xenpv_exc_nmi);
arch/x86/include/asm/kvm_host.h +1 -3
@@ -358,8 +358,6 @@ struct kvm_mmu {int (*sync_page)(struct kvm_vcpu *vcpu,struct kvm_mmu_page *sp);void (*invlpg)(struct kvm_vcpu *vcpu,gva_t gva,hpa_t root_hpa); -void (*update_pte)(struct kvm_vcpu *vcpu,struct kvm_mmu_page *sp, -u64 *spte,const void *pte);hpa_t root_hpa;gpa_t root_pgd;union kvm_mmu_role mmu_role;
@@ -1019,7 +1017,6 @@ struct kvm_arch {struct kvm_vm_stat {ulong mmu_shadow_zapped;ulong mmu_pte_write; -ulong mmu_pte_updated;ulong mmu_pde_zapped;ulong mmu_flooded;ulong mmu_recycled;
@@ -1671,6 +1668,7 @@ int kvm_pv_send_ipi(struct kvm *kvm, unsigned long ipi_bitmap_low, unsigned long icr, int op_64_bit);void kvm_define_user_return_msr (unsigned index,u32 msr); +int kvm_probe_user_return_msr (u32 msr);int kvm_set_user_return_msr (unsigned index,u64 val,u64 mask);u64 kvm_scale_tsc (struct kvm_vcpu *vcpu,u64 tsc);
arch/x86/kernel/nmi.c +10 -0
@@ -524,6 +524,16 @@ DEFINE_IDTENTRY_RAW(exc_nmi)mds_user_clear_cpu_buffers (); } +#if defined(CONFIG_X86_64 ) &&IS_ENABLED (CONFIG_KVM_INTEL ) +DEFINE_IDTENTRY_RAW (exc_nmi_noist) +{ +exc_nmi (regs); +} +#endif +#if IS_MODULE (CONFIG_KVM_INTEL ) +EXPORT_SYMBOL_GPL (asm_exc_nmi_noist); +#endif +void stop_nmi (void ) { ignore_nmis++;
arch/x86/kvm/cpuid.c +2 -1
@@ -572,7 +572,8 @@ static int __do_cpuid_func_emulated(struct kvm_cpuid_array *array, u32 func)case 7 : entry->flags |=KVM_CPUID_FLAG_SIGNIFCANT_INDEX ; entry->eax =0 ; - entry->ecx =F (RDPID ); +if (kvm_cpu_cap_has (X86_FEATURE_RDTSCP )) + entry->ecx =F (RDPID ); ++array->nent;default :break ;
arch/x86/kvm/emulate.c +1 -1
@@ -4502,7 +4502,7 @@ static const struct opcode group8[] = {* from the register case of group9. */ static const struct gprefix pfx_0f_c7_7 = { -N ,N ,N ,II (DstMem | ModRM | Op3264 | EmulateOnUD, em_rdpid, rdtscp), +N ,N ,N ,II (DstMem | ModRM | Op3264 | EmulateOnUD, em_rdpid, rdpid), };
arch/x86/kvm/kvm_emulate.h +1 -0
@@ -468,6 +468,7 @@ enum x86_intercept { x86_intercept_clgi, x86_intercept_skinit, x86_intercept_rdtscp, + x86_intercept_rdpid, x86_intercept_icebp, x86_intercept_wbinvd, x86_intercept_monitor,
arch/x86/kvm/lapic.c +1 -1
@@ -1908,8 +1908,8 @@ void kvm_lapic_expired_hv_timer(struct kvm_vcpu *vcpu)if (!apic->lapic_timer.hv_timer_in_use) goto out;WARN_ON (rcuwait_active (&vcpu->wait)); -cancel_hv_timer (apic);apic_timer_expired (apic, false); +cancel_hv_timer (apic);if (apic_lvtt_period (apic) && apic->lapic_timer.period) {advance_periodic_target_expiration (apic);
arch/x86/kvm/mmu/mmu.c +2 -47
105 lines not on this page · raw message
arch/x86/kvm/vmx/nested.c +19 -10
@@ -3139,15 +3139,8 @@ static bool nested_get_evmcs_page(struct kvm_vcpu *vcpu)nested_vmx_handle_enlightened_vmptrld (vcpu, false);if (evmptrld_status ==EVMPTRLD_VMFAIL || - evmptrld_status ==EVMPTRLD_ERROR ) { -pr_debug_ratelimited ("%s: enlightened vmptrld failed\n" , - __func__); - vcpu->run->exit_reason =KVM_EXIT_INTERNAL_ERROR ; - vcpu->run->internal.suberror = -KVM_INTERNAL_ERROR_EMULATION ; - vcpu->run->internal.ndata =0 ; + evmptrld_status ==EVMPTRLD_ERROR )return false; - } }return true;
@@ -3235,8 +3228,16 @@ static bool nested_get_vmcs12_pages(struct kvm_vcpu *vcpu)static bool vmx_get_nested_state_pages (struct kvm_vcpu *vcpu) { -if (!nested_get_evmcs_page (vcpu)) +if (!nested_get_evmcs_page (vcpu)) { +pr_debug_ratelimited ("%s: enlightened vmptrld failed\n" , + __func__); + vcpu->run->exit_reason =KVM_EXIT_INTERNAL_ERROR ; + vcpu->run->internal.suberror = +KVM_INTERNAL_ERROR_EMULATION ; + vcpu->run->internal.ndata =0 ; +return false; + }if (is_guest_mode (vcpu) && !nested_get_vmcs12_pages (vcpu))return false;
@@ -4441,7 +4442,15 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 vm_exit_reason,/* trying to cancel vmlaunch/vmresume is a bug */ WARN_ON_ONCE (vmx->nested.nested_run_pending); -kvm_clear_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu); +if (kvm_check_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu)) { +/* +* KVM_REQ_GET_NESTED_STATE_PAGES is also used to map +* Enlightened VMCS after migration and we still need to +* do that when something is forcing L2->L1 exit prior to +* the first L2 run. +*/ + (void )nested_get_evmcs_page (vcpu); + }/* Service the TLB flush request for L2 before switching to L1. */ if (kvm_check_request (KVM_REQ_TLB_FLUSH_CURRENT , vcpu))
arch/x86/kvm/vmx/vmx.c +16 -14
@@ -36,6 +36,7 @@#include <asm/debugreg.h> #include <asm/desc.h> #include <asm/fpu/internal.h> +#include <asm/idtentry.h> #include <asm/io.h> #include <asm/irq_remapping.h> #include <asm/kexec.h>
@@ -6354,18 +6355,17 @@ static void vmx_apicv_post_state_restore(struct kvm_vcpu *vcpu)void vmx_do_interrupt_nmi_irqoff (unsigned long entry); -static void handle_interrupt_nmi_irqoff (struct kvm_vcpu *vcpu,u32 intr_info) +static void handle_interrupt_nmi_irqoff (struct kvm_vcpu *vcpu, +unsigned long entry) { -unsigned int vector = intr_info &INTR_INFO_VECTOR_MASK ; -gate_desc *desc = (gate_desc *)host_idt_base + vector; -kvm_before_interrupt (vcpu); -vmx_do_interrupt_nmi_irqoff (gate_offset (desc)); +vmx_do_interrupt_nmi_irqoff (entry);kvm_after_interrupt (vcpu); }static void handle_exception_nmi_irqoff (struct vcpu_vmx *vmx) { +const unsigned long nmi_entry = (unsigned long )asm_exc_nmi_noist;u32 intr_info =vmx_get_intr_info (&vmx->vcpu);/* if exit due to PF check for async PF */
@@ -6376,18 +6376,20 @@ static void handle_exception_nmi_irqoff(struct vcpu_vmx *vmx)kvm_machine_check ();/* We need to handle NMIs before interrupts are enabled */ else if (is_nmi(intr_info)) - handle_interrupt_nmi_irqoff(&vmx->vcpu, intr_info); + handle_interrupt_nmi_irqoff(&vmx->vcpu, nmi_entry); }static void handle_external_interrupt_irqoff (struct kvm_vcpu *vcpu) {u32 intr_info =vmx_get_intr_info (vcpu); +unsigned int vector = intr_info &INTR_INFO_VECTOR_MASK ; +gate_desc *desc = (gate_desc *)host_idt_base + vector;if (WARN_ONCE (!is_external_intr (intr_info),"KVM: unexpected VM-Exit interrupt info: 0x%x" , intr_info))return ; -handle_interrupt_nmi_irqoff (vcpu, intr_info); +handle_interrupt_nmi_irqoff (vcpu,gate_offset (desc)); }static void vmx_handle_exit_irqoff (struct kvm_vcpu *vcpu)
@@ -6862,12 +6864,9 @@ static int vmx_create_vcpu(struct kvm_vcpu *vcpu)for (i =0 ; i <ARRAY_SIZE (vmx_uret_msrs_list); ++i) {u32 index = vmx_uret_msrs_list[i]; -u32 data_low, data_high;int j = vmx->nr_uret_msrs; -if (rdmsr_safe (index, &data_low, &data_high) <0 ) -continue ; -if (wrmsr_safe (index, data_low, data_high) <0 ) +if (kvm_probe_user_return_msr (index))continue ; vmx->guest_uret_msrs[j].slot = i;
@@ -7300,9 +7299,11 @@ static __init void vmx_set_cpu_caps(void)if (!cpu_has_vmx_xsaves ())kvm_cpu_cap_clear (X86_FEATURE_XSAVES ); -/* CPUID 0x80000001 */ -if (!cpu_has_vmx_rdtscp ()) +/* CPUID 0x80000001 and 0x7 (RDPID) */ +if (!cpu_has_vmx_rdtscp ()) {kvm_cpu_cap_clear (X86_FEATURE_RDTSCP ); +kvm_cpu_cap_clear (X86_FEATURE_RDPID ); + }if (cpu_has_vmx_waitpkg ())kvm_cpu_cap_check_and_set (X86_FEATURE_WAITPKG );
@@ -7358,8 +7359,9 @@ static int vmx_check_intercept(struct kvm_vcpu *vcpu,/* * RDPID causes #UD if disabled through secondary execution controls. * Because it is marked as EmulateOnUD, we need to intercept it here. +* Note, RDPID is hidden behind ENABLE_RDTSCP. */ -case x86_intercept_rdtscp: +case x86_intercept_rdpid:if (!nested_cpu_has2 (vmcs12,SECONDARY_EXEC_ENABLE_RDTSCP )) { exception->vector =UD_VECTOR ; exception->error_code_valid = false;
arch/x86/kvm/x86.c +35 -5
@@ -233,7 +233,6 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {VCPU_STAT ("halt_poll_fail_ns" , halt_poll_fail_ns),VM_STAT ("mmu_shadow_zapped" , mmu_shadow_zapped),VM_STAT ("mmu_pte_write" , mmu_pte_write), -VM_STAT ("mmu_pte_updated" , mmu_pte_updated),VM_STAT ("mmu_pde_zapped" , mmu_pde_zapped),VM_STAT ("mmu_flooded" , mmu_flooded), VM_STAT("mmu_recycled", mmu_recycled),
@@ -323,6 +322,22 @@ static void kvm_on_user_return(struct user_return_notifier *urn) } } +int kvm_probe_user_return_msr (u32 msr) +{ +u64 val; +int ret; + +preempt_disable (); + ret =rdmsrl_safe (msr, &val); +if (ret) + goto out; + ret =wrmsrl_safe (msr, val); +out: +preempt_enable (); +return ret; +} +EXPORT_SYMBOL_GPL (kvm_probe_user_return_msr); +void kvm_define_user_return_msr (unsigned slot,u32 msr) {BUG_ON (slot >=KVM_MAX_NR_USER_RETURN_MSRS );
@@ -7849,6 +7864,18 @@ static void pvclock_gtod_update_fn(struct work_struct *work) static DECLARE_WORK(pvclock_gtod_work, pvclock_gtod_update_fn); +/* +* Indirection to move queue_work() out of the tk_core.seq write held +* region to prevent possible deadlocks against time accessors which +* are invoked with work related locks held. +*/ +static void pvclock_irq_work_fn (struct irq_work *w) +{ +queue_work (system_long_wq, &pvclock_gtod_work); +} + +static DEFINE_IRQ_WORK(pvclock_irq_work, pvclock_irq_work_fn); +/* * Notification about pvclock gtod data update. */
@@ -7860,13 +7887,14 @@ static int pvclock_gtod_notify(struct notifier_block *nb, unsigned long unused,update_pvclock_gtod (tk); -/* disable master clock if host does not trust, or does not -* use, TSC based clocksource. +/* +* Disable master clock if host does not trust, or does not use, +* TSC based clocksource. Delegate queue_work() to irq_work as +* this is invoked with tk_core.seq write held. */ if (!gtod_is_based_on_tsc (gtod->clock.vclock_mode) &&atomic_read (&kvm_guest_has_master_clock) !=0 ) -queue_work (system_long_wq, &pvclock_gtod_work); - +irq_work_queue (&pvclock_irq_work);return 0 ; }
@@ -7982,6 +8010,8 @@ void kvm_arch_exit(void)cpuhp_remove_state_nocalls (CPUHP_AP_X86_KVM_CLK_ONLINE );#ifdef CONFIG_X86_64 pvclock_gtod_unregister_notifier (&pvclock_gtod_notifier); +irq_work_sync (&pvclock_irq_work); +cancel_work_sync (&pvclock_gtod_work);#endif kvm_x86_ops.hardware_enable =NULL ;kvm_mmu_module_exit ();
block/bfq-iosched.c +1 -2
@@ -2210,10 +2210,9 @@ static void bfq_remove_request(struct request_queue *q, } -static bool bfq_bio_merge (struct blk_mq_hw_ctx *hctx,struct bio *bio, +static bool bfq_bio_merge (struct request_queue *q,struct bio *bio,unsigned int nr_segs) { -struct request_queue *q = hctx->queue;struct bfq_data *bfqd = q->elevator->elevator_data;struct request *free =NULL ;/*
block/blk-iocost.c +12 -2
@@ -1023,7 +1023,17 @@ static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse,lockdep_assert_held (&ioc->lock); - inuse =clamp_t (u32, inuse,1 , active); +/* +* For an active leaf node, its inuse shouldn't be zero or exceed +* @active. An active internal node's inuse is solely determined by the +* inuse to active ratio of its children regardless of @inuse. +*/ +if (list_empty (&iocg->active_list) && iocg->child_active_sum) { + inuse =DIV64_U64_ROUND_UP (active * iocg->child_inuse_sum, + iocg->child_active_sum); + }else { + inuse =clamp_t (u32, inuse,1 , active); + } iocg->last_inuse = iocg->inuse;if (save)
@@ -1040,7 +1050,7 @@ static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse,/* update the level sums */ parent->child_active_sum += (s32)(active - child->active); parent->child_inuse_sum += (s32)(inuse - child->inuse); -/* apply the udpates */ +/* apply the updates */ child->active = active; child->inuse = inuse;
block/blk-mq-sched.c +5 -3
@@ -348,14 +348,16 @@ bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio, unsigned int nr_segs) {struct elevator_queue *e = q->elevator; -struct blk_mq_ctx *ctx =blk_mq_get_ctx (q); -struct blk_mq_hw_ctx *hctx =blk_mq_map_queue (q, bio->bi_opf, ctx); +struct blk_mq_ctx *ctx; +struct blk_mq_hw_ctx *hctx;bool ret = false;enum hctx_type type;if (e && e->type->ops.bio_merge) -return e->type->ops.bio_merge (hctx, bio, nr_segs); +return e->type->ops.bio_merge (q, bio, nr_segs); + ctx =blk_mq_get_ctx (q); + hctx =blk_mq_map_queue (q, bio->bi_opf, ctx); type = hctx->type;if (!(hctx->flags &BLK_MQ_F_SHOULD_MERGE ) ||list_empty_careful (&ctx->rq_lists[type]))
block/blk-mq.c +7 -4
@@ -2203,8 +2203,9 @@ blk_qc_t blk_mq_submit_bio(struct bio *bio)/* Bypass scheduler for flush requests */ blk_insert_flush (rq);blk_mq_run_hw_queue (data.hctx, true); - }else if (plug && (q->nr_hw_queues ==1 || q->mq_ops->commit_rqs || - !blk_queue_nonrot (q))) { + }else if (plug && (q->nr_hw_queues ==1 || +blk_mq_is_sbitmap_shared (rq->mq_hctx->flags) || + q->mq_ops->commit_rqs || !blk_queue_nonrot (q))) {/* * Use plugging if we have a ->commit_rqs() hook as well, as * we know the driver uses bd->last in a smart fashion.
@@ -3255,10 +3256,12 @@ EXPORT_SYMBOL(blk_mq_init_allocated_queue);/* tags can _not_ be used after returning from blk_mq_exit_queue */ void blk_mq_exit_queue (struct request_queue *q) { -struct blk_mq_tag_set *set = q->tag_set; +struct blk_mq_tag_set *set = q->tag_set; -blk_mq_del_queue_tag_set (q); +/* Checks hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED. */ blk_mq_exit_hw_queues (q, set, set->nr_hw_queues); +/* May clear BLK_MQ_F_TAG_QUEUE_SHARED in hctx->flags. */ +blk_mq_del_queue_tag_set (q); }static int __blk_mq_alloc_rq_maps (struct blk_mq_tag_set *set)
block/kyber-iosched.c +3 -2
@@ -562,11 +562,12 @@ static void kyber_limit_depth(unsigned int op, struct blk_mq_alloc_data *data) } } -static bool kyber_bio_merge (struct blk_mq_hw_ctx *hctx,struct bio *bio, +static bool kyber_bio_merge (struct request_queue *q,struct bio *bio,unsigned int nr_segs) { +struct blk_mq_ctx *ctx =blk_mq_get_ctx (q); +struct blk_mq_hw_ctx *hctx =blk_mq_map_queue (q, bio->bi_opf, ctx);struct kyber_hctx_data *khd = hctx->sched_data; -struct blk_mq_ctx *ctx =blk_mq_get_ctx (hctx->queue);struct kyber_ctx_queue *kcq = &khd->kcqs[ctx->index_hw[hctx->type]];unsigned int sched_domain =kyber_sched_domain (bio->bi_opf);struct list_head *rq_list = &kcq->rq_list[sched_domain];
block/mq-deadline.c +1 -2
@@ -461,10 +461,9 @@ static int dd_request_merge(struct request_queue *q, struct request **rq,return ELEVATOR_NO_MERGE ; } -static bool dd_bio_merge (struct blk_mq_hw_ctx *hctx,struct bio *bio, +static bool dd_bio_merge (struct request_queue *q,struct bio *bio,unsigned int nr_segs) { -struct request_queue *q = hctx->queue;struct deadline_data *dd = q->elevator->elevator_data;struct request *free =NULL ;bool ret;
drivers/acpi/device_pm.c +1 -0
@@ -1301,6 +1301,7 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on) {"PNP0C0B", }, /* Generic ACPI fan */ {"INT3404", }, /* Fan */ {"INTC1044", }, /* Fan for Tiger Lake generation */ + {"INTC1048", }, /* Fan for Alder Lake generation */ {} };struct acpi_device *adev =ACPI_COMPANION (dev);
drivers/acpi/scan.c +1 -0
@@ -705,6 +705,7 @@ int acpi_device_add(struct acpi_device *device, result =acpi_device_set_name (device, acpi_device_bus_id);if (result) { +kfree_const (acpi_device_bus_id->bus_id);kfree (acpi_device_bus_id); goto err_unlock; }
drivers/base/power/runtime.c +7 -3
@@ -1637,6 +1637,7 @@ void pm_runtime_init(struct device *dev) dev->power.request_pending = false; dev->power.request =RPM_REQ_NONE ; dev->power.deferred_resume = false; + dev->power.needs_force_resume =0 ;INIT_WORK (&dev->power.work, pm_runtime_work); dev->power.timer_expires =0 ;
@@ -1804,10 +1805,12 @@ int pm_runtime_force_suspend(struct device *dev)* its parent, but set its status to RPM_SUSPENDED anyway in case this * function will be called again for it in the meantime. */ -if (pm_runtime_need_not_resume (dev)) +if (pm_runtime_need_not_resume (dev)) {pm_runtime_set_suspended (dev); -else + }else {__update_runtime_status (dev,RPM_SUSPENDED ); + dev->power.needs_force_resume =1 ; + }return 0 ;
@@ -1834,7 +1837,7 @@ int pm_runtime_force_resume(struct device *dev)int (*callback)(struct device *);int ret =0 ; -if (!pm_runtime_status_suspended (dev) ||pm_runtime_need_not_resume (dev)) +if (!pm_runtime_status_suspended (dev) || !dev->power.needs_force_resume) goto out;/*
@@ -1853,6 +1856,7 @@ int pm_runtime_force_resume(struct device *dev)pm_runtime_mark_last_busy (dev); out: + dev->power.needs_force_resume =0 ;pm_runtime_enable (dev);return ret; }
drivers/block/nbd.c +2 -1
@@ -2031,7 +2031,8 @@ static void nbd_disconnect_and_put(struct nbd_device *nbd)* config ref and try to destroy the workqueue from inside the work * queue. */ -flush_workqueue (nbd->recv_workq); +if (nbd->recv_workq) +flush_workqueue (nbd->recv_workq);if (test_and_clear_bit (NBD_RT_HAS_CONFIG_REF , &nbd->config->runtime_flags))nbd_config_put (nbd);
drivers/block/rnbd/rnbd-clt.c +10 -2
@@ -679,7 +679,11 @@ static void remap_devs(struct rnbd_clt_session *sess)return ; } -rtrs_clt_query (sess->rtrs, &attrs); + err =rtrs_clt_query (sess->rtrs, &attrs); +if (err) { +pr_err ("rtrs_clt_query(\"%s\"): %d\n" , sess->sessname, err); +return ; + }mutex_lock (&sess->lock); sess->max_io_size = attrs.max_io_size;
@@ -1211,7 +1215,11 @@ find_and_get_or_create_sess(const char *sessname, err =PTR_ERR (sess->rtrs); goto wake_up_and_put; } -rtrs_clt_query (sess->rtrs, &attrs); + + err =rtrs_clt_query (sess->rtrs, &attrs); +if (err) + goto close_rtrs; + sess->max_io_size = attrs.max_io_size; sess->queue_depth = attrs.queue_depth;
drivers/block/rnbd/rnbd-clt.h +1 -1
@@ -79,7 +79,7 @@ struct rnbd_clt_session {DECLARE_BITMAP (cpu_queues_bm,NR_CPUS );int __percpu *cpu_rr;/* per-cpu var for CPU round-robin */ atomic_t busy; -int queue_depth; +size_t queue_depth;u32 max_io_size;struct blk_mq_tag_set tag_set;struct mutex lock;/* protects state and devs_list */
drivers/bluetooth/btusb.c +3 -1
@@ -392,7 +392,9 @@ static const struct usb_device_id blacklist_table[] = {/* MediaTek Bluetooth devices */ { USB_VENDOR_AND_INTERFACE_INFO(0x0e8d, 0xe0, 0x01, 0x01), - .driver_info = BTUSB_MEDIATEK }, + .driver_info =BTUSB_MEDIATEK | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, /* Additional Realtek 8723AE Bluetooth devices */ { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
drivers/char/tpm/tpm2-cmd.c +1 -0
@@ -656,6 +656,7 @@ int tpm2_get_cc_attrs_tbl(struct tpm_chip *chip)if (nr_commands !=be32_to_cpup ((__be32 *)&buf.data[TPM_HEADER_SIZE +5 ])) { + rc = -EFAULT ;tpm_buf_destroy (&buf); goto out; }
drivers/char/tpm/tpm_tis_core.c +14 -8
@@ -709,16 +709,14 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)cap_t cap;int ret; -/* TPM 2.0 */ -if (chip->flags &TPM_CHIP_FLAG_TPM2 ) -return tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); - -/* TPM 1.2 */ ret =request_locality (chip,0 );if (ret <0 )return ret; - ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 ); +if (chip->flags &TPM_CHIP_FLAG_TPM2 ) + ret =tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); +else + ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 );release_locality (chip,0 );
@@ -1127,12 +1125,20 @@ int tpm_tis_resume(struct device *dev)if (ret)return ret; -/* TPM 1.2 requires self-test on resume. This function actually returns +/* +* TPM 1.2 requires self-test on resume. This function actually returns * an error code but for unknown reason it isn't handled. */ -if (!(chip->flags &TPM_CHIP_FLAG_TPM2 )) +if (!(chip->flags &TPM_CHIP_FLAG_TPM2 )) { + ret =request_locality (chip,0 ); +if (ret <0 ) +return ret; +tpm1_do_selftest (chip); +release_locality (chip,0 ); + } +return 0 ; }EXPORT_SYMBOL_GPL (tpm_tis_resume);
drivers/clk/samsung/clk-exynos7.c +6 -1
@@ -537,8 +537,13 @@ static const struct samsung_gate_clock top1_gate_clks[] __initconst = {GATE (CLK_ACLK_FSYS0_200 ,"aclk_fsys0_200" ,"dout_aclk_fsys0_200" ,ENABLE_ACLK_TOP13 ,28 ,CLK_SET_RATE_PARENT |CLK_IS_CRITICAL ,0 ), +/* +* This clock is required for the CMU_FSYS1 registers access, keep it +* enabled permanently until proper runtime PM support is added. +*/ GATE (CLK_ACLK_FSYS1_200 ,"aclk_fsys1_200" ,"dout_aclk_fsys1_200" , -ENABLE_ACLK_TOP13 ,24 ,CLK_SET_RATE_PARENT ,0 ), +ENABLE_ACLK_TOP13 ,24 ,CLK_SET_RATE_PARENT | +CLK_IS_CRITICAL ,0 ), GATE(CLK_SCLK_PHY_FSYS1_26M, "sclk_phy_fsys1_26m", "dout_sclk_phy_fsys1_26m", ENABLE_SCLK_TOP1_FSYS11,
drivers/clocksource/timer-ti-dm-systimer.c +120 -24
212 lines not on this page · raw message
drivers/cpufreq/intel_pstate.c +13 -1
@@ -3019,6 +3019,14 @@ static const struct x86_cpu_id hwp_support_ids[] __initconst = { {} }; +static bool intel_pstate_hwp_is_enabled (void ) +{ +u64 value; + +rdmsrl (MSR_PM_ENABLE , value); +return !!(value &0x1 ); +} +static int __init intel_pstate_init (void ) {const struct x86_cpu_id *id;
@@ -3037,8 +3045,12 @@ static int __init intel_pstate_init(void)* Avoid enabling HWP for processors without EPP support, * because that means incomplete HWP implementation which is a * corner case and supporting it is generally problematic. +* +* If HWP is enabled already, though, there is no choice but to +* deal with it. */ -if (!no_hwp &&boot_cpu_has (X86_FEATURE_HWP_EPP )) { +if ((!no_hwp &&boot_cpu_has (X86_FEATURE_HWP_EPP )) || +intel_pstate_hwp_is_enabled ()) { hwp_active++; hwp_mode_bdw = id->driver_data; intel_pstate.attr = hwp_cpufreq_attrs;
drivers/crypto/ccp/sev-dev.c +3 -1
@@ -989,7 +989,7 @@ int sev_dev_init(struct psp_device *psp)if (!sev->vdata) { ret = -ENODEV ;dev_err (dev,"sev: missing driver data\n" ); - goto e_err; + goto e_sev; }psp_set_sev_irq_handler (psp, sev_irq_handler, sev);
@@ -1004,6 +1004,8 @@ int sev_dev_init(struct psp_device *psp) e_irq:psp_clear_sev_irq_handler (psp); +e_sev: +devm_kfree (dev, sev); e_err: psp->sev_data =NULL ;
drivers/dma/idxd/cdev.c +47 -82
185 lines not on this page · raw message
drivers/dma/idxd/device.c +2 -3
@@ -169,8 +169,6 @@ int idxd_wq_alloc_resources(struct idxd_wq *wq) desc->id = i; desc->wq = wq; desc->cpu =-1 ; -dma_async_tx_descriptor_init (&desc->txd, &wq->dma_chan); - desc->txd.tx_submit = idxd_dma_tx_submit; }return 0 ;
@@ -378,7 +376,8 @@ static void idxd_cmd_exec(struct idxd_device *idxd, int cmd_code, u32 operand,if (idxd_device_is_halted (idxd)) {dev_warn (&idxd->pdev->dev,"Device is HALTED!\n" ); - *status =IDXD_CMDSTS_HW_ERR ; +if (status) + *status =IDXD_CMDSTS_HW_ERR ;return ; }
drivers/dma/idxd/dma.c +64 -13
127 lines not on this page · raw message
drivers/dma/idxd/idxd.h +19 -6
@@ -14,6 +14,9 @@extern struct kmem_cache *idxd_desc_pool; +struct idxd_device ; +struct idxd_wq ; +#define IDXD_REG_TIMEOUT 50#define IDXD_DRAIN_TIMEOUT 5000
@@ -68,10 +71,10 @@ enum idxd_wq_type { };struct idxd_cdev { +struct idxd_wq *wq;struct cdev cdev; -struct device *dev; +struct device dev;int minor; -struct wait_queue_head err_queue; };#define IDXD_ALLOCATED_BATCH_SIZE 128U
@@ -88,10 +91,16 @@ enum idxd_complete_type { IDXD_COMPLETE_ABORT, }; +struct idxd_dma_chan { +struct dma_chan chan; +struct idxd_wq *wq; +}; +struct idxd_wq {void __iomem *dportal;struct device conf_dev; -struct idxd_cdev idxd_cdev; +struct idxd_cdev *idxd_cdev; +struct wait_queue_head err_queue;struct idxd_device *idxd;int id;enum idxd_wq_type type;
@@ -112,7 +121,7 @@ struct idxd_wq {int compls_size;struct idxd_desc **descs;struct sbitmap_queue sbq; -struct dma_chan dma_chan; +struct idxd_dma_chan *idxd_chan;char name[WQ_NAME_SIZE +1 ];u64 max_xfer_bytes;u32 max_batch_size;
@@ -147,6 +156,11 @@ enum idxd_device_flag { IDXD_FLAG_CMD_RUNNING, }; +struct idxd_dma_dev { +struct idxd_device *idxd; +struct dma_device dma; +}; +struct idxd_device {enum idxd_type type;struct device conf_dev;
@@ -191,7 +205,7 @@ struct idxd_device {int num_wq_irqs;struct idxd_irq_entry *irq_entries; -struct dma_device dma_dev; +struct idxd_dma_dev *idxd_dma;struct workqueue_struct *wq;struct work_struct work; };
@@ -313,7 +327,6 @@ void idxd_unregister_dma_channel(struct idxd_wq *wq);void idxd_parse_completion_status (u8 status,enum dmaengine_tx_result *res);void idxd_dma_complete_txd (struct idxd_desc *desc,enum idxd_complete_type comp_type); -dma_cookie_t idxd_dma_tx_submit (struct dma_async_tx_descriptor *tx);/* cdev */ int idxd_cdev_register (void );
drivers/dma/idxd/init.c +1 -1
@@ -175,7 +175,7 @@ static int idxd_setup_internals(struct idxd_device *idxd) wq->id = i; wq->idxd = idxd;mutex_init (&wq->wq_lock); - wq->idxd_cdev.minor =-1 ; +init_waitqueue_head (&wq->err_queue); wq->max_xfer_bytes = idxd->max_xfer_bytes; wq->max_batch_size = idxd->max_batch_size; wq->wqcfg =devm_kzalloc (dev, idxd->wqcfg_size,GFP_KERNEL );
drivers/dma/idxd/irq.c +2 -2
@@ -75,7 +75,7 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)struct idxd_wq *wq = &idxd->wqs[id];if (wq->type ==IDXD_WQT_USER ) -wake_up_interruptible (&wq->idxd_cdev.err_queue); +wake_up_interruptible (&wq->err_queue); }else {int i;
@@ -83,7 +83,7 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)struct idxd_wq *wq = &idxd->wqs[i];if (wq->type ==IDXD_WQT_USER ) -wake_up_interruptible (&wq->idxd_cdev.err_queue); +wake_up_interruptible (&wq->err_queue); } }
drivers/dma/idxd/sysfs.c +9 -1
@@ -1052,8 +1052,16 @@ static ssize_t wq_cdev_minor_show(struct device *dev, struct device_attribute *attr, char *buf) { struct idxd_wq *wq = container_of(dev, struct idxd_wq, conf_dev); +int minor =-1 ; -return sprintf (buf,"%d\n" , wq->idxd_cdev.minor); +mutex_lock (&wq->wq_lock); +if (wq->idxd_cdev) + minor = wq->idxd_cdev->minor; +mutex_unlock (&wq->wq_lock); + +if (minor ==-1 ) +return -ENXIO ; +return sysfs_emit (buf,"%d\n" , minor); } static struct device_attribute dev_attr_wq_cdev_minor =
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +2 -0
@@ -75,6 +75,8 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, } ib->ptr =amdgpu_sa_bo_cpu_addr (ib->sa_bo); +/* flush the cache before commit the IB */ + ib->flags =AMDGPU_IB_FLAG_EMIT_MEM_SYNC ;if (!vm) ib->gpu_addr =amdgpu_sa_bo_gpu_addr (ib->sa_bo);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c +1 -0
@@ -643,6 +643,7 @@ struct hdcp_workqueue *hdcp_create_workqueue(struct amdgpu_device *adev, struct/* File created at /sys/class/drm/card0/device/hdcp_srm*/ hdcp_work[0 ].attr = data_attr; +sysfs_bin_attr_init (&hdcp_work[0 ].attr);if (sysfs_create_bin_file (&adev->dev->kobj, &hdcp_work[0 ].attr))DRM_WARN ("Failed to create device file hdcp_srm" );
drivers/gpu/drm/amd/display/dc/core/dc.c +4 -0
@@ -2504,6 +2504,10 @@ static void commit_planes_for_stream(struct dc *dc, plane_state->triplebuffer_flips = true; } } +if (update_type ==UPDATE_TYPE_FULL ) { +/* force vsync flip when reconfiguring pipes to prevent underflow */ + plane_state->flip_immediate = false; + } } }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c +9 -6
@@ -1,5 +1,5 @@/* -* Copyright 2012-17 Advanced Micro Devices, Inc. +* Copyright 2012-2021 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"),
@@ -181,11 +181,14 @@ void hubp2_vready_at_or_After_vsync(struct hubp *hubp,else Set HUBP_VREADY_AT_OR_AFTER_VSYNC = 0 */ -if ((pipe_dest->vstartup_start - (pipe_dest->vready_offset+pipe_dest->vupdate_width - + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) { - value =1 ; - }else - value =0 ; +if (pipe_dest->htotal !=0 ) { +if ((pipe_dest->vstartup_start - (pipe_dest->vready_offset+pipe_dest->vupdate_width + + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) { + value =1 ; + }else + value =0 ; + } +REG_UPDATE (DCHUBP_CNTL ,HUBP_VREADY_AT_OR_AFTER_VSYNC , value); }
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c +2 -0
@@ -789,6 +789,8 @@ enum mod_hdcp_status mod_hdcp_hdcp2_validate_rx_id_list(struct mod_hdcp *hdcp) TA_HDCP2_MSG_AUTHENTICATION_STATUS__RECEIVERID_REVOKED) { hdcp->connection.is_hdcp2_revoked = 1; status = MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_REVOKED; + } else { + status =MOD_HDCP_STATUS_HDCP2_VALIDATE_RX_ID_LIST_FAILURE ; } }mutex_unlock (&psp->hdcp_context.mutex);
drivers/gpu/drm/i915/display/intel_overlay.c +1 -1
@@ -382,7 +382,7 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)i830_overlay_clock_gating (dev_priv, true); } -static void +__i915_active_call static voidintel_overlay_last_flip_retire (struct i915_active *active) { struct intel_overlay *overlay =
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -1
@@ -189,7 +189,7 @@ compute_partial_view(const struct drm_i915_gem_object *obj,struct i915_ggtt_view view;if (i915_gem_object_is_tiled (obj)) - chunk =roundup (chunk,tile_row_pages (obj)); + chunk =roundup (chunk,tile_row_pages (obj) ?:1 ); view.type =I915_GGTT_VIEW_PARTIAL ; view.partial.offset =rounddown (page_offset, chunk);
drivers/gpu/drm/i915/gt/gen8_ppgtt.c +0 -1
@@ -628,7 +628,6 @@ static int gen8_preallocate_top_level_pdp(struct i915_ppgtt *ppgtt) err =pin_pt_dma (vm, pde->pt.base);if (err) { -i915_gem_object_put (pde->pt.base);free_pd (vm, pde);return err; }
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +2 -2
@@ -652,8 +652,8 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt)* banks of memory are paired and unswizzled on the * uneven portion, so leave that as unknown. */ -if (intel_uncore_read (uncore,C0DRB3 ) == -intel_uncore_read (uncore,C1DRB3 )) { +if (intel_uncore_read16 (uncore,C0DRB3 ) == +intel_uncore_read16 (uncore,C1DRB3 )) { swizzle_x =I915_BIT_6_SWIZZLE_9_10 ; swizzle_y =I915_BIT_6_SWIZZLE_9 ; }
drivers/gpu/drm/i915/i915_active.c +2 -1
@@ -1159,7 +1159,8 @@ static int auto_active(struct i915_active *ref)return 0 ; } -static void auto_retire (struct i915_active *ref) +__i915_active_call static void +auto_retire (struct i915_active *ref) {i915_active_put (ref); }
drivers/gpu/drm/msm/dp/dp_audio.c +1 -0
@@ -527,6 +527,7 @@ int dp_audio_hw_params(struct device *dev,dp_audio_setup_acr (audio);dp_audio_safe_to_exit_level (audio);dp_audio_enable (audio, true); +dp_display_signal_audio_start (dp_display); dp_display->audio_enabled = true; end:
drivers/gpu/drm/msm/dp/dp_display.c +9 -2
@@ -176,6 +176,15 @@ static int dp_del_event(struct dp_display_private *dp_priv, u32 event)return 0 ; } +void dp_display_signal_audio_start (struct msm_dp *dp_display) +{ +struct dp_display_private *dp; + + dp = container_of(dp_display, struct dp_display_private, dp_display); + +reinit_completion (&dp->audio_comp); +} +void dp_display_signal_audio_complete (struct msm_dp *dp_display) {struct dp_display_private *dp;
@@ -620,7 +629,6 @@ static int dp_hpd_unplug_handle(struct dp_display_private *dp, u32 data)dp_add_event (dp,EV_DISCONNECT_PENDING_TIMEOUT ,0 ,DP_TIMEOUT_5_SECOND );/* signal the disconnect event early to ensure proper teardown */ -reinit_completion (&dp->audio_comp);dp_display_handle_plugged_change (g_dp_display, false); dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_PLUG_INT_MASK |
@@ -841,7 +849,6 @@ static int dp_display_disable(struct dp_display_private *dp, u32 data)/* wait only if audio was enabled */ if (dp_display->audio_enabled) {/* signal the disconnect event */ -reinit_completion (&dp->audio_comp);dp_display_handle_plugged_change (dp_display, false);if (!wait_for_completion_timeout (&dp->audio_comp,HZ *5 ))
drivers/gpu/drm/msm/dp/dp_display.h +1 -0
@@ -34,6 +34,7 @@ int dp_display_get_modes(struct msm_dp *dp_display,int dp_display_request_irq (struct msm_dp *dp_display);bool dp_display_check_video_test (struct msm_dp *dp_display);int dp_display_get_test_bpp (struct msm_dp *dp_display); +void dp_display_signal_audio_start (struct msm_dp *dp_display);void dp_display_signal_audio_complete (struct msm_dp *dp_display);#endif /* _DP_DISPLAY_H_ */
drivers/gpu/drm/radeon/radeon.h +1 -0
@@ -1559,6 +1559,7 @@ struct radeon_dpm {void *priv;u32 new_active_crtcs;int new_active_crtc_count; +int high_pixelclock_count;u32 current_active_crtcs;int current_active_crtc_count;bool single_display;
drivers/gpu/drm/radeon/radeon_atombios.c +18 -8
@@ -2126,11 +2126,14 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)return state_index;/* last mode is usually default, array is low to high */ for (i =0 ; i < num_modes; i++) { - rdev->pm.power_state[state_index].clock_info = -kcalloc (1 ,sizeof (struct radeon_pm_clock_info ), -GFP_KERNEL ); +/* avoid memory leaks from invalid modes or unknown frev. */ +if (!rdev->pm.power_state[state_index].clock_info) { + rdev->pm.power_state[state_index].clock_info = +kzalloc (sizeof (struct radeon_pm_clock_info ), +GFP_KERNEL ); + }if (!rdev->pm.power_state[state_index].clock_info) -return state_index; + goto out; rdev->pm.power_state[state_index].num_clock_modes =1 ; rdev->pm.power_state[state_index].clock_info[0 ].voltage.type =VOLTAGE_NONE ;switch (frev) {
@@ -2249,17 +2252,24 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev)break ; } } +out: +/* free any unused clock_info allocation. */ +if (state_index && state_index < num_modes) { +kfree (rdev->pm.power_state[state_index].clock_info); + rdev->pm.power_state[state_index].clock_info =NULL ; + } +/* last mode is usually default */ -if (rdev->pm.default_power_state_index ==-1 ) { +if (state_index && rdev->pm.default_power_state_index ==-1 ) { rdev->pm.power_state[state_index -1 ].type =POWER_STATE_TYPE_DEFAULT ; rdev->pm.default_power_state_index = state_index -1 ; rdev->pm.power_state[state_index -1 ].default_clock_mode = &rdev->pm.power_state[state_index -1 ].clock_info[0 ]; - rdev->pm.power_state[state_index].flags &= + rdev->pm.power_state[state_index -1 ].flags &= ~RADEON_PM_STATE_SINGLE_DISPLAY_ONLY ; - rdev->pm.power_state[state_index].misc =0 ; - rdev->pm.power_state[state_index].misc2 =0 ; + rdev->pm.power_state[state_index -1 ].misc =0 ; + rdev->pm.power_state[state_index -1 ].misc2 =0 ; }return state_index; }
drivers/gpu/drm/radeon/radeon_pm.c +8 -0
@@ -1747,6 +1747,7 @@ static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev)struct drm_device *ddev = rdev->ddev;struct drm_crtc *crtc;struct radeon_crtc *radeon_crtc; +struct radeon_connector *radeon_connector;if (!rdev->pm.dpm_enabled)return ;
@@ -1756,6 +1757,7 @@ static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev)/* update active crtc counts */ rdev->pm.dpm.new_active_crtcs =0 ; rdev->pm.dpm.new_active_crtc_count =0 ; + rdev->pm.dpm.high_pixelclock_count =0 ;if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) {list_for_each_entry (crtc, &ddev->mode_config.crtc_list, head) {
@@ -1763,6 +1765,12 @@ static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev)if (crtc->enabled) { rdev->pm.dpm.new_active_crtcs |= (1 << radeon_crtc->crtc_id); rdev->pm.dpm.new_active_crtc_count++; +if (!radeon_crtc->connector) +continue ; + + radeon_connector =to_radeon_connector (radeon_crtc->connector); +if (radeon_connector->pixelclock_for_modeset >297000 ) + rdev->pm.dpm.high_pixelclock_count++; } } }
drivers/gpu/drm/radeon/si_dpm.c +3 -0
@@ -2982,6 +2982,9 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev, (rdev->pdev->device == 0x6605)) { max_sclk =75000 ; } + +if (rdev->pm.dpm.high_pixelclock_count >1 ) + disable_sclk_switching = true; }if (rps->vce_active) {
drivers/hwmon/occ/common.c +3 -2
@@ -209,9 +209,9 @@ int occ_update_response(struct occ *occ)return rc;/* limit the maximum rate of polling the OCC */ -if (time_after (jiffies, occ->last_update +OCC_UPDATE_FREQUENCY )) { +if (time_after (jiffies, occ->next_update)) { rc =occ_poll (occ); - occ->last_update = jiffies; + occ->next_update = jiffies +OCC_UPDATE_FREQUENCY ; }else { rc = occ->last_error; }
@@ -1089,6 +1089,7 @@ int occ_setup(struct occ *occ, const char *name)return rc; } + occ->next_update = jiffies +OCC_UPDATE_FREQUENCY ;occ_parse_poll_response (occ); rc =occ_setup_sensor_attrs (occ);
drivers/hwmon/occ/common.h +1 -1
@@ -99,7 +99,7 @@ struct occ {u8 poll_cmd_data;/* to perform OCC poll command */ int (*send_cmd)(struct occ *occ,u8 *cmd); -unsigned long last_update; +unsigned long next_update;struct mutex lock;/* lock OCC access */ struct device *hwmon;
drivers/hwtracing/coresight/coresight-platform.c +6 -0
@@ -90,6 +90,12 @@ static void of_coresight_get_ports_legacy(const struct device_node *node,struct of_endpoint endpoint;int in =0 , out =0 ; +/* +* Avoid warnings in of_graph_get_next_endpoint() +* if the device doesn't have any graph connections +*/ +if (!of_graph_is_present (node)) +return ; do { ep = of_graph_get_next_endpoint(node, ep); if (!ep)
drivers/i2c/busses/i2c-mt65xx.c +5 -4
@@ -564,7 +564,7 @@ static const struct i2c_spec_values *mtk_i2c_get_spec(unsigned int speed)static int mtk_i2c_max_step_cnt (unsigned int target_speed) { -if (target_speed >I2C_MAX_FAST_MODE_FREQ ) +if (target_speed >I2C_MAX_FAST_MODE_PLUS_FREQ )return MAX_HS_STEP_CNT_DIV ;else return MAX_STEP_CNT_DIV ;
@@ -635,7 +635,7 @@ static int mtk_i2c_check_ac_timing(struct mtk_i2c *i2c,if (sda_min > sda_max)return -3 ; -if (check_speed >I2C_MAX_FAST_MODE_FREQ ) { +if (check_speed >I2C_MAX_FAST_MODE_PLUS_FREQ ) {if (i2c->dev_comp->ltiming_adjust) { i2c->ac_timing.hs =I2C_TIME_DEFAULT_VALUE | (sample_cnt <<12 ) | (high_cnt <<8 );
@@ -850,7 +850,7 @@ static int mtk_i2c_do_transfer(struct mtk_i2c *i2c, struct i2c_msg *msgs, control_reg =mtk_i2c_readw (i2c,OFFSET_CONTROL ) & ~(I2C_CONTROL_DIR_CHANGE |I2C_CONTROL_RS ); -if ((i2c->speed_hz >I2C_MAX_FAST_MODE_FREQ ) || (left_num >=1 )) +if ((i2c->speed_hz >I2C_MAX_FAST_MODE_PLUS_FREQ ) || (left_num >=1 )) control_reg |=I2C_CONTROL_RS ;if (i2c->op ==I2C_MASTER_WRRD )
@@ -1067,7 +1067,8 @@ static int mtk_i2c_transfer(struct i2c_adapter *adap, } } -if (i2c->auto_restart && num >=2 && i2c->speed_hz >I2C_MAX_FAST_MODE_FREQ ) +if (i2c->auto_restart && num >=2 && + i2c->speed_hz >I2C_MAX_FAST_MODE_PLUS_FREQ )/* ignore the first restart irq after the master code, * otherwise the first transfer will be discarded. */
drivers/i2c/i2c-dev.c +7 -2
@@ -440,8 +440,13 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) sizeof(rdwr_arg)))return -EFAULT ; -/* Put an arbitrary limit on the number of messages that can -* be sent at once */ +if (!rdwr_arg.msgs || rdwr_arg.nmsgs ==0 ) +return -EINVAL ; + +/* +* Put an arbitrary limit on the number of messages that can +* be sent at once +*/ if (rdwr_arg.nmsgs >I2C_RDWR_IOCTL_MAX_MSGS )return -EINVAL ;
drivers/iio/accel/Kconfig +0 -1
@@ -211,7 +211,6 @@ config DMARD10 config HID_SENSOR_ACCEL_3D depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID Accelerometers 3D"
drivers/iio/common/hid-sensors/Kconfig +1 -0
@@ -19,6 +19,7 @@ config HID_SENSOR_IIO_TRIGGER tristate "Common module (trigger) for all HID Sensor IIO drivers" depends on HID_SENSOR_HUB && HID_SENSOR_IIO_COMMON && IIO_BUFFER select IIO_TRIGGER + select IIO_TRIGGERED_BUFFER help Say yes here to build trigger support for HID sensors. Triggers will be send if all requested attributes were read.
drivers/iio/gyro/Kconfig +0 -1
@@ -111,7 +111,6 @@ config FXAS21002C_SPI config HID_SENSOR_GYRO_3D depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID Gyroscope 3D"
drivers/iio/gyro/mpu3050-core.c +11 -2
@@ -271,7 +271,16 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,case IIO_CHAN_INFO_OFFSET :switch (chan->type) {case IIO_TEMP : -/* The temperature scaling is (x+23000)/280 Celsius */ +/* +* The temperature scaling is (x+23000)/280 Celsius +* for the "best fit straight line" temperature range +* of -30C..85C. The 23000 includes room temperature +* offset of +35C, 280 is the precision scale and x is +* the 16-bit signed integer reported by hardware. +* +* Temperature value itself represents temperature of +* the sensor die. +*/ *val =23000 ;return IIO_VAL_INT ;default :
@@ -328,7 +337,7 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev, goto out_read_raw_unlock; } - *val =be16_to_cpu (raw_val); + *val = (s16 )be16_to_cpu (raw_val); ret =IIO_VAL_INT ; goto out_read_raw_unlock;
drivers/iio/humidity/Kconfig +0 -1
@@ -52,7 +52,6 @@ config HID_SENSOR_HUMIDITY tristate "HID Environmental humidity sensor" depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER help
drivers/iio/light/Kconfig +0 -2
@@ -256,7 +256,6 @@ config ISL29125 config HID_SENSOR_ALS depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID ALS"
@@ -270,7 +269,6 @@ config HID_SENSOR_ALS config HID_SENSOR_PROX depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID PROX"
drivers/iio/light/gp2ap002.c +3 -2
@@ -583,7 +583,7 @@ static int gp2ap002_probe(struct i2c_client *client, "gp2ap002", indio_dev);if (ret) {dev_err (dev,"unable to request IRQ\n" ); - goto out_disable_vio; + goto out_put_pm; } gp2ap002->irq = client->irq;
@@ -613,8 +613,9 @@ static int gp2ap002_probe(struct i2c_client *client,return 0 ; -out_disable_pm: +out_put_pm:pm_runtime_put_noidle (dev); +out_disable_pm:pm_runtime_disable (dev); out_disable_vio:regulator_disable (gp2ap002->vio);
drivers/iio/light/tsl2583.c +8 -0
@@ -341,6 +341,14 @@ static int tsl2583_als_calibrate(struct iio_dev *indio_dev)return lux_val; } +/* Avoid division by zero of lux_value later on */ +if (lux_val ==0 ) { +dev_err (&chip->client->dev, +"%s: lux_val of 0 will produce out of range trim_value\n" , + __func__); +return -ENODATA ; + } + gain_trim_val = (unsigned int )(((chip->als_settings.als_cal_target) * chip->als_settings.als_gain_trim) / lux_val);if ((gain_trim_val <250 ) || (gain_trim_val >4000 )) {
drivers/iio/magnetometer/Kconfig +0 -1
@@ -95,7 +95,6 @@ config MAG3110 config HID_SENSOR_MAGNETOMETER_3D depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID Magenetometer 3D"
drivers/iio/orientation/Kconfig +0 -2
@@ -9,7 +9,6 @@ menu "Inclinometer sensors" config HID_SENSOR_INCLINOMETER_3D depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID Inclinometer 3D"
@@ -20,7 +19,6 @@ config HID_SENSOR_INCLINOMETER_3D config HID_SENSOR_DEVICE_ROTATION depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID Device Rotation"
drivers/iio/pressure/Kconfig +0 -1
@@ -79,7 +79,6 @@ config DPS310 config HID_SENSOR_PRESS depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER tristate "HID PRESS"
drivers/iio/proximity/pulsedlight-lidar-lite-v2.c +1 -0
@@ -160,6 +160,7 @@ static int lidar_get_measurement(struct lidar_data *data, u16 *reg) ret =lidar_write_control (data,LIDAR_REG_CONTROL_ACQUIRE );if (ret <0 ) {dev_err (&client->dev,"cannot send start measurement command" ); +pm_runtime_put_noidle (&client->dev);return ret; }
drivers/iio/temperature/Kconfig +0 -1
@@ -45,7 +45,6 @@ config HID_SENSOR_TEMP tristate "HID Environmental temperature sensor" depends on HID_SENSOR_HUB select IIO_BUFFER - select IIO_TRIGGERED_BUFFER select HID_SENSOR_IIO_COMMON select HID_SENSOR_IIO_TRIGGER help
drivers/infiniband/hw/hfi1/ipoib.h +2 -1
@@ -52,8 +52,9 @@ union hfi1_ipoib_flow {* @producer_lock: producer sync lock * @consumer_lock: consumer sync lock */ +struct ipoib_txreq ;struct hfi1_ipoib_circ_buf { -void **items; +struct ipoib_txreq **items;unsigned long head;unsigned long tail;unsigned long max_items;
drivers/infiniband/hw/hfi1/ipoib_tx.c +7 -7
@@ -702,14 +702,14 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv) priv->tx_napis =kcalloc_node (dev->num_tx_queues,sizeof (struct napi_struct ), -GFP_ATOMIC , +GFP_KERNEL , priv->dd->node);if (!priv->tx_napis) goto free_txreq_cache; priv->txqs =kcalloc_node (dev->num_tx_queues,sizeof (struct hfi1_ipoib_txq ), -GFP_ATOMIC , +GFP_KERNEL , priv->dd->node);if (!priv->txqs) goto free_tx_napis;
@@ -741,9 +741,9 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv) priv->dd->node); txq->tx_ring.items = -vzalloc_node (array_size (tx_ring_size, -sizeof (struct ipoib_txreq )), - priv->dd->node); +kcalloc_node (tx_ring_size, +sizeof (struct ipoib_txreq *), +GFP_KERNEL , priv->dd->node);if (!txq->tx_ring.items) goto free_txqs;
@@ -764,7 +764,7 @@ int hfi1_ipoib_txreq_init(struct hfi1_ipoib_dev_priv *priv)struct hfi1_ipoib_txq *txq = &priv->txqs[i];netif_napi_del (txq->napi); -vfree (txq->tx_ring.items); +kfree (txq->tx_ring.items); }kfree (priv->txqs);
@@ -817,7 +817,7 @@ void hfi1_ipoib_txreq_deinit(struct hfi1_ipoib_dev_priv *priv)hfi1_ipoib_drain_tx_list (txq);netif_napi_del (txq->napi); (void )hfi1_ipoib_drain_tx_ring (txq, txq->tx_ring.max_items); -vfree (txq->tx_ring.items); +kfree (txq->tx_ring.items); }kfree (priv->txqs);
drivers/iommu/amd/init.c +2 -47
74 lines not on this page · raw message
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bnxt/bnxt.c +18 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/cisco/enic/enic_main.c +5 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +83 -44
127 lines not on this page · raw message
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.h +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +20 -7
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mdio.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_client.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_common.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +4 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_txrx.c +2 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_type.h +2 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/iavf/iavf_main.c +0 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_lib.c +90 -33
123 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_txrx.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mediatek/mtk_eth_soc.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mediatek/mtk_eth_soc.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath11k/wmi.c +21 -32
53 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +28 -7
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +10 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +13 -6
Lines of this file are not shown. View the raw message.
drivers/net/wireless/quantenna/qtnfmac/event.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw88/main.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw88/phy.c +14 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw88/phy.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw88/reg.h +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw88/rtw8822c.c +25 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/wl3501.h +23 -24
47 lines not on this page · raw message
drivers/net/wireless/wl3501_cs.c +29 -25
54 lines not on this page · raw message
drivers/pci/controller/pcie-iproc-msi.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/pci/endpoint/functions/pci-epf-test.c +13 -5
Lines of this file are not shown. View the raw message.
drivers/pci/endpoint/pci-epc-core.c +34 -8
42 lines not on this page · raw message
drivers/pinctrl/samsung/pinctrl-exynos.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/usb/typec/ucsi/ucsi.c +36 -10
46 lines not on this page · raw message
fs/f2fs/compress.c +23 -32
55 lines not on this page · raw message
fs/f2fs/f2fs.h +4 -82
86 lines not on this page · raw message
fs/f2fs/file.c +125 -59
184 lines not on this page · raw message
fs/f2fs/gc.c +45 -17
62 lines not on this page · raw message
fs/f2fs/segment.c +59 -27
86 lines not on this page · raw message
fs/nfs/nfs4proc.c +34 -22
56 lines not on this page · raw message
include/uapi/linux/f2fs.h new file +87 -0
87 lines not on this page · raw message
include/uapi/linux/netfilter/xt_SECMARK.h +6 -0
Lines of this file are not shown. View the raw message.
mm/gup.c +47 -47
94 lines not on this page · raw message
net/netfilter/xt_SECMARK.c +69 -19
88 lines not on this page · raw message
security/keys/trusted-keys/trusted_tpm1.c +5 -3
Lines of this file are not shown. View the raw message.
sound/pci/hda/ideapad_s740_helper.c new file +492 -0
492 lines not on this page · raw message
sound/soc/sh/rcar/core.c +68 -1
69 lines not on this page · raw message
tools/testing/selftests/drivers/net/mlxsw/mirror_gre_scale.sh +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/mlxsw/sch_red_core.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/mirror_lib.sh +17 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/security/entry_flush.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/security/flush_utils.h +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/security/rfi_flush.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.