Linux 5.10.238
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.238 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
------------
Documentation/admin-guide/kernel-parameters.txt | 2 Makefile | 14 arch/arm/boot/dts/tegra114.dtsi | 2 arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi | 2 arch/arm64/include/asm/pgtable.h | 3 arch/mips/include/asm/ftrace.h | 16 arch/mips/include/asm/ptrace.h | 3 arch/mips/kernel/pm-cps.c | 30 + arch/parisc/math-emu/driver.c | 16 arch/powerpc/kernel/prom_init.c | 4 arch/um/Makefile | 1 arch/um/kernel/mem.c | 1 arch/x86/events/amd/ibs.c | 3 arch/x86/include/asm/nmi.h | 2 arch/x86/include/asm/perf_event.h | 1 arch/x86/kernel/cpu/bugs.c | 10 arch/x86/kernel/nmi.c | 42 ++ arch/x86/kernel/reboot.c | 10 arch/x86/um/os-Linux/mcontext.c | 3 crypto/algif_hash.c | 4 drivers/acpi/Kconfig | 2 drivers/acpi/hed.c | 7 drivers/acpi/pptt.c | 11 drivers/char/tpm/tpm_tis_core.h | 2 drivers/clk/imx/clk-imx8mp.c | 151 +++++++++ drivers/clocksource/i8253.c | 6 drivers/clocksource/mips-gic-timer.c | 6 drivers/cpuidle/governors/menu.c | 13 drivers/dma/dmatest.c | 6 drivers/dma/ti/k3-udma.c | 10 drivers/edac/altera_edac.c | 9 drivers/edac/altera_edac.h | 2 drivers/edac/ie31200_edac.c | 28 - drivers/fpga/altera-cvp.c | 2 drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c | 10 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 16 drivers/gpu/drm/amd/display/dc/core/dc.c | 1 drivers/gpu/drm/ast/ast_mode.c | 10 drivers/gpu/drm/drm_atomic_helper.c | 28 + drivers/gpu/drm/drm_edid.c | 1 drivers/gpu/drm/i915/gvt/opregion.c | 8 drivers/gpu/drm/mediatek/mtk_dpi.c | 5 drivers/gpu/drm/meson/meson_vclk.c | 6 drivers/gpu/drm/nouveau/nouveau_fence.c | 2 drivers/gpu/drm/panel/panel-simple.c | 25 - drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 17 - drivers/hid/hid-ids.h | 4 drivers/hid/hid-quirks.c | 2 drivers/hid/usbhid/usbkbd.c | 2 drivers/hwmon/gpio-fan.c | 16 drivers/hwmon/xgene-hwmon.c | 2 drivers/i2c/busses/i2c-imx-lpi2c.c | 4 drivers/i2c/busses/i2c-pxa.c | 5 drivers/i2c/busses/i2c-qup.c | 36 ++ drivers/iio/accel/adis16201.c | 4 drivers/iio/adc/ad7606_spi.c | 2 drivers/iio/adc/ad7768-1.c | 2 drivers/iio/adc/dln2-adc.c | 2 drivers/iio/chemical/sps30.c | 2 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 6 drivers/infiniband/sw/rxe/rxe_cq.c | 5 drivers/input/mouse/synaptics.c | 5 drivers/iommu/amd/init.c | 8 drivers/iommu/intel/iommu.c | 4 drivers/irqchip/irq-gic-v2m.c | 8 drivers/mailbox/mailbox.c | 7 drivers/md/dm-cache-target.c | 24 + drivers/md/dm-integrity.c | 2 drivers/md/dm-table.c | 9 drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c | 3 drivers/media/usb/cx231xx/cx231xx-417.c | 2 drivers/media/v4l2-core/v4l2-subdev.c | 2 drivers/mmc/host/renesas_sdhi_core.c | 10 drivers/mmc/host/sdhci-pci-core.c | 6 drivers/mmc/host/sdhci.c | 9 drivers/net/bonding/bond_main.c | 2 drivers/net/can/c_can/c_can_platform.c | 2 drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 2 drivers/net/dsa/b53/b53_common.c | 11 drivers/net/dsa/sja1105/sja1105_main.c | 6 drivers/net/ethernet/amd/xgbe/xgbe-desc.c | 9 drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 24 + drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 11 drivers/net/ethernet/amd/xgbe/xgbe.h | 4 drivers/net/ethernet/apm/xgene-v2/main.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 36 +- drivers/net/ethernet/cadence/macb_main.c | 19 - drivers/net/ethernet/dlink/dl2k.c | 2 drivers/net/ethernet/dlink/dl2k.h | 2 drivers/net/ethernet/freescale/fec_main.c | 7 drivers/net/ethernet/intel/ice/ice_arfs.c | 9 drivers/net/ethernet/intel/ice/ice_lib.c | 5 drivers/net/ethernet/intel/ice/ice_main.c | 20 - drivers/net/ethernet/mellanox/mlx4/alloc.c | 6 drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 5 drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c | 3 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 5 drivers/net/ethernet/mellanox/mlx5/core/events.c | 11 drivers/net/ethernet/mellanox/mlx5/core/health.c | 1 drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 1 drivers/net/ethernet/mellanox/mlx5/core/rdma.c | 12 drivers/net/ethernet/mellanox/mlx5/core/rdma.h | 4 drivers/net/ethernet/microchip/lan743x_main.c | 8 drivers/net/ethernet/microchip/lan743x_main.h | 1 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 7 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 drivers/net/ethernet/ti/cpsw_new.c | 1 drivers/net/ieee802154/ca8210.c | 9 drivers/net/vxlan/vxlan_core.c | 18 - drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 6 drivers/net/wireless/mediatek/mt76/dma.c | 1 drivers/net/wireless/realtek/rtw88/main.c | 40 -- drivers/net/wireless/realtek/rtw88/reg.h | 3 drivers/net/wireless/realtek/rtw88/rtw8822b.c | 14 drivers/net/wireless/realtek/rtw88/util.c | 3 drivers/nvdimm/label.c | 3 drivers/nvme/host/core.c | 3 drivers/nvme/host/tcp.c | 31 + drivers/nvme/target/tcp.c | 3 drivers/of/device.c | 7 drivers/pci/controller/dwc/pci-imx6.c | 5 drivers/pci/controller/pcie-brcmstb.c | 5 drivers/pci/setup-bus.c | 6 drivers/perf/arm-cmn.c | 2 drivers/phy/phy-core.c | 7 drivers/phy/renesas/phy-rcar-gen3-usb2.c | 7 drivers/phy/tegra/xusb.c | 8 drivers/pinctrl/bcm/pinctrl-bcm281xx.c | 44 +- drivers/pinctrl/devicetree.c | 10 drivers/pinctrl/meson/pinctrl-meson.c | 2 drivers/platform/x86/asus-wmi.c | 3 drivers/platform/x86/fujitsu-laptop.c | 33 +- drivers/platform/x86/thinkpad_acpi.c | 7 drivers/regulator/ad5398.c | 12 drivers/rtc/rtc-ds1307.c | 4 drivers/rtc/rtc-rv3032.c | 2 drivers/scsi/lpfc/lpfc_hbadisc.c | 17 - drivers/scsi/mpt3sas/mpt3sas_ctl.c | 12 drivers/scsi/st.c | 29 + drivers/scsi/st.h | 2 drivers/soc/ti/k3-socinfo.c | 13 drivers/spi/spi-fsl-dspi.c | 46 ++ drivers/spi/spi-loopback-test.c | 2 drivers/spi/spi-sun4i.c | 5 drivers/spi/spi-zynqmp-gqspi.c | 20 - drivers/staging/axis-fifo/axis-fifo.c | 14 drivers/staging/iio/adc/ad7816.c | 2 drivers/target/iscsi/iscsi_target.c | 2 drivers/target/target_core_file.c | 3 drivers/target/target_core_iblock.c | 4 drivers/target/target_core_sbc.c | 6 drivers/thermal/qoriq_thermal.c | 13 drivers/usb/chipidea/ci_hdrc_imx.c | 36 +- drivers/usb/class/usbtmc.c | 59 ++- drivers/usb/gadget/udc/tegra-xudc.c | 4 drivers/usb/host/uhci-platform.c | 2 drivers/usb/host/xhci-tegra.c | 3 drivers/usb/typec/altmodes/displayport.c | 18 - drivers/usb/typec/tcpm/tcpm.c | 2 drivers/usb/typec/ucsi/displayport.c | 2 drivers/usb/typec/ucsi/ucsi_ccg.c | 5 drivers/video/fbdev/core/bitblit.c | 5 drivers/video/fbdev/core/fbcon.c | 10 drivers/video/fbdev/core/fbcon.h | 38 -- drivers/video/fbdev/core/fbcon_ccw.c | 5 drivers/video/fbdev/core/fbcon_cw.c | 5 drivers/video/fbdev/core/fbcon_ud.c | 5 drivers/video/fbdev/core/tileblit.c | 45 ++ drivers/video/fbdev/fsl-diu-fb.c | 1 drivers/xen/platform-pci.c | 4 drivers/xen/swiotlb-xen.c | 18 - drivers/xen/xenbus/xenbus.h | 2 drivers/xen/xenbus/xenbus_comms.c | 9 drivers/xen/xenbus/xenbus_dev_frontend.c | 2 drivers/xen/xenbus/xenbus_probe.c | 14 drivers/xen/xenbus/xenbus_xs.c | 18 - fs/btrfs/extent-tree.c | 25 + fs/btrfs/extent_io.c | 7 fs/btrfs/send.c | 6 fs/cifs/readdir.c | 7 fs/coredump.c | 81 ++++- fs/ext4/balloc.c | 4 fs/namespace.c | 9 fs/nfs/delegation.c | 3 fs/nfs/filelayout/filelayoutdev.c | 6 fs/nfs/flexfilelayout/flexfilelayout.c | 1 fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 fs/nfs/nfs4proc.c | 9 fs/nfs/nfs4state.c | 10 fs/nfs/pnfs.c | 9 fs/nfs/pnfs.h | 4 fs/nfs/pnfs_nfs.c | 9 fs/ocfs2/journal.c | 80 +++- fs/ocfs2/journal.h | 1 fs/ocfs2/ocfs2.h | 17 - fs/ocfs2/quota_local.c | 9 fs/ocfs2/super.c | 3 fs/orangefs/inode.c | 7 include/drm/drm_atomic.h | 23 + include/linux/binfmts.h | 1 include/linux/dma-mapping.h | 12 include/linux/ipv6.h | 1 include/linux/mlx4/device.h | 2 include/linux/pid.h | 1 include/linux/rcupdate.h | 3 include/linux/rcutree.h | 2 include/linux/tpm.h | 2 include/linux/types.h | 3 include/media/v4l2-subdev.h | 4 include/net/netfilter/nf_tables.h | 2 include/net/sch_generic.h | 15 include/sound/pcm.h | 2 include/trace/events/btrfs.h | 2 include/uapi/linux/types.h | 1 kernel/cgroup/cgroup.c | 2 kernel/fork.c | 98 +++++- kernel/padata.c | 3 kernel/params.c | 4 kernel/rcu/tree_plugin.h | 11 kernel/time/posix-timers.c | 1 kernel/trace/trace.c | 5 lib/dynamic_queue_limits.c | 2 mm/memcontrol.c | 6 mm/page_alloc.c | 8 net/bridge/br_nf_core.c | 7 net/bridge/br_private.h | 1 net/can/bcm.c | 79 +++- net/can/gw.c | 165 ++++++---- net/core/pktgen.c | 13 net/ipv4/fib_frontend.c | 18 - net/ipv4/fib_rules.c | 4 net/ipv4/fib_trie.c | 22 - net/ipv4/inet_hashtables.c | 37 +- net/ipv4/tcp_input.c | 56 +-- net/ipv4/udp_offload.c | 61 +++ net/ipv6/fib6_rules.c | 4 net/ipv6/ip6_output.c | 9 net/llc/af_llc.c | 8 net/netfilter/ipset/ip_set_hash_gen.h | 2 net/netfilter/nf_conntrack_standalone.c | 12 net/netfilter/nf_tables_api.c | 54 ++- net/netfilter/nft_immediate.c | 2 net/openvswitch/actions.c | 3 net/sched/act_mirred.c | 22 - net/sched/sch_codel.c | 2 net/sched/sch_drr.c | 9 net/sched/sch_ets.c | 9 net/sched/sch_fq.c | 2 net/sched/sch_fq_codel.c | 2 net/sched/sch_fq_pie.c | 2 net/sched/sch_hfsc.c | 15 net/sched/sch_hhf.c | 2 net/sched/sch_pie.c | 2 net/sched/sch_qfq.c | 11 net/sunrpc/clnt.c | 3 net/sunrpc/rpcb_clnt.c | 5 net/tipc/crypto.c | 5 net/xfrm/xfrm_policy.c | 3 net/xfrm/xfrm_state.c | 3 samples/ftrace/sample-trace-array.c | 2 scripts/config | 26 - scripts/kconfig/merge_config.sh | 4 security/smack/smackfs.c | 4 sound/core/oss/pcm_oss.c | 3 sound/core/pcm_native.c | 11 sound/pci/es1968.c | 6 sound/pci/hda/patch_realtek.c | 42 ++ sound/sh/Kconfig | 2 sound/soc/codecs/tas2764.c | 51 +-- sound/soc/intel/boards/bytcr_rt5640.c | 13 sound/soc/qcom/qdsp6/q6afe-clocks.c | 209 ++++++------- sound/soc/qcom/qdsp6/q6afe.c | 2 sound/soc/qcom/qdsp6/q6afe.h | 2 sound/soc/soc-dai.c | 8 sound/soc/soc-ops.c | 29 + sound/usb/format.c | 3 tools/bpf/bpftool/common.c | 3 tools/build/Makefile.build | 6 tools/lib/bpf/libbpf.c | 2 tools/testing/selftests/vm/compaction_test.c | 19 - 281 files changed, 2381 insertions(+), 1039 deletions(-)
Abdun Nihaal (1):
qlcnic: fix memory leak in qlcnic_sriov_channel_cfg_cmd()
Aditya Garg (3):
Input: synaptics - enable InterTouch on Dynabook Portege X30L-G
Input: synaptics - enable InterTouch on Dell Precision M3800
Input: synaptics - enable InterTouch on TUXEDO InfinityBook Pro 14 v5
Ahmad Fatoum (1):
clk: imx8mp: inform CCF of maximum frequency of clocks
Al Viro (2):
do_umount(): add missing barrier before refcount checks in sync case __legitimize_mnt(): check for MNT_SYNC_UMOUNT should be under mount_lock
Alessandro Grassi (1):
spi: spi-sun4i: fix early activation
Alexander Lobakin (1):
ice: arfs: fix use-after-free when freeing @rx_cpu_rmap
Alexander Stein (2):
usb: chipidea: ci_hdrc_imx: use dev_err_probe()
hwmon: (gpio-fan) Add missing mutex locks
Alexander Sverdlin (1):
net: ethernet: ti: cpsw_new: populate netdev of_node
Alexandre Belloni (2):
rtc: rv3032: fix EERD location
rtc: ds1307: stop disabling alarms on probe
Alexei Lazar (1):
net/mlx5: Extend Ethtool loopback selftest to support non-linear SKB
Alexey Charkov (1):
usb: uhci-platform: Make the clock really optional
Alice Guo (1):
thermal/drivers/qoriq: Power down TMU on system suspend
Alistair Francis (1):
nvmet-tcp: don't restore null sk_state_change
Andreas Schwab (1):
powerpc/prom_init: Fixup missing #size-cells on PowerBook6,7
Andrei Kuchynski (1):
usb: typec: ucsi: displayport: Fix NULL pointer access
Andrew Davis (1):
soc: ti: k3-socinfo: Do not use syscon helper to build regmap
Andrey Vatoropin (1):
hwmon: (xgene-hwmon) use appropriate type for the latency value
Andy Shevchenko (2):
types: Complement the aligned types with signed 64-bit one
ieee802154: ca8210: Use proper setters and getters for bitwise types
Angelo Dureghello (1):
iio: adc: ad7606: fix serial register access
AngeloGioacchino Del Regno (1):
drm/mediatek: mtk_dpi: Add checks for reg_h_fre_con existence
Ankur Arora (2):
rcu: handle quiescent states for PREEMPT_RCU=n, PREEMPT_COUNT=y
rcu: fix header guard for rcu_all_qs()
Arnd Bergmann (2):
net: xgene-v2: remove incorrect ACPI_PTR annotation EDAC/ie31200: work around false positive build warning
Artur Weber (1):
pinctrl: bcm281xx: Use "unsigned int" instead of bare "unsigned"
Benjamin Berg (1):
um: Store full CSGSFS and SS register from mcontext
Benjamin Marzinski (1):
dm: always update the array size in realloc_argv on success
Bibo Mao (1):
MIPS: Use arch specific syscall name match function
Bitterblue Smith (5):
wifi: rtw88: Fix rtw_init_vht_cap() for RTL8814AU
wifi: rtw88: Fix rtw_init_ht_cap() for RTL8814AU
wifi: rtw88: Fix rtw_desc_to_mcsrate() to handle MCS16-31
wifi: rtw88: Fix download_firmware_validate() for RTL8814AU
wifi: rtw88: Don't use static local variable in rtw8822b_set_tx_power_index_by_rate
Bogdan-Gabriel Roman (1):
spi: spi-fsl-dspi: Halt the module after a new message transfer
Breno Leitao (2):
x86/bugs: Make spectre user default depend on MITIGATION_SPECTRE_V2
memcg: always call cond_resched() after fn()
Chris Mi (1):
net/mlx5: E-switch, Fix error handling for enabling roce
Christian Brauner (4):
coredump: fix error handling for replace_fd()
pid: add pidfd_prepare()
fork: use pidfd_prepare()
coredump: hand a pidfd to the usermode coredump helper
Christian Göttsche (1):
ext4: reorder capability check last
Christian Hewitt (1):
Revert "drm/meson: vclk: fix calculation of 59.94 fractional rates"
Clark Wang (1):
i2c: imx-lpi2c: Fix clock count when probe defers
Claudiu Beznea (1):
phy: renesas: rcar-gen3-usb2: Set timing registers only once
Cong Wang (2):
net_sched: Flush gso_skb list too during ->change()
sch_hfsc: Fix qlen accounting bug when using peek in hfsc_enqueue()
Dan Carpenter (1):
usb: typec: fix potential array underflow in ucsi_ccg_sync_control()
Daniel Gomez (1):
kconfig: merge_config: use an empty file as initfile
Daniel Wagner (1):
nvme: unblock ctrl state transition for firmware update
Dave Penkler (3):
usb: usbtmc: Fix erroneous get_stb ioctl error returns
usb: usbtmc: Fix erroneous wait_srq ioctl return
usb: usbtmc: Fix erroneous generic_read ioctl return
David Lechner (1):
iio: chemical: sps30: use aligned_s64 for timestamp
Diogo Ivo (1):
arm64: tegra: p2597: Fix gpio for vdd-1v8-dis regulator
Dmitry Antipov (1):
module: ensure that kobject_put() is safe for module type kobjects
Dmitry Baryshkov (2):
ASoC: q6afe-clocks: fix reprobing of the driver
phy: core: don't require set_mode() callback for phy_get_mode() to work
Dmitry Bogdanov (1):
scsi: target: iscsi: Fix timeout on deleted connection
Dmitry Torokhov (1):
Input: synaptics - enable SMBus for HP Elitebook 850 G1
Dominik Grzegorzek (1):
padata: do not leak refcount in reorder_work
Eelco Chaudron (1):
openvswitch: Fix unsafe attribute parsing in output_userspace()
Eric Dumazet (3):
can: gw: use call_rcu() instead of costly synchronize_rcu()
posix-timers: Add cond_resched() to posix_timer_add() search loop
tcp: bring back NUMA dispersion in inet_ehash_locks_alloc()
Erick Shepherd (2):
mmc: host: Wait for Vdd to settle on card power off
mmc: sdhci: Disable SD card clock before changing parameters
Fedor Pchelkin (2):
usb: chipidea: ci_hdrc_imx: implement usb_phy_init() error handling
wifi: mt76: disable napi on driver removal
Felix Fietkau (1):
net: ipv6: fix UDPv6 GSO segmentation with NAT
Feng Tang (1):
selftests/mm: compaction_test: support platform with huge mount of memory
Filipe Manana (2):
btrfs: don't BUG_ON() when 0 reference count at btrfs_lookup_extent_info()
btrfs: send: return -ENAMETOOLONG when attempting a path that is too long
Florian Westphal (2):
netfilter: nf_tables: pass nft_chain to destroy function, not nft_ctx
netfilter: nf_tables: do not defer rule destruction via call_rcu
Frediano Ziglio (1):
xen: Add support for XenServer 6.1 platform device
GONG Ruiqi (1):
usb: typec: fix pm usage counter imbalance in ucsi_ccg_sync_control()
Gabriel Shahrouzi (4):
staging: iio: adc: ad7816: Correct conditional logic for store mode
staging: axis-fifo: Remove hardware resets for user errors
staging: axis-fifo: Correct handling of tx_fifo_depth for size validation
iio: adis16201: Correct inclinometer channel resolution
Geert Uytterhoeven (2):
spi: loopback-test: Do not split 1024-byte hexdumps
ALSA: sh: SND_AICA should depend on SH_DMA_API
Goldwyn Rodrigues (1):
btrfs: correct the order of prelim_ref arguments in btrfs__prelim_ref
Greg Kroah-Hartman (1):
Linux 5.10.238
Hangbin Liu (1):
bonding: report duplicate MAC address in all situations
Hans Verkuil (1):
media: cx231xx: set device_caps for 417
Hans de Goede (1):
platform/x86: asus-wmi: Fix wlan_ctrl_by_user detection
Hector Martin (1):
ASoC: tas2764: Power up/down amp on mute ops
Helge Deller (1):
parisc: Fix double SIGFPE crash
Ian Rogers (1):
tools/build: Don't pass test log files to linker
Ido Schimmel (2):
vxlan: Annotate FDB data races
bridge: netfilter: Fix forwarding of fragmented packets
Ilia Gavrilov (1):
llc: fix data loss when reading from a socket in llc_ui_recvmsg()
Ilpo Järvinen (2):
tcp: reorganize tcp_in_ack_event() and tcp_count_delivered()
PCI: Fix old_size lower bound in calculate_iosize() too
Isaac Scott (1):
regulator: ad5398: Add device tree support
Ivan Pravdin (1):
crypto: algif_hash - fix double free in hash_accept
Jakub Kicinski (2):
net/sched: act_mirred: don't override retval if we already lost the skb
eth: mlx4: don't try to complete XDP frames in netpoll
Jan Kara (3):
ocfs2: switch osb->disable_recovery to enum
ocfs2: implement handshaking with ocfs2 recovery thread
ocfs2: stop quota recovery before disabling quotas
Jani Nikula (1):
drm/i915/gvt: fix unterminated-string-initialization warning
Jason Andryuk (2):
xenbus: Use kref to track req lifetime
xenbus: Allow PVH dom0 a non-local xenstore
Jeff Layton (1):
nfs: don't share pNFS DS connections between net namespaces
Jeongjun Park (1):
tracing: Fix oob write in trace_seq_to_buffer()
Jeremy Linton (1):
ACPI: PPTT: Fix processor subtable walk
Jessica Zhang (1):
drm: Add valid clones check
Jim Lin (1):
usb: host: tegra: Prevent host controller crash when OTG port is used
Jing Su (1):
dql: Fix dql->limit value when reset.
Joachim Priesner (1):
ALSA: usb-audio: Add second USB ID for Jabra Evolve 65 headset
John Chau (1):
platform/x86: thinkpad_acpi: Support also NEC Lavie X1475JAS
Jonas Gorski (3):
net: dsa: b53: allow leaky reserved multicast
net: dsa: b53: fix VLAN ID for untagged vlan on bridge leave
net: dsa: b53: fix learning on VLAN unaware bridges
Jonathan Cameron (2):
iio: adc: dln2: Use aligned_s64 for timestamp
iio: adc: ad7768-1: Fix insufficient alignment of timestamp.
Jozsef Kadlecsik (1):
netfilter: ipset: fix region locking in hash types
Juergen Gross (1):
xen/swiotlb: relax alignment requirements
Justin Tee (1):
scsi: lpfc: Handle duplicate D_IDs in ndlp search-by D_ID routine
Kai Mäkisara (3):
scsi: st: Tighten the page format heuristics with MODE SELECT
scsi: st: ERASE does not change tape location
scsi: st: Restore some drive settings after reset
Kees Cook (1):
net/mlx4_core: Avoid impossible mlx4_db_alloc() order value
Kevin Baker (1):
drm/panel: simple: Update timings for AUO G101EVN010
Konstantin Andreev (1):
smack: recognize ipv4 CIPSO w/o categories
Krzysztof Kozlowski (1):
can: c_can: Use of_property_present() to test existence of DT property
Kuhanh Murugasen Krishnan (1):
fpga: altera-cvp: Increase credit timeout
Kuninori Morimoto (1):
ASoC: soc-dai: check return value at snd_soc_dai_set_tdm_slot()
Kuniyuki Iwashima (2):
ipv4: fib: Move fib_valid_key_len() to rtm_to_fib_config().
ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure().
Larisa Grigore (2):
spi: spi-fsl-dspi: restrict register range for regmap access
spi: spi-fsl-dspi: Reset SR flags before sending a new message
Li Lingfeng (1):
nfs: handle failure of nfs_get_lock_context in unlock path
Ma Ke (1):
phy: Fix error handling in tegra_xusb_port_init
Manuel Fombuena (1):
Input: synaptics - enable InterTouch on Dynabook Portege X30-D
Maor Gottlieb (1):
net/mlx5: E-Switch, Initialize MAC Address for Default GID
Marc Kleine-Budde (1):
can: mcp251xfd: mcp251xfd_remove(): fix order of unregistration calls
Marek Szyprowski (1):
dma-mapping: avoid potential unused data compilation warning
Mark Harmstone (1):
btrfs: avoid linker error in btrfs_find_create_tree_block()
Mark Pearson (1):
platform/x86: thinkpad_acpi: Ignore battery threshold change event notification
Markus Elfring (1):
media: c8sectpfe: Call of_node_put(i2c_bus) only once in c8sectpfe_probe()
Martin Blumenstingl (1):
pinctrl: meson: define the pull up/down resistor value as 60 kOhm
Martin Povišer (1):
ASoC: ops: Enforce platform maximum on initial value
Masahiro Yamada (1):
um: let 'make clean' properly clean underlying SUBARCH as well
Mathieu Othacehe (1):
net: cadence: macb: Fix a possible deadlock in macb_halt_tx.
Matthew Wilcox (Oracle) (1):
orangefs: Do not truncate file size
Mattias Barthel (1):
net: fec: ERR007885 Workaround for conventional TX
Michael Chan (1):
bnxt_en: Fix ethtool -d byte order for 32-bit values
Michael Liang (1):
nvme-tcp: fix premature queue removal and I/O failover
Michal Suchanek (1):
tpm: tis: Double the timeout B to 4s
Mike Christie (1):
scsi: target: Fix WRITE_SAME No Data Buffer crash
Mikulas Patocka (2):
dm-integrity: fix a warning on invalid table line
dm: restrict dm device size to 2^63-512 bytes
Milton Barrera (1):
HID: quirks: Add ADATA XPG alpha wireless mouse support
Ming-Hung Tsai (1):
dm cache: prevent BUG_ON by blocking retries on failed device resumes
Mingcong Bai (1):
iommu/vt-d: Apply quirk_iommu_igfx for 8086:0044 (QM57/QS57)
Moshe Shemesh (1):
net/mlx5: Avoid report two health errors on same syndrome
Nandakumar Edamana (1):
libbpf: Fix out-of-bound read
Nathan Chancellor (1):
kbuild: Disable -Wdefault-const-init-unsafe
Nathan Lynch (1):
dmaengine: Revert "dmaengine: dmatest: Fix dmatest waiting less when interrupted"
Nicolas Bouchinet (1):
netfilter: conntrack: Bound nf_conntrack sysctl writes
Niravkumar L Rabara (2):
EDAC/altera: Test the correct error reg offset EDAC/altera: Set DDR and SDMMC interrupt mask before registration
Oliver Hartkopp (3):
can: gw: fix RCU/BH usage in cgw_create_job()
can: bcm: add locking for bcm_op runtime updates
can: bcm: add missing rcu read protection for procfs content
Oliver Neukum (1):
USB: usbtmc: use interruptible sleep in usbtmc_read
Pablo Neira Ayuso (1):
netfilter: nf_tables: wait for rcu grace period on net_device removal
Paul Burton (2):
MIPS: pm-cps: Use per-CPU variables as per-CPU, not per-core
clocksource: mips-gic-timer: Enable counter when CPUs start
Paul Chaignon (1):
xfrm: Sanitize marks before insert
Paul Kocialkowski (1):
net: dwmac-sun8i: Use parsed internal PHY address instead of 1
Pavel Paklov (1):
iommu/amd: Fix potential buffer overflow in parse_ivrs_acpihid
Pedro Tammela (1):
net_sched: hfsc: Address reentrant enqueue adding class to eltree twice
Peter Seiderer (2):
net: pktgen: fix mpls maximum labels list parsing
net: pktgen: fix access outside of user given buffer in pktgen_thread_write()
Philip Yang (1):
drm/amdkfd: KFD release_work possible circular locking
Philipp Stanner (1):
drm/nouveau: Fix WARN_ON in nouveau_fence_context_kill()
RD Babiera (2):
usb: typec: tcpm: delay SNK_TRY_WAIT_DEBOUNCE to SRC_TRYWAIT transition
usb: typec: altmodes/displayport: create sysfs nodes as driver's default device attribute group
Rafael J. Wysocki (1):
cpuidle: menu: Avoid discarding useful information
Ravi Bangoria (1):
perf/amd/ibs: Fix perf_ibs_op.cnt_mask for CurCnt
Richard Zhu (1):
PCI: imx6: Skip controller_id generation logic for i.MX7D
Robert Richter (1):
libnvdimm/labels: Fix divide error in nd_label_data_init()
Robin Murphy (1):
perf/arm-cmn: Initialise cmn->cpu earlier
Ronald Wahl (1):
dmaengine: ti: k3-udma: Add missing locking
Ruslan Piasetskyi (1):
mmc: renesas_sdhi: Fix error handling in renesas_sdhi_probe
Ryan Roberts (1):
arm64/mm: Check PUD_TYPE_TABLE in pud_bad()
Sakari Ailus (1):
media: v4l: Memset argument to 0 before calling get_mbus_config pad op
Sean Anderson (1):
spi: zynqmp-gqspi: Always acknowledge interrupts
Sebastian Andrzej Siewior (1):
clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable()
Sergey Shtylyov (1):
of: module: add buffer overflow check in of_modalias()
Seyediman Seyedarab (1):
kbuild: fix argument parsing in scripts/config
Shahar Shitrit (2):
net/mlx5: Modify LSB bitmask in temperature event to include only the first bit net/mlx5: Apply rate-limiting to high temperature warning
Shivasharan S (1):
scsi: mpt3sas: Send a diag reset if target reset fails
Shixiong Ou (1):
fbdev: fsl-diu-fb: add missing device_remove_file()
Silvano Seva (2):
iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_fifo
iio: imu: st_lsm6dsx: fix possible lockup in st_lsm6dsx_read_tagged_fifo
Simon Horman (1):
net: dlink: Correct endianness handling of led_mode
Simona Vetter (1):
drm/atomic: clarify the rules around drm_atomic_state->allow_modeset
Stanimir Varbanov (2):
PCI: brcmstb: Expand inbound window size up to 64GB
PCI: brcmstb: Add a softdep to MIP MSI-X driver
Stephan Gerhold (1):
i2c: qup: Vote for interconnect bandwidth to DRAM
Steven Rostedt (1):
tracing: samples: Initialize trace_array_printk() with the correct function
Suzuki K Poulose (1):
irqchip/gic-v2m: Prevent use after free of gicv2m_get_fwnode()
Svyatoslav Ryhel (1):
ARM: tegra: Switch DSI-B clock parent to PLLD on Tegra114
Takashi Iwai (3):
ASoC: Intel: bytcr_rt5640: Add DMI quirk for Acer Aspire SW3-013
ALSA: hda/realtek: Add quirk for HP Spectre x360 15-df1xxx
ALSA: pcm: Fix race of buffer access at PCM OSS layer
Thangaraj Samynathan (1):
net: lan743x: Fix memleak issue when GSO enabled
Thomas Gleixner (1):
irqchip/gic-v2m: Mark a few functions __init
Thomas Zimmermann (1):
drm/ast: Find VBIOS mode from regular display size
Thorsten Blum (1):
MIPS: Fix MAX_REG_OFFSET
Tianyang Zhang (1):
mm/page_alloc.c: avoid infinite retries caused by cpuset race
Tiwei Bie (1):
um: Update min_low_pfn to match changes in uml_reserved
Tom Chung (1):
drm/amd/display: Initial psr_version with correct setting
Trond Myklebust (6):
NFSv4/pnfs: Reset the layout state after a layoutreturn
NFSv4: Check for delegation validity in nfs_start_delegation_return_locked()
NFSv4: Treat ENETUNREACH errors as fatal for state recovery
SUNRPC: rpc_clnt_set_transport() must not change the autobind setting
SUNRPC: rpcbind should never reset the port to the value '0' pNFS/flexfiles: Report ENETDOWN as a connection error
Tudor Ambarus (2):
dm: fix copying after src array boundaries
mailbox: use error ret code of of_parse_phandle_with_args()
Uladzislau Rezki (Sony) (1):
rcu/kvfree: Add kvfree_rcu_mightsleep() and kfree_rcu_mightsleep()
Valentin Caron (1):
pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map
Valtteri Koskivuori (1):
platform/x86: fujitsu-laptop: Support Lifebook S2110 hotkeys
Victor Lu (1):
drm/amdgpu: Do not program AGP BAR regs under SRIOV in gfxhub_v1_0.c
Victor Nogueira (4):
net_sched: drr: Fix double list add in class with netem as child qdisc
net_sched: hfsc: Fix a UAF vulnerability in class with netem as child qdisc
net_sched: ets: Fix double list add in class with netem as child qdisc
net_sched: qfq: Fix double list add in class with netem as child qdisc
Viktor Malik (1):
bpftool: Fix readlink usage in get_fd_type
Vishal Badole (1):
amd-xgbe: Fix to ensure dependent features are toggled with RX checksum offload
Vitalii Mordan (1):
i2c: pxa: fix call balance of i2c->clk handling routines
Vladimir Oltean (1):
net: dsa: sja1105: discard incoming frames in BR_STATE_LISTENING
Waiman Long (1):
x86/nmi: Add an emergency handler in nmi_desc & use it in nmi_shootdown_cpus()
Wang Liang (1):
net/tipc: fix slab-use-after-free Read in tipc_aead_encrypt_done
Wang Zhaolong (2):
smb: client: Fix use-after-free in cifs_fill_dirent
smb: client: Reset all search buffer pointers when releasing buffer
Wayne Chang (1):
usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN
Wenpeng Liang (1):
net/mlx5: Remove return statement exist at the end of void function
Wentao Liang (2):
wifi: brcm80211: fmac: Add error handling for brcmf_usb_dl_writeimage()
ALSA: es1968: Add error handling for snd_pcm_hw_constraint_pow2()
Willem de Bruijn (1):
ipv6: save dontfrag in cork
William Tu (2):
net/mlx5e: set the tx_queue_len for pfifo_fast net/mlx5e: reduce rep rxq depth to 256 for ECPF
Xiang wangx (1):
irqchip/gic-v2m: Add const to of_device_id
Xiaofei Tan (1):
ACPI: HED: Always initialize before evged
Yemike Abhilash Chandra (1):
dmaengine: ti: k3-udma: Use cap_mask directly from dma_device structure instead of a local copy
Zack Rusin (1):
drm/vmwgfx: Fix a deadlock in dma buf fence polling
Zhu Yanjun (1):
RDMA/rxe: Fix slab-use-after-free Read in rxe_queue_cleanup bug
Zsolt Kajtar (2):
fbcon: Use correct erase colour for clearing in fbcon
fbdev: core: tileblit: Implement missing margin clearing for tileblit
feijuan.li (1):
drm/edid: fixed the bug that hdr metadata was not reset
gaoxu (1):
cgroup: Fix compilation issue due to cgroup_mutex not being exported
junan (1):
HID: usbkbd: Fix the bit shift number for LED_KANA
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +2 -0
@@ -5122,6 +5122,8 @@ Selecting 'on' will also enable the mitigation against user space to user space task attacks. + Selecting specific mitigation does not force enable + user mitigations. Selecting 'off' will disable both the kernel and the user space protections.
Makefile +13 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 237 +SUBLEVEL = 238 EXTRAVERSION = NAME = Dare mighty things
@@ -795,6 +795,18 @@ KBUILD_CFLAGS += -Wno-gnu # source of a reference will be _MergedGlobals and not on of the whitelisted names. # See modpost pattern 2 KBUILD_CFLAGS += -mno-global-merge + +# Clang may emit a warning when a const variable, such as the dummy variables +# in typecheck(), or const member of an aggregate type are not initialized, +# which can result in unexpected behavior. However, in many audited cases of +# the "field" variant of the warning, this is intentional because the field is +# never used within a particular call path, the field is within a union with +# other non-const members, or the containing object is not const so the field +# can be modified via memcpy() / memset(). While the variable warning also gets +# disabled with this same switch, there should not be too much coverage lost +# because -Wuninitialized will still flag when an uninitialized const variable +# is used. +KBUILD_CFLAGS += $(call cc-disable-warning, default-const-init-unsafe) else # Warn about unmarked fall-throughs in switch statement.
arch/arm/boot/dts/tegra114.dtsi +1 -1
@@ -126,7 +126,7 @@ dsi@54400000 { reg = <0x54400000 0x00040000>; clocks = <&tegra_car TEGRA114_CLK_DSIB>, <&tegra_car TEGRA114_CLK_DSIBLP>, - <&tegra_car TEGRA114_CLK_PLL_D2_OUT0>; + <&tegra_car TEGRA114_CLK_PLL_D_OUT0>; clock-names = "dsi", "lp", "parent"; resets = <&tegra_car 82>; reset-names = "dsi";
arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi +1 -1
@@ -1638,7 +1638,7 @@ vdd_1v8_dis: regulator@7 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; - gpio = <&exp1 14 GPIO_ACTIVE_HIGH>; + gpio = <&exp1 9 GPIO_ACTIVE_HIGH>; enable-active-high; vin-supply = <&vdd_1v8>; };
arch/arm64/include/asm/pgtable.h +2 -1
@@ -601,7 +601,8 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) pr_err("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))#define pud_none (pud) (!pud_val(pud)) -#define pud_bad (pud) (!pud_table(pud)) +#define pud_bad (pud) ((pud_val(pud) & PUD_TYPE_MASK) != \ + PUD_TYPE_TABLE)#define pud_present (pud) pte_present(pud_pte(pud))#define pud_leaf (pud) (pud_present(pud) && !pud_table(pud))#define pud_valid (pud) pte_valid(pud_pte(pud))
arch/mips/include/asm/ftrace.h +16 -0
@@ -87,4 +87,20 @@ struct dyn_arch_ftrace {#endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* __ASSEMBLY__ */ #endif /* CONFIG_FUNCTION_TRACER */ + +#ifdef CONFIG_FTRACE_SYSCALLS +#ifndef __ASSEMBLY__ +/* +* Some syscall entry functions on mips start with "__sys_" (fork and clone, +* for instance). We should also match the sys_ variant with those. +*/ +#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME +static inline bool arch_syscall_match_sym_name (const char *sym, +const char *name) +{ +return !strcmp (sym, name) || + (!strncmp (sym,"__sys_" ,6 ) && !strcmp (sym +6 , name +4 )); +} +#endif /* __ASSEMBLY__ */ +#endif /* CONFIG_FTRACE_SYSCALLS */ #endif /* _ASM_MIPS_FTRACE_H */
arch/mips/include/asm/ptrace.h +2 -1
@@ -65,7 +65,8 @@ static inline void instruction_pointer_set(struct pt_regs *regs,/* Query offset/name of register from its name/offset */ extern int regs_query_register_offset (const char *name); -#define MAX_REG_OFFSET (offsetof(struct pt_regs, __last)) +#define MAX_REG_OFFSET \ + (offsetof(struct pt_regs, __last) - sizeof(unsigned long))/** * regs_get_register() - get register value from its offset
arch/mips/kernel/pm-cps.c +17 -13
@@ -56,10 +56,7 @@ static DEFINE_PER_CPU_ALIGNED(u32*, ready_count);/* Indicates online CPUs coupled with the current CPU */ static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled); -/* -* Used to synchronize entry to deep idle states. Actually per-core rather -* than per-CPU. -*/ +/* Used to synchronize entry to deep idle states */ static DEFINE_PER_CPU_ALIGNED(atomic_t, pm_barrier);/* Saved CPU state across the CPS_PM_POWER_GATED state */
@@ -118,9 +115,10 @@ int cps_pm_enter_state(enum cps_pm_state state)cps_nc_entry_fn entry;struct core_boot_config *core_cfg;struct vpe_boot_config *vpe_cfg; +atomic_t *barrier;/* Check that there is an entry function for this state */ - entry =per_cpu (nc_asm_enter, core)[state]; + entry =per_cpu (nc_asm_enter, cpu)[state];if (!entry)return -EINVAL ;
@@ -156,7 +154,7 @@ int cps_pm_enter_state(enum cps_pm_state state)smp_mb__after_atomic ();/* Create a non-coherent mapping of the core ready_count */ - core_ready_count =per_cpu (ready_count, core); + core_ready_count =per_cpu (ready_count, cpu); nc_addr =kmap_noncoherent (virt_to_page (core_ready_count), (unsigned long )core_ready_count); nc_addr += ((unsigned long )core_ready_count & ~PAGE_MASK );
@@ -164,7 +162,8 @@ int cps_pm_enter_state(enum cps_pm_state state)/* Ensure ready_count is zero-initialised before the assembly runs */ WRITE_ONCE (*nc_core_ready_count,0 ); -coupled_barrier (&per_cpu (pm_barrier, core), online); + barrier = &per_cpu (pm_barrier,cpumask_first (&cpu_sibling_map[cpu])); +coupled_barrier (barrier, online);/* Run the generated entry code */ left =entry (online, nc_core_ready_count);
@@ -635,12 +634,14 @@ static void *cps_gen_entry_code(unsigned cpu, enum cps_pm_state state)static int cps_pm_online_cpu (unsigned int cpu) { -enum cps_pm_state state; -unsigned core =cpu_core (&cpu_data[cpu]); +unsigned int sibling, core;void *entry_fn, *core_rc; +enum cps_pm_state state; + + core =cpu_core (&cpu_data[cpu]);for (state =CPS_PM_NC_WAIT ; state <CPS_PM_STATE_COUNT ; state++) { -if (per_cpu (nc_asm_enter, core)[state]) +if (per_cpu (nc_asm_enter, cpu)[state])continue ;if (!test_bit (state, state_support))continue ;
@@ -652,16 +653,19 @@ static int cps_pm_online_cpu(unsigned int cpu)clear_bit (state, state_support); } -per_cpu (nc_asm_enter, core)[state] = entry_fn; +for_each_cpu (sibling, &cpu_sibling_map[cpu]) +per_cpu (nc_asm_enter, sibling)[state] = entry_fn; } -if (!per_cpu (ready_count, core)) { +if (!per_cpu (ready_count, cpu)) { core_rc =kmalloc (sizeof (u32),GFP_KERNEL );if (!core_rc) {pr_err ("Failed allocate core %u ready_count\n" , core);return -ENOMEM ; } -per_cpu (ready_count, core) = core_rc; + +for_each_cpu (sibling, &cpu_sibling_map[cpu]) +per_cpu (ready_count, sibling) = core_rc; }return 0 ;
arch/parisc/math-emu/driver.c +13 -3
@@ -103,9 +103,19 @@ handle_fpe(struct pt_regs *regs)memcpy (regs->fr, frcopy,sizeof regs->fr);if (signalcode !=0 ) { -force_sig_fault (signalcode >>24 , signalcode &0xffffff , - (void __user *) regs->iaoq[0 ]); -return -1 ; +int sig = signalcode >>24 ; + +if (sig ==SIGFPE ) { +/* +* Clear floating point trap bit to avoid trapping +* again on the first floating-point instruction in +* the userspace signal handler. +*/ + regs->fr[0 ] &= ~(1ULL <<38 ); + } +force_sig_fault (sig, signalcode &0xffffff , + (void __user *) regs->iaoq[0 ]); +return -1 ; }return signalcode ?-1 :0 ;
arch/powerpc/kernel/prom_init.c +2 -2
@@ -2944,11 +2944,11 @@ static void __init fixup_device_tree_pmac(void)char type[8 ];phandle node; -// Some pmacs are missing #size-cells on escc nodes +// Some pmacs are missing #size-cells on escc or i2s nodes for (node =0 ;prom_next_node (&node); ) { type[0 ] ='\0' ;prom_getprop (node,"device_type" , type,sizeof (type)); -if (prom_strcmp (type,"escc" )) +if (prom_strcmp (type,"escc" ) &&prom_strcmp (type,"i2s" ))continue ;if (prom_getproplen (node,"#size-cells" ) !=PROM_ERROR )
arch/um/Makefile +1 -0
@@ -153,5 +153,6 @@ MRPROPER_FILES += $(HOST_DIR)/include/generated archclean: @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ -o -name '*.gcov' \) -type f -print | xargs rm -f + $(Q)$(MAKE) -f $(srctree)/Makefile ARCH=$(HEADER_ARCH) clean export HEADER_ARCH SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH
arch/um/kernel/mem.c +1 -0
@@ -49,6 +49,7 @@ void __init mem_init(void)map_memory (brk_end,__pa (brk_end), uml_reserved - brk_end,1 ,1 ,0 );memblock_free (__pa (brk_end), uml_reserved - brk_end); uml_reserved = brk_end; + min_low_pfn =PFN_UP (__pa (uml_reserved));/* this will put all low memory onto the freelists */ memblock_free_all ();
arch/x86/events/amd/ibs.c +2 -1
@@ -808,7 +808,8 @@ static __init int perf_event_ibs_init(void)if (ibs_caps &IBS_CAPS_OPCNTEXT ) { perf_ibs_op.max_period |=IBS_OP_MAX_CNT_EXT_MASK ; perf_ibs_op.config_mask |=IBS_OP_MAX_CNT_EXT_MASK ; - perf_ibs_op.cnt_mask |=IBS_OP_MAX_CNT_EXT_MASK ; + perf_ibs_op.cnt_mask |= (IBS_OP_MAX_CNT_EXT_MASK | +IBS_OP_CUR_CNT_EXT_MASK ); } ret =perf_ibs_pmu_init (&perf_ibs_op,"ibs_op" );
arch/x86/include/asm/nmi.h +2 -0
@@ -59,6 +59,8 @@ int __register_nmi_handler(unsigned int, struct nmiaction *);void unregister_nmi_handler (unsigned int ,const char *); +void set_emergency_nmi_handler (unsigned int type,nmi_handler_t handler); +void stop_nmi (void );void restart_nmi (void );void local_touch_nmi (void );
arch/x86/include/asm/perf_event.h +1 -0
@@ -402,6 +402,7 @@ struct pebs_xmm {*/ #define IBS_OP_CUR_CNT (0xFFF80ULL<<32)#define IBS_OP_CUR_CNT_RAND (0x0007FULL<<32) +#define IBS_OP_CUR_CNT_EXT_MASK (0x7FULL<<52)#define IBS_OP_CNT_CTL (1ULL<<19)#define IBS_OP_VAL (1ULL<<18)#define IBS_OP_ENABLE (1ULL<<17)
arch/x86/kernel/cpu/bugs.c +7 -3
@@ -1231,9 +1231,13 @@ static __ro_after_init enum spectre_v2_mitigation_cmd spectre_v2_cmd;static enum spectre_v2_user_cmd __init spectre_v2_parse_user_cmdline (void ) { +enum spectre_v2_user_cmd mode;char arg[20 ];int ret, i; + mode =IS_ENABLED (CONFIG_MITIGATION_SPECTRE_V2 ) ? +SPECTRE_V2_USER_CMD_AUTO :SPECTRE_V2_USER_CMD_NONE ; +switch (spectre_v2_cmd) {case SPECTRE_V2_CMD_NONE :return SPECTRE_V2_USER_CMD_NONE ;
@@ -1246,7 +1250,7 @@ spectre_v2_parse_user_cmdline(void) ret =cmdline_find_option (boot_command_line,"spectre_v2_user" , arg,sizeof (arg));if (ret <0 ) -return SPECTRE_V2_USER_CMD_AUTO ; +return mode;for (i =0 ; i <ARRAY_SIZE (v2_user_options); i++) {if (match_option (arg, ret, v2_user_options[i].option)) {
@@ -1256,8 +1260,8 @@ spectre_v2_parse_user_cmdline(void) } } -pr_err ("Unknown user space protection option (%s). Switching to AUTO select\n" , arg); -return SPECTRE_V2_USER_CMD_AUTO ; +pr_err ("Unknown user space protection option (%s). Switching to default\n" , arg); +return mode; }static inline bool spectre_v2_in_eibrs_mode (enum spectre_v2_mitigation mode)
arch/x86/kernel/nmi.c +42 -0
65 lines not on this page · raw message
arch/x86/kernel/reboot.c +3 -7
@@ -874,15 +874,11 @@ void nmi_shootdown_cpus(nmi_shootdown_cb callback) shootdown_callback = callback;atomic_set (&waiting_for_crash_ipi,num_online_cpus () -1 ); -/* Would it be better to replace the trap vector here? */ -if (register_nmi_handler (NMI_LOCAL , crash_nmi_callback, -NMI_FLAG_FIRST ,"crash" )) -return ;/* Return what? */ +/* -* Ensure the new callback function is set before sending -* out the NMI +* Set emergency handler to preempt other handlers. */ -wmb (); +set_emergency_nmi_handler (NMI_LOCAL , crash_nmi_callback);apic_send_IPI_allbutself (NMI_VECTOR );
arch/x86/um/os-Linux/mcontext.c +1 -2
@@ -26,7 +26,6 @@ void get_regs_from_mc(struct uml_pt_regs *regs, mcontext_t *mc)COPY (RIP );COPY2 (EFLAGS ,EFL );COPY2 (CS ,CSGSFS ); - regs->gp[CS /sizeof (unsigned long )] &=0xffff ; - regs->gp[CS /sizeof (unsigned long )] |=3 ; + regs->gp[SS /sizeof (unsigned long )] = mc->gregs[REG_CSGSFS ] >>48 ;#endif }
crypto/algif_hash.c +0 -4
@@ -262,10 +262,6 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags,return err; err =crypto_ahash_import (&ctx2->req, state); -if (err) { -sock_orphan (sk2); -sock_put (sk2); - }return err; }
drivers/acpi/Kconfig +1 -1
@@ -432,7 +432,7 @@ config ACPI_SBS the modules will be called sbs and sbshc. config ACPI_HED - tristate "Hardware Error Device" + bool "Hardware Error Device" help This driver supports the Hardware Error Device (PNP0C33), which is used to report some hardware errors notified via
drivers/acpi/hed.c +6 -1
@@ -72,7 +72,12 @@ static struct acpi_driver acpi_hed_driver = { .notify = acpi_hed_notify, }, }; -module_acpi_driver (acpi_hed_driver); + +static int __init acpi_hed_driver_init (void ) +{ +return acpi_bus_register_driver (&acpi_hed_driver); +} +subsys_initcall (acpi_hed_driver_init);ACPI_MODULE_NAME ("hed" );MODULE_AUTHOR ("Huang Ying" );
drivers/acpi/pptt.c +8 -3
@@ -219,16 +219,18 @@ static int acpi_pptt_leaf_node(struct acpi_table_header *table_hdr, sizeof(struct acpi_table_pptt)); proc_sz =sizeof (struct acpi_pptt_processor ); -while ((unsigned long )entry + proc_sz < table_end) { +/* ignore subtable types that are smaller than a processor node */ +while ((unsigned long )entry + proc_sz <= table_end) { cpu_node = (struct acpi_pptt_processor *)entry; +if (entry->type ==ACPI_PPTT_TYPE_PROCESSOR && cpu_node->parent == node_entry)return 0 ;if (entry->length ==0 )return 0 ; + entry = ACPI_ADD_PTR(struct acpi_subtable_header, entry, entry->length); - }return 1 ; }
@@ -261,15 +263,18 @@ static struct acpi_pptt_processor *acpi_find_processor_node(struct acpi_table_he proc_sz =sizeof (struct acpi_pptt_processor );/* find the processor structure associated with this cpuid */ -while ((unsigned long )entry + proc_sz < table_end) { +while ((unsigned long )entry + proc_sz <= table_end) { cpu_node = (struct acpi_pptt_processor *)entry;if (entry->length ==0 ) {pr_warn ("Invalid zero length subtable\n" );break ; } +/* entry->length may not equal proc_sz, revalidate the processor structure length */ if (entry->type ==ACPI_PPTT_TYPE_PROCESSOR && acpi_cpu_id == cpu_node->acpi_processor_id && + (unsigned long )entry + entry->length <= table_end && + entry->length == proc_sz + cpu_node->number_of_priv_resources *sizeof (u32) &&acpi_pptt_leaf_node (table_hdr, cpu_node)) {return (struct acpi_pptt_processor *)entry; }
drivers/char/tpm/tpm_tis_core.h +1 -1
@@ -53,7 +53,7 @@ enum tis_int_flags {enum tis_defaults {TIS_MEM_LEN =0x5000 ,TIS_SHORT_TIMEOUT =750 ,/* ms */ -TIS_LONG_TIMEOUT =2000 ,/* 2 sec */ +TIS_LONG_TIMEOUT =4000 ,/* 4 secs */ TIS_TIMEOUT_MIN_ATML =14700 ,/* usecs */ TIS_TIMEOUT_MAX_ATML =15000 ,/* usecs */ };
drivers/clk/imx/clk-imx8mp.c +151 -0
174 lines not on this page · raw message
drivers/clocksource/i8253.c +4 -2
@@ -103,7 +103,9 @@ int __init clocksource_i8253_init(void)#ifdef CONFIG_CLKEVT_I8253 void clockevent_i8253_disable (void ) { -raw_spin_lock (&i8253_lock); +unsigned long flags; + +raw_spin_lock_irqsave (&i8253_lock, flags);/* * Writing the MODE register should stop the counter, according to
@@ -133,7 +135,7 @@ void clockevent_i8253_disable(void)outb_p (0x30 ,PIT_MODE ); -raw_spin_unlock (&i8253_lock); +raw_spin_unlock_irqrestore (&i8253_lock, flags); }static int pit_shutdown (struct clock_event_device *evt)
drivers/clocksource/mips-gic-timer.c +3 -3
@@ -119,6 +119,9 @@ static void gic_update_frequency(void *data)static int gic_starting_cpu (unsigned int cpu) { +/* Ensure the GIC counter is running */ +clear_gic_config (GIC_CONFIG_COUNTSTOP ); +gic_clockevent_cpu_init (cpu,this_cpu_ptr (&gic_clockevent_device));return 0 ; }
@@ -253,9 +256,6 @@ static int __init gic_clocksource_of_init(struct device_node *node)pr_warn ("Unable to register clock notifier\n" ); } -/* And finally start the counter */ -clear_gic_config (GIC_CONFIG_COUNTSTOP ); -/* * It's safe to use the MIPS GIC timer as a sched clock source only if * its ticks are stable, which is true on either the platforms with
drivers/cpuidle/governors/menu.c +12 -1
@@ -249,8 +249,19 @@ static unsigned int get_typical_interval(struct menu_device *data,* This can deal with workloads that have long pauses interspersed * with sporadic activity with a bunch of short pauses. */ -if ((divisor *4 ) <=INTERVALS *3 ) +if (divisor *4 <=INTERVALS *3 ) { +/* +* If there are sufficiently many data points still under +* consideration after the outliers have been eliminated, +* returning without a prediction would be a mistake because it +* is likely that the next interval will not exceed the current +* maximum, so return the latter in that case. +*/ +if (divisor >=INTERVALS /2 ) +return max; +return UINT_MAX ; + } thresh = max -1 ; goto again;
drivers/dma/dmatest.c +3 -3
@@ -825,9 +825,9 @@ static int dmatest_func(void *data) }else {dma_async_issue_pending (chan); -wait_event_timeout (thread->done_wait, - done->done, -msecs_to_jiffies (params->timeout)); +wait_event_freezable_timeout (thread->done_wait, + done->done, +msecs_to_jiffies (params->timeout)); status =dma_async_is_tx_complete (chan, cookie,NULL ,NULL );
drivers/dma/ti/k3-udma.c +8 -2
@@ -962,8 +962,11 @@ static void udma_check_tx_completion(struct work_struct *work)u32 residue_diff;ktime_t time_diff;unsigned long delay; +unsigned long flags;while (1 ) { +spin_lock_irqsave (&uc->vc.lock, flags); +if (uc->desc) {/* Get previous residue and time stamp */ residue_diff = uc->tx_drain.residue;
@@ -998,6 +1001,8 @@ static void udma_check_tx_completion(struct work_struct *work)break ; } +spin_unlock_irqrestore (&uc->vc.lock, flags); +usleep_range (ktime_to_us (delay),ktime_to_us (delay) +10 );continue ;
@@ -1014,6 +1019,8 @@ static void udma_check_tx_completion(struct work_struct *work)break ; } + +spin_unlock_irqrestore (&uc->vc.lock, flags); }static irqreturn_t udma_ring_irq_handler (int irq,void *data)
@@ -3075,7 +3082,6 @@ static struct dma_chan *udma_of_xlate(struct of_phandle_args *dma_spec, struct of_dma *ofdma) {struct udma_dev *ud = ofdma->of_dma_data; -dma_cap_mask_t mask = ud->ddev.cap_mask;struct udma_filter_param filter_param;struct dma_chan *chan;
@@ -3088,7 +3094,7 @@ static struct dma_chan *udma_of_xlate(struct of_phandle_args *dma_spec,else filter_param.atype =0 ; - chan =__dma_request_channel (&mask, udma_dma_filter_fn, &filter_param, + chan =__dma_request_channel (&ud->ddev.cap_mask, udma_dma_filter_fn, &filter_param, ofdma->of_node);if (!chan) {dev_err (ud->dev,"get channel fail in %s.\n" , __func__);
drivers/edac/altera_edac.c +5 -4
@@ -97,7 +97,7 @@ static irqreturn_t altr_sdram_mc_err_handler(int irq, void *dev_id)if (status & priv->ecc_stat_ce_mask) {regmap_read (drvdata->mc_vbase, priv->ecc_saddr_offset, &err_addr); -if (priv->ecc_uecnt_offset) +if (priv->ecc_cecnt_offset)regmap_read (drvdata->mc_vbase, priv->ecc_cecnt_offset, &err_count); edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, err_count,
@@ -1006,9 +1006,6 @@ altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask, } } -/* Interrupt mode set to every SBERR */ -regmap_write (ecc_mgr_map,ALTR_A10_ECC_INTMODE_OFST , -ALTR_A10_ECC_INTMODE );/* Enable ECC */ ecc_set_bits (ecc_ctrl_en_mask, (ecc_block_base +ALTR_A10_ECC_CTRL_OFST ));
@@ -2089,6 +2086,10 @@ static int altr_edac_a10_probe(struct platform_device *pdev)return PTR_ERR (edac->ecc_mgr_map); } +/* Set irq mask for DDR SBE to avoid any pending irq before registration */ +regmap_write (edac->ecc_mgr_map,A10_SYSMGR_ECC_INTMASK_SET_OFST , + (A10_SYSMGR_ECC_INTMASK_SDMMCB |A10_SYSMGR_ECC_INTMASK_DDR0 )); + edac->irq_chip.name = pdev->dev.of_node->name; edac->irq_chip.irq_mask = a10_eccmgr_irq_mask; edac->irq_chip.irq_unmask = a10_eccmgr_irq_unmask;
drivers/edac/altera_edac.h +2 -0
@@ -249,6 +249,8 @@ struct altr_sdram_mc_data {#define A10_SYSMGR_ECC_INTMASK_SET_OFST 0x94#define A10_SYSMGR_ECC_INTMASK_CLR_OFST 0x98#define A10_SYSMGR_ECC_INTMASK_OCRAM BIT(1) +#define A10_SYSMGR_ECC_INTMASK_SDMMCB BIT(16) +#define A10_SYSMGR_ECC_INTMASK_DDR0 BIT(17)#define A10_SYSMGR_ECC_INTSTAT_SERR_OFST 0x9C#define A10_SYSMGR_ECC_INTSTAT_DERR_OFST 0xA0
drivers/edac/ie31200_edac.c +13 -15
@@ -398,10 +398,9 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)int i, j, ret;struct mem_ctl_info *mci =NULL ;struct edac_mc_layer layers[2 ]; -struct dimm_data dimm_info[IE31200_CHANNELS ][IE31200_DIMMS_PER_CHANNEL ];void __iomem *window;struct ie31200_priv *priv; -u32 addr_decode, mad_offset; +u32 addr_decode[IE31200_CHANNELS ], mad_offset;/* * Kaby Lake, Coffee Lake seem to work like Skylake. Please re-visit
@@ -459,19 +458,10 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx) mad_offset =IE31200_MAD_DIMM_0_OFFSET ; } -/* populate DIMM info */ for (i =0 ; i <IE31200_CHANNELS ; i++) { - addr_decode =readl (window + mad_offset + + addr_decode[i] =readl (window + mad_offset + (i *4 )); -edac_dbg (0 ,"addr_decode: 0x%x\n" , addr_decode); -for (j =0 ; j <IE31200_DIMMS_PER_CHANNEL ; j++) { -populate_dimm_info (&dimm_info[i][j], addr_decode, j, - skl); -edac_dbg (0 ,"size: 0x%x, rank: %d, width: %d\n" , - dimm_info[i][j].size, - dimm_info[i][j].dual_rank, - dimm_info[i][j].x16_width); - } +edac_dbg (0 ,"addr_decode: 0x%x\n" , addr_decode[i]); }/*
@@ -482,14 +472,22 @@ static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)*/ for (i =0 ; i <IE31200_DIMMS_PER_CHANNEL ; i++) {for (j =0 ; j <IE31200_CHANNELS ; j++) { +struct dimm_data dimm_info;struct dimm_info *dimm;unsigned long nr_pages; - nr_pages =IE31200_PAGES (dimm_info[j][i].size, skl); +populate_dimm_info (&dimm_info, addr_decode[j], i, + skl); +edac_dbg (0 ,"size: 0x%x, rank: %d, width: %d\n" , + dimm_info.size, + dimm_info.dual_rank, + dimm_info.x16_width); + + nr_pages =IE31200_PAGES (dimm_info.size, skl);if (nr_pages ==0 )continue ; -if (dimm_info[j][i].dual_rank) { +if (dimm_info.dual_rank) { nr_pages = nr_pages /2 ; dimm =edac_get_dimm (mci, (i *2 ) +1 , j,0 ); dimm->nr_pages = nr_pages;
drivers/fpga/altera-cvp.c +1 -1
@@ -52,7 +52,7 @@/* V2 Defines */ #define VSE_CVP_TX_CREDITS 0x49/* 8bit */ -#define V2_CREDIT_TIMEOUT_US 20000 +#define V2_CREDIT_TIMEOUT_US 40000#define V2_CHECK_CREDIT_US 10#define V2_POLL_TIMEOUT_US 1000000#define V2_USER_TIMEOUT_US 500000
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c +5 -5
@@ -70,12 +70,12 @@ static void gfxhub_v1_0_init_system_aperture_regs(struct amdgpu_device *adev) {uint64_t value; -/* Program the AGP BAR */ -WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_BASE,0 ); -WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_BOT, adev->gmc.agp_start >>24 ); -WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_TOP, adev->gmc.agp_end >>24 ); -if (!amdgpu_sriov_vf (adev) || adev->asic_type <=CHIP_VEGA10 ) { +/* Program the AGP BAR */ +WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_BASE,0 ); +WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_BOT, adev->gmc.agp_start >>24 ); +WREG32_SOC15_RLC (GC ,0 , mmMC_VM_AGP_TOP, adev->gmc.agp_end >>24 ); +/* Program the system aperture low logical page number. */ WREG32_SOC15_RLC (GC ,0 , mmMC_VM_SYSTEM_APERTURE_LOW_ADDR,min (adev->gmc.fb_start, adev->gmc.agp_start) >>18 );
drivers/gpu/drm/amd/amdkfd/kfd_process.c +8 -8
@@ -755,6 +755,14 @@ struct kfd_process *kfd_create_process(struct file *filep)if (thread->group_leader->mm != thread->mm)return ERR_PTR (-EINVAL ); +/* If the process just called exec(3), it is possible that the +* cleanup of the kfd_process (following the release of the mm +* of the old process image) is still in the cleanup work queue. +* Make sure to drain any job before trying to recreate any +* resource for this process. +*/ +flush_workqueue (kfd_process_wq); +/* * take kfd processes mutex before starting of process creation * so there won't be a case where two threads of the same process
@@ -767,14 +775,6 @@ struct kfd_process *kfd_create_process(struct file *filep)if (process) {pr_debug ("Process already found\n" ); }else { -/* If the process just called exec(3), it is possible that the -* cleanup of the kfd_process (following the release of the mm -* of the old process image) is still in the cleanup work queue. -* Make sure to drain any job before trying to recreate any -* resource for this process. -*/ -flush_workqueue (kfd_process_wq); - process =create_process (thread);if (IS_ERR (process)) goto out;
drivers/gpu/drm/amd/display/dc/core/dc.c +1 -0
@@ -228,6 +228,7 @@ static bool create_links( link->link_id.type =OBJECT_TYPE_CONNECTOR ; link->link_id.id =CONNECTOR_ID_VIRTUAL ; link->link_id.enum_id =ENUM_ID_1 ; + link->psr_settings.psr_version =DC_PSR_VERSION_UNSUPPORTED ; link->link_enc =kzalloc (sizeof (*link->link_enc),GFP_KERNEL );if (!link->link_enc) {
drivers/gpu/drm/ast/ast_mode.c +6 -4
@@ -104,7 +104,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format,return false; } -switch (mode->crtc_hdisplay) { +switch (mode->hdisplay) {case 640 : vbios_mode->enh_table = &res_640x480[refresh_rate_index];break ;
@@ -115,7 +115,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format, vbios_mode->enh_table = &res_1024x768[refresh_rate_index];break ;case 1280 : -if (mode->crtc_vdisplay ==800 ) +if (mode->vdisplay ==800 ) vbios_mode->enh_table = &res_1280x800[refresh_rate_index];else vbios_mode->enh_table = &res_1280x1024[refresh_rate_index];
@@ -127,7 +127,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format, vbios_mode->enh_table = &res_1440x900[refresh_rate_index];break ;case 1600 : -if (mode->crtc_vdisplay ==900 ) +if (mode->vdisplay ==900 ) vbios_mode->enh_table = &res_1600x900[refresh_rate_index];else vbios_mode->enh_table = &res_1600x1200[refresh_rate_index];
@@ -136,7 +136,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format, vbios_mode->enh_table = &res_1680x1050[refresh_rate_index];break ;case 1920 : -if (mode->crtc_vdisplay ==1080 ) +if (mode->vdisplay ==1080 ) vbios_mode->enh_table = &res_1920x1080[refresh_rate_index];else vbios_mode->enh_table = &res_1920x1200[refresh_rate_index];
@@ -180,6 +180,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format, hborder = (vbios_mode->enh_table->flags & HBorder) ?8 :0 ; vborder = (vbios_mode->enh_table->flags & VBorder) ?8 :0 ; + adjusted_mode->crtc_hdisplay = vbios_mode->enh_table->hde; adjusted_mode->crtc_htotal = vbios_mode->enh_table->ht; adjusted_mode->crtc_hblank_start = vbios_mode->enh_table->hde + hborder; adjusted_mode->crtc_hblank_end = vbios_mode->enh_table->ht - hborder;
@@ -189,6 +190,7 @@ static bool ast_get_vbios_mode_info(const struct drm_format_info *format, vbios_mode->enh_table->hfp + vbios_mode->enh_table->hsync); + adjusted_mode->crtc_vdisplay = vbios_mode->enh_table->vde; adjusted_mode->crtc_vtotal = vbios_mode->enh_table->vt; adjusted_mode->crtc_vblank_start = vbios_mode->enh_table->vde + vborder; adjusted_mode->crtc_vblank_end = vbios_mode->enh_table->vt - vborder;
drivers/gpu/drm/drm_atomic_helper.c +28 -0
@@ -557,6 +557,30 @@ mode_valid(struct drm_atomic_state *state)return 0 ; } +static int drm_atomic_check_valid_clones (struct drm_atomic_state *state, +struct drm_crtc *crtc) +{ +struct drm_encoder *drm_enc; +struct drm_crtc_state *crtc_state =drm_atomic_get_new_crtc_state (state, + crtc); + +drm_for_each_encoder_mask (drm_enc, crtc->dev, crtc_state->encoder_mask) { +if (!drm_enc->possible_clones) { +DRM_DEBUG ("enc%d possible_clones is 0\n" , drm_enc->base.id); +continue ; + } + +if ((crtc_state->encoder_mask & drm_enc->possible_clones) != + crtc_state->encoder_mask) { +DRM_DEBUG ("crtc%d failed valid clone check for mask 0x%x\n" , + crtc->base.id, crtc_state->encoder_mask); +return -EINVAL ; + } + } + +return 0 ; +} +/** * drm_atomic_helper_check_modeset - validate state object for modeset changes * @dev: DRM device
@@ -720,6 +744,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, ret =drm_atomic_add_affected_planes (state, crtc);if (ret !=0 )return ret; + + ret =drm_atomic_check_valid_clones (state, crtc); +if (ret !=0 ) +return ret; }/*
drivers/gpu/drm/drm_edid.c +1 -0
@@ -5097,6 +5097,7 @@ drm_reset_display_info(struct drm_connector *connector) info->has_hdmi_infoframe = false; info->rgb_quant_range_selectable = false;memset (&info->hdmi,0 ,sizeof (info->hdmi)); +memset (&connector->hdr_sink_metadata,0 ,sizeof (connector->hdr_sink_metadata)); info->non_desktop =0 ;memset (&info->monitor_range,0 ,sizeof (info->monitor_range));
drivers/gpu/drm/i915/gvt/opregion.c +5 -3
@@ -222,7 +222,8 @@ int intel_vgpu_init_opregion(struct intel_vgpu *vgpu)u8 *buf;struct opregion_header *header;struct vbt v; -const char opregion_signature[16 ] =OPREGION_SIGNATURE ; + +static_assert (sizeof (header->signature) ==sizeof (OPREGION_SIGNATURE ) -1 );gvt_dbg_core ("init vgpu%d opregion\n" , vgpu->id); vgpu_opregion(vgpu)->va = (void *)__get_free_pages(GFP_KERNEL |
@@ -236,8 +237,9 @@ int intel_vgpu_init_opregion(struct intel_vgpu *vgpu)/* emulated opregion with VBT mailbox only */ buf = (u8 *)vgpu_opregion (vgpu)->va; header = (struct opregion_header *)buf; -memcpy (header->signature, opregion_signature, -sizeof (opregion_signature)); + +memcpy (header->signature,OPREGION_SIGNATURE ,sizeof (header->signature)); + header->size =0x8 ; header->opregion_ver =0x02000000 ; header->mboxes =MBOX_VBT ;
drivers/gpu/drm/mediatek/mtk_dpi.c +3 -2
@@ -340,12 +340,13 @@ static void mtk_dpi_config_swap_input(struct mtk_dpi *dpi, bool enable)static void mtk_dpi_config_2n_h_fre (struct mtk_dpi *dpi) { -mtk_dpi_mask (dpi, dpi->conf->reg_h_fre_con,H_FRE_2N ,H_FRE_2N ); +if (dpi->conf->reg_h_fre_con) +mtk_dpi_mask (dpi, dpi->conf->reg_h_fre_con,H_FRE_2N ,H_FRE_2N ); }static void mtk_dpi_config_disable_edge (struct mtk_dpi *dpi) { -if (dpi->conf->edge_sel_en) +if (dpi->conf->edge_sel_en && dpi->conf->reg_h_fre_con)mtk_dpi_mask (dpi, dpi->conf->reg_h_fre_con,0 ,EDGE_SEL_EN ); }
drivers/gpu/drm/meson/meson_vclk.c +3 -3
@@ -790,13 +790,13 @@ meson_vclk_vic_supported_freq(struct meson_drm *priv, unsigned int phy_freq, FREQ_1000_1001(params[i].pixel_freq));DRM_DEBUG_DRIVER ("i = %d phy_freq = %d alt = %d\n" , i, params[i].phy_freq, -FREQ_1000_1001 (params[i].phy_freq/1000 )*1000 ); +FREQ_1000_1001 (params[i].phy_freq/10 )*10 );/* Match strict frequency */ if (phy_freq == params[i].phy_freq && vclk_freq == params[i].vclk_freq)return MODE_OK ;/* Match 1000/1001 variant */ -if (phy_freq == (FREQ_1000_1001 (params[i].phy_freq/1000 )*1000 ) && +if (phy_freq == (FREQ_1000_1001 (params[i].phy_freq/10 )*10 ) && vclk_freq ==FREQ_1000_1001 (params[i].vclk_freq))return MODE_OK ; }
@@ -1070,7 +1070,7 @@ void meson_vclk_setup(struct meson_drm *priv, unsigned int target,for (freq =0 ; params[freq].pixel_freq ; ++freq) {if ((phy_freq == params[freq].phy_freq || - phy_freq ==FREQ_1000_1001 (params[freq].phy_freq/1000 )*1000 ) && + phy_freq ==FREQ_1000_1001 (params[freq].phy_freq/10 )*10 ) && (vclk_freq == params[freq].vclk_freq || vclk_freq ==FREQ_1000_1001 (params[freq].vclk_freq))) {if (vclk_freq != params[freq].vclk_freq)
drivers/gpu/drm/nouveau/nouveau_fence.c +1 -1
@@ -95,7 +95,7 @@ nouveau_fence_context_kill(struct nouveau_fence_chan *fctx, int error)while (!list_empty (&fctx->pending)) { fence =list_entry (fctx->pending.next,typeof (*fence), head); -if (error) +if (error && !dma_fence_is_signaled_locked (&fence->base))dma_fence_set_error (&fence->base, error);if (nouveau_fence_signal (fence))
drivers/gpu/drm/panel/panel-simple.c +13 -12
@@ -964,27 +964,28 @@ static const struct panel_desc auo_g070vvn01 = { }, }; -static const struct drm_display_mode auo_g101evn010_mode = { - .clock =68930 , - .hdisplay =1280 , - .hsync_start =1280 +82 , - .hsync_end =1280 +82 +2 , - .htotal =1280 +82 +2 +84 , - .vdisplay =800 , - .vsync_start =800 +8 , - .vsync_end =800 +8 +2 , - .vtotal =800 +8 +2 +6 , +static const struct display_timing auo_g101evn010_timing = { + .pixelclock = {64000000 ,68930000 ,85000000 }, + .hactive = {1280 ,1280 ,1280 }, + .hfront_porch = {8 ,64 ,256 }, + .hback_porch = {8 ,64 ,256 }, + .hsync_len = {40 ,168 ,767 }, + .vactive = {800 ,800 ,800 }, + .vfront_porch = {4 ,8 ,100 }, + .vback_porch = {4 ,8 ,100 }, + .vsync_len = {8 ,16 ,223 }, };static const struct panel_desc auo_g101evn010 = { - .modes = &auo_g101evn010_mode, - .num_modes =1 , + .timings = &auo_g101evn010_timing, + .num_timings =1 , .bpc =6 , .size = { .width =216 , .height =135 , }, .bus_format =MEDIA_BUS_FMT_RGB666_1X7X3_SPWG , + .bus_flags =DRM_BUS_FLAG_DE_HIGH , .connector_type =DRM_MODE_CONNECTOR_LVDS , };
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c +7 -10
@@ -32,7 +32,6 @@#define VMW_FENCE_WRAP (1 << 31)struct vmw_fence_manager { -int num_fence_objects;struct vmw_private *dev_priv;spinlock_t lock;struct list_head fence_list;
@@ -113,13 +112,13 @@ static void vmw_fence_obj_destroy(struct dma_fence *f) {struct vmw_fence_obj *fence = container_of(f, struct vmw_fence_obj, base); -struct vmw_fence_manager *fman =fman_from_fence (fence); -spin_lock (&fman->lock); -list_del_init (&fence->head); - --fman->num_fence_objects; -spin_unlock (&fman->lock); +if (!list_empty (&fence->head)) { +spin_lock (&fman->lock); +list_del_init (&fence->head); +spin_unlock (&fman->lock); + } fence->destroy (fence); }
@@ -250,7 +249,6 @@ static const struct dma_fence_ops vmw_fence_ops = { .release = vmw_fence_obj_destroy, }; -/** * Execute signal actions on fences recently signaled. * This is done from a workqueue so we don't have to execute
@@ -353,7 +351,6 @@ static int vmw_fence_obj_init(struct vmw_fence_manager *fman, goto out_unlock; }list_add_tail (&fence->head, &fman->fence_list); - ++fman->num_fence_objects; out_unlock:spin_unlock (&fman->lock);
@@ -402,7 +399,7 @@ static bool vmw_fence_goal_new_locked(struct vmw_fence_manager *fman, {u32 goal_seqno;u32 *fifo_mem; -struct vmw_fence_obj *fence; +struct vmw_fence_obj *fence, *next_fence;if (likely (!fman->seqno_valid))return false;
@@ -413,7 +410,7 @@ static bool vmw_fence_goal_new_locked(struct vmw_fence_manager *fman,return false; fman->seqno_valid = false; -list_for_each_entry (fence, &fman->fence_list, head) { +list_for_each_entry_safe (fence, next_fence, &fman->fence_list, head) {if (!list_empty (&fence->seq_passed_actions)) { fman->seqno_valid = true; vmw_mmio_write(fence->base.seqno,
drivers/hid/hid-ids.h +4 -0
@@ -41,6 +41,10 @@#define USB_VENDOR_ID_ACTIONSTAR 0x2101#define USB_DEVICE_ID_ACTIONSTAR_1011 0x1011 +#define USB_VENDOR_ID_ADATA_XPG 0x125f +#define USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE 0x7505 +#define USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE_DONGLE 0x7506 +#define USB_VENDOR_ID_ADS_TECH 0x06e1#define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155
drivers/hid/hid-quirks.c +2 -0
@@ -27,6 +27,8 @@static const struct hid_device_id hid_quirks[] = { {HID_USB_DEVICE (USB_VENDOR_ID_AASHIMA ,USB_DEVICE_ID_AASHIMA_GAMEPAD ),HID_QUIRK_BADPAD }, {HID_USB_DEVICE (USB_VENDOR_ID_AASHIMA ,USB_DEVICE_ID_AASHIMA_PREDATOR ),HID_QUIRK_BADPAD }, + {HID_USB_DEVICE (USB_VENDOR_ID_ADATA_XPG ,USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE ),HID_QUIRK_ALWAYS_POLL }, + {HID_USB_DEVICE (USB_VENDOR_ID_ADATA_XPG ,USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE_DONGLE ),HID_QUIRK_ALWAYS_POLL }, {HID_USB_DEVICE (USB_VENDOR_ID_AFATECH ,USB_DEVICE_ID_AFATECH_AF9016 ),HID_QUIRK_FULLSPEED_INTERVAL }, {HID_USB_DEVICE (USB_VENDOR_ID_AIREN ,USB_DEVICE_ID_AIREN_SLIMPLUS ),HID_QUIRK_NOGET }, {HID_USB_DEVICE (USB_VENDOR_ID_AKAI_09E8 ,USB_DEVICE_ID_AKAI_09E8_MIDIMIX ),HID_QUIRK_NO_INIT_REPORTS },
drivers/hid/usbhid/usbkbd.c +1 -1
@@ -160,7 +160,7 @@ static int usb_kbd_event(struct input_dev *dev, unsigned int type,return -1 ;spin_lock_irqsave (&kbd->leds_lock, flags); - kbd->newleds = (!!test_bit (LED_KANA , dev->led) <<3 ) | (!!test_bit (LED_COMPOSE , dev->led) <<3 ) | + kbd->newleds = (!!test_bit (LED_KANA , dev->led) <<4 ) | (!!test_bit (LED_COMPOSE , dev->led) <<3 ) | (!!test_bit (LED_SCROLLL , dev->led) <<2 ) | (!!test_bit (LED_CAPSL , dev->led) <<1 ) | (!!test_bit (LED_NUML , dev->led));
drivers/hwmon/gpio-fan.c +15 -1
@@ -394,7 +394,12 @@ static int gpio_fan_set_cur_state(struct thermal_cooling_device *cdev,if (state >= fan_data->num_speed)return -EINVAL ; +mutex_lock (&fan_data->lock); +set_fan_speed (fan_data, state); + +mutex_unlock (&fan_data->lock); +return 0 ; }
@@ -490,7 +495,11 @@ MODULE_DEVICE_TABLE(of, of_gpio_fan_match);static void gpio_fan_stop (void *data) { +struct gpio_fan_data *fan_data = data; + +mutex_lock (&fan_data->lock);set_fan_speed (data,0 ); +mutex_unlock (&fan_data->lock); }static int gpio_fan_probe (struct platform_device *pdev)
@@ -564,7 +573,9 @@ static int gpio_fan_suspend(struct device *dev)if (fan_data->gpios) { fan_data->resume_speed = fan_data->speed_index; +mutex_lock (&fan_data->lock);set_fan_speed (fan_data,0 ); +mutex_unlock (&fan_data->lock); }return 0 ;
@@ -574,8 +585,11 @@ static int gpio_fan_resume(struct device *dev) {struct gpio_fan_data *fan_data =dev_get_drvdata (dev); -if (fan_data->gpios) +if (fan_data->gpios) { +mutex_lock (&fan_data->lock);set_fan_speed (fan_data, fan_data->resume_speed); +mutex_unlock (&fan_data->lock); + }return 0 ; }
drivers/hwmon/xgene-hwmon.c +1 -1
@@ -110,7 +110,7 @@ struct xgene_hwmon_dev {phys_addr_t comm_base_addr;void *pcc_comm_addr; -u64 usecs_lat; +unsigned int usecs_lat; };/*
drivers/i2c/busses/i2c-imx-lpi2c.c +2 -2
@@ -616,9 +616,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev)return 0 ; rpm_disable: -pm_runtime_put (&pdev->dev); -pm_runtime_disable (&pdev->dev);pm_runtime_dont_use_autosuspend (&pdev->dev); +pm_runtime_put_sync (&pdev->dev); +pm_runtime_disable (&pdev->dev);return ret; }
drivers/i2c/busses/i2c-pxa.c +4 -1
@@ -1508,7 +1508,10 @@ static int i2c_pxa_probe(struct platform_device *dev) i2c->adap.name); } -clk_prepare_enable (i2c->clk); + ret =clk_prepare_enable (i2c->clk); +if (ret) +return dev_err_probe (&dev->dev, ret, +"failed to enable clock\n" );if (i2c->use_pio) { i2c->adap.algo = &i2c_pxa_pio_algorithm;
drivers/i2c/busses/i2c-qup.c +36 -0
@@ -14,6 +14,7 @@#include <linux/dma-mapping.h> #include <linux/err.h> #include <linux/i2c.h> +#include <linux/interconnect.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/module.h>
@@ -150,6 +151,8 @@/* TAG length for DATA READ in RX FIFO */ #define READ_RX_TAGS_LEN 2 +#define QUP_BUS_WIDTH 8 +static unsigned int scl_freq;module_param_named (scl_freq, scl_freq, uint,0444 );MODULE_PARM_DESC (scl_freq,"SCL frequency override" );
@@ -227,6 +230,7 @@ struct qup_i2c_dev {int irq;struct clk *clk;struct clk *pclk; +struct icc_path *icc_path;struct i2c_adapter adap;int clk_ctl;
@@ -255,6 +259,10 @@ struct qup_i2c_dev {/* To configure when bus is in run state */ u32 config_run; +/* bandwidth votes */ +u32 src_clk_freq; +u32 cur_bw_clk_freq; +/* dma parameters */ bool is_dma;/* To check if the current transfer is using DMA */
@@ -453,6 +461,23 @@ static int qup_i2c_bus_active(struct qup_i2c_dev *qup, int len)return ret; } +static int qup_i2c_vote_bw (struct qup_i2c_dev *qup,u32 clk_freq) +{ +u32 needed_peak_bw; +int ret; + +if (qup->cur_bw_clk_freq == clk_freq) +return 0 ; + + needed_peak_bw =Bps_to_icc (clk_freq *QUP_BUS_WIDTH ); + ret =icc_set_bw (qup->icc_path,0 , needed_peak_bw); +if (ret) +return ret; + + qup->cur_bw_clk_freq = clk_freq; +return 0 ; +} +static void qup_i2c_write_tx_fifo_v1 (struct qup_i2c_dev *qup) {struct qup_i2c_block *blk = &qup->blk;
@@ -840,6 +865,10 @@ static int qup_i2c_bam_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,int ret =0 ;int idx =0 ; + ret =qup_i2c_vote_bw (qup, qup->src_clk_freq); +if (ret) +return ret; +enable_irq (qup->irq); ret =qup_i2c_req_dma (qup);
@@ -1645,6 +1674,7 @@ static void qup_i2c_disable_clocks(struct qup_i2c_dev *qup) config =readl (qup->base +QUP_CONFIG ); config |=QUP_CLOCK_AUTO_GATE ;writel (config, qup->base +QUP_CONFIG ); +qup_i2c_vote_bw (qup,0 );clk_disable_unprepare (qup->pclk); }
@@ -1745,6 +1775,11 @@ static int qup_i2c_probe(struct platform_device *pdev) goto fail_dma; } qup->is_dma = true; + + qup->icc_path =devm_of_icc_get (&pdev->dev,NULL ); +if (IS_ERR (qup->icc_path)) +return dev_err_probe (&pdev->dev,PTR_ERR (qup->icc_path), +"failed to get interconnect path\n" ); } nodma:
@@ -1793,6 +1828,7 @@ static int qup_i2c_probe(struct platform_device *pdev)qup_i2c_enable_clocks (qup); src_clk_freq =clk_get_rate (qup->clk); } + qup->src_clk_freq = src_clk_freq;/* * Bootloaders might leave a pending interrupt on certain QUP's,
drivers/iio/accel/adis16201.c +2 -2
@@ -214,9 +214,9 @@ static const struct iio_chan_spec adis16201_channels[] = { BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14),ADIS_AUX_ADC_CHAN (ADIS16201_AUX_ADC_REG ,ADIS16201_SCAN_AUX_ADC ,0 ,12 ),ADIS_INCLI_CHAN (X ,ADIS16201_XINCL_OUT_REG ,ADIS16201_SCAN_INCLI_X , -BIT (IIO_CHAN_INFO_CALIBBIAS ),0 ,14 ), +BIT (IIO_CHAN_INFO_CALIBBIAS ),0 ,12 ),ADIS_INCLI_CHAN (Y ,ADIS16201_YINCL_OUT_REG ,ADIS16201_SCAN_INCLI_Y , -BIT (IIO_CHAN_INFO_CALIBBIAS ),0 ,14 ), +BIT (IIO_CHAN_INFO_CALIBBIAS ),0 ,12 ), IIO_CHAN_SOFT_TIMESTAMP(7) };
drivers/iio/adc/ad7606_spi.c +1 -1
@@ -127,7 +127,7 @@ static int ad7606_spi_reg_read(struct ad7606_state *st, unsigned int addr) { .tx_buf = &st->d16[0], .len = 2, - .cs_change = 0, + .cs_change = 1, }, { .rx_buf = &st->d16[1], .len = 2,
drivers/iio/adc/ad7768-1.c +1 -1
@@ -168,7 +168,7 @@ struct ad7768_state {union {struct {__be32 chan; -s64 timestamp; +aligned_s64 timestamp; } scan;__be32 d32;u8 d8[2 ];
drivers/iio/adc/dln2-adc.c +1 -1
@@ -483,7 +483,7 @@ static irqreturn_t dln2_adc_trigger_h(int irq, void *p)struct iio_dev *indio_dev = pf->indio_dev;struct {__le16 values[DLN2_ADC_MAX_CHANNELS ]; -int64_t timestamp_space; +aligned_s64 timestamp_space; } data;struct dln2_adc_get_all_vals dev_data;struct dln2_adc *dln2 =iio_priv (indio_dev);
drivers/iio/chemical/sps30.c +1 -1
@@ -232,7 +232,7 @@ static irqreturn_t sps30_trigger_handler(int irq, void *p)int ret;struct {s32 data[4 ];/* PM1, PM2P5, PM4, PM10 */ -s64 ts; +aligned_s64 ts; } scan;mutex_lock (&state->lock);
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +6 -0
@@ -369,6 +369,9 @@ int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)if (fifo_status &cpu_to_le16 (ST_LSM6DSX_FIFO_EMPTY_MASK ))return 0 ; +if (!pattern_len) + pattern_len =ST_LSM6DSX_SAMPLE_SIZE ; + fifo_len = (le16_to_cpu (fifo_status) & fifo_diff_mask) *ST_LSM6DSX_CHAN_SIZE ; fifo_len = (fifo_len / pattern_len) * pattern_len;
@@ -586,6 +589,9 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *hw)if (!fifo_len)return 0 ; +if (!pattern_len) + pattern_len =ST_LSM6DSX_TAGGED_SAMPLE_SIZE ; +for (read_len =0 ; read_len < fifo_len; read_len += pattern_len) { err = st_lsm6dsx_read_block(hw, ST_LSM6DSX_REG_FIFO_OUT_TAG_ADDR,
drivers/infiniband/sw/rxe/rxe_cq.c +1 -4
@@ -69,11 +69,8 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe, err =do_mmap_info (rxe, uresp ? &uresp->mi :NULL , udata, cq->queue->buf, cq->queue->buf_size, &cq->queue->ip); -if (err) { -vfree (cq->queue->buf); -kfree (cq->queue); +if (err)return err; - }if (uresp) cq->is_user =1 ;
drivers/input/mouse/synaptics.c +5 -0
@@ -163,6 +163,7 @@ static const char * const topbuttonpad_pnp_ids[] = {static const char *const smbus_pnp_ids[] = {/* all of the topbuttonpad_pnp_ids are valid, we just add some extras */ +"DLL060d" ,/* Dell Precision M3800 */ "LEN0048" ,/* X1 Carbon 3 */ "LEN0046" ,/* X250 */ "LEN0049" ,/* Yoga 11e */
@@ -187,11 +188,15 @@ static const char * const smbus_pnp_ids[] = {"LEN2054" ,/* E480 */ "LEN2055" ,/* E580 */ "LEN2068" ,/* T14 Gen 1 */ +"SYN1221" ,/* TUXEDO InfinityBook Pro 14 v5 */ +"SYN3003" ,/* HP EliteBook 850 G1 */ "SYN3015" ,/* HP EliteBook 840 G2 */ "SYN3052" ,/* HP EliteBook 840 G4 */ "SYN3221" ,/* HP 15-ay000 */ "SYN323d" ,/* HP Spectre X360 13-w013dx */ "SYN3257" ,/* HP Envy 13-ad105ng */ +"TOS01f6" ,/* Dynabook Portege X30L-G */ +"TOS0213" ,/* Dynabook Portege X30-D */ NULL };
drivers/iommu/amd/init.c +8 -0
@@ -3243,6 +3243,14 @@ static int __init parse_ivrs_acpihid(char *str)while (*uid =='0' && *(uid +1 )) uid++; +if (strlen (hid) >=ACPIHID_HID_LEN ) { +pr_err ("Invalid command line: hid is too long\n" ); +return 1 ; + }else if (strlen (uid) >=ACPIHID_UID_LEN ) { +pr_err ("Invalid command line: uid is too long\n" ); +return 1 ; + } + i = early_acpihid_map_size++;memcpy (early_acpihid_map[i].hid, hid,strlen (hid));memcpy (early_acpihid_map[i].uid, uid,strlen (uid));
drivers/iommu/intel/iommu.c +3 -1
@@ -6234,6 +6234,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2e40 , quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2e90 , quirk_iommu_igfx); +/* QM57/QS57 integrated gfx malfunctions with dmar */ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0044 , quirk_iommu_igfx); +/* Broadwell igfx malfunctions with dmar */ DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x1606 , quirk_iommu_igfx);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x160B , quirk_iommu_igfx);
@@ -6311,7 +6314,6 @@ static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev) } }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0040 , quirk_calpella_no_shadow_gtt); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0044 , quirk_calpella_no_shadow_gtt);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x0062 , quirk_calpella_no_shadow_gtt);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x006a , quirk_calpella_no_shadow_gtt);
drivers/irqchip/irq-gic-v2m.c +4 -4
@@ -263,7 +263,7 @@ static struct msi_domain_info gicv2m_pmsi_domain_info = { .chip = &gicv2m_pmsi_irq_chip, }; -static void gicv2m_teardown (void ) +static void __init gicv2m_teardown (void ) {struct v2m_data *v2m, *tmp;
@@ -278,7 +278,7 @@ static void gicv2m_teardown(void) } } -static int gicv2m_allocate_domains (struct irq_domain *parent) +static __init int gicv2m_allocate_domains (struct irq_domain *parent) {struct irq_domain *inner_domain, *pci_domain, *plat_domain;struct v2m_data *v2m;
@@ -408,7 +408,7 @@ static int __init gicv2m_init_one(struct fwnode_handle *fwnode,return ret; } -static struct of_device_id gicv2m_device_id[] = { +static __initconst struct of_device_id gicv2m_device_id[] = { { .compatible ="arm,gic-v2m-frame" , }, {}, };
@@ -473,7 +473,7 @@ static struct fwnode_handle *gicv2m_get_fwnode(struct device *dev)return data->fwnode; } -static bool acpi_check_amazon_graviton_quirks (void ) +static __init bool acpi_check_amazon_graviton_quirks (void ) {static struct acpi_table_madt *madt;acpi_status status;
drivers/mailbox/mailbox.c +4 -3
@@ -350,11 +350,12 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index)mutex_lock (&con_mutex); -if (of_parse_phandle_with_args (dev->of_node,"mboxes" , -"#mbox-cells" , index, &spec)) { + ret =of_parse_phandle_with_args (dev->of_node,"mboxes" ,"#mbox-cells" , + index, &spec); +if (ret) {dev_dbg (dev,"%s: can't parse \"mboxes\" property\n" , __func__);mutex_unlock (&con_mutex); -return ERR_PTR (-ENODEV ); +return ERR_PTR (ret); } chan =ERR_PTR (-EPROBE_DEFER );
drivers/md/dm-cache-target.c +24 -0
@@ -2958,6 +2958,27 @@ static dm_cblock_t get_cache_dev_size(struct cache *cache)return to_cblock (size); } +static bool can_resume (struct cache *cache) +{ +/* +* Disallow retrying the resume operation for devices that failed the +* first resume attempt, as the failure leaves the policy object partially +* initialized. Retrying could trigger BUG_ON when loading cache mappings +* into the incomplete policy object. +*/ +if (cache->sized && !cache->loaded_mappings) { +if (get_cache_mode (cache) !=CM_WRITE ) +DMERR ("%s: unable to resume a failed-loaded cache, please check metadata." , +cache_device_name (cache)); +else +DMERR ("%s: unable to resume cache due to missing proper cache table reload" , +cache_device_name (cache)); +return false; + } + +return true; +} +static bool can_resize (struct cache *cache,dm_cblock_t new_size) {if (from_cblock (new_size) >from_cblock (cache->cache_size)) {
@@ -3006,6 +3027,9 @@ static int cache_preresume(struct dm_target *ti)struct cache *cache = ti->private;dm_cblock_t csize =get_cache_dev_size (cache); +if (!can_resume (cache)) +return -EINVAL ; +/* * Check to see if the cache has resized. */
drivers/md/dm-integrity.c +1 -1
@@ -4392,7 +4392,7 @@ static void dm_integrity_dtr(struct dm_target *ti)BUG_ON (!RB_EMPTY_ROOT (&ic->in_progress));BUG_ON (!list_empty (&ic->wait_list)); -if (ic->mode =='B' ) +if (ic->mode =='B' && ic->bitmap_flush_work.work.func)cancel_delayed_work_sync (&ic->bitmap_flush_work);if (ic->metadata_wq)destroy_workqueue (ic->metadata_wq);
drivers/md/dm-table.c +7 -2
@@ -513,8 +513,9 @@ static char **realloc_argv(unsigned *size, char **old_argv) gfp =GFP_NOIO ; } argv =kmalloc_array (new_size,sizeof (*argv), gfp); -if (argv && old_argv) { -memcpy (argv, old_argv, *size *sizeof (*argv)); +if (argv) { +if (old_argv) +memcpy (argv, old_argv, *size *sizeof (*argv)); *size = new_size; }
@@ -681,6 +682,10 @@ int dm_table_add_target(struct dm_table *t, const char *type,DMERR ("%s: zero-length target" ,dm_device_name (t->md));return -EINVAL ; } +if (start + len < start || start + len >LLONG_MAX >>SECTOR_SHIFT ) { +DMERR ("%s: too large device" ,dm_device_name (t->md)); +return -EINVAL ; + } tgt->type =dm_get_target_type (type);if (!tgt->type) {
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +1 -2
@@ -811,13 +811,12 @@ static int c8sectpfe_probe(struct platform_device *pdev) } tsin->i2c_adapter =of_find_i2c_adapter_by_node (i2c_bus); +of_node_put (i2c_bus);if (!tsin->i2c_adapter) {dev_err (&pdev->dev,"No i2c adapter found\n" ); -of_node_put (i2c_bus); ret = -ENODEV ; goto err_clk_disable; } -of_node_put (i2c_bus); tsin->rst_gpio =of_get_named_gpio (child,"reset-gpios" ,0 );
drivers/media/usb/cx231xx/cx231xx-417.c +2 -0
@@ -1722,6 +1722,8 @@ static void cx231xx_video_dev_init( vfd->lock = &dev->lock; vfd->release = video_device_release_empty; vfd->ctrl_handler = &dev->mpeg_ctrl_handler.hdl; + vfd->device_caps =V4L2_CAP_READWRITE |V4L2_CAP_STREAMING | +V4L2_CAP_VIDEO_CAPTURE ;video_set_drvdata (vfd, dev);if (dev->tuner_type ==TUNER_ABSENT ) {v4l2_disable_ioctl (vfd,VIDIOC_G_FREQUENCY );
drivers/media/v4l2-core/v4l2-subdev.c +2 -0
@@ -312,6 +312,8 @@ static int call_enum_dv_timings(struct v4l2_subdev *sd,static int call_get_mbus_config (struct v4l2_subdev *sd,unsigned int pad,struct v4l2_mbus_config *config) { +memset (config,0 ,sizeof (*config)); +return check_pad (sd, pad) ? : sd->ops->pad->get_mbus_config (sd, pad, config); }
drivers/mmc/host/renesas_sdhi_core.c +4 -6
@@ -1108,26 +1108,26 @@ int renesas_sdhi_probe(struct platform_device *pdev, num_irqs =platform_irq_count (pdev);if (num_irqs <0 ) { ret = num_irqs; - goto eirq; + goto edisclk; }/* There must be at least one IRQ source */ if (!num_irqs) { ret = -ENXIO ; - goto eirq; + goto edisclk; }for (i =0 ; i < num_irqs; i++) { irq =platform_get_irq (pdev, i);if (irq <0 ) { ret = irq; - goto eirq; + goto edisclk; } ret =devm_request_irq (&pdev->dev, irq, tmio_mmc_irq,0 ,dev_name (&pdev->dev), host);if (ret) - goto eirq; + goto edisclk; } ret =tmio_mmc_host_probe (host);
@@ -1139,8 +1139,6 @@ int renesas_sdhi_probe(struct platform_device *pdev,return ret; -eirq: -tmio_mmc_host_remove (host); edisclk:renesas_sdhi_clk_disable (host); efree:
drivers/mmc/host/sdhci-pci-core.c +5 -1
@@ -666,8 +666,12 @@ static void sdhci_intel_set_power(struct sdhci_host *host, unsigned char mode,sdhci_set_power (host, mode, vdd); -if (mode ==MMC_POWER_OFF ) +if (mode ==MMC_POWER_OFF ) { +if (slot->chip->pdev->device ==PCI_DEVICE_ID_INTEL_APL_SD || + slot->chip->pdev->device ==PCI_DEVICE_ID_INTEL_BYT_SD ) +usleep_range (15000 ,17500 );return ; + }/* * Bus power might not enable after D3 -> D0 transition due to the
drivers/mmc/host/sdhci.c +7 -2
@@ -2010,10 +2010,15 @@ void sdhci_set_clock(struct sdhci_host *host, unsigned int clock) host->mmc->actual_clock =0 ; -sdhci_writew (host,0 ,SDHCI_CLOCK_CONTROL ); + clk =sdhci_readw (host,SDHCI_CLOCK_CONTROL ); +if (clk &SDHCI_CLOCK_CARD_EN ) +sdhci_writew (host, clk & ~SDHCI_CLOCK_CARD_EN , +SDHCI_CLOCK_CONTROL ); -if (clock ==0 ) +if (clock ==0 ) { +sdhci_writew (host,0 ,SDHCI_CLOCK_CONTROL );return ; + } clk =sdhci_calc_clk (host, clock, &host->mmc->actual_clock);sdhci_enable_clk (host, clk);
drivers/net/bonding/bond_main.c +1 -1
@@ -2239,7 +2239,7 @@ static int __bond_release_one(struct net_device *bond_dev,RCU_INIT_POINTER (bond->current_arp_slave,NULL ); -if (!all && (!bond->params.fail_over_mac || +if (!all && (bond->params.fail_over_mac !=BOND_FOM_ACTIVE ||BOND_MODE (bond) !=BOND_MODE_ACTIVEBACKUP )) {if (ether_addr_equal_64bits (bond_dev->dev_addr, slave->perm_hwaddr) &&bond_has_slaves (bond))
drivers/net/can/c_can/c_can_platform.c +1 -1
@@ -330,7 +330,7 @@ static int c_can_plat_probe(struct platform_device *pdev)/* Check if we need custom RAMINIT via syscon. Mostly for TI * platforms. Only supported with DT boot. */ -if (np &&of_property_read_bool (np,"syscon-raminit" )) { +if (np &&of_property_present (np,"syscon-raminit" )) {u32 id;struct c_can_raminit *raminit = &priv->raminit_sys;
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c +1 -1
@@ -2889,8 +2889,8 @@ static int mcp251xfd_remove(struct spi_device *spi)struct mcp251xfd_priv *priv =spi_get_drvdata (spi);struct net_device *ndev = priv->ndev; -can_rx_offload_del (&priv->offload);mcp251xfd_unregister (priv); +can_rx_offload_del (&priv->offload); spi->max_speed_hz = priv->spi_max_speed_hz_orig;free_candev (ndev);
drivers/net/dsa/b53/b53_common.c +7 -4
@@ -373,15 +373,17 @@ static void b53_enable_vlan(struct b53_device *dev, bool enable,b53_read8 (dev,B53_VLAN_PAGE ,B53_VLAN_CTRL5 , &vc5); } + vc1 &= ~VC1_RX_MCST_FWD_EN ; +if (enable) { vc0 |=VC0_VLAN_EN |VC0_VID_CHK_EN |VC0_VID_HASH_VID ; - vc1 |=VC1_RX_MCST_UNTAG_EN |VC1_RX_MCST_FWD_EN ; + vc1 |=VC1_RX_MCST_UNTAG_EN ; vc4 &= ~VC4_ING_VID_CHECK_MASK ;if (enable_filtering) { vc4 |=VC4_ING_VID_VIO_DROP <<VC4_ING_VID_CHECK_S ; vc5 |=VC5_DROP_VTABLE_MISS ; }else { - vc4 |=VC4_ING_VID_VIO_FWD <<VC4_ING_VID_CHECK_S ; + vc4 |=VC4_NO_ING_VID_CHK <<VC4_ING_VID_CHECK_S ; vc5 &= ~VC5_DROP_VTABLE_MISS ; }
@@ -393,7 +395,7 @@ static void b53_enable_vlan(struct b53_device *dev, bool enable, }else { vc0 &= ~(VC0_VLAN_EN |VC0_VID_CHK_EN |VC0_VID_HASH_VID ); - vc1 &= ~(VC1_RX_MCST_UNTAG_EN |VC1_RX_MCST_FWD_EN ); + vc1 &= ~VC1_RX_MCST_UNTAG_EN ; vc4 &= ~VC4_ING_VID_CHECK_MASK ; vc5 &= ~VC5_DROP_VTABLE_MISS ;
@@ -1870,7 +1872,7 @@ EXPORT_SYMBOL(b53_br_join);void b53_br_leave (struct dsa_switch *ds,int port,struct net_device *br) {struct b53_device *dev = ds->priv; -struct b53_vlan *vl = &dev->vlans[0 ]; +struct b53_vlan *vl;s8 cpu_port =dsa_to_port (ds, port)->cpu_dp->index;unsigned int i;u16 pvlan, reg, pvid;
@@ -1896,6 +1898,7 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) dev->ports[port].vlan_ctl_mask = pvlan; pvid =b53_default_pvid (dev); + vl = &dev->vlans[pvid];/* Make this port join all VLANs without VLAN entries */ if (is58xx (dev)) {
drivers/net/dsa/sja1105/sja1105_main.c +1 -5
@@ -1644,6 +1644,7 @@ static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port,switch (state) {case BR_STATE_DISABLED :case BR_STATE_BLOCKING : +case BR_STATE_LISTENING :/* From UM10944 description of DRPDTAG (why put this there?): * "Management traffic flows to the port regardless of the state * of the INGRESS flag". So BPDUs are still be allowed to pass.
@@ -1653,11 +1654,6 @@ static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, mac[port].egress = false; mac[port].dyn_learn = false;break ; -case BR_STATE_LISTENING : - mac[port].ingress = true; - mac[port].egress = false; - mac[port].dyn_learn = false; -break ;case BR_STATE_LEARNING : mac[port].ingress = true; mac[port].egress = false;
drivers/net/ethernet/amd/xgbe/xgbe-desc.c +7 -2
@@ -373,8 +373,13 @@ static int xgbe_map_rx_buffer(struct xgbe_prv_data *pdata, }/* Set up the header page info */ -xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, -XGBE_SKB_ALLOC_SIZE ); +if (pdata->netdev->features &NETIF_F_RXCSUM ) { +xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, +XGBE_SKB_ALLOC_SIZE ); + }else { +xgbe_set_buffer_data (&rdata->rx.hdr, &ring->rx_hdr_pa, + pdata->rx_buf_size); + }/* Set up the buffer page info */ xgbe_set_buffer_data(&rdata->rx.buf, &ring->rx_buf_pa,
drivers/net/ethernet/amd/xgbe/xgbe-dev.c +22 -2
@@ -320,6 +320,18 @@ static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata)XGMAC_IOWRITE_BITS (pdata,MAC_RCR ,HDSMS ,XGBE_SPH_HDSMS_SIZE ); } +static void xgbe_disable_sph_mode (struct xgbe_prv_data *pdata) +{ +unsigned int i; + +for (i =0 ; i < pdata->channel_count; i++) { +if (!pdata->channel[i]->rx_ring) +break ; + +XGMAC_DMA_IOWRITE_BITS (pdata->channel[i],DMA_CH_CR ,SPH ,0 ); + } +} +static int xgbe_write_rss_reg (struct xgbe_prv_data *pdata,unsigned int type,unsigned int index,unsigned int val) {
@@ -3495,8 +3507,12 @@ static int xgbe_init(struct xgbe_prv_data *pdata)xgbe_config_tx_coalesce (pdata);xgbe_config_rx_buffer_size (pdata);xgbe_config_tso_mode (pdata); -xgbe_config_sph_mode (pdata); -xgbe_config_rss (pdata); + +if (pdata->netdev->features &NETIF_F_RXCSUM ) { +xgbe_config_sph_mode (pdata); +xgbe_config_rss (pdata); + } + desc_if->wrapper_tx_desc_init (pdata); desc_if->wrapper_rx_desc_init (pdata);xgbe_enable_dma_interrupts (pdata);
@@ -3650,5 +3666,9 @@ void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *hw_if) hw_if->disable_vxlan = xgbe_disable_vxlan; hw_if->set_vxlan_id = xgbe_set_vxlan_id; +/* For Split Header*/ + hw_if->enable_sph = xgbe_config_sph_mode; + hw_if->disable_sph = xgbe_disable_sph_mode; +DBGPR ("<--xgbe_init_function_ptrs\n" ); }
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +9 -2
@@ -2264,10 +2264,17 @@ static int xgbe_set_features(struct net_device *netdev,if (ret)return ret; -if ((features &NETIF_F_RXCSUM ) && !rxcsum) +if ((features &NETIF_F_RXCSUM ) && !rxcsum) { + hw_if->enable_sph (pdata); + hw_if->enable_vxlan (pdata); hw_if->enable_rx_csum (pdata); -else if (!(features &NETIF_F_RXCSUM ) && rxcsum) +schedule_work (&pdata->restart_work); + }else if (!(features &NETIF_F_RXCSUM ) && rxcsum) { + hw_if->disable_sph (pdata); + hw_if->disable_vxlan (pdata); hw_if->disable_rx_csum (pdata); +schedule_work (&pdata->restart_work); + }if ((features &NETIF_F_HW_VLAN_CTAG_RX ) && !rxvlan) hw_if->enable_rx_vlan_stripping (pdata);
drivers/net/ethernet/amd/xgbe/xgbe.h +4 -0
@@ -833,6 +833,10 @@ struct xgbe_hw_if {void (*enable_vxlan)(struct xgbe_prv_data *);void (*disable_vxlan)(struct xgbe_prv_data *);void (*set_vxlan_id)(struct xgbe_prv_data *); + +/* For Split Header */ +void (*enable_sph)(struct xgbe_prv_data *pdata); +void (*disable_sph)(struct xgbe_prv_data *pdata); };/* This structure represents implementation specific routines for an
drivers/net/ethernet/apm/xgene-v2/main.c +1 -3
@@ -9,8 +9,6 @@#include "main.h" -static const struct acpi_device_id xge_acpi_match[]; -static int xge_get_resources (struct xge_pdata *pdata) {struct platform_device *pdev;
@@ -733,7 +731,7 @@ MODULE_DEVICE_TABLE(acpi, xge_acpi_match);static struct platform_driver xge_driver = { .driver = { .name ="xgene-enet-v2" , - .acpi_match_table =ACPI_PTR (xge_acpi_match), + .acpi_match_table = xge_acpi_match, }, .probe = xge_probe, .remove = xge_remove,
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +31 -5
@@ -1344,6 +1344,17 @@ static int bnxt_get_regs_len(struct net_device *dev)return reg_len; } +#define BNXT_PCIE_32B_ENTRY (start, end) \ + { offsetof(struct pcie_ctx_hw_stats, start), \ + offsetof(struct pcie_ctx_hw_stats, end) } + +static const struct { +u16 start; +u16 end; +} bnxt_pcie_32b_entries[] = { +BNXT_PCIE_32B_ENTRY (pcie_ltssm_histogram[0 ], pcie_ltssm_histogram[3 ]), +}; +static void bnxt_get_regs (struct net_device *dev,struct ethtool_regs *regs,void *_p) {
@@ -1372,12 +1383,27 @@ static void bnxt_get_regs(struct net_device *dev, struct ethtool_regs *regs,mutex_lock (&bp->hwrm_cmd_lock); rc =_hwrm_send_message (bp, &req,sizeof (req),HWRM_CMD_TIMEOUT );if (!rc) { -__le64 *src = (__le64 *)hw_pcie_stats; -u64 *dst = (u64 *)(_p +BNXT_PXP_REG_LEN ); -int i; +u8 *dst = (u8 *)(_p +BNXT_PXP_REG_LEN ); +u8 *src = (u8 *)hw_pcie_stats; +int i, j; + +for (i =0 , j =0 ; i <sizeof (*hw_pcie_stats); ) { +if (i >= bnxt_pcie_32b_entries[j].start && + i <= bnxt_pcie_32b_entries[j].end) { +u32 *dst32 = (u32 *)(dst + i); + + *dst32 =le32_to_cpu (*(__le32 *)(src + i)); + i +=4 ; +if (i > bnxt_pcie_32b_entries[j].end && + j <ARRAY_SIZE (bnxt_pcie_32b_entries) -1 ) + j++; + }else { +u64 *dst64 = (u64 *)(dst + i); -for (i =0 ; i <sizeof (*hw_pcie_stats) /sizeof (__le64); i++) - dst[i] =le64_to_cpu (src[i]); + *dst64 =le64_to_cpu (*(__le64 *)(src + i)); + i +=8 ; + } + } }mutex_unlock (&bp->hwrm_cmd_lock); dma_free_coherent(&bp->pdev->dev, sizeof(*hw_pcie_stats), hw_pcie_stats,
drivers/net/ethernet/cadence/macb_main.c +6 -13
@@ -826,22 +826,15 @@ static void macb_update_stats(struct macb *bp)static int macb_halt_tx (struct macb *bp) { -unsigned long halt_time, timeout; -u32 status; +u32 status;macb_writel (bp,NCR ,macb_readl (bp,NCR ) |MACB_BIT (THALT )); - timeout = jiffies +usecs_to_jiffies (MACB_HALT_TIMEOUT ); -do { - halt_time = jiffies; - status =macb_readl (bp,TSR ); -if (!(status &MACB_BIT (TGO ))) -return 0 ; - -udelay (250 ); - }while (time_before (halt_time, timeout)); - -return -ETIMEDOUT ; +/* Poll TSR until TGO is cleared or timeout. */ +return read_poll_timeout_atomic (macb_readl, status, + !(status &MACB_BIT (TGO )), +250 ,MACB_HALT_TIMEOUT , false, + bp,TSR ); }static void macb_tx_unmap (struct macb *bp,struct macb_tx_skb *tx_skb)
drivers/net/ethernet/dlink/dl2k.c +1 -1
@@ -353,7 +353,7 @@ parse_eeprom (struct net_device *dev) dev->dev_addr[i] = psrom->mac_addr[i];if (np->chip_id ==CHIP_IP1000A ) { - np->led_mode = psrom->led_mode; + np->led_mode =le16_to_cpu (psrom->led_mode);return 0 ; }
drivers/net/ethernet/dlink/dl2k.h +1 -1
@@ -335,7 +335,7 @@ typedef struct t_SROM {u16 sub_system_id;/* 0x06 */ u16 pci_base_1;/* 0x08 (IP1000A only) */ u16 pci_base_2;/* 0x0a (IP1000A only) */ -u16 led_mode;/* 0x0c (IP1000A only) */ +__le16 led_mode;/* 0x0c (IP1000A only) */ u16 reserved1[9 ];/* 0x0e-0x1f */ u8 mac_addr[6 ];/* 0x20-0x25 */ u8 reserved2[10 ];/* 0x26-0x2f */
drivers/net/ethernet/freescale/fec_main.c +6 -1
@@ -602,7 +602,12 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq, txq->bd.cur = bdp;/* Trigger transmission start */ -writel (0 , txq->bd.reg_desc_active); +if (!(fep->quirks &FEC_QUIRK_ERR007885 ) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active) || + !readl (txq->bd.reg_desc_active)) +writel (0 , txq->bd.reg_desc_active);return 0 ; }
drivers/net/ethernet/intel/ice/ice_arfs.c +2 -7
@@ -577,7 +577,7 @@ void ice_free_cpu_rx_rmap(struct ice_vsi *vsi) {struct net_device *netdev; -if (!vsi || vsi->type !=ICE_VSI_PF || !vsi->arfs_fltr_list) +if (!vsi || vsi->type !=ICE_VSI_PF )return ; netdev = vsi->netdev;
@@ -600,7 +600,7 @@ int ice_set_cpu_rx_rmap(struct ice_vsi *vsi)int base_idx, i;if (!vsi || vsi->type !=ICE_VSI_PF ) -return -EINVAL ; +return 0 ; pf = vsi->back; netdev = vsi->netdev;
@@ -638,7 +638,6 @@ void ice_remove_arfs(struct ice_pf *pf)if (!pf_vsi)return ; -ice_free_cpu_rx_rmap (pf_vsi);ice_clear_arfs (pf_vsi); }
@@ -655,9 +654,5 @@ void ice_rebuild_arfs(struct ice_pf *pf)return ;ice_remove_arfs (pf); -if (ice_set_cpu_rx_rmap (pf_vsi)) { -dev_err (ice_pf_to_dev (pf),"Failed to rebuild aRFS\n" ); -return ; - }ice_init_arfs (pf_vsi); }
drivers/net/ethernet/intel/ice/ice_lib.c +4 -1
@@ -2411,6 +2411,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)return ; vsi->irqs_ready = false; +ice_free_cpu_rx_rmap (vsi); +ice_for_each_q_vector (vsi, i) {u16 vector = i + base;int irq_num;
@@ -2424,7 +2426,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)continue ;/* clear the affinity notifier in the IRQ descriptor */ -irq_set_affinity_notifier (irq_num,NULL ); +if (!IS_ENABLED (CONFIG_RFS_ACCEL )) +irq_set_affinity_notifier (irq_num,NULL );/* clear the affinity_mask in the IRQ descriptor */ irq_set_affinity_hint (irq_num,NULL );
drivers/net/ethernet/intel/ice/ice_main.c +8 -12
@@ -2247,6 +2247,13 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)irq_set_affinity_hint (irq_num, &q_vector->affinity_mask); } + err =ice_set_cpu_rx_rmap (vsi); +if (err) { +netdev_err (vsi->netdev,"Failed to setup CPU RMAP on VSI %u: %pe\n" , + vsi->vsi_num,ERR_PTR (err)); + goto free_q_irqs; + } + vsi->irqs_ready = true;return 0 ;
@@ -3242,22 +3249,12 @@ static int ice_setup_pf_sw(struct ice_pf *pf)*/ ice_napi_add (vsi); - status =ice_set_cpu_rx_rmap (vsi); -if (status) { -dev_err (ice_pf_to_dev (pf),"Failed to set CPU Rx map VSI %d error %d\n" , - vsi->vsi_num, status); - status = -EINVAL ; - goto unroll_napi_add; - } status =ice_init_mac_fltr (pf);if (status) - goto free_cpu_rx_map; + goto unroll_napi_add;return status; -free_cpu_rx_map: -ice_free_cpu_rx_rmap (vsi); - unroll_napi_add:if (vsi) {ice_napi_del (vsi);
@@ -4598,7 +4595,6 @@ static int __maybe_unused ice_suspend(struct device *dev)continue ;ice_vsi_free_q_vectors (pf->vsi[v]); } -ice_free_cpu_rx_rmap (ice_get_main_vsi (pf));ice_clear_interrupt_scheme (pf);pci_save_state (pdev);
drivers/net/ethernet/mellanox/mlx4/alloc.c +3 -3
@@ -682,9 +682,9 @@ static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir(struct device *dma_device) }static int mlx4_alloc_db_from_pgdir (struct mlx4_db_pgdir *pgdir, -struct mlx4_db *db,int order) +struct mlx4_db *db,unsigned int order) { -int o; +unsigned int o;int i;for (o = order; o <=1 ; ++o) {
@@ -712,7 +712,7 @@ static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,return 0 ; } -int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,int order) +int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,unsigned int order) {struct mlx4_priv *priv =mlx4_priv (dev);struct mlx4_db_pgdir *pgdir;
drivers/net/ethernet/mellanox/mlx4/en_tx.c +2 -0
@@ -445,6 +445,8 @@ int mlx4_en_process_tx_cq(struct net_device *dev,if (unlikely (!priv->port_up))return 0 ; +if (unlikely (!napi_budget) && cq->type ==TX_XDP ) +return 0 ;netdev_txq_bql_complete_prefetchw (ring->tx_queue);
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +5 -0
@@ -53,6 +53,7 @@#define MLX5E_REP_PARAMS_DEF_LOG_SQ_SIZE \ max(0x7, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE)#define MLX5E_REP_PARAMS_DEF_NUM_CHANNELS 1 +#define MLX5E_REP_PARAMS_DEF_LOG_RQ_SIZE 0x8static const char mlx5e_rep_driver_name[] ="mlx5e_rep" ;
@@ -702,6 +703,8 @@ static void mlx5e_build_rep_params(struct net_device *netdev)/* RQ */ mlx5e_build_rq_params (mdev, params); +if (!mlx5e_is_uplink_rep (priv) &&mlx5_core_is_ecpf (mdev)) + params->log_rq_mtu_frames =MLX5E_REP_PARAMS_DEF_LOG_RQ_SIZE ;/* CQ moderation params */ params->rx_dim_enabled =MLX5_CAP_GEN (mdev, cq_moderation);
@@ -740,6 +743,8 @@ static void mlx5e_build_rep_netdev(struct net_device *netdev) } netdev->watchdog_timeo =15 *HZ ; +if (mlx5_core_is_ecpf (mdev)) + netdev->tx_queue_len =1 <<MLX5E_REP_PARAMS_DEF_LOG_SQ_SIZE ; netdev->features |=NETIF_F_NETNS_LOCAL ;
drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c +3 -0
@@ -188,6 +188,9 @@ mlx5e_test_loopback_validate(struct sk_buff *skb,struct udphdr *udph;struct iphdr *iph; +if (skb_linearize (skb)) + goto out; +/* We are only going to peek, no need to clone the SKB */ if (MLX5E_TEST_PKT_SIZE -ETH_HLEN >skb_headlen (skb)) goto out;
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +4 -1
@@ -2317,7 +2317,9 @@ int esw_offloads_enable(struct mlx5_eswitch *esw) esw->offloads.encap =DEVLINK_ESWITCH_ENCAP_MODE_NONE ;mutex_init (&esw->offloads.termtbl_mutex); -mlx5_rdma_enable_roce (esw->dev); + err =mlx5_rdma_enable_roce (esw->dev); +if (err) + goto err_roce; err =mlx5_esw_host_number_init (esw);if (err)
@@ -2366,6 +2368,7 @@ int esw_offloads_enable(struct mlx5_eswitch *esw) err_metadata: esw->flags &= ~MLX5_ESWITCH_VPORT_MATCH_METADATA ;mlx5_rdma_disable_roce (esw->dev); +err_roce:mutex_destroy (&esw->offloads.termtbl_mutex);return err; }
drivers/net/ethernet/mellanox/mlx5/core/events.c +8 -3
@@ -156,11 +156,16 @@ static int temp_warn(struct notifier_block *nb, unsigned long type, void *data)u64 value_msb; value_lsb =be64_to_cpu (eqe->data.temp_warning.sensor_warning_lsb); +/* bit 1-63 are not supported for NICs, +* hence read only bit 0 (asic) from lsb. +*/ + value_lsb &=0x1 ; value_msb =be64_to_cpu (eqe->data.temp_warning.sensor_warning_msb); -mlx5_core_warn (events->dev, -"High temperature on sensors with bit set %llx %llx" , - value_msb, value_lsb); +if (net_ratelimit ()) +mlx5_core_warn (events->dev, +"High temperature on sensors with bit set %llx %llx" , + value_msb, value_lsb);return NOTIFY_OK ; }
drivers/net/ethernet/mellanox/mlx5/core/health.c +1 -0
@@ -733,6 +733,7 @@ static void poll_health(struct timer_list *t) health->prev = count;if (health->miss_counter ==MAX_MISSES ) {mlx5_core_err (dev,"device's health compromised - reached miss count\n" ); + health->synd =ioread8 (&h->synd);print_health_info (dev);queue_work (health->wq, &health->report_work); }
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +0 -1
@@ -88,7 +88,6 @@ static void irq_set_name(char *name, int vecidx)snprintf (name,MLX5_MAX_IRQ_NAME ,"mlx5_comp%d" , vecidx -MLX5_IRQ_VEC_COMP_BASE ); -return ; }static int request_irqs (struct mlx5_core_dev *dev,int nvec)
drivers/net/ethernet/mellanox/mlx5/core/rdma.c +6 -6
@@ -130,8 +130,8 @@ static void mlx5_rdma_make_default_gid(struct mlx5_core_dev *dev, union ib_gid *static int mlx5_rdma_add_roce_addr (struct mlx5_core_dev *dev) { +u8 mac[ETH_ALEN ] = {};union ib_gid gid; -u8 mac[ETH_ALEN ];mlx5_rdma_make_default_gid (dev, &gid); return mlx5_core_roce_gid_set(dev, 0,
@@ -152,17 +152,17 @@ void mlx5_rdma_disable_roce(struct mlx5_core_dev *dev)mlx5_nic_vport_disable_roce (dev); } -void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) +int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {int err;if (!MLX5_CAP_GEN (dev, roce)) -return ; +return 0 ; err =mlx5_nic_vport_enable_roce (dev);if (err) {mlx5_core_err (dev,"Failed to enable RoCE: %d\n" , err); -return ; +return err; } err =mlx5_rdma_add_roce_addr (dev);
@@ -177,11 +177,11 @@ void mlx5_rdma_enable_roce(struct mlx5_core_dev *dev) goto del_roce_addr; } -return ; +return err; del_roce_addr:mlx5_rdma_del_roce_addr (dev); disable_roce:mlx5_nic_vport_disable_roce (dev); -return ; +return err; }
drivers/net/ethernet/mellanox/mlx5/core/rdma.h +2 -2
@@ -8,12 +8,12 @@#ifdef CONFIG_MLX5_ESWITCH -void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev); +int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev);void mlx5_rdma_disable_roce (struct mlx5_core_dev *dev);#else /* CONFIG_MLX5_ESWITCH */ -static inline void mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {} +static inline int mlx5_rdma_enable_roce (struct mlx5_core_dev *dev) {return 0 ; }static inline void mlx5_rdma_disable_roce (struct mlx5_core_dev *dev) {}#endif /* CONFIG_MLX5_ESWITCH */
drivers/net/ethernet/microchip/lan743x_main.c +6 -2
@@ -1475,6 +1475,7 @@ static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,if (nr_frags <=0 ) { tx->frame_data0 |=TX_DESC_DATA0_LS_ ; tx->frame_data0 |=TX_DESC_DATA0_IOC_ ; + tx->frame_last = tx->frame_first; } tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; tx_descriptor->data0 =cpu_to_le32 (tx->frame_data0);
@@ -1544,6 +1545,7 @@ static int lan743x_tx_frame_add_fragment(struct lan743x_tx *tx, tx->frame_first =0 ; tx->frame_data0 =0 ; tx->frame_tail =0 ; + tx->frame_last =0 ;return -ENOMEM ; }
@@ -1584,16 +1586,18 @@ static void lan743x_tx_frame_end(struct lan743x_tx *tx, TX_DESC_DATA0_DTYPE_DATA_) { tx->frame_data0 |=TX_DESC_DATA0_LS_ ; tx->frame_data0 |=TX_DESC_DATA0_IOC_ ; + tx->frame_last = tx->frame_tail; } - tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; - buffer_info = &tx->buffer_info[tx->frame_tail]; + tx_descriptor = &tx->ring_cpu_ptr[tx->frame_last]; + buffer_info = &tx->buffer_info[tx->frame_last]; buffer_info->skb = skb;if (time_stamp) buffer_info->flags |=TX_BUFFER_INFO_FLAG_TIMESTAMP_REQUESTED ;if (ignore_sync) buffer_info->flags |=TX_BUFFER_INFO_FLAG_IGNORE_SYNC ; + tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; tx_descriptor->data0 =cpu_to_le32 (tx->frame_data0); tx->frame_tail =lan743x_tx_next_index (tx, tx->frame_tail); tx->last_tail = tx->frame_tail;
drivers/net/ethernet/microchip/lan743x_main.h +1 -0
@@ -657,6 +657,7 @@ struct lan743x_tx {u32 frame_first;u32 frame_data0;u32 frame_tail; +u32 frame_last;struct lan743x_tx_buffer_info *buffer_info;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +5 -2
@@ -1485,8 +1485,11 @@ static int qlcnic_sriov_channel_cfg_cmd(struct qlcnic_adapter *adapter, u8 cmd_o } cmd_op = (cmd.rsp.arg[0 ] &0xff ); -if (cmd.rsp.arg[0 ] >>25 ==2 ) -return 2 ; +if (cmd.rsp.arg[0 ] >>25 ==2 ) { + ret =2 ; + goto out; + } +if (cmd_op ==QLCNIC_BC_CMD_CHANNEL_INIT )set_bit (QLC_BC_VF_STATE , &vf->state);else
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +1 -1
@@ -936,7 +936,7 @@ static int sun8i_dwmac_set_syscon(struct device *dev,/* of_mdio_parse_addr returns a valid (0 ~ 31) PHY * address. No need to mask it again. */ - reg |=1 <<H3_EPHY_ADDR_SHIFT ; + reg |= ret <<H3_EPHY_ADDR_SHIFT ; }else {/* For SoCs without internal PHY the PHY selection bit should be * set to 0 (external PHY).
drivers/net/ethernet/ti/cpsw_new.c +1 -0
@@ -1427,6 +1427,7 @@ static int cpsw_create_ports(struct cpsw_common *cpsw) ndev->netdev_ops = &cpsw_netdev_ops; ndev->ethtool_ops = &cpsw_ethtool_ops;SET_NETDEV_DEV (ndev, dev); + ndev->dev.of_node = slave_data->slave_node;if (!napi_ndev) {/* CPSW Host port CPDMA interface is shared between
drivers/net/ieee802154/ca8210.c +4 -5
@@ -1488,8 +1488,7 @@ static u8 mcps_data_request( command.pdata.data_req.src_addr_mode = src_addr_mode; command.pdata.data_req.dst.mode = dst_address_mode;if (dst_address_mode !=MAC_MODE_NO_ADDR ) { - command.pdata.data_req.dst.pan_id[0 ] =LS_BYTE (dst_pan_id); - command.pdata.data_req.dst.pan_id[1 ] =MS_BYTE (dst_pan_id); +put_unaligned_le16 (dst_pan_id, command.pdata.data_req.dst.pan_id);if (dst_address_mode ==MAC_MODE_SHORT_ADDR ) { command.pdata.data_req.dst.address[0 ] =LS_BYTE ( dst_addr->short_address
@@ -1838,12 +1837,12 @@ static int ca8210_skb_rx( } hdr.source.mode = data_ind[0 ];dev_dbg (&priv->spi->dev,"srcAddrMode: %#03x\n" , hdr.source.mode); - hdr.source.pan_id = *(u16 *)&data_ind[1 ]; + hdr.source.pan_id =cpu_to_le16 (get_unaligned_le16 (&data_ind[1 ]));dev_dbg (&priv->spi->dev,"srcPanId: %#06x\n" , hdr.source.pan_id);memcpy (&hdr.source.extended_addr, &data_ind[3 ],8 ); hdr.dest.mode = data_ind[11 ];dev_dbg (&priv->spi->dev,"dstAddrMode: %#03x\n" , hdr.dest.mode); - hdr.dest.pan_id = *(u16 *)&data_ind[12 ]; + hdr.dest.pan_id =cpu_to_le16 (get_unaligned_le16 (&data_ind[12 ]));dev_dbg (&priv->spi->dev,"dstPanId: %#06x\n" , hdr.dest.pan_id);memcpy (&hdr.dest.extended_addr, &data_ind[14 ],8 );
@@ -1970,7 +1969,7 @@ static int ca8210_skb_tx( status = mcps_data_request( header.source.mode, header.dest.mode, - header.dest.pan_id, + le16_to_cpu(header.dest.pan_id), (union macaddr *)&header.dest.extended_addr, skb->len - mac_len, &skb->data[mac_len],
drivers/net/vxlan/vxlan_core.c +9 -9
@@ -333,9 +333,9 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan, be32_to_cpu(fdb->vni))) goto nla_put_failure; - ci.ndm_used =jiffies_to_clock_t (now - fdb->used); + ci.ndm_used =jiffies_to_clock_t (now -READ_ONCE (fdb->used)); ci.ndm_confirmed =0 ; - ci.ndm_updated =jiffies_to_clock_t (now - fdb->updated); + ci.ndm_updated =jiffies_to_clock_t (now -READ_ONCE (fdb->updated)); ci.ndm_refcnt =0 ;if (nla_put (skb,NDA_CACHEINFO ,sizeof (ci), &ci))
@@ -541,8 +541,8 @@ static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,struct vxlan_fdb *f; f =__vxlan_find_mac (vxlan, mac, vni); -if (f && f->used != jiffies) - f->used = jiffies; +if (f &&READ_ONCE (f->used) != jiffies) +WRITE_ONCE (f->used, jiffies);return f; }
@@ -1072,12 +1072,12 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, !(f->flags & NTF_VXLAN_ADDED_BY_USER)) {if (f->state != state) { f->state = state; - f->updated = jiffies; +WRITE_ONCE (f->updated, jiffies); notify =1 ; }if (f->flags != fdb_flags) { f->flags = fdb_flags; - f->updated = jiffies; +WRITE_ONCE (f->updated, jiffies); notify =1 ; } }
@@ -1111,7 +1111,7 @@ static int vxlan_fdb_update_existing(struct vxlan_dev *vxlan, }if (ndm_flags &NTF_USE ) - f->used = jiffies; +WRITE_ONCE (f->used, jiffies);if (notify) {if (rd ==NULL )
@@ -1524,7 +1524,7 @@ static bool vxlan_snoop(struct net_device *dev, src_mac, &rdst->remote_ip.sa, &src_ip->sa); rdst->remote_ip = *src_ip; - f->updated = jiffies; +WRITE_ONCE (f->updated, jiffies);vxlan_fdb_notify (vxlan, f, rdst,RTM_NEWNEIGH , true,NULL ); }else {u32 hash_index =fdb_head_index (vxlan, src_mac, vni);
@@ -2999,7 +2999,7 @@ static void vxlan_cleanup(struct timer_list *t)if (f->flags &NTF_EXT_LEARNED )continue ; - timeout = f->used + vxlan->cfg.age_interval *HZ ; + timeout =READ_ONCE (f->used) + vxlan->cfg.age_interval *HZ ;if (time_before_eq (timeout, jiffies)) { netdev_dbg(vxlan->dev, "garbage collect %pM\n",
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +4 -2
@@ -903,14 +903,16 @@ brcmf_usb_dl_writeimage(struct brcmf_usbdev_info *devinfo, u8 *fw, int fwlen) }/* 1) Prepare USB boot loader for runtime image */ -brcmf_usb_dl_cmd (devinfo,DL_START , &state,sizeof (state)); + err =brcmf_usb_dl_cmd (devinfo,DL_START , &state,sizeof (state)); +if (err) + goto fail; rdlstate =le32_to_cpu (state.state); rdlbytes =le32_to_cpu (state.bytes);/* 2) Check we are in the Waiting state */ if (rdlstate !=DL_WAITING ) { -brcmf_err ("Failed to DL_START\n" ); +brcmf_err ("Invalid DL state: %u\n" , rdlstate); err = -EINVAL ; goto fail; }
drivers/net/wireless/mediatek/mt76/dma.c +1 -0
@@ -666,6 +666,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)int i;mt76_worker_disable (&dev->tx_worker); +napi_disable (&dev->tx_napi);netif_napi_del (&dev->tx_napi);for (i =0 ; i <ARRAY_SIZE (dev->q_tx); i++)mt76_dma_tx_cleanup (dev, i, true);
drivers/net/wireless/realtek/rtw88/main.c +15 -25
@@ -1141,6 +1141,7 @@ static void rtw_init_ht_cap(struct rtw_dev *rtwdev, struct ieee80211_sta_ht_cap *ht_cap) {struct rtw_efuse *efuse = &rtwdev->efuse; +int i; ht_cap->ht_supported = true; ht_cap->cap =0 ;
@@ -1158,25 +1159,20 @@ static void rtw_init_ht_cap(struct rtw_dev *rtwdev, ht_cap->ampdu_factor =IEEE80211_HT_MAX_AMPDU_64K ; ht_cap->ampdu_density =IEEE80211_HT_MPDU_DENSITY_16 ; ht_cap->mcs.tx_params =IEEE80211_HT_MCS_TX_DEFINED ; -if (efuse->hw_cap.nss >1 ) { - ht_cap->mcs.rx_mask[0 ] =0xFF ; - ht_cap->mcs.rx_mask[1 ] =0xFF ; - ht_cap->mcs.rx_mask[4 ] =0x01 ; - ht_cap->mcs.rx_highest =cpu_to_le16 (300 ); - }else { - ht_cap->mcs.rx_mask[0 ] =0xFF ; - ht_cap->mcs.rx_mask[1 ] =0x00 ; - ht_cap->mcs.rx_mask[4 ] =0x01 ; - ht_cap->mcs.rx_highest =cpu_to_le16 (150 ); - } + +for (i =0 ; i < efuse->hw_cap.nss; i++) + ht_cap->mcs.rx_mask[i] =0xFF ; + ht_cap->mcs.rx_mask[4 ] =0x01 ; + ht_cap->mcs.rx_highest =cpu_to_le16 (150 * efuse->hw_cap.nss); }static void rtw_init_vht_cap (struct rtw_dev *rtwdev,struct ieee80211_sta_vht_cap *vht_cap) {struct rtw_efuse *efuse = &rtwdev->efuse; -u16 mcs_map; +u16 mcs_map =0 ;__le16 highest; +int i;if (efuse->hw_cap.ptcl !=EFUSE_HW_CAP_IGNORE && efuse->hw_cap.ptcl !=EFUSE_HW_CAP_PTCL_VHT )
@@ -1199,21 +1195,15 @@ static void rtw_init_vht_cap(struct rtw_dev *rtwdev,if (rtw_chip_has_rx_ldpc (rtwdev)) vht_cap->cap |=IEEE80211_VHT_CAP_RXLDPC ; - mcs_map =IEEE80211_VHT_MCS_SUPPORT_0_9 <<0 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<4 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<6 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<8 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<10 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<12 | -IEEE80211_VHT_MCS_NOT_SUPPORTED <<14 ; -if (efuse->hw_cap.nss >1 ) { - highest =cpu_to_le16 (780 ); - mcs_map |=IEEE80211_VHT_MCS_SUPPORT_0_9 <<2 ; - }else { - highest =cpu_to_le16 (390 ); - mcs_map |=IEEE80211_VHT_MCS_NOT_SUPPORTED <<2 ; +for (i =0 ; i <8 ; i++) { +if (i < efuse->hw_cap.nss) + mcs_map |=IEEE80211_VHT_MCS_SUPPORT_0_9 << (i *2 ); +else + mcs_map |=IEEE80211_VHT_MCS_NOT_SUPPORTED << (i *2 ); } + highest =cpu_to_le16 (390 * efuse->hw_cap.nss); + vht_cap->vht_mcs.rx_mcs_map =cpu_to_le16 (mcs_map); vht_cap->vht_mcs.tx_mcs_map =cpu_to_le16 (mcs_map); vht_cap->vht_mcs.rx_highest = highest;
drivers/net/wireless/realtek/rtw88/reg.h +2 -1
@@ -107,6 +107,7 @@#define BIT_SHIFT_ROM_PGE 16#define BIT_FW_INIT_RDY BIT(15)#define BIT_FW_DW_RDY BIT(14) +#define BIT_CPU_CLK_SEL (BIT(12) | BIT(13))#define BIT_RPWM_TOGGLE BIT(7)#define BIT_RAM_DL_SEL BIT(7)/* legacy only */ #define BIT_DMEM_CHKSUM_OK BIT(6)
@@ -124,7 +125,7 @@ BIT_CHECK_SUM_OK)#define FW_READY_LEGACY (BIT_MCUFWDL_RDY | BIT_FWDL_CHK_RPT | \ BIT_WINTINI_RDY | BIT_RAM_DL_SEL) -#define FW_READY_MASK 0xffff +#define FW_READY_MASK (0xffff & ~BIT_CPU_CLK_SEL)#define REG_MCU_TST_CFG 0x84#define VAL_FW_TRIGGER 0x1
drivers/net/wireless/realtek/rtw88/rtw8822b.c +8 -6
@@ -954,11 +954,11 @@ static void rtw8822b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, }static void -rtw8822b_set_tx_power_index_by_rate (struct rtw_dev *rtwdev,u8 path,u8 rs) +rtw8822b_set_tx_power_index_by_rate (struct rtw_dev *rtwdev,u8 path, +u8 rs,u32 *phy_pwr_idx) {struct rtw_hal *hal = &rtwdev->hal;static const u32 offset_txagc[2 ] = {0x1d00 ,0x1d80 }; -static u32 phy_pwr_idx;u8 rate, rate_idx, pwr_index, shift;int j;
@@ -966,12 +966,12 @@ rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) rate = rtw_rate_section[rs][j]; pwr_index = hal->tx_pwr_tbl[path][rate]; shift = rate &0x3 ; - phy_pwr_idx |= ((u32 )pwr_index << (shift *8 )); + *phy_pwr_idx |= ((u32 )pwr_index << (shift *8 ));if (shift ==0x3 ) { rate_idx = rate &0xfc ;rtw_write32 (rtwdev, offset_txagc[path] + rate_idx, - phy_pwr_idx); - phy_pwr_idx =0 ; + *phy_pwr_idx); + *phy_pwr_idx =0 ; } } }
@@ -979,11 +979,13 @@ rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs)static void rtw8822b_set_tx_power_index (struct rtw_dev *rtwdev) {struct rtw_hal *hal = &rtwdev->hal; +u32 phy_pwr_idx =0 ;int rs, path;for (path =0 ; path < hal->rf_path_num; path++) {for (rs =0 ; rs <RTW_RATE_SECTION_MAX ; rs++) -rtw8822b_set_tx_power_index_by_rate (rtwdev, path, rs); +rtw8822b_set_tx_power_index_by_rate (rtwdev, path, rs, + &phy_pwr_idx); } }
drivers/net/wireless/realtek/rtw88/util.c +2 -1
@@ -101,7 +101,8 @@ void rtw_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss) *nss =4 ; *mcs = rate -DESC_RATEVHT4SS_MCS0 ; }else if (rate >=DESC_RATEMCS0 && - rate <=DESC_RATEMCS15 ) { + rate <=DESC_RATEMCS31 ) { + *nss =0 ; *mcs = rate -DESC_RATEMCS0 ; } }
drivers/nvdimm/label.c +2 -1
@@ -421,7 +421,8 @@ int nd_label_data_init(struct nvdimm_drvdata *ndd)if (ndd->data)return 0 ; -if (ndd->nsarea.status || ndd->nsarea.max_xfer ==0 ) { +if (ndd->nsarea.status || ndd->nsarea.max_xfer ==0 || + ndd->nsarea.config_size ==0 ) {dev_dbg (ndd->dev,"failed to init config data area: (%u:%u)\n" , ndd->nsarea.max_xfer, ndd->nsarea.config_size);return -ENXIO ;
drivers/nvme/host/core.c +2 -1
@@ -4429,7 +4429,8 @@ static void nvme_fw_act_work(struct work_struct *work)msleep (100 ); } -if (!nvme_change_ctrl_state (ctrl,NVME_CTRL_LIVE )) +if (!nvme_change_ctrl_state (ctrl,NVME_CTRL_CONNECTING ) || + !nvme_change_ctrl_state (ctrl,NVME_CTRL_LIVE ))return ;nvme_start_queues (ctrl);
drivers/nvme/host/tcp.c +29 -2
@@ -1573,7 +1573,7 @@ static void __nvme_tcp_stop_queue(struct nvme_tcp_queue *queue)cancel_work_sync (&queue->io_work); } -static void nvme_tcp_stop_queue (struct nvme_ctrl *nctrl,int qid) +static void nvme_tcp_stop_queue_nowait (struct nvme_ctrl *nctrl,int qid) {struct nvme_tcp_ctrl *ctrl =to_tcp_ctrl (nctrl);struct nvme_tcp_queue *queue = &ctrl->queues[qid];
@@ -1584,6 +1584,31 @@ static void nvme_tcp_stop_queue(struct nvme_ctrl *nctrl, int qid)mutex_unlock (&queue->queue_lock); } +static void nvme_tcp_wait_queue (struct nvme_ctrl *nctrl,int qid) +{ +struct nvme_tcp_ctrl *ctrl =to_tcp_ctrl (nctrl); +struct nvme_tcp_queue *queue = &ctrl->queues[qid]; +int timeout =100 ; + +while (timeout >0 ) { +if (!test_bit (NVME_TCP_Q_ALLOCATED , &queue->flags) || + !sk_wmem_alloc_get (queue->sock->sk)) +return ; +msleep (2 ); + timeout -=2 ; + } +dev_warn (nctrl->device, +"qid %d: timeout draining sock wmem allocation expired\n" , + qid); +} + +static void nvme_tcp_stop_queue (struct nvme_ctrl *nctrl,int qid) +{ +nvme_tcp_stop_queue_nowait (nctrl, qid); +nvme_tcp_wait_queue (nctrl, qid); +} + +static void nvme_tcp_setup_sock_ops (struct nvme_tcp_queue *queue) {write_lock_bh (&queue->sock->sk->sk_callback_lock);
@@ -1691,7 +1716,9 @@ static void nvme_tcp_stop_io_queues(struct nvme_ctrl *ctrl)int i;for (i =1 ; i < ctrl->queue_count; i++) -nvme_tcp_stop_queue (ctrl, i); +nvme_tcp_stop_queue_nowait (ctrl, i); +for (i =1 ; i < ctrl->queue_count; i++) +nvme_tcp_wait_queue (ctrl, i); }static int nvme_tcp_start_io_queues (struct nvme_ctrl *ctrl)
drivers/nvme/target/tcp.c +3 -0
@@ -1395,6 +1395,9 @@ static void nvmet_tcp_restore_socket_callbacks(struct nvmet_tcp_queue *queue) {struct socket *sock = queue->sock; +if (!queue->state_change) +return ; +write_lock_bh (&sock->sk->sk_callback_lock); sock->sk->sk_data_ready = queue->data_ready; sock->sk->sk_state_change = queue->state_change;
drivers/of/device.c +4 -3
@@ -231,14 +231,15 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len csize =snprintf (str, len,"of:N%pOFn%c%s" , dev->of_node,'T' ,of_node_get_device_type (dev->of_node)); tsize = csize; +if (csize >= len) + csize = len >0 ? len -1 :0 ; len -= csize; -if (str) - str += csize; + str += csize;of_property_for_each_string (dev->of_node,"compatible" , p, compat) { csize =strlen (compat) +1 ; tsize += csize; -if (csize > len) +if (csize >= len)continue ; csize =snprintf (str, len,"C%s" , compat);
drivers/pci/controller/dwc/pci-imx6.c +2 -3
@@ -1092,11 +1092,10 @@ static int imx6_pcie_probe(struct platform_device *pdev)if (IS_ERR (imx6_pcie->pcie_aux))return dev_err_probe (dev,PTR_ERR (imx6_pcie->pcie_aux),"pcie_aux clock source missing or invalid\n" ); - fallthrough; -case IMX7D :if (dbi_base->start ==IMX8MQ_PCIE2_BASE_ADDR ) imx6_pcie->controller_id =1 ; - + fallthrough; +case IMX7D : imx6_pcie->pciephy_reset =devm_reset_control_get_exclusive (dev,"pciephy" );if (IS_ERR (imx6_pcie->pciephy_reset)) {
drivers/pci/controller/pcie-brcmstb.c +3 -2
@@ -300,8 +300,8 @@ static int brcm_pcie_encode_ibar_size(u64 size)if (log2_in >=12 && log2_in <=15 )/* Covers 4KB to 32KB (inclusive) */ return (log2_in -12 ) +0x1c ; -else if (log2_in >=16 && log2_in <=35 ) -/* Covers 64KB to 32GB, (inclusive) */ +else if (log2_in >=16 && log2_in <=36 ) +/* Covers 64KB to 64GB, (inclusive) */ return log2_in -15 ;/* Something is awry so disable */ return 0 ;
@@ -1326,3 +1326,4 @@ module_platform_driver(brcm_pcie_driver);MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("Broadcom STB PCIe RC driver" );MODULE_AUTHOR ("Broadcom" ); +MODULE_SOFTDEP ("pre: irq_bcm2712_mip" );
drivers/pci/setup-bus.c +2 -4
@@ -806,11 +806,9 @@ static resource_size_t calculate_iosize(resource_size_t size, size = (size &0xff ) + ((size & ~0xffUL ) <<2 );#endif size = size + size1; -if (size < old_size) - size = old_size; - size =ALIGN (max (size, add_size) + children_add_size, align); -return size; + size =max (size, add_size) + children_add_size; +return ALIGN (max (size, old_size), align); } static resource_size_t calculate_memsize(resource_size_t size,
drivers/perf/arm-cmn.c +1 -1
@@ -1512,6 +1512,7 @@ static int arm_cmn_probe(struct platform_device *pdev)return -ENOMEM ; cmn->dev = &pdev->dev; + cmn->cpu =raw_smp_processor_id ();platform_set_drvdata (pdev, cmn);if (has_acpi_companion (cmn->dev))
@@ -1533,7 +1534,6 @@ static int arm_cmn_probe(struct platform_device *pdev)if (err)return err; - cmn->cpu =raw_smp_processor_id (); cmn->pmu = (struct pmu ) { .module =THIS_MODULE , .attr_groups = arm_cmn_attr_groups,
drivers/phy/phy-core.c +4 -3
@@ -360,13 +360,14 @@ EXPORT_SYMBOL_GPL(phy_power_off);int phy_set_mode_ext (struct phy *phy,enum phy_mode mode,int submode) { -int ret; +int ret =0 ; -if (!phy || !phy->ops->set_mode) +if (!phy)return 0 ;mutex_lock (&phy->mutex); - ret = phy->ops->set_mode (phy, mode, submode); +if (phy->ops->set_mode) + ret = phy->ops->set_mode (phy, mode, submode);if (!ret) phy->attrs.mode = mode;mutex_unlock (&phy->mutex);
drivers/phy/renesas/phy-rcar-gen3-usb2.c +5 -2
@@ -429,8 +429,11 @@ static int rcar_gen3_phy_usb2_init(struct phy *p) val =readl (usb2_base +USB2_INT_ENABLE ); val |=USB2_INT_ENABLE_UCOM_INTEN | rphy->int_enable_bits;writel (val, usb2_base +USB2_INT_ENABLE ); -writel (USB2_SPD_RSM_TIMSET_INIT , usb2_base +USB2_SPD_RSM_TIMSET ); -writel (USB2_OC_TIMSET_INIT , usb2_base +USB2_OC_TIMSET ); + +if (!rcar_gen3_is_any_rphy_initialized (channel)) { +writel (USB2_SPD_RSM_TIMSET_INIT , usb2_base +USB2_SPD_RSM_TIMSET ); +writel (USB2_OC_TIMSET_INIT , usb2_base +USB2_OC_TIMSET ); + }/* Initialize otg part */ if (channel->is_otg_channel) {
drivers/phy/tegra/xusb.c +4 -4
@@ -536,16 +536,16 @@ static int tegra_xusb_port_init(struct tegra_xusb_port *port, err =dev_set_name (&port->dev,"%s-%u" , name, index);if (err <0 ) - goto unregister; + goto put_device; err =device_add (&port->dev);if (err <0 ) - goto unregister; + goto put_device;return 0 ; -unregister: -device_unregister (&port->dev); +put_device: +put_device (&port->dev);return err; }
drivers/pinctrl/bcm/pinctrl-bcm281xx.c +22 -22
136 lines not on this page · raw message
drivers/pinctrl/devicetree.c +8 -2
@@ -143,10 +143,14 @@ static int dt_to_map_one_config(struct pinctrl *p, pctldev =get_pinctrl_dev_from_of_node (np_pctldev);if (pctldev)break ; -/* Do not defer probing of hogs (circular loop) */ +/* +* Do not defer probing of hogs (circular loop) +* +* Return 1 to let the caller catch the case. +*/ if (np_pctldev == p->dev->of_node) {of_node_put (np_pctldev); -return -ENODEV ; +return 1 ; } }of_node_put (np_pctldev);
@@ -265,6 +269,8 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev) ret =dt_to_map_one_config (p, pctldev, statename, np_config);of_node_put (np_config); +if (ret ==1 ) +continue ;if (ret <0 ) goto err; }
drivers/pinctrl/meson/pinctrl-meson.c +1 -1
@@ -483,7 +483,7 @@ static int meson_pinconf_get(struct pinctrl_dev *pcdev, unsigned int pin,case PIN_CONFIG_BIAS_PULL_DOWN :case PIN_CONFIG_BIAS_PULL_UP :if (meson_pinconf_get_pull (pc, pin) == param) - arg =1 ; + arg =60000 ;else return -EINVAL ;break ;
drivers/platform/x86/asus-wmi.c +2 -1
@@ -2739,7 +2739,8 @@ static int asus_wmi_add(struct platform_device *pdev) goto fail_leds;asus_wmi_get_devstate (asus,ASUS_WMI_DEVID_WLAN , &result); -if (result & (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) +if ((result & (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) == + (ASUS_WMI_DSTS_PRESENCE_BIT |ASUS_WMI_DSTS_USER_BIT )) asus->driver->wlan_ctrl_by_user =1 ;if (!(asus->driver->wlan_ctrl_by_user &&ashs_present ())) {
drivers/platform/x86/fujitsu-laptop.c +29 -4
@@ -17,13 +17,13 @@/* * fujitsu-laptop.c - Fujitsu laptop support, providing access to additional * features made available on a range of Fujitsu laptops including the -* P2xxx/P5xxx/S6xxx/S7xxx series. +* P2xxx/P5xxx/S2xxx/S6xxx/S7xxx series. * * This driver implements a vendor-specific backlight control interface for * Fujitsu laptops and provides support for hotkeys present on certain Fujitsu * laptops. * -* This driver has been tested on a Fujitsu Lifebook S6410, S7020 and +* This driver has been tested on a Fujitsu Lifebook S2110, S6410, S7020 and * P8010. It should work on most P-series and S-series Lifebooks, but * YMMV. *
@@ -102,7 +102,11 @@#define KEY2_CODE 0x411#define KEY3_CODE 0x412#define KEY4_CODE 0x413 -#define KEY5_CODE 0x420 +#define KEY5_CODE 0x414 +#define KEY6_CODE 0x415 +#define KEY7_CODE 0x416 +#define KEY8_CODE 0x417 +#define KEY9_CODE 0x420/* Hotkey ringbuffer limits */ #define MAX_HOTKEY_RINGBUFFER_SIZE 100
@@ -450,7 +454,7 @@ static const struct key_entry keymap_default[] = { { KE_KEY, KEY2_CODE, { KEY_PROG2 } }, { KE_KEY, KEY3_CODE, { KEY_PROG3 } }, { KE_KEY, KEY4_CODE, { KEY_PROG4 } }, - { KE_KEY, KEY5_CODE, { KEY_RFKILL } }, + { KE_KEY, KEY9_CODE, { KEY_RFKILL } },/* Soft keys read from status flags */ { KE_KEY, FLAG_RFKILL, { KEY_RFKILL } }, { KE_KEY, FLAG_TOUCHPAD_TOGGLE, { KEY_TOUCHPAD_TOGGLE } },
@@ -474,6 +478,18 @@ static const struct key_entry keymap_p8010[] = { { KE_END, 0 } }; +static const struct key_entry keymap_s2110[] = { + {KE_KEY ,KEY1_CODE , {KEY_PROG1 } },/* "A" */ + {KE_KEY ,KEY2_CODE , {KEY_PROG2 } },/* "B" */ + {KE_KEY ,KEY3_CODE , {KEY_WWW } },/* "Internet" */ + {KE_KEY ,KEY4_CODE , {KEY_EMAIL } },/* "E-mail" */ + {KE_KEY ,KEY5_CODE , {KEY_STOPCD } }, + {KE_KEY ,KEY6_CODE , {KEY_PLAYPAUSE } }, + {KE_KEY ,KEY7_CODE , {KEY_PREVIOUSSONG } }, + {KE_KEY ,KEY8_CODE , {KEY_NEXTSONG } }, + {KE_END ,0 } +}; +static const struct key_entry *keymap = keymap_default;static int fujitsu_laptop_dmi_keymap_override (const struct dmi_system_id *id)
@@ -511,6 +527,15 @@ static const struct dmi_system_id fujitsu_laptop_dmi_table[] = { }, .driver_data = (void *)keymap_p8010 }, + { + .callback = fujitsu_laptop_dmi_keymap_override, + .ident = "Fujitsu LifeBook S2110", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK S2110"), + }, + .driver_data = (void *)keymap_s2110 + }, {} };
drivers/platform/x86/thinkpad_acpi.c +7 -0
@@ -195,6 +195,7 @@ enum tpacpi_hkey_event_t {/* Thermal events */ TP_HKEY_EV_ALARM_BAT_HOT =0x6011 ,/* battery too hot */ TP_HKEY_EV_ALARM_BAT_XHOT =0x6012 ,/* battery critically hot */ +TP_HKEY_EV_ALARM_BAT_LIM_CHANGE =0x6013 ,/* battery charge limit changed*/ TP_HKEY_EV_ALARM_SENSOR_HOT =0x6021 ,/* sensor too hot */ TP_HKEY_EV_ALARM_SENSOR_XHOT =0x6022 ,/* sensor critically hot */ TP_HKEY_EV_THM_TABLE_CHANGED = 0x6030, /* windows; thermal table changed */
@@ -4049,6 +4050,10 @@ static bool hotkey_notify_6xxx(const u32 hkey,pr_alert ("THERMAL EMERGENCY: battery is extremely hot!\n" );/* recommended action: immediate sleep/hibernate */ break ; +case TP_HKEY_EV_ALARM_BAT_LIM_CHANGE : +pr_debug ("Battery Info: battery charge threshold changed\n" ); +/* User changed charging threshold. No action needed */ +return true;case TP_HKEY_EV_ALARM_SENSOR_HOT :pr_crit ("THERMAL ALARM: a sensor reports something is too hot!\n" );/* recommended action: warn user through gui, that */
@@ -10233,6 +10238,8 @@ static int __must_check __init get_thinkpad_model_data( tp->vendor =PCI_VENDOR_ID_IBM ; else if (dmi_name_in_vendors("LENOVO")) tp->vendor =PCI_VENDOR_ID_LENOVO ; + else if (dmi_name_in_vendors("NEC")) + tp->vendor =PCI_VENDOR_ID_LENOVO ; else return 0;
drivers/regulator/ad5398.c +9 -3
@@ -14,6 +14,7 @@#include <linux/platform_device.h> #include <linux/regulator/driver.h> #include <linux/regulator/machine.h> +#include <linux/regulator/of_regulator.h> #define AD5398_CURRENT_EN_MASK 0x8000
@@ -221,15 +222,20 @@ static int ad5398_probe(struct i2c_client *client,const struct ad5398_current_data_format *df = (struct ad5398_current_data_format *)id->driver_data; -if (!init_data) -return -EINVAL ; - chip =devm_kzalloc (&client->dev,sizeof (*chip),GFP_KERNEL );
Lines of this file are not shown. View the raw message.
drivers/spi/spi-fsl-dspi.c +45 -1
46 lines not on this page · raw message
drivers/usb/class/usbtmc.c +36 -23
59 lines not on this page · raw message
drivers/usb/typec/altmodes/displayport.c +9 -9
Lines of this file are not shown. View the raw message.
drivers/video/fbdev/core/tileblit.c +39 -6
45 lines not on this page · raw message
drivers/xen/xenbus/xenbus_dev_frontend.c +1 -1
Lines of this file are not shown. View the raw message.
fs/coredump.c +75 -6
81 lines not on this page · raw message
fs/nfs/flexfilelayout/flexfilelayoutdev.c +3 -3
Lines of this file are not shown. View the raw message.
fs/ocfs2/journal.c +58 -22
80 lines not on this page · raw message
kernel/fork.c +87 -11
98 lines not on this page · raw message
net/can/bcm.c +54 -25
79 lines not on this page · raw message
net/can/gw.c +100 -65
165 lines not on this page · raw message
net/ipv4/tcp_input.c +32 -24
56 lines not on this page · raw message
net/ipv4/udp_offload.c +60 -1
61 lines not on this page · raw message
net/netfilter/nf_conntrack_standalone.c +9 -3
Lines of this file are not shown. View the raw message.
net/netfilter/nf_tables_api.c +39 -15
54 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +42 -0
42 lines not on this page · raw message
sound/soc/codecs/tas2764.c +21 -30
51 lines not on this page · raw message
sound/soc/qcom/qdsp6/q6afe-clocks.c +106 -103
209 lines not on this page · raw message
tools/testing/selftests/vm/compaction_test.c +14 -5
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.