Merge branch 'caps_next'
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Tue, 7 Jun 2016 14:18:20 +0000 (16:18 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Tue, 7 Jun 2016 14:18:20 +0000 (16:18 +0200)
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 <simon.gerber@inf.ethz.ch>

1  2 
errors/errno.fugu
platforms/Hakefile
tools/harness/barrelfish.py
usr/monitor/capops/delete.c
usr/monitor/capops/retype.c

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -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);
      }