mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 17:41:50 +00:00
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
This commit is contained in:
commit
cade08a572
18 changed files with 31 additions and 156 deletions
|
@ -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 @@
|
||||||
#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;
|
||||||
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 *, ...)
|
||||||
__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
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
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,
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
state = ¤t_thread_info()->ieee_state;
|
state = ¤t_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,
|
||||||
state = ¤t_thread_info()->ieee_state;
|
state = ¤t_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)
|
||||||
* 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,
|
||||||
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)
|
||||||
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
|
||||||
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)
|
||||||
|
|
||||||
/* 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,
|
||||||
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);
|
||||||
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)
|
||||||
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)
|
||||||
egress:
|
egress:
|
||||||
return si_code;
|
return si_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__udiv_qrnnd);
|
||||||
|
|
|
@ -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/
|
||||||
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
|
||||||
|
|
110
fs/binfmt_em86.c
110
fs/binfmt_em86.c
|
@ -1,110 +0,0 @@
|
||||||
// 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");
|
|
Loading…
Add table
Add a link
Reference in a new issue