summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorneal <neal>2008-02-20 12:41:35 +0000
committerneal <neal>2008-02-20 12:41:35 +0000
commite2d6b37d3d30e49f6706d606ddbb9ac0dcd70f30 (patch)
tree87e70a119559bca977423f35344d1004e4237a5b
parentca33469aafbf11ef136a9a8459db2674be04926d (diff)
hurd/
2008-02-20 Neal H. Walfield <neal@gnu.org> * cap.h (RM_object_discarded_clear): Define. (object_discarded_clear): New method. viengoos/ 2008-02-20 Neal H. Walfield <neal@gnu.org> * server.c (server_loop): Implement object_discarded_clear method. * rm.h (rm_method_id_string): Handle RM_object_discarded_clear case.
-rw-r--r--hurd/ChangeLog5
-rw-r--r--hurd/cap.h5
-rw-r--r--viengoos/ChangeLog6
-rw-r--r--viengoos/rm.h2
-rw-r--r--viengoos/server.c20
5 files changed, 38 insertions, 0 deletions
diff --git a/hurd/ChangeLog b/hurd/ChangeLog
index d4f746a..e33a0ea 100644
--- a/hurd/ChangeLog
+++ b/hurd/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-20 Neal H. Walfield <neal@gnu.org>
+
+ * cap.h (RM_object_discarded_clear): Define.
+ (object_discarded_clear): New method.
+
2008-02-18 Neal H. Walfield <neal@gnu.org>
* exceptions.h: Include <stdint.h>.
diff --git a/hurd/cap.h b/hurd/cap.h
index 66a3bf6..67e50ac 100644
--- a/hurd/cap.h
+++ b/hurd/cap.h
@@ -370,6 +370,7 @@ enum
RM_object_slot_copy_out = 400,
RM_object_slot_copy_in,
RM_object_slot_read,
+ RM_object_discarded_clear,
};
enum
@@ -455,6 +456,10 @@ RPC(object_slot_read, 4, 2, addr_t, principal, addr_t, address_space,
/* Out: */
l4_word_t, type, struct cap_properties, properties)
+/* Clear the discarded bit. */
+RPC(object_discarded_clear, 2, 0,
+ addr_t, principal, addr_t, object)
+
#undef RPC_STUB_PREFIX
#undef RPC_ID_PREFIX
#undef RPC_TARGET
diff --git a/viengoos/ChangeLog b/viengoos/ChangeLog
index bda18a0..2c3d0d4 100644
--- a/viengoos/ChangeLog
+++ b/viengoos/ChangeLog
@@ -1,5 +1,11 @@
2008-02-20 Neal H. Walfield <neal@gnu.org>
+ * server.c (server_loop): Implement object_discarded_clear method.
+ * rm.h (rm_method_id_string): Handle RM_object_discarded_clear
+ case.
+
+2008-02-20 Neal H. Walfield <neal@gnu.org>
+
* server.c (server_loop): On a page fault, use cap_to_object_soft
to find the page.
diff --git a/viengoos/rm.h b/viengoos/rm.h
index 06982bd..f84c035 100644
--- a/viengoos/rm.h
+++ b/viengoos/rm.h
@@ -59,6 +59,8 @@ rm_method_id_string (int id)
return "object_slot_copy_in";
case RM_object_slot_read:
return "object_slot_read";
+ case RM_object_discarded_clear:
+ return "object_discarded_clear";
case RM_exception_collect:
return "exception_collect";
case RM_thread_exregs:
diff --git a/viengoos/server.c b/viengoos/server.c
index 388ea52..b795238 100644
--- a/viengoos/server.c
+++ b/viengoos/server.c
@@ -796,6 +796,26 @@ server_loop (void)
break;
}
+ case RM_object_discarded_clear:
+ {
+ addr_t object_addr;
+
+ err = rm_object_discarded_clear_send_unmarshal
+ (&msg, &principal_addr, &object_addr);
+ if (err)
+ REPLY (err);
+
+ struct object *object = OBJECT (&thread->aspace,
+ object_addr, -1, true);
+
+ struct folio *folio = objects_folio (principal, object);
+ int offset = objects_folio_offset (object);
+ folio_object_discarded_set (folio, offset, false);
+
+ rm_object_discarded_clear_reply_marshal (&msg);
+ break;
+ }
+
case RM_thread_exregs:
{
struct hurd_thread_exregs_in in;