Linux 5.15.18
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.18 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm64/include/asm/extable.h | 9 - arch/arm64/include/asm/memory.h | 5 arch/arm64/kernel/traps.c | 2 arch/arm64/mm/extable.c | 13 + arch/arm64/mm/ptdump.c | 2 arch/arm64/net/bpf_jit_comp.c | 7 - drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 14 +- drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c | 6 drivers/gpu/drm/i915/gem/i915_gem_object_types.h | 1 drivers/gpu/drm/i915/gem/i915_gem_pages.c | 10 + drivers/gpu/drm/i915/gt/intel_gt.c | 102 +++++++++++++++ drivers/gpu/drm/i915/gt/intel_gt.h | 2 drivers/gpu/drm/i915/gt/intel_gt_types.h | 2 drivers/gpu/drm/i915/i915_reg.h | 11 + drivers/gpu/drm/i915/i915_vma.c | 3 drivers/gpu/drm/i915/intel_uncore.c | 26 +++ drivers/gpu/drm/i915/intel_uncore.h | 2 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 5 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 33 ++-- drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 2 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 2 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 11 + drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 6 drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h | 2 drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | 3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 75 +++++++---- drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 13 + fs/io_uring.c | 34 +++-- fs/select.c | 63 ++++----- kernel/rcu/tree.c | 7 - mm/memcontrol.c | 99 ++++++++++---- 32 files changed, 416 insertions(+), 158 deletions(-)
Greg Kroah-Hartman (1):
Linux 5.15.18
Harry Wentland (1):
drm/amdgpu: Use correct VIEWPORT_DIMENSION for DCN2
Jan Kara (1):
select: Fix indefinitely sleeping task in poll_schedule_timeout()
Manish Chopra (2):
bnx2x: Utilize firmware 7.13.21.0
bnx2x: Invalidate fastpath HSI version for VFs
Mario Limonciello (1):
drm/amd/display: reset dcn31 SMU mailbox on failures
Mathias Krause (1):
drm/vmwgfx: Fix stale file descriptors on failed usercopy
Paul E. McKenney (1):
rcu: Tighten rcu_advance_cbs_nowake() checks
Pavel Begunkov (1):
io_uring: fix not released cached task refs
Russell King (1):
arm64/bpf: Remove 128MB limit for BPF JIT programs
Shakeel Butt (3):
memcg: flush stats only if updated
memcg: unify memcg stat flushing
memcg: better bounds on the memcg stats updates
Tvrtko Ursulin (1):
drm/i915: Flush TLBs before releasing backing store
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 17 +SUBLEVEL = 18 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/include/asm/extable.h +0 -9
@@ -22,15 +22,6 @@ struct exception_table_entry#define ARCH_HAS_RELATIVE_EXTABLE -static inline bool in_bpf_jit (struct pt_regs *regs) -{ -if (!IS_ENABLED (CONFIG_BPF_JIT )) -return false; - -return regs->pc >=BPF_JIT_REGION_START && - regs->pc <BPF_JIT_REGION_END ; -} -#ifdef CONFIG_BPF_JIT int arm64_bpf_fixup_exception (const struct exception_table_entry *ex,struct pt_regs *regs);
arch/arm64/include/asm/memory.h +1 -4
@@ -44,11 +44,8 @@#define _PAGE_OFFSET (va) (-(UL(1) << (va)))#define PAGE_OFFSET (_PAGE_OFFSET(VA_BITS))#define KIMAGE_VADDR (MODULES_END) -#define BPF_JIT_REGION_START (_PAGE_END(VA_BITS_MIN)) -#define BPF_JIT_REGION_SIZE (SZ_128M) -#define BPF_JIT_REGION_END (BPF_JIT_REGION_START + BPF_JIT_REGION_SIZE)#define MODULES_END (MODULES_VADDR + MODULES_VSIZE) -#define MODULES_VADDR (BPF_JIT_REGION_END) +#define MODULES_VADDR (_PAGE_END(VA_BITS_MIN))#define MODULES_VSIZE (SZ_128M)#define VMEMMAP_START (-(UL(1) << (VA_BITS - VMEMMAP_SHIFT)))#define VMEMMAP_END (VMEMMAP_START + VMEMMAP_SIZE)
arch/arm64/kernel/traps.c +1 -1
@@ -988,7 +988,7 @@ static struct break_hook bug_break_hook = {static int reserved_fault_handler (struct pt_regs *regs,unsigned int esr) {pr_err ("%s generated an invalid instruction at %pS!\n" , -in_bpf_jit (regs) ?"BPF JIT" :"Kernel text patching" , +"Kernel text patching" , (void *)instruction_pointer (regs));/* We cannot handle this */
arch/arm64/mm/extable.c +9 -4
@@ -9,14 +9,19 @@int fixup_exception (struct pt_regs *regs) {const struct exception_table_entry *fixup; +unsigned long addr; - fixup =search_exception_tables (instruction_pointer (regs)); -if (!fixup) -return 0 ; + addr =instruction_pointer (regs); -if (in_bpf_jit (regs)) +/* Search the BPF tables first, these are formatted differently */ + fixup =search_bpf_extables (addr); +if (fixup)return arm64_bpf_fixup_exception (fixup, regs); + fixup =search_exception_tables (addr); +if (!fixup) +return 0 ; + regs->pc = (unsigned long )&fixup->fixup + fixup->fixup;return 1 ; }
arch/arm64/mm/ptdump.c +0 -2
@@ -41,8 +41,6 @@ static struct addr_marker address_markers[] = { { 0 /* KASAN_SHADOW_START */, "Kasan shadow start" }, { KASAN_SHADOW_END, "Kasan shadow end" }, #endif - { BPF_JIT_REGION_START, "BPF start" }, - { BPF_JIT_REGION_END, "BPF end" }, { MODULES_VADDR, "Modules start" }, { MODULES_END, "Modules end" }, { VMALLOC_START, "vmalloc() area" },
arch/arm64/net/bpf_jit_comp.c +2 -5
@@ -1138,15 +1138,12 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)u64 bpf_jit_alloc_exec_limit (void ) { -return BPF_JIT_REGION_SIZE ; +return VMALLOC_END -VMALLOC_START ; }void *bpf_jit_alloc_exec (unsigned long size) { -return __vmalloc_node_range (size,PAGE_SIZE ,BPF_JIT_REGION_START , -BPF_JIT_REGION_END ,GFP_KERNEL , -PAGE_KERNEL ,0 ,NUMA_NO_NODE , -__builtin_return_address (0 )); +return vmalloc (size); }void bpf_jit_free_exec (void *addr)
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +13 -1
@@ -72,6 +72,9 @@#define mmDCHUBBUB_SDPIF_MMIO_CNTRL_0 0x049d#define mmDCHUBBUB_SDPIF_MMIO_CNTRL_0_BASE_IDX 2 +#define mmHUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_DCN2 0x05ea +#define mmHUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_DCN2_BASE_IDX 2 +static const char *gfxhub_client_ids[] = {"CB" ,
@@ -1103,6 +1106,8 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)u32 d1vga_control =RREG32_SOC15 (DCE ,0 , mmD1VGA_CONTROL);unsigned size; +/* TODO move to DC so GMC doesn't need to hard-code DCN registers */ +if (REG_GET_FIELD (d1vga_control,D1VGA_CONTROL ,D1VGA_MODE_ENABLE )) { size =AMDGPU_VBIOS_VGA_ALLOCATION ; }else {
@@ -1110,7 +1115,6 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev)switch (adev->asic_type) {case CHIP_RAVEN : -case CHIP_RENOIR : viewport =RREG32_SOC15 (DCE ,0 , mmHUBP0_DCSURF_PRI_VIEWPORT_DIMENSION); size = (REG_GET_FIELD(viewport, HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT) *
@@ -1118,6 +1122,14 @@ static unsigned gmc_v9_0_get_vbios_fb_size(struct amdgpu_device *adev) HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH) * 4);break ; +case CHIP_RENOIR : + viewport =RREG32_SOC15 (DCE ,0 , mmHUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_DCN2); + size = (REG_GET_FIELD (viewport, +HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION ,PRI_VIEWPORT_HEIGHT ) * +REG_GET_FIELD (viewport, +HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION ,PRI_VIEWPORT_WIDTH ) * +4 ); +break ;case CHIP_VEGA10 :case CHIP_VEGA12 :case CHIP_VEGA20 :
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c +6 -0
@@ -119,6 +119,12 @@ int dcn31_smu_send_msg_with_param( result =dcn31_smu_wait_for_response (clk_mgr,10 ,200000 ); +if (result == VBIOSSMC_Result_Failed) { +ASSERT (0 ); +REG_WRITE (MP1_SMN_C2PMSG_91 , VBIOSSMC_Result_OK); +return -1 ; + } +if (IS_SMU_TIMEOUT (result)) {ASSERT (0 );dm_helpers_smu_timeout (CTX , msg_id, param,10 *200000 );
drivers/gpu/drm/i915/gem/i915_gem_object_types.h +1 -0
@@ -298,6 +298,7 @@ struct drm_i915_gem_object { I915_BO_ALLOC_USER)#define I915_BO_READONLY BIT(4)#define I915_TILING_QUIRK_BIT 5/* unknown swizzling; do not release! */ +#define I915_BO_WAS_BOUND_BIT 6/** * @mem_flags - Mutable placement-related flags
drivers/gpu/drm/i915/gem/i915_gem_pages.c +10 -0
@@ -10,6 +10,8 @@#include "i915_gem_lmem.h" #include "i915_gem_mman.h" +#include "gt/intel_gt.h" +void __i915_gem_object_set_pages (struct drm_i915_gem_object *obj,struct sg_table *pages,unsigned int sg_page_sizes)
@@ -218,6 +220,14 @@ __i915_gem_object_unset_pages(struct drm_i915_gem_object *obj)__i915_gem_object_reset_page_iter (obj); obj->mm.page_sizes.phys = obj->mm.page_sizes.sg =0 ; +if (test_and_clear_bit (I915_BO_WAS_BOUND_BIT , &obj->flags)) { +struct drm_i915_private *i915 =to_i915 (obj->base.dev); +intel_wakeref_t wakeref; + + with_intel_runtime_pm_if_active(&i915->runtime_pm, wakeref) +intel_gt_invalidate_tlbs (&i915->gt); + } +return pages; }
drivers/gpu/drm/i915/gt/intel_gt.c +102 -0
111 lines not on this page · raw message
drivers/gpu/drm/i915/gt/intel_gt.h +2 -0
@@ -90,4 +90,6 @@ void intel_gt_info_print(const struct intel_gt_info *info,void intel_gt_watchdog_work (struct work_struct *work); +void intel_gt_invalidate_tlbs (struct intel_gt *gt); +#endif /* __INTEL_GT_H__ */
drivers/gpu/drm/i915/gt/intel_gt_types.h +2 -0
@@ -72,6 +72,8 @@ struct intel_gt {struct intel_uc uc; +struct mutex tlb_invalidate_lock; +struct intel_gt_timelines {spinlock_t lock;/* protects active_list */ struct list_head active_list;
drivers/gpu/drm/i915/i915_reg.h +11 -0
@@ -2669,6 +2669,12 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)#define GAMT_CHKN_DISABLE_DYNAMIC_CREDIT_SHARING (1 << 28)#define GAMT_CHKN_DISABLE_I2M_CYCLE_ON_WR_PORT (1 << 24) +#define GEN8_RTCR _MMIO(0x4260) +#define GEN8_M1TCR _MMIO(0x4264) +#define GEN8_M2TCR _MMIO(0x4268) +#define GEN8_BTCR _MMIO(0x426c) +#define GEN8_VTCR _MMIO(0x4270) +#if 0 #define PRB0_TAIL _MMIO(0x2030)#define PRB0_HEAD _MMIO(0x2034)
@@ -2763,6 +2769,11 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)#define FAULT_VA_HIGH_BITS (0xf << 0)#define FAULT_GTT_SEL (1 << 4) +#define GEN12_GFX_TLB_INV_CR _MMIO(0xced8) +#define GEN12_VD_TLB_INV_CR _MMIO(0xcedc) +#define GEN12_VE_TLB_INV_CR _MMIO(0xcee0) +#define GEN12_BLT_TLB_INV_CR _MMIO(0xcee4) +#define GEN12_AUX_ERR_DBG _MMIO(0x43f4)#define FPGA_DBG _MMIO(0x42300)
drivers/gpu/drm/i915/i915_vma.c +3 -0
@@ -434,6 +434,9 @@ int i915_vma_bind(struct i915_vma *vma, vma->ops->bind_vma (vma->vm,NULL , vma, cache_level, bind_flags); } +if (vma->obj) +set_bit (I915_BO_WAS_BOUND_BIT , &vma->obj->flags); +atomic_or (bind_flags, &vma->flags);return 0 ; }
drivers/gpu/drm/i915/intel_uncore.c +22 -4
@@ -718,7 +718,8 @@ void intel_uncore_forcewake_get__locked(struct intel_uncore *uncore, }static void __intel_uncore_forcewake_put (struct intel_uncore *uncore, -enum forcewake_domains fw_domains) +enum forcewake_domains fw_domains, +bool delayed) {struct intel_uncore_forcewake_domain *domain;unsigned int tmp;
@@ -733,7 +734,11 @@ static void __intel_uncore_forcewake_put(struct intel_uncore *uncore,continue ; } - uncore->funcs.force_wake_put (uncore, domain->mask); +if (delayed && + !(domain->uncore->fw_domains_timer & domain->mask)) +fw_domain_arm_timer (domain); +else + uncore->funcs.force_wake_put (uncore, domain->mask); } }
@@ -754,7 +759,20 @@ void intel_uncore_forcewake_put(struct intel_uncore *uncore,return ;spin_lock_irqsave (&uncore->lock, irqflags); -__intel_uncore_forcewake_put (uncore, fw_domains); +__intel_uncore_forcewake_put (uncore, fw_domains, false); +spin_unlock_irqrestore (&uncore->lock, irqflags); +} + +void intel_uncore_forcewake_put_delayed (struct intel_uncore *uncore, +enum forcewake_domains fw_domains) +{ +unsigned long irqflags; + +if (!uncore->funcs.force_wake_put) +return ; + +spin_lock_irqsave (&uncore->lock, irqflags); +__intel_uncore_forcewake_put (uncore, fw_domains, true);spin_unlock_irqrestore (&uncore->lock, irqflags); }
@@ -796,7 +814,7 @@ void intel_uncore_forcewake_put__locked(struct intel_uncore *uncore,if (!uncore->funcs.force_wake_put)return ; -__intel_uncore_forcewake_put (uncore, fw_domains); +__intel_uncore_forcewake_put (uncore, fw_domains, false); }void assert_forcewakes_inactive (struct intel_uncore *uncore)
drivers/gpu/drm/i915/intel_uncore.h +2 -0
@@ -229,6 +229,8 @@ void intel_uncore_forcewake_get(struct intel_uncore *uncore, enum forcewake_domains domains);void intel_uncore_forcewake_put (struct intel_uncore *uncore,enum forcewake_domains domains); +void intel_uncore_forcewake_put_delayed (struct intel_uncore *uncore, +enum forcewake_domains domains);void intel_uncore_forcewake_flush (struct intel_uncore *uncore,enum forcewake_domains fw_domains);
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -3
@@ -1112,15 +1112,14 @@ extern int vmw_execbuf_fence_commands(struct drm_file *file_priv,struct vmw_private *dev_priv, struct vmw_fence_obj **p_fence, uint32_t *p_handle); -extern void vmw_execbuf_copy_fence_user (struct vmw_private *dev_priv, +extern int vmw_execbuf_copy_fence_user (struct vmw_private *dev_priv,struct vmw_fpriv *vmw_fp,int ret,struct drm_vmw_fence_rep __user *user_fence_rep,struct vmw_fence_obj *fence,uint32_t fence_handle, -int32_t out_fence_fd, -struct sync_file *sync_file); +int32_t out_fence_fd);bool vmw_cmd_describe (const void *buf,u32 *size,char const **cmd);/**
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +17 -16
@@ -3823,17 +3823,17 @@ int vmw_execbuf_fence_commands(struct drm_file *file_priv,* Also if copying fails, user-space will be unable to signal the fence object * so we wait for it immediately, and then unreference the user-space reference. */ -void +int vmw_execbuf_copy_fence_user (struct vmw_private *dev_priv,struct vmw_fpriv *vmw_fp,int ret,struct drm_vmw_fence_rep __user *user_fence_rep,struct vmw_fence_obj *fence,uint32_t fence_handle, -int32_t out_fence_fd,struct sync_file *sync_file) +int32_t out_fence_fd) {struct drm_vmw_fence_rep fence_rep;if (user_fence_rep ==NULL ) -return ; +return 0 ;memset (&fence_rep,0 ,sizeof (fence_rep));
@@ -3861,20 +3861,14 @@ vmw_execbuf_copy_fence_user(struct vmw_private *dev_priv,* handle. */ if (unlikely (ret !=0 ) && (fence_rep.error ==0 )) { -if (sync_file) -fput (sync_file->file); - -if (fence_rep.fd !=-1 ) { -put_unused_fd (fence_rep.fd); - fence_rep.fd =-1 ; - } -ttm_ref_object_base_unref (vmw_fp->tfile, fence_handle,TTM_REF_USAGE );VMW_DEBUG_USER ("Fence copy error. Syncing.\n" ); (void )vmw_fence_obj_wait (fence, false, false,VMW_FENCE_WAIT_TIMEOUT ); } + +return ret ? -EFAULT :0 ; }/**
@@ -4212,16 +4206,23 @@ int vmw_execbuf_process(struct drm_file *file_priv, (void )vmw_fence_obj_wait (fence, false, false,VMW_FENCE_WAIT_TIMEOUT ); + } + } + + ret =vmw_execbuf_copy_fence_user (dev_priv,vmw_fpriv (file_priv), ret, + user_fence_rep, fence, handle, out_fence_fd); + +if (sync_file) { +if (ret) { +/* usercopy of fence failed, put the file object */ +fput (sync_file->file); +put_unused_fd (out_fence_fd); }else {/* Link the fence with the FD created earlier */ fd_install (out_fence_fd, sync_file->file); } } -vmw_execbuf_copy_fence_user (dev_priv,vmw_fpriv (file_priv), ret, - user_fence_rep, fence, handle, out_fence_fd, - sync_file); -/* Don't unreference when handing fence out */ if (unlikely (out_fence !=NULL )) { *out_fence = fence;
@@ -4239,7 +4240,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,*/ vmw_validation_unref_lists (&val_ctx); -return 0 ; +return ret; out_unlock_binding:mutex_unlock (&dev_priv->binding_mutex);
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c +1 -1
@@ -1159,7 +1159,7 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data, }vmw_execbuf_copy_fence_user (dev_priv, vmw_fp,0 , user_fence_rep, fence, - handle,-1 ,NULL ); + handle,-1 );vmw_fence_obj_unreference (&fence);return 0 ; out_no_create:
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +1 -1
@@ -2516,7 +2516,7 @@ void vmw_kms_helper_validation_finish(struct vmw_private *dev_priv,if (file_priv)vmw_execbuf_copy_fence_user (dev_priv,vmw_fpriv (file_priv), ret, user_fence_rep, fence, - handle,-1 ,NULL ); + handle,-1 );if (out_fence) *out_fence = fence;else
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +10 -1
@@ -1850,6 +1850,14 @@ struct bnx2x {/* Vxlan/Geneve related information */ u16 udp_tunnel_ports[BNX2X_UDP_PORT_MAX ]; + +#define FW_CAP_INVALIDATE_VF_FP_HSI BIT(0) +u32 fw_cap; + +u32 fw_major; +u32 fw_minor; +u32 fw_rev; +u32 fw_eng; };/* Tx queues may be less or equal to Rx queues */
@@ -2525,5 +2533,6 @@ void bnx2x_register_phc(struct bnx2x *bp);* Meant for implicit re-load flows. */ int bnx2x_vlan_reconfigure_vid (struct bnx2x *bp); - +int bnx2x_init_firmware (struct bnx2x *bp); +void bnx2x_release_firmware (struct bnx2x *bp);#endif /* bnx2x.h */
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +2 -4
@@ -2364,10 +2364,8 @@ int bnx2x_compare_fw_ver(struct bnx2x *bp, u32 load_code, bool print_err)if (load_code !=FW_MSG_CODE_DRV_LOAD_COMMON_CHIP && load_code !=FW_MSG_CODE_DRV_LOAD_COMMON ) {/* build my FW version dword */ -u32 my_fw = (BCM_5710_FW_MAJOR_VERSION ) + - (BCM_5710_FW_MINOR_VERSION <<8 ) + - (BCM_5710_FW_REVISION_VERSION <<16 ) + - (BCM_5710_FW_ENGINEERING_VERSION <<24 ); +u32 my_fw = (bp->fw_major) + (bp->fw_minor <<8 ) + + (bp->fw_rev <<16 ) + (bp->fw_eng <<24 );/* read loaded FW from chip */ u32 loaded_fw =REG_RD (bp,XSEM_REG_PRAM );
drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h +2 -0
@@ -241,6 +241,8 @@ IRO[221].m2))#define XSTORM_VF_TO_PF_OFFSET (funcId) \ (IRO[48].base + ((funcId) * IRO[48].m1)) +#define XSTORM_ETH_FUNCTION_INFO_FP_HSI_VALID_E2_OFFSET (fid) \ + (IRO[386].base + ((fid) * IRO[386].m1))#define COMMON_ASM_INVALID_ASSERT_OPCODE 0x0/* eth hsi version */
drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h +2 -1
@@ -3024,7 +3024,8 @@ struct afex_stats {#define BCM_5710_FW_MAJOR_VERSION 7#define BCM_5710_FW_MINOR_VERSION 13 -#define BCM_5710_FW_REVISION_VERSION 15 +#define BCM_5710_FW_REVISION_VERSION 21 +#define BCM_5710_FW_REVISION_VERSION_V15 15#define BCM_5710_FW_ENGINEERING_VERSION 0#define BCM_5710_FW_COMPILE_FLAGS 1
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +53 -22
146 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +11 -2
@@ -758,9 +758,18 @@ static void bnx2x_vf_igu_reset(struct bnx2x *bp, struct bnx2x_virtf *vf)void bnx2x_vf_enable_access (struct bnx2x *bp,u8 abs_vfid) { +u16 abs_fid; + + abs_fid =FW_VF_HANDLE (abs_vfid); +/* set the VF-PF association in the FW */ -storm_memset_vf_to_pf (bp,FW_VF_HANDLE (abs_vfid),BP_FUNC (bp)); -storm_memset_func_en (bp,FW_VF_HANDLE (abs_vfid),1 ); +storm_memset_vf_to_pf (bp, abs_fid,BP_FUNC (bp)); +storm_memset_func_en (bp, abs_fid,1 ); + +/* Invalidate fp_hsi version for vfs */ +if (bp->fw_cap &FW_CAP_INVALIDATE_VF_FP_HSI ) +REG_WR8 (bp,BAR_XSTRORM_INTMEM + +XSTORM_ETH_FUNCTION_INFO_FP_HSI_VALID_E2_OFFSET (abs_fid),0 );/* clear vf errors*/ bnx2x_vf_semi_clear_err (bp, abs_vfid);
fs/io_uring.c +21 -13
@@ -1760,6 +1760,18 @@ static inline void io_get_task_refs(int nr)io_task_refs_refill (tctx); } +static __cold void io_uring_drop_tctx_refs (struct task_struct *task) +{ +struct io_uring_task *tctx = task->io_uring; +unsigned int refs = tctx->cached_refs; + +if (refs) { + tctx->cached_refs =0 ; +percpu_counter_sub (&tctx->inflight, refs); +put_task_struct_many (task, refs); + } +} +static bool io_cqring_event_overflow (struct io_ring_ctx *ctx,u64 user_data,long res,unsigned int cflags) {
@@ -2200,6 +2212,10 @@ static void tctx_task_work(struct callback_head *cb) }ctx_flush_and_put (ctx, &locked); + +/* relaxed read is enough as only the task itself sets ->in_idle */ +if (unlikely (atomic_read (&tctx->in_idle))) +io_uring_drop_tctx_refs (current); }static void io_req_task_work_add (struct io_kiocb *req)
@@ -9766,18 +9782,6 @@ static s64 tctx_inflight(struct io_uring_task *tctx, bool tracked)return percpu_counter_sum (&tctx->inflight); } -static void io_uring_drop_tctx_refs (struct task_struct *task) -{ -struct io_uring_task *tctx = task->io_uring; -unsigned int refs = tctx->cached_refs; - -if (refs) { - tctx->cached_refs =0 ; -percpu_counter_sub (&tctx->inflight, refs); -put_task_struct_many (task, refs); - } -} -/* * Find any io_uring ctx that this task has registered or done IO on, and cancel * requests. @sqd should be not-null IFF it's an SQPOLL thread cancellation.
@@ -9834,10 +9838,14 @@ static void io_uring_cancel_generic(bool cancel_all, struct io_sq_data *sqd)schedule ();finish_wait (&tctx->wait, &wait); }while (1 ); -atomic_dec (&tctx->in_idle);io_uring_clean_tctx (tctx);if (cancel_all) { +/* +* We shouldn't run task_works after cancel, so just leave +* ->in_idle set for normal exit. +*/ +atomic_dec (&tctx->in_idle);/* for exec all current's requests should be gone, kill tctx */ __io_uring_free (current); }
fs/select.c +33 -30
82 lines not on this page · raw message
kernel/rcu/tree.c +4 -3
@@ -1594,10 +1594,11 @@ static void __maybe_unused rcu_advance_cbs_nowake(struct rcu_node *rnp, struct rcu_data *rdp) {rcu_lockdep_assert_cblist_protected (rdp); -if (!rcu_seq_state (rcu_seq_current (&rnp->gp_seq)) || - !raw_spin_trylock_rcu_node (rnp)) +if (!rcu_seq_state (rcu_seq_current (&rnp->gp_seq)) || !raw_spin_trylock_rcu_node (rnp))return ; -WARN_ON_ONCE (rcu_advance_cbs (rnp, rdp)); +// The grace period cannot end while we hold the rcu_node lock. +if (rcu_seq_state (rcu_seq_current (&rnp->gp_seq))) +WARN_ON_ONCE (rcu_advance_cbs (rnp, rdp));raw_spin_unlock_rcu_node (rnp); }
mm/memcontrol.c +69 -30
174 lines not on this page · raw message