[I/OAT]: Structure changes for TCP recv offload to I/OAT
Adds an async_wait_queue and some additional fields to tcp_sock, and a dma_cookie_t to sk_buff. Signed-off-by: Chris Leech <christopher.leech@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
de5506e155
commit
97fc2f0848
|
@ -29,6 +29,7 @@
|
||||||
#include <linux/net.h>
|
#include <linux/net.h>
|
||||||
#include <linux/textsearch.h>
|
#include <linux/textsearch.h>
|
||||||
#include <net/checksum.h>
|
#include <net/checksum.h>
|
||||||
|
#include <linux/dmaengine.h>
|
||||||
|
|
||||||
#define HAVE_ALLOC_SKB /* For the drivers to know */
|
#define HAVE_ALLOC_SKB /* For the drivers to know */
|
||||||
#define HAVE_ALIGNABLE_SKB /* Ditto 8) */
|
#define HAVE_ALIGNABLE_SKB /* Ditto 8) */
|
||||||
|
@ -285,6 +286,9 @@ struct sk_buff {
|
||||||
__u16 tc_verd; /* traffic control verdict */
|
__u16 tc_verd; /* traffic control verdict */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
dma_cookie_t dma_cookie;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* These elements must be at the end, see alloc_skb() for details. */
|
/* These elements must be at the end, see alloc_skb() for details. */
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#define _LINUX_TCP_H
|
#define _LINUX_TCP_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/dmaengine.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
struct tcphdr {
|
struct tcphdr {
|
||||||
|
@ -233,6 +234,13 @@ struct tcp_sock {
|
||||||
struct iovec *iov;
|
struct iovec *iov;
|
||||||
int memory;
|
int memory;
|
||||||
int len;
|
int len;
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
/* members for async copy */
|
||||||
|
struct dma_chan *dma_chan;
|
||||||
|
int wakeup;
|
||||||
|
struct dma_pinned_list *pinned_list;
|
||||||
|
dma_cookie_t dma_cookie;
|
||||||
|
#endif
|
||||||
} ucopy;
|
} ucopy;
|
||||||
|
|
||||||
__u32 snd_wl1; /* Sequence for window update */
|
__u32 snd_wl1; /* Sequence for window update */
|
||||||
|
|
|
@ -132,6 +132,7 @@ struct sock_common {
|
||||||
* @sk_receive_queue: incoming packets
|
* @sk_receive_queue: incoming packets
|
||||||
* @sk_wmem_alloc: transmit queue bytes committed
|
* @sk_wmem_alloc: transmit queue bytes committed
|
||||||
* @sk_write_queue: Packet sending queue
|
* @sk_write_queue: Packet sending queue
|
||||||
|
* @sk_async_wait_queue: DMA copied packets
|
||||||
* @sk_omem_alloc: "o" is "option" or "other"
|
* @sk_omem_alloc: "o" is "option" or "other"
|
||||||
* @sk_wmem_queued: persistent queue size
|
* @sk_wmem_queued: persistent queue size
|
||||||
* @sk_forward_alloc: space allocated forward
|
* @sk_forward_alloc: space allocated forward
|
||||||
|
@ -205,6 +206,7 @@ struct sock {
|
||||||
atomic_t sk_omem_alloc;
|
atomic_t sk_omem_alloc;
|
||||||
struct sk_buff_head sk_receive_queue;
|
struct sk_buff_head sk_receive_queue;
|
||||||
struct sk_buff_head sk_write_queue;
|
struct sk_buff_head sk_write_queue;
|
||||||
|
struct sk_buff_head sk_async_wait_queue;
|
||||||
int sk_wmem_queued;
|
int sk_wmem_queued;
|
||||||
int sk_forward_alloc;
|
int sk_forward_alloc;
|
||||||
gfp_t sk_allocation;
|
gfp_t sk_allocation;
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/cache.h>
|
#include <linux/cache.h>
|
||||||
#include <linux/percpu.h>
|
#include <linux/percpu.h>
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/dmaengine.h>
|
||||||
|
|
||||||
#include <net/inet_connection_sock.h>
|
#include <net/inet_connection_sock.h>
|
||||||
#include <net/inet_timewait_sock.h>
|
#include <net/inet_timewait_sock.h>
|
||||||
|
@ -817,6 +818,12 @@ static inline void tcp_prequeue_init(struct tcp_sock *tp)
|
||||||
tp->ucopy.len = 0;
|
tp->ucopy.len = 0;
|
||||||
tp->ucopy.memory = 0;
|
tp->ucopy.memory = 0;
|
||||||
skb_queue_head_init(&tp->ucopy.prequeue);
|
skb_queue_head_init(&tp->ucopy.prequeue);
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
tp->ucopy.dma_chan = NULL;
|
||||||
|
tp->ucopy.wakeup = 0;
|
||||||
|
tp->ucopy.pinned_list = NULL;
|
||||||
|
tp->ucopy.dma_cookie = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Packet is added to VJ-style prequeue for processing in process
|
/* Packet is added to VJ-style prequeue for processing in process
|
||||||
|
|
|
@ -832,6 +832,9 @@ struct sock *sk_clone(const struct sock *sk, const gfp_t priority)
|
||||||
atomic_set(&newsk->sk_omem_alloc, 0);
|
atomic_set(&newsk->sk_omem_alloc, 0);
|
||||||
skb_queue_head_init(&newsk->sk_receive_queue);
|
skb_queue_head_init(&newsk->sk_receive_queue);
|
||||||
skb_queue_head_init(&newsk->sk_write_queue);
|
skb_queue_head_init(&newsk->sk_write_queue);
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
skb_queue_head_init(&newsk->sk_async_wait_queue);
|
||||||
|
#endif
|
||||||
|
|
||||||
rwlock_init(&newsk->sk_dst_lock);
|
rwlock_init(&newsk->sk_dst_lock);
|
||||||
rwlock_init(&newsk->sk_callback_lock);
|
rwlock_init(&newsk->sk_callback_lock);
|
||||||
|
@ -1383,6 +1386,9 @@ void sock_init_data(struct socket *sock, struct sock *sk)
|
||||||
skb_queue_head_init(&sk->sk_receive_queue);
|
skb_queue_head_init(&sk->sk_receive_queue);
|
||||||
skb_queue_head_init(&sk->sk_write_queue);
|
skb_queue_head_init(&sk->sk_write_queue);
|
||||||
skb_queue_head_init(&sk->sk_error_queue);
|
skb_queue_head_init(&sk->sk_error_queue);
|
||||||
|
#ifdef CONFIG_NET_DMA
|
||||||
|
skb_queue_head_init(&sk->sk_async_wait_queue);
|
||||||
|
#endif
|
||||||
|
|
||||||
sk->sk_send_head = NULL;
|
sk->sk_send_head = NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue