devq: small changes to idc/debug backend
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Wed, 3 May 2017 12:48:34 +0000 (14:48 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Wed, 3 May 2017 12:48:34 +0000 (14:48 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

lib/devif/backends/debug/devif_backend_debug.c
lib/devif/backends/idc/desc_queue.c

index 6c07296..15d458e 100644 (file)
 #define HIST_SIZE 128
 #define MAX_STR_SIZE 128
 
+/*
+ * This is a debugging interface for the device queue interface that
+ * can be used with any existing queue. It can be stacked on top 
+ * to check for non valid buffer enqueues/deqeues that might happen.
+ * A not valid enqueue of a buffer is when the endpoint that enqueues
+ * the buffer does not own the buffer. 
+ *
+ * We keep track of the owned buffers as a list of regions which each
+ * contains a list of memory chunks.
+ * Each chunk specifies a offset within the region and its length.
+ *
+ * When a region is registered, we add one memory chunk that describes
+ * the whole region i.e. offset=0 length= length of region
+ *
+ * If a a buffer is enqueued, it has to be contained in one of these
+ * memory chunks. The memory chunk is then altered according how
+ * the buffer is contained in the chunk. If it is at the beginning or
+ * end of the chunk, the offset/length of the chunk is changed accordingly
+ * If the buffer is in the middle of the chunk, we split the memory chunk
+ * into two new memory chunks that do not contain the buffer.
+ *
+ * If a buffer is dequeued the buffer is added to the existing memory
+ * chunks if possible, otherwise a new memory chunk is added to the
+ * list of chunks. If a buffer is dequeued that is in between two
+ * memory chunks, the memory chunks are merged to one big chunk. 
+ *
+ * When a region is deregistered, the list of chunks has to only 
+ * contain a single chunk that descirbes the whole region. Otherwise
+ * the call will fail since some of the buffers are still in use. 
+ * 
+ */
+
 struct memory_ele {
     genoffset_t offset;
     genoffset_t length;
@@ -119,6 +151,8 @@ static bool in_list(struct memory_list* region, genoffset_t offset,
 }
 */
 
+
+
 static errval_t debug_register(struct devq* q, struct capref cap,
                                regionid_t rid) 
 {
index c95fe47..bbf2443 100644 (file)
@@ -106,7 +106,7 @@ static errval_t descq_enqueue(struct devq* queue,
     }
     
  
-    assert(length > 0);
+    //assert(length > 0);
 
     q->tx_descs[head].rid = region_id;
     q->tx_descs[head].offset = offset;
@@ -171,7 +171,7 @@ static errval_t descq_dequeue(struct devq* queue,
     *valid_length = q->rx_descs[tail].valid_length;
     *misc_flags = q->rx_descs[tail].flags;
 
-    assert(*length > 0);       
+    //assert(*length > 0);       
 
     q->rx_seq++;
     q->rx_seq_ack->value = q->rx_seq;