[ANNOUNCE] 4.0.5-rt3

From: Sebastian Andrzej Siewior
Date: Thu Jun 11 2015 - 15:06:29 EST


Dear RT folks!

I'm pleased to announce the v4.0.5-rt3 patch set.

Changes since v4.0.5-rt3

- fix blk-core compile on non-RT kernels. Patch by Paul Gortmaker.
- PS3 compile fix. Patch by Paul Gortmaker.
- fix a BUG_ON statement in the swap code. Reported by Clark Williams
and Fernando Lopez-Lezcano.
- compile fix for Intel Atom "sst" Audio driver. Reported by Fernando
Lopez-Lezcano.
- remove a bogus warning in the i915 driver. Patch by Clark Williams.
- fix a sleeping-while-atomic warning in memory compaction code.
Reported by Joakim Hernberg
- fix a irq_work related regression on non-RT kernels introduced in the
latest deadlock fix. Noticed and debugged by Steven Rostedt.

While doing the v4.0 I stumbled upon a few things. Therefore I plan to
reorder the -RT queue and merge patches where possible. Also I intend to
drop PREEMPT_RTB and PREEMPT_RT_BASE unless there is need for itâ

Known issues:

- My AMD box throws a lot of "cpufreq_stat_notifier_trans: No
policy found" warnings after boot. It is gone after manually
setting the policy (to something else than reported).

- bcache is disabled.

- CPU hotplug works in general. Steven's test script however
deadlocks usually on the second invocation.

- xor / raid_pq
I had max latency jumping up to 67563us on one CPU while the next
lower max was 58us. I tracked it down to module's init code of
xor and raid_pq. Both disable preemption while measuring the
performance of the individual implementation.

The delta patch against 4.0.5-rt2 is appended below and can be found here:

https://www.kernel.org/pub/linux/kernel/projects/rt/4.0/incr/patch-4.0.5-rt2-rt3.patch.xz

The RT patch against 4.0.5 can be found here:

https://www.kernel.org/pub/linux/kernel/projects/rt/4.0/patch-4.0.5-rt3.patch.xz

The split quilt queue is available at:

https://www.kernel.org/pub/linux/kernel/projects/rt/4.0/patches-4.0.5-rt3.tar.xz

Sebastian

diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c
index 3f175e8aedb4..c4c02f91904c 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -752,7 +752,7 @@ static int ps3_notification_read_write(struct ps3_notification_device *dev,
}
pr_debug("%s:%u: notification %s issued\n", __func__, __LINE__, op);

- res = wait_event_interruptible(dev->done.wait,
+ res = swait_event_interruptible(dev->done.wait,
dev->done.done || kthread_should_stop());
if (kthread_should_stop())
res = -EINTR;
diff --git a/block/blk-core.c b/block/blk-core.c
index f8a4e9484eb3..ea9a9f41793d 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -100,7 +100,7 @@ void blk_rq_init(struct request_queue *q, struct request *rq)

INIT_LIST_HEAD(&rq->queuelist);
INIT_LIST_HEAD(&rq->timeout_list);
-#if CONFIG_PREEMPT_RT_FULL
+#ifdef CONFIG_PREEMPT_RT_FULL
INIT_WORK(&rq->work, __blk_mq_complete_request_remote_work);
#endif
rq->cpu = -1;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f75173c20f47..30b1d16caa0d 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9745,7 +9745,7 @@ void intel_check_page_flip(struct drm_device *dev, int pipe)
struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);

- WARN_ON(!in_interrupt());
+ WARN_ON_NONRT(!in_interrupt());

if (crtc == NULL)
return;
diff --git a/include/linux/swap.h b/include/linux/swap.h
index 701b8ce36a21..4327e1a576cd 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -298,6 +298,7 @@ extern unsigned long nr_free_pagecache_pages(void);


/* linux/mm/swap.c */
+DECLARE_LOCAL_IRQ_LOCK(swapvec_lock);
extern void lru_cache_add(struct page *);
extern void lru_cache_add_anon(struct page *page);
extern void lru_cache_add_file(struct page *page);
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 0b85716bf72b..292eea0cc412 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -1450,7 +1450,8 @@ void update_process_times(int user_tick)
run_local_timers();
rcu_check_callbacks(user_tick);
#if defined(CONFIG_IRQ_WORK) && !defined(CONFIG_PREEMPT_RT_FULL)
- irq_work_tick();
+ if (in_irq())
+ irq_work_tick();
#endif
run_posix_cpu_timers(p);
}
diff --git a/localversion-rt b/localversion-rt
index c3054d08a112..1445cd65885c 100644
--- a/localversion-rt
+++ b/localversion-rt
@@ -1 +1 @@
--rt2
+-rt3
diff --git a/mm/compaction.c b/mm/compaction.c
index 8c0d9459b54a..0b670021a977 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1387,10 +1387,12 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)
cc->migrate_pfn & ~((1UL << cc->order) - 1);

if (last_migrated_pfn < current_block_start) {
- cpu = get_cpu();
+ cpu = get_cpu_light();
+ local_lock_irq(swapvec_lock);
lru_add_drain_cpu(cpu);
+ local_unlock_irq(swapvec_lock);
drain_local_pages(zone);
- put_cpu();
+ put_cpu_light();
/* No more flushing until we migrate again */
last_migrated_pfn = 0;
}
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 9da0f3e9c1f3..ea10085f6a10 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5822,6 +5822,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
{
struct mem_cgroup *memcg;
unsigned short oldid;
+ unsigned long flags;

VM_BUG_ON_PAGE(PageLRU(page), page);
VM_BUG_ON_PAGE(page_count(page), page);
@@ -5844,11 +5845,10 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
if (!mem_cgroup_is_root(memcg))
page_counter_uncharge(&memcg->memory, 1);

- /* XXX: caller holds IRQ-safe mapping->tree_lock */
- VM_BUG_ON(!irqs_disabled());
-
+ local_lock_irqsave(event_lock, flags);
mem_cgroup_charge_statistics(memcg, page, -1);
memcg_check_events(memcg, page);
+ local_unlock_irqrestore(event_lock, flags);
}

/**
diff --git a/mm/swap.c b/mm/swap.c
index 15288296aa89..43d915765194 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -46,7 +46,7 @@ static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs);
static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);

static DEFINE_LOCAL_IRQ_LOCK(rotate_lock);
-static DEFINE_LOCAL_IRQ_LOCK(swapvec_lock);
+DEFINE_LOCAL_IRQ_LOCK(swapvec_lock);

/*
* This path almost never happens for VM activity - pages are normally
diff --git a/sound/soc/intel/sst/sst.c b/sound/soc/intel/sst/sst.c
index 11c578651c1c..848f8f2ce6db 100644
--- a/sound/soc/intel/sst/sst.c
+++ b/sound/soc/intel/sst/sst.c
@@ -368,8 +368,8 @@ static inline void sst_restore_shim64(struct intel_sst_drv *ctx,
* initialize by FW or driver when firmware is loaded
*/
spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
- sst_shim_write64(shim, SST_IMRX, shim_regs->imrx),
- sst_shim_write64(shim, SST_CSR, shim_regs->csr),
+ sst_shim_write64(shim, SST_IMRX, shim_regs->imrx);
+ sst_shim_write64(shim, SST_CSR, shim_regs->csr);
spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/