/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _LINUX_SECRETMEM_H
#define _LINUX_SECRETMEM_H

#ifdef CONFIG_SECRETMEM

extern const struct address_space_operations secretmem_aops;

static inline bool page_is_secretmem(struct page *page)
{
	struct address_space *mapping;

	/*
	 * Using page_mapping() is quite slow because of the actual call
	 * instruction and repeated compound_head(page) inside the
	 * page_mapping() function.
	 * We know that secretmem pages are not compound, so we can
	 * save a couple of cycles here.
	 */
	if (PageCompound(page))
		return false;

	mapping = (struct address_space *)
		((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS);

	if (!mapping || mapping != page->mapping)
		return false;

	return mapping->a_ops == &secretmem_aops;
}

bool vma_is_secretmem(struct vm_area_struct *vma);
bool secretmem_active(void);

#else

static inline bool vma_is_secretmem(struct vm_area_struct *vma)
{
	return false;
}

static inline bool page_is_secretmem(struct page *page)
{
	return false;
}

static inline bool secretmem_active(void)
{
	return false;
}

#endif /* CONFIG_SECRETMEM */

#endif /* _LINUX_SECRETMEM_H */
