gfp.h (943B)
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 */