aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-01-26 13:26:27 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-01-26 13:26:27 -0500
commit9f4863b7dc7f545bb3a01746feafdc1208e86c89 (patch)
treeeb4594cc26c2b8aeac7571823192b1ba374dfd3e
parent832fb4a01ca27ded735421de2b090f03e20039fc (diff)
parente34a6280419a24297e6603075ac5af6ce9f13562 (diff)
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: [S390] Add missing compat system call wrappers. [S390] etr/stp: fix possible deadlock [S390] cputime: fix lowcore initialization on cpu hotplug [S390] fix compat sigaltstack syscall table entry [S390] personality: fix personality loss on execve
-rw-r--r--arch/s390/include/asm/elf.h16
-rw-r--r--arch/s390/kernel/compat_wrapper.S38
-rw-r--r--arch/s390/kernel/syscalls.S12
-rw-r--r--arch/s390/kernel/time.c6
-rw-r--r--arch/s390/kernel/vtime.c4
5 files changed, 60 insertions, 16 deletions
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index d480f39d65e6..74d0bbb7d955 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -172,14 +172,14 @@ extern char elf_platform[];
172#ifndef __s390x__ 172#ifndef __s390x__
173#define SET_PERSONALITY(ex) set_personality(PER_LINUX) 173#define SET_PERSONALITY(ex) set_personality(PER_LINUX)
174#else /* __s390x__ */ 174#else /* __s390x__ */
175#define SET_PERSONALITY(ex) \ 175#define SET_PERSONALITY(ex) \
176do { \ 176do { \
177 if (current->personality != PER_LINUX32) \ 177 if (personality(current->personality) != PER_LINUX32) \
178 set_personality(PER_LINUX); \ 178 set_personality(PER_LINUX); \
179 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ 179 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \
180 set_thread_flag(TIF_31BIT); \ 180 set_thread_flag(TIF_31BIT); \
181 else \ 181 else \
182 clear_thread_flag(TIF_31BIT); \ 182 clear_thread_flag(TIF_31BIT); \
183} while (0) 183} while (0)
184#endif /* __s390x__ */ 184#endif /* __s390x__ */
185 185
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index 6035cd20c7a7..62c706eb0de6 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -1767,3 +1767,41 @@ sys_dup3_wrapper:
1767sys_epoll_create1_wrapper: 1767sys_epoll_create1_wrapper:
1768 lgfr %r2,%r2 # int 1768 lgfr %r2,%r2 # int
1769 jg sys_epoll_create1 # branch to system call 1769 jg sys_epoll_create1 # branch to system call
1770
1771 .globl sys32_readahead_wrapper
1772sys32_readahead_wrapper:
1773 lgfr %r2,%r2 # int
1774 llgfr %r3,%r3 # u32
1775 llgfr %r4,%r4 # u32
1776 lgfr %r5,%r5 # s32
1777 jg sys32_readahead # branch to system call
1778
1779 .globl sys32_sendfile64_wrapper
1780sys32_sendfile64_wrapper:
1781 lgfr %r2,%r2 # int
1782 lgfr %r3,%r3 # int
1783 llgtr %r4,%r4 # compat_loff_t *
1784 lgfr %r5,%r5 # s32
1785 jg sys32_sendfile64 # branch to system call
1786
1787 .globl sys_tkill_wrapper
1788sys_tkill_wrapper:
1789 lgfr %r2,%r2 # pid_t
1790 lgfr %r3,%r3 # int
1791 jg sys_tkill # branch to system call
1792
1793 .globl sys_tgkill_wrapper
1794sys_tgkill_wrapper:
1795 lgfr %r2,%r2 # pid_t
1796 lgfr %r3,%r3 # pid_t
1797 lgfr %r4,%r4 # int
1798 jg sys_tgkill # branch to system call
1799
1800 .globl compat_sys_keyctl_wrapper
1801compat_sys_keyctl_wrapper:
1802 llgfr %r2,%r2 # u32
1803 llgfr %r3,%r3 # u32
1804 llgfr %r4,%r4 # u32
1805 llgfr %r5,%r5 # u32
1806 llgfr %r6,%r6 # u32
1807 jg compat_sys_keyctl # branch to system call
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index 76d16e0140bb..fe5b25a988ab 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -194,7 +194,7 @@ SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall
194SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper) 194SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper)
195SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper) 195SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper)
196SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper) /* 185 */ 196SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper) /* 185 */
197SYSCALL(sys_sigaltstack,sys_sigaltstack,sys32_sigaltstack) 197SYSCALL(sys_sigaltstack,sys_sigaltstack,sys32_sigaltstack_wrapper)
198SYSCALL(sys_sendfile,sys_sendfile64,sys32_sendfile_wrapper) 198SYSCALL(sys_sendfile,sys_sendfile64,sys32_sendfile_wrapper)
199NI_SYSCALL /* streams1 */ 199NI_SYSCALL /* streams1 */
200NI_SYSCALL /* streams2 */ 200NI_SYSCALL /* streams2 */
@@ -230,8 +230,8 @@ SYSCALL(sys_mincore,sys_mincore,sys32_mincore_wrapper)
230SYSCALL(sys_madvise,sys_madvise,sys32_madvise_wrapper) 230SYSCALL(sys_madvise,sys_madvise,sys32_madvise_wrapper)
231SYSCALL(sys_getdents64,sys_getdents64,sys32_getdents64_wrapper) /* 220 */ 231SYSCALL(sys_getdents64,sys_getdents64,sys32_getdents64_wrapper) /* 220 */
232SYSCALL(sys_fcntl64,sys_ni_syscall,compat_sys_fcntl64_wrapper) 232SYSCALL(sys_fcntl64,sys_ni_syscall,compat_sys_fcntl64_wrapper)
233SYSCALL(sys_readahead,sys_readahead,sys32_readahead) 233SYSCALL(sys_readahead,sys_readahead,sys32_readahead_wrapper)
234SYSCALL(sys_sendfile64,sys_ni_syscall,sys32_sendfile64) 234SYSCALL(sys_sendfile64,sys_ni_syscall,sys32_sendfile64_wrapper)
235SYSCALL(sys_setxattr,sys_setxattr,sys32_setxattr_wrapper) 235SYSCALL(sys_setxattr,sys_setxattr,sys32_setxattr_wrapper)
236SYSCALL(sys_lsetxattr,sys_lsetxattr,sys32_lsetxattr_wrapper) /* 225 */ 236SYSCALL(sys_lsetxattr,sys_lsetxattr,sys32_lsetxattr_wrapper) /* 225 */
237SYSCALL(sys_fsetxattr,sys_fsetxattr,sys32_fsetxattr_wrapper) 237SYSCALL(sys_fsetxattr,sys_fsetxattr,sys32_fsetxattr_wrapper)
@@ -245,11 +245,11 @@ SYSCALL(sys_removexattr,sys_removexattr,sys32_removexattr_wrapper)
245SYSCALL(sys_lremovexattr,sys_lremovexattr,sys32_lremovexattr_wrapper) 245SYSCALL(sys_lremovexattr,sys_lremovexattr,sys32_lremovexattr_wrapper)
246SYSCALL(sys_fremovexattr,sys_fremovexattr,sys32_fremovexattr_wrapper) /* 235 */ 246SYSCALL(sys_fremovexattr,sys_fremovexattr,sys32_fremovexattr_wrapper) /* 235 */
247SYSCALL(sys_gettid,sys_gettid,sys_gettid) 247SYSCALL(sys_gettid,sys_gettid,sys_gettid)
248SYSCALL(sys_tkill,sys_tkill,sys_tkill) 248SYSCALL(sys_tkill,sys_tkill,sys_tkill_wrapper)
249SYSCALL(sys_futex,sys_futex,compat_sys_futex_wrapper) 249SYSCALL(sys_futex,sys_futex,compat_sys_futex_wrapper)
250SYSCALL(sys_sched_setaffinity,sys_sched_setaffinity,sys32_sched_setaffinity_wrapper) 250SYSCALL(sys_sched_setaffinity,sys_sched_setaffinity,sys32_sched_setaffinity_wrapper)
251SYSCALL(sys_sched_getaffinity,sys_sched_getaffinity,sys32_sched_getaffinity_wrapper) /* 240 */ 251SYSCALL(sys_sched_getaffinity,sys_sched_getaffinity,sys32_sched_getaffinity_wrapper) /* 240 */
252SYSCALL(sys_tgkill,sys_tgkill,sys_tgkill) 252SYSCALL(sys_tgkill,sys_tgkill,sys_tgkill_wrapper)
253NI_SYSCALL /* reserved for TUX */ 253NI_SYSCALL /* reserved for TUX */
254SYSCALL(sys_io_setup,sys_io_setup,sys32_io_setup_wrapper) 254SYSCALL(sys_io_setup,sys_io_setup,sys32_io_setup_wrapper)
255SYSCALL(sys_io_destroy,sys_io_destroy,sys32_io_destroy_wrapper) 255SYSCALL(sys_io_destroy,sys_io_destroy,sys32_io_destroy_wrapper)
@@ -288,7 +288,7 @@ SYSCALL(sys_mq_getsetattr,sys_mq_getsetattr,compat_sys_mq_getsetattr_wrapper)
288SYSCALL(sys_kexec_load,sys_kexec_load,compat_sys_kexec_load_wrapper) 288SYSCALL(sys_kexec_load,sys_kexec_load,compat_sys_kexec_load_wrapper)
289SYSCALL(sys_add_key,sys_add_key,compat_sys_add_key_wrapper) 289SYSCALL(sys_add_key,sys_add_key,compat_sys_add_key_wrapper)
290SYSCALL(sys_request_key,sys_request_key,compat_sys_request_key_wrapper) 290SYSCALL(sys_request_key,sys_request_key,compat_sys_request_key_wrapper)
291SYSCALL(sys_keyctl,sys_keyctl,compat_sys_keyctl) /* 280 */ 291SYSCALL(sys_keyctl,sys_keyctl,compat_sys_keyctl_wrapper) /* 280 */
292SYSCALL(sys_waitid,sys_waitid,compat_sys_waitid_wrapper) 292SYSCALL(sys_waitid,sys_waitid,compat_sys_waitid_wrapper)
293SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper) 293SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper)
294SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper) 294SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper)
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index d649600df5b9..fc468cae4460 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -399,8 +399,10 @@ static struct workqueue_struct *time_sync_wq;
399 399
400static void __init time_init_wq(void) 400static void __init time_init_wq(void)
401{ 401{
402 if (!time_sync_wq) 402 if (time_sync_wq)
403 time_sync_wq = create_singlethread_workqueue("timesync"); 403 return;
404 time_sync_wq = create_singlethread_workqueue("timesync");
405 stop_machine_create();
404} 406}
405 407
406/* 408/*
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c
index 2fb36e462194..ecf0304e61c1 100644
--- a/arch/s390/kernel/vtime.c
+++ b/arch/s390/kernel/vtime.c
@@ -516,8 +516,12 @@ EXPORT_SYMBOL(del_virt_timer);
516 */ 516 */
517void init_cpu_vtimer(void) 517void init_cpu_vtimer(void)
518{ 518{
519 struct thread_info *ti = current_thread_info();
519 struct vtimer_queue *vq; 520 struct vtimer_queue *vq;
520 521
522 S390_lowcore.user_timer = ti->user_timer;
523 S390_lowcore.system_timer = ti->system_timer;
524
521 /* kick the virtual timer */ 525 /* kick the virtual timer */
522 asm volatile ("STCK %0" : "=m" (S390_lowcore.last_update_clock)); 526 asm volatile ("STCK %0" : "=m" (S390_lowcore.last_update_clock));
523 asm volatile ("STPT %0" : "=m" (S390_lowcore.last_update_timer)); 527 asm volatile ("STPT %0" : "=m" (S390_lowcore.last_update_timer));