Module Name: src
Committed By: reinoud
Date: Tue Jan 10 12:04:56 UTC 2012
Modified Files:
src/sys/arch/usermode/include: thunk.h
src/sys/arch/usermode/usermode: thunk.c
Log Message:
Add thunk_madvise() for memory access hints to the host kernel.
To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/usermode/include/thunk.h
cvs rdiff -u -r1.75 -r1.76 src/sys/arch/usermode/usermode/thunk.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/usermode/include/thunk.h
diff -u src/sys/arch/usermode/include/thunk.h:1.57 src/sys/arch/usermode/include/thunk.h:1.58
--- src/sys/arch/usermode/include/thunk.h:1.57 Fri Jan 6 14:11:55 2012
+++ src/sys/arch/usermode/include/thunk.h Tue Jan 10 12:04:56 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: thunk.h,v 1.57 2012/01/06 14:11:55 jmcneill Exp $ */
+/* $NetBSD: thunk.h,v 1.58 2012/01/10 12:04:56 reinoud Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -67,6 +67,14 @@ struct thunk_termios {
#define THUNK_PROT_WRITE 0x02
#define THUNK_PROT_EXEC 0x04
+#define THUNK_MADV_NORMAL 0x01
+#define THUNK_MADV_RANDOM 0x02
+#define THUNK_MADV_SEQUENTIAL 0x04
+#define THUNK_MADV_WILLNEED 0x08
+#define THUNK_MADV_DONTNEED 0x10
+#define THUNK_MADV_FREE 0x20
+
+
struct aiocb;
void thunk_printf_debug(const char *fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
@@ -138,6 +146,7 @@ void * thunk_sbrk(intptr_t len);
void * thunk_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
int thunk_munmap(void *addr, size_t len);
int thunk_mprotect(void *addr, size_t len, int prot);
+int thunk_madvise(void *addr, size_t len, int behav);
int thunk_posix_memalign(void **, size_t, size_t);
int thunk_idle(void);
Index: src/sys/arch/usermode/usermode/thunk.c
diff -u src/sys/arch/usermode/usermode/thunk.c:1.75 src/sys/arch/usermode/usermode/thunk.c:1.76
--- src/sys/arch/usermode/usermode/thunk.c:1.75 Fri Jan 6 14:11:55 2012
+++ src/sys/arch/usermode/usermode/thunk.c Tue Jan 10 12:04:56 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: thunk.c,v 1.75 2012/01/06 14:11:55 jmcneill Exp $ */
+/* $NetBSD: thunk.c,v 1.76 2012/01/10 12:04:56 reinoud Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#ifdef __NetBSD__
-__RCSID("$NetBSD: thunk.c,v 1.75 2012/01/06 14:11:55 jmcneill Exp $");
+__RCSID("$NetBSD: thunk.c,v 1.76 2012/01/10 12:04:56 reinoud Exp $");
#endif
#include <sys/types.h>
@@ -213,6 +213,27 @@ thunk_to_native_mapflags(int flags)
return nflags;
}
+static int
+thunk_to_native_madviseflags(int flags)
+{
+ int nflags = 0;
+
+ if (flags & THUNK_MADV_NORMAL)
+ nflags |= MADV_NORMAL;
+ if (flags & THUNK_MADV_RANDOM)
+ nflags |= MADV_RANDOM;
+ if (flags & THUNK_MADV_SEQUENTIAL)
+ nflags |= MADV_SEQUENTIAL;
+ if (flags & THUNK_MADV_WILLNEED)
+ nflags |= MADV_WILLNEED;
+ if (flags & THUNK_MADV_DONTNEED)
+ nflags |= MADV_DONTNEED;
+ if (flags & THUNK_MADV_FREE)
+ nflags |= MADV_FREE;
+
+ return nflags;
+}
+
int
thunk_setitimer(int which, const struct thunk_itimerval *value,
struct thunk_itimerval *ovalue)
@@ -673,6 +694,16 @@ thunk_mprotect(void *addr, size_t len, i
}
int
+thunk_madvise(void *addr, size_t len, int behav)
+{
+ int nbehav;
+
+ nbehav = thunk_to_native_madviseflags(behav);
+
+ return madvise(addr, len, nbehav);
+}
+
+int
thunk_posix_memalign(void **ptr, size_t alignment, size_t size)
{
return posix_memalign(ptr, alignment, size);