[ANNOUNCE] 3.4.82-rt103
Dear RT Folks, I'm pleased to announce the 3.4.82-rt103 stable release. You can get this release via the git tree at: git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git branch: v3.4-rt Head SHA1: b837f3a52f4aa74f8af135b5a5fbb7dd20fa1181 Or to build 3.4.82-rt103 directly, the following patches should be applied: http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.xz http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.4.82.xz http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4.82-rt103.patch.xz You can also build from 3.4.82-rt102 by applying the incremental patch: http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/incr/patch-3.4.82-rt102-rt103.patch.xz Enjoy, -- Steve Changes from v3.4.82-rt102: --- Marc Kleine-Budde (1): net: sched: dev_deactivate_many(): use msleep(1) instead of yield() to wait for outstanding qdisc_run calls Sebastian Andrzej Siewior (1): fs: jbd2: pull your plug when waiting for space Steven Rostedt (1): cpu_chill: Add a UNINTERRUPTIBLE hrtimer_nanosleep Steven Rostedt (Red Hat) (1): Linux 3.4.82-rt103 fs/jbd2/checkpoint.c| 2 ++ kernel/hrtimer.c| 25 ++--- localversion-rt | 2 +- net/sched/sch_generic.c | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) --- diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c index c78841e..a4d273b 100644 --- a/fs/jbd2/checkpoint.c +++ b/fs/jbd2/checkpoint.c @@ -125,6 +125,8 @@ void __jbd2_log_wait_for_space(journal_t *journal) if (journal->j_flags & JBD2_ABORT) return; write_unlock(>j_state_lock); + if (current->plug) + io_schedule(); mutex_lock(>j_checkpoint_mutex); /* diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index a87d70d..5342f82 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1724,12 +1724,13 @@ void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) } EXPORT_SYMBOL_GPL(hrtimer_init_sleeper); -static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode) +static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode, + unsigned long state) { hrtimer_init_sleeper(t, current); do { - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(state); hrtimer_start_expires(>timer, mode); if (!hrtimer_active(>timer)) t->task = NULL; @@ -1773,7 +1774,8 @@ long __sched hrtimer_nanosleep_restart(struct restart_block *restart) HRTIMER_MODE_ABS); hrtimer_set_expires_tv64(, restart->nanosleep.expires); - if (do_nanosleep(, HRTIMER_MODE_ABS)) + /* cpu_chill() does not care about restart state. */ + if (do_nanosleep(, HRTIMER_MODE_ABS, TASK_INTERRUPTIBLE)) goto out; rmtp = restart->nanosleep.rmtp; @@ -1790,8 +1792,10 @@ out: return ret; } -long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, - const enum hrtimer_mode mode, const clockid_t clockid) +static long +__hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, + const enum hrtimer_mode mode, const clockid_t clockid, + unsigned long state) { struct restart_block *restart; struct hrtimer_sleeper t; @@ -1804,7 +1808,7 @@ long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, hrtimer_init_on_stack(, clockid, mode); hrtimer_set_expires_range_ns(, timespec_to_ktime(*rqtp), slack); - if (do_nanosleep(, mode)) + if (do_nanosleep(, mode, state)) goto out; /* Absolute timers do not update the rmtp value and restart: */ @@ -1831,6 +1835,12 @@ out: return ret; } +long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, + const enum hrtimer_mode mode, const clockid_t clockid) +{ + return __hrtimer_nanosleep(rqtp, rmtp, mode, clockid, TASK_INTERRUPTIBLE); +} + SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp, struct timespec __user *, rmtp) { @@ -1857,7 +1867,8 @@ void cpu_chill(void) unsigned int freeze_flag = current->flags & PF_NOFREEZE; current->flags |= PF_NOFREEZE; - hrtimer_nanosleep(, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC); + __hrtimer_nanosleep(, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC, + TASK_UNINTERRUPTIBLE); if (!freeze_flag) current->flags &= ~PF_NOFREEZE; } diff --git a/localversion-rt b/localversion-rt index 33017cd..e0a0b11 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt102 +-rt103 diff --git
[ANNOUNCE] 3.4.82-rt103
Dear RT Folks, I'm pleased to announce the 3.4.82-rt103 stable release. You can get this release via the git tree at: git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git branch: v3.4-rt Head SHA1: b837f3a52f4aa74f8af135b5a5fbb7dd20fa1181 Or to build 3.4.82-rt103 directly, the following patches should be applied: http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.xz http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.4.82.xz http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4.82-rt103.patch.xz You can also build from 3.4.82-rt102 by applying the incremental patch: http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/incr/patch-3.4.82-rt102-rt103.patch.xz Enjoy, -- Steve Changes from v3.4.82-rt102: --- Marc Kleine-Budde (1): net: sched: dev_deactivate_many(): use msleep(1) instead of yield() to wait for outstanding qdisc_run calls Sebastian Andrzej Siewior (1): fs: jbd2: pull your plug when waiting for space Steven Rostedt (1): cpu_chill: Add a UNINTERRUPTIBLE hrtimer_nanosleep Steven Rostedt (Red Hat) (1): Linux 3.4.82-rt103 fs/jbd2/checkpoint.c| 2 ++ kernel/hrtimer.c| 25 ++--- localversion-rt | 2 +- net/sched/sch_generic.c | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) --- diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c index c78841e..a4d273b 100644 --- a/fs/jbd2/checkpoint.c +++ b/fs/jbd2/checkpoint.c @@ -125,6 +125,8 @@ void __jbd2_log_wait_for_space(journal_t *journal) if (journal-j_flags JBD2_ABORT) return; write_unlock(journal-j_state_lock); + if (current-plug) + io_schedule(); mutex_lock(journal-j_checkpoint_mutex); /* diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index a87d70d..5342f82 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1724,12 +1724,13 @@ void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, struct task_struct *task) } EXPORT_SYMBOL_GPL(hrtimer_init_sleeper); -static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode) +static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode, + unsigned long state) { hrtimer_init_sleeper(t, current); do { - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(state); hrtimer_start_expires(t-timer, mode); if (!hrtimer_active(t-timer)) t-task = NULL; @@ -1773,7 +1774,8 @@ long __sched hrtimer_nanosleep_restart(struct restart_block *restart) HRTIMER_MODE_ABS); hrtimer_set_expires_tv64(t.timer, restart-nanosleep.expires); - if (do_nanosleep(t, HRTIMER_MODE_ABS)) + /* cpu_chill() does not care about restart state. */ + if (do_nanosleep(t, HRTIMER_MODE_ABS, TASK_INTERRUPTIBLE)) goto out; rmtp = restart-nanosleep.rmtp; @@ -1790,8 +1792,10 @@ out: return ret; } -long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, - const enum hrtimer_mode mode, const clockid_t clockid) +static long +__hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, + const enum hrtimer_mode mode, const clockid_t clockid, + unsigned long state) { struct restart_block *restart; struct hrtimer_sleeper t; @@ -1804,7 +1808,7 @@ long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, hrtimer_init_on_stack(t.timer, clockid, mode); hrtimer_set_expires_range_ns(t.timer, timespec_to_ktime(*rqtp), slack); - if (do_nanosleep(t, mode)) + if (do_nanosleep(t, mode, state)) goto out; /* Absolute timers do not update the rmtp value and restart: */ @@ -1831,6 +1835,12 @@ out: return ret; } +long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, + const enum hrtimer_mode mode, const clockid_t clockid) +{ + return __hrtimer_nanosleep(rqtp, rmtp, mode, clockid, TASK_INTERRUPTIBLE); +} + SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp, struct timespec __user *, rmtp) { @@ -1857,7 +1867,8 @@ void cpu_chill(void) unsigned int freeze_flag = current-flags PF_NOFREEZE; current-flags |= PF_NOFREEZE; - hrtimer_nanosleep(tu, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC); + __hrtimer_nanosleep(tu, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC, + TASK_UNINTERRUPTIBLE); if (!freeze_flag) current-flags = ~PF_NOFREEZE; } diff --git a/localversion-rt b/localversion-rt index 33017cd..e0a0b11 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@