summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2014-07-30 21:53:15 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2014-07-30 21:53:15 +0000
commit773ec6987ca1e06d93c1cadbada051c3be95aaed (patch)
treed335d0b4aa2af2363820035f809ca0d34ded1de0 /usr/src
parent94e2a62d31b6c1113ce0fd4409ed011298e65a77 (diff)
downloadillumos-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.c25
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);