X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=kernel-rt.patch;h=840aada4c0627bd874bacf5be3004deb9a3b9db8;hb=b79e74cff242673a3d2a168bacec499748e8cea3;hp=f620c48590e6f43d491029f419de47b80f2e1c1a;hpb=7323c6802138dc483e23b468239a67b3ca38cdac;p=packages%2Fkernel.git diff --git a/kernel-rt.patch b/kernel-rt.patch index f620c485..840aada4 100644 --- a/kernel-rt.patch +++ b/kernel-rt.patch @@ -2649,10 +2649,10 @@ index bd7be8efdc4c..b3b0a7f7b1ca 100644 * Leave lazy mode, flushing any hypercalls made here. * This must be done before restoring TLS segments so diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c -index 3f05c044720b..fe68afd37162 100644 +index b24b3c6d686e..02a062b0de5d 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c -@@ -1939,6 +1939,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu) +@@ -1944,6 +1944,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu) hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); apic->lapic_timer.timer.function = apic_timer_fn; @@ -2661,10 +2661,10 @@ index 3f05c044720b..fe68afd37162 100644 /* * APIC is created enabled. This will prevent kvm_lapic_set_base from diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index 595f8149c0d9..31b15149f412 100644 +index 02d45296a97c..4963bd51d20b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c -@@ -5961,6 +5961,13 @@ int kvm_arch_init(void *opaque) +@@ -5966,6 +5966,13 @@ int kvm_arch_init(void *opaque) goto out; } @@ -2957,7 +2957,7 @@ index b333fc45f9ec..8b85916e6986 100644 /* diff --git a/block/blk-core.c b/block/blk-core.c -index 95379fc83805..e531da0c9232 100644 +index b1c76aa73492..5808a85a7974 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -125,6 +125,9 @@ void blk_rq_init(struct request_queue *q, struct request *rq) @@ -2979,7 +2979,7 @@ index 95379fc83805..e531da0c9232 100644 queue_flag_clear(QUEUE_FLAG_STOPPED, q); __blk_run_queue(q); -@@ -659,7 +662,7 @@ int blk_queue_enter(struct request_queue *q, bool nowait) +@@ -660,7 +663,7 @@ int blk_queue_enter(struct request_queue *q, bool nowait) if (nowait) return -EBUSY; @@ -2988,7 +2988,7 @@ index 95379fc83805..e531da0c9232 100644 !atomic_read(&q->mq_freeze_depth) || blk_queue_dying(q)); if (blk_queue_dying(q)) -@@ -679,7 +682,7 @@ static void blk_queue_usage_counter_release(struct percpu_ref *ref) +@@ -680,7 +683,7 @@ static void blk_queue_usage_counter_release(struct percpu_ref *ref) struct request_queue *q = container_of(ref, struct request_queue, q_usage_counter); @@ -2997,7 +2997,7 @@ index 95379fc83805..e531da0c9232 100644 } static void blk_rq_timed_out_timer(unsigned long data) -@@ -748,7 +751,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) +@@ -750,7 +753,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) q->bypass_depth = 1; __set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); @@ -3006,7 +3006,7 @@ index 95379fc83805..e531da0c9232 100644 /* * Init percpu_ref in atomic mode so that it's faster to shutdown. -@@ -3200,7 +3203,7 @@ static void queue_unplugged(struct request_queue *q, unsigned int depth, +@@ -3202,7 +3205,7 @@ static void queue_unplugged(struct request_queue *q, unsigned int depth, blk_run_queue_async(q); else __blk_run_queue(q); @@ -3015,7 +3015,7 @@ index 95379fc83805..e531da0c9232 100644 } static void flush_plug_callbacks(struct blk_plug *plug, bool from_schedule) -@@ -3248,7 +3251,6 @@ EXPORT_SYMBOL(blk_check_plugged); +@@ -3250,7 +3253,6 @@ EXPORT_SYMBOL(blk_check_plugged); void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) { struct request_queue *q; @@ -3023,7 +3023,7 @@ index 95379fc83805..e531da0c9232 100644 struct request *rq; LIST_HEAD(list); unsigned int depth; -@@ -3268,11 +3270,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) +@@ -3270,11 +3272,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) q = NULL; depth = 0; @@ -3035,7 +3035,7 @@ index 95379fc83805..e531da0c9232 100644 while (!list_empty(&list)) { rq = list_entry_rq(list.next); list_del_init(&rq->queuelist); -@@ -3285,7 +3282,7 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) +@@ -3287,7 +3284,7 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) queue_unplugged(q, depth, from_schedule); q = rq->q; depth = 0; @@ -3044,7 +3044,7 @@ index 95379fc83805..e531da0c9232 100644 } /* -@@ -3312,8 +3309,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) +@@ -3314,8 +3311,6 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule) */ if (q) queue_unplugged(q, depth, from_schedule); @@ -5465,7 +5465,7 @@ index e8819aa20415..dd7f9bf45d6c 100644 #include /* diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 1ef31e3ee4a1..ff9f4e50563c 100644 +index f6e4373a8850..4620b51b0e7c 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -35,6 +35,7 @@ @@ -5476,7 +5476,7 @@ index 1ef31e3ee4a1..ff9f4e50563c 100644 #include #include #include -@@ -3140,9 +3141,9 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3143,9 +3144,9 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_rpm_get(up); @@ -5573,7 +5573,7 @@ index fcc7aa248ce7..fb2c38d875f9 100644 usb_anchor_resume_wakeups(anchor); atomic_dec(&urb->use_count); diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c -index 273320fa30ae..f2a125841653 100644 +index 4fce83266926..5e902a89d8e6 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -1593,7 +1593,7 @@ static void ffs_data_put(struct ffs_data *ffs) @@ -6031,7 +6031,7 @@ index 920aa0b1c6b0..3d6b5fd1bf06 100644 inode->dirtied_when = 0; diff --git a/fs/libfs.c b/fs/libfs.c -index 48826d4da189..3ea54d1fc431 100644 +index 9588780ad43e..9b37abd354c9 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -89,7 +89,7 @@ static struct dentry *next_positive(struct dentry *parent, @@ -6273,7 +6273,7 @@ index dff600ae0d74..d726d2e09353 100644 mutex_unlock(&sp->so_delegreturn_mutex); put_nfs_open_context(ctx); diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c -index d04ec3814779..ba90d41d3c34 100644 +index 65566d5fcf39..5f08183dddcd 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -485,7 +485,7 @@ static @@ -6285,7 +6285,7 @@ index d04ec3814779..ba90d41d3c34 100644 struct dentry *dentry; struct dentry *alias; struct inode *dir = d_inode(parent); -@@ -1491,7 +1491,7 @@ int nfs_atomic_open(struct inode *dir, struct dentry *dentry, +@@ -1492,7 +1492,7 @@ int nfs_atomic_open(struct inode *dir, struct dentry *dentry, struct file *file, unsigned open_flags, umode_t mode, int *opened) { @@ -6294,7 +6294,7 @@ index d04ec3814779..ba90d41d3c34 100644 struct nfs_open_context *ctx; struct dentry *res; struct iattr attr = { .ia_valid = ATTR_OPEN }; -@@ -1806,7 +1806,11 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry) +@@ -1807,7 +1807,11 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry) trace_nfs_rmdir_enter(dir, dentry); if (d_really_is_positive(dentry)) { @@ -6306,7 +6306,7 @@ index d04ec3814779..ba90d41d3c34 100644 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); /* Ensure the VFS deletes this inode */ switch (error) { -@@ -1816,7 +1820,11 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry) +@@ -1817,7 +1821,11 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry) case -ENOENT: nfs_dentry_handle_enoent(dentry); } @@ -6348,10 +6348,10 @@ index 1452177c822d..f43b01d54c59 100644 }; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c -index a53b8e0c896a..da0a483c5442 100644 +index 4638654e26f3..5dd6fd555c72 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c -@@ -2695,7 +2695,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, +@@ -2691,7 +2691,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, unsigned int seq; int ret; @@ -6360,7 +6360,7 @@ index a53b8e0c896a..da0a483c5442 100644 ret = _nfs4_proc_open(opendata); if (ret != 0) -@@ -2733,7 +2733,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, +@@ -2729,7 +2729,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, if (d_inode(dentry) == state->inode) { nfs_inode_attach_open_context(ctx); @@ -6370,7 +6370,7 @@ index a53b8e0c896a..da0a483c5442 100644 } out: diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c -index 92671914067f..44038480c88c 100644 +index 71deeae6eefd..4be6999299dc 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -488,7 +488,7 @@ nfs4_alloc_state_owner(struct nfs_server *server, @@ -6781,7 +6781,7 @@ index 8fdcb783197d..d07dbeec7bc1 100644 #endif /* _LINUX_BH_H */ diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h -index 447a915db25d..e187a3356345 100644 +index 4431ea2c8802..0744157a97ca 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -75,8 +75,50 @@ struct buffer_head { @@ -12202,7 +12202,7 @@ index fc1ef736253c..83c666537a7a 100644 return r; } diff --git a/kernel/events/core.c b/kernel/events/core.c -index 36ff2d93f222..554aebf7e88b 100644 +index 13b9784427b0..f74fbfe5465c 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -1050,6 +1050,7 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu) @@ -12213,7 +12213,7 @@ index 36ff2d93f222..554aebf7e88b 100644 } static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx) -@@ -8390,6 +8391,7 @@ static void perf_swevent_init_hrtimer(struct perf_event *event) +@@ -8405,6 +8406,7 @@ static void perf_swevent_init_hrtimer(struct perf_event *event) hrtimer_init(&hwc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); hwc->hrtimer.function = perf_swevent_hrtimer; @@ -18056,7 +18056,7 @@ index 8d0f35debf35..b62cf6400fe0 100644 } EXPORT_SYMBOL(completion_done); diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 78181c03d9c7..034a738f1bf7 100644 +index e5066955cc3a..ed1ebcc2ff3d 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -129,7 +129,11 @@ const_debug unsigned int sysctl_sched_features = @@ -18174,7 +18174,7 @@ index 78181c03d9c7..034a738f1bf7 100644 void resched_cpu(int cpu) { struct rq *rq = cpu_rq(cpu); -@@ -525,11 +577,14 @@ void resched_cpu(int cpu) +@@ -524,11 +576,14 @@ void resched_cpu(int cpu) */ int get_nohz_timer_target(void) { @@ -18191,7 +18191,7 @@ index 78181c03d9c7..034a738f1bf7 100644 rcu_read_lock(); for_each_domain(cpu, sd) { -@@ -548,6 +603,8 @@ int get_nohz_timer_target(void) +@@ -547,6 +602,8 @@ int get_nohz_timer_target(void) cpu = housekeeping_any_cpu(); unlock: rcu_read_unlock(); @@ -18200,7 +18200,7 @@ index 78181c03d9c7..034a738f1bf7 100644 return cpu; } /* -@@ -1093,7 +1150,8 @@ void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_ma +@@ -1092,7 +1149,8 @@ void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_ma p->nr_cpus_allowed = cpumask_weight(new_mask); } @@ -18210,7 +18210,7 @@ index 78181c03d9c7..034a738f1bf7 100644 { struct rq *rq = task_rq(p); bool queued, running; -@@ -1122,6 +1180,98 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) +@@ -1121,6 +1179,98 @@ void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask) set_curr_task(rq, p); } @@ -18309,7 +18309,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * Change a given task's CPU affinity. Migrate the thread to a * proper CPU and schedule it away if the CPU it's executing on -@@ -1180,7 +1330,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, +@@ -1179,7 +1329,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p, } /* Can the task run on the task's current CPU? If so, we're done */ @@ -18318,7 +18318,7 @@ index 78181c03d9c7..034a738f1bf7 100644 goto out; dest_cpu = cpumask_any_and(cpu_valid_mask, new_mask); -@@ -1367,6 +1517,18 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p) +@@ -1366,6 +1516,18 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p) return ret; } @@ -18337,7 +18337,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * wait_task_inactive - wait for a thread to unschedule. * -@@ -1411,7 +1573,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) +@@ -1410,7 +1572,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) * is actually now running somewhere else! */ while (task_running(rq, p)) { @@ -18346,7 +18346,7 @@ index 78181c03d9c7..034a738f1bf7 100644 return 0; cpu_relax(); } -@@ -1426,7 +1588,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) +@@ -1425,7 +1587,8 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state) running = task_running(rq, p); queued = task_on_rq_queued(p); ncsw = 0; @@ -18356,7 +18356,7 @@ index 78181c03d9c7..034a738f1bf7 100644 ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ task_rq_unlock(rq, p, &rf); -@@ -1681,10 +1844,6 @@ static inline void ttwu_activate(struct rq *rq, struct task_struct *p, int en_fl +@@ -1680,10 +1843,6 @@ static inline void ttwu_activate(struct rq *rq, struct task_struct *p, int en_fl { activate_task(rq, p, en_flags); p->on_rq = TASK_ON_RQ_QUEUED; @@ -18367,7 +18367,7 @@ index 78181c03d9c7..034a738f1bf7 100644 } /* -@@ -2019,8 +2178,27 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) +@@ -2018,8 +2177,27 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) */ smp_mb__before_spinlock(); raw_spin_lock_irqsave(&p->pi_lock, flags); @@ -18396,7 +18396,7 @@ index 78181c03d9c7..034a738f1bf7 100644 trace_sched_waking(p); -@@ -2103,53 +2281,6 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) +@@ -2102,53 +2280,6 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) } /** @@ -18450,7 +18450,7 @@ index 78181c03d9c7..034a738f1bf7 100644 * wake_up_process - Wake up a specific process * @p: The process to be woken up. * -@@ -2167,6 +2298,18 @@ int wake_up_process(struct task_struct *p) +@@ -2166,6 +2297,18 @@ int wake_up_process(struct task_struct *p) } EXPORT_SYMBOL(wake_up_process); @@ -18469,7 +18469,7 @@ index 78181c03d9c7..034a738f1bf7 100644 int wake_up_state(struct task_struct *p, unsigned int state) { return try_to_wake_up(p, state, 0); -@@ -2443,6 +2586,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) +@@ -2442,6 +2585,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) p->on_cpu = 0; #endif init_task_preempt_count(p); @@ -18479,7 +18479,7 @@ index 78181c03d9c7..034a738f1bf7 100644 #ifdef CONFIG_SMP plist_node_init(&p->pushable_tasks, MAX_PRIO); RB_CLEAR_NODE(&p->pushable_dl_tasks); -@@ -2771,21 +2917,16 @@ static struct rq *finish_task_switch(struct task_struct *prev) +@@ -2770,21 +2916,16 @@ static struct rq *finish_task_switch(struct task_struct *prev) finish_arch_post_lock_switch(); fire_sched_in_preempt_notifiers(current); @@ -18506,7 +18506,7 @@ index 78181c03d9c7..034a738f1bf7 100644 put_task_struct(prev); } -@@ -3253,6 +3394,114 @@ static inline void schedule_debug(struct task_struct *prev) +@@ -3252,6 +3393,114 @@ static inline void schedule_debug(struct task_struct *prev) schedstat_inc(this_rq()->sched_count); } @@ -18621,7 +18621,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * Pick up the highest-prio task: */ -@@ -3369,19 +3618,6 @@ static void __sched notrace __schedule(bool preempt) +@@ -3368,19 +3617,6 @@ static void __sched notrace __schedule(bool preempt) } else { deactivate_task(rq, prev, DEQUEUE_SLEEP); prev->on_rq = 0; @@ -18641,7 +18641,7 @@ index 78181c03d9c7..034a738f1bf7 100644 } switch_count = &prev->nvcsw; } -@@ -3391,6 +3627,7 @@ static void __sched notrace __schedule(bool preempt) +@@ -3390,6 +3626,7 @@ static void __sched notrace __schedule(bool preempt) next = pick_next_task(rq, prev, cookie); clear_tsk_need_resched(prev); @@ -18649,7 +18649,7 @@ index 78181c03d9c7..034a738f1bf7 100644 clear_preempt_need_resched(); rq->clock_skip_update = 0; -@@ -3438,9 +3675,20 @@ void __noreturn do_task_dead(void) +@@ -3437,9 +3674,20 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -18671,7 +18671,7 @@ index 78181c03d9c7..034a738f1bf7 100644 * If we are going to sleep and we have plugged IO queued, * make sure to submit it to avoid deadlocks. */ -@@ -3448,6 +3696,12 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -3447,6 +3695,12 @@ static inline void sched_submit_work(struct task_struct *tsk) blk_schedule_flush_plug(tsk); } @@ -18684,7 +18684,7 @@ index 78181c03d9c7..034a738f1bf7 100644 asmlinkage __visible void __sched schedule(void) { struct task_struct *tsk = current; -@@ -3458,6 +3712,7 @@ asmlinkage __visible void __sched schedule(void) +@@ -3457,6 +3711,7 @@ asmlinkage __visible void __sched schedule(void) __schedule(false); sched_preempt_enable_no_resched(); } while (need_resched()); @@ -18692,7 +18692,7 @@ index 78181c03d9c7..034a738f1bf7 100644 } EXPORT_SYMBOL(schedule); -@@ -3521,6 +3776,30 @@ static void __sched notrace preempt_schedule_common(void) +@@ -3520,6 +3775,30 @@ static void __sched notrace preempt_schedule_common(void) } while (need_resched()); } @@ -18723,7 +18723,7 @@ index 78181c03d9c7..034a738f1bf7 100644 #ifdef CONFIG_PREEMPT /* * this is the entry point to schedule() from in-kernel preemption -@@ -3535,7 +3814,8 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) +@@ -3534,7 +3813,8 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) */ if (likely(!preemptible())) return; @@ -18733,7 +18733,7 @@ index 78181c03d9c7..034a738f1bf7 100644 preempt_schedule_common(); } NOKPROBE_SYMBOL(preempt_schedule); -@@ -3562,6 +3842,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) +@@ -3561,6 +3841,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) if (likely(!preemptible())) return; @@ -18743,7 +18743,7 @@ index 78181c03d9c7..034a738f1bf7 100644 do { /* * Because the function tracer can trace preempt_count_sub() -@@ -3584,7 +3867,16 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) +@@ -3583,7 +3866,16 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) * an infinite recursion. */ prev_ctx = exception_enter(); @@ -18760,7 +18760,7 @@ index 78181c03d9c7..034a738f1bf7 100644 exception_exit(prev_ctx); preempt_latency_stop(1); -@@ -3630,10 +3922,25 @@ EXPORT_SYMBOL(default_wake_function); +@@ -3629,10 +3921,25 @@ EXPORT_SYMBOL(default_wake_function); #ifdef CONFIG_RT_MUTEXES @@ -18788,7 +18788,7 @@ index 78181c03d9c7..034a738f1bf7 100644 * * This function changes the 'effective' priority of a task. It does * not touch ->normal_prio like __setscheduler(). -@@ -3641,16 +3948,40 @@ EXPORT_SYMBOL(default_wake_function); +@@ -3640,16 +3947,40 @@ EXPORT_SYMBOL(default_wake_function); * Used by the rt_mutex code to implement priority inheritance * logic. Call site only calls if the priority of the task changed. */ @@ -18832,7 +18832,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * Idle task boosting is a nono in general. There is one -@@ -3670,7 +4001,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio) +@@ -3669,7 +4000,7 @@ void rt_mutex_setprio(struct task_struct *p, int prio) goto out_unlock; } @@ -18841,7 +18841,7 @@ index 78181c03d9c7..034a738f1bf7 100644 oldprio = p->prio; if (oldprio == prio) -@@ -3694,7 +4025,6 @@ void rt_mutex_setprio(struct task_struct *p, int prio) +@@ -3693,7 +4024,6 @@ void rt_mutex_setprio(struct task_struct *p, int prio) * running task */ if (dl_prio(prio)) { @@ -18849,7 +18849,7 @@ index 78181c03d9c7..034a738f1bf7 100644 if (!dl_prio(p->normal_prio) || (pi_task && dl_entity_preempt(&pi_task->dl, &p->dl))) { p->dl.dl_boosted = 1; -@@ -3731,6 +4061,11 @@ void rt_mutex_setprio(struct task_struct *p, int prio) +@@ -3730,6 +4060,11 @@ void rt_mutex_setprio(struct task_struct *p, int prio) balance_callback(rq); preempt_enable(); } @@ -18861,7 +18861,7 @@ index 78181c03d9c7..034a738f1bf7 100644 #endif void set_user_nice(struct task_struct *p, long nice) -@@ -3975,10 +4310,9 @@ static void __setscheduler(struct rq *rq, struct task_struct *p, +@@ -3974,10 +4309,9 @@ static void __setscheduler(struct rq *rq, struct task_struct *p, * Keep a potential priority boosting if called from * sched_setscheduler(). */ @@ -18874,7 +18874,7 @@ index 78181c03d9c7..034a738f1bf7 100644 if (dl_prio(p->prio)) p->sched_class = &dl_sched_class; -@@ -4265,7 +4599,7 @@ static int __sched_setscheduler(struct task_struct *p, +@@ -4264,7 +4598,7 @@ static int __sched_setscheduler(struct task_struct *p, * the runqueue. This will be done when the task deboost * itself. */ @@ -18883,7 +18883,7 @@ index 78181c03d9c7..034a738f1bf7 100644 if (new_effective_prio == oldprio) queue_flags &= ~DEQUEUE_MOVE; } -@@ -4940,6 +5274,7 @@ int __cond_resched_lock(spinlock_t *lock) +@@ -4939,6 +5273,7 @@ int __cond_resched_lock(spinlock_t *lock) } EXPORT_SYMBOL(__cond_resched_lock); @@ -18891,7 +18891,7 @@ index 78181c03d9c7..034a738f1bf7 100644 int __sched __cond_resched_softirq(void) { BUG_ON(!in_softirq()); -@@ -4953,6 +5288,7 @@ int __sched __cond_resched_softirq(void) +@@ -4952,6 +5287,7 @@ int __sched __cond_resched_softirq(void) return 0; } EXPORT_SYMBOL(__cond_resched_softirq); @@ -18899,7 +18899,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /** * yield - yield the current processor to other threads. -@@ -5316,7 +5652,9 @@ void init_idle(struct task_struct *idle, int cpu) +@@ -5315,7 +5651,9 @@ void init_idle(struct task_struct *idle, int cpu) /* Set the preempt count _outside_ the spinlocks! */ init_idle_preempt_count(idle, cpu); @@ -18910,7 +18910,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * The idle tasks have their own, simple scheduling class: */ -@@ -5459,6 +5797,8 @@ void sched_setnuma(struct task_struct *p, int nid) +@@ -5458,6 +5796,8 @@ void sched_setnuma(struct task_struct *p, int nid) #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_HOTPLUG_CPU @@ -18919,7 +18919,7 @@ index 78181c03d9c7..034a738f1bf7 100644 /* * Ensures that the idle task is using init_mm right before its cpu goes * offline. -@@ -5473,7 +5813,12 @@ void idle_task_exit(void) +@@ -5472,7 +5812,12 @@ void idle_task_exit(void) switch_mm(mm, &init_mm, current); finish_arch_post_lock_switch(); } @@ -18933,7 +18933,15 @@ index 78181c03d9c7..034a738f1bf7 100644 } /* -@@ -7434,6 +7779,10 @@ int sched_cpu_dying(unsigned int cpu) +@@ -5881,6 +6226,7 @@ static int init_rootdomain(struct root_domain *rd) + rd->rto_cpu = -1; + raw_spin_lock_init(&rd->rto_lock); + init_irq_work(&rd->rto_push_work, rto_push_irq_work_func); ++ rd->rto_push_work.flags |= IRQ_WORK_HARD_IRQ; + #endif + + init_dl_bw(&rd->dl_bw); +@@ -7439,6 +7785,10 @@ int sched_cpu_dying(unsigned int cpu) update_max_interval(); nohz_balance_exit_idle(cpu); hrtick_clear(rq); @@ -18944,7 +18952,7 @@ index 78181c03d9c7..034a738f1bf7 100644 return 0; } #endif -@@ -7695,7 +8044,7 @@ void __init sched_init(void) +@@ -7700,7 +8050,7 @@ void __init sched_init(void) #ifdef CONFIG_DEBUG_ATOMIC_SLEEP static inline int preempt_count_equals(int preempt_offset) { @@ -19091,7 +19099,7 @@ index 69631fa46c2f..6d28fcd08872 100644 #ifdef HAVE_RT_PUSH_IPI /* diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c -index f139f22ce30d..b0691f4e7d49 100644 +index 9c131168d933..340a0a5d435c 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -47,6 +47,7 @@ void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime) @@ -19103,10 +19111,10 @@ index f139f22ce30d..b0691f4e7d49 100644 } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index ad77d666583c..16df04073b57 100644 +index cff985feb6e7..280c7d5a7657 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -1152,6 +1152,7 @@ static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev) +@@ -1162,6 +1162,7 @@ static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev) #define WF_SYNC 0x01 /* waker goes to sleep after wakeup */ #define WF_FORK 0x02 /* child wakeup after fork */ #define WF_MIGRATED 0x4 /* internal use, task got migrated */ @@ -19114,7 +19122,7 @@ index ad77d666583c..16df04073b57 100644 /* * To aid in avoiding the subversion of "niceness" due to uneven distribution -@@ -1335,6 +1336,15 @@ extern void init_sched_fair_class(void); +@@ -1345,6 +1346,15 @@ extern void init_sched_fair_class(void); extern void resched_curr(struct rq *rq); extern void resched_cpu(int cpu); @@ -24873,11 +24881,11 @@ index 1afec32de6f2..11fa431046a8 100644 dump_stack(); diff --git a/localversion-rt b/localversion-rt new file mode 100644 -index 000000000000..c06cc4356292 +index 000000000000..66fa05e70f29 --- /dev/null +++ b/localversion-rt @@ -0,0 +1 @@ -+-rt57 ++-rt60 diff --git a/mm/Kconfig b/mm/Kconfig index 86e3e0e74d20..77e5862a1ed2 100644 --- a/mm/Kconfig @@ -25129,7 +25137,7 @@ index 6f4d27c5bb32..5cd25c745a8f 100644 #ifdef finish_arch_post_lock_switch finish_arch_post_lock_switch(); diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 4a044134ce84..3f58b5571c8c 100644 +index fbc38888252b..1cb08e1406ea 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -61,6 +61,7 @@ @@ -25397,7 +25405,7 @@ index 4a044134ce84..3f58b5571c8c 100644 } /* -@@ -2636,7 +2696,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, +@@ -2629,7 +2689,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, struct per_cpu_pages *pcp; struct list_head *list; @@ -25406,7 +25414,7 @@ index 4a044134ce84..3f58b5571c8c 100644 do { pcp = &this_cpu_ptr(zone->pageset)->pcp; list = &pcp->lists[migratetype]; -@@ -2663,7 +2723,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, +@@ -2656,7 +2716,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, * allocate greater than order-1 page units with __GFP_NOFAIL. */ WARN_ON_ONCE((gfp_flags & __GFP_NOFAIL) && (order > 1)); @@ -25415,7 +25423,7 @@ index 4a044134ce84..3f58b5571c8c 100644 do { page = NULL; -@@ -2675,22 +2735,24 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, +@@ -2668,22 +2728,24 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, if (!page) page = __rmqueue(zone, order, migratetype); } while (page && check_new_pages(page, order)); @@ -25444,7 +25452,7 @@ index 4a044134ce84..3f58b5571c8c 100644 return NULL; } -@@ -6568,7 +6630,9 @@ static int page_alloc_cpu_notify(struct notifier_block *self, +@@ -6561,7 +6623,9 @@ static int page_alloc_cpu_notify(struct notifier_block *self, int cpu = (unsigned long)hcpu; if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) { @@ -25454,7 +25462,7 @@ index 4a044134ce84..3f58b5571c8c 100644 drain_pages(cpu); /* -@@ -6594,6 +6658,7 @@ static int page_alloc_cpu_notify(struct notifier_block *self, +@@ -6587,6 +6651,7 @@ static int page_alloc_cpu_notify(struct notifier_block *self, void __init page_alloc_init(void) { hotcpu_notifier(page_alloc_cpu_notify, 0);