diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-10-23 09:52:51 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-10-23 09:52:51 +0100 |
commit | a3fc4d842ee8ff9de41a234d0dfc4252ea3f19ec (patch) | |
tree | 206b826018b807ed533391714457157a1b11d888 /tools/misc/xenperf.c | |
parent | 7aae32885d19d76db269b7231a313d3c91a1e10a (diff) | |
download | xen-a3fc4d842ee8ff9de41a234d0dfc4252ea3f19ec.tar.gz xen-a3fc4d842ee8ff9de41a234d0dfc4252ea3f19ec.tar.bz2 xen-a3fc4d842ee8ff9de41a234d0dfc4252ea3f19ec.zip |
[SOLARIS] Don't mlock() hypercall buffers.
On solaris mlock requires a page aligned address and mlock doesn't
ensure the pages won't minor page fault.
Signed-off-by: Mark Johnson <mark.johnson@sun.com>
Diffstat (limited to 'tools/misc/xenperf.c')
-rw-r--r-- | tools/misc/xenperf.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/tools/misc/xenperf.c b/tools/misc/xenperf.c index 44fc3b445a..575b697257 100644 --- a/tools/misc/xenperf.c +++ b/tools/misc/xenperf.c @@ -18,6 +18,22 @@ #include <errno.h> #include <string.h> +int lock_pages(void *addr, size_t len) +{ + int e = 0; +#ifndef __sun__ + e = mlock(addr, len); +#endif + return (e); +} + +void unlock_pages(void *addr, size_t len) +{ +#ifndef __sun__ + munlock(addr, len); +#endif +} + int main(int argc, char *argv[]) { int i, j, xc_handle; @@ -87,11 +103,11 @@ int main(int argc, char *argv[]) pcv = malloc(sizeof(*pcv) * num_val); if ( pcd == NULL - || mlock(pcd, sizeof(*pcd) * num_desc) != 0 + || lock_pages(pcd, sizeof(*pcd) * num_desc) != 0 || pcv == NULL - || mlock(pcd, sizeof(*pcv) * num_val) != 0) + || lock_pages(pcd, sizeof(*pcv) * num_val) != 0) { - fprintf(stderr, "Could not alloc or mlock buffers: %d (%s)\n", + fprintf(stderr, "Could not alloc or lock buffers: %d (%s)\n", errno, strerror(errno)); exit(-1); } @@ -104,8 +120,8 @@ int main(int argc, char *argv[]) return 1; } - munlock(pcd, sizeof(*pcd) * num_desc); - munlock(pcv, sizeof(*pcv) * num_val); + unlock_pages(pcd, sizeof(*pcd) * num_desc); + unlock_pages(pcv, sizeof(*pcv) * num_val); val = pcv; for ( i = 0; i < num_desc; i++ ) |