From fbd9dc878b1319717a47d425662b8cd81ed873bc Mon Sep 17 00:00:00 2001 From: NAKAMURA Gou Date: Mon, 14 Mar 2016 18:35:03 +0900 Subject: [PATCH] memobj: add lookup_page method --- kernel/include/memobj.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/include/memobj.h b/kernel/include/memobj.h index 63ce923f..e2abfec0 100644 --- a/kernel/include/memobj.h +++ b/kernel/include/memobj.h @@ -47,6 +47,7 @@ typedef int memobj_get_page_func_t(struct memobj *obj, off_t off, int p2align, u typedef uintptr_t memobj_copy_page_func_t(struct memobj *obj, uintptr_t orgphys, int p2align); typedef int memobj_flush_page_func_t(struct memobj *obj, uintptr_t phys, size_t pgsize); typedef int memobj_invalidate_page_func_t(struct memobj *obj, uintptr_t phys, size_t pgsize); +typedef int memobj_lookup_page_func_t(struct memobj *obj, off_t off, int p2align, uintptr_t *physp, unsigned long *flag); struct memobj_ops { memobj_release_func_t * release; @@ -55,6 +56,7 @@ struct memobj_ops { memobj_copy_page_func_t * copy_page; memobj_flush_page_func_t * flush_page; memobj_invalidate_page_func_t * invalidate_page; + memobj_lookup_page_func_t * lookup_page; }; static inline void memobj_release(struct memobj *obj) @@ -106,6 +108,15 @@ static inline int memobj_invalidate_page(struct memobj *obj, uintptr_t phys, return 0; } +static inline int memobj_lookup_page(struct memobj *obj, off_t off, + int p2align, uintptr_t *physp, unsigned long *pflag) +{ + if (obj->ops->lookup_page) { + return (*obj->ops->lookup_page)(obj, off, p2align, physp, pflag); + } + return -ENXIO; +} + static inline void memobj_lock(struct memobj *obj) { ihk_mc_spinlock_lock_noirq(&obj->lock);