lkml.org 
[lkml]   [2021]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v2 6/7] KVM: arm64: Use less bits for hyp_page order
    From
    The hyp_page order is currently encoded on 4 bytes even though it is
    guaranteed to be smaller than this. Make it 2 bytes to reduce the hyp
    vmemmap overhead.

    Signed-off-by: Quentin Perret <qperret@google.com>
    ---
    arch/arm64/kvm/hyp/include/nvhe/gfp.h | 6 +++---
    arch/arm64/kvm/hyp/include/nvhe/memory.h | 2 +-
    arch/arm64/kvm/hyp/nvhe/page_alloc.c | 12 ++++++------
    3 files changed, 10 insertions(+), 10 deletions(-)

    diff --git a/arch/arm64/kvm/hyp/include/nvhe/gfp.h b/arch/arm64/kvm/hyp/include/nvhe/gfp.h
    index 3ea7bfb6c380..fb0f523d1492 100644
    --- a/arch/arm64/kvm/hyp/include/nvhe/gfp.h
    +++ b/arch/arm64/kvm/hyp/include/nvhe/gfp.h
    @@ -7,7 +7,7 @@
    #include <nvhe/memory.h>
    #include <nvhe/spinlock.h>

    -#define HYP_NO_ORDER UINT_MAX
    +#define HYP_NO_ORDER USHRT_MAX

    struct hyp_pool {
    /*
    @@ -19,11 +19,11 @@ struct hyp_pool {
    struct list_head free_area[MAX_ORDER];
    phys_addr_t range_start;
    phys_addr_t range_end;
    - unsigned int max_order;
    + unsigned short max_order;
    };

    /* Allocation */
    -void *hyp_alloc_pages(struct hyp_pool *pool, unsigned int order);
    +void *hyp_alloc_pages(struct hyp_pool *pool, unsigned short order);
    void hyp_get_page(struct hyp_pool *pool, void *addr);
    void hyp_put_page(struct hyp_pool *pool, void *addr);

    diff --git a/arch/arm64/kvm/hyp/include/nvhe/memory.h b/arch/arm64/kvm/hyp/include/nvhe/memory.h
    index 991636be2f46..3fe34fa30ea4 100644
    --- a/arch/arm64/kvm/hyp/include/nvhe/memory.h
    +++ b/arch/arm64/kvm/hyp/include/nvhe/memory.h
    @@ -9,7 +9,7 @@

    struct hyp_page {
    unsigned int refcount;
    - unsigned int order;
    + unsigned short order;
    };

    extern u64 __hyp_vmemmap;
    diff --git a/arch/arm64/kvm/hyp/nvhe/page_alloc.c b/arch/arm64/kvm/hyp/nvhe/page_alloc.c
    index e3689def7033..be07055bbc10 100644
    --- a/arch/arm64/kvm/hyp/nvhe/page_alloc.c
    +++ b/arch/arm64/kvm/hyp/nvhe/page_alloc.c
    @@ -32,7 +32,7 @@ u64 __hyp_vmemmap;
    */
    static struct hyp_page *__find_buddy_nocheck(struct hyp_pool *pool,
    struct hyp_page *p,
    - unsigned int order)
    + unsigned short order)
    {
    phys_addr_t addr = hyp_page_to_phys(p);

    @@ -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 int order)
    + unsigned short order)
    {
    struct hyp_page *buddy = __find_buddy_nocheck(pool, p, order);

    @@ -93,7 +93,7 @@ static inline struct hyp_page *node_to_page(struct list_head *node)
    static void __hyp_attach_page(struct hyp_pool *pool,
    struct hyp_page *p)
    {
    - unsigned int order = p->order;
    + unsigned short order = p->order;
    struct hyp_page *buddy;

    memset(hyp_page_to_virt(p), 0, PAGE_SIZE << p->order);
    @@ -123,7 +123,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 int order)
    + unsigned short order)
    {
    struct hyp_page *buddy;

    @@ -192,9 +192,9 @@ void hyp_get_page(struct hyp_pool *pool, void *addr)
    hyp_spin_unlock(&pool->lock);
    }

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

    hyp_spin_lock(&pool->lock);
    --
    2.32.0.rc0.204.g9fa02ecfa5-goog
    \
     
     \ /
      Last update: 2021-06-02 11:44    [W:6.447 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site