networking: added notify in interface raw
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Wed, 3 May 2017 12:47:42 +0000 (14:47 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Wed, 3 May 2017 12:47:42 +0000 (14:47 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

lib/net_interfaces/interface_raw.c
lib/net_queue_manager/queue_manager.c

index 44f1a4f..a917062 100644 (file)
@@ -36,6 +36,7 @@ static struct devq *devq = NULL;
 static regionid_t regid;
 static uint64_t bufid;
 
+static uint64_t batch_rx = 0;
 
 static struct capref buffer_frame;
 void *buffer_base = NULL;
@@ -52,10 +53,18 @@ errval_t buffer_tx_add(size_t idx, size_t offset, size_t length,
     errval_t err;
     uint64_t flags_new = flags | NETIF_TXFLAG | NETIF_TXFLAG_LAST;
 
-    
     offset += idx * BUFFER_SIZE;
-    err = devq_enqueue((struct devq *)devq, regid, offset, 
+    err = devq_enqueue(devq, regid, offset, 
                        length, 0, length, flags_new);
+
+    if (err_is_fail(err)) {
+        return err;
+    }
+    
+    if (!more_chunks) {
+        err = devq_notify(devq);
+    }
+
     return err;
 }
 
@@ -66,8 +75,17 @@ errval_t buffer_rx_add(size_t idx)
     uint64_t flags = NETIF_RXFLAG;
 
     offset = idx * BUFFER_SIZE;
-    err = devq_enqueue((struct devq *)devq, regid, offset, BUFFER_SIZE, 
-                           0, BUFFER_SIZE, flags);
+    err = devq_enqueue(devq, regid, offset, BUFFER_SIZE, 
+                        0, BUFFER_SIZE, flags);
+    if (err_is_fail(err)) {
+        return err;
+    }
+
+    batch_rx++;
+    if (batch_rx > 31) {
+        err = devq_notify(devq);
+        batch_rx = 0;
+    }
     return err;
 }
 
index 9543b9a..137129b 100755 (executable)
@@ -441,6 +441,7 @@ static errval_t send_raw_xmit_done(struct devq *queue,
     errval_t err;
     err = devq_enqueue(queue, cl->region_id, offset, length, 0, length, flags);
     assert(err_is_ok(err));
+    err = devq_notify(queue);
     return err;
 } // end function: send_raw_xmit_done