diff options
9 files changed, 292 insertions, 148 deletions
diff --git a/patches/Drivers-hv-vmbus-include-header-for-get_irq_regs.patch b/patches/Drivers-hv-vmbus-include-header-for-get_irq_regs.patch new file mode 100644 index 000000000000..9d5c1f0dbdc1 --- /dev/null +++ b/patches/Drivers-hv-vmbus-include-header-for-get_irq_regs.patch @@ -0,0 +1,33 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Wed, 29 Aug 2018 21:59:04 +0200 +Subject: [PATCH] Drivers: hv: vmbus: include header for get_irq_regs() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +On !RT the header file get_irq_regs() gets pulled in via other header files. On +RT it does not and the build fails: + + drivers/hv/vmbus_drv.c:975 implicit declaration of function ‘get_irq_regs’ [-Werror=implicit-function-declaration] + drivers/hv/hv.c:115 implicit declaration of function ‘get_irq_regs’ [-Werror=implicit-function-declaration] + +Add the header file for get_irq_regs() in a common header so it used by +vmbus_drv.c by hv.c for their get_irq_regs() usage. + +Reported-by: Bernhard Landauer <oberon@manjaro.org> +Reported-by: Ralf Ramsauer <ralf.ramsauer@oth-regensburg.de> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + drivers/hv/hyperv_vmbus.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/hv/hyperv_vmbus.h ++++ b/drivers/hv/hyperv_vmbus.h +@@ -31,6 +31,7 @@ + #include <linux/atomic.h> + #include <linux/hyperv.h> + #include <linux/interrupt.h> ++#include <linux/irq.h> + + #include "hv_trace.h" + diff --git a/patches/hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch b/patches/hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch index 8c47a44e5a73..24f7b9ef207b 100644 --- a/patches/hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch +++ b/patches/hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch @@ -1,6 +1,6 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -Date: Mon, 4 Sep 2017 18:31:50 +0200 -Subject: [PATCH] hrtimer: consolidate hrtimer_init() + hrtimer_init_sleeper() calls +Date: Tue, 3 Jul 2018 11:25:41 +0200 +Subject: [PATCH v2] hrtimer: consolidate hrtimer_init() + hrtimer_init_sleeper() calls hrtimer_init_sleeper() calls require a prior initialisation of the hrtimer object with hrtimer_init(). Lets make the initialisation of @@ -10,17 +10,19 @@ consistent consider init_on_stack as well. Beside adapting the hrtimer_init_sleeper[_on_stack]() functions, call sites need to be updated as well. -[anna-maria: Updating the commit message] -Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> +Link: http://lkml.kernel.org/r/20180703092541.2870-1-anna-maria@linutronix.de Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +[anna-maria: Updating the commit message, add staging/android/vsoc.c] +Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> --- - block/blk-mq.c | 3 +-- - include/linux/hrtimer.h | 19 ++++++++++++++++--- - include/linux/wait.h | 4 ++-- - kernel/futex.c | 19 ++++++++----------- - kernel/time/hrtimer.c | 46 ++++++++++++++++++++++++++++++++++++---------- - net/core/pktgen.c | 4 ++-- - 6 files changed, 65 insertions(+), 30 deletions(-) + block/blk-mq.c | 3 -- + drivers/staging/android/vsoc.c | 6 +---- + include/linux/hrtimer.h | 19 ++++++++++++++-- + include/linux/wait.h | 4 +-- + kernel/futex.c | 19 +++++++--------- + kernel/time/hrtimer.c | 46 ++++++++++++++++++++++++++++++++--------- + net/core/pktgen.c | 4 +-- + 7 files changed, 67 insertions(+), 34 deletions(-) --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -36,6 +38,23 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> do { if (blk_mq_rq_state(rq) == MQ_RQ_COMPLETE) break; +--- a/drivers/staging/android/vsoc.c ++++ b/drivers/staging/android/vsoc.c +@@ -438,12 +438,10 @@ static int handle_vsoc_cond_wait(struct + + if (!timespec_valid(&ts)) + return -EINVAL; +- hrtimer_init_on_stack(&to->timer, CLOCK_MONOTONIC, +- HRTIMER_MODE_ABS); ++ hrtimer_init_sleeper_on_stack(to, CLOCK_MONOTONIC, ++ HRTIMER_MODE_ABS, current); + hrtimer_set_expires_range_ns(&to->timer, timespec_to_ktime(ts), + current->timer_slack_ns); +- +- hrtimer_init_sleeper(to, current); + } + + while (1) { --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -364,10 +364,17 @@ DECLARE_PER_CPU(struct tick_device, tick diff --git a/patches/irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch b/patches/irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch index 90d633c9c1d7..36d87db119f3 100644 --- a/patches/irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch +++ b/patches/irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch @@ -1,7 +1,9 @@ From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -Date: Fri, 13 Jul 2018 15:30:52 +0200 +Date: Wed, 18 Jul 2018 17:42:04 +0200 Subject: [PATCH] irqchip/gic-v3-its: Make its_lock a raw_spin_lock_t +[ Upstream commit a8db74564b0c634667e1722264bde303d296f566 ] + The its_lock lock is held while a new device is added to the list and during setup while the CPU is booted. Even on -RT the CPU-bootup is performed with disabled interrupts. @@ -9,6 +11,7 @@ performed with disabled interrupts. Make its_lock a raw_spin_lock_t. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> --- drivers/irqchip/irq-gic-v3-its.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/patches/irqchip-gic-v3-its-Move-ITS-pend_page-allocation-int.patch b/patches/irqchip-gic-v3-its-Move-ITS-pend_page-allocation-int.patch deleted file mode 100644 index f7064768beb4..000000000000 --- a/patches/irqchip-gic-v3-its-Move-ITS-pend_page-allocation-int.patch +++ /dev/null @@ -1,128 +0,0 @@ -From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -Date: Fri, 13 Jul 2018 15:45:36 +0200 -Subject: [PATCH] irqchip/gic-v3-its: Move ITS' ->pend_page allocation into - an early CPU up hook - -The AP-GIC-starting hook allocates memory for the ->pend_page while the -CPU is started during boot-up. This callback is invoked on the target -CPU with disabled interrupts. -This does not work on -RT beacuse memory allocations are not possible -with disabled interrupts. -Move the memory allocation to an earlier hotplug step which invoked with -enabled interrupts on the boot CPU. - -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - drivers/irqchip/irq-gic-v3-its.c | 60 ++++++++++++++++++++++++++------------- - 1 file changed, 41 insertions(+), 19 deletions(-) - ---- a/drivers/irqchip/irq-gic-v3-its.c -+++ b/drivers/irqchip/irq-gic-v3-its.c -@@ -171,6 +171,7 @@ static DEFINE_RAW_SPINLOCK(vmovp_lock); - static DEFINE_IDA(its_vpeid_ida); - - #define gic_data_rdist() (raw_cpu_ptr(gic_rdists->rdist)) -+#define gic_data_rdist_cpu(cpu) (per_cpu_ptr(gic_rdists->rdist, cpu)) - #define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base) - #define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K) - -@@ -1853,15 +1854,17 @@ static int its_alloc_collections(struct - return 0; - } - --static struct page *its_allocate_pending_table(gfp_t gfp_flags) -+static struct page *its_allocate_pending_table(unsigned int cpu) - { - struct page *pend_page; -+ unsigned int order; - /* - * The pending pages have to be at least 64kB aligned, - * hence the 'max(LPI_PENDBASE_SZ, SZ_64K)' below. - */ -- pend_page = alloc_pages(gfp_flags | __GFP_ZERO, -- get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K))); -+ order = get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K)); -+ pend_page = alloc_pages_node(cpu_to_node(cpu), GFP_KERNEL | __GFP_ZERO, -+ order); - if (!pend_page) - return NULL; - -@@ -1877,6 +1880,28 @@ static void its_free_pending_table(struc - get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K))); - } - -+static int its_alloc_pend_page(unsigned int cpu) -+{ -+ struct page *pend_page; -+ phys_addr_t paddr; -+ -+ pend_page = gic_data_rdist_cpu(cpu)->pend_page; -+ if (pend_page) -+ return 0; -+ -+ pend_page = its_allocate_pending_table(cpu); -+ if (!pend_page) { -+ pr_err("Failed to allocate PENDBASE for CPU%d\n", -+ smp_processor_id()); -+ return -ENOMEM; -+ } -+ -+ paddr = page_to_phys(pend_page); -+ pr_info("CPU%d: using LPI pending table @%pa\n", cpu, &paddr); -+ gic_data_rdist_cpu(cpu)->pend_page = pend_page; -+ return 0; -+} -+ - static void its_cpu_init_lpis(void) - { - void __iomem *rbase = gic_data_rdist_rd_base(); -@@ -1885,21 +1910,8 @@ static void its_cpu_init_lpis(void) - - /* If we didn't allocate the pending table yet, do it now */ - pend_page = gic_data_rdist()->pend_page; -- if (!pend_page) { -- phys_addr_t paddr; -- -- pend_page = its_allocate_pending_table(GFP_NOWAIT); -- if (!pend_page) { -- pr_err("Failed to allocate PENDBASE for CPU%d\n", -- smp_processor_id()); -- return; -- } -- -- paddr = page_to_phys(pend_page); -- pr_info("CPU%d: using LPI pending table @%pa\n", -- smp_processor_id(), &paddr); -- gic_data_rdist()->pend_page = pend_page; -- } -+ if (!pend_page) -+ return; - - /* set PROPBASE */ - val = (page_to_phys(gic_rdists->prop_page) | -@@ -2732,7 +2744,7 @@ static int its_vpe_init(struct its_vpe * - return vpe_id; - - /* Allocate VPT */ -- vpt_page = its_allocate_pending_table(GFP_KERNEL); -+ vpt_page = its_allocate_pending_table(raw_smp_processor_id()); - if (!vpt_page) { - its_vpe_id_free(vpe_id); - return -ENOMEM; -@@ -3706,6 +3718,16 @@ int __init its_init(struct fwnode_handle - if (err) - return err; - -+ err = cpuhp_setup_state(CPUHP_BP_PREPARE_DYN, "irqchip/arm/gicv3:prepare", -+ its_alloc_pend_page, NULL); -+ if (err < 0) { -+ pr_warn("ITS: Can't register CPU-hoplug callback.\n"); -+ return err; -+ } -+ err = its_alloc_pend_page(smp_processor_id()); -+ if (err < 0) -+ return err; -+ - list_for_each_entry(its, &its_nodes, entry) - has_v4 |= its->is_v4; - diff --git a/patches/irqchip-gic-v3-its-Move-pending-table-allocation-to-.patch b/patches/irqchip-gic-v3-its-Move-pending-table-allocation-to-.patch new file mode 100644 index 000000000000..f68f93c5512c --- /dev/null +++ b/patches/irqchip-gic-v3-its-Move-pending-table-allocation-to-.patch @@ -0,0 +1,163 @@ +From 111e6bab739e34e1af72a6248e452ad85f2d216d Mon Sep 17 00:00:00 2001 +From: Marc Zyngier <marc.zyngier@arm.com> +Date: Fri, 27 Jul 2018 13:38:54 +0100 +Subject: [PATCH] irqchip/gic-v3-its: Move pending table allocation to init + time + +Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + drivers/irqchip/irq-gic-v3-its.c | 80 ++++++++++++++++++++++++------------- + include/linux/irqchip/arm-gic-v3.h | 1 + 2 files changed, 53 insertions(+), 28 deletions(-) + +--- a/drivers/irqchip/irq-gic-v3-its.c ++++ b/drivers/irqchip/irq-gic-v3-its.c +@@ -171,6 +171,7 @@ static DEFINE_RAW_SPINLOCK(vmovp_lock); + static DEFINE_IDA(its_vpeid_ida); + + #define gic_data_rdist() (raw_cpu_ptr(gic_rdists->rdist)) ++#define gic_data_rdist_cpu(cpu) (per_cpu_ptr(gic_rdists->rdist, cpu)) + #define gic_data_rdist_rd_base() (gic_data_rdist()->rd_base) + #define gic_data_rdist_vlpi_base() (gic_data_rdist_rd_base() + SZ_128K) + +@@ -1555,7 +1556,7 @@ static void its_free_prop_table(struct p + get_order(LPI_PROPBASE_SZ)); + } + +-static int __init its_alloc_lpi_tables(void) ++static int __init its_alloc_lpi_prop_table(void) + { + phys_addr_t paddr; + +@@ -1877,30 +1878,47 @@ static void its_free_pending_table(struc + get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K))); + } + +-static void its_cpu_init_lpis(void) ++static int __init allocate_lpi_tables(void) + { +- void __iomem *rbase = gic_data_rdist_rd_base(); +- struct page *pend_page; +- u64 val, tmp; ++ int err, cpu; + +- /* If we didn't allocate the pending table yet, do it now */ +- pend_page = gic_data_rdist()->pend_page; +- if (!pend_page) { +- phys_addr_t paddr; ++ err = its_alloc_lpi_prop_table(); ++ if (err) ++ return err; ++ ++ /* ++ * We allocate all the pending tables anyway, as we may have a ++ * mix of RDs that have had LPIs enabled, and some that ++ * don't. We'll free the unused ones as each CPU comes online. ++ */ ++ for_each_possible_cpu(cpu) { ++ struct page *pend_page; + + pend_page = its_allocate_pending_table(GFP_NOWAIT); + if (!pend_page) { +- pr_err("Failed to allocate PENDBASE for CPU%d\n", +- smp_processor_id()); +- return; ++ pr_err("Failed to allocate PENDBASE for CPU%d\n", cpu); ++ return -ENOMEM; + } + +- paddr = page_to_phys(pend_page); +- pr_info("CPU%d: using LPI pending table @%pa\n", +- smp_processor_id(), &paddr); +- gic_data_rdist()->pend_page = pend_page; ++ gic_data_rdist_cpu(cpu)->pend_page = pend_page; + } + ++ return 0; ++} ++ ++static void its_cpu_init_lpis(void) ++{ ++ void __iomem *rbase = gic_data_rdist_rd_base(); ++ struct page *pend_page; ++ phys_addr_t paddr; ++ u64 val, tmp; ++ ++ if (gic_data_rdist()->lpi_enabled) ++ return; ++ ++ pend_page = gic_data_rdist()->pend_page; ++ paddr = page_to_phys(pend_page); ++ + /* set PROPBASE */ + val = (page_to_phys(gic_rdists->prop_page) | + GICR_PROPBASER_InnerShareable | +@@ -1952,6 +1970,10 @@ static void its_cpu_init_lpis(void) + + /* Make sure the GIC has seen the above */ + dsb(sy); ++ gic_data_rdist()->lpi_enabled = true; ++ pr_info("GICv3: CPU%d: using LPI pending table @%pa\n", ++ smp_processor_id(), ++ &paddr); + } + + static void its_cpu_init_collection(struct its_node *its) +@@ -3427,16 +3449,6 @@ static int redist_disable_lpis(void) + u64 timeout = USEC_PER_SEC; + u64 val; + +- /* +- * If coming via a CPU hotplug event, we don't need to disable +- * LPIs before trying to re-enable them. They are already +- * configured and all is well in the world. Detect this case +- * by checking the allocation of the pending table for the +- * current CPU. +- */ +- if (gic_data_rdist()->pend_page) +- return 0; +- + if (!gic_rdists_supports_plpis()) { + pr_info("CPU%d: LPIs not supported\n", smp_processor_id()); + return -ENXIO; +@@ -3446,7 +3458,18 @@ static int redist_disable_lpis(void) + if (!(val & GICR_CTLR_ENABLE_LPIS)) + return 0; + +- pr_warn("CPU%d: Booted with LPIs enabled, memory probably corrupted\n", ++ /* ++ * If coming via a CPU hotplug event, we don't need to disable ++ * LPIs before trying to re-enable them. They are already ++ * configured and all is well in the world. ++ */ ++ if (gic_data_rdist()->lpi_enabled) ++ return 0; ++ ++ /* ++ * From that point on, we only try to do some damage control. ++ */ ++ pr_warn("GICv3: CPU%d: Booted with LPIs enabled, memory probably corrupted\n", + smp_processor_id()); + add_taint(TAINT_CRAP, LOCKDEP_STILL_OK); + +@@ -3702,7 +3725,8 @@ int __init its_init(struct fwnode_handle + } + + gic_rdists = rdists; +- err = its_alloc_lpi_tables(); ++ ++ err = allocate_lpi_tables(); + if (err) + return err; + +--- a/include/linux/irqchip/arm-gic-v3.h ++++ b/include/linux/irqchip/arm-gic-v3.h +@@ -574,6 +574,7 @@ struct rdists { + void __iomem *rd_base; + struct page *pend_page; + phys_addr_t phys_base; ++ bool lpi_enabled; + } __percpu *rdist; + struct page *prop_page; + int id_bits; diff --git a/patches/localversion.patch b/patches/localversion.patch index 279489a1d145..e36eb4b6666a 100644 --- a/patches/localversion.patch +++ b/patches/localversion.patch @@ -10,4 +10,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- /dev/null +++ b/localversion-rt @@ -0,0 +1 @@ -+-rt2 ++-rt3 diff --git a/patches/powerpc-preempt-lazy-support.patch b/patches/powerpc-preempt-lazy-support.patch index e677a1d18caf..9fd671f3873a 100644 --- a/patches/powerpc-preempt-lazy-support.patch +++ b/patches/powerpc-preempt-lazy-support.patch @@ -7,11 +7,11 @@ Implement the powerpc pieces for lazy preempt. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- arch/powerpc/Kconfig | 1 + - arch/powerpc/include/asm/thread_info.h | 7 ++++++- + arch/powerpc/include/asm/thread_info.h | 9 +++++++-- arch/powerpc/kernel/asm-offsets.c | 1 + arch/powerpc/kernel/entry_32.S | 17 ++++++++++++----- - arch/powerpc/kernel/entry_64.S | 14 +++++++++++--- - 5 files changed, 31 insertions(+), 9 deletions(-) + arch/powerpc/kernel/entry_64.S | 16 ++++++++++++---- + 5 files changed, 33 insertions(+), 11 deletions(-) --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -34,11 +34,20 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> unsigned long local_flags; /* private flags for thread */ #ifdef CONFIG_LIVEPATCH unsigned long *livepatch_sp; +@@ -80,7 +82,7 @@ extern int arch_dup_task_struct(struct t + #define TIF_SIGPENDING 1 /* signal pending */ + #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ + #define TIF_FSCHECK 3 /* Check FS is USER_DS on return */ +-#define TIF_32BIT 4 /* 32 bit binary */ ++#define TIF_NEED_RESCHED_LAZY 4 /* lazy rescheduling necessary */ + #define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */ + #define TIF_PATCH_PENDING 6 /* pending live patching update */ + #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ @@ -99,6 +101,7 @@ extern int arch_dup_task_struct(struct t #define TIF_ELF2ABI 18 /* function descriptors must die! */ #endif #define TIF_POLLING_NRFLAG 19 /* true if poll_idle() is polling TIF_NEED_RESCHED */ -+#define TIF_NEED_RESCHED_LAZY 20 /* lazy rescheduling necessary */ ++#define TIF_32BIT 20 /* 32 bit binary */ /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) @@ -123,6 +132,15 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> beq restore_user --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S +@@ -168,7 +168,7 @@ system_call: /* label this so stack tr + * based on caller's run-mode / personality. + */ + ld r11,SYS_CALL_TABLE@toc(2) +- andi. r10,r10,_TIF_32BIT ++ andis. r10,r10,_TIF_32BIT@h + beq 15f + addi r11,r11,8 /* use 32-bit syscall entries */ + clrldi r3,r3,32 @@ -707,7 +707,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEG bl restore_math b restore diff --git a/patches/sched-Allow-pinned-user-tasks-to-be-awakened-to-the-.patch b/patches/sched-Allow-pinned-user-tasks-to-be-awakened-to-the-.patch new file mode 100644 index 000000000000..d5fb1f398d04 --- /dev/null +++ b/patches/sched-Allow-pinned-user-tasks-to-be-awakened-to-the-.patch @@ -0,0 +1,33 @@ +From b3dac61f924ec6d4cc4c1e08498f80a88e6a6c69 Mon Sep 17 00:00:00 2001 +From: Mike Galbraith <efault@gmx.de> +Date: Sun, 19 Aug 2018 08:28:35 +0200 +Subject: [PATCH] sched: Allow pinned user tasks to be awakened to the CPU they + pinned + +Since commit 7af443ee16976 ("sched/core: Require cpu_active() in +select_task_rq(), for user tasks") select_fallback_rq() will BUG() if +the CPU to which a task has pinned itself and pinned becomes +!cpu_active() while it slept. +The task will continue running on the to-be-removed CPU and will remove +itself from the CPU during takedown_cpu() (while cpuhp_pin_lock will be +acquired) and move to another CPU based on its mask after the +migrate_disable() section has been left. + +Cc: stable-rt@vger.kernel.org +Signed-off-by: Mike Galbraith <efault@gmx.de> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + kernel/sched/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -926,7 +926,7 @@ static inline bool is_cpu_allowed(struct + if (!cpumask_test_cpu(cpu, p->cpus_ptr)) + return false; + +- if (is_per_cpu_kthread(p)) ++ if (is_per_cpu_kthread(p) || __migrate_disabled(p)) + return cpu_online(cpu); + + return cpu_active(cpu); diff --git a/patches/series b/patches/series index cf33de00118e..56d092ccbb98 100644 --- a/patches/series +++ b/patches/series @@ -29,6 +29,7 @@ ntfs-avoid-disabling-interrupts-during-kmap_atomic.patch 0002-mm-list_lru-Move-locking-from-__list_lru_walk_one-to.patch 0003-mm-list_lru-Pass-struct-list_lru_node-as-an-argument.patch 0004-mm-list_lru-Introduce-list_lru_shrink_walk_irq.patch +irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch ############################################################ # POSTED by others @@ -43,6 +44,8 @@ ntfs-avoid-disabling-interrupts-during-kmap_atomic.patch 0005-ARM-configs-at91-use-new-TCB-timer-driver.patch 0006-ARM-configs-at91-unselect-PIT.patch +irqchip-gic-v3-its-Move-pending-table-allocation-to-.patch + ############################################################ # POSTED ############################################################ @@ -52,12 +55,11 @@ arm-kprobe-replace-patch_lock-to-raw-lock.patch arm-unwind-use_raw_lock.patch cgroup-use-irqsave-in-cgroup_rstat_flush_locked.patch fscache-initialize-cookie-hash-table-raw-spinlocks.patch +Drivers-hv-vmbus-include-header-for-get_irq_regs.patch ############################################################ # Ready for posting ############################################################ -irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch -irqchip-gic-v3-its-Move-ITS-pend_page-allocation-int.patch efi-Allow-efi-runtime.patch ############################################################ @@ -188,6 +190,7 @@ timers-prepare-for-full-preemption.patch x86-kvm-require-const-tsc-for-rt.patch # # SIMPLE WAITQUEUE +pci-switchtec-Don-t-use-completion-s-wait-queue.patch wait.h-include-atomic.h.patch work-simple-Simple-work-queue-implemenation.patch completion-use-simple-wait-queues.patch @@ -382,6 +385,7 @@ random-avoid-preempt_disable-ed-section.patch # HOTPLUG cpu-hotplug--Implement-CPU-pinning.patch +sched-Allow-pinned-user-tasks-to-be-awakened-to-the-.patch hotplug-duct-tape-RT-rwlock-usage-for-non-RT.patch # NET @@ -409,7 +413,6 @@ drivers-block-zram-Replace-bit-spinlocks-with-rtmute.patch drivers-zram-Don-t-disable-preemption-in-zcomp_strea.patch drivers-zram-fix-zcomp_stream_get-smp_processor_id-u.patch tpm_tis-fix-stall-after-iowrite-s.patch -pci-switchtec-Don-t-use-completion-s-wait-queue.patch # I915 drmradeoni915_Use_preempt_disableenable_rt()_where_recommended.patch |