On Tue, 2013-04-23 at 12:00 -0400, Steven Rostedt wrote: > On Tue, 2013-04-23 at 05:13 +0200, Mike Galbraith wrote: > > On Mon, 2013-04-22 at 22:47 -0400, Steven Rostedt wrote: > > > > > Yeah, the bug is with the swap_lock not being unique (do a git grep > > > swap_lock), and it being weak made that per_cpu swap_lock the same lock > > > as the other locks. > > > > > > Apply my patch and your bug should go away. > > > > Aha, so the bug is certainly dead. I'll test anyway, but you can take > > no news as confirmation that it's dead. > > > > Actually, I would feel more comfortable if I heard news that confirms > its dead ;-) > > /me hopes to hear "It's dead Jim". It's-dead-Jim-by: Mike Galbraith <bitbucket@xxxxxxxxx> For 3.6-rt tested, I added the hunk below, which isn't in 3.8-rt.. @@ -850,7 +850,7 @@ EXPORT_SYMBOL(pagevec_lookup_tag); static int __init swap_init_locks(void) { local_irq_lock_init(rotate_lock); - local_irq_lock_init(swap_lock); + local_irq_lock_init(swapvec_lock); return 1; } early_initcall(swap_init_locks); ..and build fix stolen from 3.8-rt. From: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> Subject: gpu/i915: don't open code these things Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_gem.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -90,7 +90,6 @@ i915_gem_wait_for_error(struct drm_devic { struct drm_i915_private *dev_priv = dev->dev_private; struct completion *x = &dev_priv->error_completion; - unsigned long flags; int ret; if (!atomic_read(&dev_priv->mm.wedged)) @@ -115,9 +114,7 @@ i915_gem_wait_for_error(struct drm_devic * end up waiting upon a subsequent completion event that * will never happen. */ - spin_lock_irqsave(&x->wait.lock, flags); - x->done++; - spin_unlock_irqrestore(&x->wait.lock, flags); + complete(x); } return 0; } @@ -1884,12 +1881,9 @@ i915_gem_check_wedge(struct drm_i915_pri if (atomic_read(&dev_priv->mm.wedged)) { struct completion *x = &dev_priv->error_completion; bool recovery_complete; - unsigned long flags; /* Give the error handler a chance to run. */ - spin_lock_irqsave(&x->wait.lock, flags); - recovery_complete = x->done > 0; - spin_unlock_irqrestore(&x->wait.lock, flags); + recovery_complete = completion_done(x); /* Non-interruptible callers can't handle -EAGAIN, hence return * -EIO unconditionally for these. */ -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html