diff options
Diffstat (limited to 'arch/alpha/include/asm')
-rw-r--r-- | arch/alpha/include/asm/atomic.h | 4 | ||||
-rw-r--r-- | arch/alpha/include/asm/fpu.h | 2 | ||||
-rw-r--r-- | arch/alpha/include/asm/ptrace.h | 5 | ||||
-rw-r--r-- | arch/alpha/include/asm/socket.h | 2 | ||||
-rw-r--r-- | arch/alpha/include/asm/uaccess.h | 34 | ||||
-rw-r--r-- | arch/alpha/include/asm/unistd.h | 4 | ||||
-rw-r--r-- | arch/alpha/include/asm/word-at-a-time.h | 55 |
7 files changed, 73 insertions, 33 deletions
diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h index 3bb7ffeae3b..c2cbe4fc391 100644 --- a/arch/alpha/include/asm/atomic.h +++ b/arch/alpha/include/asm/atomic.h | |||
@@ -14,8 +14,8 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | 16 | ||
17 | #define ATOMIC_INIT(i) ( (atomic_t) { (i) } ) | 17 | #define ATOMIC_INIT(i) { (i) } |
18 | #define ATOMIC64_INIT(i) ( (atomic64_t) { (i) } ) | 18 | #define ATOMIC64_INIT(i) { (i) } |
19 | 19 | ||
20 | #define atomic_read(v) (*(volatile int *)&(v)->counter) | 20 | #define atomic_read(v) (*(volatile int *)&(v)->counter) |
21 | #define atomic64_read(v) (*(volatile long *)&(v)->counter) | 21 | #define atomic64_read(v) (*(volatile long *)&(v)->counter) |
diff --git a/arch/alpha/include/asm/fpu.h b/arch/alpha/include/asm/fpu.h index db00f7885fa..e477bcd5b94 100644 --- a/arch/alpha/include/asm/fpu.h +++ b/arch/alpha/include/asm/fpu.h | |||
@@ -1,7 +1,9 @@ | |||
1 | #ifndef __ASM_ALPHA_FPU_H | 1 | #ifndef __ASM_ALPHA_FPU_H |
2 | #define __ASM_ALPHA_FPU_H | 2 | #define __ASM_ALPHA_FPU_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | ||
4 | #include <asm/special_insns.h> | 5 | #include <asm/special_insns.h> |
6 | #endif | ||
5 | 7 | ||
6 | /* | 8 | /* |
7 | * Alpha floating-point control register defines: | 9 | * Alpha floating-point control register defines: |
diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h index fd698a174f2..b87755a1955 100644 --- a/arch/alpha/include/asm/ptrace.h +++ b/arch/alpha/include/asm/ptrace.h | |||
@@ -76,7 +76,10 @@ struct switch_stack { | |||
76 | #define task_pt_regs(task) \ | 76 | #define task_pt_regs(task) \ |
77 | ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) | 77 | ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) |
78 | 78 | ||
79 | #define force_successful_syscall_return() (task_pt_regs(current)->r0 = 0) | 79 | #define current_pt_regs() \ |
80 | ((struct pt_regs *) ((char *)current_thread_info() + 2*PAGE_SIZE) - 1) | ||
81 | |||
82 | #define force_successful_syscall_return() (current_pt_regs()->r0 = 0) | ||
80 | 83 | ||
81 | #endif | 84 | #endif |
82 | 85 | ||
diff --git a/arch/alpha/include/asm/socket.h b/arch/alpha/include/asm/socket.h index dcb221a4b5b..7d2f75be932 100644 --- a/arch/alpha/include/asm/socket.h +++ b/arch/alpha/include/asm/socket.h | |||
@@ -76,9 +76,11 @@ | |||
76 | /* Instruct lower device to use last 4-bytes of skb data as FCS */ | 76 | /* Instruct lower device to use last 4-bytes of skb data as FCS */ |
77 | #define SO_NOFCS 43 | 77 | #define SO_NOFCS 43 |
78 | 78 | ||
79 | #ifdef __KERNEL__ | ||
79 | /* O_NONBLOCK clashes with the bits used for socket types. Therefore we | 80 | /* O_NONBLOCK clashes with the bits used for socket types. Therefore we |
80 | * have to define SOCK_NONBLOCK to a different value here. | 81 | * have to define SOCK_NONBLOCK to a different value here. |
81 | */ | 82 | */ |
82 | #define SOCK_NONBLOCK 0x40000000 | 83 | #define SOCK_NONBLOCK 0x40000000 |
84 | #endif /* __KERNEL__ */ | ||
83 | 85 | ||
84 | #endif /* _ASM_SOCKET_H */ | 86 | #endif /* _ASM_SOCKET_H */ |
diff --git a/arch/alpha/include/asm/uaccess.h b/arch/alpha/include/asm/uaccess.h index b49ec2f8d6e..766fdfde2b7 100644 --- a/arch/alpha/include/asm/uaccess.h +++ b/arch/alpha/include/asm/uaccess.h | |||
@@ -433,36 +433,12 @@ clear_user(void __user *to, long len) | |||
433 | #undef __module_address | 433 | #undef __module_address |
434 | #undef __module_call | 434 | #undef __module_call |
435 | 435 | ||
436 | /* Returns: -EFAULT if exception before terminator, N if the entire | 436 | #define user_addr_max() \ |
437 | buffer filled, else strlen. */ | 437 | (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) |
438 | 438 | ||
439 | extern long __strncpy_from_user(char *__to, const char __user *__from, long __to_len); | 439 | extern long strncpy_from_user(char *dest, const char __user *src, long count); |
440 | 440 | extern __must_check long strlen_user(const char __user *str); | |
441 | extern inline long | 441 | extern __must_check long strnlen_user(const char __user *str, long n); |
442 | strncpy_from_user(char *to, const char __user *from, long n) | ||
443 | { | ||
444 | long ret = -EFAULT; | ||
445 | if (__access_ok((unsigned long)from, 0, get_fs())) | ||
446 | ret = __strncpy_from_user(to, from, n); | ||
447 | return ret; | ||
448 | } | ||
449 | |||
450 | /* Returns: 0 if bad, string length+1 (memory size) of string if ok */ | ||
451 | extern long __strlen_user(const char __user *); | ||
452 | |||
453 | extern inline long strlen_user(const char __user *str) | ||
454 | { | ||
455 | return access_ok(VERIFY_READ,str,0) ? __strlen_user(str) : 0; | ||
456 | } | ||
457 | |||
458 | /* Returns: 0 if exception before NUL or reaching the supplied limit (N), | ||
459 | * a value greater than N if the limit would be exceeded, else strlen. */ | ||
460 | extern long __strnlen_user(const char __user *, long); | ||
461 | |||
462 | extern inline long strnlen_user(const char __user *str, long n) | ||
463 | { | ||
464 | return access_ok(VERIFY_READ,str,0) ? __strnlen_user(str, n) : 0; | ||
465 | } | ||
466 | 442 | ||
467 | /* | 443 | /* |
468 | * About the exception table: | 444 | * About the exception table: |
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h index 633b23b0664..a31a78eac9b 100644 --- a/arch/alpha/include/asm/unistd.h +++ b/arch/alpha/include/asm/unistd.h | |||
@@ -465,10 +465,12 @@ | |||
465 | #define __NR_setns 501 | 465 | #define __NR_setns 501 |
466 | #define __NR_accept4 502 | 466 | #define __NR_accept4 502 |
467 | #define __NR_sendmmsg 503 | 467 | #define __NR_sendmmsg 503 |
468 | #define __NR_process_vm_readv 504 | ||
469 | #define __NR_process_vm_writev 505 | ||
468 | 470 | ||
469 | #ifdef __KERNEL__ | 471 | #ifdef __KERNEL__ |
470 | 472 | ||
471 | #define NR_SYSCALLS 504 | 473 | #define NR_SYSCALLS 506 |
472 | 474 | ||
473 | #define __ARCH_WANT_OLD_READDIR | 475 | #define __ARCH_WANT_OLD_READDIR |
474 | #define __ARCH_WANT_STAT64 | 476 | #define __ARCH_WANT_STAT64 |
diff --git a/arch/alpha/include/asm/word-at-a-time.h b/arch/alpha/include/asm/word-at-a-time.h new file mode 100644 index 00000000000..6b340d0f152 --- /dev/null +++ b/arch/alpha/include/asm/word-at-a-time.h | |||
@@ -0,0 +1,55 @@ | |||
1 | #ifndef _ASM_WORD_AT_A_TIME_H | ||
2 | #define _ASM_WORD_AT_A_TIME_H | ||
3 | |||
4 | #include <asm/compiler.h> | ||
5 | |||
6 | /* | ||
7 | * word-at-a-time interface for Alpha. | ||
8 | */ | ||
9 | |||
10 | /* | ||
11 | * We do not use the word_at_a_time struct on Alpha, but it needs to be | ||
12 | * implemented to humour the generic code. | ||
13 | */ | ||
14 | struct word_at_a_time { | ||
15 | const unsigned long unused; | ||
16 | }; | ||
17 | |||
18 | #define WORD_AT_A_TIME_CONSTANTS { 0 } | ||
19 | |||
20 | /* Return nonzero if val has a zero */ | ||
21 | static inline unsigned long has_zero(unsigned long val, unsigned long *bits, const struct word_at_a_time *c) | ||
22 | { | ||
23 | unsigned long zero_locations = __kernel_cmpbge(0, val); | ||
24 | *bits = zero_locations; | ||
25 | return zero_locations; | ||
26 | } | ||
27 | |||
28 | static inline unsigned long prep_zero_mask(unsigned long val, unsigned long bits, const struct word_at_a_time *c) | ||
29 | { | ||
30 | return bits; | ||
31 | } | ||
32 | |||
33 | #define create_zero_mask(bits) (bits) | ||
34 | |||
35 | static inline unsigned long find_zero(unsigned long bits) | ||
36 | { | ||
37 | #if defined(CONFIG_ALPHA_EV6) && defined(CONFIG_ALPHA_EV67) | ||
38 | /* Simple if have CIX instructions */ | ||
39 | return __kernel_cttz(bits); | ||
40 | #else | ||
41 | unsigned long t1, t2, t3; | ||
42 | /* Retain lowest set bit only */ | ||
43 | bits &= -bits; | ||
44 | /* Binary search for lowest set bit */ | ||
45 | t1 = bits & 0xf0; | ||
46 | t2 = bits & 0xcc; | ||
47 | t3 = bits & 0xaa; | ||
48 | if (t1) t1 = 4; | ||
49 | if (t2) t2 = 2; | ||
50 | if (t3) t3 = 1; | ||
51 | return t1 + t2 + t3; | ||
52 | #endif | ||
53 | } | ||
54 | |||
55 | #endif /* _ASM_WORD_AT_A_TIME_H */ | ||