Commit cade08a5 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha

Pull alpha updates from Matt Turner:
 "They're mostly small janitorial fixes but there's also more important
  ones:

   - drop the alpha-specific x86 binary loader (David Hildenbrand)

   - regression fix for at least Marvel platforms (Mike Rapoport)

   - fix for a scary-looking typo (Zheng Yongjun)"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha:
  alpha: register early reserved memory in memblock
  alpha: fix spelling mistakes
  alpha: Remove space between * and parameter name
  alpha: fp_emul: avoid init/cleanup_module names
  alpha: Add syscall_get_return_value()
  binfmt: remove support for em86 (alpha only)
  alpha: fix typos in a comment
  alpha: defconfig: add necessary configs for boot testing
  alpha: Send stop IPI to send to online CPUs
  alpha: convert comma to semicolon
  alpha: remove undef inline in compiler.h
  alpha: Kconfig: Replace HTTP links with HTTPS ones
  alpha: __udiv_qrnnd should be exported
parents 7e96bf47 640b7ea5
...@@ -532,7 +532,7 @@ config SMP ...@@ -532,7 +532,7 @@ config SMP
will run faster if you say N here. will run faster if you say N here.
See also the SMP-HOWTO available at See also the SMP-HOWTO available at
<http://www.tldp.org/docs.html#howto>. <https://www.tldp.org/docs.html#howto>.
If you don't know what to do here, say N. If you don't know what to do here, say N.
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include "ksize.h" #include "ksize.h"
extern unsigned long switch_to_osf_pal(unsigned long nr, extern unsigned long switch_to_osf_pal(unsigned long nr,
struct pcb_struct * pcb_va, struct pcb_struct * pcb_pa, struct pcb_struct *pcb_va, struct pcb_struct *pcb_pa,
unsigned long *vptb); unsigned long *vptb);
extern void move_stack(unsigned long new_stack); extern void move_stack(unsigned long new_stack);
......
...@@ -200,7 +200,7 @@ extern char _end; ...@@ -200,7 +200,7 @@ extern char _end;
START_ADDR KSEG address of the entry point of kernel code. START_ADDR KSEG address of the entry point of kernel code.
ZERO_PGE KSEG address of page full of zeroes, but ZERO_PGE KSEG address of page full of zeroes, but
upon entry to kerne cvan be expected upon entry to kernel, it can be expected
to hold the parameter list and possible to hold the parameter list and possible
INTRD information. INTRD information.
......
...@@ -30,7 +30,7 @@ extern long srm_printk(const char *, ...) ...@@ -30,7 +30,7 @@ extern long srm_printk(const char *, ...)
__attribute__ ((format (printf, 1, 2))); __attribute__ ((format (printf, 1, 2)));
/* /*
* gzip delarations * gzip declarations
*/ */
#define OF(args) args #define OF(args) args
#define STATIC static #define STATIC static
......
...@@ -70,3 +70,4 @@ CONFIG_DEBUG_INFO=y ...@@ -70,3 +70,4 @@ CONFIG_DEBUG_INFO=y
CONFIG_ALPHA_LEGACY_START_ADDRESS=y CONFIG_ALPHA_LEGACY_START_ADDRESS=y
CONFIG_MATHEMU=y CONFIG_MATHEMU=y
CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_HMAC=y
CONFIG_DEVTMPFS=y
...@@ -4,15 +4,4 @@ ...@@ -4,15 +4,4 @@
#include <uapi/asm/compiler.h> #include <uapi/asm/compiler.h>
/* Some idiots over in <linux/compiler.h> thought inline should imply
always_inline. This breaks stuff. We'll include this file whenever
we run into such problems. */
#include <linux/compiler.h>
#undef inline
#undef __inline__
#undef __inline
#undef __always_inline
#define __always_inline inline __attribute__((always_inline))
#endif /* __ALPHA_COMPILER_H */ #endif /* __ALPHA_COMPILER_H */
...@@ -9,4 +9,10 @@ static inline int syscall_get_arch(struct task_struct *task) ...@@ -9,4 +9,10 @@ static inline int syscall_get_arch(struct task_struct *task)
return AUDIT_ARCH_ALPHA; return AUDIT_ARCH_ALPHA;
} }
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
return regs->r0;
}
#endif /* _ASM_ALPHA_SYSCALL_H */ #endif /* _ASM_ALPHA_SYSCALL_H */
...@@ -834,7 +834,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer, ...@@ -834,7 +834,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
return -EFAULT; return -EFAULT;
state = &current_thread_info()->ieee_state; state = &current_thread_info()->ieee_state;
/* Update softare trap enable bits. */ /* Update software trap enable bits. */
*state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK); *state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK);
/* Update the real fpcr. */ /* Update the real fpcr. */
...@@ -854,7 +854,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer, ...@@ -854,7 +854,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
state = &current_thread_info()->ieee_state; state = &current_thread_info()->ieee_state;
exc &= IEEE_STATUS_MASK; exc &= IEEE_STATUS_MASK;
/* Update softare trap enable bits. */ /* Update software trap enable bits. */
swcr = (*state & IEEE_SW_MASK) | exc; swcr = (*state & IEEE_SW_MASK) | exc;
*state |= exc; *state |= exc;
......
...@@ -574,7 +574,7 @@ static void alpha_pmu_start(struct perf_event *event, int flags) ...@@ -574,7 +574,7 @@ static void alpha_pmu_start(struct perf_event *event, int flags)
* Check that CPU performance counters are supported. * Check that CPU performance counters are supported.
* - currently support EV67 and later CPUs. * - currently support EV67 and later CPUs.
* - actually some later revisions of the EV6 have the same PMC model as the * - actually some later revisions of the EV6 have the same PMC model as the
* EV67 but we don't do suffiently deep CPU detection to detect them. * EV67 but we don't do sufficiently deep CPU detection to detect them.
* Bad luck to the very few people who might have one, I guess. * Bad luck to the very few people who might have one, I guess.
*/ */
static int supported_cpu(void) static int supported_cpu(void)
......
...@@ -256,7 +256,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, ...@@ -256,7 +256,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
childstack->r26 = (unsigned long) ret_from_kernel_thread; childstack->r26 = (unsigned long) ret_from_kernel_thread;
childstack->r9 = usp; /* function */ childstack->r9 = usp; /* function */
childstack->r10 = kthread_arg; childstack->r10 = kthread_arg;
childregs->hae = alpha_mv.hae_cache, childregs->hae = alpha_mv.hae_cache;
childti->pcb.usp = 0; childti->pcb.usp = 0;
return 0; return 0;
} }
......
...@@ -319,18 +319,19 @@ setup_memory(void *kernel_end) ...@@ -319,18 +319,19 @@ setup_memory(void *kernel_end)
i, cluster->usage, cluster->start_pfn, i, cluster->usage, cluster->start_pfn,
cluster->start_pfn + cluster->numpages); cluster->start_pfn + cluster->numpages);
/* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark
this for later. */
if (cluster->usage & 3)
continue;
end = cluster->start_pfn + cluster->numpages; end = cluster->start_pfn + cluster->numpages;
if (end > max_low_pfn) if (end > max_low_pfn)
max_low_pfn = end; max_low_pfn = end;
memblock_add(PFN_PHYS(cluster->start_pfn), memblock_add(PFN_PHYS(cluster->start_pfn),
cluster->numpages << PAGE_SHIFT); cluster->numpages << PAGE_SHIFT);
/* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark
this for later. */
if (cluster->usage & 3)
memblock_reserve(PFN_PHYS(cluster->start_pfn),
cluster->numpages << PAGE_SHIFT);
} }
/* /*
......
...@@ -582,7 +582,7 @@ void ...@@ -582,7 +582,7 @@ void
smp_send_stop(void) smp_send_stop(void)
{ {
cpumask_t to_whom; cpumask_t to_whom;
cpumask_copy(&to_whom, cpu_possible_mask); cpumask_copy(&to_whom, cpu_online_mask);
cpumask_clear_cpu(smp_processor_id(), &to_whom); cpumask_clear_cpu(smp_processor_id(), &to_whom);
#ifdef DEBUG_IPI_MSG #ifdef DEBUG_IPI_MSG
if (hard_smp_processor_id() != boot_cpu_id) if (hard_smp_processor_id() != boot_cpu_id)
......
...@@ -212,7 +212,7 @@ nautilus_init_pci(void) ...@@ -212,7 +212,7 @@ nautilus_init_pci(void)
/* Use default IO. */ /* Use default IO. */
pci_add_resource(&bridge->windows, &ioport_resource); pci_add_resource(&bridge->windows, &ioport_resource);
/* Irongate PCI memory aperture, calculate requred size before /* Irongate PCI memory aperture, calculate required size before
setting it up. */ setting it up. */
pci_add_resource(&bridge->windows, &irongate_mem); pci_add_resource(&bridge->windows, &irongate_mem);
......
...@@ -730,7 +730,7 @@ do_entUnaUser(void __user * va, unsigned long opcode, ...@@ -730,7 +730,7 @@ do_entUnaUser(void __user * va, unsigned long opcode,
long error; long error;
/* Check the UAC bits to decide what the user wants us to do /* Check the UAC bits to decide what the user wants us to do
with the unaliged access. */ with the unaligned access. */
if (!(current_thread_info()->status & TS_UAC_NOPRINT)) { if (!(current_thread_info()->status & TS_UAC_NOPRINT)) {
if (__ratelimit(&ratelimit)) { if (__ratelimit(&ratelimit)) {
......
...@@ -65,7 +65,7 @@ static long (*save_emul) (unsigned long pc); ...@@ -65,7 +65,7 @@ static long (*save_emul) (unsigned long pc);
long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long); long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long);
long do_alpha_fp_emul(unsigned long); long do_alpha_fp_emul(unsigned long);
int init_module(void) static int alpha_fp_emul_init_module(void)
{ {
save_emul_imprecise = alpha_fp_emul_imprecise; save_emul_imprecise = alpha_fp_emul_imprecise;
save_emul = alpha_fp_emul; save_emul = alpha_fp_emul;
...@@ -73,12 +73,14 @@ int init_module(void) ...@@ -73,12 +73,14 @@ int init_module(void)
alpha_fp_emul = do_alpha_fp_emul; alpha_fp_emul = do_alpha_fp_emul;
return 0; return 0;
} }
module_init(alpha_fp_emul_init_module);
void cleanup_module(void) static void alpha_fp_emul_cleanup_module(void)
{ {
alpha_fp_emul_imprecise = save_emul_imprecise; alpha_fp_emul_imprecise = save_emul_imprecise;
alpha_fp_emul = save_emul; alpha_fp_emul = save_emul;
} }
module_exit(alpha_fp_emul_cleanup_module);
#undef alpha_fp_emul_imprecise #undef alpha_fp_emul_imprecise
#define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise #define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise
...@@ -401,3 +403,5 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask) ...@@ -401,3 +403,5 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
egress: egress:
return si_code; return si_code;
} }
EXPORT_SYMBOL(__udiv_qrnnd);
...@@ -168,21 +168,6 @@ config OSF4_COMPAT ...@@ -168,21 +168,6 @@ config OSF4_COMPAT
with v4 shared libraries freely available from Compaq. If you're with v4 shared libraries freely available from Compaq. If you're
going to use shared libraries from Tru64 version 5.0 or later, say N. going to use shared libraries from Tru64 version 5.0 or later, say N.
config BINFMT_EM86
tristate "Kernel support for Linux/Intel ELF binaries"
depends on ALPHA
help
Say Y here if you want to be able to execute Linux/Intel ELF
binaries just like native Alpha binaries on your Alpha machine. For
this to work, you need to have the emulator /usr/bin/em86 in place.
You can get the same functionality by saying N here and saying Y to
"Kernel support for MISC binaries".
You may answer M to compile the emulation support as a module and
later load the module when you want to use a Linux/Intel binary. The
module will be called binfmt_em86. If unsure, say Y.
config BINFMT_MISC config BINFMT_MISC
tristate "Kernel support for MISC binaries" tristate "Kernel support for MISC binaries"
help help
......
...@@ -39,7 +39,6 @@ obj-$(CONFIG_FS_ENCRYPTION) += crypto/ ...@@ -39,7 +39,6 @@ obj-$(CONFIG_FS_ENCRYPTION) += crypto/
obj-$(CONFIG_FS_VERITY) += verity/ obj-$(CONFIG_FS_VERITY) += verity/
obj-$(CONFIG_FILE_LOCKING) += locks.o obj-$(CONFIG_FILE_LOCKING) += locks.o
obj-$(CONFIG_BINFMT_AOUT) += binfmt_aout.o obj-$(CONFIG_BINFMT_AOUT) += binfmt_aout.o
obj-$(CONFIG_BINFMT_EM86) += binfmt_em86.o
obj-$(CONFIG_BINFMT_MISC) += binfmt_misc.o obj-$(CONFIG_BINFMT_MISC) += binfmt_misc.o
obj-$(CONFIG_BINFMT_SCRIPT) += binfmt_script.o obj-$(CONFIG_BINFMT_SCRIPT) += binfmt_script.o
obj-$(CONFIG_BINFMT_ELF) += binfmt_elf.o obj-$(CONFIG_BINFMT_ELF) += binfmt_elf.o
......
// SPDX-License-Identifier: GPL-2.0-only
/*
* linux/fs/binfmt_em86.c
*
* Based on linux/fs/binfmt_script.c
* Copyright (C) 1996 Martin von Löwis
* original #!-checking implemented by tytso.
*
* em86 changes Copyright (C) 1997 Jim Paradis
*/
#include <linux/module.h>
#include <linux/string.h>
#include <linux/stat.h>
#include <linux/binfmts.h>
#include <linux/elf.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/file.h>
#include <linux/errno.h>
#define EM86_INTERP "/usr/bin/em86"
#define EM86_I_NAME "em86"
static int load_em86(struct linux_binprm *bprm)
{
const char *i_name, *i_arg;
char *interp;
struct file * file;
int retval;
struct elfhdr elf_ex;
/* Make sure this is a Linux/Intel ELF executable... */
elf_ex = *((struct elfhdr *)bprm->buf);
if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
return -ENOEXEC;
/* First of all, some simple consistency checks */
if ((elf_ex.e_type != ET_EXEC && elf_ex.e_type != ET_DYN) ||
(!((elf_ex.e_machine == EM_386) || (elf_ex.e_machine == EM_486))) ||
!bprm->file->f_op->mmap) {
return -ENOEXEC;
}
/* Need to be able to load the file after exec */
if (bprm->interp_flags & BINPRM_FLAGS_PATH_INACCESSIBLE)
return -ENOENT;
/* Unlike in the script case, we don't have to do any hairy
* parsing to find our interpreter... it's hardcoded!
*/
interp = EM86_INTERP;
i_name = EM86_I_NAME;
i_arg = NULL; /* We reserve the right to add an arg later */
/*
* Splice in (1) the interpreter's name for argv[0]
* (2) (optional) argument to interpreter
* (3) filename of emulated file (replace argv[0])
*
* This is done in reverse order, because of how the
* user environment and arguments are stored.
*/
remove_arg_zero(bprm);
retval = copy_string_kernel(bprm->filename, bprm);
if (retval < 0) return retval;
bprm->argc++;
if (i_arg) {
retval = copy_string_kernel(i_arg, bprm);
if (retval < 0) return retval;
bprm->argc++;
}
retval = copy_string_kernel(i_name, bprm);
if (retval < 0) return retval;
bprm->argc++;
/*
* OK, now restart the process with the interpreter's inode.
* Note that we use open_exec() as the name is now in kernel
* space, and we don't need to copy it.
*/
file = open_exec(interp);
if (IS_ERR(file))
return PTR_ERR(file);
bprm->interpreter = file;
return 0;
}
static struct linux_binfmt em86_format = {
.module = THIS_MODULE,
.load_binary = load_em86,
};
static int __init init_em86_binfmt(void)
{
register_binfmt(&em86_format);
return 0;
}
static void __exit exit_em86_binfmt(void)
{
unregister_binfmt(&em86_format);
}
core_initcall(init_em86_binfmt);
module_exit(exit_em86_binfmt);
MODULE_LICENSE("GPL");
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