Linux 6.4.13
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.4.13 kernel.
All users of the 6.4 kernel series must upgrade.
The updated 6.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.4.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
------------
Makefile | 2 arch/loongarch/kernel/hw_breakpoint.c | 3 arch/powerpc/mm/book3s64/subpage_prot.c | 1 arch/riscv/Kconfig | 32 - arch/riscv/kernel/compat_vdso/Makefile | 8 arch/riscv/mm/pageattr.c | 1 arch/s390/mm/gmap.c | 5 arch/x86/kernel/fpu/context.h | 3 arch/x86/kernel/fpu/core.c | 2 arch/x86/kernel/fpu/xstate.c | 7 drivers/acpi/resource.c | 6 drivers/clk/clk-devres.c | 13 drivers/dma-buf/sw_sync.c | 18 drivers/gpio/gpio-sim.c | 15 drivers/gpu/drm/drm_probe_helper.c | 68 +- drivers/gpu/drm/i915/display/intel_display_device.c | 89 +++ drivers/gpu/drm/i915/display/intel_display_device.h | 5 drivers/gpu/drm/i915/display/intel_hotplug.c | 4 drivers/gpu/drm/i915/i915_driver.c | 48 + drivers/gpu/drm/i915/intel_device_info.c | 13 drivers/gpu/drm/panfrost/panfrost_devfreq.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 6 drivers/gpu/drm/vmwgfx/vmwgfx_bo.h | 8 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 12 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 35 - drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 6 drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | 3 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 3 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/broadcom/tg3.c | 5 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/mediatek/mtk_wed.c | 12 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/mdio/mdio-bitbang.c | 4 drivers/net/veth.c | 5 drivers/net/wireless/intel/iwlwifi/Kconfig | 1 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/platform/x86/lenovo-ymc.c | 7 drivers/scsi/raid_class.c | 48 - drivers/scsi/snic/snic_disc.c | 3 drivers/spi/spi-cadence.c | 19 drivers/thunderbolt/tmu.c | 3 drivers/tty/Kconfig | 3 drivers/ufs/host/ufs-qcom.c | 2 fs/jbd2/checkpoint.c | 153 ++---- fs/jbd2/commit.c | 3 fs/jbd2/transaction.c | 17 fs/nfs/direct.c | 26 - fs/nfs/nfs42proc.c | 5 fs/nfs/nfs4proc.c | 14 fs/nfsd/nfs4state.c | 2 fs/nilfs2/segment.c | 5 fs/proc/task_mmu.c | 5 include/drm/display/drm_dp.h | 2 include/drm/drm_probe_helper.h | 1 include/linux/clk.h | 80 +-- include/linux/cpuset.h | 12 include/linux/jbd2.h | 7 include/linux/mm.h | 21 include/linux/mm_types.h | 9 include/linux/pagewalk.h | 11 include/linux/raid_class.h | 4 include/linux/sched.h | 4 include/linux/trace_events.h | 11 include/net/bonding.h | 11 include/net/inet_sock.h | 2 include/net/ip.h | 15 include/net/mac80211.h | 1 include/net/netfilter/nf_tables.h | 7 include/net/rtnetlink.h | 4 include/net/sock.h | 7 include/trace/events/jbd2.h | 12 kernel/cgroup/cgroup.c | 4 kernel/cgroup/cpuset.c | 244 ++++++---- kernel/sched/core.c | 41 - kernel/sched/deadline.c | 67 ++ kernel/sched/sched.h | 2 kernel/trace/trace.c | 15 kernel/trace/trace.h | 8 kernel/trace/trace_events_synth.c | 103 +--- 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/damon/vaddr.c | 2 mm/gup.c | 30 - mm/hmm.c | 1 mm/huge_memory.c | 3 mm/internal.h | 10 mm/ksm.c | 25 - mm/madvise.c | 11 mm/memcontrol.c | 2 mm/memory-failure.c | 12 mm/mempolicy.c | 22 mm/migrate_device.c | 1 mm/mincore.c | 1 mm/mlock.c | 1 mm/mprotect.c | 1 mm/pagewalk.c | 36 + mm/shmem.c | 6 mm/vmalloc.c | 4 mm/vmscan.c | 14 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/rtnetlink.c | 25 - net/dccp/ipv4.c | 4 net/dccp/proto.c | 20 net/devlink/leftover.c | 3 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 | 23 net/netfilter/nft_set_hash.c | 3 net/netfilter/nft_set_pipapo.c | 15 net/netfilter/nft_set_rbtree.c | 3 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 sound/soc/codecs/cs35l56.c | 31 - sound/soc/sof/ipc4-pcm.c | 3 tools/testing/selftests/drivers/net/bonding/bond-break-lacpdu-tx.sh | 4 tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh | 16 tools/testing/selftests/mm/hmm-tests.c | 7 167 files changed, 1430 insertions(+), 931 deletions(-)
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'
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
Ayush Jain (1):
selftests/mm: FOLL_LONGTERM need to be updated to 0x100
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
Chao Song (1):
ASoC: SOF: ipc4-pcm: fix possible null pointer deference
Charles Keepax (1):
ASoC: cs35l41: Correct amp_gain_tlv values
Christian Göttsche (1):
selinux: set next pointer before attaching to list
Chuck Lever (1):
xprtrdma: Remap Receive buffers after a reconnect
Daniel Golle (1):
net: ethernet: mtk_eth_soc: fix NULL pointer on hw reset
Danielle Ratson (1):
mlxsw: pci: Set time stamp fields also when its type is MIRROR_UTC
David Hildenbrand (2):
mm/gup: reintroduce FOLL_NUMA as FOLL_HONOR_NUMA_FAULT
mm/gup: handle cont-PTE hugetlb pages correctly in gup_must_unshare() via GUP-fast
David Michael (1):
drm/panfrost: Skip speed binning on EOPNOTSUPP
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 (4):
netfilter: nf_tables: validate all pending tables
netfilter: nf_tables: fix out of memory error handling
netfilter: nf_tables: defer gc run if previous batch is still pending
netfilter: nf_tables: fix kdoc warnings after gc rework
Greg Kroah-Hartman (1):
Linux 6.4.13
Günther Noack (1):
TIOCSTI: Document CAP_SYS_ADMIN behaviour in Kconfig
Hangbin Liu (2):
selftests: bonding: do not set port down before adding to bond
bonding: fix macvlan over alb bond support
Hans de Goede (1):
ACPI: resource: Fix IRQ override quirk for PCSpecialist Elimina Pro 16 M
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
Huacai Chen (1):
LoongArch: Fix hw_breakpoint_control() for watchpoints
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
Imre Deak (2):
drm: Add an HPD poll helper to reschedule the poll work drm/i915: Fix HPD polling, reenabling the output poll work as needed
Jakub Kicinski (1):
net: validate veth and vxcan peer ifindexes
Jamal Hadi Salim (1):
net/sched: fix a qdisc modification with ambiguous command request
Jani Nikula (1):
drm/i915: fix display probe for IVB Q and IVB D GT2 server
Jesse Brandeburg (1):
ice: fix receive buffer size miscalculation
Jiri Pirko (1):
devlink: add missing unregister linecard notification
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
Kees Cook (1):
tg3: Use slab_build_skb() when needed
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()
Maciej Strozek (1):
ASoC: cs35l56: Read firmware uuid from a device property instead of _SUB
Mario Limonciello (2):
pinctrl: amd: Mask wake bits on probe again
ASoC: amd: yc: Fix a non-functional mic on Lenovo 82SJ
Matt Roper (2):
drm/i915/display: Handle GMD_ID identification in display code drm/i915: Fix error handling if driver creation fails during probe
Miaohe Lin (1):
mm: memory-failure: fix unexpected return value in soft_offline_page()
Michael Ellerman (1):
ibmveth: Use dcbf rather than dcbfl
Mingzheng Xing (2):
riscv: Handle zicsr/zifencei issue between gcc and binutils
riscv: Fix build errors using binutils2.37 toolchains
Neil Armstrong (1):
scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5
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 (3):
netfilter: nf_tables: flush pending destroy work before netlink notifier
netfilter: nf_tables: GC transaction race with abort path
netfilter: nf_tables: use correct lock to protect gc_list
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
Randy Dunlap (1):
wifi: iwlwifi: mvm: add dependency for PTP clock
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()
Ryusuke Konishi (1):
nilfs2: fix general protection fault in nilfs_lookup_dirty_data_buffers()
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
Serge Semin (1):
net: mdio: mdio-bitbang: Fix C45 read/write protocol
Srinivas Goud (1):
spi: spi-cadence: Fix data corruption issues in slave mode
Suren Baghdasaryan (1):
mm: enable page walking API to lock vmas during the walk
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
Sven Schnelle (3):
tracing/synthetic: Use union instead of casts tracing/synthetic: Skip first entry for stack traces tracing/synthetic: Allocate one additional element for size
Swapnil Devesh (1):
platform/x86: lenovo-ymc: Add Lenovo Yoga 7 14ACN6 to ec_trigger_quirk_dmi_table
T.J. Mercier (1):
mm: multi-gen LRU: don't spin during memcg release
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 (2):
madvise:madvise_cold_or_pageout_pte_range(): don't use mapcount() against large folio for sharing check madvise:madvise_free_pte_range(): don't use mapcount() against large folio for sharing check
Zack Rusin (2):
drm/vmwgfx: Fix shader stage validation drm/vmwgfx: Fix possible invalid drm gem put calls
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
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 4 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/loongarch/kernel/hw_breakpoint.c +1 -2
@@ -207,8 +207,7 @@ static int hw_breakpoint_control(struct perf_event *bp,write_wb_reg (CSR_CFG_CTRL , i,0 ,CTRL_PLV_ENABLE ); }else { ctrl =encode_ctrl_reg (info->ctrl); -write_wb_reg (CSR_CFG_CTRL , i,1 , ctrl |CTRL_PLV_ENABLE | -1 << MWPnCFG3_LoadEn |1 << MWPnCFG3_StoreEn); +write_wb_reg (CSR_CFG_CTRL , i,1 , ctrl |CTRL_PLV_ENABLE ); } enable =csr_read64 (LOONGARCH_CSR_CRMD );csr_write64 (CSR_CRMD_WE | enable,LOONGARCH_CSR_CRMD );
arch/powerpc/mm/book3s64/subpage_prot.c +1 -0
@@ -143,6 +143,7 @@ static int subpage_walk_pmd_entry(pmd_t *pmd, unsigned long addr,static const struct mm_walk_ops subpage_walk_ops = { .pmd_entry = subpage_walk_pmd_entry, + .walk_lock =PGWALK_WRLOCK_VERIFY , }; static void subpage_mark_vma_nohuge(struct mm_struct *mm, unsigned long addr,
arch/riscv/Kconfig +19 -13
@@ -525,24 +525,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 - help - Newer binutils versions default to ISA spec version 20191213 which - moves some instructions from the I extension to the Zicsr and Zifencei - extensions. + # https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=98416dbb0a62579d4a7a4a76bab51b5b52fec2cd + depends on AS_IS_GNU && AS_VERSION >= 23600 + help + 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 - 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. + # 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 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/riscv/mm/pageattr.c +1 -0
@@ -102,6 +102,7 @@ static const struct mm_walk_ops pageattr_ops = { .pmd_entry = pageattr_pmd_entry, .pte_entry = pageattr_pte_entry, .pte_hole = pageattr_pte_hole, + .walk_lock = PGWALK_RDLOCK, }; static int __set_memory(unsigned long addr, int numpages, pgprot_t set_mask,
arch/s390/mm/gmap.c +5 -0
@@ -2514,6 +2514,7 @@ static int thp_split_walk_pmd_entry(pmd_t *pmd, unsigned long addr,static const struct mm_walk_ops thp_split_walk_ops = { .pmd_entry = thp_split_walk_pmd_entry, + .walk_lock =PGWALK_WRLOCK_VERIFY , };static inline void thp_split_mm (struct mm_struct *mm)
@@ -2558,6 +2559,7 @@ static int __zap_zero_pages(pmd_t *pmd, unsigned long start,static const struct mm_walk_ops zap_zero_walk_ops = { .pmd_entry = __zap_zero_pages, + .walk_lock =PGWALK_WRLOCK , };/*
@@ -2648,6 +2650,7 @@ static const struct mm_walk_ops enable_skey_walk_ops = { .hugetlb_entry = __s390_enable_skey_hugetlb, .pte_entry = __s390_enable_skey_pte, .pmd_entry = __s390_enable_skey_pmd, + .walk_lock = PGWALK_WRLOCK, };int s390_enable_skey (void )
@@ -2685,6 +2688,7 @@ static int __s390_reset_cmma(pte_t *pte, unsigned long addr,static const struct mm_walk_ops reset_cmma_walk_ops = { .pte_entry = __s390_reset_cmma, + .walk_lock =PGWALK_WRLOCK , };void s390_reset_cmma (struct mm_struct *mm)
@@ -2721,6 +2725,7 @@ static int s390_gather_pages(pte_t *ptep, unsigned long addr,static const struct mm_walk_ops gather_pages_ops = { .pte_entry = s390_gather_pages, + .walk_lock =PGWALK_RDLOCK , };/*
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,
drivers/acpi/resource.c +5 -1
@@ -501,9 +501,13 @@ static const struct dmi_system_id maingear_laptop[] = {static const struct dmi_system_id pcspecialist_laptop[] = { { .ident ="PCSpecialist Elimina Pro 16 M" , +/* +* Some models have product-name "Elimina Pro 16 M", +* others "GM6BGEQ". Match on board-name to match both. +*/ .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"PCSpecialist" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"Elimina Pro 16 M" ), +DMI_MATCH (DMI_BOARD_NAME ,"GM6BGEQ" ), }, }, { }
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
@@ -291,6 +291,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;
@@ -402,10 +411,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/drm_probe_helper.c +46 -22
89 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_display_device.c +82 -7
125 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_display_device.h +4 -1
@@ -10,6 +10,8 @@#include "display/intel_display_limits.h" +struct drm_i915_private ; +#define DEV_INFO_DISPLAY_FOR_EACH_FLAG (func) \/* Keep in alphabetical order */ \ func(cursor_needs_physical); \
@@ -81,6 +83,7 @@ struct intel_display_device_info { };const struct intel_display_device_info * -intel_display_device_probe (u16 pci_devid); +intel_display_device_probe (struct drm_i915_private *i915,bool has_gmdid, +u16 *ver,u16 *rel,u16 *step);#endif
drivers/gpu/drm/i915/display/intel_hotplug.c +2 -2
@@ -210,7 +210,7 @@ intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv)/* Enable polling and queue hotplug re-enabling. */ if (hpd_disabled) { -drm_kms_helper_poll_enable (&dev_priv->drm); +drm_kms_helper_poll_reschedule (&dev_priv->drm);mod_delayed_work (system_wq, &dev_priv->display.hotplug.reenable_work,msecs_to_jiffies (HPD_STORM_REENABLE_DELAY )); }
@@ -644,7 +644,7 @@ static void i915_hpd_poll_init_work(struct work_struct *work)drm_connector_list_iter_end (&conn_iter);if (enabled) -drm_kms_helper_poll_enable (&dev_priv->drm); +drm_kms_helper_poll_reschedule (&dev_priv->drm);mutex_unlock (&dev_priv->drm.mode_config.mutex);
drivers/gpu/drm/i915/i915_driver.c +27 -21
110 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.c +9 -4
@@ -345,7 +345,6 @@ static void ip_ver_read(struct drm_i915_private *i915, u32 offset, struct intel_static void intel_ipver_early_init (struct drm_i915_private *i915) {struct intel_runtime_info *runtime =RUNTIME_INFO (i915); -struct intel_display_runtime_info *display_runtime =DISPLAY_RUNTIME_INFO (i915);if (!HAS_GMD_ID (i915)) {drm_WARN_ON (&i915->drm,RUNTIME_INFO (i915)->graphics.ip.ver >12 );
@@ -366,8 +365,6 @@ static void intel_ipver_early_init(struct drm_i915_private *i915)RUNTIME_INFO (i915)->graphics.ip.ver =12 ;RUNTIME_INFO (i915)->graphics.ip.rel =70 ; } -ip_ver_read (i915,i915_mmio_reg_offset (GMD_ID_DISPLAY ), - (struct intel_ip_version *)&display_runtime->ip);ip_ver_read (i915,i915_mmio_reg_offset (GMD_ID_MEDIA ), &runtime->media.ip); }
@@ -574,6 +571,7 @@ void intel_device_info_driver_create(struct drm_i915_private *i915, {struct intel_device_info *info;struct intel_runtime_info *runtime; +u16 ver, rel, step;/* Setup the write-once "constant" device info */ info =mkwrite_device_info (i915);
@@ -584,11 +582,18 @@ void intel_device_info_driver_create(struct drm_i915_private *i915,memcpy (runtime, &INTEL_INFO (i915)->__runtime,sizeof (*runtime));/* Probe display support */ - info->display =intel_display_device_probe (device_id); + info->display =intel_display_device_probe (i915, info->has_gmd_id, + &ver, &rel, &step);memcpy (DISPLAY_RUNTIME_INFO (i915), &DISPLAY_INFO (i915)->__runtime_defaults,sizeof (*DISPLAY_RUNTIME_INFO (i915))); +if (info->has_gmd_id) { +DISPLAY_RUNTIME_INFO (i915)->ip.ver = ver; +DISPLAY_RUNTIME_INFO (i915)->ip.rel = rel; +DISPLAY_RUNTIME_INFO (i915)->ip.step = step; + } + runtime->device_id = device_id; }
drivers/gpu/drm/panfrost/panfrost_devfreq.c +1 -1
@@ -96,7 +96,7 @@ static int panfrost_read_speedbin(struct device *dev)* keep going without it; any other error means that we are * supposed to read the bin value, but we failed doing so. */ -if (ret != -ENOENT ) { +if (ret != -ENOENT && ret != -EOPNOTSUPP ) {DRM_DEV_ERROR (dev,"Cannot read speed-bin (%d)." , ret);return ret; }
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c +2 -4
@@ -497,10 +497,9 @@ static int vmw_user_bo_synccpu_release(struct drm_file *filp,if (!(flags & drm_vmw_synccpu_allow_cs)) {atomic_dec (&vmw_bo->cpu_writers); } -ttm_bo_put (&vmw_bo->tbo); +vmw_user_bo_unref (vmw_bo); } -drm_gem_object_put (&vmw_bo->tbo.base);return ret; }
@@ -540,8 +539,7 @@ int vmw_user_bo_synccpu_ioctl(struct drm_device *dev, void *data,return ret; ret =vmw_user_bo_synccpu_grab (vbo, arg->flags); -vmw_bo_unreference (&vbo); -drm_gem_object_put (&vbo->tbo.base); +vmw_user_bo_unref (vbo);if (unlikely (ret !=0 )) {if (ret == -ERESTARTSYS || ret == -EBUSY )return -EBUSY ;
drivers/gpu/drm/vmwgfx/vmwgfx_bo.h +8 -0
@@ -195,6 +195,14 @@ static inline struct vmw_bo *vmw_bo_reference(struct vmw_bo *buf)return buf; } +static inline void vmw_user_bo_unref (struct vmw_bo *vbo) +{ +if (vbo) { +ttm_bo_put (&vbo->tbo); +drm_gem_object_put (&vbo->tbo.base); + } +} +static inline struct vmw_bo *to_vmw_bo (struct drm_gem_object *gobj) { return container_of((gobj), struct vmw_bo, tbo.base);
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +12 -0
@@ -1513,4 +1513,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 +13 -22
@@ -1164,8 +1164,7 @@ static int vmw_translate_mob_ptr(struct vmw_private *dev_priv, }vmw_bo_placement_set (vmw_bo,VMW_BO_DOMAIN_MOB ,VMW_BO_DOMAIN_MOB ); ret =vmw_validation_add_bo (sw_context->ctx, vmw_bo); -ttm_bo_put (&vmw_bo->tbo); -drm_gem_object_put (&vmw_bo->tbo.base); +vmw_user_bo_unref (vmw_bo);if (unlikely (ret !=0 ))return ret;
@@ -1221,8 +1220,7 @@ static int vmw_translate_guest_ptr(struct vmw_private *dev_priv,vmw_bo_placement_set (vmw_bo,VMW_BO_DOMAIN_GMR |VMW_BO_DOMAIN_VRAM ,VMW_BO_DOMAIN_GMR |VMW_BO_DOMAIN_VRAM ); ret =vmw_validation_add_bo (sw_context->ctx, vmw_bo); -ttm_bo_put (&vmw_bo->tbo); -drm_gem_object_put (&vmw_bo->tbo.base); +vmw_user_bo_unref (vmw_bo);if (unlikely (ret !=0 ))return ret;
@@ -1992,7 +1990,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 ;
@@ -2115,8 +2113,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);
@@ -2133,6 +2129,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;
@@ -2141,14 +2145,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);
@@ -2207,15 +2203,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 ; }
@@ -2239,8 +2233,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;
@@ -2251,8 +2243,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/gpu/drm/vmwgfx/vmwgfx_kms.c +2 -4
@@ -1665,10 +1665,8 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev, err_out:/* vmw_user_lookup_handle takes one ref so does new_fb */ -if (bo) { -vmw_bo_unreference (&bo); -drm_gem_object_put (&bo->tbo.base); - } +if (bo) +vmw_user_bo_unref (bo);if (surface)vmw_surface_unreference (&surface);
drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c +1 -2
@@ -451,8 +451,7 @@ int vmw_overlay_ioctl(struct drm_device *dev, void *data, ret =vmw_overlay_update_stream (dev_priv, buf, arg, true); -vmw_bo_unreference (&buf); -drm_gem_object_put (&buf->tbo.base); +vmw_user_bo_unref (buf); out_unlock:mutex_unlock (&overlay->mutex);
drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +1 -2
@@ -809,8 +809,7 @@ static int vmw_shader_define(struct drm_device *dev, struct drm_file *file_priv, shader_type, num_input_sig, num_output_sig, tfile, shader_handle); out_bad_arg: -vmw_bo_unreference (&buffer); -drm_gem_object_put (&buffer->tbo.base); +vmw_user_bo_unref (buffer);return ret; }
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
@@ -1006,6 +1006,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
@@ -66,6 +66,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
@@ -1081,6 +1081,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
@@ -617,7 +617,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/broadcom/tg3.c +4 -1
@@ -6881,7 +6881,10 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) ri->data =NULL ; - skb =build_skb (data, frag_size); +if (frag_size) + skb =build_skb (data, frag_size); +else + skb =slab_build_skb (data);if (!skb) {tg3_frag_free (frag_size !=0 , data); goto drop_it_no_recycle;
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
@@ -393,7 +393,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
@@ -1171,7 +1171,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;
@@ -1286,7 +1286,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;
@@ -1340,7 +1340,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;
@@ -1653,7 +1653,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
@@ -631,11 +612,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);
@@ -644,14 +631,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
@@ -215,7 +215,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
@@ -3955,7 +3955,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
@@ -1385,18 +1385,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)) {
@@ -1406,6 +1394,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
@@ -546,7 +546,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
@@ -4016,9 +4016,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/mediatek/mtk_wed.c +10 -2
@@ -221,9 +221,13 @@ void mtk_wed_fe_reset(void)for (i =0 ; i <ARRAY_SIZE (hw_list); i++) {struct mtk_wed_hw *hw = hw_list[i]; -struct mtk_wed_device *dev = hw->wed_dev; +struct mtk_wed_device *dev;int err; +if (!hw) +break ; + + dev = hw->wed_dev;if (!dev || !dev->wlan.reset)continue ;
@@ -244,8 +248,12 @@ void mtk_wed_fe_reset_complete(void)for (i =0 ; i <ARRAY_SIZE (hw_list); i++) {struct mtk_wed_hw *hw = hw_list[i]; -struct mtk_wed_device *dev = hw->wed_dev; +struct mtk_wed_device *dev; + +if (!hw) +break ; + dev = hw->wed_dev;if (!dev || !dev->wlan.reset_complete)continue ;
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/mdio/mdio-bitbang.c +2 -2
@@ -186,7 +186,7 @@ int mdiobb_read_c45(struct mii_bus *bus, int phy, int devad, int reg)struct mdiobb_ctrl *ctrl = bus->priv;mdiobb_cmd_addr (ctrl, phy, devad, reg); -mdiobb_cmd (ctrl,MDIO_C45_READ , phy, reg); +mdiobb_cmd (ctrl,MDIO_C45_READ , phy, devad);return mdiobb_read_common (bus, phy); }
@@ -222,7 +222,7 @@ int mdiobb_write_c45(struct mii_bus *bus, int phy, int devad, int reg, u16 val)struct mdiobb_ctrl *ctrl = bus->priv;mdiobb_cmd_addr (ctrl, phy, devad, reg); -mdiobb_cmd (ctrl,MDIO_C45_WRITE , phy, reg); +mdiobb_cmd (ctrl,MDIO_C45_WRITE , phy, devad);return mdiobb_write_common (bus, val); }
drivers/net/veth.c +1 -4
@@ -1851,10 +1851,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/net/wireless/intel/iwlwifi/Kconfig +1 -0
@@ -66,6 +66,7 @@ config IWLMVM tristate "Intel Wireless WiFi MVM Firmware support" select WANT_DEV_COREDUMP depends on MAC80211 + depends on PTP_1588_CLOCK_OPTIONAL help This is the driver that supports the MVM firmware. The list of the devices that use this firmware is available here:
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) {
@@ -620,21 +619,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 :
@@ -648,20 +635,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 :
@@ -947,6 +931,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
@@ -664,12 +664,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
@@ -512,12 +512,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/interrupt.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/mutex.h> #include <linux/of_device.h> #include <linux/of_irq.h> #include <linux/seq_file.h>
@@ -149,10 +150,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 };
@@ -362,11 +364,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; }/*
@@ -380,6 +384,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;
@@ -391,6 +397,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);
@@ -1509,6 +1517,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/spinlock.h>
@@ -123,7 +124,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 };
@@ -322,11 +324,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; }/*
@@ -340,6 +344,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;
@@ -351,6 +357,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);
@@ -1071,6 +1079,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
@@ -1049,6 +1049,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/platform/x86/lenovo-ymc.c +7 -0
@@ -36,6 +36,13 @@ static const struct dmi_system_id ec_trigger_quirk_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "82QF"), }, }, + { + /* Lenovo Yoga 7 14ACN6 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "82N7"), + }, + }, { } };
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/spi/spi-cadence.c +12 -7
@@ -316,12 +316,6 @@ static void cdns_spi_process_fifo(struct cdns_spi *xspi, int ntx, int nrx) xspi->rx_bytes -= nrx;while (ntx || nrx) { -/* When xspi in busy condition, bytes may send failed, -* then spi control did't work thoroughly, add one byte delay -*/ -if (cdns_spi_read (xspi,CDNS_SPI_ISR ) &CDNS_SPI_IXR_TXFULL ) -udelay (10 ); -if (ntx) {if (xspi->txbuf)cdns_spi_write (xspi,CDNS_SPI_TXD , *xspi->txbuf++);
@@ -391,6 +385,11 @@ static irqreturn_t cdns_spi_irq(int irq, void *dev_id)if (xspi->tx_bytes) {cdns_spi_process_fifo (xspi, trans_cnt, trans_cnt); }else { +/* Fixed delay due to controller limitation with +* RX_NEMPTY incorrect status +* Xilinx AR:65885 contains more details +*/ +udelay (10 );cdns_spi_process_fifo (xspi,0 , trans_cnt);cdns_spi_write (xspi,CDNS_SPI_IDR ,CDNS_SPI_IXR_DEFAULT );
@@ -438,12 +437,18 @@ static int cdns_transfer_one(struct spi_controller *ctlr,cdns_spi_setup_transfer (spi, transfer); }else {/* Set TX empty threshold to half of FIFO depth -* only if TX bytes are more than half FIFO depth. +* only if TX bytes are more than FIFO depth. */ if (xspi->tx_bytes > xspi->tx_fifo_depth)cdns_spi_write (xspi,CDNS_SPI_THLD , xspi->tx_fifo_depth >>1 ); } +/* When xspi in busy condition, bytes may send failed, +* then spi control didn't work thoroughly, add one byte delay +*/ +if (cdns_spi_read (xspi,CDNS_SPI_ISR ) &CDNS_SPI_IXR_TXFULL ) +udelay (10 ); +cdns_spi_process_fifo (xspi, xspi->tx_fifo_depth,0 );spi_transfer_delay_exec (transfer);
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/tty/Kconfig +3 -0
@@ -164,6 +164,9 @@ config LEGACY_TIOCSTI userspace depends on this functionality to continue operating normally. + Processes which run with CAP_SYS_ADMIN, such as BRLTTY, can + use TIOCSTI even when this is set to N. + This functionality can be changed at runtime with the dev.tty.legacy_tiocsti sysctl. This configuration option sets the default value of the sysctl.
drivers/ufs/host/ufs-qcom.c +1 -1
@@ -225,7 +225,7 @@ static void ufs_qcom_select_unipro_mode(struct ufs_qcom_host *host)ufs_qcom_cap_qunipro (host) ?QUNIPRO_SEL :0 , REG_UFS_CFG1); -if (host->hw_ver.major ==0x05 ) +if (host->hw_ver.major >=0x05 )ufshcd_rmwl (host->hba,QUNIPRO_G4_SEL ,0 ,REG_UFS_CFG0 );/* make sure above configuration is applied before we return */
fs/jbd2/checkpoint.c +53 -100
264 lines not on this page · raw message
fs/jbd2/commit.c +1 -2
@@ -1141,8 +1141,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
@@ -472,20 +472,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/nfs42proc.c +2 -3
@@ -1360,7 +1360,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; }
@@ -1384,8 +1383,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
@@ -6004,9 +6004,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);
@@ -7181,8 +7180,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
@@ -1354,9 +1354,9 @@ static void revoke_delegation(struct nfs4_delegation *dp)trace_nfsd_stid_revoke (&dp->dl_stid);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/nilfs2/segment.c +5 -0
@@ -725,6 +725,11 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode,struct folio *folio = fbatch.folios[i];folio_lock (folio); +if (unlikely (folio->mapping != mapping)) { +/* Exclude folios removed from the address space */ +folio_unlock (folio); +continue ; + } head =folio_buffers (folio);if (!head) {create_empty_buffers (&folio->page,i_blocksize (inode),0 );
fs/proc/task_mmu.c +5 -0
@@ -759,12 +759,14 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask,static const struct mm_walk_ops smaps_walk_ops = { .pmd_entry = smaps_pte_range, .hugetlb_entry = smaps_hugetlb_range, + .walk_lock =PGWALK_RDLOCK , };static const struct mm_walk_ops smaps_shmem_walk_ops = { .pmd_entry = smaps_pte_range, .hugetlb_entry = smaps_hugetlb_range, .pte_hole = smaps_pte_hole, + .walk_lock =PGWALK_RDLOCK , };/*
@@ -1245,6 +1247,7 @@ static int clear_refs_test_walk(unsigned long start, unsigned long end,static const struct mm_walk_ops clear_refs_walk_ops = { .pmd_entry = clear_refs_pte_range, .test_walk = clear_refs_test_walk, + .walk_lock =PGWALK_WRLOCK , }; static ssize_t clear_refs_write(struct file *file, const char __user *buf,
@@ -1621,6 +1624,7 @@ static const struct mm_walk_ops pagemap_ops = { .pmd_entry = pagemap_pmd_range, .pte_hole = pagemap_pte_hole, .hugetlb_entry = pagemap_hugetlb_range, + .walk_lock = PGWALK_RDLOCK, };/*
@@ -1932,6 +1936,7 @@ static int gather_hugetlb_stats(pte_t *pte, unsigned long hmask,static const struct mm_walk_ops show_numa_ops = { .hugetlb_entry = gather_hugetlb_stats, .pmd_entry = gather_pte_stats, + .walk_lock =PGWALK_RDLOCK , };/*
include/drm/display/drm_dp.h +1 -1
@@ -1534,7 +1534,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_probe_helper.h +1 -0
@@ -25,6 +25,7 @@ void drm_kms_helper_connector_hotplug_event(struct drm_connector *connector);void drm_kms_helper_poll_disable (struct drm_device *dev);void drm_kms_helper_poll_enable (struct drm_device *dev); +void drm_kms_helper_poll_reschedule (struct drm_device *dev);bool drm_kms_helper_is_poll_worker (void ); enum drm_mode_status drm_crtc_helper_mode_valid_fixed(struct drm_crtc *crtc,
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);
@@ -189,8 +191,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/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
@@ -1449,6 +1443,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 +15 -6
@@ -3381,15 +3381,24 @@ static inline int vm_fault_to_errno(vm_fault_t vm_fault, int foll_flags)* Indicates whether GUP can follow a PROT_NONE mapped page, or whether * a (NUMA hinting) fault is required. */ -static inline bool gup_can_follow_protnone (unsigned int flags) +static inline bool gup_can_follow_protnone (struct vm_area_struct *vma, +unsigned int flags) {/* -* FOLL_FORCE has to be able to make progress even if the VMA is -* inaccessible. Further, FOLL_FORCE access usually does not represent -* application behaviour and we should avoid triggering NUMA hinting -* faults. +* If callers don't want to honor NUMA hinting faults, no need to +* determine if we would actually have to trigger a NUMA hinting fault. */ -return flags &FOLL_FORCE ; +if (!(flags &FOLL_HONOR_NUMA_FAULT )) +return true; + +/* +* NUMA hinting faults don't apply in inaccessible (PROT_NONE) VMAs. +* +* Requiring a fault here even for inaccessible VMAs would mean that +* FOLL_FORCE cannot make any progress, because handle_mm_fault() +* refuses to process NUMA hinting faults in inaccessible VMAs. +*/ +return !vma_is_accessible (vma); }typedef int (*pte_fn_t )(pte_t *pte,unsigned long addr,void *data);
include/linux/mm_types.h +9 -0
@@ -1286,6 +1286,15 @@ enum {FOLL_PCI_P2PDMA =1 <<10 ,/* allow interrupts from generic signals */ FOLL_INTERRUPTIBLE =1 <<11 , +/* +* Always honor (trigger) NUMA hinting faults. +* +* FOLL_WRITE implicitly honors NUMA hinting faults because a +* PROT_NONE-mapped page is not writable (exceptions with FOLL_FORCE +* apply). get_user_pages_fast_only() always implicitly honors NUMA +* hinting faults. +*/ + FOLL_HONOR_NUMA_FAULT = 1 << 12, /* See also internal only FOLL flags in mm/internal.h */ };
include/linux/pagewalk.h +11 -0
@@ -6,6 +6,16 @@struct mm_walk ; +/* Locking requirement during a page walk. */ +enum page_walk_lock { +/* mmap_lock should be locked for read to stabilize the vma tree */ +PGWALK_RDLOCK =0 , +/* vma will be write-locked during the walk */ +PGWALK_WRLOCK =1 , +/* vma is expected to be already write-locked during the walk */ +PGWALK_WRLOCK_VERIFY =2 , +}; +/** * struct mm_walk_ops - callbacks for walk_page_range * @pgd_entry: if set, called for each non-empty PGD (top-level) entry
@@ -66,6 +76,7 @@ struct mm_walk_ops {int (*pre_vma)(unsigned long start,unsigned long end,struct mm_walk *walk);void (*post_vma)(struct mm_walk *walk); +enum page_walk_lock walk_lock; };/*
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
@@ -1852,7 +1852,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/linux/trace_events.h +11 -0
@@ -59,6 +59,17 @@ int trace_raw_output_prep(struct trace_iterator *iter, extern __printf(2, 3) void trace_event_printf(struct trace_iterator *iter, const char *fmt, ...); +/* Used to find the offset and length of dynamic fields in trace events */ +struct trace_dynamic_info { +#ifdef CONFIG_CPU_BIG_ENDIAN + u16 offset; + u16 len; +#else + u16 len; + u16 offset; +#endif +}; + /* * The trace entry - the most basic unit of tracing. This is what * is printed in the end as a single line in the trace output, such as:
include/net/bonding.h +1 -10
@@ -724,23 +724,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
@@ -6578,6 +6578,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/netfilter/nf_tables.h +7 -0
@@ -534,6 +534,7 @@ struct nft_set_elem_expr {* @expr: stateful expression * @ops: set ops * @flags: set flags +* @dead: set will be freed, never cleared * @genmask: generation mask * @klen: key length * @dlen: data length
@@ -586,6 +587,11 @@ static inline void *nft_set_priv(const struct nft_set *set)return (void *)set->data; } +static inline bool nft_set_gc_is_pending (const struct nft_set *s) +{ +return refcount_read (&s->refs) !=1 ; +} +static inline struct nft_set *nft_set_container_of (const void *priv) {return (void *)priv - offsetof(struct nft_set , data);
@@ -1817,6 +1823,7 @@ struct nftables_pernet {u64 table_handle;unsigned int base_seq;unsigned int gc_seq; +u8 validate_state; };extern unsigned int nf_tables_net_id;
include/net/rtnetlink.h +2 -2
@@ -190,8 +190,8 @@ int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *int rtnl_configure_link (struct net_device *dev,const struct ifinfomsg *ifm,u32 portid,const struct nlmsghdr *nlh); -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
@@ -1324,6 +1324,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. */
@@ -1424,7 +1425,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)
@@ -1436,7 +1437,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
@@ -1513,7 +1514,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 */
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>
@@ -6696,6 +6697,9 @@ void cgroup_exit(struct task_struct *tsk)list_add_tail (&tsk->cg_list, &cset->dying_tasks); cset->nr_tasks--; +if (dl_task (tsk)) +dec_dl_tasks_cs (tsk); +WARN_ON_ONCE (cgroup_task_frozen (tsk));if (unlikely (!(tsk->flags &PF_KTHREAD ) &&test_bit (CGRP_FREEZE , &task_dfl_cgroup (tsk)->flags)))
kernel/cgroup/cpuset.c +158 -86
367 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
kernel/trace/trace_events_synth.c +41 -62
103 lines not on this page · raw message
net/can/raw.c +43 -34
77 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.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.