summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--patches/Drivers-hv-vmbus-include-header-for-get_irq_regs.patch33
-rw-r--r--patches/hrtimer-consolidate-hrtimer_init-hrtimer_init_sleepe.patch41
-rw-r--r--patches/irqchip-gic-v3-its-Make-its_lock-a-raw_spin_lock_t.patch5
-rw-r--r--patches/irqchip-gic-v3-its-Move-ITS-pend_page-allocation-int.patch128
-rw-r--r--patches/irqchip-gic-v3-its-Move-pending-table-allocation-to-.patch163
-rw-r--r--patches/localversion.patch2
-rw-r--r--patches/powerpc-preempt-lazy-support.patch26
-rw-r--r--patches/sched-Allow-pinned-user-tasks-to-be-awakened-to-the-.patch33
-rw-r--r--patches/series9
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