diff options
author | neal <neal> | 2008-02-20 12:41:35 +0000 |
---|---|---|
committer | neal <neal> | 2008-02-20 12:41:35 +0000 |
commit | e2d6b37d3d30e49f6706d606ddbb9ac0dcd70f30 (patch) | |
tree | 87e70a119559bca977423f35344d1004e4237a5b | |
parent | ca33469aafbf11ef136a9a8459db2674be04926d (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/ChangeLog | 5 | ||||
-rw-r--r-- | hurd/cap.h | 5 | ||||
-rw-r--r-- | viengoos/ChangeLog | 6 | ||||
-rw-r--r-- | viengoos/rm.h | 2 | ||||
-rw-r--r-- | viengoos/server.c | 20 |
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>. @@ -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; |