Add proper error codes for failes IRQ cap invocations.
authorGerd Zellweger <mail@gerdzellweger.com>
Fri, 7 Nov 2014 10:41:42 +0000 (11:41 +0100)
committerGerd Zellweger <mail@gerdzellweger.com>
Fri, 7 Nov 2014 10:41:42 +0000 (11:41 +0100)
errors/errno.fugu
usr/monitor/monitor_rpc_server.c

index 4145312..5bdb1e7 100755 (executable)
@@ -481,6 +481,10 @@ errors monitor MON_ERR_ {
     failure RSRC_MEMBER_LIMIT    "Reached member limit of resource domain",
     failure RSRC_ILL_MANIFEST    "Illegal manifest",
     failure RSRC_NOT_FOUND    "Resource domain not found on this core",
+
+    // Invocations
+    failure INVOKE_IRQ_ALLOCATE "Unable to allocate IRQ vector",
+    failure INVOKE_IRQ_SET "Unable to install IRQ vector",
 };
 
 // errors related to the routing library
index 81a5bac..37a42c5 100644 (file)
@@ -505,12 +505,16 @@ static void irq_handle_call(struct monitor_blocking_binding *b, struct capref ep
     errval_t err, err2;
     err = invoke_irqtable_alloc_vector(cap_irq, &vec);
     if (err_is_fail(err)) {
+        err = err_push(err, MON_ERR_INVOKE_IRQ_ALLOCATE);
         err2 = b->tx_vtbl.irq_handle_response(b, NOP_CONT, err, 0);
     }
     // we got a vector
 
     /* set it and reply */
     err = invoke_irqtable_set(cap_irq, vec, ep);
+    if (err_is_fail(err)) {
+        err = err_push(err, MON_ERR_INVOKE_IRQ_SET);        
+    }
     err2 = b->tx_vtbl.irq_handle_response(b, NOP_CONT, err, vec);
     assert(err_is_ok(err2));
 }