1 /* Copyright (c) 2016 Google Inc.
2 * Barret Rhoden <brho@cs.berkeley.edu>
3 * See LICENSE for details.
5 * Helpers for reference counted pages, for use with Linux code.
7 * Some code wants to use reference counted pages. I'd like to keep these
8 * uses separate from the main memory allocator. Code that wants reference
9 * counted pages can use these helpers.
11 * Pass in memory allocated with get_cont_pages(). */
16 #include <page_alloc.h>
27 static struct page *rp2page(struct refd_pages *rp)
29 return kva2page(rp->rp_kva);
32 static void refd_pages_release(struct kref *kref)
34 struct refd_pages *rp = container_of(kref, struct refd_pages, rp_kref);
36 free_cont_pages(rp->rp_kva, rp->rp_order);
40 static struct refd_pages *get_refd_pages(void *kva, size_t order)
42 struct refd_pages *rp;
46 rp = kmalloc(sizeof(struct refd_pages), MEM_WAIT);
50 kref_init(&rp->rp_kref, refd_pages_release, 1);
54 static void refd_pages_decref(struct refd_pages *rp)
56 kref_put(&rp->rp_kref);