uml: update to linux 4.4

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

SVN-Revision: 48265
owl
Felix Fietkau 2016-01-17 10:41:52 +00:00
parent 7c0260117f
commit cad399c87b
8 changed files with 52 additions and 180 deletions

View File

@ -23,7 +23,7 @@ BOARDNAME:=User Mode Linux
FEATURES:=ext4 audio FEATURES:=ext4 audio
MAINTAINER:=Florian Fainelli <florian@openwrt.org> MAINTAINER:=Florian Fainelli <florian@openwrt.org>
KERNEL_PATCHVER:=4.1 KERNEL_PATCHVER:=4.4
include $(INCLUDE_DIR)/target.mk include $(INCLUDE_DIR)/target.mk

View File

@ -55,7 +55,6 @@ CONFIG_HAVE_NET_DSA=y
CONFIG_HAVE_UID16=y CONFIG_HAVE_UID16=y
CONFIG_HOSTAUDIO=m CONFIG_HOSTAUDIO=m
CONFIG_HOSTFS=y CONFIG_HOSTFS=y
# CONFIG_HPPFS is not set
CONFIG_HZ_PERIODIC=y CONFIG_HZ_PERIODIC=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_INIT_ENV_ARG_LIMIT=128 CONFIG_INIT_ENV_ARG_LIMIT=128
@ -105,9 +104,9 @@ CONFIG_NO_DMA=y
CONFIG_NO_IOMEM=y CONFIG_NO_IOMEM=y
# CONFIG_NSC_GPIO is not set # CONFIG_NSC_GPIO is not set
CONFIG_NULL_CHAN=y CONFIG_NULL_CHAN=y
# CONFIG_OF is not set
CONFIG_OLD_SIGACTION=y CONFIG_OLD_SIGACTION=y
CONFIG_OLD_SIGSUSPEND3=y CONFIG_OLD_SIGSUSPEND3=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_PGTABLE_LEVELS=2 CONFIG_PGTABLE_LEVELS=2
CONFIG_PORT_CHAN=y CONFIG_PORT_CHAN=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
@ -128,6 +127,7 @@ CONFIG_RD_GZIP=y
CONFIG_RELAY=y CONFIG_RELAY=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
# CONFIG_SBC8360_WDT is not set # CONFIG_SBC8360_WDT is not set
# CONFIG_SCHED_INFO is not set
# CONFIG_SCSI_DMA is not set # CONFIG_SCSI_DMA is not set
CONFIG_SOFT_WATCHDOG=m CONFIG_SOFT_WATCHDOG=m
CONFIG_SOUND=m CONFIG_SOUND=m
@ -140,10 +140,10 @@ CONFIG_SSL_CHAN="pty"
CONFIG_STACKTRACE=y CONFIG_STACKTRACE=y
CONFIG_STATIC_LINK=y CONFIG_STATIC_LINK=y
CONFIG_STDERR_CONSOLE=y CONFIG_STDERR_CONSOLE=y
# CONFIG_SUNXI_SRAM is not set
CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set # CONFIG_TRACE_IRQFLAGS_SUPPORT is not set
CONFIG_TTY_CHAN=y CONFIG_TTY_CHAN=y
CONFIG_UID16=y
CONFIG_UML=y CONFIG_UML=y
CONFIG_UML_NET=y CONFIG_UML_NET=y
CONFIG_UML_NET_DAEMON=y CONFIG_UML_NET_DAEMON=y

View File

@ -56,7 +56,6 @@ CONFIG_HAVE_UID16=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HOSTAUDIO=m CONFIG_HOSTAUDIO=m
CONFIG_HOSTFS=y CONFIG_HOSTFS=y
# CONFIG_HPPFS is not set
CONFIG_HZ_PERIODIC=y CONFIG_HZ_PERIODIC=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_INIT_ENV_ARG_LIMIT=128 CONFIG_INIT_ENV_ARG_LIMIT=128
@ -84,7 +83,7 @@ CONFIG_NLS=y
CONFIG_NO_DMA=y CONFIG_NO_DMA=y
CONFIG_NO_IOMEM=y CONFIG_NO_IOMEM=y
CONFIG_NULL_CHAN=y CONFIG_NULL_CHAN=y
CONFIG_PAGEFLAGS_EXTENDED=y # CONFIG_OF is not set
CONFIG_PGTABLE_LEVELS=3 CONFIG_PGTABLE_LEVELS=3
CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_PORT_CHAN=y CONFIG_PORT_CHAN=y
@ -106,6 +105,7 @@ CONFIG_RD_GZIP=y
CONFIG_RELAY=y CONFIG_RELAY=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set # CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y
# CONFIG_SCHED_INFO is not set
# CONFIG_SCSI_DMA is not set # CONFIG_SCSI_DMA is not set
CONFIG_SOFT_WATCHDOG=m CONFIG_SOFT_WATCHDOG=m
CONFIG_SOUND=m CONFIG_SOUND=m
@ -118,10 +118,10 @@ CONFIG_SSL_CHAN="pty"
CONFIG_STACKTRACE=y CONFIG_STACKTRACE=y
CONFIG_STATIC_LINK=y CONFIG_STATIC_LINK=y
CONFIG_STDERR_CONSOLE=y CONFIG_STDERR_CONSOLE=y
# CONFIG_SUNXI_SRAM is not set
CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set # CONFIG_TRACE_IRQFLAGS_SUPPORT is not set
CONFIG_TTY_CHAN=y CONFIG_TTY_CHAN=y
CONFIG_UID16=y
CONFIG_UML=y CONFIG_UML=y
CONFIG_UML_NET=y CONFIG_UML_NET=y
CONFIG_UML_NET_DAEMON=y CONFIG_UML_NET_DAEMON=y
@ -137,7 +137,6 @@ CONFIG_UML_RANDOM=y
CONFIG_UML_SOUND=m CONFIG_UML_SOUND=m
CONFIG_UML_WATCHDOG=m CONFIG_UML_WATCHDOG=m
CONFIG_UML_X86=y CONFIG_UML_X86=y
# CONFIG_UNISYSSPAR is not set
# CONFIG_USER_NS is not set # CONFIG_USER_NS is not set
CONFIG_VM_EVENT_COUNTERS=y CONFIG_VM_EVENT_COUNTERS=y
CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_CORE=y

View File

@ -1,94 +0,0 @@
From: Richard Weinberger <richard@nod.at>
Date: Sun, 31 May 2015 19:50:57 +0200
Subject: [PATCH] um: Stop abusing __KERNEL__
Currently UML is abusing __KERNEL__ to distinguish between
kernel and host code (os-Linux). It is better to use a custom
define such that existing users of __KERNEL__ don't get confused.
Signed-off-by: Richard Weinberger <richard@nod.at>
---
--- a/arch/um/drivers/mconsole.h
+++ b/arch/um/drivers/mconsole.h
@@ -7,7 +7,7 @@
#ifndef __MCONSOLE_H__
#define __MCONSOLE_H__
-#ifndef __KERNEL__
+#ifdef __UM_HOST__
#include <stdint.h>
#define u32 uint32_t
#endif
--- a/arch/um/include/shared/init.h
+++ b/arch/um/include/shared/init.h
@@ -40,7 +40,7 @@
typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
-#ifndef __KERNEL__
+#ifdef __UM_HOST__
#ifndef __section
# define __section(S) __attribute__ ((__section__(#S)))
#endif
@@ -131,7 +131,7 @@ extern struct uml_param __uml_setup_star
#define __uml_postsetup_call __used __section(.uml.postsetup.init)
#define __uml_exit_call __used __section(.uml.exitcall.exit)
-#ifndef __KERNEL__
+#ifdef __UM_HOST__
#define __define_initcall(level,fn) \
static initcall_t __initcall_##fn __used \
--- a/arch/um/include/shared/user.h
+++ b/arch/um/include/shared/user.h
@@ -17,7 +17,7 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
/* This is to get size_t */
-#ifdef __KERNEL__
+#ifndef __UM_HOST__
#include <linux/types.h>
#else
#include <stddef.h>
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -68,9 +68,10 @@ KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -
KBUILD_AFLAGS += $(ARCH_INCLUDE)
-USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
- $(patsubst -I%,,$(KBUILD_CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \
- $(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64 -idirafter include
+USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \
+ $(ARCH_INCLUDE) $(MODE_INCLUDE) $(filter -I%,$(CFLAGS)) \
+ -D_FILE_OFFSET_BITS=64 -idirafter include \
+ -D__KERNEL__ -D__UM_HOST__
#This will adjust *FLAGS accordingly to the platform.
include $(ARCH_DIR)/Makefile-os-$(OS)
--- a/arch/x86/um/shared/sysdep/tls.h
+++ b/arch/x86/um/shared/sysdep/tls.h
@@ -1,7 +1,7 @@
#ifndef _SYSDEP_TLS_H
#define _SYSDEP_TLS_H
-# ifndef __KERNEL__
+#ifdef __UM_HOST__
/* Change name to avoid conflicts with the original one from <asm/ldt.h>, which
* may be named user_desc (but in 2.4 and in header matching its API was named
@@ -22,11 +22,11 @@ typedef struct um_dup_user_desc {
#endif
} user_desc_t;
-# else /* __KERNEL__ */
+#else /* __UM_HOST__ */
typedef struct user_desc user_desc_t;
-# endif /* __KERNEL__ */
+#endif /* __UM_HOST__ */
extern int os_set_thread_area(user_desc_t *info, int pid);
extern int os_get_thread_area(user_desc_t *info, int pid);

View File

@ -1,44 +0,0 @@
From: Richard Weinberger <richard@nod.at>
Date: Sun, 31 May 2015 22:15:58 +0200
Subject: [PATCH] um: Remove copy&paste code from init.h
As we got rid of the __KERNEL__ abuse, we can directly
include linux/compiler.h now.
This also allows gcc 5 to build UML.
Reported-by: Hans-Werner Hilse <hwhilse@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
--- a/arch/um/include/shared/init.h
+++ b/arch/um/include/shared/init.h
@@ -40,28 +40,8 @@
typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
-#ifdef __UM_HOST__
-#ifndef __section
-# define __section(S) __attribute__ ((__section__(#S)))
-#endif
-
-#if __GNUC__ == 3
-
-#if __GNUC_MINOR__ >= 3
-# define __used __attribute__((__used__))
-#else
-# define __used __attribute__((__unused__))
-#endif
-
-#else
-#if __GNUC__ == 4
-# define __used __attribute__((__used__))
-#endif
-#endif
-
-#else
#include <linux/compiler.h>
-#endif
+
/* These are for everybody (although not all archs will actually
discard it in modules) */
#define __init __section(.init.text)

View File

@ -0,0 +1,11 @@
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -62,7 +62,7 @@
-Wl,--start-group \
${KBUILD_VMLINUX_MAIN} \
-Wl,--end-group \
- -lutil -lrt ${1}
+ -lutil -lrt -lpthread ${1}
rm -f linux
fi
}

View File

@ -17,7 +17,7 @@
# #
--- a/arch/um/drivers/mconsole.h --- a/arch/um/drivers/mconsole.h
+++ b/arch/um/drivers/mconsole.h +++ b/arch/um/drivers/mconsole.h
@@ -85,6 +85,7 @@ extern void mconsole_cad(struct mc_reque @@ -85,6 +85,7 @@
extern void mconsole_stop(struct mc_request *req); extern void mconsole_stop(struct mc_request *req);
extern void mconsole_go(struct mc_request *req); extern void mconsole_go(struct mc_request *req);
extern void mconsole_log(struct mc_request *req); extern void mconsole_log(struct mc_request *req);
@ -43,7 +43,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/switch_to.h> #include <asm/switch_to.h>
@@ -121,6 +123,59 @@ void mconsole_log(struct mc_request *req @@ -121,6 +123,59 @@
mconsole_reply(req, "", 0, 0); mconsole_reply(req, "", 0, 0);
} }
@ -103,7 +103,7 @@
void mconsole_proc(struct mc_request *req) void mconsole_proc(struct mc_request *req)
{ {
struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt; struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt;
@@ -187,6 +242,7 @@ void mconsole_proc(struct mc_request *re @@ -187,6 +242,7 @@
stop - pause the UML; it will do nothing until it receives a 'go' \n\ stop - pause the UML; it will do nothing until it receives a 'go' \n\
go - continue the UML after a 'stop' \n\ go - continue the UML after a 'stop' \n\
log <string> - make UML enter <string> into the kernel log\n\ log <string> - make UML enter <string> into the kernel log\n\
@ -113,7 +113,7 @@
" "
--- a/arch/um/drivers/mconsole_user.c --- a/arch/um/drivers/mconsole_user.c
+++ b/arch/um/drivers/mconsole_user.c +++ b/arch/um/drivers/mconsole_user.c
@@ -30,6 +30,7 @@ static struct mconsole_command commands[ @@ -30,6 +30,7 @@
{ "stop", mconsole_stop, MCONSOLE_PROC }, { "stop", mconsole_stop, MCONSOLE_PROC },
{ "go", mconsole_go, MCONSOLE_INTR }, { "go", mconsole_go, MCONSOLE_INTR },
{ "log", mconsole_log, MCONSOLE_INTR }, { "log", mconsole_log, MCONSOLE_INTR },
@ -123,7 +123,7 @@
}; };
--- a/arch/um/os-Linux/file.c --- a/arch/um/os-Linux/file.c
+++ b/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c
@@ -534,6 +534,8 @@ int os_create_unix_socket(const char *fi @@ -535,6 +535,8 @@
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
@ -134,7 +134,7 @@
err = bind(sock, (struct sockaddr *) &addr, sizeof(addr)); err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
--- a/include/linux/kmod.h --- a/include/linux/kmod.h
+++ b/include/linux/kmod.h +++ b/include/linux/kmod.h
@@ -62,6 +62,7 @@ struct subprocess_info { @@ -62,6 +62,7 @@
int wait; int wait;
int retval; int retval;
int (*init)(struct subprocess_info *info, struct cred *new); int (*init)(struct subprocess_info *info, struct cred *new);
@ -142,7 +142,7 @@
void (*cleanup)(struct subprocess_info *info); void (*cleanup)(struct subprocess_info *info);
void *data; void *data;
}; };
@@ -104,4 +105,6 @@ extern int usermodehelper_read_trylock(v @@ -102,4 +103,6 @@
extern long usermodehelper_read_lock_wait(long timeout); extern long usermodehelper_read_lock_wait(long timeout);
extern void usermodehelper_read_unlock(void); extern void usermodehelper_read_unlock(void);
@ -159,36 +159,36 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <trace/events/module.h> #include <trace/events/module.h>
@@ -223,6 +224,28 @@ static int ____call_usermodehelper(void @@ -222,6 +223,28 @@
flush_signal_handlers(current, 1); flush_signal_handlers(current, 1);
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
+ /* Install output when needed */ + /* Install output when needed */
+ if (sub_info->stdout) { + if (sub_info->stdout) {
+ struct files_struct *f = current->files; + struct files_struct *f = current->files;
+ struct fdtable *fdt; + struct fdtable *fdt;
+ +
+ sys_close(1); + sys_close(1);
+ sys_close(2); + sys_close(2);
+ get_file(sub_info->stdout); + get_file(sub_info->stdout);
+ fd_install(1, sub_info->stdout); + fd_install(1, sub_info->stdout);
+ fd_install(2, sub_info->stdout); + fd_install(2, sub_info->stdout);
+ spin_lock(&f->file_lock); + spin_lock(&f->file_lock);
+ fdt = files_fdtable(f); + fdt = files_fdtable(f);
+ __set_bit(1, fdt->open_fds); + __set_bit(1, fdt->open_fds);
+ __clear_bit(1, fdt->close_on_exec); + __clear_bit(1, fdt->close_on_exec);
+ __set_bit(2, fdt->open_fds); + __set_bit(2, fdt->open_fds);
+ __clear_bit(2, fdt->close_on_exec); + __clear_bit(2, fdt->close_on_exec);
+ spin_unlock(&f->file_lock); + spin_unlock(&f->file_lock);
+ +
+ /* disallow core files */ + /* disallow core files */
+ current->signal->rlim[RLIMIT_CORE] = (struct rlimit){0, 0}; + current->signal->rlim[RLIMIT_CORE] = (struct rlimit){0, 0};
+ } + }
+ +
/* We can run anywhere, unlike our parent keventd(). */ /*
set_cpus_allowed_ptr(current, cpu_all_mask); * Our parent (unbound workqueue) runs with elevated scheduling
* priority. Avoid propagating that into the userspace child.
@@ -522,6 +545,20 @@ struct subprocess_info *call_usermodehel @@ -540,6 +563,20 @@
} }
EXPORT_SYMBOL(call_usermodehelper_setup); EXPORT_SYMBOL(call_usermodehelper_setup);

View File

@ -11,7 +11,7 @@ Applies to vanilla kernel 3.9.4.
=============================================================================== ===============================================================================
--- a/arch/um/Kconfig.net --- a/arch/um/Kconfig.net
+++ b/arch/um/Kconfig.net +++ b/arch/um/Kconfig.net
@@ -21,6 +21,19 @@ config UML_NET @@ -21,6 +21,19 @@
enable at least one of the following transport options to actually enable at least one of the following transport options to actually
make use of UML networking. make use of UML networking.
@ -47,7 +47,7 @@ Applies to vanilla kernel 3.9.4.
#define DRIVER_NAME "uml-netdev" #define DRIVER_NAME "uml-netdev"
static DEFINE_SPINLOCK(opened_lock); static DEFINE_SPINLOCK(opened_lock);
@@ -295,11 +302,47 @@ static void uml_net_user_timer_expire(un @@ -295,11 +302,47 @@
#endif #endif
} }
@ -95,7 +95,7 @@ Applies to vanilla kernel 3.9.4.
if (str == NULL) if (str == NULL)
goto random; goto random;
@@ -340,9 +383,26 @@ static void setup_etheraddr(struct net_d @@ -340,9 +383,26 @@
return; return;
random: random: