Commit 97fc2f08 authored by Chris Leech's avatar Chris Leech Committed by David S. Miller

[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: default avatarChris Leech <christopher.leech@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent de5506e1
...@@ -29,6 +29,7 @@ ...@@ -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 { ...@@ -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 @@ ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment