#include <linux/miscdevice.h>
#include <linux/vmalloc.h>
#include <linux/random.h>
#include <linux/capability.h>
#include <linux/ptrace.h>
#include <linux/device.h>
#include <linux/highmem.h>
#include <linux/backing-dev.h>
#include <linux/shmem_fs.h>
#include <linux/splice.h>
#include <linux/export.h>
#include <linux/uaccess.h>
static inline unsigned long size_inside_page(unsigned long start,
sz = PAGE_SIZE - (start & (PAGE_SIZE - 1));
#ifndef ARCH_HAS_VALID_PHYS_ADDR_RANGE
static inline int valid_phys_addr_range(phys_addr_t addr, size_t count)
return addr + count <= __pa(high_memory);
static inline int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
#ifdef CONFIG_STRICT_DEVMEM
static inline int page_is_allowed(unsigned long pfn)
return devmem_is_allowed(pfn);
static inline int range_is_allowed(unsigned long pfn, unsigned long size)
u64 from = ((u64)pfn) << PAGE_SHIFT;
if (!devmem_is_allowed(pfn))
static inline int page_is_allowed(unsigned long pfn)
static inline int range_is_allowed(unsigned long pfn, unsigned long size)