4.10.11-stable review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 4.10.11-stable review
This is the start of the stable review cycle for the 4.10.11 release. There are 29 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Tue Apr 18 08:02:16 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.10.11-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.10.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.10.11-rc1
Marek Szyprowski <[email protected]>
dma-buf: add support for compat ioctl
Andrey Konovalov <[email protected]>
net/packet: fix overflow in check for priv area size
Horia Geantă <[email protected]>
crypto: caam - fix invalid dereference in caam_rsa_init_tfm()
Horia Geantă <[email protected]>
crypto: caam - fix RNG deinstantiation error checking
Matt Redfearn <[email protected]>
MIPS: IRQ Stack: Fix erroneous jal to plat_irq_dispatch
Matt Redfearn <[email protected]>
MIPS: Select HAVE_IRQ_EXIT_ON_IRQ_STACK
Matt Redfearn <[email protected]>
MIPS: Switch to the irq_stack in interrupts
Matt Redfearn <[email protected]>
MIPS: Only change $28 to thread_info if coming from user mode
Matt Redfearn <[email protected]>
MIPS: Stack unwinding while on IRQ stack
Matt Redfearn <[email protected]>
MIPS: Introduce irq_stack
Stanislaw Gruszka <[email protected]>
rt2x00usb: do not anchor rx and tx urb's
Stanislaw Gruszka <[email protected]>
rt2x00usb: fix anchor initialization
Tigran Mkrtchyan <[email protected]>
nfs: flexfiles: fix kernel OOPS if MDS returns unsupported DS type
Mike Marshall <[email protected]>
orangefs: fix buffer size mis-match between kernel space and user space.
Mike Marshall <[email protected]>
orangefs: Dan Carpenter influenced cleanups...
Ville Syrjälä <[email protected]>
drm/i915: Do .init_clock_gating() earlier to avoid it clobbering watermarks
Chris Wilson <[email protected]>
drm/i915: Avoid rcu_barrier() from reclaim paths (shrinker)
Chris Wilson <[email protected]>
drm/i915: Stop using RP_DOWN_EI on Baytrail
Kenneth Graunke <[email protected]>
drm/i915: Drop support for I915_EXEC_CONSTANTS_* execbuf parameters.
Chris Wilson <[email protected]>
drm/i915: Only enable hotplug interrupts if the display interrupts are enabled
Ville Syrjälä <[email protected]>
drm/i915: Reject HDMI 12bpc if the sink doesn't indicate support
Mika Kuoppala <[email protected]>
drm/i915: Avoid tweaking evaluation thresholds on Baytrail v3
Ville Syrjälä <[email protected]>
drm/i915: Nuke debug messages from the pipe update critical section
Chris Wilson <[email protected]>
drm/i915: Store a permanent error in obj->mm.pages
Imre Deak <[email protected]>
drm/i915/gen9: Increase PCODE request timeout to 50ms
Chris Wilson <[email protected]>
drm/i915: Squelch any ktime/jiffie rounding errors for wait-ioctl
Chris Wilson <[email protected]>
drm/i915/fbdev: Stop repeating tile configuration on stagnation
Maarten Lankhorst <[email protected]>
drm/i915: Move updating color management to before vblank evasion
Tvrtko Ursulin <[email protected]>
drm/i915: Fix forcewake active domain tracking
-------------
Diffstat:
Makefile | 4 +- arch/mips/Kconfig | 1 + arch/mips/include/asm/irq.h | 12 ++++ arch/mips/include/asm/stackframe.h | 7 +++ arch/mips/kernel/asm-offsets.c | 1 + arch/mips/kernel/genex.S | 81 +++++++++++++++++++++++-- arch/mips/kernel/irq.c | 11 ++++ arch/mips/kernel/process.c | 15 ++++- drivers/crypto/caam/caampkc.c | 2 +- drivers/crypto/caam/ctrl.c | 3 +- drivers/dma-buf/dma-buf.c | 3 + drivers/gpu/drm/i915/i915_drv.c | 4 +- drivers/gpu/drm/i915/i915_drv.h | 4 +- drivers/gpu/drm/i915/i915_gem.c | 21 +++++-- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 52 +--------------- drivers/gpu/drm/i915/i915_gem_shrinker.c | 2 +- drivers/gpu/drm/i915/i915_irq.c | 83 ++++++++++++-------------- drivers/gpu/drm/i915/intel_display.c | 33 ++++------ drivers/gpu/drm/i915/intel_fbdev.c | 10 ++-- drivers/gpu/drm/i915/intel_hdmi.c | 24 +++++++- drivers/gpu/drm/i915/intel_hotplug.c | 14 +++-- drivers/gpu/drm/i915/intel_pm.c | 23 ++++--- drivers/gpu/drm/i915/intel_uncore.c | 13 ++-- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 17 +++--- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 4 ++ fs/orangefs/devorangefs-req.c | 5 +- fs/orangefs/orangefs-debugfs.c | 15 ++--- fs/orangefs/orangefs-dev-proto.h | 3 +- net/packet/af_packet.c | 4 +- 29 files changed, 281 insertions(+), 190 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/29 drm/i915: Fix forcewake active domain tracking
4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tvrtko Ursulin <[email protected]>
commit 6aef660370a9c246956ba6d01eebd8063c4214cb upstream.
In commit 003342a50021 ("drm/i915: Keep track of active forcewake domains in a bitmask") I forgot to adjust the newly introduce fw_domains_active state across reset.
This caused the assert_forcewakes_inactive to trigger during suspend and resume if there were user held forcewakes.
v2: Bitmask checks are required since vfuncs are not
always present.
v3: Move bitmask tracking to get/put vfunc for simplicity.
(Chris Wilson)
Testcase: igt/drv_suspend/forcewake
--- drivers/gpu/drm/i915/intel_uncore.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/gpu/drm/i915/intel_uncore.c +6 -7
@@ -119,6 +119,8 @@ fw_domains_get(struct drm_i915_private *for_each_fw_domain_masked (d, fw_domains, dev_priv)fw_domain_wait_ack (d); + + dev_priv->uncore.fw_domains_active |= fw_domains; } static void
@@ -130,6 +132,8 @@ fw_domains_put(struct drm_i915_private *fw_domain_put (d);fw_domain_posting_read (d); } + + dev_priv->uncore.fw_domains_active &= ~fw_domains; } static void
@@ -240,10 +244,8 @@ intel_uncore_fw_release_timer(struct hrtif (WARN_ON (domain->wake_count ==0 )) domain->wake_count++; -if (--domain->wake_count ==0 ) { +if (--domain->wake_count ==0 ) dev_priv->uncore.funcs.force_wake_put (dev_priv, domain->mask); - dev_priv->uncore.fw_domains_active &= ~domain->mask; - }spin_unlock_irqrestore (&dev_priv->uncore.lock, irqflags);
@@ -455,10 +457,8 @@ static void __intel_uncore_forcewake_get fw_domains &= ~domain->mask; } -if (fw_domains) { +if (fw_domains) dev_priv->uncore.funcs.force_wake_get (dev_priv, fw_domains); - dev_priv->uncore.fw_domains_active |= fw_domains; - } }/**
@@ -962,7 +962,6 @@ static noinline void ___force_wake_auto(fw_domain_arm_timer (domain); dev_priv->uncore.funcs.force_wake_get (dev_priv, fw_domains); - dev_priv->uncore.fw_domains_active |= fw_domains; } static inline void __force_wake_auto(struct drm_i915_private *dev_priv,
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Greg Kroah-Hartman
maintainerPATCH 3/29 drm/i915/fbdev: Stop repeating tile configuration on stagnation
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit b717a0392530ae8da0da041abe5c3a6098b55660 upstream.
If we cease making progress in finding matching outputs for a tiled configuration, stop looping over the remaining unconfigured outputs.
v2: Use conn_seq (instead of pass) to only apply tile configuration on first pass.
--- drivers/gpu/drm/i915/intel_fbdev.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/gpu/drm/i915/intel_fbdev.c +4 -6
@@ -357,14 +357,13 @@ static bool intel_fb_initial_config(stru bool *enabled, int width, int height) { struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); -unsigned long conn_configured, mask; +unsigned long conn_configured, conn_seq, mask;unsigned int count =min (fb_helper->connector_count,BITS_PER_LONG );int i, j;bool *save_enabled;bool fallback = true;int num_connectors_enabled =0 ;int num_connectors_detected =0 ; -int pass =0 ; save_enabled =kcalloc (count,sizeof (bool ),GFP_KERNEL );if (!save_enabled)
@@ -374,6 +373,7 @@ static bool intel_fb_initial_config(stru mask =BIT (count) -1 ; conn_configured =0 ; retry: + conn_seq = conn_configured;for (i =0 ; i < count; i++) {struct drm_fb_helper_connector *fb_conn;struct drm_connector *connector;
@@ -387,7 +387,7 @@ retry:if (conn_configured &BIT (i))continue ; -if (pass ==0 && !connector->has_tile) +if (conn_seq ==0 && !connector->has_tile)continue ;if (connector->status == connector_status_connected)
@@ -498,10 +498,8 @@ retry: conn_configured |=BIT (i); } -if ((conn_configured & mask) != mask) { - pass++; +if ((conn_configured & mask) != mask && conn_configured != conn_seq) goto retry; - }/* * If the BIOS didn't enable everything it could, fall back to have the
Greg Kroah-Hartman
maintainerPATCH 4/29 drm/i915: Squelch any ktime/jiffie rounding errors for wait-ioctl
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit 89cf83d4e065ff9fbd2ddc674489c8058eeca758 upstream.
We wait upon jiffies, but report the time elapsed using a high-resolution timer. This discrepancy can lead to us timing out the wait prior to us reporting the elapsed time as complete.
This restores the squelching lost in commit e95433c73a11 ("drm/i915:
Rearrange i915_wait_request() accounting with callers").
--- drivers/gpu/drm/i915/i915_gem.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/gpu/drm/i915/i915_gem.c +10 -0
@@ -3003,6 +3003,16 @@ i915_gem_wait_ioctl(struct drm_device *d args->timeout_ns -=ktime_to_ns (ktime_sub (ktime_get (), start));if (args->timeout_ns <0 ) args->timeout_ns =0 ; + +/* +* Apparently ktime isn't accurate enough and occasionally has a +* bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch +* things up to make the test happy. We allow up to 1 jiffy. +* +* This is a regression from the timespec->ktime conversion. +*/ +if (ret == -ETIME && !nsecs_to_jiffies (args->timeout_ns)) + args->timeout_ns =0 ; }i915_gem_object_put (obj);
Greg Kroah-Hartman
maintainerPATCH 6/29 drm/i915: Store a permanent error in obj->mm.pages
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit 0d9dc306e15b59bf50db87ebcb1e2248586d4733 upstream.
Once the object has been truncated, it is unrecoverable. To facilitate detection of this state store the error in obj->mm.pages.
This is required for the next patch which should be applied to v4.10 (via stable), so we also need to mark this patch for backporting. In that regard, let's consider this to be a fix/improvement too.
v2: Avoid dereferencing the ERR_PTR when freeing the object.
--- drivers/gpu/drm/i915/i915_gem.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/gpu/drm/i915/i915_gem.c +6 -3
@@ -2184,6 +2184,7 @@ i915_gem_object_truncate(struct drm_i915*/ shmem_truncate_range (file_inode (obj->base.filp),0 , (loff_t)-1 ); obj->mm.madv = __I915_MADV_PURGED; + obj->mm.pages =ERR_PTR (-EFAULT ); }/* Try to discard unwanted pages */
@@ -2283,7 +2284,9 @@ void __i915_gem_object_put_pages(struct__i915_gem_object_reset_page_iter (obj); - obj->ops->put_pages (obj, pages); +if (!IS_ERR (pages)) + obj->ops->put_pages (obj, pages); + unlock:mutex_unlock (&obj->mm.lock); }
@@ -2501,7 +2504,7 @@ int __i915_gem_object_get_pages(struct dif (err)return err; -if (unlikely (!obj->mm.pages)) { +if (unlikely (IS_ERR_OR_NULL (obj->mm.pages))) { err =____i915_gem_object_get_pages (obj);if (err) goto unlock;
@@ -2579,7 +2582,7 @@ void *i915_gem_object_pin_map(struct drm pinned = true;if (!atomic_inc_not_zero (&obj->mm.pages_pin_count)) { -if (unlikely (!obj->mm.pages)) { +if (unlikely (IS_ERR_OR_NULL (obj->mm.pages))) { ret =____i915_gem_object_get_pages (obj);if (ret) goto err_unlock;
Greg Kroah-Hartman
maintainerPATCH 11/29 drm/i915: Drop support for I915_EXEC_CONSTANTS_* execbuf parameters.
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kenneth Graunke <[email protected]>
commit 0f5418e564ac6452b9086295646e602a9addc4bf upstream.
This patch makes the I915_PARAM_HAS_EXEC_CONSTANTS getparam return 0 (indicating the optional feature is not supported), and makes execbuf always return -EINVAL if the flags are used.
Apparently, no userspace ever shipped which used this optional feature:
I checked the git history of Mesa, xf86-video-intel, libva, and Beignet, and there were zero commits showing a use of these flags. Kernel commit 72bfa19c8deb4 apparently introduced the feature prematurely. According to Chris, the intention was to use this in cairo-drm, but "the use was broken for gen6", so I don't think it ever happened.
'relative_constants_mode' has always been tracked per-device, but this has actually been wrong ever since hardware contexts were introduced, as the INSTPM register is saved (and automatically restored) as part of the render ring context. The software per-device value could therefore get out of sync with the hardware per-context value. This meant that using them is actually unsafe: a client which tried to use them could damage the state of other clients, causing the GPU to interpret their BO offsets as absolute pointers, leading to bogus memory reads.
These flags were also never ported to execlist mode, making them no-ops on Gen9+ (which requires execlists), and Gen8 in the default mode.
On Gen8+, userspace can write these registers directly, achieving the same effect. On Gen6-7.5, it likely makes sense to extend the command parser to support them. I don't think anyone wants this on Gen4-5.
Based on a patch by Dave Gordon.
v3: Return -ENODEV for the getparam, as this is what we do for other
obsolete features. Suggested by Chris Wilson.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92448
--- drivers/gpu/drm/i915/i915_drv.c | 4 -- drivers/gpu/drm/i915/i915_drv.h | 2 - drivers/gpu/drm/i915/i915_gem.c | 2 - drivers/gpu/drm/i915/i915_gem_execbuffer.c | 52 +---------------------------- 4 files changed, 3 insertions(+), 57 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +1 -3
@@ -248,6 +248,7 @@ static int i915_getparam(struct drm_devicase I915_PARAM_IRQ_ACTIVE :case I915_PARAM_ALLOW_BATCHBUFFER :case I915_PARAM_LAST_DISPATCH : +case I915_PARAM_HAS_EXEC_CONSTANTS :/* Reject all old ums/dri params. */ return -ENODEV ;case I915_PARAM_CHIPSET_ID :
@@ -274,9 +275,6 @@ static int i915_getparam(struct drm_devicase I915_PARAM_HAS_BSD2 : value = !!dev_priv->engine[VCS2 ];break ; -case I915_PARAM_HAS_EXEC_CONSTANTS : - value =INTEL_GEN (dev_priv) >=4 ; -break ;case I915_PARAM_HAS_LLC : value =HAS_LLC (dev_priv);break ;
drivers/gpu/drm/i915/i915_drv.h +0 -2
@@ -1805,8 +1805,6 @@ struct drm_i915_private {const struct intel_device_info info; -int relative_constants_mode; -void __iomem *regs;struct intel_uncore uncore;
drivers/gpu/drm/i915/i915_gem.c +0 -2
@@ -4567,8 +4567,6 @@ i915_gem_load_init(struct drm_device *deinit_waitqueue_head (&dev_priv->gpu_error.wait_queue);init_waitqueue_head (&dev_priv->gpu_error.reset_queue); - dev_priv->relative_constants_mode =I915_EXEC_CONSTANTS_REL_GENERAL ; -init_waitqueue_head (&dev_priv->pending_flip_queue); dev_priv->mm.interruptible = true;
drivers/gpu/drm/i915/i915_gem_execbuffer.c +2 -50
68 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 12/29 drm/i915: Stop using RP_DOWN_EI on Baytrail
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit 8f68d591d4765b2e1ce9d916ac7bc5583285c4ad upstream.
On Baytrail, we manually calculate busyness over the evaluation interval to avoid issues with miscaluations with RC6 enabled. However, it turns out that the DOWN_EI interrupt generator is completely bust - it operates in two modes, continuous or never. Neither of which are conducive to good behaviour. Stop unmask the DOWN_EI interrupt and just compute everything from the UP_EI which does seem to correspond to the desired interval.
v2: Fixup gen6_rps_pm_mask() as well
v3: Inline vlv_c0_above() to combine the now identical elapsed calculation for up/down and simplify the threshold testing
--- drivers/gpu/drm/i915/i915_drv.h | 2 - drivers/gpu/drm/i915/i915_irq.c | 73 +++++++++++++++------------------------- drivers/gpu/drm/i915/intel_pm.c | 5 +- 3 files changed, 32 insertions(+), 48 deletions(-)
drivers/gpu/drm/i915/i915_drv.h +1 -1
@@ -1263,7 +1263,7 @@ struct intel_gen6_power_mgmt {unsigned boosts;/* manual wa residency calculations */ -struct intel_rps_ei up_ei, down_ei; +struct intel_rps_ei ei;/* * Protects RPS/RC6 register access and PCU communication.
drivers/gpu/drm/i915/i915_irq.c +28 -45
103 lines not on this page · raw message
drivers/gpu/drm/i915/intel_pm.c +3 -2
@@ -4913,8 +4913,9 @@ static u32 gen6_rps_pm_mask(struct drm_i {u32 mask =0 ; +/* We use UP_EI_EXPIRED interupts for both up/down in manual mode */ if (val > dev_priv->rps.min_freq_softlimit) - mask |=GEN6_PM_RP_DOWN_EI_EXPIRED |GEN6_PM_RP_DOWN_THRESHOLD |GEN6_PM_RP_DOWN_TIMEOUT ; + mask |=GEN6_PM_RP_UP_EI_EXPIRED |GEN6_PM_RP_DOWN_THRESHOLD |GEN6_PM_RP_DOWN_TIMEOUT ;if (val < dev_priv->rps.max_freq_softlimit) mask |=GEN6_PM_RP_UP_EI_EXPIRED |GEN6_PM_RP_UP_THRESHOLD ;
@@ -5014,7 +5015,7 @@ void gen6_rps_busy(struct drm_i915_priva {mutex_lock (&dev_priv->rps.hw_lock);if (dev_priv->rps.enabled) { -if (dev_priv->pm_rps_events & (GEN6_PM_RP_DOWN_EI_EXPIRED |GEN6_PM_RP_UP_EI_EXPIRED )) +if (dev_priv->pm_rps_events &GEN6_PM_RP_UP_EI_EXPIRED )gen6_rps_reset_ei (dev_priv);I915_WRITE (GEN6_PMINTRMSK ,gen6_rps_pm_mask (dev_priv, dev_priv->rps.cur_freq));
Greg Kroah-Hartman
maintainerPATCH 13/29 drm/i915: Avoid rcu_barrier() from reclaim paths (shrinker)
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit 3d3d18f086cdda72ee18a454db70ca72c6e3246c upstream.
The rcu_barrier() takes the cpu_hotplug mutex which itself is not reclaim-safe, and so rcu_barrier() is illegal from inside the shrinker.
[ 309.661373] =========================================================
[ 309.661376] [ INFO: possible irq lock inversion dependency detected ]
[ 309.661380] 4.11.0-rc1-CI-CI_DRM_2333+ #1 Tainted: G W
[ 309.661383] ---------------------------------------------------------
[ 309.661386] gem_exec_gttfil/6435 just changed the state of lock:
[ 309.661389] (rcu_preempt_state.barrier_mutex){+.+.-.}, at: [<ffffffff81100731>] _rcu_barrier+0x31/0x160
[ 309.661399] but this lock took another, RECLAIM_FS-unsafe lock in the past:
[ 309.661402] (cpu_hotplug.lock){+.+.+.}
[ 309.661404]and interrupts could create inverse lock ordering between them.
[ 309.661410]
other info that might help us debug this:
[ 309.661414] Possible interrupt unsafe locking scenario:[ 309.661417] CPU0 CPU1
[ 309.661419] ---- ----
[ 309.661421] lock(cpu_hotplug.lock);
[ 309.661425] local_irq_disable();
[ 309.661432] lock(rcu_preempt_state.barrier_mutex);
[ 309.661441] lock(cpu_hotplug.lock);
[ 309.661446] <Interrupt>
[ 309.661448] lock(rcu_preempt_state.barrier_mutex);
[ 309.661453]
*** DEADLOCK ***[ 309.661460] 4 locks held by gem_exec_gttfil/6435:
[ 309.661464] #0: (sb_writers#10){.+.+.+}, at: [<ffffffff8120d83d>] vfs_write+0x17d/0x1f0
[ 309.661475] #1: (debugfs_srcu){......}, at: [<ffffffff81320491>] debugfs_use_file_start+0x41/0xa0
[ 309.661486] #2: (&attr->mutex){+.+.+.}, at: [<ffffffff8123a3e7>] simple_attr_write+0x37/0xe0
[ 309.661495] #3: (&dev->struct_mutex){+.+.+.}, at: [<ffffffffa0091b4a>] i915_drop_caches_set+0x3a/0x150 [i915]
[ 309.661540]
the shortest dependencies between 2nd lock and 1st lock:
[ 309.661547] -> (cpu_hotplug.lock){+.+.+.} ops: 829 {
[ 309.661553] HARDIRQ-ON-W at:
[ 309.661560] __lock_acquire+0x5e5/0x1b50
[ 309.661565] lock_acquire+0xc9/0x220
[ 309.661572] __mutex_lock+0x6e/0x990
[ 309.661576] mutex_lock_nested+0x16/0x20
[ 309.661583] get_online_cpus+0x61/0x80
[ 309.661590] kmem_cache_create+0x25/0x1d0
[ 309.661596] debug_objects_mem_init+0x30/0x249
[ 309.661602] start_kernel+0x341/0x3fe
[ 309.661607] x86_64_start_reservations+0x2a/0x2c
[ 309.661612] x86_64_start_kernel+0x173/0x186
[ 309.661619] verify_cpu+0x0/0xfc
[ 309.661622] SOFTIRQ-ON-W at:
[ 309.661627] __lock_acquire+0x611/0x1b50
[ 309.661632] lock_acquire+0xc9/0x220
[ 309.661636] __mutex_lock+0x6e/0x990
[ 309.661641] mutex_lock_nested+0x16/0x20
[ 309.661646] get_online_cpus+0x61/0x80
[ 309.661650] kmem_cache_create+0x25/0x1d0
[ 309.661655] debug_objects_mem_init+0x30/0x249
[ 309.661660] start_kernel+0x341/0x3fe
[ 309.661664] x86_64_start_reservations+0x2a/0x2c
[ 309.661669] x86_64_start_kernel+0x173/0x186
[ 309.661674] verify_cpu+0x0/0xfc
[ 309.661677] RECLAIM_FS-ON-W at:
[ 309.661682] mark_held_locks+0x6f/0xa0
[ 309.661687] lockdep_trace_alloc+0xb3/0x100
[ 309.661693] kmem_cache_alloc_trace+0x31/0x2e0
[ 309.661699] __smpboot_create_thread.part.1+0x27/0xe0
[ 309.661704] smpboot_create_threads+0x61/0x90
[ 309.661709] cpuhp_invoke_callback+0x9c/0x8a0
[ 309.661713] cpuhp_up_callbacks+0x31/0xb0
[ 309.661718] _cpu_up+0x7a/0xc0
[ 309.661723] do_cpu_up+0x5f/0x80
[ 309.661727] cpu_up+0xe/0x10
[ 309.661734] smp_init+0x71/0xb3
[ 309.661738] kernel_init_freeable+0x94/0x19e
[ 309.661743] kernel_init+0x9/0xf0
[ 309.661748] ret_from_fork+0x2e/0x40
[ 309.661752] INITIAL USE at:
[ 309.661757] __lock_acquire+0x234/0x1b50
[ 309.661761] lock_acquire+0xc9/0x220
[ 309.661766] __mutex_lock+0x6e/0x990
[ 309.661771] mutex_lock_nested+0x16/0x20
[ 309.661775] get_online_cpus+0x61/0x80
[ 309.661780] __cpuhp_setup_state+0x44/0x170
[ 309.661785] page_alloc_init+0x23/0x3a
[ 309.661790] start_kernel+0x124/0x3fe
[ 309.661794] x86_64_start_reservations+0x2a/0x2c
[ 309.661799] x86_64_start_kernel+0x173/0x186
[ 309.661804] verify_cpu+0x0/0xfc
[ 309.661807] }
[ 309.661813] ... key at: [<ffffffff81e37690>] cpu_hotplug+0xb0/0x100
[ 309.661817] ... acquired at:
[ 309.661821] lock_acquire+0xc9/0x220
[ 309.661825] __mutex_lock+0x6e/0x990
[ 309.661829] mutex_lock_nested+0x16/0x20
[ 309.661833] get_online_cpus+0x61/0x80
[ 309.661837] _rcu_barrier+0x9f/0x160
[ 309.661841] rcu_barrier+0x10/0x20
[ 309.661847] netdev_run_todo+0x5f/0x310
[ 309.661852] rtnl_unlock+0x9/0x10
[ 309.661856] default_device_exit_batch+0x133/0x150
[ 309.661862] ops_exit_list.isra.0+0x4d/0x60
[ 309.661866] cleanup_net+0x1d8/0x2c0
[ 309.661872] process_one_work+0x1f4/0x6d0
[ 309.661876] worker_thread+0x49/0x4a0
[ 309.661881] kthread+0x107/0x140
[ 309.661884] ret_from_fork+0x2e/0x40[ 309.661890] -> (rcu_preempt_state.barrier_mutex){+.+.-.} ops: 179 {
[ 309.661896] HARDIRQ-ON-W at:
[ 309.661901] __lock_acquire+0x5e5/0x1b50
[ 309.661905] lock_acquire+0xc9/0x220
[ 309.661910] __mutex_lock+0x6e/0x990
[ 309.661914] mutex_lock_nested+0x16/0x20
[ 309.661919] _rcu_barrier+0x31/0x160
[ 309.661923] rcu_barrier+0x10/0x20
[ 309.661928] netdev_run_todo+0x5f/0x310
[ 309.661932] rtnl_unlock+0x9/0x10
[ 309.661936] default_device_exit_batch+0x133/0x150
[ 309.661941] ops_exit_list.isra.0+0x4d/0x60
[ 309.661946] cleanup_net+0x1d8/0x2c0
[ 309.661951] process_one_work+0x1f4/0x6d0
[ 309.661955] worker_thread+0x49/0x4a0
[ 309.661960] kthread+0x107/0x140
[ 309.661964] ret_from_fork+0x2e/0x40
[ 309.661968] SOFTIRQ-ON-W at:
[ 309.661972] __lock_acquire+0x611/0x1b50
[ 309.661977] lock_acquire+0xc9/0x220
[ 309.661981] __mutex_lock+0x6e/0x990
[ 309.661986] mutex_lock_nested+0x16/0x20
[ 309.661990] _rcu_barrier+0x31/0x160
[ 309.661995] rcu_barrier+0x10/0x20
[ 309.661999] netdev_run_todo+0x5f/0x310
[ 309.662003] rtnl_unlock+0x9/0x10
[ 309.662008] default_device_exit_batch+0x133/0x150
[ 309.662013] ops_exit_list.isra.0+0x4d/0x60
[ 309.662017] cleanup_net+0x1d8/0x2c0
[ 309.662022] process_one_work+0x1f4/0x6d0
[ 309.662027] worker_thread+0x49/0x4a0
[ 309.662031] kthread+0x107/0x140
[ 309.662035] ret_from_fork+0x2e/0x40
[ 309.662039] IN-RECLAIM_FS-W at:
[ 309.662043] __lock_acquire+0x638/0x1b50
[ 309.662048] lock_acquire+0xc9/0x220
[ 309.662053] __mutex_lock+0x6e/0x990
[ 309.662058] mutex_lock_nested+0x16/0x20
[ 309.662062] _rcu_barrier+0x31/0x160
[ 309.662067] rcu_barrier+0x10/0x20
[ 309.662089] i915_gem_shrink_all+0x33/0x40 [i915]
[ 309.662109] i915_drop_caches_set+0x141/0x150 [i915]
[ 309.662114] simple_attr_write+0xc7/0xe0
[ 309.662119] full_proxy_write+0x4f/0x70
[ 309.662124] __vfs_write+0x23/0x120
[ 309.662128] vfs_write+0xc6/0x1f0
[ 309.662133] SyS_write+0x44/0xb0
[ 309.662138] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 309.662142] INITIAL USE at:
[ 309.662147] __lock_acquire+0x234/0x1b50
[ 309.662151] lock_acquire+0xc9/0x220
[ 309.662156] __mutex_lock+0x6e/0x990
[ 309.662160] mutex_lock_nested+0x16/0x20
[ 309.662165] _rcu_barrier+0x31/0x160
[ 309.662169] rcu_barrier+0x10/0x20
[ 309.662174] netdev_run_todo+0x5f/0x310
[ 309.662178] rtnl_unlock+0x9/0x10
[ 309.662183] default_device_exit_batch+0x133/0x150
[ 309.662188] ops_exit_list.isra.0+0x4d/0x60
[ 309.662192] cleanup_net+0x1d8/0x2c0
[ 309.662197] process_one_work+0x1f4/0x6d0
[ 309.662202] worker_thread+0x49/0x4a0
[ 309.662206] kthread+0x107/0x140
[ 309.662210] ret_from_fork+0x2e/0x40
[ 309.662214] }
[ 309.662220] ... key at: [<ffffffff81e4e1c8>] rcu_preempt_state+0x508/0x780
[ 309.662225] ... acquired at:
[ 309.662229] check_usage_forwards+0x12b/0x130
[ 309.662233] mark_lock+0x360/0x6f0
[ 309.662237] __lock_acquire+0x638/0x1b50
[ 309.662241] lock_acquire+0xc9/0x220
[ 309.662245] __mutex_lock+0x6e/0x990
[ 309.662249] mutex_lock_nested+0x16/0x20
[ 309.662253] _rcu_barrier+0x31/0x160
[ 309.662257] rcu_barrier+0x10/0x20
[ 309.662279] i915_gem_shrink_all+0x33/0x40 [i915]
[ 309.662298] i915_drop_caches_set+0x141/0x150 [i915]
[ 309.662303] simple_attr_write+0xc7/0xe0
[ 309.662307] full_proxy_write+0x4f/0x70
[ 309.662311] __vfs_write+0x23/0x120
[ 309.662315] vfs_write+0xc6/0x1f0
[ 309.662319] SyS_write+0x44/0xb0
[ 309.662323] entry_SYSCALL_64_fastpath+0x1c/0xb1[ 309.662329]
stack backtrace:
[ 309.662335] CPU: 1 PID: 6435 Comm: gem_exec_gttfil Tainted: G W 4.11.0-rc1-CI-CI_DRM_2333+ #1
[ 309.662342] Hardware name: Hewlett-Packard HP Compaq 8100 Elite SFF PC/304Ah, BIOS 786H1 v01.13 07/14/2011
[ 309.662348] Call Trace:
[ 309.662354] dump_stack+0x67/0x92
[ 309.662359] print_irq_inversion_bug.part.19+0x1a4/0x1b0
[ 309.662365] check_usage_forwards+0x12b/0x130
[ 309.662369] mark_lock+0x360/0x6f0
[ 309.662374] ? print_shortest_lock_dependencies+0x1a0/0x1a0
[ 309.662379] __lock_acquire+0x638/0x1b50
[ 309.662383] ? __mutex_unlock_slowpath+0x3e/0x2e0
[ 309.662388] ? trace_hardirqs_on+0xd/0x10
[ 309.662392] ? _rcu_barrier+0x31/0x160
[ 309.662396] lock_acquire+0xc9/0x220
[ 309.662400] ? _rcu_barrier+0x31/0x160
[ 309.662404] ? _rcu_barrier+0x31/0x160
[ 309.662409] __mutex_lock+0x6e/0x990
[ 309.662412] ? _rcu_barrier+0x31/0x160
[ 309.662416] ? _rcu_barrier+0x31/0x160
[ 309.662421] ? synchronize_rcu_expedited+0x35/0xb0
[ 309.662426] ? _raw_spin_unlock_irqrestore+0x52/0x60
[ 309.662434] mutex_lock_nested+0x16/0x20
[ 309.662438] _rcu_barrier+0x31/0x160
[ 309.662442] rcu_barrier+0x10/0x20
[ 309.662464] i915_gem_shrink_all+0x33/0x40 [i915]
[ 309.662484] i915_drop_caches_set+0x141/0x150 [i915]
[ 309.662489] simple_attr_write+0xc7/0xe0
[ 309.662494] full_proxy_write+0x4f/0x70
[ 309.662498] __vfs_write+0x23/0x120
[ 309.662503] ? rcu_read_lock_sched_held+0x75/0x80
[ 309.662507] ? rcu_sync_lockdep_assert+0x2a/0x50
[ 309.662512] ? __sb_start_write+0x102/0x210
[ 309.662516] ? vfs_write+0x17d/0x1f0
[ 309.662520] vfs_write+0xc6/0x1f0
[ 309.662524] ? trace_hardirqs_on_caller+0xe7/0x200
[ 309.662529] SyS_write+0x44/0xb0
[ 309.662533] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 309.662537] RIP: 0033:0x7f507eac24a0
[ 309.662541] RSP: 002b:00007fffda8720e8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
[ 309.662548] RAX: ffffffffffffffda RBX: ffffffff81482bd3 RCX: 00007f507eac24a0
[ 309.662552] RDX: 0000000000000005 RSI: 00007fffda8720f0 RDI: 0000000000000005
[ 309.662557] RBP: ffffc9000048bf88 R08: 0000000000000000 R09: 000000000000002c
[ 309.662561] R10: 0000000000000014 R11: 0000000000000246 R12: 00007fffda872230
[ 309.662566] R13: 00007fffda872228 R14: 0000000000000201 R15: 00007fffda8720f0
[ 309.662572] ? __this_cpu_preempt_check+0x13/0x20Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100192
--- drivers/gpu/drm/i915/i915_gem_shrinker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/i915/i915_gem_shrinker.c +1 -1
@@ -263,7 +263,7 @@ unsigned long i915_gem_shrink_all(structI915_SHRINK_BOUND |I915_SHRINK_UNBOUND | I915_SHRINK_ACTIVE); -rcu_barrier ();/* wait until our RCU delayed slab frees are completed */ +synchronize_rcu ();/* wait for our earlier RCU delayed slab frees */ return freed; }
Greg Kroah-Hartman
maintainerPATCH 15/29 orangefs: Dan Carpenter influenced cleanups...
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Marshall <[email protected]>
commit 05973c2efb40122f2a9ecde2d065f7ea5068d024 upstream.
This patch is simlar to one Dan Carpenter sent me, cleans up some return codes and whitespace errors. There was one place where he thought inserting an error message into the ring buffer might be too chatty, I hope I convinced him othewise. As a consolation <g> I changed a truly chatty error message in another location into a debug message, system-admins had already yelled at me about that one...
--- fs/orangefs/devorangefs-req.c | 5 +++-- fs/orangefs/orangefs-debugfs.c | 15 ++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-)
fs/orangefs/devorangefs-req.c +3 -2
@@ -400,8 +400,9 @@ static ssize_t orangefs_devreq_write_ite/* remove the op from the in progress hash table */ op =orangefs_devreq_remove_op (head.tag);if (!op) { -gossip_err ("WARNING: No one's waiting for tag %llu\n" , -llu (head.tag)); +gossip_debug (GOSSIP_DEV_DEBUG , +"%s: No one's waiting for tag %llu\n" , + __func__,llu (head.tag));return ret; }
fs/orangefs/orangefs-debugfs.c +8 -7
@@ -967,13 +967,13 @@ int orangefs_debugfs_new_client_string(vint ret; ret =copy_from_user (&client_debug_array_string, - (void __user *)arg, -ORANGEFS_MAX_DEBUG_STRING_LEN ); + (void __user *)arg, +ORANGEFS_MAX_DEBUG_STRING_LEN );if (ret !=0 ) {pr_info ("%s: CLIENT_STRING: copy_from_user failed\n" , __func__); -return -EIO ; +return -EFAULT ; }/*
@@ -988,17 +988,18 @@ int orangefs_debugfs_new_client_string(v*/ client_debug_array_string[ORANGEFS_MAX_DEBUG_STRING_LEN -1 ] ='\0' ; - +pr_info ("%s: client debug array string has been received.\n" , __func__);if (!help_string_initialized) {/* Build a proper debug help string. */ -if (orangefs_prepare_debugfs_help_string (0 )) { + ret =orangefs_prepare_debugfs_help_string (0 ); +if (ret) {gossip_err ("%s: no debug help string \n" , __func__); -return -EIO ; +return ret; } }
@@ -1011,7 +1012,7 @@ int orangefs_debugfs_new_client_string(v help_string_initialized++; -return ret; +return 0 ; }int orangefs_debugfs_new_debug (void __user *arg)
Greg Kroah-Hartman
maintainerPATCH 16/29 orangefs: fix buffer size mis-match between kernel space and user space.
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Marshall <[email protected]>
commit eb68d0324dc4d88ab0d6159bdcd98c247a3a8954 upstream.
The deamon through which the kernel module communicates with the userspace part of Orangefs, the "client-core", sends initialization data to the kernel module with ioctl. The initialization data was built by the client-core in a 2k buffer and copy_from_user'd into a 1k buffer in the kernel module. When more than 1k of initialization data needed to be sent, some was lost, reducing the usability of the control by which debug levels are set. This patch sets the kernel side buffer to 2K to match the userspace side...
--- fs/orangefs/orangefs-dev-proto.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
fs/orangefs/orangefs-dev-proto.h +1 -2
@@ -50,8 +50,7 @@* Misc constants. Please retain them as multiples of 8! * Otherwise 32-64 bit interactions will be messed up :) */ -#define ORANGEFS_MAX_DEBUG_STRING_LEN 0x00000400 -#define ORANGEFS_MAX_DEBUG_ARRAY_LEN 0x00000800 +#define ORANGEFS_MAX_DEBUG_STRING_LEN 0x00000800/* * The maximum number of directory entries in a single request is 96.
Greg Kroah-Hartman
maintainerPATCH 17/29 nfs: flexfiles: fix kernel OOPS if MDS returns unsupported DS type
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tigran Mkrtchyan <[email protected]>
commit f17f8a14e82cdf34cd6473e3644f3c672b3884f6 upstream.
this fix aims to fix dereferencing of a mirror in an error state when MDS returns unsupported DS type (IOW, not v3), which causes the following oops:
[ 220.370709] BUG: unable to handle kernel NULL pointer dereference at 0000000000000065 [ 220.370842] IP: ff_layout_mirror_valid+0x2d/0x110 [nfs_layout_flexfiles] [ 220.370920] PGD 0
[ 220.370972] Oops: 0000 [#1] SMP [ 220.371013] Modules linked in: nfnetlink_queue nfnetlink_log bluetooth nfs_layout_flexfiles rpcsec_gss_krb5 nfsv4 dns_resolver nfs fscache nf_conntrack_netbios_ns nf_conntrack_broadcast xt_CT ip6t_rpfilter ip6t_REJECT nf_reject_ipv6 xt_conntrack ip_set nfnetlink ebtable_nat ebtable_broute bridge stp llc ip6table_raw ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security iptable_raw iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack libcrc32c iptable_mangle iptable_security ebtable_filter ebtables ip6table_filter ip6_tables binfmt_misc intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel btrfs kvm arc4 snd_hda_codec_hdmi iwldvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel intel_cstate mac80211 xor uvcvideo [ 220.371814] videobuf2_vmalloc videobuf2_memops snd_hda_codec_idt mei_wdt videobuf2_v4l2 snd_hda_codec_generic iTCO_wdt ppdev videobuf2_core iTCO_vendor_support dell_rbtn dell_wmi iwlwifi sparse_keymap dell_laptop dell_smbios snd_hda_intel dcdbas videodev snd_hda_codec dell_smm_hwmon snd_hda_core media cfg80211 intel_uncore snd_hwdep raid6_pq snd_seq intel_rapl_perf snd_seq_device joydev i2c_i801 rfkill lpc_ich snd_pcm parport_pc mei_me parport snd_timer dell_smo8800 mei snd shpchp soundcore tpm_tis tpm_tis_core tpm nfsd auth_rpcgss nfs_acl lockd grace sunrpc i915 nouveau mxm_wmi ttm i2c_algo_bit drm_kms_helper crc32c_intel e1000e drm sdhci_pci firewire_ohci sdhci serio_raw mmc_core firewire_core ptp crc_itu_t pps_core wmi fjes video [ 220.372568] CPU: 7 PID: 4988 Comm: cat Not tainted 4.10.5-200.fc25.x86_64 #1 [ 220.372647] Hardware name: Dell Inc. Latitude E6520/0J4TFW, BIOS A06 07/11/2011 [ 220.372729] task: ffff94791f6ea580 task.stack: ffffb72b88c0c000 [ 220.372802] RIP: 0010:ff_layout_mirror_valid+0x2d/0x110 [nfs_layout_flexfiles] [ 220.372883] RSP: 0018:ffffb72b88c0f970 EFLAGS: 00010246 [ 220.372945] RAX: 0000000000000000 RBX: ffff9479015ca600 RCX: ffffffffffffffed [ 220.373025] RDX: ffffffffffffffed RSI: ffff9479753dc980 RDI: 0000000000000000 [ 220.373104] RBP: ffffb72b88c0f988 R08: 000000000001c980 R09: ffffffffc0ea6112 [ 220.373184] R10: ffffef17477d9640 R11: ffff9479753dd6c0 R12: ffff9479211c7440 [ 220.373264] R13: ffff9478f45b7790 R14: 0000000000000001 R15: ffff9479015ca600 [ 220.373345] FS: 00007f555fa3e700(0000) GS:ffff9479753c0000(0000) knlGS:0000000000000000 [ 220.373435] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 220.373506] CR2: 0000000000000065 CR3: 0000000196044000 CR4: 00000000000406e0 [ 220.373586] Call Trace: [ 220.373627] nfs4_ff_layout_prepare_ds+0x5e/0x200 [nfs_layout_flexfiles] [ 220.373708] ff_layout_pg_init_read+0x81/0x160 [nfs_layout_flexfiles] [ 220.373806] __nfs_pageio_add_request+0x11f/0x4a0 [nfs] [ 220.373886] ? nfs_create_request.part.14+0x37/0x330 [nfs] [ 220.373967] nfs_pageio_add_request+0xb2/0x260 [nfs] [ 220.374042] readpage_async_filler+0xaf/0x280 [nfs] [ 220.374103] read_cache_pages+0xef/0x1b0 [ 220.374166] ? nfs_read_completion+0x210/0x210 [nfs] [ 220.374239] nfs_readpages+0x129/0x200 [nfs] [ 220.374293] __do_page_cache_readahead+0x1d0/0x2f0 [ 220.374352] ondemand_readahead+0x17d/0x2a0 [ 220.374403] page_cache_sync_readahead+0x2e/0x50 [ 220.374460] generic_file_read_iter+0x6c8/0x950 [ 220.374532] ? nfs_mapping_need_revalidate_inode+0x17/0x40 [nfs] [ 220.374617] nfs_file_read+0x6e/0xc0 [nfs] [ 220.374670] __vfs_read+0xe2/0x150 [ 220.374715] vfs_read+0x96/0x130 [ 220.374758] SyS_read+0x55/0xc0 [ 220.374801] entry_SYSCALL_64_fastpath+0x1a/0xa9 [ 220.374856] RIP: 0033:0x7f555f570bd0 [ 220.374900] RSP: 002b:00007ffeb73e1b38 EFLAGS: 00000246 ORIG_RAX: 0000000000000000 [ 220.374986] RAX: ffffffffffffffda RBX: 00007f555f839ae0 RCX: 00007f555f570bd0 [ 220.375066] RDX: 0000000000020000 RSI: 00007f555fa41000 RDI: 0000000000000003 [ 220.375145] RBP: 0000000000021010 R08: ffffffffffffffff R09: 0000000000000000 [ 220.375226] R10: 00007f555fa40010 R11: 0000000000000246 R12: 0000000000022000 [ 220.375305] R13: 0000000000021010 R14: 0000000000001000 R15: 0000000000002710 [ 220.375386] Code: 66 66 90 55 48 89 e5 41 54 53 49 89 fc 48 83 ec 08 48 85 f6 74 2e 48 8b 4e 30 48 89 f3 48 81 f9 00 f0 ff ff 77 1e 48 85 c9 74 15 <48> 83 79 78 00 b8 01 00 00 00 74 2c 48 83 c4 08 5b 41 5c 5d c3 [ 220.375653] RIP: ff_layout_mirror_valid+0x2d/0x110 [nfs_layout_flexfiles] RSP: ffffb72b88c0f970 [ 220.375748] CR2: 0000000000000065 [ 220.403538] ---[ end trace bcdca752211b7da9 ]---
--- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/nfs/flexfilelayout/flexfilelayoutdev.c +4 -0
@@ -208,6 +208,10 @@ static bool ff_layout_mirror_valid(struc }else goto outerr; } + +if (IS_ERR (mirror->mirror_ds)) + goto outerr; +if (mirror->mirror_ds->ds ==NULL ) {struct nfs4_deviceid_node *devid; devid = &mirror->mirror_ds->id_node;
Greg Kroah-Hartman
maintainerPATCH 18/29 rt2x00usb: fix anchor initialization
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stanislaw Gruszka <[email protected]>
commit 0488a6121dfe6cbd44de15ea3627913b7549a1e9 upstream.
If device fail to initialize we can OOPS in rt2x00lib_remove_dev(), due to using uninitialized usb_anchor structure:
[ 855.435820] ieee80211 phy3: rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1000 with error -19 [ 855.435826] ieee80211 phy3: rt2800_probe_rt: Error - Invalid RT chipset 0x0000, rev 0000 detected [ 855.435829] ieee80211 phy3: rt2x00lib_probe_dev: Error - Failed to allocate device [ 855.435845] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028 [ 855.435900] IP: _raw_spin_lock_irq+0xd/0x30 [ 855.435926] PGD 0 [ 855.435953] Oops: 0002 [#1] SMP <snip> [ 855.437011] Call Trace: [ 855.437029] ? usb_kill_anchored_urbs+0x27/0xc0 [ 855.437061] rt2x00lib_remove_dev+0x190/0x1c0 [rt2x00lib] [ 855.437097] rt2x00lib_probe_dev+0x246/0x7a0 [rt2x00lib] [ 855.437149] ? ieee80211_roc_setup+0x9e/0xd0 [mac80211] [ 855.437183] ? __kmalloc+0x1af/0x1f0 [ 855.437207] ? rt2x00usb_probe+0x13d/0xc50 [rt2x00usb] [ 855.437240] rt2x00usb_probe+0x155/0xc50 [rt2x00usb] [ 855.437273] rt2800usb_probe+0x15/0x20 [rt2800usb] [ 855.437304] usb_probe_interface+0x159/0x2d0 [ 855.437333] driver_probe_device+0x2bb/0x460
Patch changes initialization sequence to fix the problem.
--- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +8 -5
@@ -824,10 +824,6 @@ int rt2x00usb_probe(struct usb_interfaceif (retval) goto exit_free_device; - retval =rt2x00lib_probe_dev (rt2x00dev); -if (retval) - goto exit_free_reg; - rt2x00dev->anchor =devm_kmalloc (&usb_dev->dev,sizeof (struct usb_anchor ),GFP_KERNEL );
@@ -835,10 +831,17 @@ int rt2x00usb_probe(struct usb_interface retval = -ENOMEM ; goto exit_free_reg; } -init_usb_anchor (rt2x00dev->anchor); + + retval =rt2x00lib_probe_dev (rt2x00dev); +if (retval) + goto exit_free_anchor; +return 0 ; +exit_free_anchor: +usb_kill_anchored_urbs (rt2x00dev->anchor); + exit_free_reg:rt2x00usb_free_reg (rt2x00dev);
Greg Kroah-Hartman
maintainerPATCH 19/29 rt2x00usb: do not anchor rx and tx urbs
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stanislaw Gruszka <[email protected]>
commit 93c7018ec16bb83399dd4db61c361a6d6aba0d5a upstream.
We might kill TX or RX urb during rt2x00usb_flush_entry(), what can cause anchor list corruption like shown below:
[ 2074.035633] WARNING: CPU: 2 PID: 14480 at lib/list_debug.c:33 __list_add+0xac/0xc0 [ 2074.035634] list_add corruption. prev->next should be next (ffff88020f362c28), but was dead000000000100. (prev=ffff8801d161bb70). <snip> [ 2074.035670] Call Trace: [ 2074.035672] [<ffffffff813bde47>] dump_stack+0x63/0x8c [ 2074.035674] [<ffffffff810a2231>] __warn+0xd1/0xf0 [ 2074.035676] [<ffffffff810a22af>] warn_slowpath_fmt+0x5f/0x80 [ 2074.035678] [<ffffffffa073855d>] ? rt2x00usb_register_write_lock+0x3d/0x60 [rt2800usb] [ 2074.035679] [<ffffffff813dbe4c>] __list_add+0xac/0xc0 [ 2074.035681] [<ffffffff81591c6c>] usb_anchor_urb+0x4c/0xa0 [ 2074.035683] [<ffffffffa07322af>] rt2x00usb_kick_rx_entry+0xaf/0x100 [rt2x00usb] [ 2074.035684] [<ffffffffa0732322>] rt2x00usb_clear_entry+0x22/0x30 [rt2x00usb]
To fix do not anchor TX and RX urb's, it is not needed as during shutdown we kill those urbs in rt2x00usb_free_entries().
--- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +0 -4
@@ -319,10 +319,8 @@ static bool rt2x00usb_kick_tx_entry(stru entry->skb->data, length, rt2x00usb_interrupt_txdone, entry); -usb_anchor_urb (entry_priv->urb, rt2x00dev->anchor); status =usb_submit_urb (entry_priv->urb,GFP_ATOMIC );if (status) { -usb_unanchor_urb (entry_priv->urb);if (status == -ENODEV )clear_bit (DEVICE_STATE_PRESENT , &rt2x00dev->flags);set_bit (ENTRY_DATA_IO_FAILED , &entry->flags);
@@ -410,10 +408,8 @@ static bool rt2x00usb_kick_rx_entry(stru entry->skb->data, entry->skb->len, rt2x00usb_interrupt_rxdone, entry); -usb_anchor_urb (entry_priv->urb, rt2x00dev->anchor); status =usb_submit_urb (entry_priv->urb,GFP_ATOMIC );if (status) { -usb_unanchor_urb (entry_priv->urb);if (status == -ENODEV )clear_bit (DEVICE_STATE_PRESENT , &rt2x00dev->flags);set_bit (ENTRY_DATA_IO_FAILED , &entry->flags);
Greg Kroah-Hartman
maintainerPATCH 20/29 MIPS: Introduce irq_stack
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit fe8bd18ffea5327344d4ec2bf11f47951212abd0 upstream.
Allocate a per-cpu irq stack for use within interrupt handlers.
Also add a utility function on_irq_stack to determine if a given stack pointer is within the irq stack for that cpu.
Patchwork: https://patchwork.linux-mips.org/patch/14740/
--- arch/mips/include/asm/irq.h | 12 ++++++++++++ arch/mips/kernel/asm-offsets.c | 1 + arch/mips/kernel/irq.c | 11 +++++++++++ 3 files changed, 24 insertions(+)
arch/mips/include/asm/irq.h +12 -0
@@ -17,6 +17,18 @@#include <irq.h> +#define IRQ_STACK_SIZE THREAD_SIZE + +extern void *irq_stack[NR_CPUS ]; + +static inline bool on_irq_stack (int cpu,unsigned long sp) +{ +unsigned long low = (unsigned long )irq_stack[cpu]; +unsigned long high = low +IRQ_STACK_SIZE ; + +return (low <= sp && sp <= high); +} +#ifdef CONFIG_I8259 static inline int irq_canonicalize (int irq) {
arch/mips/kernel/asm-offsets.c +1 -0
@@ -102,6 +102,7 @@ void output_thread_info_defines(void)OFFSET (TI_REGS , thread_info, regs);DEFINE (_THREAD_SIZE,THREAD_SIZE );DEFINE (_THREAD_MASK,THREAD_MASK ); +DEFINE (_IRQ_STACK_SIZE,IRQ_STACK_SIZE );BLANK (); }
arch/mips/kernel/irq.c +11 -0
@@ -25,6 +25,8 @@#include <linux/atomic.h> #include <linux/uaccess.h> +void *irq_stack[NR_CPUS ]; +/* * 'what should we do if we get a hw irq event on an illegal vector'. * each architecture has to answer this themselves.
@@ -58,6 +60,15 @@ void __init init_IRQ(void)clear_c0_status (ST0_IM );arch_init_irq (); + +for_each_possible_cpu (i) { +int irq_pages =IRQ_STACK_SIZE /PAGE_SIZE ; +void *s = (void *)__get_free_pages (GFP_KERNEL , irq_pages); + + irq_stack[i] = s; +pr_debug ("CPU%d IRQ stack at 0x%p - 0x%p\n" , i, + irq_stack[i], irq_stack[i] +IRQ_STACK_SIZE ); + } }#ifdef CONFIG_DEBUG_STACKOVERFLOW
Greg Kroah-Hartman
maintainerPATCH 21/29 MIPS: Stack unwinding while on IRQ stack
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit d42d8d106b0275b027c1e8992c42aecf933436ea upstream.
Within unwind stack, check if the stack pointer being unwound is within the CPU's irq_stack and if so use that page rather than the task's stack page.
Patchwork: https://patchwork.linux-mips.org/patch/14741/
--- arch/mips/kernel/process.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
arch/mips/kernel/process.c +14 -1
@@ -33,6 +33,7 @@#include <asm/dsemul.h> #include <asm/dsp.h> #include <asm/fpu.h> +#include <asm/irq.h> #include <asm/msa.h> #include <asm/pgtable.h> #include <asm/mipsregs.h>
@@ -556,7 +557,19 @@ EXPORT_SYMBOL(unwind_stack_by_address);unsigned long unwind_stack (struct task_struct *task,unsigned long *sp,unsigned long pc,unsigned long *ra) { -unsigned long stack_page = (unsigned long )task_stack_page (task); +unsigned long stack_page =0 ; +int cpu; + +for_each_possible_cpu (cpu) { +if (on_irq_stack (cpu, *sp)) { + stack_page = (unsigned long )irq_stack[cpu]; +break ; + } + } + +if (!stack_page) + stack_page = (unsigned long )task_stack_page (task); +return unwind_stack_by_address (stack_page, sp, pc, ra); }#endif
Greg Kroah-Hartman
maintainerPATCH 22/29 MIPS: Only change $28 to thread_info if coming from user mode
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit 510d86362a27577f5ee23f46cfb354ad49731e61 upstream.
The SAVE_SOME macro is used to save the execution context on all exceptions.
If an exception occurs while executing user code, the stack is switched to the kernel's stack for the current task, and register $28 is switched to point to the current_thread_info, which is at the bottom of the stack region.
If the exception occurs while executing kernel code, the stack is left, and this change ensures that register $28 is not updated. This is the correct behaviour when the kernel can be executing on the separate irq stack, because the thread_info will not be at the base of it.
With this change, register $28 is only switched to it's kernel conventional usage of the currrent thread info pointer at the point at which execution enters kernel space. Doing it on every exception was redundant, but OK without an IRQ stack, but will be erroneous once that is introduced.
Patchwork: https://patchwork.linux-mips.org/patch/14742/
--- arch/mips/include/asm/stackframe.h | 7 +++++++ 1 file changed, 7 insertions(+)
arch/mips/include/asm/stackframe.h +7 -0
@@ -216,12 +216,19 @@ LONG_S $25, PT_R25(sp) LONG_S $28, PT_R28(sp) LONG_S $31, PT_R31(sp) + + /* Set thread_info if we're coming from user mode */ + mfc0 k0, CP0_STATUS + sll k0, 3 /* extract cu0 bit */ + bltz k0, 9f + ori $28, sp, _THREAD_MASK xori $28, _THREAD_MASK #ifdef CONFIG_CPU_CAVIUM_OCTEON .set mips64 pref 0, 0($28) /* Prefetch the current pointer */ #endif +9: .set pop .endm
Greg Kroah-Hartman
maintainerPATCH 23/29 MIPS: Switch to the irq_stack in interrupts
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit dda45f701c9d7ad4ac0bb446e3a96f6df9a468d9 upstream.
When enterring interrupt context via handle_int or except_vec_vi, switch to the irq_stack of the current CPU if it is not already in use.
The current stack pointer is masked with the thread size and compared to the base or the irq stack. If it does not match then the stack pointer is set to the top of that stack, otherwise this is a nested irq being handled on the irq stack so the stack pointer should be left as it was.
The in-use stack pointer is placed in the callee saved register s1. It will be saved to the stack when plat_irq_dispatch is invoked and can be restored once control returns here.
Patchwork: https://patchwork.linux-mips.org/patch/14743/
--- arch/mips/kernel/genex.S | 81 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 5 deletions(-)
arch/mips/kernel/genex.S +76 -5
@@ -187,9 +187,44 @@ NESTED(handle_int, PT_SIZE, sp) LONG_L s0, TI_REGS($28) LONG_S sp, TI_REGS($28) - PTR_LA ra, ret_from_irq - PTR_LA v0, plat_irq_dispatch - jr v0 + + /* + * SAVE_ALL ensures we are using a valid kernel stack for the thread. + * Check if we are already using the IRQ stack. + */ + move s1, sp # Preserve the sp + + /* Get IRQ stack for this CPU */ + ASM_CPUID_MFC0 k0, ASM_SMP_CPUID_REG +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) + lui k1, %hi(irq_stack) +#else + lui k1, %highest(irq_stack) + daddiu k1, %higher(irq_stack) + dsll k1, 16 + daddiu k1, %hi(irq_stack) + dsll k1, 16 +#endif + LONG_SRL k0, SMP_CPUID_PTRSHIFT + LONG_ADDU k1, k0 + LONG_L t0, %lo(irq_stack)(k1) + + # Check if already on IRQ stack + PTR_LI t1, ~(_THREAD_SIZE-1) + and t1, t1, sp + beq t0, t1, 2f + + /* Switch to IRQ stack */ + li t1, _IRQ_STACK_SIZE + PTR_ADD sp, t0, t1 + +2: + jal plat_irq_dispatch + + /* Restore sp */ + move sp, s1 + + j ret_from_irq #ifdef CONFIG_CPU_MICROMIPS nop #endif
@@ -262,8 +297,44 @@ NESTED(except_vec_vi_handler, 0, sp) LONG_L s0, TI_REGS($28) LONG_S sp, TI_REGS($28) - PTR_LA ra, ret_from_irq - jr v0 + + /* + * SAVE_ALL ensures we are using a valid kernel stack for the thread. + * Check if we are already using the IRQ stack. + */ + move s1, sp # Preserve the sp + + /* Get IRQ stack for this CPU */ + ASM_CPUID_MFC0 k0, ASM_SMP_CPUID_REG +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) + lui k1, %hi(irq_stack) +#else + lui k1, %highest(irq_stack) + daddiu k1, %higher(irq_stack) + dsll k1, 16 + daddiu k1, %hi(irq_stack) + dsll k1, 16 +#endif + LONG_SRL k0, SMP_CPUID_PTRSHIFT + LONG_ADDU k1, k0 + LONG_L t0, %lo(irq_stack)(k1) + + # Check if already on IRQ stack + PTR_LI t1, ~(_THREAD_SIZE-1) + and t1, t1, sp + beq t0, t1, 2f + + /* Switch to IRQ stack */ + li t1, _IRQ_STACK_SIZE + PTR_ADD sp, t0, t1 + +2: + jal plat_irq_dispatch + + /* Restore sp */ + move sp, s1 + + j ret_from_irq END(except_vec_vi_handler) /*
Greg Kroah-Hartman
maintainerPATCH 24/29 MIPS: Select HAVE_IRQ_EXIT_ON_IRQ_STACK
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit 3cc3434fd6307d06b53b98ce83e76bf9807689b9 upstream.
Since do_IRQ is now invoked on a separate IRQ stack, we select HAVE_IRQ_EXIT_ON_IRQ_STACK so that softirq's may be invoked directly from irq_exit(), rather than requiring do_softirq_own_stack.
Patchwork: https://patchwork.linux-mips.org/patch/14744/
--- arch/mips/Kconfig | 1 + 1 file changed, 1 insertion(+)
arch/mips/Kconfig +1 -0
@@ -9,6 +9,7 @@ config MIPS select HAVE_CONTEXT_TRACKING select HAVE_GENERIC_DMA_COHERENT select HAVE_IDE + select HAVE_IRQ_EXIT_ON_IRQ_STACK select HAVE_OPROFILE select HAVE_PERF_EVENTS select PERF_USE_VMALLOC
Greg Kroah-Hartman
maintainerPATCH 25/29 MIPS: IRQ Stack: Fix erroneous jal to plat_irq_dispatch
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit c25f8064c1d5731a2ce5664def890140dcdd3e5c upstream.
Commit dda45f701c9d ("MIPS: Switch to the irq_stack in interrupts") changed both the normal and vectored interrupt handlers. Unfortunately the vectored version, "except_vec_vi_handler", was incorrectly modified to unconditionally jal to plat_irq_dispatch, rather than doing a jalr to the vectored handler that has been set up. This is ok for many platforms which set the vectored handler to plat_irq_dispatch anyway, but will cause problems with platforms that use other handlers.
Patchwork: https://patchwork.linux-mips.org/patch/15110/
--- arch/mips/kernel/genex.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/kernel/genex.S +1 -1
@@ -329,7 +329,7 @@ NESTED(except_vec_vi_handler, 0, sp) PTR_ADD sp, t0, t1 2: - jal plat_irq_dispatch + jalr v0 /* Restore sp */ move sp, s1
Greg Kroah-Hartman
maintainerPATCH 28/29 net/packet: fix overflow in check for priv area size
In reply to Greg Kroah-Hartman4.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrey Konovalov <[email protected]>
commit 2b6867c2ce76c596676bec7d2d525af525fdc6e2 upstream.
Subtracting tp_sizeof_priv from tp_block_size and casting to int to check whether one is less then the other doesn't always work (both of them are unsigned ints).
Compare them as is instead.
Also cast tp_sizeof_priv to u64 before using BLK_PLUS_PRIV, as it can overflow inside BLK_PLUS_PRIV otherwise.
--- net/packet/af_packet.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/packet/af_packet.c +2 -2
@@ -4177,8 +4177,8 @@ static int packet_set_ring(struct sock *if (unlikely (!PAGE_ALIGNED (req->tp_block_size))) goto out;if (po->tp_version >=TPACKET_V3 && - (int )(req->tp_block_size - -BLK_PLUS_PRIV (req_u->req3.tp_sizeof_priv)) <=0 ) + req->tp_block_size <= +BLK_PLUS_PRIV ((u64 )req_u->req3.tp_sizeof_priv)) goto out;if (unlikely (req->tp_frame_size < po->tp_hdrlen + po->tp_reserve))
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.10.11 release. There are 29 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Tue Apr 18 08:02:16 UTC 2017. Anything received after that time might be too late.
Build results:
total: 149 pass: 149 fail: 0 Qemu test results: total: 122 pass: 122 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.10.11 release. There are 29 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Tue Apr 18 08:02:16 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.10.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.10.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 15 lines · Shuah Khan
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.10.11 release. There are 29 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Tue Apr 18 08:02:16 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.10.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.10.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Thanks for testing all of these and letting me know.
greg k-h
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 27 lines · kernelci.org bot
stable-rc/linux-4.10.y boot: 102 boots: 5 failed, 96 passed with 1 offline (v4.10.10-30-ge78d0ce7bd97)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.10.y/kernel/v4.10.10-30-ge78d0ce7bd97/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.10.y/kernel/v4.10.10-30-ge78d0ce7bd97/Tree: stable-rc
Branch: linux-4.10.y
Git Describe: v4.10.10-30-ge78d0ce7bd97
Git Commit:e78d0ce7bd973c80af14dbd45c095bfef41cb838
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 15 unique boards, 8 SoC families, 25 builds out of 205Boot Failures Detected:
arm64:
allmodconfig
meson-gxbb-p200: 1 failed labx86:
allnoconfig
minnowboard-max: 1 failed labtinyconfig
minnowboard-max: 1 failed lab
Quoted 8 lines
allmodconfig+CONFIG_OF=n
minnowboard-max: 1 failed labarm:
multi_v7_defconfig+CONFIG_SMP=n
exynos5250-snow: 1 failed lab
Is this the same as the one we are seeing on 4.4.xx? I am curious why we don't see this on 4.9.xx - Is this config not tested on 4.9.xx
thanks,
-- Shuah