linux/arch/arm64/kvm/hyp/include/nvhe/gfp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2#ifndef __KVM_HYP_GFP_H
   3#define __KVM_HYP_GFP_H
   4
   5#include <linux/list.h>
   6
   7#include <nvhe/memory.h>
   8#include <nvhe/spinlock.h>
   9
  10#define HYP_NO_ORDER    USHRT_MAX
  11
  12struct hyp_pool {
  13        /*
  14         * Spinlock protecting concurrent changes to the memory pool as well as
  15         * the struct hyp_page of the pool's pages until we have a proper atomic
  16         * API at EL2.
  17         */
  18        hyp_spinlock_t lock;
  19        struct list_head free_area[MAX_ORDER];
  20        phys_addr_t range_start;
  21        phys_addr_t range_end;
  22        unsigned short max_order;
  23};
  24
  25/* Allocation */
  26void *hyp_alloc_pages(struct hyp_pool *pool, unsigned short order);
  27void hyp_split_page(struct hyp_page *page);
  28void hyp_get_page(struct hyp_pool *pool, void *addr);
  29void hyp_put_page(struct hyp_pool *pool, void *addr);
  30
  31/* Used pages cannot be freed */
  32int hyp_pool_init(struct hyp_pool *pool, u64 pfn, unsigned int nr_pages,
  33                  unsigned int reserved_pages);
  34#endif /* __KVM_HYP_GFP_H */
  35