From d79a580936396bbcd2f4fae2c6215f9cf81e3c0d Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:43:52 -0800 Subject: [PATCH] uml: console locking fixes Clean up the console driver locking. There are various problems here, including sleeping under a spinlock and spinlock recursion, some of which are fixed here. This patch deals with the locking involved with opens and closes. The problem is that an mconsole request to change a console's configuration can race with an open. Changing a configuration should only be done when a console isn't opened. Also, an open must be looking at a stable configuration. In addition, a get configuration request must observe the same locking since it must also see a stable configuration. With the old locking, it was possible for this to hang indefinitely in some cases because open would block for a long time waiting for a connection from the host while holding the lock needed by the mconsole request. As explained in the long comment, this is fixed by adding a spinlock for the use count and configuration and a mutex for the actual open and close. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/line.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/line.h b/arch/um/include/line.h index 5f232ae89fb..b79643eeee0 100644 --- a/arch/um/include/line.h +++ b/arch/um/include/line.h @@ -11,6 +11,7 @@ #include "linux/tty.h" #include "linux/interrupt.h" #include "linux/spinlock.h" +#include "linux/mutex.h" #include "chan_user.h" #include "mconsole_kern.h" @@ -32,15 +33,17 @@ struct line_driver { struct line { struct tty_struct *tty; + spinlock_t count_lock; + int valid; + + struct mutex open_mutex; char *init_str; int init_pri; struct list_head chan_list; - int valid; - int count; - int throttled; + /*This lock is actually, mostly, local to*/ spinlock_t lock; - + int throttled; /* Yes, this is a real circular buffer. * XXX: And this should become a struct kfifo! * @@ -57,7 +60,8 @@ struct line { }; #define LINE_INIT(str, d) \ - { .init_str = str, \ + { .count_lock = SPIN_LOCK_UNLOCKED, \ + .init_str = str, \ .init_pri = INIT_STATIC, \ .valid = 1, \ .lock = SPIN_LOCK_UNLOCKED, \ -- cgit v1.2.3 From f28169d2000177e8b72ccc6d72887be779dceca8 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:43:53 -0800 Subject: [PATCH] uml: return hotplug errors to host I noticed that errors happening while hotplugging devices from the host were never returned back to the mconsole client. In some cases, success was returned instead of even an information-free error. This patch cleans that up by having the low-level configuration code pass back an error string along with an error code. At the top level, which knows whether it is early boot time or responding to an mconsole request, the string is printk'd or returned to the mconsole client. There are also whitespace and trivial code cleanups in the surrounding code. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/chan_kern.h | 2 +- arch/um/include/line.h | 8 +++++--- arch/um/include/mconsole_kern.h | 15 ++------------- 3 files changed, 8 insertions(+), 17 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/chan_kern.h b/arch/um/include/chan_kern.h index 9003a343e14..2d9aa7ef4c2 100644 --- a/arch/um/include/chan_kern.h +++ b/arch/um/include/chan_kern.h @@ -30,7 +30,7 @@ struct chan { extern void chan_interrupt(struct list_head *chans, struct delayed_work *task, struct tty_struct *tty, int irq); extern int parse_chan_pair(char *str, struct line *line, int device, - const struct chan_opts *opts); + const struct chan_opts *opts, char **error_out); extern int open_chan(struct list_head *chans); extern int write_chan(struct list_head *chans, const char *buf, int len, int write_irq); diff --git a/arch/um/include/line.h b/arch/um/include/line.h index b79643eeee0..a2486b4cc9f 100644 --- a/arch/um/include/line.h +++ b/arch/um/include/line.h @@ -76,7 +76,7 @@ struct lines { extern void line_close(struct tty_struct *tty, struct file * filp); extern int line_open(struct line *lines, struct tty_struct *tty); extern int line_setup(struct line *lines, unsigned int sizeof_lines, - char *init); + char *init, char **error_out); extern int line_write(struct tty_struct *tty, const unsigned char *buf, int len); extern void line_put_char(struct tty_struct *tty, unsigned char ch); @@ -102,9 +102,11 @@ extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); extern void close_lines(struct line *lines, int nlines); extern int line_config(struct line *lines, unsigned int sizeof_lines, - char *str, const struct chan_opts *opts); + char *str, const struct chan_opts *opts, + char **error_out); extern int line_id(char **str, int *start_out, int *end_out); -extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n); +extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n, + char **error_out); extern int line_get_config(char *dev, struct line *lines, unsigned int sizeof_lines, char *str, int size, char **error_out); diff --git a/arch/um/include/mconsole_kern.h b/arch/um/include/mconsole_kern.h index 1ea6d928e1c..73030e52b2c 100644 --- a/arch/um/include/mconsole_kern.h +++ b/arch/um/include/mconsole_kern.h @@ -18,10 +18,10 @@ struct mconsole_entry { struct mc_device { struct list_head list; char *name; - int (*config)(char *); + int (*config)(char *, char **); int (*get_config)(char *, char *, int, char **); int (*id)(char **, int *, int *); - int (*remove)(int); + int (*remove)(int, char **); }; #define CONFIG_CHUNK(str, size, current, chunk, end) \ @@ -50,14 +50,3 @@ static inline void mconsole_register_dev(struct mc_device *new) #endif #endif - -/* - * 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: - */ -- cgit v1.2.3 From 894be2a485b75bce9a4d45d3e431aafd4c89f1ea Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:43:54 -0800 Subject: [PATCH] uml: console whitespace and comment tidying Some comment and whitespace cleanups in the console and mconsole code. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/mconsole_kern.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/um/include') diff --git a/arch/um/include/mconsole_kern.h b/arch/um/include/mconsole_kern.h index 73030e52b2c..d2fe07e7895 100644 --- a/arch/um/include/mconsole_kern.h +++ b/arch/um/include/mconsole_kern.h @@ -20,7 +20,7 @@ struct mc_device { char *name; int (*config)(char *, char **); int (*get_config)(char *, char *, int, char **); - int (*id)(char **, int *, int *); + int (*id)(char **, int *, int *); int (*remove)(int, char **); }; -- cgit v1.2.3 From d3b7f69de2b92e4b6057d81e6c52f629a8663368 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:43:56 -0800 Subject: [PATCH] uml: add locking to network transport registration The registration of host network transports needed some locking. The transport list itself is locked, but calls to the registration routines are not. This is compensated for by checking that a transport structure is not yet on any list. I also took the opportunity to const all fields in the transport structure except the list, which obviously can be modified. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/net_kern.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/net_kern.h b/arch/um/include/net_kern.h index 218f8b47fdc..92f76d82a6e 100644 --- a/arch/um/include/net_kern.h +++ b/arch/um/include/net_kern.h @@ -52,12 +52,12 @@ struct net_kern_info { struct transport { struct list_head list; - char *name; - int (*setup)(char *, char **, void *); + const char *name; + int (* const setup)(char *, char **, void *); const struct net_user_info *user; const struct net_kern_info *kern; - int private_size; - int setup_size; + const int private_size; + const int setup_size; }; extern struct net_device *ether_init(int); -- cgit v1.2.3 From 4ea21cd9173a0ffa75dc74cc46d08dfc45654f29 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:43:56 -0800 Subject: [PATCH] uml: network driver whitespace and style fixes Some whitespace and coding style cleanups in the network driver code. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Acked-by: Jeff Garzik Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/net_kern.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/net_kern.h b/arch/um/include/net_kern.h index 92f76d82a6e..125ab42df18 100644 --- a/arch/um/include/net_kern.h +++ b/arch/um/include/net_kern.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) * Licensed under the GPL */ @@ -36,7 +36,7 @@ struct uml_net_private { void (*remove)(void *); int (*read)(int, struct sk_buff **skb, struct uml_net_private *); int (*write)(int, struct sk_buff **skb, struct uml_net_private *); - + void (*add_address)(unsigned char *, unsigned char *, void *); void (*delete_address)(unsigned char *, unsigned char *, void *); int (*set_mtu)(int mtu, void *); @@ -63,7 +63,7 @@ struct transport { extern struct net_device *ether_init(int); extern unsigned short ether_protocol(struct sk_buff *); extern struct sk_buff *ether_adjust_skb(struct sk_buff *skb, int extra); -extern int tap_setup_common(char *str, char *type, char **dev_name, +extern int tap_setup_common(char *str, char *type, char **dev_name, char **mac_out, char **gate_addr); extern void register_transport(struct transport *new); extern unsigned short eth_protocol(struct sk_buff *skb); -- cgit v1.2.3 From a52f362f864f56238c9036f5c56f763a80e2ddd5 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:06 -0800 Subject: [PATCH] uml: mostly const a structure The chan_opts structure is mostly const, and needs no locking. Comment the lack of locking on the one field that can change. Make all the other fields const. It turned out that console_open_chan didn't use its chan_opts argument, so that is deleted from the function and its callers. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/chan_kern.h | 3 +-- arch/um/include/chan_user.h | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/chan_kern.h b/arch/um/include/chan_kern.h index 2d9aa7ef4c2..c4b41bb1035 100644 --- a/arch/um/include/chan_kern.h +++ b/arch/um/include/chan_kern.h @@ -36,8 +36,7 @@ extern int write_chan(struct list_head *chans, const char *buf, int len, int write_irq); extern int console_write_chan(struct list_head *chans, const char *buf, int len); -extern int console_open_chan(struct line *line, struct console *co, - const struct chan_opts *opts); +extern int console_open_chan(struct line *line, struct console *co); extern void deactivate_chan(struct list_head *chans, int irq); extern void reactivate_chan(struct list_head *chans, int irq); extern void chan_enable_winch(struct list_head *chans, struct tty_struct *tty); diff --git a/arch/um/include/chan_user.h b/arch/um/include/chan_user.h index a795547a1db..ad671eb9ede 100644 --- a/arch/um/include/chan_user.h +++ b/arch/um/include/chan_user.h @@ -9,11 +9,11 @@ #include "init.h" struct chan_opts { - void (*announce)(char *dev_name, int dev); + void (*const announce)(char *dev_name, int dev); char *xterm_title; - int raw; - unsigned long tramp_stack; - int in_kernel; + const int raw; + const unsigned long tramp_stack; + const int in_kernel; }; enum chan_init_pri { INIT_STATIC, INIT_ALL, INIT_ONE }; -- cgit v1.2.3 From b4ac91a0eac36f347a509afda07e4305e931de61 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:07 -0800 Subject: [PATCH] uml: chan_user.h formatting fixes Whitespace fixes and emacs comment removal. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/chan_user.h | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/chan_user.h b/arch/um/include/chan_user.h index ad671eb9ede..38f16d812e7 100644 --- a/arch/um/include/chan_user.h +++ b/arch/um/include/chan_user.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) * Licensed under the GPL */ @@ -54,14 +54,3 @@ __uml_help(fn, prefix "[0-9]*=\n" \ ); #endif - -/* - * 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: - */ -- cgit v1.2.3 From d5c9ffc6c6d15d4f655236e26942a21ad61fe3ad Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:08 -0800 Subject: [PATCH] uml: console locking commentary and code cleanup Remove the last vestiges of devfs from console registration. Change the name of the function, plus remove a couple of unused fields from the line_driver structure. struct lines is no longer needed, all traces of it are gone. The only way that I can see to mark a structure as being almost-const is to individually const the fields. This is the case for the line_driver structure, which has only one modifiable field - a list_head in a sub-structure. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/line.h | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/line.h b/arch/um/include/line.h index a2486b4cc9f..3477a858eaa 100644 --- a/arch/um/include/line.h +++ b/arch/um/include/line.h @@ -15,19 +15,18 @@ #include "chan_user.h" #include "mconsole_kern.h" +/* There's only one modifiable field in this - .mc.list */ struct line_driver { - char *name; - char *device_name; - short major; - short minor_start; - short type; - short subtype; - int read_irq; - char *read_irq_name; - int write_irq; - char *write_irq_name; - char *symlink_from; - char *symlink_to; + const char *name; + const char *device_name; + const short major; + const short minor_start; + const short type; + const short subtype; + const int read_irq; + const char *read_irq_name; + const int write_irq; + const char *write_irq_name; struct mc_device mc; }; @@ -67,12 +66,6 @@ struct line { .lock = SPIN_LOCK_UNLOCKED, \ .driver = d } -struct lines { - int num; -}; - -#define LINES_INIT(n) { .num = n } - extern void line_close(struct tty_struct *tty, struct file * filp); extern int line_open(struct line *lines, struct tty_struct *tty); extern int line_setup(struct line *lines, unsigned int sizeof_lines, @@ -94,10 +87,9 @@ extern char *add_xterm_umid(char *base); extern int line_setup_irq(int fd, int input, int output, struct line *line, void *data); extern void line_close_chan(struct line *line); -extern struct tty_driver * line_register_devfs(struct lines *set, - struct line_driver *line_driver, - const struct tty_operations *driver, - struct line *lines, int nlines); +extern struct tty_driver *register_lines(struct line_driver *line_driver, + const struct tty_operations *driver, + struct line *lines, int nlines); extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); extern void close_lines(struct line *lines, int nlines); -- cgit v1.2.3 From c6256c68248cfccbeec07ced442ffe395fa393e8 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:08 -0800 Subject: [PATCH] uml: fix previous console locking Eliminate the open_mutex after complaints from Blaisorblade. It turns out that the tty count provides the information needed to tell whether we are the first opener or last closer. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/line.h | 1 - 1 file changed, 1 deletion(-) (limited to 'arch/um/include') diff --git a/arch/um/include/line.h b/arch/um/include/line.h index 3477a858eaa..1223f2c844b 100644 --- a/arch/um/include/line.h +++ b/arch/um/include/line.h @@ -35,7 +35,6 @@ struct line { spinlock_t count_lock; int valid; - struct mutex open_mutex; char *init_str; int init_pri; struct list_head chan_list; -- cgit v1.2.3 From 6d1b18b16fc917e5c9af568a53c7e37923821d70 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:13 -0800 Subject: [PATCH] uml: remove unused variable and function syscall_index and next_syscall_index turn out not to be used. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/kern_util.h | 1 - 1 file changed, 1 deletion(-) (limited to 'arch/um/include') diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index cec9fcc57bf..3368ef97437 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h @@ -61,7 +61,6 @@ extern int set_signals(int enable); extern void force_sigbus(void); extern int pid_to_processor_id(int pid); extern void deliver_signals(void *t); -extern int next_syscall_index(int max); extern int next_trap_index(int max); extern void default_idle(void); extern void finish_fork(void); -- cgit v1.2.3 From 27aa6ef3c0e8220b27b0a8d2d0bae7cd0a6d2f78 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:14 -0800 Subject: [PATCH] uml: make signal handlers static A bunch of the signal handlers can be made static. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/kern_util.h | 4 ---- 1 file changed, 4 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index 3368ef97437..173af029d12 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h @@ -87,7 +87,6 @@ extern void timer_irq(union uml_pt_regs *regs); extern void unprotect_stack(unsigned long stack); extern void do_uml_exitcalls(void); extern int attach_debugger(int idle_pid, int pid, int stop); -extern void bad_segv(struct faultinfo fi, unsigned long ip); extern int config_gdb(char *str); extern int remove_gdb(void); extern char *uml_strdup(char *string); @@ -103,8 +102,6 @@ extern int clear_user_proc(void *buf, int size); extern int copy_to_user_proc(void *to, void *from, int size); extern int copy_from_user_proc(void *to, void *from, int size); extern int strlen_user_proc(char *str); -extern void bus_handler(int sig, union uml_pt_regs *regs); -extern void winch(int sig, union uml_pt_regs *regs); extern long execute_syscall(void *r); extern int smp_sigio_handler(void); extern void *get_current(void); @@ -119,7 +116,6 @@ extern void time_init_kern(void); /* Are we disallowed to sleep? Used to choose between GFP_KERNEL and GFP_ATOMIC. */ extern int __cant_sleep(void); -extern void segv_handler(int sig, union uml_pt_regs *regs); extern void sigio_handler(int sig, union uml_pt_regs *regs); #endif -- cgit v1.2.3 From 6bf79482f3288e19697d08c456b0bd6b1755d467 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:18 -0800 Subject: [PATCH] uml: locking comments in memory and tempfile code Locking comments and emacs comment removal in the low-level memory and temp file code. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/tempfile.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/tempfile.h b/arch/um/include/tempfile.h index e36d9e0f510..d441eac936b 100644 --- a/arch/um/include/tempfile.h +++ b/arch/um/include/tempfile.h @@ -9,13 +9,3 @@ extern int make_tempfile(const char *template, char **tempname, int do_unlink); #endif -/* - * 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: - */ -- cgit v1.2.3 From 73c8f4441f07dd3b9d198ec0e97ce83138a6224c Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:20 -0800 Subject: [PATCH] uml: libc-dependent code should call libc directly We shouldn't be using the os wrappers from os code - we can use libc directly. This patch replaces wrapper calls with libc calls. It turns out that os_sigio_async had only one caller, which was in startup.c, so that function is moved there and its name changed. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/os.h | 1 - 1 file changed, 1 deletion(-) (limited to 'arch/um/include') diff --git a/arch/um/include/os.h b/arch/um/include/os.h index 13a86bd383d..8f602667296 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h @@ -137,7 +137,6 @@ extern int os_new_tty_pgrp(int fd, int pid); extern int os_get_ifname(int fd, char *namebuf); extern int os_set_slip(int fd); extern int os_set_owner(int fd, int pid); -extern int os_sigio_async(int master, int slave); extern int os_mode_fd(int fd, int mode); extern int os_seek_file(int fd, __u64 offset); -- cgit v1.2.3 From 4cffb7fa69349d48d900d98766dc9ad52d9c851e Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:24 -0800 Subject: [PATCH] uml: SIGIO formatting fixes Fix formatting in the sigio code. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/sigio.h | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/sigio.h b/arch/um/include/sigio.h index fe99ea163c2..434f1a9ae4b 100644 --- a/arch/um/include/sigio.h +++ b/arch/um/include/sigio.h @@ -12,14 +12,3 @@ extern void sigio_lock(void); extern void sigio_unlock(void); #endif - -/* - * 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: - */ -- cgit v1.2.3 From de5fe76e436d9e98f8af8005ff23a2e6066aea10 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:25 -0800 Subject: [PATCH] uml: umid tidying Add an error message when two umids are put on the command line. umid.h is kind of pointless since it only declares one thing, and that is already declared in os.h. Commented the lack of locking of some data in os-Linux/umid.h. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/umid.h | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 arch/um/include/umid.h (limited to 'arch/um/include') diff --git a/arch/um/include/umid.h b/arch/um/include/umid.h deleted file mode 100644 index 11373c851f1..00000000000 --- a/arch/um/include/umid.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2001 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __UMID_H__ -#define __UMID_H__ - -extern int umid_file_name(char *name, char *buf, int len); - -#endif - -/* - * 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: - */ -- cgit v1.2.3 From f355559cf78455ed6be103b020e4b800230c64eb Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Sat, 10 Feb 2007 01:44:29 -0800 Subject: [PATCH] uml: x86_64 thread fixes x86_64 needs some TLS fixes. What was missing was remembering the child thread id during clone and stuffing it into the child during each context switch. The %fs value is stored separately in the thread structure since the host controls what effect it has on the actual register file. The host also needs to store it in its own thread struct, so we need the value kept outside the register file. arch_prctl_skas was fixed to call PTRACE_ARCH_PRCTL appropriately. There is some saving and restoring of registers in the ARCH_SET_* cases so that the correct set of registers are changed on the host and restored to the process when it runs again. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/os.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'arch/um/include') diff --git a/arch/um/include/os.h b/arch/um/include/os.h index 8f602667296..8629bd19149 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h @@ -340,4 +340,6 @@ extern void maybe_sigio_broken(int fd, int read); extern void sig_handler_common_skas(int sig, void *sc_ptr); extern void user_signal(int sig, union uml_pt_regs *regs, int pid); +extern int os_arch_prctl(int pid, int code, unsigned long *addr); + #endif -- cgit v1.2.3 From 19bf7e7a414711dec0058556feda778105798f99 Mon Sep 17 00:00:00 2001 From: Alon Bar-Lev Date: Mon, 12 Feb 2007 00:54:23 -0800 Subject: [PATCH] Dynamic kernel command-line: um 1. Rename saved_command_line into boot_command_line. 2. Set command_line as __initdata. Signed-off-by: Alon Bar-Lev Cc: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/user_util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/um/include') diff --git a/arch/um/include/user_util.h b/arch/um/include/user_util.h index 06625fefef3..0f63003a2a3 100644 --- a/arch/um/include/user_util.h +++ b/arch/um/include/user_util.h @@ -38,7 +38,7 @@ extern unsigned long long highmem; extern char host_info[]; -extern char saved_command_line[]; +extern char __initdata boot_command_line[]; extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end; extern unsigned long _unprotected_end; -- cgit v1.2.3 From 7a3a06d0e158fc82a6bf13e18439285c7791d2b8 Mon Sep 17 00:00:00 2001 From: Alon Bar-Lev Date: Mon, 12 Feb 2007 00:54:26 -0800 Subject: [PATCH] Dynamic kernel command-line: fixups Remove in-source externs, linux/init.h is included in all cases. This is a fixups for "Dynamic kernel command-line" patch. It also includes some uml __init fixups so that we can __initdata also its command_line. Signed-off-by: Alon Bar-Lev Cc: Jeff Dike Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/um/include/user_util.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'arch/um/include') diff --git a/arch/um/include/user_util.h b/arch/um/include/user_util.h index 0f63003a2a3..023575f6734 100644 --- a/arch/um/include/user_util.h +++ b/arch/um/include/user_util.h @@ -38,8 +38,6 @@ extern unsigned long long highmem; extern char host_info[]; -extern char __initdata boot_command_line[]; - extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end; extern unsigned long _unprotected_end; extern unsigned long brk_start; -- cgit v1.2.3