Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-2.6-block.git] / net / xdp / xsk_queue.h
index cba4a640d5e8470040fe7ff5c8d186729e895ddc..909c5168ed0f87c3d0e1d14359efb67fe0bebab1 100644 (file)
@@ -117,6 +117,20 @@ static inline u32 xskq_nb_free(struct xsk_queue *q, u32 producer, u32 dcnt)
        return q->nentries - (producer - q->cons_tail);
 }
 
+static inline bool xskq_has_addrs(struct xsk_queue *q, u32 cnt)
+{
+       u32 entries = q->prod_tail - q->cons_tail;
+
+       if (entries >= cnt)
+               return true;
+
+       /* Refresh the local pointer. */
+       q->prod_tail = READ_ONCE(q->ring->producer);
+       entries = q->prod_tail - q->cons_tail;
+
+       return entries >= cnt;
+}
+
 /* UMEM queue */
 
 static inline bool xskq_is_valid_addr(struct xsk_queue *q, u64 addr)