diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2014-07-30 21:53:15 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2014-07-30 21:53:15 +0000 |
commit | 773ec6987ca1e06d93c1cadbada051c3be95aaed (patch) | |
tree | d335d0b4aa2af2363820035f809ca0d34ded1de0 /usr/src | |
parent | 94e2a62d31b6c1113ce0fd4409ed011298e65a77 (diff) | |
download | illumos-joyent-773ec6987ca1e06d93c1cadbada051c3be95aaed.tar.gz |
OS-3277 ltp madvise failures
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/mem.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/usr/src/lib/brand/lx/lx_brand/common/mem.c b/usr/src/lib/brand/lx/lx_brand/common/mem.c index 9578d34da5..218a7a886a 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/mem.c +++ b/usr/src/lib/brand/lx/lx_brand/common/mem.c @@ -47,6 +47,13 @@ int pagesize; /* needed for mmap2() */ #define LX_MAP_LOCKED 0x02000 #define LX_MAP_NORESERVE 0x04000 +#define LX_MADV_MERGEABLE 12 +#define LX_MADV_UNMERGEABLE 13 +#define LX_MADV_HUGEPAGE 14 +#define LX_MADV_NOHUGEPAGE 15 +#define LX_MADV_DONTDUMP 16 +#define LX_MADV_DODUMP 17 + static int ltos_mmap_flags(int flags) { @@ -181,6 +188,8 @@ lx_msync(uintptr_t addr, uintptr_t len, uintptr_t flags) int lx_madvise(uintptr_t start, uintptr_t len, uintptr_t advice) { + int ret; + if (len == 0) return (0); @@ -190,7 +199,21 @@ lx_madvise(uintptr_t start, uintptr_t len, uintptr_t advice) case MADV_SEQUENTIAL: case MADV_WILLNEED: case MADV_DONTNEED: - return (madvise((void *)start, len, advice) ? -errno : 0); + ret = madvise((void *)start, len, advice); + if (ret == -1) { + if (errno == EBUSY) + return (-EINVAL); + return (-errno); + } else { + return (0); + } + + /* pretend these work */ + case LX_MADV_HUGEPAGE: + case LX_MADV_NOHUGEPAGE: + case LX_MADV_DONTDUMP: + case LX_MADV_DODUMP: + return (0); default: return (-EINVAL); |