Merge branch 'for-linus-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml
Pull UML updates from Richard Weinberger: "Beside of various fixes this also contains patches to enable features such was Kcov, kmemleak and TRACE_IRQFLAGS_SUPPORT on UML" * 'for-linus-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml: hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common() um: Support kcov um: Enable TRACE_IRQFLAGS_SUPPORT um: Use asm-generic/irqflags.h um: Fix possible deadlock in sig_handler_common() um: Select HAVE_DEBUG_KMEMLEAK um: Setup physical memory in setup_arch() um: Eliminate null test after alloc_bootmem
This commit is contained in:
commit
9e0243db61
9 changed files with 32 additions and 24 deletions
|
@ -1,10 +1,12 @@
|
|||
config UML
|
||||
bool
|
||||
default y
|
||||
select ARCH_HAS_KCOV
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
select HAVE_ARCH_SECCOMP_FILTER
|
||||
select HAVE_UID16
|
||||
select HAVE_FUTEX_CMPXCHG if FUTEX
|
||||
select HAVE_DEBUG_KMEMLEAK
|
||||
select GENERIC_IRQ_SHOW
|
||||
select GENERIC_CPU_DEVICES
|
||||
select GENERIC_IO
|
||||
|
@ -31,10 +33,9 @@ config PCI
|
|||
config PCMCIA
|
||||
bool
|
||||
|
||||
# Yet to do!
|
||||
config TRACE_IRQFLAGS_SUPPORT
|
||||
bool
|
||||
default n
|
||||
default y
|
||||
|
||||
config LOCKDEP_SUPPORT
|
||||
bool
|
||||
|
|
|
@ -6,37 +6,33 @@ extern int set_signals(int enable);
|
|||
extern void block_signals(void);
|
||||
extern void unblock_signals(void);
|
||||
|
||||
#define arch_local_save_flags arch_local_save_flags
|
||||
static inline unsigned long arch_local_save_flags(void)
|
||||
{
|
||||
return get_signals();
|
||||
}
|
||||
|
||||
#define arch_local_irq_restore arch_local_irq_restore
|
||||
static inline void arch_local_irq_restore(unsigned long flags)
|
||||
{
|
||||
set_signals(flags);
|
||||
}
|
||||
|
||||
#define arch_local_irq_enable arch_local_irq_enable
|
||||
static inline void arch_local_irq_enable(void)
|
||||
{
|
||||
unblock_signals();
|
||||
}
|
||||
|
||||
#define arch_local_irq_disable arch_local_irq_disable
|
||||
static inline void arch_local_irq_disable(void)
|
||||
{
|
||||
block_signals();
|
||||
}
|
||||
|
||||
static inline unsigned long arch_local_irq_save(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
flags = arch_local_save_flags();
|
||||
arch_local_irq_disable();
|
||||
return flags;
|
||||
}
|
||||
#define ARCH_IRQ_DISABLED 0
|
||||
#define ARCh_IRQ_ENABLED (SIGIO|SIGVTALRM)
|
||||
|
||||
static inline bool arch_irqs_disabled(void)
|
||||
{
|
||||
return arch_local_save_flags() == 0;
|
||||
}
|
||||
#include <asm-generic/irqflags.h>
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
# Licensed under the GPL
|
||||
#
|
||||
|
||||
# Don't instrument UML-specific code; without this, we may crash when
|
||||
# accessing the instrumentation buffer for the first time from the
|
||||
# kernel.
|
||||
KCOV_INSTRUMENT := n
|
||||
|
||||
CPPFLAGS_vmlinux.lds := -DSTART=$(LDS_START) \
|
||||
-DELF_ARCH=$(LDS_ELF_ARCH) \
|
||||
-DELF_FORMAT=$(LDS_ELF_FORMAT) \
|
||||
|
|
|
@ -37,8 +37,6 @@ static int __init read_initrd(void)
|
|||
}
|
||||
|
||||
area = alloc_bootmem(size);
|
||||
if (area == NULL)
|
||||
return 0;
|
||||
|
||||
if (load_initrd(initrd, area, size) == -1)
|
||||
return 0;
|
||||
|
|
|
@ -319,9 +319,6 @@ int __init linux_main(int argc, char **argv)
|
|||
|
||||
start_vm = VMALLOC_START;
|
||||
|
||||
setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
|
||||
mem_total_pages(physmem_size, iomem_size, highmem);
|
||||
|
||||
virtmem_size = physmem_size;
|
||||
stack = (unsigned long) argv;
|
||||
stack &= ~(1024 * 1024 - 1);
|
||||
|
@ -334,7 +331,6 @@ int __init linux_main(int argc, char **argv)
|
|||
printf("Kernel virtual memory size shrunk to %lu bytes\n",
|
||||
virtmem_size);
|
||||
|
||||
stack_protections((unsigned long) &init_thread_info);
|
||||
os_flush_stdout();
|
||||
|
||||
return start_uml();
|
||||
|
@ -342,6 +338,10 @@ int __init linux_main(int argc, char **argv)
|
|||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
stack_protections((unsigned long) &init_thread_info);
|
||||
setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
|
||||
mem_total_pages(physmem_size, iomem_size, highmem);
|
||||
|
||||
paging_init();
|
||||
strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
*cmdline_p = command_line;
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
# Licensed under the GPL
|
||||
#
|
||||
|
||||
# Don't instrument UML-specific code
|
||||
KCOV_INSTRUMENT := n
|
||||
|
||||
obj-y = aio.o execvp.o file.o helper.o irq.o main.o mem.o process.o \
|
||||
registers.o sigio.o signal.o start_up.o time.o tty.o \
|
||||
umid.o user_syms.o util.o drivers/ skas/
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <kern_util.h>
|
||||
#include <os.h>
|
||||
#include <sysdep/mcontext.h>
|
||||
#include <um_malloc.h>
|
||||
|
||||
void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
|
||||
[SIGTRAP] = relay_signal,
|
||||
|
@ -32,7 +33,7 @@ static void sig_handler_common(int sig, struct siginfo *si, mcontext_t *mc)
|
|||
struct uml_pt_regs *r;
|
||||
int save_errno = errno;
|
||||
|
||||
r = malloc(sizeof(struct uml_pt_regs));
|
||||
r = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
|
||||
if (!r)
|
||||
panic("out of memory");
|
||||
|
||||
|
@ -91,7 +92,7 @@ static void timer_real_alarm_handler(mcontext_t *mc)
|
|||
{
|
||||
struct uml_pt_regs *regs;
|
||||
|
||||
regs = malloc(sizeof(struct uml_pt_regs));
|
||||
regs = uml_kmalloc(sizeof(struct uml_pt_regs), UM_GFP_ATOMIC);
|
||||
if (!regs)
|
||||
panic("out of memory");
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
# Building vDSO images for x86.
|
||||
#
|
||||
|
||||
# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
|
||||
KCOV_INSTRUMENT := n
|
||||
|
||||
VDSO64-y := y
|
||||
|
||||
vdso-install-$(VDSO64-y) += vdso.so
|
||||
|
|
|
@ -959,10 +959,11 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
|
|||
|
||||
if (S_ISLNK(root_inode->i_mode)) {
|
||||
char *name = follow_link(host_root_path);
|
||||
if (IS_ERR(name))
|
||||
if (IS_ERR(name)) {
|
||||
err = PTR_ERR(name);
|
||||
else
|
||||
err = read_name(root_inode, name);
|
||||
goto out_put;
|
||||
}
|
||||
err = read_name(root_inode, name);
|
||||
kfree(name);
|
||||
if (err)
|
||||
goto out_put;
|
||||
|
|
Loading…
Reference in a new issue