Merge tag 'mips_fixes_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 4 Nov 2017 18:31:02 +0000 (11:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 4 Nov 2017 18:31:02 +0000 (11:31 -0700)
Pull MIPS fixes from James Hogan:
 "A selection of important MIPS fixes for 4.14, and some MAINTAINERS /
  email address updates:

  Maintainership updates:
   - imgtec.com -> mips.com email addresses (this trivially updates
     comments in quite a few files, as well as MAINTAINERS)
   - Pistachio SoC maintainership update

  Fixes:
   - NI 169445 build (new platform in 4.14)
   - EVA regression (4.14)
   - SMP-CPS build & preemption regressions (4.14)
   - SMP/hotplug deadlock & race (deadlock reintroduced 4.13)
   - ebpf_jit error return (4.13)
   - SMP-CMP build regressions (4.11 and 4.14)
   - bad UASM microMIPS encoding (3.16)
   - CM definitions (3.15)"

[ I had taken the email address updates separately, because I didn't
  expect James to send a pull request, so those got applied twice.   - Linus]

* tag 'mips_fixes_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips:
  MIPS: Update email address for Marcin Nowakowski
  MIPS: smp-cmp: Fix vpe_id build error
  MAINTAINERS: Update Pistachio platform maintainers
  MIPS: smp-cmp: Use right include for task_struct
  MIPS: Update Goldfish RTC driver maintainer email address
  MIPS: Update RINT emulation maintainer email address
  MIPS: CPS: Fix use of current_cpu_data in preemptible code
  MIPS: SMP: Fix deadlock & online race
  MIPS: bpf: Fix a typo in build_one_insn()
  MIPS: microMIPS: Fix incorrect mask in insn_table_MM
  MIPS: Fix CM region target definitions
  MIPS: generic: Fix compilation error from include asm/mips-cpc.h
  MIPS: Fix exception entry when CONFIG_EVA enabled
  MIPS: generic: Fix NI 169445 its build
  Update MIPS email addresses

13 files changed:
.mailmap
MAINTAINERS
arch/mips/generic/board-ni169445.its.S
arch/mips/generic/init.c
arch/mips/generic/kexec.c
arch/mips/include/asm/mips-cm.h
arch/mips/include/asm/stackframe.h
arch/mips/kernel/probes-common.h
arch/mips/kernel/smp-cmp.c
arch/mips/kernel/smp-cps.c
arch/mips/kernel/smp.c
arch/mips/mm/uasm-micromips.c
arch/mips/net/ebpf_jit.c

index a32879a9f9704c0ebd54666e72a7da85b340d51f..4757d361fd333ee109a5c09bf825bb3a89ebf01a 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -15,6 +15,7 @@ Adriana Reus <adi.reus@gmail.com> <adriana.reus@intel.com>
 Alan Cox <alan@lxorguk.ukuu.org.uk>
 Alan Cox <root@hraefn.swansea.linux.org.uk>
 Aleksey Gorelov <aleksey_gorelov@phoenix.com>
+Aleksandar Markovic <aleksandar.markovic@mips.com> <aleksandar.markovic@imgtec.com>
 Al Viro <viro@ftp.linux.org.uk>
 Al Viro <viro@zenIV.linux.org.uk>
 Andreas Herrmann <aherrman@de.ibm.com>
@@ -101,6 +102,7 @@ Leonid I Ananiev <leonid.i.ananiev@intel.com>
 Linas Vepstas <linas@austin.ibm.com>
 Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de>
 Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
+Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com>
 Mark Brown <broonie@sirena.org.uk>
 Martin Kepplinger <martink@posteo.de> <martin.kepplinger@theobroma-systems.com>
 Martin Kepplinger <martink@posteo.de> <martin.kepplinger@ginzinger.com>
@@ -119,6 +121,7 @@ Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com>
 Mayuresh Janorkar <mayur@ti.com>
 Michael Buesch <m@bues.ch>
 Michel Dänzer <michel@tungstengraphics.com>
+Miodrag Dinic <miodrag.dinic@mips.com> <miodrag.dinic@imgtec.com>
 Mitesh shah <mshah@teja.com>
 Mohit Kumar <mohit.kumar@st.com> <mohit.kumar.dhaka@gmail.com>
 Morten Welinder <terra@gnome.org>
index 00b0fda6c2e1ea2da173512e389e9aa5afbd55cb..2f4e462aa4a214d188bbed5aa612b60b34374448 100644 (file)
@@ -873,7 +873,7 @@ F:  drivers/android/
 F:     drivers/staging/android/
 
 ANDROID GOLDFISH RTC DRIVER
-M:     Miodrag Dinic <miodrag.dinic@imgtec.com>
+M:     Miodrag Dinic <miodrag.dinic@mips.com>
 S:     Supported
 F:     Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt
 F:     drivers/rtc/rtc-goldfish.c
@@ -9019,7 +9019,7 @@ F:        drivers/*/*loongson1*
 F:     drivers/*/*/*loongson1*
 
 MIPS RINT INSTRUCTION EMULATION
-M:     Aleksandar Markovic <aleksandar.markovic@imgtec.com>
+M:     Aleksandar Markovic <aleksandar.markovic@mips.com>
 L:     linux-mips@linux-mips.org
 S:     Supported
 F:     arch/mips/math-emu/sp_rint.c
@@ -10683,10 +10683,9 @@ S:     Maintained
 F:     drivers/pinctrl/spear/
 
 PISTACHIO SOC SUPPORT
-M:     James Hartley <james.hartley@imgtec.com>
-M:     Ionela Voinescu <ionela.voinescu@imgtec.com>
+M:     James Hartley <james.hartley@sondrel.com>
 L:     linux-mips@linux-mips.org
-S:     Maintained
+S:     Odd Fixes
 F:     arch/mips/pistachio/
 F:     arch/mips/include/asm/mach-pistachio/
 F:     arch/mips/boot/dts/img/pistachio*
index d12e12fe90bec6f4d0290b63ba8a8b2154bff4bc..e4cb4f95a8cc1015f31d63570c962703b7fddca8 100644 (file)
@@ -1,4 +1,4 @@
-{
+{
        images {
                fdt@ni169445 {
                        description = "NI 169445 device tree";
index cf409ba358a1288cf09416025b96879fbebfa4ca..5ba6fcc26fa726aff50cc3a64315855eb935c1b0 100644 (file)
@@ -20,7 +20,7 @@
 #include <asm/fw/fw.h>
 #include <asm/irq_cpu.h>
 #include <asm/machine.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
 #include <asm/prom.h>
 #include <asm/smp-ops.h>
 #include <asm/time.h>
index e9fb735299e3b78cc009da4335e67a976072b266..1ca409f58929670c58a8e23f47aa9843f53a03bf 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2016 Imagination Technologies
- * Author: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
+ * Author: Marcin Nowakowski <marcin.nowakowski@mips.com>
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
index 3708b8ccc0b49ac4a3e7a2aa74057c4dccb7a056..8bc5df49b0e1d935c1c2f67f9402858eff86137e 100644 (file)
@@ -142,8 +142,8 @@ GCR_ACCESSOR_RO(64, 0x000, config)
 GCR_ACCESSOR_RW(64, 0x008, base)
 #define CM_GCR_BASE_GCRBASE                    GENMASK_ULL(47, 15)
 #define CM_GCR_BASE_CMDEFTGT                   GENMASK(1, 0)
-#define  CM_GCR_BASE_CMDEFTGT_DISABLED         0
-#define  CM_GCR_BASE_CMDEFTGT_MEM              1
+#define  CM_GCR_BASE_CMDEFTGT_MEM              0
+#define  CM_GCR_BASE_CMDEFTGT_RESERVED         1
 #define  CM_GCR_BASE_CMDEFTGT_IOCU0            2
 #define  CM_GCR_BASE_CMDEFTGT_IOCU1            3
 
index 5d3563c55e0c224bc62d20815568d61953f9902c..2161357cc68f094fb5b9c1287c38232dd19d390c 100644 (file)
                sll     k0, 3           /* extract cu0 bit */
                .set    noreorder
                bltz    k0, 8f
+                move   k0, sp
+               .if \docfi
+               .cfi_register sp, k0
+               .endif
 #ifdef CONFIG_EVA
                /*
                 * Flush interAptiv's Return Prediction Stack (RPS) by writing
                MTC0    k0, CP0_ENTRYHI
 #endif
                .set    reorder
-                move   k0, sp
-               .if \docfi
-               .cfi_register sp, k0
-               .endif
                /* Called from user mode, new stack. */
                get_saved_sp docfi=\docfi tosp=1
 8:
index dd08e41134b667155aa542433b1316191781edf0..d2bf77b18822cd01ea4ade29b25e2b084c077347 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2016 Imagination Technologies
- * Author: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
+ * Author: Marcin Nowakowski <marcin.nowakowski@mips.com>
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
index 05295a4909f14affe37487c634b2a12c32c18e16..a2322009cac302610ae4b6fb68f00422889ad3ac 100644 (file)
@@ -19,7 +19,7 @@
 #undef DEBUG
 
 #include <linux/kernel.h>
-#include <linux/sched.h>
+#include <linux/sched/task_stack.h>
 #include <linux/smp.h>
 #include <linux/cpumask.h>
 #include <linux/interrupt.h>
@@ -50,8 +50,8 @@ static void cmp_init_secondary(void)
 
 #ifdef CONFIG_MIPS_MT_SMP
        if (cpu_has_mipsmt)
-               c->vpe_id = (read_c0_tcbind() >> TCBIND_CURVPE_SHIFT) &
-                       TCBIND_CURVPE;
+               cpu_set_vpe_id(c, (read_c0_tcbind() >> TCBIND_CURVPE_SHIFT) &
+                                 TCBIND_CURVPE);
 #endif
 }
 
index 7d6af41888e8de7335cf180f8eba8ba76a775cea..ecc1a853f48d4225b72ea0dd7299c64e450653c1 100644 (file)
@@ -306,7 +306,7 @@ static int cps_boot_secondary(int cpu, struct task_struct *idle)
        int err;
 
        /* We don't yet support booting CPUs in other clusters */
-       if (cpu_cluster(&cpu_data[cpu]) != cpu_cluster(&current_cpu_data))
+       if (cpu_cluster(&cpu_data[cpu]) != cpu_cluster(&raw_current_cpu_data))
                return -ENOSYS;
 
        vpe_cfg->pc = (unsigned long)&smp_bootstrap;
index bbe19b64def5b6c863e9d2e11f0ad36609d0bfde..88be966d3e619785fdb96cc5705443f1cb607a32 100644 (file)
@@ -42,7 +42,7 @@
 #include <asm/processor.h>
 #include <asm/idle.h>
 #include <asm/r4k-timer.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
 #include <asm/mmu_context.h>
 #include <asm/time.h>
 #include <asm/setup.h>
@@ -66,6 +66,7 @@ EXPORT_SYMBOL(cpu_sibling_map);
 cpumask_t cpu_core_map[NR_CPUS] __read_mostly;
 EXPORT_SYMBOL(cpu_core_map);
 
+static DECLARE_COMPLETION(cpu_starting);
 static DECLARE_COMPLETION(cpu_running);
 
 /*
@@ -374,6 +375,12 @@ asmlinkage void start_secondary(void)
        cpumask_set_cpu(cpu, &cpu_coherent_mask);
        notify_cpu_starting(cpu);
 
+       /* Notify boot CPU that we're starting & ready to sync counters */
+       complete(&cpu_starting);
+
+       synchronise_count_slave(cpu);
+
+       /* The CPU is running and counters synchronised, now mark it online */
        set_cpu_online(cpu, true);
 
        set_cpu_sibling_map(cpu);
@@ -381,8 +388,11 @@ asmlinkage void start_secondary(void)
 
        calculate_cpu_foreign_map();
 
+       /*
+        * Notify boot CPU that we're up & online and it can safely return
+        * from __cpu_up
+        */
        complete(&cpu_running);
-       synchronise_count_slave(cpu);
 
        /*
         * irq will be enabled in ->smp_finish(), enabling it too early
@@ -445,17 +455,17 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
        if (err)
                return err;
 
-       /*
-        * We must check for timeout here, as the CPU will not be marked
-        * online until the counters are synchronised.
-        */
-       if (!wait_for_completion_timeout(&cpu_running,
+       /* Wait for CPU to start and be ready to sync counters */
+       if (!wait_for_completion_timeout(&cpu_starting,
                                         msecs_to_jiffies(1000))) {
                pr_crit("CPU%u: failed to start\n", cpu);
                return -EIO;
        }
 
        synchronise_count_master(cpu);
+
+       /* Wait for CPU to finish startup & mark itself online before return */
+       wait_for_completion(&cpu_running);
        return 0;
 }
 
index c28ff53c8da084feb3c100ca49a0f7e36ba9379f..cdb5a191b9d554c165991c9a507c9b8b83d81ac5 100644 (file)
@@ -80,7 +80,7 @@ static const struct insn const insn_table_MM[insn_invalid] = {
        [insn_jr]       = {M(mm_pool32a_op, 0, 0, 0, mm_jalr_op, mm_pool32axf_op), RS},
        [insn_lb]       = {M(mm_lb32_op, 0, 0, 0, 0, 0), RT | RS | SIMM},
        [insn_ld]       = {0, 0},
-       [insn_lh]       = {M(mm_lh32_op, 0, 0, 0, 0, 0), RS | RS | SIMM},
+       [insn_lh]       = {M(mm_lh32_op, 0, 0, 0, 0, 0), RT | RS | SIMM},
        [insn_ll]       = {M(mm_pool32c_op, 0, 0, (mm_ll_func << 1), 0, 0), RS | RT | SIMM},
        [insn_lld]      = {0, 0},
        [insn_lui]      = {M(mm_pool32i_op, mm_lui_op, 0, 0, 0, 0), RS | SIMM},
index 01b7a87ea67866a19c86019ab95654185d74e84d..962b0259b4b6eb86443f88134fa90d044af08cc1 100644 (file)
@@ -1513,7 +1513,7 @@ ld_skb_common:
                }
                src = ebpf_to_mips_reg(ctx, insn, src_reg_no_fp);
                if (src < 0)
-                       return dst;
+                       return src;
                if (BPF_MODE(insn->code) == BPF_XADD) {
                        switch (BPF_SIZE(insn->code)) {
                        case BPF_W: