|
@@ -1163,24 +1163,7 @@ out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/* Copy as much information as possible into skb->dev_scratch to avoid
|
|
|
- * possibly multiple cache miss on dequeue();
|
|
|
- */
|
|
|
#if BITS_PER_LONG == 64
|
|
|
-
|
|
|
-/* we can store multiple info here: truesize, len and the bit needed to
|
|
|
- * compute skb_csum_unnecessary will be on cold cache lines at recvmsg
|
|
|
- * time.
|
|
|
- * skb->len can be stored on 16 bits since the udp header has been already
|
|
|
- * validated and pulled.
|
|
|
- */
|
|
|
-struct udp_dev_scratch {
|
|
|
- u32 truesize;
|
|
|
- u16 len;
|
|
|
- bool is_linear;
|
|
|
- bool csum_unnecessary;
|
|
|
-};
|
|
|
-
|
|
|
static void udp_set_dev_scratch(struct sk_buff *skb)
|
|
|
{
|
|
|
struct udp_dev_scratch *scratch;
|
|
@@ -1197,22 +1180,6 @@ static int udp_skb_truesize(struct sk_buff *skb)
|
|
|
{
|
|
|
return ((struct udp_dev_scratch *)&skb->dev_scratch)->truesize;
|
|
|
}
|
|
|
-
|
|
|
-static unsigned int udp_skb_len(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return ((struct udp_dev_scratch *)&skb->dev_scratch)->len;
|
|
|
-}
|
|
|
-
|
|
|
-static bool udp_skb_csum_unnecessary(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return ((struct udp_dev_scratch *)&skb->dev_scratch)->csum_unnecessary;
|
|
|
-}
|
|
|
-
|
|
|
-static bool udp_skb_is_linear(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return ((struct udp_dev_scratch *)&skb->dev_scratch)->is_linear;
|
|
|
-}
|
|
|
-
|
|
|
#else
|
|
|
static void udp_set_dev_scratch(struct sk_buff *skb)
|
|
|
{
|
|
@@ -1223,21 +1190,6 @@ static int udp_skb_truesize(struct sk_buff *skb)
|
|
|
{
|
|
|
return skb->dev_scratch;
|
|
|
}
|
|
|
-
|
|
|
-static unsigned int udp_skb_len(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return skb->len;
|
|
|
-}
|
|
|
-
|
|
|
-static bool udp_skb_csum_unnecessary(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return skb_csum_unnecessary(skb);
|
|
|
-}
|
|
|
-
|
|
|
-static bool udp_skb_is_linear(struct sk_buff *skb)
|
|
|
-{
|
|
|
- return !skb_is_nonlinear(skb);
|
|
|
-}
|
|
|
#endif
|
|
|
|
|
|
/* fully reclaim rmem/fwd memory allocated for skb */
|
|
@@ -1598,18 +1550,6 @@ busy_check:
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(__skb_recv_udp);
|
|
|
|
|
|
-static int copy_linear_skb(struct sk_buff *skb, int len, int off,
|
|
|
- struct iov_iter *to)
|
|
|
-{
|
|
|
- int n, copy = len - off;
|
|
|
-
|
|
|
- n = copy_to_iter(skb->data + off, copy, to);
|
|
|
- if (n == copy)
|
|
|
- return 0;
|
|
|
-
|
|
|
- return -EFAULT;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* This should be easy, if there is something there we
|
|
|
* return it, otherwise we block.
|