From 9efb5e4fc5be2300acc88f4c0225110e165362b3 Mon Sep 17 00:00:00 2001 From: NAKAMURA Gou Date: Thu, 3 Jul 2014 12:06:29 +0900 Subject: [PATCH] add memobj_has_pager() --- kernel/fileobj.c | 1 + kernel/include/memobj.h | 12 ++++++++++++ kernel/syscall.c | 5 ++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/kernel/fileobj.c b/kernel/fileobj.c index 18a27046..df83646d 100644 --- a/kernel/fileobj.c +++ b/kernel/fileobj.c @@ -184,6 +184,7 @@ int fileobj_create(int fd, struct memobj **objp, int *maxprotp) memset(newobj, 0, sizeof(*newobj)); newobj->memobj.ops = &fileobj_ops; + newobj->memobj.flags = MF_HAS_PAGER; newobj->handle = result.handle; newobj->sref = 1; newobj->cref = 1; diff --git a/kernel/include/memobj.h b/kernel/include/memobj.h index c846ad09..7a7e99c3 100644 --- a/kernel/include/memobj.h +++ b/kernel/include/memobj.h @@ -18,8 +18,15 @@ #include #include +enum { + /* for memobj.flags */ + MF_HAS_PAGER = 0x0001, +}; + struct memobj { struct memobj_ops * ops; + uint32_t flags; + int8_t padding[4]; ihk_spinlock_t lock; }; @@ -74,6 +81,11 @@ static inline void memobj_unlock(struct memobj *obj) ihk_mc_spinlock_unlock_noirq(&obj->lock); } +static inline int memobj_has_pager(struct memobj *obj) +{ + return !!(obj->flags & MF_HAS_PAGER); +} + int fileobj_create(int fd, struct memobj **objp, int *maxprotp); #endif /* HEADER_MEMOBJ_H */ diff --git a/kernel/syscall.c b/kernel/syscall.c index 6856ab12..8fb35986 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -1708,9 +1708,8 @@ SYSCALL_DECLARE(madvise) goto out; } -#define MEMOBJ_IS_FILEOBJ(obj) ((obj) != NULL) - if (!MEMOBJ_IS_FILEOBJ(range->memobj)) { - dkprintf("[%d]sys_madvise(%lx,%lx,%x):not fileobj " + if (!range->memobj || !memobj_has_pager(range->memobj)) { + dkprintf("[%d]sys_madvise(%lx,%lx,%x):has not pager" "[%lx-%lx) %lx\n", ihk_mc_get_processor_id(), start, len0, advice, range->start,