Commit dab30d55 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mips_fixes_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips

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