Commit 9f471129 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull MIPS fixes from Ralf Baechle:
 "A fair number of build fixes for various configurations.

  Fixes to BPF, and the BCM47xx platform code, a preemption fix for the
  Loongson core, a syscall auditing fix, wire up the new getrandom and
  memfd_create.  Several patches for EVA"

* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (30 commits)
  MIPS: SmartMIPS: Disable assembler warnings
  MIPS: Move CPU topology macros to topology.h
  MIPS: Wire up new syscalls getrandom and memfd_create.
  MIPS: Fix a warning for virt_to_page
  arch/mips/net/bpf_jit.c: fix failure check
  MIPS: COP2: CPP macro safety fixes.
  MIPS: Kconfig: Select SMP symbols for CMP
  MIPS: ZBOOT: add missing <linux/string.h> include
  MIPS: IP28: Fix/clean spaces.h
  MIPS: IP28: Select correct L1_CACHE_SHIFT
  MIPS: BCM63xx: delete double assignment
  MIPS: Spelling s/confugrations/configurations/
  MIPS: OCTEON: make get_system_type() thread-safe
  MIPS: CPS: Initialize EVA before bringing up VPEs from secondary cores
  MIPS: Malta: EVA: Rename 'eva_entry' to 'platform_eva_init'
  MIPS: EVA: Add new EVA header
  MIPS: scall64-o32: Fix indirect syscall detection
  MIPS: syscall: Fix AUDIT value for O32 processes on MIPS64
  MIPS: Loongson: Fix COP2 usage for preemptible kernel
  MIPS: NL: Fix nlm_xlp_defconfig build error
  ...
parents d9773cea dab1b445
...@@ -546,6 +546,7 @@ config SGI_IP28 ...@@ -546,6 +546,7 @@ config SGI_IP28
# select SYS_HAS_EARLY_PRINTK # select SYS_HAS_EARLY_PRINTK
select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL
select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN
select MIPS_L1_CACHE_SHIFT_7
help help
This is the SGI Indigo2 with R10000 processor. To compile a Linux This is the SGI Indigo2 with R10000 processor. To compile a Linux
kernel that runs on these, say Y here. kernel that runs on these, say Y here.
...@@ -2029,7 +2030,9 @@ config MIPS_CMP ...@@ -2029,7 +2030,9 @@ config MIPS_CMP
bool "MIPS CMP framework support (DEPRECATED)" bool "MIPS CMP framework support (DEPRECATED)"
depends on SYS_SUPPORTS_MIPS_CMP depends on SYS_SUPPORTS_MIPS_CMP
select MIPS_GIC_IPI select MIPS_GIC_IPI
select SMP
select SYNC_R4K select SYNC_R4K
select SYS_SUPPORTS_SMP
select WEAK_ORDERING select WEAK_ORDERING
default n default n
help help
......
...@@ -113,7 +113,16 @@ predef-le += -DMIPSEL -D_MIPSEL -D__MIPSEL -D__MIPSEL__ ...@@ -113,7 +113,16 @@ predef-le += -DMIPSEL -D_MIPSEL -D__MIPSEL -D__MIPSEL__
cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB $(undef-all) $(predef-be)) cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB $(undef-all) $(predef-be))
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL $(undef-all) $(predef-le)) cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL $(undef-all) $(predef-le))
cflags-$(CONFIG_CPU_HAS_SMARTMIPS) += $(call cc-option,-msmartmips) # For smartmips configurations, there are hundreds of warnings due to ISA overrides
# in assembly and header files. smartmips is only supported for MIPS32r1 onwards
# and there is no support for 64-bit. Various '.set mips2' or '.set mips3' or
# similar directives in the kernel will spam the build logs with the following warnings:
# Warning: the `smartmips' extension requires MIPS32 revision 1 or greater
# or
# Warning: the 64-bit MIPS architecture does not support the `smartmips' extension
# Pass -Wa,--no-warn to disable all assembler warnings until the kernel code has
# been fixed properly.
cflags-$(CONFIG_CPU_HAS_SMARTMIPS) += $(call cc-option,-msmartmips) -Wa,--no-warn
cflags-$(CONFIG_CPU_MICROMIPS) += $(call cc-option,-mmicromips) cflags-$(CONFIG_CPU_MICROMIPS) += $(call cc-option,-mmicromips)
cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \ cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \
......
...@@ -434,7 +434,7 @@ static void bcm63xx_init_irq(void) ...@@ -434,7 +434,7 @@ static void bcm63xx_init_irq(void)
irq_stat_addr[0] += PERF_IRQSTAT_3368_REG; irq_stat_addr[0] += PERF_IRQSTAT_3368_REG;
irq_mask_addr[0] += PERF_IRQMASK_3368_REG; irq_mask_addr[0] += PERF_IRQMASK_3368_REG;
irq_stat_addr[1] = 0; irq_stat_addr[1] = 0;
irq_stat_addr[1] = 0; irq_mask_addr[1] = 0;
irq_bits = 32; irq_bits = 32;
ext_irq_count = 4; ext_irq_count = 4;
ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_3368; ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_3368;
...@@ -443,7 +443,7 @@ static void bcm63xx_init_irq(void) ...@@ -443,7 +443,7 @@ static void bcm63xx_init_irq(void)
irq_stat_addr[0] += PERF_IRQSTAT_6328_REG(0); irq_stat_addr[0] += PERF_IRQSTAT_6328_REG(0);
irq_mask_addr[0] += PERF_IRQMASK_6328_REG(0); irq_mask_addr[0] += PERF_IRQMASK_6328_REG(0);
irq_stat_addr[1] += PERF_IRQSTAT_6328_REG(1); irq_stat_addr[1] += PERF_IRQSTAT_6328_REG(1);
irq_stat_addr[1] += PERF_IRQMASK_6328_REG(1); irq_mask_addr[1] += PERF_IRQMASK_6328_REG(1);
irq_bits = 64; irq_bits = 64;
ext_irq_count = 4; ext_irq_count = 4;
is_ext_irq_cascaded = 1; is_ext_irq_cascaded = 1;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h>
#include <asm/addrspace.h> #include <asm/addrspace.h>
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
extern void octeon_cop2_save(struct octeon_cop2_state *); extern void octeon_cop2_save(struct octeon_cop2_state *);
extern void octeon_cop2_restore(struct octeon_cop2_state *); extern void octeon_cop2_restore(struct octeon_cop2_state *);
#define cop2_save(r) octeon_cop2_save(r) #define cop2_save(r) octeon_cop2_save(&(r)->thread.cp2)
#define cop2_restore(r) octeon_cop2_restore(r) #define cop2_restore(r) octeon_cop2_restore(&(r)->thread.cp2)
#define cop2_present 1 #define cop2_present 1
#define cop2_lazy_restore 1 #define cop2_lazy_restore 1
...@@ -26,26 +26,26 @@ extern void octeon_cop2_restore(struct octeon_cop2_state *); ...@@ -26,26 +26,26 @@ extern void octeon_cop2_restore(struct octeon_cop2_state *);
extern void nlm_cop2_save(struct nlm_cop2_state *); extern void nlm_cop2_save(struct nlm_cop2_state *);
extern void nlm_cop2_restore(struct nlm_cop2_state *); extern void nlm_cop2_restore(struct nlm_cop2_state *);
#define cop2_save(r) nlm_cop2_save(r)
#define cop2_restore(r) nlm_cop2_restore(r) #define cop2_save(r) nlm_cop2_save(&(r)->thread.cp2)
#define cop2_restore(r) nlm_cop2_restore(&(r)->thread.cp2)
#define cop2_present 1 #define cop2_present 1
#define cop2_lazy_restore 0 #define cop2_lazy_restore 0
#elif defined(CONFIG_CPU_LOONGSON3) #elif defined(CONFIG_CPU_LOONGSON3)
#define cop2_save(r)
#define cop2_restore(r)
#define cop2_present 1 #define cop2_present 1
#define cop2_lazy_restore 1 #define cop2_lazy_restore 1
#define cop2_save(r) do { (r); } while (0)
#define cop2_restore(r) do { (r); } while (0)
#else #else
#define cop2_present 0 #define cop2_present 0
#define cop2_lazy_restore 0 #define cop2_lazy_restore 0
#define cop2_save(r) #define cop2_save(r) do { (r); } while (0)
#define cop2_restore(r) #define cop2_restore(r) do { (r); } while (0)
#endif #endif
enum cu2_ops { enum cu2_ops {
......
...@@ -11,15 +11,8 @@ ...@@ -11,15 +11,8 @@
#ifndef _ASM_MACH_IP28_SPACES_H #ifndef _ASM_MACH_IP28_SPACES_H
#define _ASM_MACH_IP28_SPACES_H #define _ASM_MACH_IP28_SPACES_H
#define CAC_BASE _AC(0xa800000000000000, UL)
#define HIGHMEM_START (~0UL)
#define PHYS_OFFSET _AC(0x20000000, UL) #define PHYS_OFFSET _AC(0x20000000, UL)
#define UNCAC_BASE _AC(0xc0000000, UL) /* 0xa0000000 + PHYS_OFFSET */
#define IO_BASE UNCAC_BASE
#include <asm/mach-generic/spaces.h> #include <asm/mach-generic/spaces.h>
#endif /* _ASM_MACH_IP28_SPACES_H */ #endif /* _ASM_MACH_IP28_SPACES_H */
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
/* /*
* This is used for calculating the real page sizes * This is used for calculating the real page sizes
* for FTLB or VTLB + FTLB confugrations. * for FTLB or VTLB + FTLB configurations.
*/ */
static inline unsigned int page_size_ftlb(unsigned int mmuextdef) static inline unsigned int page_size_ftlb(unsigned int mmuextdef)
{ {
...@@ -223,7 +223,8 @@ static inline int pfn_valid(unsigned long pfn) ...@@ -223,7 +223,8 @@ static inline int pfn_valid(unsigned long pfn)
#endif #endif
#define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys(kaddr))) #define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys((void *) \
(kaddr))))
extern int __virt_addr_valid(const volatile void *kaddr); extern int __virt_addr_valid(const volatile void *kaddr);
#define virt_addr_valid(kaddr) \ #define virt_addr_valid(kaddr) \
......
...@@ -37,11 +37,6 @@ extern int __cpu_logical_map[NR_CPUS]; ...@@ -37,11 +37,6 @@ extern int __cpu_logical_map[NR_CPUS];
#define NO_PROC_ID (-1) #define NO_PROC_ID (-1)
#define topology_physical_package_id(cpu) (cpu_data[cpu].package)
#define topology_core_id(cpu) (cpu_data[cpu].core)
#define topology_core_cpumask(cpu) (&cpu_core_map[cpu])
#define topology_thread_cpumask(cpu) (&cpu_sibling_map[cpu])
#define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */ #define SMP_RESCHEDULE_YOURSELF 0x1 /* XXX braindead */
#define SMP_CALL_FUNCTION 0x2 #define SMP_CALL_FUNCTION 0x2
/* Octeon - Tell another core to flush its icache */ /* Octeon - Tell another core to flush its icache */
......
...@@ -92,7 +92,7 @@ do { \ ...@@ -92,7 +92,7 @@ do { \
KSTK_STATUS(prev) &= ~ST0_CU2; \ KSTK_STATUS(prev) &= ~ST0_CU2; \
__c0_stat = read_c0_status(); \ __c0_stat = read_c0_status(); \
write_c0_status(__c0_stat | ST0_CU2); \ write_c0_status(__c0_stat | ST0_CU2); \
cop2_save(&prev->thread.cp2); \ cop2_save(prev); \
write_c0_status(__c0_stat & ~ST0_CU2); \ write_c0_status(__c0_stat & ~ST0_CU2); \
} \ } \
__clear_software_ll_bit(); \ __clear_software_ll_bit(); \
...@@ -111,7 +111,7 @@ do { \ ...@@ -111,7 +111,7 @@ do { \
(KSTK_STATUS(current) & ST0_CU2)) { \ (KSTK_STATUS(current) & ST0_CU2)) { \
__c0_stat = read_c0_status(); \ __c0_stat = read_c0_status(); \
write_c0_status(__c0_stat | ST0_CU2); \ write_c0_status(__c0_stat | ST0_CU2); \
cop2_restore(&current->thread.cp2); \ cop2_restore(current); \
write_c0_status(__c0_stat & ~ST0_CU2); \ write_c0_status(__c0_stat & ~ST0_CU2); \
} \ } \
if (cpu_has_dsp) \ if (cpu_has_dsp) \
......
...@@ -9,5 +9,13 @@ ...@@ -9,5 +9,13 @@
#define __ASM_TOPOLOGY_H #define __ASM_TOPOLOGY_H
#include <topology.h> #include <topology.h>
#include <linux/smp.h>
#ifdef CONFIG_SMP
#define topology_physical_package_id(cpu) (cpu_data[cpu].package)
#define topology_core_id(cpu) (cpu_data[cpu].core)
#define topology_core_cpumask(cpu) (&cpu_core_map[cpu])
#define topology_thread_cpumask(cpu) (&cpu_sibling_map[cpu])
#endif
#endif /* __ASM_TOPOLOGY_H */ #endif /* __ASM_TOPOLOGY_H */
...@@ -373,16 +373,18 @@ ...@@ -373,16 +373,18 @@
#define __NR_sched_getattr (__NR_Linux + 350) #define __NR_sched_getattr (__NR_Linux + 350)
#define __NR_renameat2 (__NR_Linux + 351) #define __NR_renameat2 (__NR_Linux + 351)
#define __NR_seccomp (__NR_Linux + 352) #define __NR_seccomp (__NR_Linux + 352)
#define __NR_getrandom (__NR_Linux + 353)
#define __NR_memfd_create (__NR_Linux + 354)
/* /*
* Offset of the last Linux o32 flavoured syscall * Offset of the last Linux o32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 352 #define __NR_Linux_syscalls 354
#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
#define __NR_O32_Linux 4000 #define __NR_O32_Linux 4000
#define __NR_O32_Linux_syscalls 352 #define __NR_O32_Linux_syscalls 354
#if _MIPS_SIM == _MIPS_SIM_ABI64 #if _MIPS_SIM == _MIPS_SIM_ABI64
...@@ -703,16 +705,18 @@ ...@@ -703,16 +705,18 @@
#define __NR_sched_getattr (__NR_Linux + 310) #define __NR_sched_getattr (__NR_Linux + 310)
#define __NR_renameat2 (__NR_Linux + 311) #define __NR_renameat2 (__NR_Linux + 311)
#define __NR_seccomp (__NR_Linux + 312) #define __NR_seccomp (__NR_Linux + 312)
#define __NR_getrandom (__NR_Linux + 313)
#define __NR_memfd_create (__NR_Linux + 314)
/* /*
* Offset of the last Linux 64-bit flavoured syscall * Offset of the last Linux 64-bit flavoured syscall
*/ */
#define __NR_Linux_syscalls 312 #define __NR_Linux_syscalls 314
#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
#define __NR_64_Linux 5000 #define __NR_64_Linux 5000
#define __NR_64_Linux_syscalls 312 #define __NR_64_Linux_syscalls 314
#if _MIPS_SIM == _MIPS_SIM_NABI32 #if _MIPS_SIM == _MIPS_SIM_NABI32
...@@ -1037,15 +1041,17 @@ ...@@ -1037,15 +1041,17 @@
#define __NR_sched_getattr (__NR_Linux + 314) #define __NR_sched_getattr (__NR_Linux + 314)
#define __NR_renameat2 (__NR_Linux + 315) #define __NR_renameat2 (__NR_Linux + 315)
#define __NR_seccomp (__NR_Linux + 316) #define __NR_seccomp (__NR_Linux + 316)
#define __NR_getrandom (__NR_Linux + 317)
#define __NR_memfd_create (__NR_Linux + 318)
/* /*
* Offset of the last N32 flavoured syscall * Offset of the last N32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 316 #define __NR_Linux_syscalls 318
#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
#define __NR_N32_Linux 6000 #define __NR_N32_Linux 6000
#define __NR_N32_Linux_syscalls 316 #define __NR_N32_Linux_syscalls 318
#endif /* _UAPI_ASM_UNISTD_H */ #endif /* _UAPI_ASM_UNISTD_H */
...@@ -71,8 +71,12 @@ machine_kexec(struct kimage *image) ...@@ -71,8 +71,12 @@ machine_kexec(struct kimage *image)
kexec_start_address = kexec_start_address =
(unsigned long) phys_to_virt(image->start); (unsigned long) phys_to_virt(image->start);
if (image->type == KEXEC_TYPE_DEFAULT) {
kexec_indirection_page = kexec_indirection_page =
(unsigned long) phys_to_virt(image->head & PAGE_MASK); (unsigned long) phys_to_virt(image->head & PAGE_MASK);
} else {
kexec_indirection_page = (unsigned long)&image->head;
}
memcpy((void*)reboot_code_buffer, relocate_new_kernel, memcpy((void*)reboot_code_buffer, relocate_new_kernel,
relocate_new_kernel_size); relocate_new_kernel_size);
......
...@@ -577,3 +577,5 @@ EXPORT(sys_call_table) ...@@ -577,3 +577,5 @@ EXPORT(sys_call_table)
PTR sys_sched_getattr /* 4350 */ PTR sys_sched_getattr /* 4350 */
PTR sys_renameat2 PTR sys_renameat2
PTR sys_seccomp PTR sys_seccomp
PTR sys_getrandom
PTR sys_memfd_create
...@@ -432,4 +432,6 @@ EXPORT(sys_call_table) ...@@ -432,4 +432,6 @@ EXPORT(sys_call_table)
PTR sys_sched_getattr /* 5310 */ PTR sys_sched_getattr /* 5310 */
PTR sys_renameat2 PTR sys_renameat2
PTR sys_seccomp PTR sys_seccomp
PTR sys_getrandom
PTR sys_memfd_create
.size sys_call_table,.-sys_call_table .size sys_call_table,.-sys_call_table
...@@ -425,4 +425,6 @@ EXPORT(sysn32_call_table) ...@@ -425,4 +425,6 @@ EXPORT(sysn32_call_table)
PTR sys_sched_getattr PTR sys_sched_getattr
PTR sys_renameat2 /* 6315 */ PTR sys_renameat2 /* 6315 */
PTR sys_seccomp PTR sys_seccomp
PTR sys_getrandom
PTR sys_memfd_create
.size sysn32_call_table,.-sysn32_call_table .size sysn32_call_table,.-sysn32_call_table
...@@ -562,4 +562,6 @@ EXPORT(sys32_call_table) ...@@ -562,4 +562,6 @@ EXPORT(sys32_call_table)
PTR sys_sched_getattr /* 4350 */ PTR sys_sched_getattr /* 4350 */
PTR sys_renameat2 PTR sys_renameat2
PTR sys_seccomp PTR sys_seccomp
PTR sys_getrandom
PTR sys_memfd_create
.size sys32_call_table,.-sys32_call_table .size sys32_call_table,.-sys32_call_table
...@@ -793,6 +793,7 @@ static int build_body(struct jit_ctx *ctx) ...@@ -793,6 +793,7 @@ static int build_body(struct jit_ctx *ctx)
const struct sock_filter *inst; const struct sock_filter *inst;
unsigned int i, off, load_order, condt; unsigned int i, off, load_order, condt;
u32 k, b_off __maybe_unused; u32 k, b_off __maybe_unused;
int tmp;
for (i = 0; i < prog->len; i++) { for (i = 0; i < prog->len; i++) {
u16 code; u16 code;
...@@ -1332,9 +1333,9 @@ static int build_body(struct jit_ctx *ctx) ...@@ -1332,9 +1333,9 @@ static int build_body(struct jit_ctx *ctx)
case BPF_ANC | SKF_AD_PKTTYPE: case BPF_ANC | SKF_AD_PKTTYPE:
ctx->flags |= SEEN_SKB; ctx->flags |= SEEN_SKB;
off = pkt_type_offset(); tmp = off = pkt_type_offset();
if (off < 0) if (tmp < 0)
return -1; return -1;
emit_load_byte(r_tmp, r_skb, off, ctx); emit_load_byte(r_tmp, r_skb, off, ctx);
/* Keep only the last 3 bits */ /* Keep only the last 3 bits */
......
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