Linux 6.1.50
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.50 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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
------------
MAINTAINERS | 2 Makefile | 2 arch/mips/include/asm/cpu-features.h | 21 arch/riscv/Kconfig | 28 arch/riscv/kernel/compat_vdso/Makefile | 8 arch/x86/kernel/fpu/context.h | 3 arch/x86/kernel/fpu/core.c | 2 arch/x86/kernel/fpu/xstate.c | 7 arch/x86/kvm/mmu/mmu.c | 3 arch/x86/kvm/mmu/tdp_mmu.c | 121 drivers/block/ublk_drv.c | 3 drivers/clk/clk-devres.c | 13 drivers/dma-buf/sw_sync.c | 18 drivers/gpio/gpio-sim.c | 15 drivers/gpu/drm/arm/hdlcd_drv.c | 2 drivers/gpu/drm/armada/armada_drv.c | 2 drivers/gpu/drm/ast/ast_drv.c | 16 drivers/gpu/drm/drm_aperture.c | 11 drivers/gpu/drm/gma500/psb_drv.c | 9 drivers/gpu/drm/hyperv/hyperv_drm_drv.c | 1 drivers/gpu/drm/i915/gt/gen8_engine_cs.c | 95 drivers/gpu/drm/i915/gt/gen8_engine_cs.h | 3 drivers/gpu/drm/i915/gt/intel_gpu_commands.h | 1 drivers/gpu/drm/i915/gt/intel_lrc.c | 17 drivers/gpu/drm/i915/i915_driver.c | 33 drivers/gpu/drm/meson/meson_drv.c | 2 drivers/gpu/drm/msm/msm_fbdev.c | 2 drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 drivers/gpu/drm/stm/drv.c | 2 drivers/gpu/drm/sun4i/sun4i_drv.c | 2 drivers/gpu/drm/tegra/drm.c | 2 drivers/gpu/drm/vc4/vc4_drv.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 12 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 29 drivers/hwmon/aquacomputer_d5next.c | 36 drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c | 2 drivers/net/bonding/bond_alb.c | 6 drivers/net/can/vxcan.c | 7 drivers/net/dsa/mt7530.c | 4 drivers/net/dsa/mt7530.h | 2 drivers/net/dsa/ocelot/felix_vsc9959.c | 3 drivers/net/ethernet/broadcom/bgmac.c | 2 drivers/net/ethernet/broadcom/genet/bcmmii.c | 2 drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c | 2 drivers/net/ethernet/ibm/ibmveth.c | 2 drivers/net/ethernet/intel/i40e/i40e_main.c | 5 drivers/net/ethernet/intel/ice/ice_base.c | 3 drivers/net/ethernet/intel/ice/ice_sriov.c | 8 drivers/net/ethernet/intel/ice/ice_vf_lib.c | 34 drivers/net/ethernet/intel/ice/ice_vf_lib.h | 1 drivers/net/ethernet/intel/ice/ice_virtchnl.c | 1 drivers/net/ethernet/intel/igb/igb_ptp.c | 24 drivers/net/ethernet/intel/igc/igc_defines.h | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 3 drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c | 4 drivers/net/ethernet/mellanox/mlxsw/pci.c | 8 drivers/net/ethernet/mellanox/mlxsw/reg.h | 9 drivers/net/ethernet/mellanox/mlxsw/spectrum2_mr_tcam.c | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_keys.c | 4 drivers/net/ipvlan/ipvlan_main.c | 3 drivers/net/veth.c | 5 drivers/of/dynamic.c | 31 drivers/of/kexec.c | 3 drivers/of/unittest.c | 4 drivers/pci/hotplug/acpiphp_glue.c | 9 drivers/pinctrl/pinctrl-amd.c | 30 drivers/pinctrl/renesas/pinctrl-rza2.c | 17 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 15 drivers/pinctrl/renesas/pinctrl-rzv2m.c | 13 drivers/platform/x86/ideapad-laptop.c | 5 drivers/s390/crypto/zcrypt_msgtype6.c | 47 drivers/scsi/raid_class.c | 48 drivers/scsi/snic/snic_disc.c | 3 drivers/thunderbolt/tmu.c | 3 drivers/video/aperture.c | 31 drivers/video/fbdev/aty/radeon_base.c | 10 fs/attr.c | 1 fs/internal.h | 2 fs/jbd2/checkpoint.c | 153 fs/jbd2/commit.c | 3 fs/jbd2/transaction.c | 17 fs/nfs/direct.c | 26 fs/nfs/inode.c | 4 fs/nfs/nfs42proc.c | 5 fs/nfs/nfs4proc.c | 14 fs/nfsd/nfs4state.c | 2 fs/nfsd/vfs.c | 4 include/drm/display/drm_dp.h | 2 include/drm/drm_aperture.h | 7 include/linux/clk.h | 80 include/linux/cpuset.h | 12 include/linux/fs.h | 2 include/linux/jbd2.h | 7 include/linux/mm.h | 29 include/linux/raid_class.h | 4 include/linux/sched.h | 4 include/net/bonding.h | 11 include/net/inet_sock.h | 2 include/net/ip.h | 15 include/net/mac80211.h | 1 include/net/rtnetlink.h | 4 include/net/sock.h | 7 include/trace/events/jbd2.h | 12 io_uring/msg_ring.c | 140 io_uring/msg_ring.h | 1 io_uring/opdef.c | 1 kernel/cgroup/cgroup.c | 4 kernel/cgroup/cpuset.c | 246 kernel/sched/core.c | 41 kernel/sched/deadline.c | 67 kernel/sched/sched.h | 2 kernel/trace/trace.c | 15 kernel/trace/trace_irqsoff.c | 3 kernel/trace/trace_sched_wakeup.c | 2 lib/clz_ctz.c | 32 lib/maple_tree.c | 3 lib/radix-tree.c | 1 mm/madvise.c | 4 mm/memory-failure.c | 11 mm/shmem.c | 6 mm/vmalloc.c | 4 net/Makefile | 1 net/batman-adv/bat_v_elp.c | 3 net/batman-adv/bat_v_ogm.c | 7 net/batman-adv/hard-interface.c | 14 net/batman-adv/netlink.c | 3 net/batman-adv/soft-interface.c | 3 net/batman-adv/translation-table.c | 1 net/batman-adv/types.h | 6 net/can/isotp.c | 22 net/can/raw.c | 77 net/core/Makefile | 1 net/core/devlink.c |12547 --------- net/core/rtnetlink.c | 25 net/dccp/ipv4.c | 4 net/dccp/proto.c | 20 net/devlink/Makefile | 3 net/devlink/leftover.c |12550 ++++++++++ net/ipv4/af_inet.c | 2 net/ipv4/datagram.c | 2 net/ipv4/tcp_ipv4.c | 4 net/mac80211/rx.c | 12 net/netfilter/nf_tables_api.c | 2 net/netfilter/nft_set_pipapo.c | 13 net/sched/sch_api.c | 53 net/sctp/socket.c | 4 net/sunrpc/xprtrdma/verbs.c | 9 security/selinux/ss/policydb.c | 2 sound/pci/ymfpci/ymfpci.c | 10 sound/soc/amd/Kconfig | 1 sound/soc/amd/yc/acp6x-mach.c | 9 sound/soc/codecs/cs35l41.c | 2 tools/testing/selftests/drivers/net/bonding/bond-break-lacpdu-tx.sh | 4 tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh | 16 tools/testing/selftests/net/Makefile | 50 tools/testing/selftests/net/bpf/Makefile | 14 tools/testing/selftests/net/bpf/nat6to4.c | 285 tools/testing/selftests/net/nat6to4.c | 285 tools/testing/selftests/net/udpgro_frglist.sh | 8 159 files changed, 14188 insertions(+), 13843 deletions(-)
Aleksa Savic (1):
hwmon: (aquacomputer_d5next) Add selective 200ms delay after sending ctrl report
Alessio Igor Bogani (1):
igb: Avoid starting unnecessary workqueues
Alexandre Ghiti (1):
mm: add a call to flush_cache_vmap() in vmap_pfn()
Amit Cohen (1):
mlxsw: Fix the size of 'VIRT_ROUTER_MSB'
Andi Shyti (2):
drm/i915: Add the gen12_needs_ccs_aux_inv helper drm/i915/gt: Support aux invalidation on all engines
Andrey Skvortsov (1):
clk: Fix slab-out-of-bounds error in devm_clk_release()
Andrii Staikov (1):
i40e: fix potential NULL pointer dereferencing of pf->vf i40e_sync_vsi_filters()
André Apitzsch (1):
platform/x86: ideapad-laptop: Add support for new hotkeys found on ThinkBook 14s Yoga ITL
Ankit Nautiyal (1):
drm/display/dp: Fix the DP DSC Receiver cap size
Anshuman Gupta (1):
drm/i915/dgfx: Enable d3cold at s2idle
Arnd Bergmann (2):
radix tree: remove unused variable
ASoC: amd: vangogh: select CONFIG_SND_AMD_ACP_CONFIG
Arınç ÜNAL (1):
net: dsa: mt7530: fix handling of 802.1X PAE frames
Bartosz Golaszewski (2):
gpio: sim: dispose of irq mappings before destroying the irq_sim domain
gpio: sim: pass the GPIO device's software node to irq domain
Benjamin Coddington (2):
NFSv4: Fix dropped lock for racing OPEN and delegation return
nfsd: Fix race to FREE_STATEID and cl_revoked
Biju Das (4):
clk: Fix undefined reference to `clk_rate_exclusive_{get,put}'
pinctrl: renesas: rzg2l: Fix NULL pointer dereference in rzg2l_dt_subnode_to_map()
pinctrl: renesas: rzv2m: Fix NULL pointer dereference in rzv2m_dt_subnode_to_map()
pinctrl: renesas: rza2: Add lock around pinctrl_generic{{add,remove}_group,{add,remove}_function}
BrenoRCBrito (1):
ASoC: amd: yc: Add VivoBook Pro 15 to quirks list for acp6x
Charles Keepax (1):
ASoC: cs35l41: Correct amp_gain_tlv values
Christian Brauner (2):
nfs: use vfs setgid helper
nfsd: use vfs setgid helper
Christian Göttsche (1):
selinux: set next pointer before attaching to list
Chuck Lever (1):
xprtrdma: Remap Receive buffers after a reconnect
Daniel Vetter (6):
drm/ast: Use drm_aperture_remove_conflicting_pci_framebuffers fbdev/radeon: use pci aperture helpers
drm/gma500: Use drm_aperture_remove_conflicting_pci_framebuffers drm/aperture: Remove primary argument
video/aperture: Only kick vgacon when the pdev is decoding vga video/aperture: Move vga handling to pci function
Danielle Ratson (1):
mlxsw: pci: Set time stamp fields also when its type is MIRROR_UTC
David Hildenbrand (1):
mm/gup: handle cont-PTE hugetlb pages correctly in gup_must_unshare() via GUP-fast
Dietmar Eggemann (2):
sched/deadline: Create DL BW alloc, free & check overflow interface cgroup/cpuset: Free DL BW in case can_attach() fails
Eric Dumazet (4):
can: raw: fix lockdep issue in raw_release()
sock: annotate data-races around prot->memory_pressure
dccp: annotate data-races in dccp_poll()
ipv4: fix data-races around inet->inet_id
Fedor Pchelkin (2):
NFSv4.2: fix error handling in nfs42_proc_getxattr
NFSv4: fix out path in __nfs4_get_acl_uncached
Feng Tang (1):
x86/fpu: Set X86_FEATURE_OSXSAVE feature after enabling OSXSAVE in CR4
Florian Westphal (1):
netfilter: nf_tables: fix out of memory error handling
Greg Kroah-Hartman (1):
Linux 6.1.50
Hangbin Liu (3):
selftests: bonding: do not set port down before adding to bond
bonding: fix macvlan over alb bond support selftests/net: mv bpf/nat6to4.c to net folder
Harald Freudenberger (1):
s390/zcrypt: fix reply buffer calculations for CCA replies
Hariprasad Kelam (1):
octeontx2-af: SDP: fix receive link config
Helge Deller (1):
lib/clz_ctz.c: Fix __clzdi2() and __ctzdi2() for 32-bit kernels
Hugh Dickins (1):
shmem: fix smaps BUG sleeping while atomic
Ido Schimmel (3):
mlxsw: reg: Fix SSPR register layout
selftests: mlxsw: Fix test failure on Spectrum-4
rtnetlink: Reject negative ifindexes in RTM_NEWLINK
Igor Mammedov (2):
PCI: acpiphp: Reassign resources on bridge if necessary
PCI: acpiphp: Use pci_assign_unassigned_bridge_resources() only for non-root bus
Jakub Kicinski (2):
devlink: move code to a dedicated directory
net: validate veth and vxcan peer ifindexes
Jamal Hadi Salim (1):
net/sched: fix a qdisc modification with ambiguous command request
Jens Axboe (2):
io_uring/msg_ring: move double lock/unlock helpers higher up io_uring/msg_ring: fix missing lock on overflow for IOPOLL
Jesse Brandeburg (1):
ice: fix receive buffer size miscalculation
Jiaxun Yang (2):
MIPS: cpu-features: Enable octeon_cache by cpu_type
MIPS: cpu-features: Use boot_cpu_type for CPU type based features
Jiri Pirko (1):
devlink: add missing unregister linecard notification
Jonathan Cavitt (2):
drm/i915/gt: Ensure memory quiesced before invalidation drm/i915/gt: Poll aux invalidation register bit on invalidation
Juri Lelli (4):
cgroup/cpuset: Rename functions dealing with DEADLINE accounting sched/cpuset: Bring back cpuset_mutex
sched/cpuset: Keep track of SCHED_DEADLINE task in cpusets cgroup/cpuset: Iterate only if DEADLINE tasks are present
Liam R. Howlett (1):
maple_tree: disable mas_wr_append() when other readers are possible
Lu Wei (1):
ipvlan: Fix a reference count leak warning in ipvlan_ns_exit()
Mario Limonciello (2):
pinctrl: amd: Mask wake bits on probe again
ASoC: amd: yc: Fix a non-functional mic on Lenovo 82SJ
Miaohe Lin (1):
mm: memory-failure: fix unexpected return value in soft_offline_page()
Michael Ellerman (1):
ibmveth: Use dcbf rather than dcbfl
Ming Lei (1):
ublk: remove check IO_URING_F_SQE128 in ublk_ch_uring_cmd
Mingzheng Xing (2):
riscv: Handle zicsr/zifencei issue between gcc and binutils
riscv: Fix build errors using binutils2.37 toolchains
Oliver Hartkopp (2):
can: isotp: fix support for transmission of SF without flow control
can: raw: add missing refcount for memory leak fix
Pablo Neira Ayuso (1):
netfilter: nf_tables: flush pending destroy work before netlink notifier
Pavel Begunkov (2):
io_uring: get rid of double locking
io_uring: extract a io_msg_install_complete helper
Petr Oros (2):
Revert "ice: Fix ice VF reset during iavf initialization"
ice: Fix NULL pointer deref during VF reset
Ping-Ke Shih (1):
wifi: mac80211: limit reorder_buf_filtered to avoid UBSAN warning
Remi Pommarel (3):
batman-adv: Do not get eth header before batadv_check_management_packet
batman-adv: Fix TT global entry leak when client roamed back
batman-adv: Fix batadv_v_ogm_aggr_send memory leak
Rick Edgecombe (1):
x86/fpu: Invalidate FPU state correctly on exec()
Rik van Riel (1):
mm,ima,kexec,of: use memblock_free_late from ima_free_kexec_buffer
Rob Clark (1):
dma-buf/sw_sync: Avoid recursive lock during fence signal
Rob Herring (2):
of: unittest: Fix EXPECT for parse_phandle_with_args_map() test
of: dynamic: Refactor action prints to not use "%pOF" inside devtree_lock
Ruan Jinjie (2):
net: bgmac: Fix return value check for fixed_phy_register()
net: bcmgenet: Fix return value check for fixed_phy_register()
Sanjay R Mehta (1):
thunderbolt: Fix Thunderbolt 3 display flickering issue on 2nd hot plug onwards
Sasha Neftin (1):
igc: Fix the typo in the PTM Control macro
Sean Christopherson (2):
KVM: x86: Preserve TDP MMU roots until they are explicitly invalidated
KVM: x86/mmu: Fix an sign-extension bug with mmu_seq that hangs vCPUs
Sven Eckelmann (3):
batman-adv: Trigger events for auto adjusted MTU
batman-adv: Don't increase MTU when set by user
batman-adv: Hold rtnl lock during MTU update via netlink
Takashi Iwai (1):
ALSA: ymfpci: Fix the missing snd_card_free() call at probe error
Trond Myklebust (1):
NFS: Fix a use after free in nfs_direct_join_group()
Vladimir Oltean (1):
net: dsa: felix: fix oversize frame dropping for always closed tc-taprio gates
Wei Chen (1):
media: vcodec: Fix potential array out-of-bounds in encoder queue_setup
Yin Fengwei (1):
madvise:madvise_free_pte_range(): don't use mapcount() against large folio for sharing check
Yu Zhe (1):
s390/zcrypt: remove unnecessary (void *) conversions
Zack Rusin (1):
drm/vmwgfx: Fix shader stage validation
Zhang Yi (3):
jbd2: remove t_checkpoint_io_list
jbd2: remove journal_clean_one_cp_list()
jbd2: fix a race when checking checkpoint buffer busy
Zheng Yejian (2):
tracing: Fix cpu buffers unavailable due to 'record_disabled' missed
tracing: Fix memleak due to race between current_tracer and trace
Zhu Wang (2):
scsi: snic: Fix double free in snic_tgt_create()
scsi: core: raid_class: Remove raid_component_add()
Ziyang Xuan (1):
can: raw: fix receiver memory leak
Greg Kroah-Hartman
maintainerMAINTAINERS +1 -1
@@ -6027,7 +6027,7 @@ S: Supported F: Documentation/networking/devlink F: include/net/devlink.h F: include/uapi/linux/devlink.h -F: net/core/devlink.c +F: net/devlink/ DH ELECTRONICS IMX6 DHCOM BOARD SUPPORT M: Christoph Niedermaier <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 49 +SUBLEVEL = 50 EXTRAVERSION = NAME = Curry Ramen
arch/mips/include/asm/cpu-features.h +19 -2
@@ -121,7 +121,24 @@#define cpu_has_4k_cache __isa_ge_or_opt(1, MIPS_CPU_4K_CACHE)#endif #ifndef cpu_has_octeon_cache -#define cpu_has_octeon_cache 0 +#define cpu_has_octeon_cache \ +({ \ + int __res; \ + \ + switch (boot_cpu_type()) { \ + case CPU_CAVIUM_OCTEON: \ + case CPU_CAVIUM_OCTEON_PLUS: \ + case CPU_CAVIUM_OCTEON2: \ + case CPU_CAVIUM_OCTEON3: \ + __res = 1; \ + break; \ + \ + default: \ + __res = 0; \ + } \ + \ + __res; \ +})#endif /* Don't override `cpu_has_fpu' to 1 or the "nofpu" option won't work. */ #ifndef cpu_has_fpu
@@ -351,7 +368,7 @@ ({ \ int __res; \ \ - switch (current_cpu_type()) { \ + switch (boot_cpu_type()) { \ case CPU_M14KC: \ case CPU_74K: \ case CPU_1074K: \
arch/riscv/Kconfig +17 -11
@@ -447,24 +447,30 @@ config TOOLCHAIN_HAS_ZIHINTPAUSE config TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI def_bool y # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc - depends on AS_IS_GNU && AS_VERSION >= 23800 + # https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=98416dbb0a62579d4a7a4a76bab51b5b52fec2cd + depends on AS_IS_GNU && AS_VERSION >= 23600 help - Newer binutils versions default to ISA spec version 20191213 which - moves some instructions from the I extension to the Zicsr and Zifencei - extensions. + Binutils-2.38 and GCC-12.1.0 bumped the default ISA spec to the newer + 20191213 version, which moves some instructions from the I extension to + the Zicsr and Zifencei extensions. This requires explicitly specifying + Zicsr and Zifencei when binutils >= 2.38 or GCC >= 12.1.0. Zicsr + and Zifencei are supported in binutils from version 2.36 onwards. + To make life easier, and avoid forcing toolchains that default to a + newer ISA spec to version 2.2, relax the check to binutils >= 2.36. + For clang < 17 or GCC < 11.3.0, for which this is not possible or need + special treatment, this is dealt with in TOOLCHAIN_NEEDS_OLD_ISA_SPEC. config TOOLCHAIN_NEEDS_OLD_ISA_SPEC def_bool y depends on TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI # https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16 - depends on CC_IS_CLANG && CLANG_VERSION < 170000 + # https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=d29f5d6ab513c52fd872f532c492e35ae9fd6671 + depends on (CC_IS_CLANG && CLANG_VERSION < 170000) || (CC_IS_GCC && GCC_VERSION < 110300) help - Certain versions of clang do not support zicsr and zifencei via -march - but newer versions of binutils require it for the reasons noted in the - help text of CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI. This - option causes an older ISA spec compatible with these older versions - of clang to be passed to GAS, which has the same result as passing zicsr - and zifencei to -march. + Certain versions of clang and GCC do not support zicsr and zifencei via + -march. This option causes an older ISA spec compatible with these older + versions of clang and GCC to be passed to GAS, which has the same result + as passing zicsr and zifencei to -march. config FPU bool "FPU support"
arch/riscv/kernel/compat_vdso/Makefile +7 -1
@@ -11,7 +11,13 @@ compat_vdso-syms += flush_icache COMPAT_CC := $(CC) COMPAT_LD := $(LD) -COMPAT_CC_FLAGS := -march=rv32g -mabi=ilp32 +# binutils 2.35 does not support the zifencei extension, but in the ISA +# spec 20191213, G stands for IMAFD_ZICSR_ZIFENCEI. +ifdef CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI + COMPAT_CC_FLAGS := -march=rv32g -mabi=ilp32 +else + COMPAT_CC_FLAGS := -march=rv32imafd -mabi=ilp32 +endif COMPAT_LD_FLAGS := -melf32lriscv # Disable attributes, as they're useless and break the build.
arch/x86/kernel/fpu/context.h +1 -2
@@ -19,8 +19,7 @@* FPU state for a task MUST let the rest of the kernel know that the * FPU registers are no longer valid for this task. * -* Either one of these invalidation functions is enough. Invalidate -* a resource you control: CPU if using the CPU for something else +* Invalidate a resource you control: CPU if using the CPU for something else * (with preemption disabled), FPU for the current task, or a task that * is prevented from running by the current task. */
arch/x86/kernel/fpu/core.c +1 -1
@@ -679,7 +679,7 @@ static void fpu_reset_fpregs(void)struct fpu *fpu = ¤t->thread.fpu;fpregs_lock (); -fpu__drop (fpu); +__fpu_invalidate_fpregs_state (fpu);/* * This does not change the actual hardware registers. It just * resets the memory image and sets TIF_NEED_FPU_LOAD so a
arch/x86/kernel/fpu/xstate.c +7 -0
@@ -882,6 +882,13 @@ void __init fpu__init_system_xstate(unsigned int legacy_size) goto out_disable; } +/* +* CPU capabilities initialization runs before FPU init. So +* X86_FEATURE_OSXSAVE is not set. Now that XSAVE is completely +* functional, set the feature bit so depending code works. +*/ +setup_force_cpu_cap (X86_FEATURE_OSXSAVE ); +print_xstate_offset_size (); pr_info("x86/fpu: Enabled xstate features 0x%llx, context size is %d bytes, using '%s' format.\n", fpu_kernel_cfg.max_features,
arch/x86/kvm/mmu/mmu.c +2 -1
@@ -4212,7 +4212,8 @@ static int kvm_faultin_pfn(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault)* root was invalidated by a memslot update or a relevant mmu_notifier fired. */ static bool is_page_fault_stale (struct kvm_vcpu *vcpu, -struct kvm_page_fault *fault,int mmu_seq) +struct kvm_page_fault *fault, +unsigned long mmu_seq) {struct kvm_mmu_page *sp =to_shadow_page (vcpu->arch.mmu->root.hpa);
arch/x86/kvm/mmu/tdp_mmu.c +56 -65
163 lines not on this page · raw message
drivers/block/ublk_drv.c +0 -3
@@ -1223,9 +1223,6 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd, __func__, cmd->cmd_op, ub_cmd->q_id, tag, ub_cmd->result); -if (!(issue_flags &IO_URING_F_SQE128 )) - goto out; -if (ub_cmd->q_id >= ub->dev_info.nr_hw_queues) goto out;
drivers/clk/clk-devres.c +7 -6
@@ -205,18 +205,19 @@ EXPORT_SYMBOL(devm_clk_put);struct clk *devm_get_clk_from_child (struct device *dev,struct device_node *np,const char *con_id) { -struct clk **ptr, *clk; +struct devm_clk_state *state; +struct clk *clk; - ptr =devres_alloc (devm_clk_release,sizeof (*ptr),GFP_KERNEL ); -if (!ptr) + state =devres_alloc (devm_clk_release,sizeof (*state),GFP_KERNEL ); +if (!state)return ERR_PTR (-ENOMEM ); clk =of_clk_get_by_name (np, con_id);if (!IS_ERR (clk)) { - *ptr = clk; -devres_add (dev, ptr); + state->clk = clk; +devres_add (dev, state); }else { -devres_free (ptr); +devres_free (state); }return clk;
drivers/dma-buf/sw_sync.c +9 -9
@@ -191,6 +191,7 @@ static const struct dma_fence_ops timeline_fence_ops = {*/ static void sync_timeline_signal (struct sync_timeline *obj,unsigned int inc) { +LIST_HEAD (signalled);struct sync_pt *pt, *next;trace_sync_timeline (obj);
@@ -203,21 +204,20 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)if (!timeline_fence_signaled (&pt->base))break ; -list_del_init (&pt->link); +dma_fence_get (&pt->base); + +list_move_tail (&pt->link, &signalled);rb_erase (&pt->node, &obj->pt_tree); -/* -* A signal callback may release the last reference to this -* fence, causing it to be freed. That operation has to be -* last to avoid a use after free inside this loop, and must -* be after we remove the fence from the timeline in order to -* prevent deadlocking on timeline->lock inside -* timeline_fence_release(). -*/ dma_fence_signal_locked (&pt->base); }spin_unlock_irq (&obj->lock); + +list_for_each_entry_safe (pt, next, &signalled, link) { +list_del_init (&pt->link); +dma_fence_put (&pt->base); + } }/**
drivers/gpio/gpio-sim.c +14 -1
@@ -290,6 +290,15 @@ static void gpio_sim_mutex_destroy(void *data)mutex_destroy (lock); } +static void gpio_sim_dispose_mappings (void *data) +{ +struct gpio_sim_chip *chip = data; +unsigned int i; + +for (i =0 ; i < chip->gc.ngpio; i++) +irq_dispose_mapping (irq_find_mapping (chip->irq_sim, i)); +} +static void gpio_sim_sysfs_remove (void *data) {struct gpio_sim_chip *chip = data;
@@ -398,10 +407,14 @@ static int gpio_sim_add_bank(struct fwnode_handle *swnode, struct device *dev)if (!chip->pull_map)return -ENOMEM ; - chip->irq_sim =devm_irq_domain_create_sim (dev,NULL , num_lines); + chip->irq_sim =devm_irq_domain_create_sim (dev, swnode, num_lines);if (IS_ERR (chip->irq_sim))return PTR_ERR (chip->irq_sim); + ret =devm_add_action_or_reset (dev, gpio_sim_dispose_mappings, chip); +if (ret) +return ret; +mutex_init (&chip->lock); ret =devm_add_action_or_reset (dev, gpio_sim_mutex_destroy, &chip->lock);
drivers/gpu/drm/arm/hdlcd_drv.c +1 -1
@@ -290,7 +290,7 @@ static int hdlcd_drm_bind(struct device *dev)*/ if (hdlcd_read (hdlcd,HDLCD_REG_COMMAND )) {hdlcd_write (hdlcd,HDLCD_REG_COMMAND ,0 ); -drm_aperture_remove_framebuffers (false, &hdlcd_driver); +drm_aperture_remove_framebuffers (&hdlcd_driver); }drm_mode_config_reset (drm);
drivers/gpu/drm/armada/armada_drv.c +1 -1
@@ -95,7 +95,7 @@ static int armada_drm_bind(struct device *dev) }/* Remove early framebuffers */ - ret =drm_aperture_remove_framebuffers (false, &armada_drm_driver); + ret =drm_aperture_remove_framebuffers (&armada_drm_driver);if (ret) {dev_err (dev,"[" DRM_NAME ":%s] can't kick out simple-fb: %d\n" , __func__, ret);
drivers/gpu/drm/ast/ast_drv.c +1 -15
@@ -89,27 +89,13 @@ static const struct pci_device_id ast_pciidlist[] = {MODULE_DEVICE_TABLE (pci, ast_pciidlist); -static int ast_remove_conflicting_framebuffers (struct pci_dev *pdev) -{ -bool primary = false; -resource_size_t base, size; - - base =pci_resource_start (pdev,0 ); - size =pci_resource_len (pdev,0 ); -#ifdef CONFIG_X86 - primary = pdev->resource[PCI_ROM_RESOURCE ].flags &IORESOURCE_ROM_SHADOW ; -#endif - -return drm_aperture_remove_conflicting_framebuffers (base, size, primary, &ast_driver); -} -static int ast_pci_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {struct ast_private *ast;struct drm_device *dev;int ret; - ret =ast_remove_conflicting_framebuffers (pdev); + ret =drm_aperture_remove_conflicting_pci_framebuffers (pdev, &ast_driver);if (ret)return ret;
drivers/gpu/drm/drm_aperture.c +3 -8
@@ -32,17 +32,13 @@* * static int remove_conflicting_framebuffers(struct pci_dev *pdev) * { -* bool primary = false; * resource_size_t base, size; * int ret; * * base = pci_resource_start(pdev, 0); * size = pci_resource_len(pdev, 0); -* #ifdef CONFIG_X86 -* primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW; -* #endif * -* return drm_aperture_remove_conflicting_framebuffers(base, size, primary, +* return drm_aperture_remove_conflicting_framebuffers(base, size, * &example_driver); * } *
@@ -161,7 +157,6 @@ EXPORT_SYMBOL(devm_aperture_acquire_from_firmware);* drm_aperture_remove_conflicting_framebuffers - remove existing framebuffers in the given range * @base: the aperture's base address in physical memory * @size: aperture size in bytes -* @primary: also kick vga16fb if present * @req_driver: requesting DRM driver * * This function removes graphics device drivers which use the memory range described by
@@ -171,9 +166,9 @@ EXPORT_SYMBOL(devm_aperture_acquire_from_firmware);* 0 on success, or a negative errno code otherwise */ int drm_aperture_remove_conflicting_framebuffers (resource_size_t base,resource_size_t size, -bool primary,const struct drm_driver *req_driver) +const struct drm_driver *req_driver) { -return aperture_remove_conflicting_devices (base, size, primary, req_driver->name); +return aperture_remove_conflicting_devices (base, size, false, req_driver->name); }EXPORT_SYMBOL (drm_aperture_remove_conflicting_framebuffers);
drivers/gpu/drm/gma500/psb_drv.c +7 -2
@@ -424,12 +424,17 @@ static int psb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)/* * We cannot yet easily find the framebuffer's location in memory. So -* remove all framebuffers here. +* remove all framebuffers here. Note that we still want the pci special +* handling to kick out vgacon. * * TODO: Refactor psb_driver_load() to map vdc_reg earlier. Then we * might be able to read the framebuffer range from the device. */ - ret =drm_aperture_remove_framebuffers (true, &driver); + ret =drm_aperture_remove_framebuffers (&driver); +if (ret) +return ret; + + ret =drm_aperture_remove_conflicting_pci_framebuffers (pdev, &driver);if (ret)return ret;
drivers/gpu/drm/hyperv/hyperv_drm_drv.c +0 -1
@@ -74,7 +74,6 @@ static int hyperv_setup_vram(struct hyperv_drm_device *hv,drm_aperture_remove_conflicting_framebuffers (screen_info.lfb_base, screen_info.lfb_size, - false, &hyperv_driver); hv->fb_size = (unsigned long )hv->mmio_megabytes *1024 *1024 ;
drivers/gpu/drm/i915/gt/gen8_engine_cs.c +63 -32
140 lines not on this page · raw message
drivers/gpu/drm/i915/gt/gen8_engine_cs.h +2 -1
@@ -13,6 +13,7 @@#include "intel_gt_regs.h" #include "intel_gpu_commands.h" +struct intel_engine_cs ;struct intel_gt ;struct i915_request ;
@@ -46,7 +47,7 @@ u32 *gen8_emit_fini_breadcrumb_rcs(struct i915_request *rq, u32 *cs);u32 *gen11_emit_fini_breadcrumb_rcs (struct i915_request *rq,u32 *cs);u32 *gen12_emit_fini_breadcrumb_rcs (struct i915_request *rq,u32 *cs); -u32 *gen12_emit_aux_table_inv (struct intel_gt *gt,u32 *cs,const i915_reg_t inv_reg); +u32 *gen12_emit_aux_table_inv (struct intel_engine_cs *engine,u32 *cs);static inline u32 *__gen8_emit_pipe_control (u32 *batch,u32 flags0,u32 flags1,u32 offset)
drivers/gpu/drm/i915/gt/intel_gpu_commands.h +1 -0
@@ -120,6 +120,7 @@#define MI_SEMAPHORE_TARGET (engine) ((engine)<<15)#define MI_SEMAPHORE_WAIT MI_INSTR(0x1c, 2)/* GEN8+ */ #define MI_SEMAPHORE_WAIT_TOKEN MI_INSTR(0x1c, 3)/* GEN12+ */ +#define MI_SEMAPHORE_REGISTER_POLL (1 << 16)#define MI_SEMAPHORE_POLL (1 << 15)#define MI_SEMAPHORE_SAD_GT_SDD (0 << 12)#define MI_SEMAPHORE_SAD_GTE_SDD (1 << 12)
drivers/gpu/drm/i915/gt/intel_lrc.c +2 -15
@@ -1296,10 +1296,7 @@ gen12_emit_indirect_ctx_rcs(const struct intel_context *ce, u32 *cs) IS_DG2_G11(ce->engine->i915)) cs =gen8_emit_pipe_control (cs,PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE ,0 ); -/* hsdes: 1809175790 */ -if (!HAS_FLAT_CCS (ce->engine->i915)) - cs =gen12_emit_aux_table_inv (ce->engine->gt, - cs,GEN12_CCS_AUX_INV ); + cs =gen12_emit_aux_table_inv (ce->engine, cs);/* Wa_16014892111 */ if (IS_DG2 (ce->engine->i915))
@@ -1322,17 +1319,7 @@ gen12_emit_indirect_ctx_xcs(const struct intel_context *ce, u32 *cs)PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE , 0); -/* hsdes: 1809175790 */ -if (!HAS_FLAT_CCS (ce->engine->i915)) { -if (ce->engine->class ==VIDEO_DECODE_CLASS ) - cs =gen12_emit_aux_table_inv (ce->engine->gt, - cs,GEN12_VD0_AUX_INV ); -else if (ce->engine->class ==VIDEO_ENHANCEMENT_CLASS ) - cs =gen12_emit_aux_table_inv (ce->engine->gt, - cs,GEN12_VE0_AUX_INV ); - } - -return cs; +return gen12_emit_aux_table_inv (ce->engine, cs); } static void
drivers/gpu/drm/i915/i915_driver.c +18 -15
@@ -574,7 +574,6 @@ static int i915_pcode_init(struct drm_i915_private *i915)static int i915_driver_hw_probe (struct drm_i915_private *dev_priv) {struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); -struct pci_dev *root_pdev;int ret;if (i915_inject_probe_failure (dev_priv))
@@ -686,15 +685,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)intel_bw_init_hw (dev_priv); -/* -* FIXME: Temporary hammer to avoid freezing the machine on our DGFX -* This should be totally removed when we handle the pci states properly -* on runtime PM and on s2idle cases. -*/ - root_pdev =pcie_find_root_port (pdev); -if (root_pdev) -pci_d3cold_disable (root_pdev); -return 0 ; err_msi:
@@ -718,16 +708,11 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)static void i915_driver_hw_remove (struct drm_i915_private *dev_priv) {struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); -struct pci_dev *root_pdev;i915_perf_fini (dev_priv);if (pdev->msi_enabled)pci_disable_msi (pdev); - - root_pdev =pcie_find_root_port (pdev); -if (root_pdev) -pci_d3cold_enable (root_pdev); }/**
@@ -1625,6 +1610,8 @@ static int intel_runtime_suspend(struct device *kdev) {struct drm_i915_private *dev_priv =kdev_to_i915 (kdev);struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; +struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); +struct pci_dev *root_pdev;struct intel_gt *gt;int ret, i;
@@ -1674,6 +1661,15 @@ static int intel_runtime_suspend(struct device *kdev)drm_err (&dev_priv->drm,"Unclaimed access detected prior to suspending\n" ); +/* +* FIXME: Temporary hammer to avoid freezing the machine on our DGFX +* This should be totally removed when we handle the pci states properly +* on runtime PM. +*/ + root_pdev =pcie_find_root_port (pdev); +if (root_pdev) +pci_d3cold_disable (root_pdev); + rpm->suspended = true;/*
@@ -1712,6 +1708,8 @@ static int intel_runtime_resume(struct device *kdev) {struct drm_i915_private *dev_priv =kdev_to_i915 (kdev);struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; +struct pci_dev *pdev =to_pci_dev (dev_priv->drm.dev); +struct pci_dev *root_pdev;struct intel_gt *gt;int ret, i;
@@ -1725,6 +1723,11 @@ static int intel_runtime_resume(struct device *kdev)intel_opregion_notify_adapter (dev_priv,PCI_D0 ); rpm->suspended = false; + + root_pdev =pcie_find_root_port (pdev); +if (root_pdev) +pci_d3cold_enable (root_pdev); +if (intel_uncore_unclaimed_mmio (&dev_priv->uncore))drm_dbg (&dev_priv->drm,"Unclaimed access during suspend, bios?\n" );
drivers/gpu/drm/meson/meson_drv.c +1 -1
@@ -285,7 +285,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)* Remove early framebuffers (ie. simplefb). The framebuffer can be * located anywhere in RAM */ - ret =drm_aperture_remove_framebuffers (false, &meson_driver); + ret =drm_aperture_remove_framebuffers (&meson_driver);if (ret) goto free_drm;
drivers/gpu/drm/msm/msm_fbdev.c +1 -1
@@ -157,7 +157,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev) }/* the fw fb could be anywhere in memory */ - ret =drm_aperture_remove_framebuffers (false, dev->driver); + ret =drm_aperture_remove_framebuffers (dev->driver);if (ret) goto fini;
drivers/gpu/drm/rockchip/rockchip_drm_drv.c +1 -1
@@ -140,7 +140,7 @@ static int rockchip_drm_bind(struct device *dev)int ret;/* Remove existing drivers that may own the framebuffer memory. */ - ret =drm_aperture_remove_framebuffers (false, &rockchip_drm_driver); + ret =drm_aperture_remove_framebuffers (&rockchip_drm_driver);if (ret) { DRM_DEV_ERROR(dev, "Failed to remove existing framebuffers - %d.\n",
drivers/gpu/drm/stm/drv.c +1 -1
@@ -185,7 +185,7 @@ static int stm_drm_platform_probe(struct platform_device *pdev)DRM_DEBUG ("%s\n" , __func__); - ret =drm_aperture_remove_framebuffers (false, &drv_driver); + ret =drm_aperture_remove_framebuffers (&drv_driver);if (ret)return ret;
drivers/gpu/drm/sun4i/sun4i_drv.c +1 -1
@@ -98,7 +98,7 @@ static int sun4i_drv_bind(struct device *dev) goto unbind_all;/* Remove early framebuffers (ie. simplefb) */ - ret =drm_aperture_remove_framebuffers (false, &sun4i_drv_driver); + ret =drm_aperture_remove_framebuffers (&sun4i_drv_driver);if (ret) goto unbind_all;
drivers/gpu/drm/tegra/drm.c +1 -1
@@ -1252,7 +1252,7 @@ static int host1x_drm_probe(struct host1x_device *dev)drm_mode_config_reset (drm); - err =drm_aperture_remove_framebuffers (false, &tegra_drm_driver); + err =drm_aperture_remove_framebuffers (&tegra_drm_driver);if (err <0 ) goto hub;
drivers/gpu/drm/vc4/vc4_drv.c +1 -1
@@ -351,7 +351,7 @@ static int vc4_drm_bind(struct device *dev)return -EPROBE_DEFER ; } - ret =drm_aperture_remove_framebuffers (false, driver); + ret =drm_aperture_remove_framebuffers (driver);if (ret)return ret;
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +12 -0
@@ -1683,4 +1683,16 @@ static inline bool vmw_has_fences(struct vmw_private *vmw) return (vmw_fifo_caps(vmw) & SVGA_FIFO_CAP_FENCE) != 0; } +static inline bool vmw_shadertype_is_valid (enum vmw_sm_type shader_model, +u32 shader_type) +{ +SVGA3dShaderType max_allowed =SVGA3D_SHADERTYPE_PREDX_MAX ; + +if (shader_model >=VMW_SM_5 ) + max_allowed =SVGA3D_SHADERTYPE_MAX ; +else if (shader_model >=VMW_SM_4 ) + max_allowed =SVGA3D_SHADERTYPE_DX10_MAX ; +return shader_type >=SVGA3D_SHADERTYPE_MIN && shader_type < max_allowed; +} +#endif
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +11 -18
@@ -1985,7 +1985,7 @@ static int vmw_cmd_set_shader(struct vmw_private *dev_priv, cmd =container_of (header,typeof (*cmd), header); -if (cmd->body.type >=SVGA3D_SHADERTYPE_PREDX_MAX ) { +if (!vmw_shadertype_is_valid (VMW_SM_LEGACY , cmd->body.type)) {VMW_DEBUG_USER ("Illegal shader type %u.\n" , (unsigned int ) cmd->body.type);return -EINVAL ;
@@ -2108,8 +2108,6 @@ vmw_cmd_dx_set_single_constant_buffer(struct vmw_private *dev_priv, SVGA3dCmdHeader *header) {VMW_DECLARE_CMD_VAR (*cmd, SVGA3dCmdDXSetSingleConstantBuffer); -SVGA3dShaderType max_shader_num =has_sm5_context (dev_priv) ? -SVGA3D_NUM_SHADERTYPE :SVGA3D_NUM_SHADERTYPE_DX10 ;struct vmw_resource *res =NULL ;struct vmw_ctx_validation_info *ctx_node =VMW_GET_CTX_NODE (sw_context);
@@ -2126,6 +2124,14 @@ vmw_cmd_dx_set_single_constant_buffer(struct vmw_private *dev_priv,if (unlikely (ret !=0 ))return ret; +if (!vmw_shadertype_is_valid (dev_priv->sm_type, cmd->body.type) || + cmd->body.slot >=SVGA3D_DX_MAX_CONSTBUFFERS ) { +VMW_DEBUG_USER ("Illegal const buffer shader %u slot %u.\n" , + (unsigned int ) cmd->body.type, + (unsigned int ) cmd->body.slot); +return -EINVAL ; + } + binding.bi.ctx = ctx_node->ctx; binding.bi.res = res; binding.bi.bt = vmw_ctx_binding_cb;
@@ -2134,14 +2140,6 @@ vmw_cmd_dx_set_single_constant_buffer(struct vmw_private *dev_priv, binding.size = cmd->body.sizeInBytes; binding.slot = cmd->body.slot; -if (binding.shader_slot >= max_shader_num || - binding.slot >=SVGA3D_DX_MAX_CONSTBUFFERS ) { -VMW_DEBUG_USER ("Illegal const buffer shader %u slot %u.\n" , - (unsigned int ) cmd->body.type, - (unsigned int ) binding.slot); -return -EINVAL ; - } -vmw_binding_add (ctx_node->staged, &binding.bi, binding.shader_slot, binding.slot);
@@ -2200,15 +2198,13 @@ static int vmw_cmd_dx_set_shader_res(struct vmw_private *dev_priv, {VMW_DECLARE_CMD_VAR (*cmd, SVGA3dCmdDXSetShaderResources) =container_of (header,typeof (*cmd), header); -SVGA3dShaderType max_allowed =has_sm5_context (dev_priv) ? -SVGA3D_SHADERTYPE_MAX :SVGA3D_SHADERTYPE_DX10_MAX ;u32 num_sr_view = (cmd->header.size -sizeof (cmd->body)) /sizeof (SVGA3dShaderResourceViewId);if ((u64 ) cmd->body.startView + (u64 ) num_sr_view > (u64 )SVGA3D_DX_MAX_SRVIEWS || - cmd->body.type >= max_allowed) { + !vmw_shadertype_is_valid (dev_priv->sm_type, cmd->body.type)) {VMW_DEBUG_USER ("Invalid shader binding.\n" );return -EINVAL ; }
@@ -2232,8 +2228,6 @@ static int vmw_cmd_dx_set_shader(struct vmw_private *dev_priv, SVGA3dCmdHeader *header) {VMW_DECLARE_CMD_VAR (*cmd, SVGA3dCmdDXSetShader); -SVGA3dShaderType max_allowed =has_sm5_context (dev_priv) ? -SVGA3D_SHADERTYPE_MAX :SVGA3D_SHADERTYPE_DX10_MAX ;struct vmw_resource *res =NULL ;struct vmw_ctx_validation_info *ctx_node =VMW_GET_CTX_NODE (sw_context);struct vmw_ctx_bindinfo_shader binding;
@@ -2244,8 +2238,7 @@ static int vmw_cmd_dx_set_shader(struct vmw_private *dev_priv, cmd =container_of (header,typeof (*cmd), header); -if (cmd->body.type >= max_allowed || - cmd->body.type <SVGA3D_SHADERTYPE_MIN ) { +if (!vmw_shadertype_is_valid (dev_priv->sm_type, cmd->body.type)) {VMW_DEBUG_USER ("Illegal shader type %u.\n" , (unsigned int ) cmd->body.type);return -EINVAL ;
drivers/hwmon/aquacomputer_d5next.c +35 -1
@@ -12,9 +12,11 @@#include <linux/crc16.h> #include <linux/debugfs.h> +#include <linux/delay.h> #include <linux/hid.h> #include <linux/hwmon.h> #include <linux/jiffies.h> +#include <linux/ktime.h> #include <linux/module.h> #include <linux/mutex.h> #include <linux/seq_file.h>
@@ -49,6 +51,8 @@ static const char *const aqc_device_names[] = {#define CTRL_REPORT_ID 0x03 +#define CTRL_REPORT_DELAY 200/* ms */ +/* The HID report that the official software always sends * after writing values, currently same for all devices */
@@ -269,6 +273,9 @@ struct aqc_data {enum kinds kind;const char *name; +ktime_t last_ctrl_report_op; +int ctrl_report_delay;/* Delay between two ctrl report operations, in ms */ +int buffer_size;u8 *buffer;int checksum_start;
@@ -325,17 +332,35 @@ static int aqc_pwm_to_percent(long val)return DIV_ROUND_CLOSEST (val *100 *100 ,255 ); } +static void aqc_delay_ctrl_report (struct aqc_data *priv) +{ +/* +* If previous read or write is too close to this one, delay the current operation +* to give the device enough time to process the previous one. +*/ +if (priv->ctrl_report_delay) { +s64 delta =ktime_ms_delta (ktime_get (), priv->last_ctrl_report_op); + +if (delta < priv->ctrl_report_delay) +msleep (priv->ctrl_report_delay - delta); + } +} +/* Expects the mutex to be locked */ static int aqc_get_ctrl_data (struct aqc_data *priv) {int ret; +aqc_delay_ctrl_report (priv); +memset (priv->buffer,0x00 , priv->buffer_size); ret =hid_hw_raw_request (priv->hdev,CTRL_REPORT_ID , priv->buffer, priv->buffer_size,HID_FEATURE_REPORT ,HID_REQ_GET_REPORT );if (ret <0 ) ret = -ENODATA ; + priv->last_ctrl_report_op =ktime_get (); +return ret; }
@@ -345,6 +370,8 @@ static int aqc_send_ctrl_data(struct aqc_data *priv)int ret;u16 checksum; +aqc_delay_ctrl_report (priv); +/* Init and xorout value for CRC-16/USB is 0xffff */ checksum =crc16 (0xffff , priv->buffer + priv->checksum_start, priv->checksum_length); checksum ^=0xffff ;
@@ -356,12 +383,16 @@ static int aqc_send_ctrl_data(struct aqc_data *priv) ret =hid_hw_raw_request (priv->hdev,CTRL_REPORT_ID , priv->buffer, priv->buffer_size,HID_FEATURE_REPORT ,HID_REQ_SET_REPORT );if (ret <0 ) -return ret; + goto record_access_and_ret;/* The official software sends this report after every change, so do it here as well */ ret =hid_hw_raw_request (priv->hdev,SECONDARY_CTRL_REPORT_ID , secondary_ctrl_report,SECONDARY_CTRL_REPORT_SIZE ,HID_FEATURE_REPORT ,HID_REQ_SET_REPORT ); + +record_access_and_ret: + priv->last_ctrl_report_op =ktime_get (); +return ret; }
@@ -853,6 +884,7 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) priv->virtual_temp_sensor_start_offset =D5NEXT_VIRTUAL_SENSORS_START ; priv->power_cycle_count_offset =D5NEXT_POWER_CYCLES ; priv->buffer_size =D5NEXT_CTRL_REPORT_SIZE ; + priv->ctrl_report_delay =CTRL_REPORT_DELAY ; priv->temp_label = label_d5next_temp; priv->virtual_temp_label = label_virtual_temp_sensors;
@@ -893,6 +925,7 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) priv->virtual_temp_sensor_start_offset =OCTO_VIRTUAL_SENSORS_START ; priv->power_cycle_count_offset =OCTO_POWER_CYCLES ; priv->buffer_size =OCTO_CTRL_REPORT_SIZE ; + priv->ctrl_report_delay =CTRL_REPORT_DELAY ; priv->temp_label = label_temp_sensors; priv->virtual_temp_label = label_virtual_temp_sensors;
@@ -913,6 +946,7 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) priv->virtual_temp_sensor_start_offset =QUADRO_VIRTUAL_SENSORS_START ; priv->power_cycle_count_offset =QUADRO_POWER_CYCLES ; priv->buffer_size =QUADRO_CTRL_REPORT_SIZE ; + priv->ctrl_report_delay =CTRL_REPORT_DELAY ; priv->flow_sensor_offset =QUADRO_FLOW_SENSOR_OFFSET ; priv->temp_label = label_temp_sensors;
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c +2 -0
@@ -821,6 +821,8 @@ static int vb2ops_venc_queue_setup(struct vb2_queue *vq,return -EINVAL ;if (*nplanes) { +if (*nplanes != q_data->fmt->num_planes) +return -EINVAL ;for (i =0 ; i < *nplanes; i++)if (sizes[i] < q_data->sizeimage[i])return -EINVAL ;
drivers/net/bonding/bond_alb.c +3 -3
@@ -660,10 +660,10 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)return NULL ; arp = (struct arp_pkt *)skb_network_header (skb); -/* Don't modify or load balance ARPs that do not originate locally -* (e.g.,arrive via a bridge). +/* Don't modify or load balance ARPs that do not originate +* from the bond itself or a VLAN directly above the bond. */ -if (!bond_slave_has_mac_rx (bond, arp->mac_src)) +if (!bond_slave_has_mac_rcu (bond, arp->mac_src))return NULL ; dev =ip_dev_find (dev_net (bond->dev), arp->ip_src);
drivers/net/can/vxcan.c +1 -6
@@ -192,12 +192,7 @@ static int vxcan_newlink(struct net *net, struct net_device *dev, nla_peer = data[VXCAN_INFO_PEER ]; ifmp =nla_data (nla_peer); - err =rtnl_nla_parse_ifla (peer_tb, -nla_data (nla_peer) + -sizeof (struct ifinfomsg ), -nla_len (nla_peer) - -sizeof (struct ifinfomsg ), -NULL ); + err =rtnl_nla_parse_ifinfomsg (peer_tb, nla_peer, extack);if (err <0 )return err;
drivers/net/dsa/mt7530.c +4 -0
@@ -1005,6 +1005,10 @@ mt753x_trap_frames(struct mt7530_priv *priv)mt7530_rmw (priv,MT753X_BPC ,MT753X_BPDU_PORT_FW_MASK ,MT753X_BPDU_CPU_ONLY ); +/* Trap 802.1X PAE frames to the CPU port(s) */ +mt7530_rmw (priv,MT753X_BPC ,MT753X_PAE_PORT_FW_MASK , +MT753X_PAE_PORT_FW (MT753X_BPDU_CPU_ONLY )); +/* Trap LLDP frames with :0E MAC DA to the CPU port(s) */ mt7530_rmw (priv,MT753X_RGAC2 ,MT753X_R0E_PORT_FW_MASK ,MT753X_R0E_PORT_FW (MT753X_BPDU_CPU_ONLY ));
drivers/net/dsa/mt7530.h +2 -0
@@ -64,6 +64,8 @@ enum mt753x_id {/* Registers for BPDU and PAE frame control*/ #define MT753X_BPC 0x24#define MT753X_BPDU_PORT_FW_MASK GENMASK(2, 0) +#define MT753X_PAE_PORT_FW_MASK GENMASK(18, 16) +#define MT753X_PAE_PORT_FW (x) FIELD_PREP(MT753X_PAE_PORT_FW_MASK, x)/* Register for :03 and :0E MAC DA frame control */ #define MT753X_RGAC2 0x2c
drivers/net/dsa/ocelot/felix_vsc9959.c +3 -0
@@ -1071,6 +1071,9 @@ static u64 vsc9959_tas_remaining_gate_len_ps(u64 gate_len_ns)if (gate_len_ns ==U64_MAX )return U64_MAX ; +if (gate_len_ns <VSC9959_TAS_MIN_GATE_LEN_NS ) +return 0 ; +return (gate_len_ns -VSC9959_TAS_MIN_GATE_LEN_NS ) *PSEC_PER_NSEC ; }
drivers/net/ethernet/broadcom/bgmac.c +1 -1
@@ -1448,7 +1448,7 @@ int bgmac_phy_connect_direct(struct bgmac *bgmac)int err; phy_dev =fixed_phy_register (PHY_POLL , &fphy_status,NULL ); -if (!phy_dev ||IS_ERR (phy_dev)) { +if (IS_ERR (phy_dev)) {dev_err (bgmac->dev,"Failed to register fixed PHY device\n" );return -ENODEV ; }
drivers/net/ethernet/broadcom/genet/bcmmii.c +1 -1
@@ -608,7 +608,7 @@ static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv) }; phydev =fixed_phy_register (PHY_POLL , &fphy_status,NULL ); -if (!phydev ||IS_ERR (phydev)) { +if (IS_ERR (phydev)) {dev_err (kdev,"failed to register fixed PHY device\n" );return -ENODEV ; }
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c +1 -1
@@ -1466,7 +1466,7 @@ static void make_established(struct sock *sk, u32 snd_isn, unsigned int opt) tp->write_seq = snd_isn; tp->snd_nxt = snd_isn; tp->snd_una = snd_isn; -inet_sk (sk)->inet_id =get_random_u16 (); +atomic_set (&inet_sk (sk)->inet_id,get_random_u16 ());assign_rxopt (sk, opt);if (tp->rcv_wnd > (RCV_BUFSIZ_M <<10 ))
drivers/net/ethernet/ibm/ibmveth.c +1 -1
@@ -203,7 +203,7 @@ static inline void ibmveth_flush_buffer(void *addr, unsigned long length)unsigned long offset;for (offset =0 ; offset < length; offset +=SMP_CACHE_BYTES ) - asm("dcbfl %0,%1" ::"b" (addr),"r" (offset)); + asm("dcbf %0,%1,1" ::"b" (addr),"r" (offset)); }/* replenish the buffers for a pool. note that we don't need to
drivers/net/ethernet/intel/i40e/i40e_main.c +3 -2
@@ -2615,7 +2615,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi) retval =i40e_correct_mac_vlan_filters (vsi, &tmp_add_list, &tmp_del_list, vlan_filters); - else + else if (pf->vf) retval =i40e_correct_vf_mac_vlan_filters (vsi, &tmp_add_list, &tmp_del_list, vlan_filters, pf->vf[vsi->vf_id].trusted);
@@ -2788,7 +2788,8 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi) }/* if the VF is not trusted do not do promisc */ -if ((vsi->type ==I40E_VSI_SRIOV ) && !pf->vf[vsi->vf_id].trusted) { +if (vsi->type ==I40E_VSI_SRIOV && pf->vf && + !pf->vf[vsi->vf_id].trusted) {clear_bit (__I40E_VSI_OVERFLOW_PROMISC, vsi->state); goto out; }
drivers/net/ethernet/intel/ice/ice_base.c +2 -1
@@ -396,7 +396,8 @@ static int ice_setup_rx_ctx(struct ice_rx_ring *ring)/* Receive Packet Data Buffer Size. * The Packet Data Buffer Size is defined in 128 byte units. */ - rlan_ctx.dbuf = ring->rx_buf_len >>ICE_RLAN_CTX_DBUF_S ; + rlan_ctx.dbuf =DIV_ROUND_UP (ring->rx_buf_len, +BIT_ULL (ICE_RLAN_CTX_DBUF_S ));/* use 32 byte descriptors */ rlan_ctx.dsize =1 ;
drivers/net/ethernet/intel/ice/ice_sriov.c +4 -4
@@ -1240,7 +1240,7 @@ int ice_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool ena)if (!vf)return -EINVAL ; - ret =ice_check_vf_ready_for_reset (vf); + ret =ice_check_vf_ready_for_cfg (vf);if (ret) goto out_put_vf;
@@ -1355,7 +1355,7 @@ int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac) goto out_put_vf; } - ret =ice_check_vf_ready_for_reset (vf); + ret =ice_check_vf_ready_for_cfg (vf);if (ret) goto out_put_vf;
@@ -1409,7 +1409,7 @@ int ice_set_vf_trust(struct net_device *netdev, int vf_id, bool trusted)return -EOPNOTSUPP ; } - ret =ice_check_vf_ready_for_reset (vf); + ret =ice_check_vf_ready_for_cfg (vf);if (ret) goto out_put_vf;
@@ -1722,7 +1722,7 @@ ice_set_vf_port_vlan(struct net_device *netdev, int vf_id, u16 vlan_id, u8 qos,if (!vf)return -EINVAL ; - ret =ice_check_vf_ready_for_reset (vf); + ret =ice_check_vf_ready_for_cfg (vf);if (ret) goto out_put_vf;
drivers/net/ethernet/intel/ice/ice_vf_lib.c +8 -26
@@ -185,25 +185,6 @@ int ice_check_vf_ready_for_cfg(struct ice_vf *vf)return 0 ; } -/** -* ice_check_vf_ready_for_reset - check if VF is ready to be reset -* @vf: VF to check if it's ready to be reset -* -* The purpose of this function is to ensure that the VF is not in reset, -* disabled, and is both initialized and active, thus enabling us to safely -* initialize another reset. -*/ -int ice_check_vf_ready_for_reset (struct ice_vf *vf) -{ -int ret; - - ret =ice_check_vf_ready_for_cfg (vf); -if (!ret && !test_bit (ICE_VF_STATE_ACTIVE , vf->vf_states)) - ret = -EAGAIN ; - -return ret; -} -/** * ice_trigger_vf_reset - Reset a VF on HW * @vf: pointer to the VF structure
@@ -588,11 +569,17 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)return 0 ; } +if (flags &ICE_VF_RESET_LOCK ) +mutex_lock (&vf->cfg_lock); +else +lockdep_assert_held (&vf->cfg_lock); +if (ice_is_vf_disabled (vf)) { vsi =ice_get_vf_vsi (vf);if (!vsi) {dev_dbg (dev,"VF is already removed\n" ); -return -EINVAL ; + err = -EINVAL ; + goto out_unlock; }ice_vsi_stop_lan_tx_rings (vsi,ICE_NO_RESET , vf->vf_id);
@@ -601,14 +588,9 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)dev_dbg (dev,"VF is already disabled, there is no need for resetting it, telling VM, all is fine %d\n" , vf->vf_id); -return 0 ; + goto out_unlock; } -if (flags &ICE_VF_RESET_LOCK ) -mutex_lock (&vf->cfg_lock); -else -lockdep_assert_held (&vf->cfg_lock); -/* Set VF disable bit state here, before triggering reset */ set_bit (ICE_VF_STATE_DIS , vf->vf_states);ice_trigger_vf_reset (vf, flags &ICE_VF_RESET_VFLR , false);
drivers/net/ethernet/intel/ice/ice_vf_lib.h +0 -1
@@ -214,7 +214,6 @@ u16 ice_get_num_vfs(struct ice_pf *pf);struct ice_vsi *ice_get_vf_vsi (struct ice_vf *vf);bool ice_is_vf_disabled (struct ice_vf *vf);int ice_check_vf_ready_for_cfg (struct ice_vf *vf); -int ice_check_vf_ready_for_reset (struct ice_vf *vf);void ice_set_vf_state_dis (struct ice_vf *vf);bool ice_is_any_vf_in_unicast_promisc (struct ice_pf *pf);void
drivers/net/ethernet/intel/ice/ice_virtchnl.c +0 -1
@@ -3722,7 +3722,6 @@ void ice_vc_process_vf_msg(struct ice_pf *pf, struct ice_rq_event_info *event)ice_vc_notify_vf_link_state (vf);break ;case VIRTCHNL_OP_RESET_VF : -clear_bit (ICE_VF_STATE_ACTIVE , vf->vf_states); ops->reset_vf (vf);break ;case VIRTCHNL_OP_ADD_ETH_ADDR :
drivers/net/ethernet/intel/igb/igb_ptp.c +12 -12
@@ -1404,18 +1404,6 @@ void igb_ptp_init(struct igb_adapter *adapter)return ; } -spin_lock_init (&adapter->tmreg_lock); -INIT_WORK (&adapter->ptp_tx_work, igb_ptp_tx_work); - -if (adapter->ptp_flags &IGB_PTP_OVERFLOW_CHECK ) -INIT_DELAYED_WORK (&adapter->ptp_overflow_work, - igb_ptp_overflow_check); - - adapter->tstamp_config.rx_filter =HWTSTAMP_FILTER_NONE ; - adapter->tstamp_config.tx_type =HWTSTAMP_TX_OFF ; - -igb_ptp_reset (adapter); - adapter->ptp_clock =ptp_clock_register (&adapter->ptp_caps, &adapter->pdev->dev);if (IS_ERR (adapter->ptp_clock)) {
@@ -1425,6 +1413,18 @@ void igb_ptp_init(struct igb_adapter *adapter)dev_info (&adapter->pdev->dev,"added PHC on %s\n" , adapter->netdev->name); adapter->ptp_flags |=IGB_PTP_ENABLED ; + +spin_lock_init (&adapter->tmreg_lock); +INIT_WORK (&adapter->ptp_tx_work, igb_ptp_tx_work); + +if (adapter->ptp_flags &IGB_PTP_OVERFLOW_CHECK ) +INIT_DELAYED_WORK (&adapter->ptp_overflow_work, + igb_ptp_overflow_check); + + adapter->tstamp_config.rx_filter =HWTSTAMP_FILTER_NONE ; + adapter->tstamp_config.tx_type =HWTSTAMP_TX_OFF ; + +igb_ptp_reset (adapter); } }
drivers/net/ethernet/intel/igc/igc_defines.h +1 -1
@@ -536,7 +536,7 @@#define IGC_PTM_CTRL_START_NOW BIT(29)/* Start PTM Now */ #define IGC_PTM_CTRL_EN BIT(30)/* Enable PTM */ #define IGC_PTM_CTRL_TRIG BIT(31)/* PTM Cycle trigger */ -#define IGC_PTM_CTRL_SHRT_CYC (usec) (((usec) & 0x2f) << 2) +#define IGC_PTM_CTRL_SHRT_CYC (usec) (((usec) & 0x3f) << 2)#define IGC_PTM_CTRL_PTM_TO (usec) (((usec) & 0xff) << 8)#define IGC_PTM_SHORT_CYC_DEFAULT 10/* Default Short/interrupted cycle interval */
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +2 -1
@@ -4005,9 +4005,10 @@ int rvu_mbox_handler_nix_set_hw_frs(struct rvu *rvu, struct nix_frs_cfg *req,if (link <0 )return NIX_AF_ERR_RX_LINK_INVALID ; -nix_find_link_frs (rvu, req, pcifunc); linkcfg: +nix_find_link_frs (rvu, req, pcifunc); + cfg =rvu_read64 (rvu, blkaddr,NIX_AF_RX_LINKX_CFG (link)); cfg = (cfg & ~(0xFFFFULL <<16 )) | ((u64 )req->maxlen <<16 );if (req->update_minlen)
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c +2 -2
@@ -32,8 +32,8 @@ static const struct mlxsw_afk_element_info mlxsw_afk_element_infos[] = {MLXSW_AFK_ELEMENT_INFO_U32 (IP_TTL_ ,0x18 ,0 ,8 ),MLXSW_AFK_ELEMENT_INFO_U32 (IP_ECN ,0x18 ,9 ,2 ),MLXSW_AFK_ELEMENT_INFO_U32 (IP_DSCP ,0x18 ,11 ,6 ), -MLXSW_AFK_ELEMENT_INFO_U32 (VIRT_ROUTER_MSB ,0x18 ,17 ,3 ), -MLXSW_AFK_ELEMENT_INFO_U32 (VIRT_ROUTER_LSB ,0x18 ,20 ,8 ), +MLXSW_AFK_ELEMENT_INFO_U32 (VIRT_ROUTER_MSB ,0x18 ,17 ,4 ), +MLXSW_AFK_ELEMENT_INFO_U32 (VIRT_ROUTER_LSB ,0x18 ,21 ,8 ),MLXSW_AFK_ELEMENT_INFO_BUF (SRC_IP_96_127 ,0x20 ,4 ),MLXSW_AFK_ELEMENT_INFO_BUF (SRC_IP_64_95 ,0x24 ,4 ), MLXSW_AFK_ELEMENT_INFO_BUF(SRC_IP_32_63, 0x28, 4),
drivers/net/ethernet/mellanox/mlxsw/pci.c +6 -2
@@ -517,11 +517,15 @@ static void mlxsw_pci_skb_cb_ts_set(struct mlxsw_pci *mlxsw_pci,struct sk_buff *skb, enum mlxsw_pci_cqe_v cqe_v, char *cqe) { + u8 ts_type; +if (cqe_v !=MLXSW_PCI_CQE_V2 )return ; -if (mlxsw_pci_cqe2_time_stamp_type_get (cqe) != -MLXSW_PCI_CQE_TIME_STAMP_TYPE_UTC ) + ts_type =mlxsw_pci_cqe2_time_stamp_type_get (cqe); + +if (ts_type !=MLXSW_PCI_CQE_TIME_STAMP_TYPE_UTC && + ts_type !=MLXSW_PCI_CQE_TIME_STAMP_TYPE_MIRROR_UTC )return ;mlxsw_skb_cb (skb)->cqe_ts.sec =mlxsw_pci_cqe2_time_stamp_sec_get (cqe);
drivers/net/ethernet/mellanox/mlxsw/reg.h +0 -9
@@ -97,14 +97,6 @@ MLXSW_ITEM32(reg, sspr, m, 0x00, 31, 1);*/ MLXSW_ITEM32_LP (reg, sspr,0x00 ,16 ,0x00 ,12 ); -/* reg_sspr_sub_port -* Virtual port within the physical port. -* Should be set to 0 when virtual ports are not enabled on the port. -* -* Access: RW -*/ -MLXSW_ITEM32 (reg, sspr, sub_port,0x00 ,8 ,8 ); -/* reg_sspr_system_port * Unique identifier within the stacking domain that represents all the ports * that are available in the system (external ports).
@@ -120,7 +112,6 @@ static inline void mlxsw_reg_sspr_pack(char *payload, u16 local_port)MLXSW_REG_ZERO (sspr, payload);mlxsw_reg_sspr_m_set (payload,1 );mlxsw_reg_sspr_local_port_set (payload, local_port); -mlxsw_reg_sspr_sub_port_set (payload,0 );mlxsw_reg_sspr_system_port_set (payload, local_port); }
drivers/net/ethernet/mellanox/mlxsw/spectrum2_mr_tcam.c +1 -1
@@ -193,7 +193,7 @@ mlxsw_sp2_mr_tcam_rule_parse(struct mlxsw_sp_acl_rule *rule, key->vrid, GENMASK(7, 0));mlxsw_sp_acl_rulei_keymask_u32 (rulei,MLXSW_AFK_ELEMENT_VIRT_ROUTER_MSB , - key->vrid >>8 ,GENMASK (2 ,0 )); + key->vrid >>8 ,GENMASK (3 ,0 ));switch (key->proto) {case MLXSW_SP_L3_PROTO_IPV4 :return mlxsw_sp2_mr_tcam_rule_parse4 (rulei, key);
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_keys.c +2 -2
@@ -169,7 +169,7 @@ static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv4_2[] = {static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv4_4[] = {MLXSW_AFK_ELEMENT_INST_U32 (VIRT_ROUTER_LSB ,0x04 ,24 ,8 ), -MLXSW_AFK_ELEMENT_INST_U32 (VIRT_ROUTER_MSB ,0x00 ,0 ,3 ), +MLXSW_AFK_ELEMENT_INST_EXT_U32 (VIRT_ROUTER_MSB ,0x00 ,0 ,3 ,0 , true), };static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_0[] = {
@@ -319,7 +319,7 @@ static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_mac_5b[] = {static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv4_4b[] = {MLXSW_AFK_ELEMENT_INST_U32 (VIRT_ROUTER_LSB ,0x04 ,13 ,8 ), -MLXSW_AFK_ELEMENT_INST_EXT_U32 (VIRT_ROUTER_MSB ,0x04 ,21 ,4 ,0 , true), +MLXSW_AFK_ELEMENT_INST_U32 (VIRT_ROUTER_MSB ,0x04 ,21 ,4 ), };static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_2b[] = {
drivers/net/ipvlan/ipvlan_main.c +2 -1
@@ -748,7 +748,8 @@ static int ipvlan_device_event(struct notifier_block *unused,write_pnet (&port->pnet, newnet); -ipvlan_migrate_l3s_hook (oldnet, newnet); +if (port->mode ==IPVLAN_MODE_L3S ) +ipvlan_migrate_l3s_hook (oldnet, newnet);break ; }case NETDEV_UNREGISTER :
drivers/net/veth.c +1 -4
@@ -1716,10 +1716,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev, nla_peer = data[VETH_INFO_PEER ]; ifmp =nla_data (nla_peer); - err =rtnl_nla_parse_ifla (peer_tb, -nla_data (nla_peer) +sizeof (struct ifinfomsg ), -nla_len (nla_peer) -sizeof (struct ifinfomsg ), -NULL ); + err =rtnl_nla_parse_ifinfomsg (peer_tb, nla_peer, extack);if (err <0 )return err;
drivers/of/dynamic.c +9 -22
@@ -63,15 +63,14 @@ int of_reconfig_notifier_unregister(struct notifier_block *nb) }EXPORT_SYMBOL_GPL (of_reconfig_notifier_unregister); -#ifdef DEBUG -const char *action_names[] = { +static const char *action_names[] = { + [0 ] ="INVALID" , [OF_RECONFIG_ATTACH_NODE ] ="ATTACH_NODE" , [OF_RECONFIG_DETACH_NODE ] ="DETACH_NODE" , [OF_RECONFIG_ADD_PROPERTY ] ="ADD_PROPERTY" , [OF_RECONFIG_REMOVE_PROPERTY ] ="REMOVE_PROPERTY" , [OF_RECONFIG_UPDATE_PROPERTY ] ="UPDATE_PROPERTY" , }; -#endif int of_reconfig_notify (unsigned long action,struct of_reconfig_data *p) {
@@ -594,21 +593,9 @@ static int __of_changeset_entry_apply(struct of_changeset_entry *ce) } ret =__of_add_property (ce->np, ce->prop); -if (ret) { -pr_err ("changeset: add_property failed @%pOF/%s\n" , - ce->np, - ce->prop->name); -break ; - }break ;case OF_RECONFIG_REMOVE_PROPERTY : ret =__of_remove_property (ce->np, ce->prop); -if (ret) { -pr_err ("changeset: remove_property failed @%pOF/%s\n" , - ce->np, - ce->prop->name); -break ; - }break ;case OF_RECONFIG_UPDATE_PROPERTY :
@@ -622,20 +609,17 @@ static int __of_changeset_entry_apply(struct of_changeset_entry *ce) } ret =__of_update_property (ce->np, ce->prop, &old_prop); -if (ret) { -pr_err ("changeset: update_property failed @%pOF/%s\n" , - ce->np, - ce->prop->name); -break ; - }break ;default : ret = -EINVAL ; }raw_spin_unlock_irqrestore (&devtree_lock, flags); -if (ret) +if (ret) { +pr_err ("changeset: apply failed: %-15s %pOF:%s\n" , + action_names[ce->action], ce->np, ce->prop->name);return ret; + }switch (ce->action) {case OF_RECONFIG_ATTACH_NODE :
@@ -921,6 +905,9 @@ int of_changeset_action(struct of_changeset *ocs, unsigned long action,if (!ce)return -ENOMEM ; +if (WARN_ON (action >=ARRAY_SIZE (action_names))) +return -EINVAL ; +/* get a reference to the node */ ce->action = action; ce->np =of_node_get (np);
drivers/of/kexec.c +2 -1
@@ -184,7 +184,8 @@ int __init ima_free_kexec_buffer(void)if (ret)return ret; - return memblock_phys_free(addr, size); +memblock_free_late (addr, size); + return 0; }#endif
drivers/of/unittest.c +2 -2
@@ -657,12 +657,12 @@ static void __init of_unittest_parse_phandle_with_args_map(void)memset (&args,0 ,sizeof (args));EXPECT_BEGIN (KERN_INFO , -"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle" ); +"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678" ); rc =of_parse_phandle_with_args_map (np,"phandle-list-bad-phandle" ,"phandle" ,0 , &args);EXPECT_END (KERN_INFO , -"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle" ); +"OF: /testcase-data/phandle-tests/consumer-b: could not find phandle 12345678" );unittest (rc == -EINVAL ,"expected:%i got:%i\n" , -EINVAL , rc);
drivers/pci/hotplug/acpiphp_glue.c +6 -3
@@ -504,12 +504,15 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge)if (pass && dev->subordinate) {check_hotplug_bridge (slot, dev);pcibios_resource_survey_bus (dev->subordinate); -__pci_bus_size_bridges (dev->subordinate, - &add_list); +if (pci_is_root_bus (bus)) +__pci_bus_size_bridges (dev->subordinate, &add_list); } } } -__pci_bus_assign_resources (bus, &add_list,NULL ); +if (pci_is_root_bus (bus)) +__pci_bus_assign_resources (bus, &add_list,NULL ); +else +pci_assign_unassigned_bridge_resources (bus->self); }acpiphp_sanitize_bus (bus);
drivers/pinctrl/pinctrl-amd.c +30 -0
@@ -862,6 +862,33 @@ static const struct pinconf_ops amd_pinconf_ops = { .pin_config_group_set = amd_pinconf_group_set, }; +static void amd_gpio_irq_init (struct amd_gpio *gpio_dev) +{ +struct pinctrl_desc *desc = gpio_dev->pctrl->desc; +unsigned long flags; +u32 pin_reg, mask; +int i; + + mask =BIT (WAKE_CNTRL_OFF_S0I3 ) |BIT (WAKE_CNTRL_OFF_S3 ) | +BIT (WAKE_CNTRL_OFF_S4 ); + +for (i =0 ; i < desc->npins; i++) { +int pin = desc->pins[i].number; +const struct pin_desc *pd =pin_desc_get (gpio_dev->pctrl, pin); + +if (!pd) +continue ; + +raw_spin_lock_irqsave (&gpio_dev->lock, flags); + + pin_reg =readl (gpio_dev->base + pin *4 ); + pin_reg &= ~mask; +writel (pin_reg, gpio_dev->base + pin *4 ); + +raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); + } +} +#ifdef CONFIG_PM_SLEEP static bool amd_gpio_should_save (struct amd_gpio *gpio_dev,unsigned int pin) {
@@ -1099,6 +1126,9 @@ static int amd_gpio_probe(struct platform_device *pdev)return PTR_ERR (gpio_dev->pctrl); } +/* Disable and mask interrupts */ +amd_gpio_irq_init (gpio_dev); + girq = &gpio_dev->gc.irq;gpio_irq_chip_set_chip (girq, &amd_gpio_irqchip);/* This will let us handle the parent IRQ in the driver */
drivers/pinctrl/renesas/pinctrl-rza2.c +15 -2
@@ -14,6 +14,7 @@#include <linux/gpio/driver.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/of_device.h> #include <linux/pinctrl/pinmux.h>
@@ -46,6 +47,7 @@ struct rza2_pinctrl_priv {struct pinctrl_dev *pctl;struct pinctrl_gpio_range gpio_range;int npins; +struct mutex mutex;/* serialize adding groups and functions */ };#define RZA2_PDR (port) (0x0000 + (port) * 2)/* Direction 16-bit */
@@ -358,10 +360,14 @@ static int rza2_dt_node_to_map(struct pinctrl_dev *pctldev, psel_val[i] =MUX_FUNC (value); } +mutex_lock (&priv->mutex); +/* Register a single pin group listing all the pins we read from DT */ gsel =pinctrl_generic_add_group (pctldev, np->name, pins, npins,NULL ); -if (gsel <0 ) -return gsel; +if (gsel <0 ) { + ret = gsel; + goto unlock; + }/* * Register a single group function where the 'data' is an array PSEL
@@ -390,6 +396,8 @@ static int rza2_dt_node_to_map(struct pinctrl_dev *pctldev, (*map)->data.mux.function = np->name; *num_maps =1 ; +mutex_unlock (&priv->mutex); +return 0 ; remove_function:
@@ -398,6 +406,9 @@ static int rza2_dt_node_to_map(struct pinctrl_dev *pctldev, remove_group:pinctrl_generic_remove_group (pctldev, gsel); +unlock: +mutex_unlock (&priv->mutex); +dev_err (priv->dev,"Unable to parse DT node %s\n" , np->name);return ret;
@@ -473,6 +484,8 @@ static int rza2_pinctrl_probe(struct platform_device *pdev)if (IS_ERR (priv->base))return PTR_ERR (priv->base); +mutex_init (&priv->mutex); +platform_set_drvdata (pdev, priv); priv->npins = (int)(uintptr_t)of_device_get_match_data(&pdev->dev) *
drivers/pinctrl/renesas/pinctrl-rzg2l.c +12 -3
@@ -11,6 +11,7 @@#include <linux/io.h> #include <linux/interrupt.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/of_device.h> #include <linux/of_irq.h> #include <linux/pinctrl/pinconf-generic.h>
@@ -146,10 +147,11 @@ struct rzg2l_pinctrl {struct gpio_chip gpio_chip;struct pinctrl_gpio_range gpio_range;DECLARE_BITMAP (tint_slot,RZG2L_TINT_MAX_INTERRUPT ); -spinlock_t bitmap_lock; +spinlock_t bitmap_lock;/* protect tint_slot bitmap */ unsigned int hwirq[RZG2L_TINT_MAX_INTERRUPT ]; -spinlock_t lock; +spinlock_t lock;/* lock read/write registers */ +struct mutex mutex;/* serialize adding groups and functions */ };static const unsigned int iolh_groupa_mA[] = {2 ,4 ,8 ,12 };
@@ -359,11 +361,13 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev, name = np->name; } +mutex_lock (&pctrl->mutex); +/* Register a single pin group listing all the pins we read from DT */ gsel =pinctrl_generic_add_group (pctldev, name, pins, num_pinmux,NULL );if (gsel <0 ) { ret = gsel; - goto done; + goto unlock; }/*
@@ -377,6 +381,8 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev, goto remove_group; } +mutex_unlock (&pctrl->mutex); + maps[idx].type =PIN_MAP_TYPE_MUX_GROUP ; maps[idx].data.mux.group = name; maps[idx].data.mux.function = name;
@@ -388,6 +394,8 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev, remove_group:pinctrl_generic_remove_group (pctldev, gsel); +unlock: +mutex_unlock (&pctrl->mutex); done: *index = idx;kfree (configs);
@@ -1501,6 +1509,7 @@ static int rzg2l_pinctrl_probe(struct platform_device *pdev)spin_lock_init (&pctrl->lock);spin_lock_init (&pctrl->bitmap_lock); +mutex_init (&pctrl->mutex);platform_set_drvdata (pdev, pctrl);
drivers/pinctrl/renesas/pinctrl-rzv2m.c +11 -2
@@ -14,6 +14,7 @@#include <linux/gpio/driver.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/of_device.h> #include <linux/pinctrl/pinconf-generic.h> #include <linux/pinctrl/pinconf.h>
@@ -121,7 +122,8 @@ struct rzv2m_pinctrl {struct gpio_chip gpio_chip;struct pinctrl_gpio_range gpio_range; -spinlock_t lock; +spinlock_t lock;/* lock read/write registers */ +struct mutex mutex;/* serialize adding groups and functions */ };static const unsigned int drv_1_8V_group2_uA[] = {1800 ,3800 ,7800 ,11000 };
@@ -320,11 +322,13 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev, name = np->name; } +mutex_lock (&pctrl->mutex); +/* Register a single pin group listing all the pins we read from DT */ gsel =pinctrl_generic_add_group (pctldev, name, pins, num_pinmux,NULL );if (gsel <0 ) { ret = gsel; - goto done; + goto unlock; }/*
@@ -338,6 +342,8 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev, goto remove_group; } +mutex_unlock (&pctrl->mutex); + maps[idx].type =PIN_MAP_TYPE_MUX_GROUP ; maps[idx].data.mux.group = name; maps[idx].data.mux.function = name;
@@ -349,6 +355,8 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev, remove_group:pinctrl_generic_remove_group (pctldev, gsel); +unlock: +mutex_unlock (&pctrl->mutex); done: *index = idx;kfree (configs);
@@ -1070,6 +1078,7 @@ static int rzv2m_pinctrl_probe(struct platform_device *pdev) }spin_lock_init (&pctrl->lock); +mutex_init (&pctrl->mutex);platform_set_drvdata (pdev, pctrl);
drivers/platform/x86/ideapad-laptop.c +5 -0
@@ -1176,6 +1176,11 @@ static const struct key_entry ideapad_keymap[] = { { KE_IGNORE, 0x03 | IDEAPAD_WMI_KEY },/* Customizable Lenovo Hotkey ("star" with 'S' inside) */ { KE_KEY, 0x01 | IDEAPAD_WMI_KEY, { KEY_FAVORITES } }, + { KE_KEY, 0x04 | IDEAPAD_WMI_KEY, { KEY_SELECTIVE_SCREENSHOT } }, +/* Lenovo Support */ + { KE_KEY, 0x07 | IDEAPAD_WMI_KEY, { KEY_HELP } }, + { KE_KEY, 0x0e | IDEAPAD_WMI_KEY, { KEY_PICKUP_PHONE } }, + { KE_KEY, 0x0f | IDEAPAD_WMI_KEY, { KEY_HANGUP_PHONE } },/* Dark mode toggle */ { KE_KEY, 0x13 | IDEAPAD_WMI_KEY, { KEY_PROG1 } }, /* Sound profile switch */
drivers/s390/crypto/zcrypt_msgtype6.c +29 -18
82 lines not on this page · raw message
drivers/scsi/raid_class.c +0 -48
54 lines not on this page · raw message
drivers/scsi/snic/snic_disc.c +1 -2
@@ -303,12 +303,11 @@ snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid)"Snic Tgt: device_add, with err = %d\n" , ret); -put_device (&tgt->dev);put_device (&snic->shost->shost_gendev);spin_lock_irqsave (snic->shost->host_lock, flags);list_del (&tgt->list);spin_unlock_irqrestore (snic->shost->host_lock, flags); -kfree (tgt); +put_device (&tgt->dev); tgt =NULL ;return tgt;
drivers/thunderbolt/tmu.c +2 -1
@@ -415,7 +415,8 @@ int tb_switch_tmu_disable(struct tb_switch *sw)* uni-directional mode and we don't want to change it's TMU * mode. */ -tb_switch_tmu_rate_write (sw,TB_SWITCH_TMU_RATE_OFF ); + ret =tb_switch_tmu_rate_write (sw,TB_SWITCH_TMU_RATE_OFF ); +return ret;tb_port_tmu_time_sync_disable (up); ret =tb_port_tmu_time_sync_disable (down);
drivers/video/aperture.c +16 -15
@@ -298,14 +298,6 @@ int aperture_remove_conflicting_devices(resource_size_t base, resource_size_t siaperture_detach_devices (base, size); -/* -* If this is the primary adapter, there could be a VGA device -* that consumes the VGA framebuffer I/O range. Remove this device -* as well. -*/ -if (primary) -aperture_detach_devices (VGA_FB_PHYS_BASE ,VGA_FB_PHYS_SIZE ); -return 0 ; }EXPORT_SYMBOL (aperture_remove_conflicting_devices);
@@ -344,13 +336,22 @@ int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *naaperture_detach_devices (base, size); } -/* -* WARNING: Apparently we must kick fbdev drivers before vgacon, -* otherwise the vga fbdev driver falls over. -*/ - ret =vga_remove_vgacon (pdev); -if (ret) -return ret; +if (primary) { +/* +* If this is the primary adapter, there could be a VGA device +* that consumes the VGA framebuffer I/O range. Remove this +* device as well. +*/ +aperture_detach_devices (VGA_FB_PHYS_BASE ,VGA_FB_PHYS_SIZE ); + +/* +* WARNING: Apparently we must kick fbdev drivers before vgacon, +* otherwise the vga fbdev driver falls over. +*/ + ret =vga_remove_vgacon (pdev); +if (ret) +return ret; + }return 0 ;
drivers/video/fbdev/aty/radeon_base.c +1 -9
@@ -2238,14 +2238,6 @@ static const struct bin_attribute edid2_attr = { .read = radeon_show_edid2, }; -static int radeon_kick_out_firmware_fb (struct pci_dev *pdev) -{ -resource_size_t base =pci_resource_start (pdev,0 ); -resource_size_t size =pci_resource_len (pdev,0 ); - -return aperture_remove_conflicting_devices (base, size, false,KBUILD_MODNAME ); -} -static int radeonfb_pci_register (struct pci_dev *pdev,const struct pci_device_id *ent) {
@@ -2296,7 +2288,7 @@ static int radeonfb_pci_register(struct pci_dev *pdev, rinfo->fb_base_phys =pci_resource_start (pdev,0 ); rinfo->mmio_base_phys =pci_resource_start (pdev,2 ); - ret =radeon_kick_out_firmware_fb (pdev); + ret =aperture_remove_conflicting_pci_devices (pdev,KBUILD_MODNAME );if (ret) goto err_release_fb;
fs/attr.c +1 -0
@@ -47,6 +47,7 @@ int setattr_should_drop_sgid(struct user_namespace *mnt_userns,return ATTR_KILL_SGID ;return 0 ; } +EXPORT_SYMBOL (setattr_should_drop_sgid);/** * setattr_should_drop_suidgid - determine whether the set{g,u}id bit needs to
fs/internal.h +0 -2
@@ -242,5 +242,3 @@ ssize_t __kernel_write_iter(struct file *file, struct iov_iter *from, loff_t *po/* * fs/attr.c */ -int setattr_should_drop_sgid (struct user_namespace *mnt_userns, -const struct inode *inode);
fs/jbd2/checkpoint.c +53 -100
264 lines not on this page · raw message
fs/jbd2/commit.c +1 -2
@@ -1171,8 +1171,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)spin_lock (&journal->j_list_lock); commit_transaction->t_state =T_FINISHED ;/* Check if the transaction can be dropped now that we are finished */ -if (commit_transaction->t_checkpoint_list ==NULL && - commit_transaction->t_checkpoint_io_list ==NULL ) { +if (commit_transaction->t_checkpoint_list ==NULL ) {__jbd2_journal_drop_transaction (journal, commit_transaction);jbd2_journal_free_transaction (commit_transaction); }
fs/jbd2/transaction.c +5 -12
@@ -1784,8 +1784,7 @@ int jbd2_journal_forget(handle_t *handle, struct buffer_head *bh)* Otherwise, if the buffer has been written to disk, * it is safe to remove the checkpoint and drop it. */ -if (!buffer_dirty (bh)) { -__jbd2_journal_remove_checkpoint (jh); +if (jbd2_journal_try_remove_checkpoint (jh) >=0 ) {spin_unlock (&journal->j_list_lock); goto drop; }
@@ -2112,20 +2111,14 @@ __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh) jh =bh2jh (bh); -if (buffer_locked (bh) ||buffer_dirty (bh)) - goto out; -if (jh->b_next_transaction !=NULL || jh->b_transaction !=NULL ) - goto out; +return ;spin_lock (&journal->j_list_lock); -if (jh->b_cp_transaction !=NULL ) { -/* written-back checkpointed metadata buffer */ -JBUFFER_TRACE (jh,"remove from checkpoint list" ); -__jbd2_journal_remove_checkpoint (jh); - } +/* Remove written-back checkpointed metadata buffer */ +if (jh->b_cp_transaction !=NULL ) +jbd2_journal_try_remove_checkpoint (jh);spin_unlock (&journal->j_list_lock); -out:return ; }
fs/nfs/direct.c +16 -10
@@ -474,20 +474,26 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter,return result; } -static void -nfs_direct_join_group (struct list_head *list,struct inode *inode) +static void nfs_direct_join_group (struct list_head *list,struct inode *inode) { -struct nfs_page *req, *next; +struct nfs_page *req, *subreq;list_for_each_entry (req, list, wb_list) { -if (req->wb_head != req || req->wb_this_page == req) +if (req->wb_head != req)continue ; -for (next = req->wb_this_page; - next != req->wb_head; - next = next->wb_this_page) { -nfs_list_remove_request (next); -nfs_release_request (next); - } + subreq = req->wb_this_page; +if (subreq == req) +continue ; +do { +/* +* Remove subrequests from this list before freeing +* them in the call to nfs_join_page_group(). +*/ +if (!list_empty (&subreq->wb_list)) { +nfs_list_remove_request (subreq); +nfs_release_request (subreq); + } + }while ((subreq = subreq->wb_this_page) != req);nfs_join_page_group (req, inode); } }
fs/nfs/inode.c +1 -3
@@ -717,9 +717,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr,if ((attr->ia_valid &ATTR_KILL_SUID ) !=0 && inode->i_mode &S_ISUID ) inode->i_mode &= ~S_ISUID ; -if ((attr->ia_valid &ATTR_KILL_SGID ) !=0 && - (inode->i_mode & (S_ISGID |S_IXGRP )) == - (S_ISGID |S_IXGRP )) +if (setattr_should_drop_sgid (&init_user_ns, inode)) inode->i_mode &= ~S_ISGID ;if ((attr->ia_valid &ATTR_MODE ) !=0 ) {int mode = attr->ia_mode &S_IALLUGO ;
fs/nfs/nfs42proc.c +2 -3
@@ -1359,7 +1359,6 @@ ssize_t nfs42_proc_getxattr(struct inode *inode, const char *name,for (i =0 ; i < np; i++) { pages[i] =alloc_page (GFP_KERNEL );if (!pages[i]) { - np = i +1 ; err = -ENOMEM ; goto out; }
@@ -1383,8 +1382,8 @@ ssize_t nfs42_proc_getxattr(struct inode *inode, const char *name, }while (exception.retry); out: -while (--np >=0 ) -__free_page (pages[np]); +while (--i >=0 ) +__free_page (pages[i]);kfree (pages);return err;
fs/nfs/nfs4proc.c +10 -4
@@ -5995,9 +5995,8 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, out_ok: ret = res.acl_len; out_free: -for (i =0 ; i < npages; i++) -if (pages[i]) -__free_page (pages[i]); +while (--i >=0 ) +__free_page (pages[i]);if (res.acl_scratch)__free_page (res.acl_scratch);kfree (pages);
@@ -7171,8 +7170,15 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) }else if (!nfs4_update_lock_stateid (lsp, &data->res.stateid)) goto out_restart;break ; -case -NFS4ERR_BAD_STATEID :case -NFS4ERR_OLD_STATEID : +if (data->arg.new_lock_owner !=0 && +nfs4_refresh_open_old_stateid (&data->arg.open_stateid, + lsp->ls_state)) + goto out_restart; +if (nfs4_refresh_lock_old_stateid (&data->arg.lock_stateid, lsp)) + goto out_restart; + fallthrough; +case -NFS4ERR_BAD_STATEID :case -NFS4ERR_STALE_STATEID :case -NFS4ERR_EXPIRED :if (data->arg.new_lock_owner !=0 ) {
fs/nfsd/nfs4state.c +1 -1
@@ -1368,9 +1368,9 @@ static void revoke_delegation(struct nfs4_delegation *dp)WARN_ON (!list_empty (&dp->dl_recall_lru));if (clp->cl_minorversion) { +spin_lock (&clp->cl_lock); dp->dl_stid.sc_type =NFS4_REVOKED_DELEG_STID ;refcount_inc (&dp->dl_stid.sc_count); -spin_lock (&clp->cl_lock);list_add (&dp->dl_recall_lru, &clp->cl_revoked);spin_unlock (&clp->cl_lock); }
fs/nfsd/vfs.c +3 -1
@@ -321,7 +321,9 @@ nfsd_sanitize_attrs(struct inode *inode, struct iattr *iap) iap->ia_mode &= ~S_ISGID ; }else {/* set ATTR_KILL_* bits and let VFS handle it */ - iap->ia_valid |= (ATTR_KILL_SUID |ATTR_KILL_SGID ); + iap->ia_valid |=ATTR_KILL_SUID ; + iap->ia_valid |= +setattr_should_drop_sgid (&init_user_ns, inode); } } }
include/drm/display/drm_dp.h +1 -1
@@ -1525,7 +1525,7 @@ enum drm_dp_phy {#define DP_BRANCH_OUI_HEADER_SIZE 0xc#define DP_RECEIVER_CAP_SIZE 0xf -#define DP_DSC_RECEIVER_CAP_SIZE 0xf +#define DP_DSC_RECEIVER_CAP_SIZE 0x10/* DSC Capabilities 0x60 through 0x6F */ #define EDP_PSR_RECEIVER_CAP_SIZE 2#define EDP_DISPLAY_CTL_CAP_SIZE 3#define DP_LTTPR_COMMON_CAP_SIZE 8
include/drm/drm_aperture.h +3 -4
@@ -13,14 +13,13 @@ int devm_aperture_acquire_from_firmware(struct drm_device *dev, resource_size_t resource_size_t size);int drm_aperture_remove_conflicting_framebuffers (resource_size_t base,resource_size_t size, -bool primary,const struct drm_driver *req_driver); +const struct drm_driver *req_driver);int drm_aperture_remove_conflicting_pci_framebuffers (struct pci_dev *pdev,const struct drm_driver *req_driver);/** * drm_aperture_remove_framebuffers - remove all existing framebuffers -* @primary: also kick vga16fb if present * @req_driver: requesting DRM driver * * This function removes all graphics device drivers. Use this function on systems
@@ -30,9 +29,9 @@ int drm_aperture_remove_conflicting_pci_framebuffers(struct pci_dev *pdev,* 0 on success, or a negative errno code otherwise */ static inline int -drm_aperture_remove_framebuffers (bool primary,const struct drm_driver *req_driver) +drm_aperture_remove_framebuffers (const struct drm_driver *req_driver) { -return drm_aperture_remove_conflicting_framebuffers (0 , (resource_size_t)-1 , primary, +return drm_aperture_remove_conflicting_framebuffers (0 , (resource_size_t)-1 , req_driver); }
include/linux/clk.h +40 -40
104 lines not on this page · raw message
include/linux/cpuset.h +8 -4
@@ -71,8 +71,10 @@ extern void cpuset_init_smp(void);extern void cpuset_force_rebuild (void );extern void cpuset_update_active_cpus (void );extern void cpuset_wait_for_hotplug (void ); -extern void cpuset_read_lock (void ); -extern void cpuset_read_unlock (void ); +extern void inc_dl_tasks_cs (struct task_struct *task); +extern void dec_dl_tasks_cs (struct task_struct *task); +extern void cpuset_lock (void ); +extern void cpuset_unlock (void );extern void cpuset_cpus_allowed (struct task_struct *p,struct cpumask *mask);extern bool cpuset_cpus_allowed_fallback (struct task_struct *p);extern nodemask_t cpuset_mems_allowed (struct task_struct *p);
@@ -196,8 +198,10 @@ static inline void cpuset_update_active_cpus(void)static inline void cpuset_wait_for_hotplug (void ) { } -static inline void cpuset_read_lock (void ) { } -static inline void cpuset_read_unlock (void ) { } +static inline void inc_dl_tasks_cs (struct task_struct *task) { } +static inline void dec_dl_tasks_cs (struct task_struct *task) { } +static inline void cpuset_lock (void ) { } +static inline void cpuset_unlock (void ) { }static inline void cpuset_cpus_allowed (struct task_struct *p,struct cpumask *mask)
include/linux/fs.h +2 -0
@@ -3120,6 +3120,8 @@ extern struct inode *new_inode(struct super_block *sb);extern void free_inode_nonrcu (struct inode *inode);extern int setattr_should_drop_suidgid (struct user_namespace *,struct inode *);extern int file_remove_privs (struct file *); +int setattr_should_drop_sgid (struct user_namespace *mnt_userns, +const struct inode *inode);/* * This must be used for allocating filesystems specific inodes to set
include/linux/jbd2.h +1 -6
@@ -622,12 +622,6 @@ struct transaction_s*/ struct journal_head *t_checkpoint_list; -/* -* Doubly-linked circular list of all buffers submitted for IO while -* checkpointing. [j_list_lock] -*/ -struct journal_head *t_checkpoint_io_list; -/* * Doubly-linked circular list of metadata buffers being * shadowed by log IO. The IO buffers on the iobuf list and
@@ -1441,6 +1435,7 @@ extern void jbd2_journal_commit_transaction(journal_t *);void __jbd2_journal_clean_checkpoint_list (journal_t *journal,bool destroy);unsigned long jbd2_journal_shrink_checkpoint_list (journal_t *journal,unsigned long *nr_to_scan);int __jbd2_journal_remove_checkpoint (struct journal_head *); +int jbd2_journal_try_remove_checkpoint (struct journal_head *jh);void jbd2_journal_destroy_checkpoint (journal_t *journal);void __jbd2_journal_insert_checkpoint (struct journal_head *,transaction_t *);
include/linux/mm.h +29 -0
@@ -1727,6 +1727,25 @@ static inline size_t folio_size(struct folio *folio)return PAGE_SIZE <<folio_order (folio); } +/** +* folio_estimated_sharers - Estimate the number of sharers of a folio. +* @folio: The folio. +* +* folio_estimated_sharers() aims to serve as a function to efficiently +* estimate the number of processes sharing a folio. This is done by +* looking at the precise mapcount of the first subpage in the folio, and +* assuming the other subpages are the same. This may not be true for large +* folios. If you want exact mapcounts for exact calculations, look at +* page_mapcount() or folio_total_mapcount(). +* +* Return: The estimated number of processes sharing a folio. +*/ +static inline int folio_estimated_sharers (struct folio *folio) +{ +return page_mapcount (folio_page (folio,0 )); +} + +#ifndef HAVE_ARCH_MAKE_PAGE_ACCESSIBLE static inline int arch_make_page_accessible (struct page *page) {
@@ -3091,6 +3110,16 @@ static inline bool gup_must_unshare(unsigned int flags, struct page *page)if (IS_ENABLED (CONFIG_HAVE_FAST_GUP ))smp_rmb (); +/* +* During GUP-fast we might not get called on the head page for a +* hugetlb page that is mapped using cont-PTE, because GUP-fast does +* not work with the abstracted hugetlb PTEs that always point at the +* head page. For hugetlb, PageAnonExclusive only applies on the head +* page (as it cannot be partially COW-shared), so lookup the head page. +*/ +if (unlikely (!PageHead (page) &&PageHuge (page))) + page =compound_head (page); +/* * Note that PageKsm() pages cannot be exclusive, and consequently, * cannot get pinned.
include/linux/raid_class.h +0 -4
@@ -77,7 +77,3 @@ DEFINE_RAID_ATTRIBUTE(enum raid_state, state)struct raid_template *raid_class_attach (struct raid_function_template *);void raid_class_release (struct raid_template *); - -int __must_check raid_component_add (struct raid_template *,struct device *, -struct device *); -
include/linux/sched.h +3 -1
@@ -1846,7 +1846,9 @@ current_restore_flags(unsigned long orig_flags, unsigned long flags) }extern int cpuset_cpumask_can_shrink (const struct cpumask *cur,const struct cpumask *trial); -extern int task_can_attach (struct task_struct *p,const struct cpumask *cs_effective_cpus); +extern int task_can_attach (struct task_struct *p); +extern int dl_bw_alloc (int cpu,u64 dl_bw); +extern void dl_bw_free (int cpu,u64 dl_bw);#ifdef CONFIG_SMP extern void do_set_cpus_allowed (struct task_struct *p,const struct cpumask *new_mask);extern int set_cpus_allowed_ptr (struct task_struct *p,const struct cpumask *new_mask);
include/net/bonding.h +1 -10
@@ -727,23 +727,14 @@ static inline struct slave *bond_slave_has_mac(struct bonding *bond, }/* Caller must hold rcu_read_lock() for read */ -static inline bool bond_slave_has_mac_rx (struct bonding *bond,const u8 *mac) +static inline bool bond_slave_has_mac_rcu (struct bonding *bond,const u8 *mac) {struct list_head *iter;struct slave *tmp; -struct netdev_hw_addr *ha;bond_for_each_slave_rcu (bond, tmp, iter)if (ether_addr_equal_64bits (mac, tmp->dev->dev_addr))return true; - -if (netdev_uc_empty (bond->dev)) -return false; - -netdev_for_each_uc_addr (ha, bond->dev) -if (ether_addr_equal_64bits (mac, ha->addr)) -return true; -return false; }
include/net/inet_sock.h +1 -1
@@ -222,8 +222,8 @@ struct inet_sock {__s16 uc_ttl;__u16 cmsg_flags;struct ip_options_rcu __rcu *inet_opt; +atomic_t inet_id;__be16 inet_sport; -__u16 inet_id;__u8 tos;__u8 min_ttl;
include/net/ip.h +13 -2
@@ -532,8 +532,19 @@ static inline void ip_select_ident_segs(struct net *net, struct sk_buff *skb,* generator as much as we can. */ if (sk &&inet_sk (sk)->inet_daddr) { - iph->id =htons (inet_sk (sk)->inet_id); -inet_sk (sk)->inet_id += segs; +int val; + +/* avoid atomic operations for TCP, +* as we hold socket lock at this point. +*/ +if (sk_is_tcp (sk)) { +sock_owned_by_me (sk); + val =atomic_read (&inet_sk (sk)->inet_id); +atomic_set (&inet_sk (sk)->inet_id, val + segs); + }else { + val =atomic_add_return (segs, &inet_sk (sk)->inet_id); + } + iph->id =htons (val);return ; }if ((iph->frag_off &htons (IP_DF )) && !skb->ignore_df) {
include/net/mac80211.h +1 -0
@@ -6444,6 +6444,7 @@ void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap,* marks frames marked in the bitmap as having been filtered. Afterwards, it * checks if any frames in the window starting from @ssn can now be released * (in case they were only waiting for frames that were filtered.) +* (Only work correctly if @max_rx_aggregation_subframes <= 64 frames) */ void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid, u16 ssn, u64 filtered,
include/net/rtnetlink.h +2 -2
@@ -189,8 +189,8 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname,int rtnl_delete_link (struct net_device *dev);int rtnl_configure_link (struct net_device *dev,const struct ifinfomsg *ifm); -int rtnl_nla_parse_ifla (struct nlattr **tb,const struct nlattr *head,int len, -struct netlink_ext_ack *exterr); +int rtnl_nla_parse_ifinfomsg (struct nlattr **tb,const struct nlattr *nla_peer, +struct netlink_ext_ack *exterr);struct net *rtnl_get_net_ns_capable (struct sock *sk,int netnsid);#define MODULE_ALIAS_RTNL_LINK (kind) MODULE_ALIAS("rtnl-link-" kind)
include/net/sock.h +4 -3
@@ -1320,6 +1320,7 @@ struct proto {/* * Pressure flag: try to collapse. * Technical note: it is used by multiple contexts non atomically. +* Make sure to use READ_ONCE()/WRITE_ONCE() for all reads/writes. * All the __sk_mem_schedule() is of this nature: accounting * is strict, actions are advisory and have some latency. */
@@ -1448,7 +1449,7 @@ static inline bool sk_has_memory_pressure(const struct sock *sk)static inline bool sk_under_global_memory_pressure (const struct sock *sk) {return sk->sk_prot->memory_pressure && - !!*sk->sk_prot->memory_pressure; + !!READ_ONCE (*sk->sk_prot->memory_pressure); }static inline bool sk_under_memory_pressure (const struct sock *sk)
@@ -1460,7 +1461,7 @@ static inline bool sk_under_memory_pressure(const struct sock *sk) mem_cgroup_under_socket_pressure(sk->sk_memcg))return true; -return !!*sk->sk_prot->memory_pressure; +return !!READ_ONCE (*sk->sk_prot->memory_pressure); } static inline long
@@ -1537,7 +1538,7 @@ proto_memory_pressure(struct proto *prot) {if (!prot->memory_pressure)return false; -return !!*prot->memory_pressure; +return !!READ_ONCE (*prot->memory_pressure); }
include/trace/events/jbd2.h +4 -8
@@ -462,11 +462,9 @@ TRACE_EVENT(jbd2_shrink_scan_exit, TRACE_EVENT(jbd2_shrink_checkpoint_list, TP_PROTO(journal_t *journal, tid_t first_tid, tid_t tid, tid_t last_tid, - unsigned long nr_freed, unsigned long nr_scanned, - tid_t next_tid), + unsigned long nr_freed, tid_t next_tid), - TP_ARGS(journal, first_tid, tid, last_tid, nr_freed, - nr_scanned, next_tid), + TP_ARGS(journal, first_tid, tid, last_tid, nr_freed, next_tid), TP_STRUCT__entry( __field(dev_t, dev)
@@ -474,7 +472,6 @@ TRACE_EVENT(jbd2_shrink_checkpoint_list, __field(tid_t, tid) __field(tid_t, last_tid) __field(unsigned long, nr_freed) - __field(unsigned long, nr_scanned) __field(tid_t, next_tid) ),
@@ -484,15 +481,14 @@ TRACE_EVENT(jbd2_shrink_checkpoint_list, __entry->tid = tid; __entry->last_tid = last_tid; __entry->nr_freed = nr_freed; - __entry->nr_scanned = nr_scanned; __entry->next_tid = next_tid; ),TP_printk ("dev %d,%d shrink transaction %u-%u(%u) freed %lu " -"scanned %lu next transaction %u" , +"next transaction %u" ,MAJOR (__entry->dev),MINOR (__entry->dev), __entry->first_tid, __entry->tid, __entry->last_tid, - __entry->nr_freed, __entry->nr_scanned, __entry->next_tid) + __entry->nr_freed, __entry->next_tid) );#endif /* _TRACE_JBD2_H */
io_uring/msg_ring.c +83 -57
205 lines not on this page · raw message
io_uring/msg_ring.h +1 -0
@@ -2,3 +2,4 @@int io_msg_ring_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe);int io_msg_ring (struct io_kiocb *req,unsigned int issue_flags); +void io_msg_ring_cleanup (struct io_kiocb *req);
io_uring/opdef.c +1 -0
@@ -445,6 +445,7 @@ const struct io_op_def io_op_defs[] = { .name = "MSG_RING", .prep = io_msg_ring_prep, .issue = io_msg_ring, + .cleanup = io_msg_ring_cleanup, }, [IORING_OP_FSETXATTR] = { .needs_file = 1,
kernel/cgroup/cgroup.c +4 -0
@@ -57,6 +57,7 @@#include <linux/file.h> #include <linux/fs_parser.h> #include <linux/sched/cputime.h> +#include <linux/sched/deadline.h> #include <linux/psi.h> #include <net/sock.h>
Lines of this file are not shown. View the raw message.
kernel/cgroup/cpuset.c +158 -88
246 lines not on this page · raw message
kernel/sched/core.c +18 -23
41 lines not on this page · raw message
kernel/sched/deadline.c +54 -13
67 lines not on this page · raw message
net/can/raw.c +43 -34
77 lines not on this page · raw message
net/core/devlink.c deleted +0 -12547
12,547 lines not on this page · raw message
net/devlink/leftover.c new file +12550 -0
12,550 lines not on this page · raw message
net/sched/sch_api.c +40 -13
53 lines not on this page · raw message
tools/testing/selftests/drivers/net/bonding/bond-break-lacpdu-tx.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh +6 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/Makefile +48 -2
50 lines not on this page · raw message
tools/testing/selftests/net/bpf/Makefile deleted +0 -14
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/bpf/nat6to4.c deleted +0 -285
285 lines not on this page · raw message
tools/testing/selftests/net/nat6to4.c new file +285 -0
285 lines not on this page · raw message
tools/testing/selftests/net/udpgro_frglist.sh +4 -4
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.