mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
Merge branch 'for-linus' of git://github.com/richardweinberger/linux
* 'for-linus' of git://github.com/richardweinberger/linux: (90 commits) um: fix ubd cow size um: Fix kmalloc argument order in um/vdso/vma.c um: switch to use of drivers/Kconfig UserModeLinux-HOWTO.txt: fix a typo UserModeLinux-HOWTO.txt: remove ^H characters um: we need sys/user.h only on i386 um: merge delay_{32,64}.c um: distribute exports to where exported stuff is defined um: kill system-um.h um: generic ftrace.h will do... um: segment.h is x86-only and needed only there um: asm/pda.h is not needed anymore um: hw_irq.h can go generic as well um: switch to generic-y um: clean Kconfig up a bit um: a couple of missing dependencies... um: kill useless argument of free_chan() and free_one_chan() um: unify ptrace_user.h um: unify KSTK_... um: fix gcov build breakage ...
This commit is contained in:
commit
de0a5345a5
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,4 @@
|
||||
|
||||
menu "Character Devices"
|
||||
menu "UML Character Devices"
|
||||
|
||||
config STDERR_CONSOLE
|
||||
bool "stderr console"
|
||||
@ -105,92 +104,6 @@ config SSL_CHAN
|
||||
this if you expect the UML that you build to be run in environments
|
||||
which don't have a set of /dev/pty* devices.
|
||||
|
||||
config UNIX98_PTYS
|
||||
bool "Unix98 PTY support"
|
||||
help
|
||||
A pseudo terminal (PTY) is a software device consisting of two
|
||||
halves: a master and a slave. The slave device behaves identical to
|
||||
a physical terminal; the master device is used by a process to
|
||||
read data from and write data to the slave, thereby emulating a
|
||||
terminal. Typical programs for the master side are telnet servers
|
||||
and xterms.
|
||||
|
||||
Linux has traditionally used the BSD-like names /dev/ptyxx for
|
||||
masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
|
||||
has a number of problems. The GNU C library glibc 2.1 and later,
|
||||
however, supports the Unix98 naming standard: in order to acquire a
|
||||
pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
|
||||
terminal is then made available to the process and the pseudo
|
||||
terminal slave can be accessed as /dev/pts/<number>. What was
|
||||
traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
|
||||
|
||||
All modern Linux systems use the Unix98 ptys. Say Y unless
|
||||
you're on an embedded system and want to conserve memory.
|
||||
|
||||
config LEGACY_PTYS
|
||||
bool "Legacy (BSD) PTY support"
|
||||
default y
|
||||
help
|
||||
A pseudo terminal (PTY) is a software device consisting of two
|
||||
halves: a master and a slave. The slave device behaves identical to
|
||||
a physical terminal; the master device is used by a process to
|
||||
read data from and write data to the slave, thereby emulating a
|
||||
terminal. Typical programs for the master side are telnet servers
|
||||
and xterms.
|
||||
|
||||
Linux has traditionally used the BSD-like names /dev/ptyxx
|
||||
for masters and /dev/ttyxx for slaves of pseudo
|
||||
terminals. This scheme has a number of problems, including
|
||||
security. This option enables these legacy devices; on most
|
||||
systems, it is safe to say N.
|
||||
|
||||
config RAW_DRIVER
|
||||
tristate "RAW driver (/dev/raw/rawN)"
|
||||
depends on BLOCK
|
||||
help
|
||||
The raw driver permits block devices to be bound to /dev/raw/rawN.
|
||||
Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
|
||||
See the raw(8) manpage for more details.
|
||||
|
||||
Applications should preferably open the device (eg /dev/hda1)
|
||||
with the O_DIRECT flag.
|
||||
|
||||
config MAX_RAW_DEVS
|
||||
int "Maximum number of RAW devices to support (1-8192)"
|
||||
depends on RAW_DRIVER
|
||||
default "256"
|
||||
help
|
||||
The maximum number of RAW devices that are supported.
|
||||
Default is 256. Increase this number in case you need lots of
|
||||
raw devices.
|
||||
|
||||
config LEGACY_PTY_COUNT
|
||||
int "Maximum number of legacy PTY in use"
|
||||
depends on LEGACY_PTYS
|
||||
default "256"
|
||||
help
|
||||
The maximum number of legacy PTYs that can be used at any one time.
|
||||
The default is 256, and should be more than enough. Embedded
|
||||
systems may want to reduce this to save memory.
|
||||
|
||||
When not in use, each legacy PTY occupies 12 bytes on 32-bit
|
||||
architectures and 24 bytes on 64-bit architectures.
|
||||
|
||||
config WATCHDOG
|
||||
bool "Watchdog Timer Support"
|
||||
|
||||
config WATCHDOG_NOWAYOUT
|
||||
bool "Disable watchdog shutdown on close"
|
||||
depends on WATCHDOG
|
||||
|
||||
config SOFT_WATCHDOG
|
||||
tristate "Software Watchdog"
|
||||
depends on WATCHDOG
|
||||
|
||||
config UML_WATCHDOG
|
||||
tristate "UML watchdog"
|
||||
depends on WATCHDOG
|
||||
|
||||
config UML_SOUND
|
||||
tristate "Sound support"
|
||||
help
|
||||
@ -211,29 +124,4 @@ config HOSTAUDIO
|
||||
tristate
|
||||
default UML_SOUND
|
||||
|
||||
#It is selected elsewhere, so kconfig would warn without this.
|
||||
config HW_RANDOM
|
||||
tristate
|
||||
default n
|
||||
|
||||
config UML_RANDOM
|
||||
tristate "Hardware random number generator"
|
||||
help
|
||||
This option enables UML's "hardware" random number generator. It
|
||||
attaches itself to the host's /dev/random, supplying as much entropy
|
||||
as the host has, rather than the small amount the UML gets from its
|
||||
own drivers. It registers itself as a standard hardware random number
|
||||
generator, major 10, minor 183, and the canonical device name is
|
||||
/dev/hwrng.
|
||||
The way to make use of this is to install the rng-tools package
|
||||
(check your distro, or download from
|
||||
http://sourceforge.net/projects/gkernel/). rngd periodically reads
|
||||
/dev/hwrng and injects the entropy into /dev/random.
|
||||
|
||||
config MMAPPER
|
||||
tristate "iomem emulation driver"
|
||||
help
|
||||
This driver allows a host file to be used as emulated IO memory inside
|
||||
UML.
|
||||
|
||||
endmenu
|
||||
|
@ -2,20 +2,14 @@ source "init/Kconfig"
|
||||
|
||||
source "kernel/Kconfig.freezer"
|
||||
|
||||
source "drivers/block/Kconfig"
|
||||
|
||||
source "arch/um/Kconfig.char"
|
||||
|
||||
source "drivers/base/Kconfig"
|
||||
source "drivers/Kconfig"
|
||||
|
||||
source "net/Kconfig"
|
||||
|
||||
source "arch/um/Kconfig.net"
|
||||
|
||||
source "drivers/net/Kconfig"
|
||||
|
||||
source "drivers/connector/Kconfig"
|
||||
|
||||
source "fs/Kconfig"
|
||||
|
||||
source "security/Kconfig"
|
||||
@ -24,19 +18,4 @@ source "crypto/Kconfig"
|
||||
|
||||
source "lib/Kconfig"
|
||||
|
||||
source "drivers/scsi/Kconfig"
|
||||
|
||||
source "drivers/md/Kconfig"
|
||||
|
||||
if BROKEN
|
||||
source "drivers/mtd/Kconfig"
|
||||
endif
|
||||
|
||||
source "drivers/leds/Kconfig"
|
||||
|
||||
#This is just to shut up some Kconfig warnings, so no prompt.
|
||||
config INPUT
|
||||
tristate
|
||||
default n
|
||||
|
||||
source "arch/um/Kconfig.debug"
|
||||
|
@ -148,5 +148,11 @@ config KERNEL_STACK_ORDER
|
||||
be 1 << order pages. The default is OK unless you're running Valgrind
|
||||
on UML, in which case, set this to 3.
|
||||
|
||||
config MMAPPER
|
||||
tristate "iomem emulation driver"
|
||||
help
|
||||
This driver allows a host file to be used as emulated IO memory inside
|
||||
UML.
|
||||
|
||||
config NO_DMA
|
||||
def_bool y
|
||||
|
@ -20,15 +20,27 @@ core-y += $(ARCH_DIR)/kernel/ \
|
||||
|
||||
MODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/shared/skas
|
||||
|
||||
HEADER_ARCH := $(SUBARCH)
|
||||
|
||||
# Additional ARCH settings for x86
|
||||
ifeq ($(SUBARCH),i386)
|
||||
HEADER_ARCH := x86
|
||||
endif
|
||||
ifeq ($(SUBARCH),x86_64)
|
||||
HEADER_ARCH := x86
|
||||
endif
|
||||
|
||||
HOST_DIR := arch/$(HEADER_ARCH)
|
||||
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-skas
|
||||
include $(srctree)/$(HOST_DIR)/Makefile.um
|
||||
|
||||
core-y += $(HOST_DIR)/um/
|
||||
|
||||
SHARED_HEADERS := $(ARCH_DIR)/include/shared
|
||||
ARCH_INCLUDE := -I$(srctree)/$(SHARED_HEADERS)
|
||||
ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH)/shared
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
ARCH_INCLUDE += -I$(SHARED_HEADERS)
|
||||
endif
|
||||
KBUILD_CPPFLAGS += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH)
|
||||
ARCH_INCLUDE += -I$(srctree)/$(HOST_DIR)/um/shared
|
||||
KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/um
|
||||
|
||||
# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so
|
||||
# named - it's a common symbol in libpcap, so we get a binary which crashes.
|
||||
@ -47,14 +59,12 @@ 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
|
||||
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
|
||||
$(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64 -idirafter include
|
||||
|
||||
#This will adjust *FLAGS accordingly to the platform.
|
||||
include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
|
||||
|
||||
KBUILD_CPPFLAGS += -I$(srctree)/arch/$(HEADER_ARCH)/include
|
||||
KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include
|
||||
|
||||
# -Derrno=kernel_errno - This turns all kernel references to errno into
|
||||
# kernel_errno to separate them from the libc errno. This allows -fno-common
|
||||
@ -84,10 +94,9 @@ define archhelp
|
||||
echo ' find in the kernel root.'
|
||||
endef
|
||||
|
||||
KBUILD_KCONFIG := arch/um/Kconfig.$(HEADER_ARCH)
|
||||
KBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig
|
||||
|
||||
archprepare: $(SHARED_HEADERS)/user_constants.h
|
||||
archprepare: $(SHARED_HEADERS)/kern_constants.h
|
||||
archprepare: include/generated/user_constants.h
|
||||
|
||||
LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
|
||||
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
|
||||
@ -118,9 +127,7 @@ endef
|
||||
|
||||
# When cleaning we don't include .config, so we don't include
|
||||
# TT or skas makefiles and don't clean skas_ptregs.h.
|
||||
CLEAN_FILES += linux x.i gmon.out \
|
||||
$(SHARED_HEADERS)/user_constants.h \
|
||||
$(SHARED_HEADERS)/kern_constants.h
|
||||
CLEAN_FILES += linux x.i gmon.out
|
||||
|
||||
archclean:
|
||||
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
||||
@ -128,8 +135,8 @@ archclean:
|
||||
|
||||
# Generated files
|
||||
|
||||
$(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE
|
||||
$(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(SUBARCH) $@
|
||||
$(HOST_DIR)/um/user-offsets.s: FORCE
|
||||
$(Q)$(MAKE) $(build)=$(HOST_DIR)/um $@
|
||||
|
||||
define filechk_gen-asm-offsets
|
||||
(set -e; \
|
||||
@ -144,11 +151,7 @@ define filechk_gen-asm-offsets
|
||||
echo ""; )
|
||||
endef
|
||||
|
||||
$(SHARED_HEADERS)/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s
|
||||
include/generated/user_constants.h: $(HOST_DIR)/um/user-offsets.s
|
||||
$(call filechk,gen-asm-offsets)
|
||||
|
||||
$(SHARED_HEADERS)/kern_constants.h:
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(Q)echo '#include "../../../../include/generated/asm-offsets.h"' >$@
|
||||
|
||||
export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH
|
||||
export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH
|
||||
|
@ -1,26 +0,0 @@
|
||||
# Copyright 2003 - 2004 Pathscale, Inc
|
||||
# Released under the GPL
|
||||
|
||||
core-y += arch/um/sys-x86_64/ arch/x86/crypto/
|
||||
START := 0x60000000
|
||||
|
||||
_extra_flags_ = -fno-builtin -m64
|
||||
|
||||
KBUILD_CFLAGS += $(_extra_flags_)
|
||||
|
||||
CHECKFLAGS += -m64 -D__x86_64__
|
||||
KBUILD_AFLAGS += -m64
|
||||
LDFLAGS += -m elf_x86_64
|
||||
KBUILD_CPPFLAGS += -m64
|
||||
|
||||
ELF_ARCH := i386:x86-64
|
||||
ELF_FORMAT := elf64-x86-64
|
||||
HEADER_ARCH := x86
|
||||
|
||||
# Not on all 64-bit distros /lib is a symlink to /lib64. PLD is an example.
|
||||
|
||||
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64
|
||||
LINK-y += -m64
|
||||
|
||||
# Do unit-at-a-time unconditionally on x86_64, following the host
|
||||
KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
|
@ -6,9 +6,9 @@
|
||||
#ifndef __CHAN_KERN_H__
|
||||
#define __CHAN_KERN_H__
|
||||
|
||||
#include "linux/tty.h"
|
||||
#include "linux/list.h"
|
||||
#include "linux/console.h"
|
||||
#include <linux/tty.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/console.h>
|
||||
#include "chan_user.h"
|
||||
#include "line.h"
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/tty_flip.h>
|
||||
#include "chan_kern.h"
|
||||
#include "chan.h"
|
||||
#include "os.h"
|
||||
|
||||
#ifdef CONFIG_NOCONFIG_CHAN
|
||||
@ -358,11 +358,11 @@ int chan_window_size(struct list_head *chans, unsigned short *rows_out,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void free_one_chan(struct chan *chan, int delay_free_irq)
|
||||
static void free_one_chan(struct chan *chan)
|
||||
{
|
||||
list_del(&chan->list);
|
||||
|
||||
close_one_chan(chan, delay_free_irq);
|
||||
close_one_chan(chan, 0);
|
||||
|
||||
if (chan->ops->free != NULL)
|
||||
(*chan->ops->free)(chan->data);
|
||||
@ -372,14 +372,14 @@ static void free_one_chan(struct chan *chan, int delay_free_irq)
|
||||
kfree(chan);
|
||||
}
|
||||
|
||||
static void free_chan(struct list_head *chans, int delay_free_irq)
|
||||
static void free_chan(struct list_head *chans)
|
||||
{
|
||||
struct list_head *ele, *next;
|
||||
struct chan *chan;
|
||||
|
||||
list_for_each_safe(ele, next, chans) {
|
||||
chan = list_entry(ele, struct chan, list);
|
||||
free_one_chan(chan, delay_free_irq);
|
||||
free_one_chan(chan);
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,7 +547,7 @@ int parse_chan_pair(char *str, struct line *line, int device,
|
||||
char *in, *out;
|
||||
|
||||
if (!list_empty(chans)) {
|
||||
free_chan(chans, 0);
|
||||
free_chan(chans);
|
||||
INIT_LIST_HEAD(chans);
|
||||
}
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
void generic_close(int fd, void *unused)
|
||||
{
|
||||
@ -283,7 +281,12 @@ void register_winch(int fd, struct tty_struct *tty)
|
||||
return;
|
||||
|
||||
pid = tcgetpgrp(fd);
|
||||
if (!is_skas_winch(pid, fd, tty) && (pid == -1)) {
|
||||
if (is_skas_winch(pid, fd, tty)) {
|
||||
register_winch_irq(-1, fd, -1, tty, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pid == -1) {
|
||||
thread = winch_tramp(fd, tty, &thread_fd, &stack);
|
||||
if (thread < 0)
|
||||
return;
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "user.h"
|
||||
#include "um_malloc.h"
|
||||
|
||||
static inline void *cow_malloc(int size)
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include "net_user.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
enum request_type { REQ_NEW_CONTROL };
|
||||
|
||||
|
@ -9,10 +9,8 @@
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
struct fd_chan {
|
||||
int fd;
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include "os.h"
|
||||
#include "user.h"
|
||||
|
||||
struct dog_data {
|
||||
int stdin;
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include "linux/kd.h"
|
||||
#include "linux/sched.h"
|
||||
#include "linux/slab.h"
|
||||
#include "chan_kern.h"
|
||||
#include "chan.h"
|
||||
#include "irq_kern.h"
|
||||
#include "irq_user.h"
|
||||
#include "kern_util.h"
|
||||
|
@ -10,9 +10,7 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/un.h>
|
||||
#include "kern_constants.h"
|
||||
#include "mconsole.h"
|
||||
#include "user.h"
|
||||
|
||||
static struct mconsole_command commands[] = {
|
||||
/*
|
||||
|
@ -12,10 +12,8 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include "net_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
int tap_open_common(void *dev, char *gate_addr)
|
||||
{
|
||||
|
@ -9,9 +9,7 @@
|
||||
#include <asm/types.h>
|
||||
#include "net_user.h"
|
||||
#include "pcap_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
#define PCAP_FD(p) (*(int *)(p))
|
||||
|
||||
|
@ -10,11 +10,9 @@
|
||||
#include <unistd.h>
|
||||
#include <netinet/in.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "port.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
struct port_chan {
|
||||
int raw;
|
||||
|
@ -12,10 +12,8 @@
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
struct pty_chan {
|
||||
void (*announce)(char *dev_name, int dev);
|
||||
|
@ -11,12 +11,10 @@
|
||||
#include <string.h>
|
||||
#include <sys/termios.h>
|
||||
#include <sys/wait.h>
|
||||
#include "kern_constants.h"
|
||||
#include "net_user.h"
|
||||
#include "os.h"
|
||||
#include "slip.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
static int slip_user_init(void *data, void *dev)
|
||||
{
|
||||
|
@ -7,11 +7,9 @@
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/wait.h>
|
||||
#include "kern_constants.h"
|
||||
#include "net_user.h"
|
||||
#include "os.h"
|
||||
#include "slirp.h"
|
||||
#include "user.h"
|
||||
|
||||
static int slirp_user_init(void *data, void *dev)
|
||||
{
|
||||
|
@ -12,10 +12,8 @@
|
||||
#include "linux/console.h"
|
||||
#include "asm/termbits.h"
|
||||
#include "asm/irq.h"
|
||||
#include "line.h"
|
||||
#include "ssl.h"
|
||||
#include "chan_kern.h"
|
||||
#include "kern.h"
|
||||
#include "chan.h"
|
||||
#include "init.h"
|
||||
#include "irq_user.h"
|
||||
#include "mconsole_kern.h"
|
||||
|
@ -20,8 +20,7 @@
|
||||
#include "asm/current.h"
|
||||
#include "asm/irq.h"
|
||||
#include "stdio_console.h"
|
||||
#include "line.h"
|
||||
#include "chan_kern.h"
|
||||
#include "chan.h"
|
||||
#include "irq_user.h"
|
||||
#include "mconsole_kern.h"
|
||||
#include "init.h"
|
||||
|
@ -7,10 +7,8 @@
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
struct tty_chan {
|
||||
char *dev;
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include "asm/tlbflush.h"
|
||||
#include "mem_user.h"
|
||||
#include "kern_util.h"
|
||||
#include "kern.h"
|
||||
#include "mconsole_kern.h"
|
||||
#include "init.h"
|
||||
#include "irq_user.h"
|
||||
@ -54,7 +53,6 @@
|
||||
#include "ubd_user.h"
|
||||
#include "os.h"
|
||||
#include "mem.h"
|
||||
#include "mem_kern.h"
|
||||
#include "cow.h"
|
||||
|
||||
enum ubd_req { UBD_READ, UBD_WRITE };
|
||||
@ -513,8 +511,37 @@ __uml_exitcall(kill_io_thread);
|
||||
static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out)
|
||||
{
|
||||
char *file;
|
||||
int fd;
|
||||
int err;
|
||||
|
||||
file = ubd_dev->cow.file ? ubd_dev->cow.file : ubd_dev->file;
|
||||
__u32 version;
|
||||
__u32 align;
|
||||
char *backing_file;
|
||||
time_t mtime;
|
||||
unsigned long long size;
|
||||
int sector_size;
|
||||
int bitmap_offset;
|
||||
|
||||
if (ubd_dev->file && ubd_dev->cow.file) {
|
||||
file = ubd_dev->cow.file;
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
fd = os_open_file(ubd_dev->file, global_openflags, 0);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
err = read_cow_header(file_reader, &fd, &version, &backing_file, \
|
||||
&mtime, &size, §or_size, &align, &bitmap_offset);
|
||||
os_close_file(fd);
|
||||
|
||||
if(err == -EINVAL)
|
||||
file = ubd_dev->file;
|
||||
else
|
||||
file = backing_file;
|
||||
|
||||
out:
|
||||
return os_file_size(file, size_out);
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include <sys/mman.h>
|
||||
#include <sys/param.h>
|
||||
#include "asm/types.h"
|
||||
#include "user.h"
|
||||
#include "ubd_user.h"
|
||||
#include "os.h"
|
||||
#include "cow.h"
|
||||
|
@ -15,11 +15,9 @@
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
#include "kern_constants.h"
|
||||
#include "umcast.h"
|
||||
#include "net_user.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
static struct sockaddr_in *new_addr(char *addr, unsigned short port)
|
||||
{
|
||||
|
@ -6,10 +6,8 @@
|
||||
#include <stddef.h>
|
||||
#include <errno.h>
|
||||
#include <libvdeplug.h>
|
||||
#include "kern_constants.h"
|
||||
#include "net_user.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
#include "vde.h"
|
||||
|
||||
static int vde_user_init(void *data, void *dev)
|
||||
|
@ -11,10 +11,8 @@
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
#include "xterm.h"
|
||||
|
||||
struct xterm_chan {
|
||||
|
3
arch/um/include/asm/Kbuild
Normal file
3
arch/um/include/asm/Kbuild
Normal file
@ -0,0 +1,3 @@
|
||||
generic-y += bug.h cputime.h device.h emergency-restart.h futex.h hardirq.h
|
||||
generic-y += hw_irq.h irq_regs.h kdebug.h percpu.h sections.h topology.h xor.h
|
||||
generic-y += ftrace.h
|
@ -1,6 +0,0 @@
|
||||
#ifndef __UM_BUG_H
|
||||
#define __UM_BUG_H
|
||||
|
||||
#include <asm-generic/bug.h>
|
||||
|
||||
#endif
|
@ -1,6 +0,0 @@
|
||||
#ifndef __UM_CHECKSUM_H
|
||||
#define __UM_CHECKSUM_H
|
||||
|
||||
#include "sysdep/checksum.h"
|
||||
|
||||
#endif
|
@ -1,6 +0,0 @@
|
||||
#ifndef __UM_CPUTIME_H
|
||||
#define __UM_CPUTIME_H
|
||||
|
||||
#include <asm-generic/cputime.h>
|
||||
|
||||
#endif /* __UM_CPUTIME_H */
|
@ -1,7 +0,0 @@
|
||||
/*
|
||||
* Arch specific extensions to struct device
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
#include <asm-generic/device.h>
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||
#define _ASM_EMERGENCY_RESTART_H
|
||||
|
||||
#include <asm-generic/emergency-restart.h>
|
||||
|
||||
#endif /* _ASM_EMERGENCY_RESTART_H */
|
@ -1 +0,0 @@
|
||||
/* empty */
|
@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_FUTEX_H
|
||||
#define _ASM_FUTEX_H
|
||||
|
||||
#include <asm-generic/futex.h>
|
||||
|
||||
#endif
|
@ -1 +0,0 @@
|
||||
#include <asm-generic/hardirq.h>
|
@ -1,7 +0,0 @@
|
||||
#ifndef _ASM_UM_HW_IRQ_H
|
||||
#define _ASM_UM_HW_IRQ_H
|
||||
|
||||
#include "asm/irq.h"
|
||||
#include "asm/archparam.h"
|
||||
|
||||
#endif
|
@ -1 +0,0 @@
|
||||
#include <asm-generic/irq_regs.h>
|
@ -1,6 +1,42 @@
|
||||
#ifndef __UM_IRQFLAGS_H
|
||||
#define __UM_IRQFLAGS_H
|
||||
|
||||
/* Empty for now */
|
||||
extern int get_signals(void);
|
||||
extern int set_signals(int enable);
|
||||
extern void block_signals(void);
|
||||
extern void unblock_signals(void);
|
||||
|
||||
static inline unsigned long arch_local_save_flags(void)
|
||||
{
|
||||
return get_signals();
|
||||
}
|
||||
|
||||
static inline void arch_local_irq_restore(unsigned long flags)
|
||||
{
|
||||
set_signals(flags);
|
||||
}
|
||||
|
||||
static inline void arch_local_irq_enable(void)
|
||||
{
|
||||
unblock_signals();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static inline bool arch_irqs_disabled(void)
|
||||
{
|
||||
return arch_local_save_flags() == 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1 +0,0 @@
|
||||
#include <asm-generic/kdebug.h>
|
@ -1,12 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __MMU_H
|
||||
#define __MMU_H
|
||||
#ifndef __ARCH_UM_MMU_H
|
||||
#define __ARCH_UM_MMU_H
|
||||
|
||||
#include "um_mmu.h"
|
||||
#include "mm_id.h"
|
||||
#include <asm/mm_context.h>
|
||||
|
||||
typedef struct mm_context {
|
||||
struct mm_id id;
|
||||
struct uml_arch_mm_context arch;
|
||||
struct page **stub_pages;
|
||||
} mm_context_t;
|
||||
|
||||
extern void __switch_mm(struct mm_id * mm_idp);
|
||||
|
||||
/* Avoid tangled inclusion with asm/ldt.h */
|
||||
extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm);
|
||||
extern void free_ldt(struct mm_context *mm);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -6,15 +6,12 @@
|
||||
#ifndef __UM_MMU_CONTEXT_H
|
||||
#define __UM_MMU_CONTEXT_H
|
||||
|
||||
#include "linux/sched.h"
|
||||
#include "um_mmu.h"
|
||||
#include <linux/sched.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
extern void arch_dup_mmap(struct mm_struct *oldmm, struct mm_struct *mm);
|
||||
extern void arch_exit_mmap(struct mm_struct *mm);
|
||||
|
||||
#define get_mmu_context(task) do ; while(0)
|
||||
#define activate_context(tsk) do ; while(0)
|
||||
|
||||
#define deactivate_mm(tsk,mm) do { } while (0)
|
||||
|
||||
extern void force_flush_all(void);
|
||||
|
@ -19,7 +19,7 @@
|
||||
struct page;
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <sysdep/vm-flags.h>
|
||||
#include <asm/vm-flags.h>
|
||||
|
||||
/*
|
||||
* These are used to make use of C type-checking..
|
||||
|
@ -1 +0,0 @@
|
||||
#define PAGE_OFFSET_RAW (uml_physmem)
|
@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright 2003 PathScale, Inc.
|
||||
*
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __UM_PDA_X86_64_H
|
||||
#define __UM_PDA_X86_64_H
|
||||
|
||||
/* XXX */
|
||||
struct foo {
|
||||
unsigned int __softirq_pending;
|
||||
unsigned int __nmi_count;
|
||||
};
|
||||
|
||||
extern struct foo me;
|
||||
|
||||
#define read_pda(me) (&me)
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef __UM_PERCPU_H
|
||||
#define __UM_PERCPU_H
|
||||
|
||||
#include <asm-generic/percpu.h>
|
||||
|
||||
#endif /* __UM_PERCPU_H */
|
@ -23,17 +23,10 @@ struct pt_regs {
|
||||
#define PT_REGS_IP(r) UPT_IP(&(r)->regs)
|
||||
#define PT_REGS_SP(r) UPT_SP(&(r)->regs)
|
||||
|
||||
#define PT_REG(r, reg) UPT_REG(&(r)->regs, reg)
|
||||
#define PT_REGS_SET(r, reg, val) UPT_SET(&(r)->regs, reg, val)
|
||||
|
||||
#define PT_REGS_SET_SYSCALL_RETURN(r, res) \
|
||||
UPT_SET_SYSCALL_RETURN(&(r)->regs, res)
|
||||
#define PT_REGS_RESTART_SYSCALL(r) UPT_RESTART_SYSCALL(&(r)->regs)
|
||||
|
||||
#define PT_REGS_SYSCALL_NR(r) UPT_SYSCALL_NR(&(r)->regs)
|
||||
|
||||
#define PT_REGS_SC(r) UPT_SC(&(r)->regs)
|
||||
|
||||
#define instruction_pointer(regs) PT_REGS_IP(regs)
|
||||
|
||||
struct task_struct;
|
||||
|
@ -1,7 +0,0 @@
|
||||
#ifndef _UM_SECTIONS_H
|
||||
#define _UM_SECTIONS_H
|
||||
|
||||
/* nothing to see, move along */
|
||||
#include <asm-generic/sections.h>
|
||||
|
||||
#endif
|
@ -1,47 +0,0 @@
|
||||
#ifndef __UM_SYSTEM_GENERIC_H
|
||||
#define __UM_SYSTEM_GENERIC_H
|
||||
|
||||
#include "sysdep/system.h"
|
||||
|
||||
extern int get_signals(void);
|
||||
extern int set_signals(int enable);
|
||||
extern void block_signals(void);
|
||||
extern void unblock_signals(void);
|
||||
|
||||
static inline unsigned long arch_local_save_flags(void)
|
||||
{
|
||||
return get_signals();
|
||||
}
|
||||
|
||||
static inline void arch_local_irq_restore(unsigned long flags)
|
||||
{
|
||||
set_signals(flags);
|
||||
}
|
||||
|
||||
static inline void arch_local_irq_enable(void)
|
||||
{
|
||||
unblock_signals();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static inline bool arch_irqs_disabled(void)
|
||||
{
|
||||
return arch_local_save_flags() == 0;
|
||||
}
|
||||
|
||||
extern void *_switch_to(void *prev, void *next, void *last);
|
||||
#define switch_to(prev, next, last) prev = _switch_to(prev, next, last)
|
||||
|
||||
#endif
|
@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_UM_TOPOLOGY_H
|
||||
#define _ASM_UM_TOPOLOGY_H
|
||||
|
||||
#include <asm-generic/topology.h>
|
||||
|
||||
#endif
|
@ -6,15 +6,15 @@
|
||||
#ifndef __UM_UACCESS_H
|
||||
#define __UM_UACCESS_H
|
||||
|
||||
#include <asm/errno.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
/* thread_info has a mm_segment_t in it, so put the definition up here */
|
||||
typedef struct {
|
||||
unsigned long seg;
|
||||
} mm_segment_t;
|
||||
|
||||
#include "linux/thread_info.h"
|
||||
#include <linux/thread_info.h>
|
||||
#include <linux/errno.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
#define VERIFY_READ 0
|
||||
#define VERIFY_WRITE 1
|
||||
@ -38,7 +38,86 @@ typedef struct {
|
||||
|
||||
#define segment_eq(a, b) ((a).seg == (b).seg)
|
||||
|
||||
#include "um_uaccess.h"
|
||||
#define __under_task_size(addr, size) \
|
||||
(((unsigned long) (addr) < TASK_SIZE) && \
|
||||
(((unsigned long) (addr) + (size)) < TASK_SIZE))
|
||||
|
||||
#define __access_ok_vsyscall(type, addr, size) \
|
||||
((type == VERIFY_READ) && \
|
||||
((unsigned long) (addr) >= FIXADDR_USER_START) && \
|
||||
((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
|
||||
((unsigned long) (addr) + (size) >= (unsigned long)(addr)))
|
||||
|
||||
#define __addr_range_nowrap(addr, size) \
|
||||
((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
|
||||
|
||||
#define access_ok(type, addr, size) \
|
||||
(__addr_range_nowrap(addr, size) && \
|
||||
(__under_task_size(addr, size) || \
|
||||
__access_ok_vsyscall(type, addr, size) || \
|
||||
segment_eq(get_fs(), KERNEL_DS)))
|
||||
|
||||
extern int copy_from_user(void *to, const void __user *from, int n);
|
||||
extern int copy_to_user(void __user *to, const void *from, int n);
|
||||
|
||||
/*
|
||||
* strncpy_from_user: - Copy a NUL terminated string from userspace.
|
||||
* @dst: Destination address, in kernel space. This buffer must be at
|
||||
* least @count bytes long.
|
||||
* @src: Source address, in user space.
|
||||
* @count: Maximum number of bytes to copy, including the trailing NUL.
|
||||
*
|
||||
* Copies a NUL-terminated string from userspace to kernel space.
|
||||
*
|
||||
* On success, returns the length of the string (not including the trailing
|
||||
* NUL).
|
||||
*
|
||||
* If access to userspace fails, returns -EFAULT (some data may have been
|
||||
* copied).
|
||||
*
|
||||
* If @count is smaller than the length of the string, copies @count bytes
|
||||
* and returns @count.
|
||||
*/
|
||||
|
||||
extern int strncpy_from_user(char *dst, const char __user *src, int count);
|
||||
|
||||
/*
|
||||
* __clear_user: - Zero a block of memory in user space, with less checking.
|
||||
* @to: Destination address, in user space.
|
||||
* @n: Number of bytes to zero.
|
||||
*
|
||||
* Zero a block of memory in user space. Caller must check
|
||||
* the specified block with access_ok() before calling this function.
|
||||
*
|
||||
* Returns number of bytes that could not be cleared.
|
||||
* On success, this will be zero.
|
||||
*/
|
||||
extern int __clear_user(void __user *mem, int len);
|
||||
|
||||
/*
|
||||
* clear_user: - Zero a block of memory in user space.
|
||||
* @to: Destination address, in user space.
|
||||
* @n: Number of bytes to zero.
|
||||
*
|
||||
* Zero a block of memory in user space.
|
||||
*
|
||||
* Returns number of bytes that could not be cleared.
|
||||
* On success, this will be zero.
|
||||
*/
|
||||
extern int clear_user(void __user *mem, int len);
|
||||
|
||||
/*
|
||||
* strlen_user: - Get the size of a string in user space.
|
||||
* @str: The string to measure.
|
||||
* @n: The maximum valid length
|
||||
*
|
||||
* Get the size of a NUL-terminated string in user space.
|
||||
*
|
||||
* Returns the size of the string INCLUDING the terminating NUL.
|
||||
* On exception, returns 0.
|
||||
* If the string is too long, returns a value greater than @n.
|
||||
*/
|
||||
extern int strnlen_user(const void __user *str, int len);
|
||||
|
||||
#define __copy_from_user(to, from, n) copy_from_user(to, from, n)
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef __UM_XOR_H
|
||||
#define __UM_XOR_H
|
||||
|
||||
#include "asm-generic/xor.h"
|
||||
|
||||
#endif
|
@ -6,7 +6,7 @@
|
||||
#ifndef __START_H__
|
||||
#define __START_H__
|
||||
|
||||
#include "kern_constants.h"
|
||||
#include <generated/asm-offsets.h>
|
||||
|
||||
/*
|
||||
* Stolen from linux/const.h, which can't be directly included since
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE);
|
||||
|
||||
OFFSET(HOST_TASK_REGS, task_struct, thread.regs);
|
||||
OFFSET(HOST_TASK_PID, task_struct, pid);
|
||||
|
||||
DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE);
|
||||
|
@ -1,12 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __INITRD_USER_H__
|
||||
#define __INITRD_USER_H__
|
||||
|
||||
extern int load_initrd(char *filename, void *buf, int size);
|
||||
|
||||
#endif
|
||||
|
@ -13,28 +13,10 @@
|
||||
* includes.
|
||||
*/
|
||||
|
||||
extern int errno;
|
||||
|
||||
extern int clone(int (*proc)(void *), void *sp, int flags, void *data);
|
||||
extern int sleep(int);
|
||||
extern int printf(const char *fmt, ...);
|
||||
extern char *strerror(int errnum);
|
||||
extern char *ptsname(int __fd);
|
||||
extern int munmap(void *, int);
|
||||
extern void *sbrk(int increment);
|
||||
extern void *malloc(int size);
|
||||
extern void perror(char *err);
|
||||
extern int kill(int pid, int sig);
|
||||
extern int getuid(void);
|
||||
extern int getgid(void);
|
||||
extern int pause(void);
|
||||
extern int write(int, const void *, int);
|
||||
extern void exit(int);
|
||||
extern int close(int);
|
||||
extern int read(unsigned int, char *, int);
|
||||
extern int pipe(int *);
|
||||
extern int sched_yield(void);
|
||||
extern int ptrace(int op, int pid, long addr, long data);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -21,7 +21,6 @@ extern unsigned long alloc_stack(int order, int atomic);
|
||||
extern void free_stack(unsigned long stack, int order);
|
||||
|
||||
extern int do_signal(void);
|
||||
extern void copy_sc(struct uml_pt_regs *regs, void *from);
|
||||
extern void interrupt_end(void);
|
||||
extern void relay_signal(int sig, struct uml_pt_regs *regs);
|
||||
|
||||
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004 Fujitsu Siemens Computers GmbH
|
||||
* Licensed under the GPL
|
||||
*
|
||||
* Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com>
|
||||
*/
|
||||
|
||||
#ifndef __ASM_LDT_H
|
||||
#define __ASM_LDT_H
|
||||
|
||||
#include <linux/mutex.h>
|
||||
#include <sysdep/host_ldt.h>
|
||||
|
||||
extern void ldt_host_info(void);
|
||||
|
||||
#define LDT_PAGES_MAX \
|
||||
((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE)
|
||||
#define LDT_ENTRIES_PER_PAGE \
|
||||
(PAGE_SIZE/LDT_ENTRY_SIZE)
|
||||
#define LDT_DIRECT_ENTRIES \
|
||||
((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE)
|
||||
|
||||
struct ldt_entry {
|
||||
__u32 a;
|
||||
__u32 b;
|
||||
};
|
||||
|
||||
typedef struct uml_ldt {
|
||||
int entry_count;
|
||||
struct mutex lock;
|
||||
union {
|
||||
struct ldt_entry * pages[LDT_PAGES_MAX];
|
||||
struct ldt_entry entries[LDT_DIRECT_ENTRIES];
|
||||
} u;
|
||||
} uml_ldt_t;
|
||||
|
||||
#endif
|
@ -1,20 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2003 Jeff Dike (jdike@addtoit.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __MEM_KERN_H__
|
||||
#define __MEM_KERN_H__
|
||||
|
||||
#include "linux/list.h"
|
||||
#include "linux/types.h"
|
||||
|
||||
struct remapper {
|
||||
struct list_head list;
|
||||
int (*proc)(int, unsigned long, int, __u64);
|
||||
};
|
||||
|
||||
extern void register_remapper(struct remapper *info);
|
||||
|
||||
#endif
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include "irq_user.h"
|
||||
#include "longjmp.h"
|
||||
#include "mm_id.h"
|
||||
#include "sysdep/tls.h"
|
||||
|
||||
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
|
||||
|
||||
@ -203,12 +202,6 @@ extern int os_drop_memory(void *addr, int length);
|
||||
extern int can_drop_memory(void);
|
||||
extern void os_flush_stdout(void);
|
||||
|
||||
/* uaccess.c */
|
||||
extern unsigned long __do_user_copy(void *to, const void *from, int n,
|
||||
void **fault_addr, jmp_buf **fault_catcher,
|
||||
void (*op)(void *to, const void *from,
|
||||
int n), int *faulted_out);
|
||||
|
||||
/* execvp.c */
|
||||
extern int execvp_noalloc(char *buf, const char *file, char *const argv[]);
|
||||
/* helper.c */
|
||||
@ -218,10 +211,6 @@ extern int run_helper_thread(int (*proc)(void *), void *arg,
|
||||
extern int helper_wait(int pid);
|
||||
|
||||
|
||||
/* tls.c */
|
||||
extern int os_set_thread_area(user_desc_t *info, int pid);
|
||||
extern int os_get_thread_area(user_desc_t *info, int pid);
|
||||
|
||||
/* umid.c */
|
||||
extern int umid_file_name(char *name, char *buf, int len);
|
||||
extern int set_umid(char *name);
|
||||
@ -231,7 +220,7 @@ extern char *get_umid(void);
|
||||
extern void timer_init(void);
|
||||
extern void set_sigstack(void *sig_stack, int size);
|
||||
extern void remove_sigstack(void);
|
||||
extern void set_handler(int sig, void (*handler)(int), int flags, ...);
|
||||
extern void set_handler(int sig);
|
||||
extern int change_sig(int signal, int on);
|
||||
extern void block_signals(void);
|
||||
extern void unblock_signals(void);
|
||||
|
@ -1,17 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000 - 2008 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __PROCESS_H__
|
||||
#define __PROCESS_H__
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
/* Copied from linux/compiler-gcc.h since we can't include it directly */
|
||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
|
||||
extern void sig_handler(int sig, struct sigcontext *sc);
|
||||
extern void alarm_handler(int sig, struct sigcontext *sc);
|
||||
|
||||
#endif
|
@ -6,7 +6,8 @@
|
||||
#ifndef __PTRACE_USER_H__
|
||||
#define __PTRACE_USER_H__
|
||||
|
||||
#include "sysdep/ptrace_user.h"
|
||||
#include <sys/ptrace.h>
|
||||
#include <sysdep/ptrace_user.h>
|
||||
|
||||
extern int ptrace_getregs(long pid, unsigned long *regs_out);
|
||||
extern int ptrace_setregs(long pid, unsigned long *regs_in);
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef __SKAS_PT_REGS_
|
||||
#define __SKAS_PT_REGS_
|
||||
|
||||
#include <user_constants.h>
|
||||
|
||||
#endif
|
@ -1,12 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __SYSCALL_USER_H
|
||||
#define __SYSCALL_USER_H
|
||||
|
||||
extern int record_syscall_start(int syscall);
|
||||
extern void record_syscall_end(int index, long result);
|
||||
|
||||
#endif
|
@ -1,9 +0,0 @@
|
||||
#ifndef __TASK_H
|
||||
#define __TASK_H
|
||||
|
||||
#include <kern_constants.h>
|
||||
|
||||
#define TASK_REGS(task) ((struct uml_pt_regs *) &(((char *) (task))[HOST_TASK_REGS]))
|
||||
#define TASK_PID(task) *((int *) &(((char *) (task))[HOST_TASK_PID]))
|
||||
|
||||
#endif
|
@ -1,15 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __TLB_H__
|
||||
#define __TLB_H__
|
||||
|
||||
#include "um_mmu.h"
|
||||
|
||||
extern void force_flush_all(void);
|
||||
extern int flush_tlb_kernel_range_common(unsigned long start,
|
||||
unsigned long end);
|
||||
|
||||
#endif
|
@ -6,7 +6,7 @@
|
||||
#ifndef __UM_MALLOC_H__
|
||||
#define __UM_MALLOC_H__
|
||||
|
||||
#include "kern_constants.h"
|
||||
#include <generated/asm-offsets.h>
|
||||
|
||||
extern void *uml_kmalloc(int size, int flags);
|
||||
extern void kfree(const void *ptr);
|
||||
|
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_UM_MMU_H
|
||||
#define __ARCH_UM_MMU_H
|
||||
|
||||
#include "mm_id.h"
|
||||
#include "ldt.h"
|
||||
|
||||
typedef struct mm_context {
|
||||
struct mm_id id;
|
||||
struct uml_ldt ldt;
|
||||
struct page **stub_pages;
|
||||
} mm_context_t;
|
||||
|
||||
extern void __switch_mm(struct mm_id * mm_idp);
|
||||
|
||||
/* Avoid tangled inclusion with asm/ldt.h */
|
||||
extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm);
|
||||
extern void free_ldt(struct mm_context *mm);
|
||||
|
||||
#endif
|
@ -1,97 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_UM_UACCESS_H
|
||||
#define __ARCH_UM_UACCESS_H
|
||||
|
||||
#include <asm/elf.h>
|
||||
#include <asm/fixmap.h>
|
||||
#include "sysdep/archsetjmp.h"
|
||||
|
||||
#define __under_task_size(addr, size) \
|
||||
(((unsigned long) (addr) < TASK_SIZE) && \
|
||||
(((unsigned long) (addr) + (size)) < TASK_SIZE))
|
||||
|
||||
#define __access_ok_vsyscall(type, addr, size) \
|
||||
((type == VERIFY_READ) && \
|
||||
((unsigned long) (addr) >= FIXADDR_USER_START) && \
|
||||
((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
|
||||
((unsigned long) (addr) + (size) >= (unsigned long)(addr)))
|
||||
|
||||
#define __addr_range_nowrap(addr, size) \
|
||||
((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
|
||||
|
||||
#define access_ok(type, addr, size) \
|
||||
(__addr_range_nowrap(addr, size) && \
|
||||
(__under_task_size(addr, size) || \
|
||||
__access_ok_vsyscall(type, addr, size) || \
|
||||
segment_eq(get_fs(), KERNEL_DS)))
|
||||
|
||||
extern int copy_from_user(void *to, const void __user *from, int n);
|
||||
extern int copy_to_user(void __user *to, const void *from, int n);
|
||||
|
||||
extern int __do_copy_to_user(void *to, const void *from, int n,
|
||||
void **fault_addr, jmp_buf **fault_catcher);
|
||||
|
||||
/*
|
||||
* strncpy_from_user: - Copy a NUL terminated string from userspace.
|
||||
* @dst: Destination address, in kernel space. This buffer must be at
|
||||
* least @count bytes long.
|
||||
* @src: Source address, in user space.
|
||||
* @count: Maximum number of bytes to copy, including the trailing NUL.
|
||||
*
|
||||
* Copies a NUL-terminated string from userspace to kernel space.
|
||||
*
|
||||
* On success, returns the length of the string (not including the trailing
|
||||
* NUL).
|
||||
*
|
||||
* If access to userspace fails, returns -EFAULT (some data may have been
|
||||
* copied).
|
||||
*
|
||||
* If @count is smaller than the length of the string, copies @count bytes
|
||||
* and returns @count.
|
||||
*/
|
||||
|
||||
extern int strncpy_from_user(char *dst, const char __user *src, int count);
|
||||
|
||||
/*
|
||||
* __clear_user: - Zero a block of memory in user space, with less checking.
|
||||
* @to: Destination address, in user space.
|
||||
* @n: Number of bytes to zero.
|
||||
*
|
||||
* Zero a block of memory in user space. Caller must check
|
||||
* the specified block with access_ok() before calling this function.
|
||||
*
|
||||
* Returns number of bytes that could not be cleared.
|
||||
* On success, this will be zero.
|
||||
*/
|
||||
extern int __clear_user(void __user *mem, int len);
|
||||
|
||||
/*
|
||||
* clear_user: - Zero a block of memory in user space.
|
||||
* @to: Destination address, in user space.
|
||||
* @n: Number of bytes to zero.
|
||||
*
|
||||
* Zero a block of memory in user space.
|
||||
*
|
||||
* Returns number of bytes that could not be cleared.
|
||||
* On success, this will be zero.
|
||||
*/
|
||||
extern int clear_user(void __user *mem, int len);
|
||||
|
||||
/*
|
||||
* strlen_user: - Get the size of a string in user space.
|
||||
* @str: The string to measure.
|
||||
* @n: The maximum valid length
|
||||
*
|
||||
* Get the size of a NUL-terminated string in user space.
|
||||
*
|
||||
* Returns the size of the string INCLUDING the terminating NUL.
|
||||
* On exception, returns 0.
|
||||
* If the string is too long, returns a value greater than @n.
|
||||
*/
|
||||
extern int strnlen_user(const void __user *str, int len);
|
||||
|
||||
#endif
|
@ -6,7 +6,7 @@
|
||||
#ifndef __USER_H__
|
||||
#define __USER_H__
|
||||
|
||||
#include "kern_constants.h"
|
||||
#include <generated/asm-offsets.h>
|
||||
|
||||
/*
|
||||
* The usual definition - copied here because the kernel provides its own,
|
||||
@ -36,10 +36,11 @@ static inline int printk(const char *fmt, ...)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void schedule(void);
|
||||
extern int in_aton(char *str);
|
||||
extern int open_gdb_chan(void);
|
||||
extern size_t strlcpy(char *, const char *, size_t);
|
||||
extern size_t strlcat(char *, const char *, size_t);
|
||||
|
||||
/* Copied from linux/compiler-gcc.h since we can't include it directly */
|
||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
|
||||
#endif
|
||||
|
@ -11,7 +11,7 @@ clean-files :=
|
||||
|
||||
obj-y = config.o exec.o exitcode.o init_task.o irq.o ksyms.o mem.o \
|
||||
physmem.o process.o ptrace.o reboot.o sigio.o \
|
||||
signal.o smp.o syscall.o sysrq.o time.o tlb.o trap.o uaccess.o \
|
||||
signal.o smp.o syscall.o sysrq.o time.o tlb.o trap.o \
|
||||
um_arch.o umid.o skas/
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o
|
||||
|
@ -3,14 +3,15 @@
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include "linux/stddef.h"
|
||||
#include "linux/fs.h"
|
||||
#include "linux/ptrace.h"
|
||||
#include "linux/sched.h"
|
||||
#include "linux/slab.h"
|
||||
#include "asm/current.h"
|
||||
#include "asm/processor.h"
|
||||
#include "asm/uaccess.h"
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/current.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include "as-layout.h"
|
||||
#include "mem_user.h"
|
||||
#include "skas.h"
|
||||
@ -41,6 +42,7 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
|
||||
PT_REGS_IP(regs) = eip;
|
||||
PT_REGS_SP(regs) = esp;
|
||||
}
|
||||
EXPORT_SYMBOL(start_thread);
|
||||
|
||||
static long execve1(const char *file,
|
||||
const char __user *const __user *argv,
|
||||
|
@ -7,18 +7,3 @@
|
||||
|
||||
extern void __bb_init_func(void *) __attribute__((weak));
|
||||
EXPORT_SYMBOL(__bb_init_func);
|
||||
|
||||
/*
|
||||
* This is defined (and referred to in profiling stub code) only by some GCC
|
||||
* versions in libgcov.
|
||||
*
|
||||
* Since SuSE backported the fix, we cannot handle it depending on GCC version.
|
||||
* So, unconditionally export it. But also give it a weak declaration, which
|
||||
* will be overridden by any other one.
|
||||
*/
|
||||
|
||||
extern void __gcov_init(void *) __attribute__((weak));
|
||||
EXPORT_SYMBOL(__gcov_init);
|
||||
|
||||
extern void __gcov_merge_add(void *) __attribute__((weak));
|
||||
EXPORT_SYMBOL(__gcov_merge_add);
|
||||
|
@ -7,12 +7,12 @@
|
||||
#include "linux/bootmem.h"
|
||||
#include "linux/initrd.h"
|
||||
#include "asm/types.h"
|
||||
#include "initrd.h"
|
||||
#include "init.h"
|
||||
#include "os.h"
|
||||
|
||||
/* Changed by uml_initrd_setup, which is a setup */
|
||||
static char *initrd __initdata = NULL;
|
||||
static int load_initrd(char *filename, void *buf, int size);
|
||||
|
||||
static int __init read_initrd(void)
|
||||
{
|
||||
@ -62,7 +62,7 @@ __uml_setup("initrd=", uml_initrd_setup,
|
||||
" name of the file containing the image.\n\n"
|
||||
);
|
||||
|
||||
int load_initrd(char *filename, void *buf, int size)
|
||||
static int load_initrd(char *filename, void *buf, int size)
|
||||
{
|
||||
int fd, n;
|
||||
|
||||
|
@ -258,6 +258,7 @@ void deactivate_fd(int fd, int irqnum)
|
||||
|
||||
ignore_sigio_fd(fd);
|
||||
}
|
||||
EXPORT_SYMBOL(deactivate_fd);
|
||||
|
||||
/*
|
||||
* Called just before shutdown in order to provide a clean exec
|
||||
|
@ -3,33 +3,11 @@
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include "linux/module.h"
|
||||
#include "linux/syscalls.h"
|
||||
#include "asm/tlbflush.h"
|
||||
#include "asm/uaccess.h"
|
||||
#include "as-layout.h"
|
||||
#include "kern_util.h"
|
||||
#include "mem_user.h"
|
||||
#include <linux/module.h>
|
||||
#include "os.h"
|
||||
|
||||
EXPORT_SYMBOL(uml_physmem);
|
||||
EXPORT_SYMBOL(set_signals);
|
||||
EXPORT_SYMBOL(get_signals);
|
||||
EXPORT_SYMBOL(kernel_thread);
|
||||
EXPORT_SYMBOL(sys_waitpid);
|
||||
EXPORT_SYMBOL(flush_tlb_range);
|
||||
|
||||
EXPORT_SYMBOL(high_physmem);
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
EXPORT_SYMBOL(handle_page_fault);
|
||||
EXPORT_SYMBOL(find_iomem);
|
||||
|
||||
EXPORT_SYMBOL(strnlen_user);
|
||||
EXPORT_SYMBOL(strncpy_from_user);
|
||||
EXPORT_SYMBOL(copy_to_user);
|
||||
EXPORT_SYMBOL(copy_from_user);
|
||||
EXPORT_SYMBOL(clear_user);
|
||||
EXPORT_SYMBOL(uml_strdup);
|
||||
|
||||
EXPORT_SYMBOL(os_stat_fd);
|
||||
EXPORT_SYMBOL(os_stat_file);
|
||||
@ -57,24 +35,10 @@ EXPORT_SYMBOL(os_connect_socket);
|
||||
EXPORT_SYMBOL(os_accept_connection);
|
||||
EXPORT_SYMBOL(os_rcv_fd);
|
||||
EXPORT_SYMBOL(run_helper);
|
||||
EXPORT_SYMBOL(start_thread);
|
||||
EXPORT_SYMBOL(os_major);
|
||||
EXPORT_SYMBOL(os_minor);
|
||||
EXPORT_SYMBOL(os_makedev);
|
||||
|
||||
EXPORT_SYMBOL(add_sigio_fd);
|
||||
EXPORT_SYMBOL(ignore_sigio_fd);
|
||||
EXPORT_SYMBOL(deactivate_fd);
|
||||
EXPORT_SYMBOL(sigio_broken);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
/* required for SMP */
|
||||
|
||||
extern void __write_lock_failed(rwlock_t *rw);
|
||||
EXPORT_SYMBOL(__write_lock_failed);
|
||||
|
||||
extern void __read_lock_failed(rwlock_t *rw);
|
||||
EXPORT_SYMBOL(__read_lock_failed);
|
||||
|
||||
#endif
|
||||
|
@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/mm.h>
|
||||
@ -20,6 +21,7 @@
|
||||
|
||||
/* allocated in paging_init, zeroed in mem_init, and unchanged thereafter */
|
||||
unsigned long *empty_zero_page = NULL;
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
/* allocated in paging_init and unchanged thereafter */
|
||||
static unsigned long *empty_bad_page = NULL;
|
||||
|
||||
|
@ -3,20 +3,22 @@
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include "linux/bootmem.h"
|
||||
#include "linux/mm.h"
|
||||
#include "linux/pfn.h"
|
||||
#include "asm/page.h"
|
||||
#include "as-layout.h"
|
||||
#include "init.h"
|
||||
#include "kern.h"
|
||||
#include "mem_user.h"
|
||||
#include "os.h"
|
||||
#include <linux/module.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/pfn.h>
|
||||
#include <asm/page.h>
|
||||
#include <as-layout.h>
|
||||
#include <init.h>
|
||||
#include <kern.h>
|
||||
#include <mem_user.h>
|
||||
#include <os.h>
|
||||
|
||||
static int physmem_fd = -1;
|
||||
|
||||
/* Changed during early boot */
|
||||
unsigned long high_physmem;
|
||||
EXPORT_SYMBOL(high_physmem);
|
||||
|
||||
extern unsigned long long physmem_size;
|
||||
|
||||
@ -184,6 +186,7 @@ unsigned long find_iomem(char *driver, unsigned long *len_out)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(find_iomem);
|
||||
|
||||
static int setup_iomem(void)
|
||||
{
|
||||
|
@ -20,12 +20,12 @@
|
||||
#include <linux/threads.h>
|
||||
#include <asm/current.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include "as-layout.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "skas.h"
|
||||
#include "tlb.h"
|
||||
|
||||
/*
|
||||
* This is a per-cpu array. A processor only modifies its entry and it only
|
||||
@ -78,6 +78,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
|
||||
¤t->thread.regs, 0, NULL, NULL);
|
||||
return pid;
|
||||
}
|
||||
EXPORT_SYMBOL(kernel_thread);
|
||||
|
||||
static inline void set_current(struct task_struct *task)
|
||||
{
|
||||
@ -286,6 +287,7 @@ char *uml_strdup(const char *string)
|
||||
{
|
||||
return kstrdup(string, GFP_KERNEL);
|
||||
}
|
||||
EXPORT_SYMBOL(uml_strdup);
|
||||
|
||||
int copy_to_user_proc(void __user *to, void *from, int size)
|
||||
{
|
||||
|
@ -11,7 +11,6 @@
|
||||
#include <asm/unistd.h>
|
||||
#include "frame_kern.h"
|
||||
#include "kern_util.h"
|
||||
#include <sysdep/sigcontext.h>
|
||||
|
||||
EXPORT_SYMBOL(block_signals);
|
||||
EXPORT_SYMBOL(unblock_signals);
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include <asm/unistd.h>
|
||||
#include <sys/time.h>
|
||||
#include "as-layout.h"
|
||||
#include "kern_constants.h"
|
||||
#include "ptrace_user.h"
|
||||
#include "stub-data.h"
|
||||
#include "sysdep/stub.h"
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/current.h>
|
||||
#include <asm/page.h>
|
||||
@ -149,6 +150,7 @@ int copy_from_user(void *to, const void __user *from, int n)
|
||||
buffer_op((unsigned long) from, n, 0, copy_chunk_from_user, &to):
|
||||
n;
|
||||
}
|
||||
EXPORT_SYMBOL(copy_from_user);
|
||||
|
||||
static int copy_chunk_to_user(unsigned long to, int len, void *arg)
|
||||
{
|
||||
@ -170,6 +172,7 @@ int copy_to_user(void __user *to, const void *from, int n)
|
||||
buffer_op((unsigned long) to, n, 1, copy_chunk_to_user, &from) :
|
||||
n;
|
||||
}
|
||||
EXPORT_SYMBOL(copy_to_user);
|
||||
|
||||
static int strncpy_chunk_from_user(unsigned long from, int len, void *arg)
|
||||
{
|
||||
@ -204,6 +207,7 @@ int strncpy_from_user(char *dst, const char __user *src, int count)
|
||||
return -EFAULT;
|
||||
return strnlen(dst, count);
|
||||
}
|
||||
EXPORT_SYMBOL(strncpy_from_user);
|
||||
|
||||
static int clear_chunk(unsigned long addr, int len, void *unused)
|
||||
{
|
||||
@ -226,6 +230,7 @@ int clear_user(void __user *mem, int len)
|
||||
return access_ok(VERIFY_WRITE, mem, len) ?
|
||||
buffer_op((unsigned long) mem, len, 1, clear_chunk, NULL) : len;
|
||||
}
|
||||
EXPORT_SYMBOL(clear_user);
|
||||
|
||||
static int strnlen_chunk(unsigned long str, int len, void *arg)
|
||||
{
|
||||
@ -251,3 +256,4 @@ int strnlen_user(const void __user *str, int len)
|
||||
return count + 1;
|
||||
return -EFAULT;
|
||||
}
|
||||
EXPORT_SYMBOL(strnlen_user);
|
||||
|
@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/tlbflush.h>
|
||||
@ -11,7 +12,6 @@
|
||||
#include "mem_user.h"
|
||||
#include "os.h"
|
||||
#include "skas.h"
|
||||
#include "tlb.h"
|
||||
|
||||
struct host_vm_change {
|
||||
struct host_vm_op {
|
||||
@ -287,7 +287,7 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr,
|
||||
}
|
||||
}
|
||||
|
||||
int flush_tlb_kernel_range_common(unsigned long start, unsigned long end)
|
||||
static int flush_tlb_kernel_range_common(unsigned long start, unsigned long end)
|
||||
{
|
||||
struct mm_struct *mm;
|
||||
pgd_t *pgd;
|
||||
@ -499,6 +499,7 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
||||
flush_tlb_kernel_range_common(start, end);
|
||||
else fix_range(vma->vm_mm, start, end, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_tlb_range);
|
||||
|
||||
void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
|
||||
unsigned long end)
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/current.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/tlbflush.h>
|
||||
@ -14,7 +15,6 @@
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "skas.h"
|
||||
#include "sysdep/sigcontext.h"
|
||||
|
||||
/*
|
||||
* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by
|
||||
@ -112,6 +112,7 @@ out_of_memory:
|
||||
pagefault_out_of_memory();
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(handle_page_fault);
|
||||
|
||||
static void show_segv_info(struct uml_pt_regs *regs)
|
||||
{
|
||||
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
|
||||
* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
/*
|
||||
* These are here rather than tt/uaccess.c because skas mode needs them in
|
||||
* order to do SIGBUS recovery when a tmpfs mount runs out of room.
|
||||
*/
|
||||
|
||||
#include <linux/string.h>
|
||||
#include "os.h"
|
||||
|
||||
static void __do_copy(void *to, const void *from, int n)
|
||||
{
|
||||
memcpy(to, from, n);
|
||||
}
|
||||
|
||||
|
||||
int __do_copy_to_user(void *to, const void *from, int n,
|
||||
void **fault_addr, jmp_buf **fault_catcher)
|
||||
{
|
||||
unsigned long fault;
|
||||
int faulted;
|
||||
|
||||
fault = __do_user_copy(to, from, n, fault_addr, fault_catcher,
|
||||
__do_copy, &faulted);
|
||||
if (!faulted)
|
||||
return 0;
|
||||
else
|
||||
return n - (fault - (unsigned long) to);
|
||||
}
|
@ -102,6 +102,8 @@ const struct seq_operations cpuinfo_op = {
|
||||
|
||||
/* Set in linux_main */
|
||||
unsigned long uml_physmem;
|
||||
EXPORT_SYMBOL(uml_physmem);
|
||||
|
||||
unsigned long uml_reserved; /* Also modified in mem_init */
|
||||
unsigned long start_vm;
|
||||
unsigned long end_vm;
|
||||
|
@ -4,14 +4,14 @@
|
||||
#
|
||||
|
||||
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 uaccess.o \
|
||||
umid.o tls.o user_syms.o util.o drivers/ sys-$(SUBARCH)/ skas/
|
||||
registers.o sigio.o signal.o start_up.o time.o tty.o \
|
||||
umid.o user_syms.o util.o drivers/ skas/
|
||||
|
||||
obj-$(CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA) += elf_aux.o
|
||||
|
||||
USER_OBJS := $(user-objs-y) aio.o elf_aux.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 tls.o uaccess.o umid.o util.o
|
||||
tty.o umid.o util.o
|
||||
|
||||
CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
|
||||
|
||||
|
@ -11,10 +11,8 @@
|
||||
#include <asm/unistd.h>
|
||||
#include "aio.h"
|
||||
#include "init.h"
|
||||
#include "kern_constants.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "user.h"
|
||||
|
||||
struct aio_thread_req {
|
||||
enum aio_type type;
|
||||
|
@ -13,11 +13,9 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include "etap.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "net_user.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
#define MAX_PACKET ETH_MAX_PACKET
|
||||
|
||||
|
@ -13,11 +13,9 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/uio.h>
|
||||
#include "kern_constants.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "tuntap.h"
|
||||
#include "user.h"
|
||||
|
||||
static int tuntap_user_init(void *data, void *dev)
|
||||
{
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include "init.h"
|
||||
#include "elf_user.h"
|
||||
#include "mem_user.h"
|
||||
#include <kern_constants.h>
|
||||
|
||||
typedef Elf32_auxv_t elf_auxv_t;
|
||||
|
||||
|
@ -13,9 +13,7 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/un.h>
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "user.h"
|
||||
|
||||
static void copy_stat(struct uml_stat *dst, const struct stat64 *src)
|
||||
{
|
||||
|
@ -10,11 +10,9 @@
|
||||
#include <linux/limits.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include "kern_constants.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
||||
struct helper_data {
|
||||
void (*pre_exec)(void*);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user