summaryrefslogtreecommitdiff
path: root/vm/memory_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm/memory_object.c')
-rw-r--r--vm/memory_object.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/vm/memory_object.c b/vm/memory_object.c
index e281c6a3..57c42cd5 100644
--- a/vm/memory_object.c
+++ b/vm/memory_object.c
@@ -1037,6 +1037,53 @@ kern_return_t memory_object_get_attributes(object, object_ready,
return(KERN_SUCCESS);
}
+kern_return_t
+memory_object_set_advice(object, advice)
+ vm_object_t object;
+ vm_advice_t advice;
+{
+ if (object == VM_OBJECT_NULL)
+ return(KERN_INVALID_ARGUMENT);
+
+ switch(advice) {
+ case VM_ADVICE_DEFAULT:
+ case VM_ADVICE_RANDOM:
+ case VM_ADVICE_SEQUENTIAL:
+ case VM_ADVICE_NORMAL:
+ case VM_ADVICE_KEEP:
+ break;
+ default:
+ vm_object_deallocate(object);
+ return(KERN_INVALID_ARGUMENT);
+ }
+
+ vm_object_lock(object);
+ if (advice != VM_ADVICE_KEEP)
+ object->advice = advice;
+ vm_object_unlock(object);
+
+ vm_object_deallocate(object);
+
+ return(KERN_SUCCESS);
+}
+
+kern_return_t
+memory_object_get_advice(object, advice)
+ vm_object_t object;
+ vm_advice_t *advice;
+{
+ if (object == VM_OBJECT_NULL)
+ return(KERN_INVALID_ARGUMENT);
+
+ vm_object_lock(object);
+ *advice = object->advice;
+ vm_object_unlock(object);
+
+ vm_object_deallocate(object);
+
+ return(KERN_SUCCESS);
+}
+
/*
* If successful, consumes the supplied naked send right.
*/