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