cregit-Linux how code gets into the kernel

Release 4.12 include/linux/skb_array.h

Directory: include/linux
/*
 *      Definitions for the 'struct skb_array' datastructure.
 *
 *      Author:
 *              Michael S. Tsirkin <mst@redhat.com>
 *
 *      Copyright (C) 2016 Red Hat, Inc.
 *
 *      This program is free software; you can redistribute it and/or modify it
 *      under the terms of the GNU General Public License as published by the
 *      Free Software Foundation; either version 2 of the License, or (at your
 *      option) any later version.
 *
 *      Limited-size FIFO of skbs. Can be used more or less whenever
 *      sk_buff_head can be used, except you need to know the queue size in
 *      advance.
 *      Implemented as a type-safe wrapper around ptr_ring.
 */

#ifndef _LINUX_SKB_ARRAY_H

#define _LINUX_SKB_ARRAY_H 1

#ifdef __KERNEL__
#include <linux/ptr_ring.h>
#include <linux/skbuff.h>
#include <linux/if_vlan.h>
#endif


struct skb_array {
	
struct ptr_ring ring;
};

/* Might be slightly faster than skb_array_full below, but callers invoking
 * this in a loop must use a compiler barrier, for example cpu_relax().
 */

static inline bool __skb_array_full(struct skb_array *a) { return __ptr_ring_full(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline bool skb_array_full(struct skb_array *a) { return ptr_ring_full(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline int skb_array_produce(struct skb_array *a, struct sk_buff *skb) { return ptr_ring_produce(&a->ring, skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin28100.00%1100.00%
Total28100.00%1100.00%


static inline int skb_array_produce_irq(struct skb_array *a, struct sk_buff *skb) { return ptr_ring_produce_irq(&a->ring, skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin28100.00%1100.00%
Total28100.00%1100.00%


static inline int skb_array_produce_bh(struct skb_array *a, struct sk_buff *skb) { return ptr_ring_produce_bh(&a->ring, skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin28100.00%1100.00%
Total28100.00%1100.00%


static inline int skb_array_produce_any(struct skb_array *a, struct sk_buff *skb) { return ptr_ring_produce_any(&a->ring, skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin28100.00%1100.00%
Total28100.00%1100.00%

/* Might be slightly faster than skb_array_empty below, but only safe if the * array is never resized. Also, callers invoking this in a loop must take care * to use a compiler barrier, for example cpu_relax(). */
static inline bool __skb_array_empty(struct skb_array *a) { return !__ptr_ring_peek(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin22100.00%1100.00%
Total22100.00%1100.00%


static inline bool skb_array_empty(struct skb_array *a) { return ptr_ring_empty(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline bool skb_array_empty_bh(struct skb_array *a) { return ptr_ring_empty_bh(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline bool skb_array_empty_irq(struct skb_array *a) { return ptr_ring_empty_irq(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline bool skb_array_empty_any(struct skb_array *a) { return ptr_ring_empty_any(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin21100.00%1100.00%
Total21100.00%1100.00%


static inline struct sk_buff *skb_array_consume(struct skb_array *a) { return ptr_ring_consume(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline struct sk_buff *skb_array_consume_irq(struct skb_array *a) { return ptr_ring_consume_irq(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline struct sk_buff *skb_array_consume_any(struct skb_array *a) { return ptr_ring_consume_any(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline struct sk_buff *skb_array_consume_bh(struct skb_array *a) { return ptr_ring_consume_bh(&a->ring); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline int __skb_array_len_with_tag(struct sk_buff *skb) { if (likely(skb)) { int len = skb->len; if (skb_vlan_tag_present(skb)) len += VLAN_HLEN; return len; } else { return 0; } }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin48100.00%1100.00%
Total48100.00%1100.00%


static inline int skb_array_peek_len(struct skb_array *a) { return PTR_RING_PEEK_CALL(&a->ring, __skb_array_len_with_tag); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline int skb_array_peek_len_irq(struct skb_array *a) { return PTR_RING_PEEK_CALL_IRQ(&a->ring, __skb_array_len_with_tag); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline int skb_array_peek_len_bh(struct skb_array *a) { return PTR_RING_PEEK_CALL_BH(&a->ring, __skb_array_len_with_tag); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline int skb_array_peek_len_any(struct skb_array *a) { return PTR_RING_PEEK_CALL_ANY(&a->ring, __skb_array_len_with_tag); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin23100.00%1100.00%
Total23100.00%1100.00%


static inline int skb_array_init(struct skb_array *a, int size, gfp_t gfp) { return ptr_ring_init(&a->ring, size, gfp); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin31100.00%1100.00%
Total31100.00%1100.00%


static void __skb_array_destroy_skb(void *ptr) { kfree_skb(ptr); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin1493.33%150.00%
Jason (Hui) Wang16.67%150.00%
Total15100.00%2100.00%


static inline int skb_array_resize(struct skb_array *a, int size, gfp_t gfp) { return ptr_ring_resize(&a->ring, size, gfp, __skb_array_destroy_skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin3193.94%150.00%
Jason (Hui) Wang26.06%150.00%
Total33100.00%2100.00%


static inline int skb_array_resize_multiple(struct skb_array **rings, int nrings, int size, gfp_t gfp) { BUILD_BUG_ON(offsetof(struct skb_array, ring)); return ptr_ring_resize_multiple((struct ptr_ring **)rings, nrings, size, gfp, __skb_array_destroy_skb); }

Contributors

PersonTokensPropCommitsCommitProp
Jason (Hui) Wang53100.00%1100.00%
Total53100.00%1100.00%


static inline void skb_array_cleanup(struct skb_array *a) { ptr_ring_cleanup(&a->ring, __skb_array_destroy_skb); }

Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin22100.00%2100.00%
Total22100.00%2100.00%

#endif /* _LINUX_SKB_ARRAY_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Michael S. Tsirkin62691.79%250.00%
Jason (Hui) Wang568.21%250.00%
Total682100.00%4100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.