Linux 5.4.175
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.175 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.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/arm/boot/dts/bcm283x.dtsi | 1 drivers/gpu/drm/i915/gem/i915_gem_object_types.h | 3 drivers/gpu/drm/i915/gem/i915_gem_pages.c | 10 + drivers/gpu/drm/i915/gt/intel_gt.c | 99 ++++++++++ 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 | 4 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/mmc/host/sdhci-esdhc-imx.c | 3 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 209 +++++++++++++++++++---- fs/select.c | 63 +++--- kernel/rcu/tree.c | 7 17 files changed, 366 insertions(+), 92 deletions(-)
Florian Fainelli (2):
pinctrl: bcm2835: Match BCM7211 compatible string
pinctrl: bcm2835: Add support for wake-up interrupts
Greg Kroah-Hartman (1):
Linux 5.4.175
Jan Kara (1):
select: Fix indefinitely sleeping task in poll_schedule_timeout()
Mathias Krause (1):
drm/vmwgfx: Fix stale file descriptors on failed usercopy
Paul E. McKenney (1):
rcu: Tighten rcu_advance_cbs_nowake() checks
Phil Elwell (2):
pinctrl: bcm2835: Change init order for gpio hogs
ARM: dts: gpio-ranges property is now required
Stefan Wahren (3):
pinctrl: bcm2835: Drop unused define
pinctrl: bcm2835: Refactor platform data
pinctrl: bcm2835: Add support for all GPIOs on BCM2711
Tim Harvey (1):
mmc: sdhci-esdhc-imx: disable CMDQ support
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 = 4 -SUBLEVEL = 174 +SUBLEVEL = 175 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/dts/bcm283x.dtsi +1 -0
@@ -183,6 +183,7 @@ interrupt-controller; #interrupt-cells = <2>; + gpio-ranges = <&gpio 0 0 54>; /* Defines pin muxing groups according to * BCM2835-ARM-Peripherals.pdf page 102.
drivers/gpu/drm/i915/gem/i915_gem_object_types.h +3 -0
@@ -118,6 +118,9 @@ struct drm_i915_gem_object { I915_SELFTEST_DECLARE(struct list_head st_link); +unsigned long flags; +#define I915_BO_WAS_BOUND_BIT 0 +/* * Is the object to be mapped as read-only to the GPU * Only honoured if hardware has relevant pte bit
drivers/gpu/drm/i915/gem/i915_gem_pages.c +10 -0
@@ -8,6 +8,8 @@#include "i915_gem_object.h" #include "i915_scatterlist.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)
@@ -176,6 +178,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_in_use(&i915->runtime_pm, wakeref) +intel_gt_invalidate_tlbs (&i915->gt); + } +return pages; }
drivers/gpu/drm/i915/gt/intel_gt.c +99 -0
108 lines not on this page · raw message
drivers/gpu/drm/i915/gt/intel_gt.h +2 -0
@@ -57,4 +57,6 @@ static inline bool intel_gt_is_wedged(struct intel_gt *gt)void intel_gt_queue_hangcheck (struct intel_gt *gt); +void intel_gt_invalidate_tlbs (struct intel_gt *gt); +#endif /* __INTEL_GT_H__ */
drivers/gpu/drm/i915/gt/intel_gt_types.h +2 -0
@@ -40,6 +40,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
@@ -2519,6 +2519,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)
@@ -2602,6 +2608,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 FPGA_DBG _MMIO(0x42300)#define FPGA_DBG_RM_NOCLAIM (1 << 31)
drivers/gpu/drm/i915/i915_vma.c +4 -0
@@ -341,6 +341,10 @@ int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,return ret; vma->flags |= bind_flags; + +if (vma->obj) +set_bit (I915_BO_WAS_BOUND_BIT , &vma->obj->flags); +return 0 ; }
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -3
@@ -1002,15 +1002,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
@@ -3413,17 +3413,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));
@@ -3451,20 +3451,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 ; }/**
@@ -3806,16 +3800,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;
@@ -3833,7 +3834,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
@@ -1171,7 +1171,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
@@ -2570,7 +2570,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/mmc/host/sdhci-esdhc-imx.c +1 -2
@@ -218,8 +218,7 @@ static struct esdhc_soc_data usdhc_imx7ulp_data = {static struct esdhc_soc_data usdhc_imx8qxp_data = { .flags =ESDHC_FLAG_USDHC |ESDHC_FLAG_STD_TUNING |ESDHC_FLAG_HAVE_CAP1 |ESDHC_FLAG_HS200 - |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES - |ESDHC_FLAG_CQHCI , + |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES , };struct pltfm_imx_data {
drivers/pinctrl/bcm/pinctrl-bcm2835.c +174 -35
365 lines not on this page · raw message
fs/select.c +33 -30
82 lines not on this page · raw message
kernel/rcu/tree.c +4 -3
@@ -1358,10 +1358,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); }