From: Simon Gerber Date: Tue, 7 Jun 2016 14:18:20 +0000 (+0200) Subject: Merge branch 'caps_next' X-Git-Tag: release2016-06-10~3 X-Git-Url: http://git.barrelfish.org/?p=barrelfish;a=commitdiff_plain;h=61250aa77ae26dbb3608361c6553b9b6e4e770d7 Merge branch 'caps_next' This merge changes capabilities for address ranges (e.g. RAM, PhysAddr, ...) from power-of-two sizes given in bits to sizes given in bytes. The current implementation restricts capabilities to be sized >= BASE_PAGE_SIZE. In addition, retype now can "cut out" a part of a large capability to create a descendant without having to create descendants for the whole region. To ensure integrity of operations, calls to retype result in a range query on the capability database to check for already existing, overlapping descendants of the source capability. Closes T191. Signed-off-by: Simon Gerber --- 61250aa77ae26dbb3608361c6553b9b6e4e770d7 diff --cc usr/monitor/capops/retype.c index 946bac5,c6dcf23..ebf9780 --- a/usr/monitor/capops/retype.c +++ b/usr/monitor/capops/retype.c @@@ -226,22 -218,12 +230,24 @@@ retype_request__send(struct intermon_bi errval_t err; err = intermon_capops_request_retype__tx(b, NOP_CONT, req_st->caprep, + req_st->check.offset, req_st->check.type, - req_st->check.objbits, + req_st->check.objsize, + req_st->check.count, (lvaddr_t)req_st); + + if (err_no(err) == FLOUNDER_ERR_TX_BUSY) { + DEBUG_CAPOPS("%s: got FLOUNDER_ERR_TX_BUSY; requeueing msg.\n", __FUNCTION__); + struct intermon_state *inter_st = (struct intermon_state *)b->st; + // requeue send request at front and return + err = intermon_enqueue_send_at_front(b, &inter_st->queue, b->waitset, + (struct msg_queue_elem *)e); + GOTO_IF_ERR(err, handle_err); + return; + } + +handle_err: if (err_is_fail(err)) { retype_result__rx(err, req_st); }