1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _LINUX_IOREMAP_H
3  #define _LINUX_IOREMAP_H
4  
5  #include <linux/kasan.h>
6  #include <asm/pgtable.h>
7  #include <asm/vmalloc.h>
8  
9  #if defined(CONFIG_HAS_IOMEM) || defined(CONFIG_GENERIC_IOREMAP)
10  /*
11   * Ioremap often, but not always uses the generic vmalloc area. E.g on
12   * Power ARCH, it could have different ioremap space.
13   */
14  #ifndef IOREMAP_START
15  #define IOREMAP_START   VMALLOC_START
16  #define IOREMAP_END     VMALLOC_END
17  #endif
is_ioremap_addr(const void * x)18  static inline bool is_ioremap_addr(const void *x)
19  {
20  	unsigned long addr = (unsigned long)kasan_reset_tag(x);
21  
22  	return addr >= IOREMAP_START && addr < IOREMAP_END;
23  }
24  #else
is_ioremap_addr(const void * x)25  static inline bool is_ioremap_addr(const void *x)
26  {
27  	return false;
28  }
29  #endif
30  
31  #endif /* _LINUX_IOREMAP_H */
32