Skip to content

Commit

Permalink
KVM: arm64: Make hyp_page::order a u8
Browse files Browse the repository at this point in the history
We don't need 16 bits to store the hyp page order, and we'll need some
bits to store page ownership data soon, so let's reduce the order
member.

Tested-by: Fuad Tabba <tabba@google.com>
Reviewed-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Quentin Perret <qperret@google.com>
Link: https://lore.kernel.org/r/20241218194059.3670226-4-qperret@google.com
Signed-off-by: Marc Zyngier <maz@kernel.org>
  • Loading branch information
Quentin Perret authored and Marc Zyngier committed Dec 20, 2024
1 parent d4fc42a commit b35875d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
6 changes: 3 additions & 3 deletions arch/arm64/kvm/hyp/include/nvhe/gfp.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <nvhe/memory.h>
#include <nvhe/spinlock.h>

#define HYP_NO_ORDER USHRT_MAX
#define HYP_NO_ORDER ((u8)(~0))

struct hyp_pool {
/*
Expand All @@ -19,11 +19,11 @@ struct hyp_pool {
struct list_head free_area[NR_PAGE_ORDERS];
phys_addr_t range_start;
phys_addr_t range_end;
unsigned short max_order;
u8 max_order;
};

/* Allocation */
void *hyp_alloc_pages(struct hyp_pool *pool, unsigned short order);
void *hyp_alloc_pages(struct hyp_pool *pool, u8 order);
void hyp_split_page(struct hyp_page *page);
void hyp_get_page(struct hyp_pool *pool, void *addr);
void hyp_put_page(struct hyp_pool *pool, void *addr);
Expand Down
5 changes: 3 additions & 2 deletions arch/arm64/kvm/hyp/include/nvhe/memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ static inline enum pkvm_page_state pkvm_getstate(enum kvm_pgtable_prot prot)
}

struct hyp_page {
unsigned short refcount;
unsigned short order;
u16 refcount;
u8 order;
u8 reserved;
};

extern u64 __hyp_vmemmap;
Expand Down
14 changes: 7 additions & 7 deletions arch/arm64/kvm/hyp/nvhe/page_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ u64 __hyp_vmemmap;
*/
static struct hyp_page *__find_buddy_nocheck(struct hyp_pool *pool,
struct hyp_page *p,
unsigned short order)
u8 order)
{
phys_addr_t addr = hyp_page_to_phys(p);

Expand All @@ -51,7 +51,7 @@ static struct hyp_page *__find_buddy_nocheck(struct hyp_pool *pool,
/* Find a buddy page currently available for allocation */
static struct hyp_page *__find_buddy_avail(struct hyp_pool *pool,
struct hyp_page *p,
unsigned short order)
u8 order)
{
struct hyp_page *buddy = __find_buddy_nocheck(pool, p, order);

Expand Down Expand Up @@ -94,7 +94,7 @@ static void __hyp_attach_page(struct hyp_pool *pool,
struct hyp_page *p)
{
phys_addr_t phys = hyp_page_to_phys(p);
unsigned short order = p->order;
u8 order = p->order;
struct hyp_page *buddy;

memset(hyp_page_to_virt(p), 0, PAGE_SIZE << p->order);
Expand Down Expand Up @@ -129,7 +129,7 @@ static void __hyp_attach_page(struct hyp_pool *pool,

static struct hyp_page *__hyp_extract_page(struct hyp_pool *pool,
struct hyp_page *p,
unsigned short order)
u8 order)
{
struct hyp_page *buddy;

Expand Down Expand Up @@ -183,7 +183,7 @@ void hyp_get_page(struct hyp_pool *pool, void *addr)

void hyp_split_page(struct hyp_page *p)
{
unsigned short order = p->order;
u8 order = p->order;
unsigned int i;

p->order = 0;
Expand All @@ -195,10 +195,10 @@ void hyp_split_page(struct hyp_page *p)
}
}

void *hyp_alloc_pages(struct hyp_pool *pool, unsigned short order)
void *hyp_alloc_pages(struct hyp_pool *pool, u8 order)
{
unsigned short i = order;
struct hyp_page *p;
u8 i = order;

hyp_spin_lock(&pool->lock);

Expand Down

0 comments on commit b35875d

Please sign in to comment.