Rev 5270 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5270 | Rev 6936 | ||
---|---|---|---|
1 | #ifndef _LINUX_ERR_H |
1 | #ifndef _LINUX_ERR_H |
2 | #define _LINUX_ERR_H |
2 | #define _LINUX_ERR_H |
3 | 3 | ||
4 | #include |
4 | #include |
5 | #include |
5 | #include |
6 | 6 | ||
7 | #include |
7 | #include |
8 | 8 | ||
9 | /* |
9 | /* |
10 | * Kernel pointers have redundant information, so we can use a |
10 | * Kernel pointers have redundant information, so we can use a |
11 | * scheme where we can return either an error code or a normal |
11 | * scheme where we can return either an error code or a normal |
12 | * pointer with the same return value. |
12 | * pointer with the same return value. |
13 | * |
13 | * |
14 | * This should be a per-architecture thing, to allow different |
14 | * This should be a per-architecture thing, to allow different |
15 | * error and pointer decisions. |
15 | * error and pointer decisions. |
16 | */ |
16 | */ |
17 | #define MAX_ERRNO 4095 |
17 | #define MAX_ERRNO 4095 |
18 | 18 | ||
19 | #ifndef __ASSEMBLY__ |
19 | #ifndef __ASSEMBLY__ |
20 | 20 | ||
21 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) |
21 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) |
22 | 22 | ||
23 | static inline void * __must_check ERR_PTR(long error) |
23 | static inline void * __must_check ERR_PTR(long error) |
24 | { |
24 | { |
25 | return (void *) error; |
25 | return (void *) error; |
26 | } |
26 | } |
27 | 27 | ||
28 | static inline long __must_check PTR_ERR(__force const void *ptr) |
28 | static inline long __must_check PTR_ERR(__force const void *ptr) |
29 | { |
29 | { |
30 | return (long) ptr; |
30 | return (long) ptr; |
31 | } |
31 | } |
32 | 32 | ||
33 | static inline bool __must_check IS_ERR(__force const void *ptr) |
33 | static inline bool __must_check IS_ERR(__force const void *ptr) |
34 | { |
34 | { |
35 | return IS_ERR_VALUE((unsigned long)ptr); |
35 | return IS_ERR_VALUE((unsigned long)ptr); |
36 | } |
36 | } |
37 | 37 | ||
38 | static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr) |
38 | static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr) |
39 | { |
39 | { |
40 | return !ptr || IS_ERR_VALUE((unsigned long)ptr); |
40 | return unlikely(!ptr) || IS_ERR_VALUE((unsigned long)ptr); |
41 | } |
41 | } |
42 | 42 | ||
43 | /** |
43 | /** |
44 | * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type |
44 | * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type |
45 | * @ptr: The pointer to cast. |
45 | * @ptr: The pointer to cast. |
46 | * |
46 | * |
47 | * Explicitly cast an error-valued pointer to another pointer type in such a |
47 | * Explicitly cast an error-valued pointer to another pointer type in such a |
48 | * way as to make it clear that's what's going on. |
48 | * way as to make it clear that's what's going on. |
49 | */ |
49 | */ |
50 | static inline void * __must_check ERR_CAST(__force const void *ptr) |
50 | static inline void * __must_check ERR_CAST(__force const void *ptr) |
51 | { |
51 | { |
52 | /* cast away the const */ |
52 | /* cast away the const */ |
53 | return (void *) ptr; |
53 | return (void *) ptr; |
54 | } |
54 | } |
55 | 55 | ||
56 | static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) |
56 | static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) |
57 | { |
57 | { |
58 | if (IS_ERR(ptr)) |
58 | if (IS_ERR(ptr)) |
59 | return PTR_ERR(ptr); |
59 | return PTR_ERR(ptr); |
60 | else |
60 | else |
61 | return 0; |
61 | return 0; |
62 | } |
62 | } |
63 | 63 | ||
64 | /* Deprecated */ |
64 | /* Deprecated */ |
65 | #define PTR_RET(p) PTR_ERR_OR_ZERO(p) |
65 | #define PTR_RET(p) PTR_ERR_OR_ZERO(p) |
66 | 66 | ||
67 | #endif |
67 | #endif |
68 | 68 | ||
69 | #endif /* _LINUX_ERR_H */ |
69 | #endif /* _LINUX_ERR_H */ |