diff options
author | Michal Marek <mmarek@suse.cz> | 2010-10-12 09:09:06 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-10-12 09:09:06 -0400 |
commit | 239060b93bb30a4ad55f1ecaa512464a035cc5ba (patch) | |
tree | 77f79810e57d4fc24356eca0cd6db463e8994128 /arch/um | |
parent | 1408b15b98635a13bad2e2a50b3c2ae2ccdf625b (diff) | |
parent | e9203c988234aa512bd45ca32b52e21c7bbfc414 (diff) |
Merge branch 'kbuild/rc-fixes' into kbuild/kconfig
We need to revert the temporary hack in 71ebc01, hence the merge.
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/Kconfig.common | 4 | ||||
-rw-r--r-- | arch/um/drivers/chan_kern.c | 8 | ||||
-rw-r--r-- | arch/um/drivers/hostaudio_kern.c | 16 | ||||
-rw-r--r-- | arch/um/drivers/net_kern.c | 10 | ||||
-rw-r--r-- | arch/um/drivers/ubd_kern.c | 7 | ||||
-rw-r--r-- | arch/um/include/asm/dma-mapping.h | 1 | ||||
-rw-r--r-- | arch/um/include/asm/pgtable-3level.h | 4 | ||||
-rw-r--r-- | arch/um/include/shared/os.h | 3 | ||||
-rw-r--r-- | arch/um/kernel/exec.c | 6 | ||||
-rw-r--r-- | arch/um/kernel/internal.h | 2 | ||||
-rw-r--r-- | arch/um/kernel/ksyms.c | 3 | ||||
-rw-r--r-- | arch/um/kernel/ptrace.c | 21 | ||||
-rw-r--r-- | arch/um/kernel/syscall.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/time.c | 16 | ||||
-rw-r--r-- | arch/um/os-Linux/file.c | 15 | ||||
-rw-r--r-- | arch/um/os-Linux/user_syms.c | 4 |
16 files changed, 68 insertions, 54 deletions
diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index e90ca8609e31..049d048b070d 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common | |||
@@ -53,10 +53,6 @@ config GENERIC_BUG | |||
53 | default y | 53 | default y |
54 | depends on BUG | 54 | depends on BUG |
55 | 55 | ||
56 | config GENERIC_TIME | ||
57 | bool | ||
58 | default y | ||
59 | |||
60 | config GENERIC_CLOCKEVENTS | 56 | config GENERIC_CLOCKEVENTS |
61 | bool | 57 | bool |
62 | default y | 58 | default y |
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index 6e51424745ab..25e1965df7ce 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c | |||
@@ -210,9 +210,9 @@ void free_irqs(void) | |||
210 | list_for_each(ele, &list) { | 210 | list_for_each(ele, &list) { |
211 | chan = list_entry(ele, struct chan, free_list); | 211 | chan = list_entry(ele, struct chan, free_list); |
212 | 212 | ||
213 | if (chan->input) | 213 | if (chan->input && chan->enabled) |
214 | free_irq(chan->line->driver->read_irq, chan); | 214 | free_irq(chan->line->driver->read_irq, chan); |
215 | if (chan->output) | 215 | if (chan->output && chan->enabled) |
216 | free_irq(chan->line->driver->write_irq, chan); | 216 | free_irq(chan->line->driver->write_irq, chan); |
217 | chan->enabled = 0; | 217 | chan->enabled = 0; |
218 | } | 218 | } |
@@ -231,9 +231,9 @@ static void close_one_chan(struct chan *chan, int delay_free_irq) | |||
231 | spin_unlock_irqrestore(&irqs_to_free_lock, flags); | 231 | spin_unlock_irqrestore(&irqs_to_free_lock, flags); |
232 | } | 232 | } |
233 | else { | 233 | else { |
234 | if (chan->input) | 234 | if (chan->input && chan->enabled) |
235 | free_irq(chan->line->driver->read_irq, chan); | 235 | free_irq(chan->line->driver->read_irq, chan); |
236 | if (chan->output) | 236 | if (chan->output && chan->enabled) |
237 | free_irq(chan->line->driver->write_irq, chan); | 237 | free_irq(chan->line->driver->write_irq, chan); |
238 | chan->enabled = 0; | 238 | chan->enabled = 0; |
239 | } | 239 | } |
diff --git a/arch/um/drivers/hostaudio_kern.c b/arch/um/drivers/hostaudio_kern.c index ae42695c3597..0c46e398cd8f 100644 --- a/arch/um/drivers/hostaudio_kern.c +++ b/arch/um/drivers/hostaudio_kern.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include "linux/slab.h" | 8 | #include "linux/slab.h" |
9 | #include "linux/sound.h" | 9 | #include "linux/sound.h" |
10 | #include "linux/soundcard.h" | 10 | #include "linux/soundcard.h" |
11 | #include "linux/smp_lock.h" | ||
11 | #include "asm/uaccess.h" | 12 | #include "asm/uaccess.h" |
12 | #include "init.h" | 13 | #include "init.h" |
13 | #include "os.h" | 14 | #include "os.h" |
@@ -186,7 +187,9 @@ static int hostaudio_open(struct inode *inode, struct file *file) | |||
186 | int ret; | 187 | int ret; |
187 | 188 | ||
188 | #ifdef DEBUG | 189 | #ifdef DEBUG |
190 | kparam_block_sysfs_write(dsp); | ||
189 | printk(KERN_DEBUG "hostaudio: open called (host: %s)\n", dsp); | 191 | printk(KERN_DEBUG "hostaudio: open called (host: %s)\n", dsp); |
192 | kparam_unblock_sysfs_write(dsp); | ||
190 | #endif | 193 | #endif |
191 | 194 | ||
192 | state = kmalloc(sizeof(struct hostaudio_state), GFP_KERNEL); | 195 | state = kmalloc(sizeof(struct hostaudio_state), GFP_KERNEL); |
@@ -198,7 +201,12 @@ static int hostaudio_open(struct inode *inode, struct file *file) | |||
198 | if (file->f_mode & FMODE_WRITE) | 201 | if (file->f_mode & FMODE_WRITE) |
199 | w = 1; | 202 | w = 1; |
200 | 203 | ||
204 | kparam_block_sysfs_write(dsp); | ||
205 | lock_kernel(); | ||
201 | ret = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0); | 206 | ret = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0); |
207 | unlock_kernel(); | ||
208 | kparam_unblock_sysfs_write(dsp); | ||
209 | |||
202 | if (ret < 0) { | 210 | if (ret < 0) { |
203 | kfree(state); | 211 | kfree(state); |
204 | return ret; | 212 | return ret; |
@@ -254,11 +262,17 @@ static int hostmixer_open_mixdev(struct inode *inode, struct file *file) | |||
254 | if (file->f_mode & FMODE_WRITE) | 262 | if (file->f_mode & FMODE_WRITE) |
255 | w = 1; | 263 | w = 1; |
256 | 264 | ||
265 | kparam_block_sysfs_write(mixer); | ||
266 | lock_kernel(); | ||
257 | ret = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0); | 267 | ret = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0); |
268 | unlock_kernel(); | ||
269 | kparam_unblock_sysfs_write(mixer); | ||
258 | 270 | ||
259 | if (ret < 0) { | 271 | if (ret < 0) { |
272 | kparam_block_sysfs_write(dsp); | ||
260 | printk(KERN_ERR "hostaudio_open_mixdev failed to open '%s', " | 273 | printk(KERN_ERR "hostaudio_open_mixdev failed to open '%s', " |
261 | "err = %d\n", dsp, -ret); | 274 | "err = %d\n", dsp, -ret); |
275 | kparam_unblock_sysfs_write(dsp); | ||
262 | kfree(state); | 276 | kfree(state); |
263 | return ret; | 277 | return ret; |
264 | } | 278 | } |
@@ -314,8 +328,10 @@ MODULE_LICENSE("GPL"); | |||
314 | 328 | ||
315 | static int __init hostaudio_init_module(void) | 329 | static int __init hostaudio_init_module(void) |
316 | { | 330 | { |
331 | __kernel_param_lock(); | ||
317 | printk(KERN_INFO "UML Audio Relay (host dsp = %s, host mixer = %s)\n", | 332 | printk(KERN_INFO "UML Audio Relay (host dsp = %s, host mixer = %s)\n", |
318 | dsp, mixer); | 333 | dsp, mixer); |
334 | __kernel_param_unlock(); | ||
319 | 335 | ||
320 | module_data.dev_audio = register_sound_dsp(&hostaudio_fops, -1); | 336 | module_data.dev_audio = register_sound_dsp(&hostaudio_fops, -1); |
321 | if (module_data.dev_audio < 0) { | 337 | if (module_data.dev_audio < 0) { |
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index f05372694233..2ab233ba32c1 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
@@ -25,11 +25,6 @@ | |||
25 | #include "net_kern.h" | 25 | #include "net_kern.h" |
26 | #include "net_user.h" | 26 | #include "net_user.h" |
27 | 27 | ||
28 | static inline void set_ether_mac(struct net_device *dev, unsigned char *addr) | ||
29 | { | ||
30 | memcpy(dev->dev_addr, addr, ETH_ALEN); | ||
31 | } | ||
32 | |||
33 | #define DRIVER_NAME "uml-netdev" | 28 | #define DRIVER_NAME "uml-netdev" |
34 | 29 | ||
35 | static DEFINE_SPINLOCK(opened_lock); | 30 | static DEFINE_SPINLOCK(opened_lock); |
@@ -266,7 +261,7 @@ static int uml_net_set_mac(struct net_device *dev, void *addr) | |||
266 | struct sockaddr *hwaddr = addr; | 261 | struct sockaddr *hwaddr = addr; |
267 | 262 | ||
268 | spin_lock_irq(&lp->lock); | 263 | spin_lock_irq(&lp->lock); |
269 | set_ether_mac(dev, hwaddr->sa_data); | 264 | eth_mac_addr(dev, hwaddr->sa_data); |
270 | spin_unlock_irq(&lp->lock); | 265 | spin_unlock_irq(&lp->lock); |
271 | 266 | ||
272 | return 0; | 267 | return 0; |
@@ -380,7 +375,6 @@ static const struct net_device_ops uml_netdev_ops = { | |||
380 | .ndo_tx_timeout = uml_net_tx_timeout, | 375 | .ndo_tx_timeout = uml_net_tx_timeout, |
381 | .ndo_set_mac_address = uml_net_set_mac, | 376 | .ndo_set_mac_address = uml_net_set_mac, |
382 | .ndo_change_mtu = uml_net_change_mtu, | 377 | .ndo_change_mtu = uml_net_change_mtu, |
383 | .ndo_set_mac_address = eth_mac_addr, | ||
384 | .ndo_validate_addr = eth_validate_addr, | 378 | .ndo_validate_addr = eth_validate_addr, |
385 | }; | 379 | }; |
386 | 380 | ||
@@ -478,7 +472,7 @@ static void eth_configure(int n, void *init, char *mac, | |||
478 | ((*transport->user->init)(&lp->user, dev) != 0)) | 472 | ((*transport->user->init)(&lp->user, dev) != 0)) |
479 | goto out_unregister; | 473 | goto out_unregister; |
480 | 474 | ||
481 | set_ether_mac(dev, device->mac); | 475 | eth_mac_addr(dev, device->mac); |
482 | dev->mtu = transport->user->mtu; | 476 | dev->mtu = transport->user->mtu; |
483 | dev->netdev_ops = ¨_netdev_ops; | 477 | dev->netdev_ops = ¨_netdev_ops; |
484 | dev->ethtool_ops = ¨_net_ethtool_ops; | 478 | dev->ethtool_ops = ¨_net_ethtool_ops; |
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index da992a3ad6b7..1bcd208c459f 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "linux/mm.h" | 33 | #include "linux/mm.h" |
34 | #include "linux/slab.h" | 34 | #include "linux/slab.h" |
35 | #include "linux/vmalloc.h" | 35 | #include "linux/vmalloc.h" |
36 | #include "linux/smp_lock.h" | ||
36 | #include "linux/blkpg.h" | 37 | #include "linux/blkpg.h" |
37 | #include "linux/genhd.h" | 38 | #include "linux/genhd.h" |
38 | #include "linux/spinlock.h" | 39 | #include "linux/spinlock.h" |
@@ -1098,6 +1099,7 @@ static int ubd_open(struct block_device *bdev, fmode_t mode) | |||
1098 | struct ubd *ubd_dev = disk->private_data; | 1099 | struct ubd *ubd_dev = disk->private_data; |
1099 | int err = 0; | 1100 | int err = 0; |
1100 | 1101 | ||
1102 | lock_kernel(); | ||
1101 | if(ubd_dev->count == 0){ | 1103 | if(ubd_dev->count == 0){ |
1102 | err = ubd_open_dev(ubd_dev); | 1104 | err = ubd_open_dev(ubd_dev); |
1103 | if(err){ | 1105 | if(err){ |
@@ -1115,7 +1117,8 @@ static int ubd_open(struct block_device *bdev, fmode_t mode) | |||
1115 | if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev); | 1117 | if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev); |
1116 | err = -EROFS; | 1118 | err = -EROFS; |
1117 | }*/ | 1119 | }*/ |
1118 | out: | 1120 | out: |
1121 | unlock_kernel(); | ||
1119 | return err; | 1122 | return err; |
1120 | } | 1123 | } |
1121 | 1124 | ||
@@ -1123,8 +1126,10 @@ static int ubd_release(struct gendisk *disk, fmode_t mode) | |||
1123 | { | 1126 | { |
1124 | struct ubd *ubd_dev = disk->private_data; | 1127 | struct ubd *ubd_dev = disk->private_data; |
1125 | 1128 | ||
1129 | lock_kernel(); | ||
1126 | if(--ubd_dev->count == 0) | 1130 | if(--ubd_dev->count == 0) |
1127 | ubd_close_dev(ubd_dev); | 1131 | ubd_close_dev(ubd_dev); |
1132 | unlock_kernel(); | ||
1128 | return 0; | 1133 | return 0; |
1129 | } | 1134 | } |
1130 | 1135 | ||
diff --git a/arch/um/include/asm/dma-mapping.h b/arch/um/include/asm/dma-mapping.h index b948c14a7867..17a2cb5a4178 100644 --- a/arch/um/include/asm/dma-mapping.h +++ b/arch/um/include/asm/dma-mapping.h | |||
@@ -94,7 +94,6 @@ dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, | |||
94 | 94 | ||
95 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 95 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
96 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 96 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
97 | #define dma_is_consistent(d, h) (1) | ||
98 | 97 | ||
99 | static inline int | 98 | static inline int |
100 | dma_get_cache_alignment(void) | 99 | dma_get_cache_alignment(void) |
diff --git a/arch/um/include/asm/pgtable-3level.h b/arch/um/include/asm/pgtable-3level.h index 084de4a9fc70..0032f9212e74 100644 --- a/arch/um/include/asm/pgtable-3level.h +++ b/arch/um/include/asm/pgtable-3level.h | |||
@@ -60,7 +60,7 @@ | |||
60 | set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd))) | 60 | set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd))) |
61 | 61 | ||
62 | #ifdef CONFIG_64BIT | 62 | #ifdef CONFIG_64BIT |
63 | #define set_pud(pudptr, pudval) set_64bit((phys_t *) (pudptr), pud_val(pudval)) | 63 | #define set_pud(pudptr, pudval) set_64bit((u64 *) (pudptr), pud_val(pudval)) |
64 | #else | 64 | #else |
65 | #define set_pud(pudptr, pudval) (*(pudptr) = (pudval)) | 65 | #define set_pud(pudptr, pudval) (*(pudptr) = (pudval)) |
66 | #endif | 66 | #endif |
@@ -73,7 +73,7 @@ static inline int pgd_newpage(pgd_t pgd) | |||
73 | static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; } | 73 | static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; } |
74 | 74 | ||
75 | #ifdef CONFIG_64BIT | 75 | #ifdef CONFIG_64BIT |
76 | #define set_pmd(pmdptr, pmdval) set_64bit((phys_t *) (pmdptr), pmd_val(pmdval)) | 76 | #define set_pmd(pmdptr, pmdval) set_64bit((u64 *) (pmdptr), pmd_val(pmdval)) |
77 | #else | 77 | #else |
78 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval)) | 78 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval)) |
79 | #endif | 79 | #endif |
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h index cd40fddcf99d..c4617baaa4f2 100644 --- a/arch/um/include/shared/os.h +++ b/arch/um/include/shared/os.h | |||
@@ -161,6 +161,9 @@ extern int os_stat_filesystem(char *path, long *bsize_out, | |||
161 | long *spare_out); | 161 | long *spare_out); |
162 | extern int os_change_dir(char *dir); | 162 | extern int os_change_dir(char *dir); |
163 | extern int os_fchange_dir(int fd); | 163 | extern int os_fchange_dir(int fd); |
164 | extern unsigned os_major(unsigned long long dev); | ||
165 | extern unsigned os_minor(unsigned long long dev); | ||
166 | extern unsigned long long os_makedev(unsigned major, unsigned minor); | ||
164 | 167 | ||
165 | /* start_up.c */ | 168 | /* start_up.c */ |
166 | extern void os_early_checks(void); | 169 | extern void os_early_checks(void); |
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c index 97974c1bdd12..59b20d93b6d4 100644 --- a/arch/um/kernel/exec.c +++ b/arch/um/kernel/exec.c | |||
@@ -44,7 +44,7 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) | |||
44 | PT_REGS_SP(regs) = esp; | 44 | PT_REGS_SP(regs) = esp; |
45 | } | 45 | } |
46 | 46 | ||
47 | static long execve1(char *file, char __user * __user *argv, | 47 | static long execve1(const char *file, char __user * __user *argv, |
48 | char __user *__user *env) | 48 | char __user *__user *env) |
49 | { | 49 | { |
50 | long error; | 50 | long error; |
@@ -61,7 +61,7 @@ static long execve1(char *file, char __user * __user *argv, | |||
61 | return error; | 61 | return error; |
62 | } | 62 | } |
63 | 63 | ||
64 | long um_execve(char *file, char __user *__user *argv, char __user *__user *env) | 64 | long um_execve(const char *file, char __user *__user *argv, char __user *__user *env) |
65 | { | 65 | { |
66 | long err; | 66 | long err; |
67 | 67 | ||
@@ -71,7 +71,7 @@ long um_execve(char *file, char __user *__user *argv, char __user *__user *env) | |||
71 | return err; | 71 | return err; |
72 | } | 72 | } |
73 | 73 | ||
74 | long sys_execve(char __user *file, char __user *__user *argv, | 74 | long sys_execve(const char __user *file, char __user *__user *argv, |
75 | char __user *__user *env) | 75 | char __user *__user *env) |
76 | { | 76 | { |
77 | long error; | 77 | long error; |
diff --git a/arch/um/kernel/internal.h b/arch/um/kernel/internal.h index 3bda43c7a786..1303a105fe91 100644 --- a/arch/um/kernel/internal.h +++ b/arch/um/kernel/internal.h | |||
@@ -1 +1 @@ | |||
extern long um_execve(char *file, char __user *__user *argv, char __user *__user *env); | extern long um_execve(const char *file, char __user *__user *argv, char __user *__user *env); | ||
diff --git a/arch/um/kernel/ksyms.c b/arch/um/kernel/ksyms.c index 836fc9b94707..0ae0dfcfbffb 100644 --- a/arch/um/kernel/ksyms.c +++ b/arch/um/kernel/ksyms.c | |||
@@ -58,6 +58,9 @@ EXPORT_SYMBOL(os_accept_connection); | |||
58 | EXPORT_SYMBOL(os_rcv_fd); | 58 | EXPORT_SYMBOL(os_rcv_fd); |
59 | EXPORT_SYMBOL(run_helper); | 59 | EXPORT_SYMBOL(run_helper); |
60 | EXPORT_SYMBOL(start_thread); | 60 | EXPORT_SYMBOL(start_thread); |
61 | EXPORT_SYMBOL(os_major); | ||
62 | EXPORT_SYMBOL(os_minor); | ||
63 | EXPORT_SYMBOL(os_makedev); | ||
61 | 64 | ||
62 | EXPORT_SYMBOL(add_sigio_fd); | 65 | EXPORT_SYMBOL(add_sigio_fd); |
63 | EXPORT_SYMBOL(ignore_sigio_fd); | 66 | EXPORT_SYMBOL(ignore_sigio_fd); |
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 484509948ee9..e0510496596c 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c | |||
@@ -7,9 +7,6 @@ | |||
7 | #include "linux/ptrace.h" | 7 | #include "linux/ptrace.h" |
8 | #include "linux/sched.h" | 8 | #include "linux/sched.h" |
9 | #include "asm/uaccess.h" | 9 | #include "asm/uaccess.h" |
10 | #ifdef CONFIG_PROC_MM | ||
11 | #include "proc_mm.h" | ||
12 | #endif | ||
13 | #include "skas_ptrace.h" | 10 | #include "skas_ptrace.h" |
14 | 11 | ||
15 | 12 | ||
@@ -158,24 +155,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
158 | break; | 155 | break; |
159 | } | 156 | } |
160 | #endif | 157 | #endif |
161 | #ifdef CONFIG_PROC_MM | ||
162 | case PTRACE_SWITCH_MM: { | ||
163 | struct mm_struct *old = child->mm; | ||
164 | struct mm_struct *new = proc_mm_get_mm(data); | ||
165 | |||
166 | if (IS_ERR(new)) { | ||
167 | ret = PTR_ERR(new); | ||
168 | break; | ||
169 | } | ||
170 | |||
171 | atomic_inc(&new->mm_users); | ||
172 | child->mm = new; | ||
173 | child->active_mm = new; | ||
174 | mmput(old); | ||
175 | ret = 0; | ||
176 | break; | ||
177 | } | ||
178 | #endif | ||
179 | #ifdef PTRACE_ARCH_PRCTL | 158 | #ifdef PTRACE_ARCH_PRCTL |
180 | case PTRACE_ARCH_PRCTL: | 159 | case PTRACE_ARCH_PRCTL: |
181 | /* XXX Calls ptrace on the host - needs some SMP thinking */ | 160 | /* XXX Calls ptrace on the host - needs some SMP thinking */ |
diff --git a/arch/um/kernel/syscall.c b/arch/um/kernel/syscall.c index 4393173923f5..7427c0b1930c 100644 --- a/arch/um/kernel/syscall.c +++ b/arch/um/kernel/syscall.c | |||
@@ -58,7 +58,7 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | |||
58 | 58 | ||
59 | fs = get_fs(); | 59 | fs = get_fs(); |
60 | set_fs(KERNEL_DS); | 60 | set_fs(KERNEL_DS); |
61 | ret = um_execve((char *)filename, (char __user *__user *)argv, | 61 | ret = um_execve(filename, (char __user *__user *)argv, |
62 | (char __user *__user *) envp); | 62 | (char __user *__user *) envp); |
63 | set_fs(fs); | 63 | set_fs(fs); |
64 | 64 | ||
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index c8b9c469fcd7..a08d9fab81f2 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -102,16 +102,16 @@ static void __init setup_itimer(void) | |||
102 | clockevents_register_device(&itimer_clockevent); | 102 | clockevents_register_device(&itimer_clockevent); |
103 | } | 103 | } |
104 | 104 | ||
105 | void __init time_init(void) | 105 | void read_persistent_clock(struct timespec *ts) |
106 | { | 106 | { |
107 | long long nsecs; | 107 | long long nsecs = os_nsecs(); |
108 | |||
109 | timer_init(); | ||
110 | 108 | ||
111 | nsecs = os_nsecs(); | 109 | set_normalized_timespec(ts, nsecs / NSEC_PER_SEC, |
112 | set_normalized_timespec(&wall_to_monotonic, -nsecs / NSEC_PER_SEC, | ||
113 | -nsecs % NSEC_PER_SEC); | ||
114 | set_normalized_timespec(&xtime, nsecs / NSEC_PER_SEC, | ||
115 | nsecs % NSEC_PER_SEC); | 110 | nsecs % NSEC_PER_SEC); |
111 | } | ||
112 | |||
113 | void __init time_init(void) | ||
114 | { | ||
115 | timer_init(); | ||
116 | late_time_init = setup_itimer; | 116 | late_time_init = setup_itimer; |
117 | } | 117 | } |
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c index b5afcfd0f861..140e587bc0ad 100644 --- a/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c | |||
@@ -561,3 +561,18 @@ int os_lock_file(int fd, int excl) | |||
561 | out: | 561 | out: |
562 | return err; | 562 | return err; |
563 | } | 563 | } |
564 | |||
565 | unsigned os_major(unsigned long long dev) | ||
566 | { | ||
567 | return major(dev); | ||
568 | } | ||
569 | |||
570 | unsigned os_minor(unsigned long long dev) | ||
571 | { | ||
572 | return minor(dev); | ||
573 | } | ||
574 | |||
575 | unsigned long long os_makedev(unsigned major, unsigned minor) | ||
576 | { | ||
577 | return makedev(major, minor); | ||
578 | } | ||
diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c index 89b48a116a89..05f5ea8e83d2 100644 --- a/arch/um/os-Linux/user_syms.c +++ b/arch/um/os-Linux/user_syms.c | |||
@@ -103,6 +103,10 @@ EXPORT_SYMBOL_PROTO(getuid); | |||
103 | EXPORT_SYMBOL_PROTO(fsync); | 103 | EXPORT_SYMBOL_PROTO(fsync); |
104 | EXPORT_SYMBOL_PROTO(fdatasync); | 104 | EXPORT_SYMBOL_PROTO(fdatasync); |
105 | 105 | ||
106 | EXPORT_SYMBOL_PROTO(lstat64); | ||
107 | EXPORT_SYMBOL_PROTO(fstat64); | ||
108 | EXPORT_SYMBOL_PROTO(mknod); | ||
109 | |||
106 | /* Export symbols used by GCC for the stack protector. */ | 110 | /* Export symbols used by GCC for the stack protector. */ |
107 | extern void __stack_smash_handler(void *) __attribute__((weak)); | 111 | extern void __stack_smash_handler(void *) __attribute__((weak)); |
108 | EXPORT_SYMBOL(__stack_smash_handler); | 112 | EXPORT_SYMBOL(__stack_smash_handler); |