diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-07-23 11:20:10 +0200 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-07-23 11:20:10 +0200 |
commit | 39fe5434cb9de5da40510028b17b96bc4eb312b3 (patch) | |
tree | 7a02a317b9ad57da51ca99887c119e779ccf3f13 /arch/um/os-Linux | |
parent | [JFFS2] Add declaration of jffs2_lzo_{init,exit} to compr.h (diff) | |
parent | Linux 2.6.23-rc1 (diff) | |
download | linux-39fe5434cb9de5da40510028b17b96bc4eb312b3.tar.xz linux-39fe5434cb9de5da40510028b17b96bc4eb312b3.zip |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/um/os-Linux')
-rw-r--r-- | arch/um/os-Linux/aio.c | 11 | ||||
-rw-r--r-- | arch/um/os-Linux/drivers/ethertap_user.c | 6 | ||||
-rw-r--r-- | arch/um/os-Linux/drivers/tuntap_user.c | 2 | ||||
-rw-r--r-- | arch/um/os-Linux/helper.c | 23 | ||||
-rw-r--r-- | arch/um/os-Linux/main.c | 4 | ||||
-rw-r--r-- | arch/um/os-Linux/sigio.c | 23 | ||||
-rw-r--r-- | arch/um/os-Linux/skas/process.c | 2 | ||||
-rw-r--r-- | arch/um/os-Linux/user_syms.c | 20 |
8 files changed, 44 insertions, 47 deletions
diff --git a/arch/um/os-Linux/aio.c b/arch/um/os-Linux/aio.c index 9bf944f6a1db..b126df4ea168 100644 --- a/arch/um/os-Linux/aio.c +++ b/arch/um/os-Linux/aio.c @@ -177,6 +177,7 @@ static int do_not_aio(struct aio_thread_req *req) static int aio_req_fd_r = -1; static int aio_req_fd_w = -1; static int aio_pid = -1; +static unsigned long aio_stack; static int not_aio_thread(void *arg) { @@ -212,7 +213,6 @@ static int not_aio_thread(void *arg) static int init_aio_24(void) { - unsigned long stack; int fds[2], err; err = os_pipe(fds, 1, 1); @@ -227,7 +227,7 @@ static int init_aio_24(void) goto out_close_pipe; err = run_helper_thread(not_aio_thread, NULL, - CLONE_FILES | CLONE_VM | SIGCHLD, &stack, 0); + CLONE_FILES | CLONE_VM | SIGCHLD, &aio_stack); if(err < 0) goto out_close_pipe; @@ -252,7 +252,6 @@ out: #define DEFAULT_24_AIO 0 static int init_aio_26(void) { - unsigned long stack; int err; if(io_setup(256, &ctx)){ @@ -263,7 +262,7 @@ static int init_aio_26(void) } err = run_helper_thread(aio_thread, NULL, - CLONE_FILES | CLONE_VM | SIGCHLD, &stack, 0); + CLONE_FILES | CLONE_VM | SIGCHLD, &aio_stack); if(err < 0) return err; @@ -365,8 +364,10 @@ __initcall(init_aio); static void exit_aio(void) { - if(aio_pid != -1) + if (aio_pid != -1) { os_kill_process(aio_pid, 1); + free_stack(aio_stack, 0); + } } __uml_exitcall(exit_aio); diff --git a/arch/um/os-Linux/drivers/ethertap_user.c b/arch/um/os-Linux/drivers/ethertap_user.c index acba30161287..61d3953c7ac9 100644 --- a/arch/um/os-Linux/drivers/ethertap_user.c +++ b/arch/um/os-Linux/drivers/ethertap_user.c @@ -54,7 +54,7 @@ static void etap_change(int op, unsigned char *addr, unsigned char *netmask, return; } - output = um_kmalloc(UM_KERN_PAGE_SIZE); + output = kmalloc(UM_KERN_PAGE_SIZE, UM_GFP_KERNEL); if(output == NULL) printk("etap_change : Failed to allocate output buffer\n"); read_output(fd, output, UM_KERN_PAGE_SIZE); @@ -117,7 +117,7 @@ static int etap_tramp(char *dev, char *gate, int control_me, pe_data.control_remote = control_remote; pe_data.control_me = control_me; pe_data.data_me = data_me; - pid = run_helper(etap_pre_exec, &pe_data, args, NULL); + pid = run_helper(etap_pre_exec, &pe_data, args); if(pid < 0) err = pid; @@ -166,7 +166,7 @@ static int etap_open(void *data) err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0], control_fds[1], data_fds[0], data_fds[1]); output_len = UM_KERN_PAGE_SIZE; - output = um_kmalloc(output_len); + output = kmalloc(output_len, UM_GFP_KERNEL); read_output(control_fds[0], output, output_len); if(output == NULL) diff --git a/arch/um/os-Linux/drivers/tuntap_user.c b/arch/um/os-Linux/drivers/tuntap_user.c index 11a9779dc9f1..f848b4ea9343 100644 --- a/arch/um/os-Linux/drivers/tuntap_user.c +++ b/arch/um/os-Linux/drivers/tuntap_user.c @@ -83,7 +83,7 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote, data.stdout = remote; data.close_me = me; - pid = run_helper(tuntap_pre_exec, &data, argv, NULL); + pid = run_helper(tuntap_pre_exec, &data, argv); if(pid < 0) return -pid; diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c index 97bed16bf4c7..d81af7b8587a 100644 --- a/arch/um/os-Linux/helper.c +++ b/arch/um/os-Linux/helper.c @@ -44,17 +44,13 @@ static int helper_child(void *arg) /* Returns either the pid of the child process we run or -E* on failure. * XXX The alloc_stack here breaks if this is called in the tracing thread, so * we need to receive a preallocated stack (a local buffer is ok). */ -int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, - unsigned long *stack_out) +int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv) { struct helper_data data; unsigned long stack, sp; int pid, fds[2], ret, n; - if ((stack_out != NULL) && (*stack_out != 0)) - stack = *stack_out; - else - stack = alloc_stack(0, __cant_sleep()); + stack = alloc_stack(0, __cant_sleep()); if (stack == 0) return -ENOMEM; @@ -76,8 +72,8 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, data.pre_data = pre_data; data.argv = argv; data.fd = fds[1]; - data.buf = __cant_sleep() ? um_kmalloc_atomic(PATH_MAX) : - um_kmalloc(PATH_MAX); + data.buf = __cant_sleep() ? kmalloc(PATH_MAX, UM_GFP_ATOMIC) : + kmalloc(PATH_MAX, UM_GFP_KERNEL); pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); if (pid < 0) { ret = -errno; @@ -113,22 +109,21 @@ out_close: close(fds[1]); close(fds[0]); out_free: - if ((stack_out == NULL) || (*stack_out == 0)) - free_stack(stack, 0); + free_stack(stack, 0); return ret; } int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, - unsigned long *stack_out, int stack_order) + unsigned long *stack_out) { unsigned long stack, sp; int pid, status, err; - stack = alloc_stack(stack_order, __cant_sleep()); + stack = alloc_stack(0, __cant_sleep()); if (stack == 0) return -ENOMEM; - sp = stack + (UM_KERN_PAGE_SIZE << stack_order) - sizeof(void *); + sp = stack + UM_KERN_PAGE_SIZE - sizeof(void *); pid = clone(proc, (void *) sp, flags | SIGCHLD, arg); if (pid < 0) { err = -errno; @@ -147,7 +142,7 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) printk("run_helper_thread - thread returned status " "0x%x\n", status); - free_stack(stack, stack_order); + free_stack(stack, 0); } else *stack_out = stack; return pid; diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c index fb510d40480c..e85f4995a011 100644 --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c @@ -235,8 +235,8 @@ void *__wrap_malloc(int size) return __real_malloc(size); else if(size <= UM_KERN_PAGE_SIZE) /* finding contiguous pages can be hard*/ - ret = um_kmalloc(size); - else ret = um_vmalloc(size); + ret = kmalloc(size, UM_GFP_KERNEL); + else ret = vmalloc(size); /* glibc people insist that if malloc fails, errno should be * set by malloc as well. So we do. diff --git a/arch/um/os-Linux/sigio.c b/arch/um/os-Linux/sigio.c index 8d4e0c6b8c92..dc03e9cccb63 100644 --- a/arch/um/os-Linux/sigio.c +++ b/arch/um/os-Linux/sigio.c @@ -26,6 +26,7 @@ * exitcall. */ static int write_sigio_pid = -1; +static unsigned long write_sigio_stack; /* These arrays are initialized before the sigio thread is started, and * the descriptors closed after it is killed. So, it can't see them change. @@ -104,7 +105,7 @@ static int need_poll(struct pollfds *polls, int n) if(n <= polls->size) return 0; - new = um_kmalloc_atomic(n * sizeof(struct pollfd)); + new = kmalloc(n * sizeof(struct pollfd), UM_GFP_ATOMIC); if(new == NULL){ printk("need_poll : failed to allocate new pollfds\n"); return -ENOMEM; @@ -144,8 +145,10 @@ static void update_thread(void) return; fail: /* Critical section start */ - if(write_sigio_pid != -1) + if (write_sigio_pid != -1) { os_kill_process(write_sigio_pid, 1); + free_stack(write_sigio_stack, 0); + } write_sigio_pid = -1; close(sigio_private[0]); close(sigio_private[1]); @@ -230,7 +233,7 @@ static struct pollfd *setup_initial_poll(int fd) { struct pollfd *p; - p = um_kmalloc(sizeof(struct pollfd)); + p = kmalloc(sizeof(struct pollfd), UM_GFP_KERNEL); if (p == NULL) { printk("setup_initial_poll : failed to allocate poll\n"); return NULL; @@ -243,7 +246,6 @@ static struct pollfd *setup_initial_poll(int fd) static void write_sigio_workaround(void) { - unsigned long stack; struct pollfd *p; int err; int l_write_sigio_fds[2]; @@ -293,7 +295,8 @@ static void write_sigio_workaround(void) memcpy(sigio_private, l_sigio_private, sizeof(l_sigio_private)); write_sigio_pid = run_helper_thread(write_sigio_thread, NULL, - CLONE_FILES | CLONE_VM, &stack, 0); + CLONE_FILES | CLONE_VM, + &write_sigio_stack); if (write_sigio_pid < 0) goto out_clear; @@ -356,10 +359,12 @@ out: static void sigio_cleanup(void) { - if(write_sigio_pid != -1){ - os_kill_process(write_sigio_pid, 1); - write_sigio_pid = -1; - } + if (write_sigio_pid == -1) + return; + + os_kill_process(write_sigio_pid, 1); + free_stack(write_sigio_stack, 0); + write_sigio_pid = -1; } __uml_exitcall(sigio_cleanup); diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index 46c00cc429bc..ba9af8d62055 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c @@ -41,7 +41,7 @@ int is_skas_winch(int pid, int fd, void *data) if(pid != os_getpgrp()) return(0); - register_winch_irq(-1, fd, -1, data); + register_winch_irq(-1, fd, -1, data, 0); return(1); } diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c index 3f33165ada68..419b2d5ff6de 100644 --- a/arch/um/os-Linux/user_syms.c +++ b/arch/um/os-Linux/user_syms.c @@ -5,7 +5,8 @@ * so I *must* declare good prototypes for them and then EXPORT them. * The kernel code uses the macro defined by include/linux/string.h, * so I undef macros; the userspace code does not include that and I - * add an EXPORT for the glibc one.*/ + * add an EXPORT for the glibc one. + */ #undef strlen #undef strstr @@ -61,12 +62,18 @@ EXPORT_SYMBOL_PROTO(dup2); EXPORT_SYMBOL_PROTO(__xstat); EXPORT_SYMBOL_PROTO(__lxstat); EXPORT_SYMBOL_PROTO(__lxstat64); +EXPORT_SYMBOL_PROTO(__fxstat64); EXPORT_SYMBOL_PROTO(lseek); EXPORT_SYMBOL_PROTO(lseek64); EXPORT_SYMBOL_PROTO(chown); +EXPORT_SYMBOL_PROTO(fchown); EXPORT_SYMBOL_PROTO(truncate); +EXPORT_SYMBOL_PROTO(ftruncate64); EXPORT_SYMBOL_PROTO(utime); +EXPORT_SYMBOL_PROTO(utimes); +EXPORT_SYMBOL_PROTO(futimes); EXPORT_SYMBOL_PROTO(chmod); +EXPORT_SYMBOL_PROTO(fchmod); EXPORT_SYMBOL_PROTO(rename); EXPORT_SYMBOL_PROTO(__xmknod); @@ -102,14 +109,3 @@ EXPORT_SYMBOL(__stack_smash_handler); extern long __guard __attribute__((weak)); EXPORT_SYMBOL(__guard); - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-file-style: "linux" - * End: - */ |