aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-06-05 19:22:02 -0400
committerDavid S. Miller <davem@davemloft.net>2014-06-05 19:22:02 -0400
commitf666f87b9423fb534d2116206ace04495080f2b5 (patch)
tree23f929c890219d6ef412b4ff630adf501b70a3ec
parent46cfd6ea23b0a207c87269d86457727dc4485708 (diff)
parent0dcceabb0c1bf2d4c12a748df9933fad303072a7 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/xen-netback/netback.c net/core/filter.c A filter bug fix overlapped some cleanups and a conversion over to some new insn generation macros. A xen-netback bug fix overlapped the addition of multi-queue support. Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/amd/hplance.c4
-rw-r--r--drivers/net/ethernet/amd/mvme147.c6
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c6
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c3
-rw-r--r--drivers/net/xen-netback/netback.c36
-rw-r--r--net/core/filter.c8
-rw-r--r--net/ipv6/udp.c8
7 files changed, 48 insertions, 23 deletions
diff --git a/drivers/net/ethernet/amd/hplance.c b/drivers/net/ethernet/amd/hplance.c
index 47ce57c2c893..6c9de117ffc6 100644
--- a/drivers/net/ethernet/amd/hplance.c
+++ b/drivers/net/ethernet/amd/hplance.c
@@ -27,9 +27,9 @@
27 27
28#include "hplance.h" 28#include "hplance.h"
29 29
30/* We have 16834 bytes of RAM for the init block and buffers. This places 30/* We have 16392 bytes of RAM for the init block and buffers. This places
31 * an upper limit on the number of buffers we can use. NetBSD uses 8 Rx 31 * an upper limit on the number of buffers we can use. NetBSD uses 8 Rx
32 * buffers and 2 Tx buffers. 32 * buffers and 2 Tx buffers, it takes (8 + 2) * 1544 bytes.
33 */ 33 */
34#define LANCE_LOG_TX_BUFFERS 1 34#define LANCE_LOG_TX_BUFFERS 1
35#define LANCE_LOG_RX_BUFFERS 3 35#define LANCE_LOG_RX_BUFFERS 3
diff --git a/drivers/net/ethernet/amd/mvme147.c b/drivers/net/ethernet/amd/mvme147.c
index 0e8399dec054..0660ac5846bb 100644
--- a/drivers/net/ethernet/amd/mvme147.c
+++ b/drivers/net/ethernet/amd/mvme147.c
@@ -26,9 +26,9 @@
26#include <asm/pgtable.h> 26#include <asm/pgtable.h>
27#include <asm/mvme147hw.h> 27#include <asm/mvme147hw.h>
28 28
29/* We have 16834 bytes of RAM for the init block and buffers. This places 29/* We have 32K of RAM for the init block and buffers. This places
30 * an upper limit on the number of buffers we can use. NetBSD uses 8 Rx 30 * an upper limit on the number of buffers we can use. NetBSD uses 8 Rx
31 * buffers and 2 Tx buffers. 31 * buffers and 2 Tx buffers, it takes (8 + 2) * 1544 bytes.
32 */ 32 */
33#define LANCE_LOG_TX_BUFFERS 1 33#define LANCE_LOG_TX_BUFFERS 1
34#define LANCE_LOG_RX_BUFFERS 3 34#define LANCE_LOG_RX_BUFFERS 3
@@ -111,7 +111,7 @@ struct net_device * __init mvme147lance_probe(int unit)
111 dev->dev_addr); 111 dev->dev_addr);
112 112
113 lp = netdev_priv(dev); 113 lp = netdev_priv(dev);
114 lp->ram = __get_dma_pages(GFP_ATOMIC, 3); /* 16K */ 114 lp->ram = __get_dma_pages(GFP_ATOMIC, 3); /* 32K */
115 if (!lp->ram) { 115 if (!lp->ram) {
116 printk("%s: No memory for LANCE buffers\n", dev->name); 116 printk("%s: No memory for LANCE buffers\n", dev->name);
117 free_netdev(dev); 117 free_netdev(dev);
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 0cc8b8d205fe..16f46f1224ba 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1384,6 +1384,9 @@ static int gfar_probe(struct platform_device *ofdev)
1384 1384
1385 gfar_hw_init(priv); 1385 gfar_hw_init(priv);
1386 1386
1387 /* Carrier starts down, phylib will bring it up */
1388 netif_carrier_off(dev);
1389
1387 err = register_netdev(dev); 1390 err = register_netdev(dev);
1388 1391
1389 if (err) { 1392 if (err) {
@@ -1391,9 +1394,6 @@ static int gfar_probe(struct platform_device *ofdev)
1391 goto register_fail; 1394 goto register_fail;
1392 } 1395 }
1393 1396
1394 /* Carrier starts down, phylib will bring it up */
1395 netif_carrier_off(dev);
1396
1397 device_init_wakeup(&dev->dev, 1397 device_init_wakeup(&dev->dev,
1398 priv->device_flags & 1398 priv->device_flags &
1399 FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); 1399 FSL_GIANFAR_DEV_HAS_MAGIC_PACKET);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
index 2bdd9deffb38..1659c804f1d5 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
@@ -458,6 +458,7 @@ static int qlcnic_sriov_get_vf_acl(struct qlcnic_adapter *adapter)
458 struct qlcnic_cmd_args cmd; 458 struct qlcnic_cmd_args cmd;
459 int ret = 0; 459 int ret = 0;
460 460
461 memset(&cmd, 0, sizeof(cmd));
461 ret = qlcnic_sriov_alloc_bc_mbx_args(&cmd, QLCNIC_BC_CMD_GET_ACL); 462 ret = qlcnic_sriov_alloc_bc_mbx_args(&cmd, QLCNIC_BC_CMD_GET_ACL);
462 if (ret) 463 if (ret)
463 return ret; 464 return ret;
@@ -1463,6 +1464,7 @@ static int qlcnic_sriov_channel_cfg_cmd(struct qlcnic_adapter *adapter, u8 cmd_o
1463 struct qlcnic_vf_info *vf = &adapter->ahw->sriov->vf_info[0]; 1464 struct qlcnic_vf_info *vf = &adapter->ahw->sriov->vf_info[0];
1464 int ret; 1465 int ret;
1465 1466
1467 memset(&cmd, 0, sizeof(cmd));
1466 if (qlcnic_sriov_alloc_bc_mbx_args(&cmd, cmd_op)) 1468 if (qlcnic_sriov_alloc_bc_mbx_args(&cmd, cmd_op))
1467 return -ENOMEM; 1469 return -ENOMEM;
1468 1470
@@ -2033,6 +2035,7 @@ int qlcnic_sriov_cfg_vf_guest_vlan(struct qlcnic_adapter *adapter,
2033 struct qlcnic_cmd_args cmd; 2035 struct qlcnic_cmd_args cmd;
2034 int ret; 2036 int ret;
2035 2037
2038 memset(&cmd, 0, sizeof(cmd));
2036 if (vid == 0) 2039 if (vid == 0)
2037 return 0; 2040 return 0;
2038 2041
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 49efff9b99f4..1844a47636b6 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -168,7 +168,8 @@ bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue, int needed)
168 * adding 'size' bytes to a buffer which currently contains 'offset' 168 * adding 'size' bytes to a buffer which currently contains 'offset'
169 * bytes. 169 * bytes.
170 */ 170 */
171static bool start_new_rx_buffer(int offset, unsigned long size, int head) 171static bool start_new_rx_buffer(int offset, unsigned long size, int head,
172 bool full_coalesce)
172{ 173{
173 /* simple case: we have completely filled the current buffer. */ 174 /* simple case: we have completely filled the current buffer. */
174 if (offset == MAX_BUFFER_OFFSET) 175 if (offset == MAX_BUFFER_OFFSET)
@@ -180,6 +181,7 @@ static bool start_new_rx_buffer(int offset, unsigned long size, int head)
180 * (i) this frag would fit completely in the next buffer 181 * (i) this frag would fit completely in the next buffer
181 * and (ii) there is already some data in the current buffer 182 * and (ii) there is already some data in the current buffer
182 * and (iii) this is not the head buffer. 183 * and (iii) this is not the head buffer.
184 * and (iv) there is no need to fully utilize the buffers
183 * 185 *
184 * Where: 186 * Where:
185 * - (i) stops us splitting a frag into two copies 187 * - (i) stops us splitting a frag into two copies
@@ -190,6 +192,8 @@ static bool start_new_rx_buffer(int offset, unsigned long size, int head)
190 * by (ii) but is explicitly checked because 192 * by (ii) but is explicitly checked because
191 * netfront relies on the first buffer being 193 * netfront relies on the first buffer being
192 * non-empty and can crash otherwise. 194 * non-empty and can crash otherwise.
195 * - (iv) is needed for skbs which can use up more than MAX_SKB_FRAGS
196 * slot
193 * 197 *
194 * This means we will effectively linearise small 198 * This means we will effectively linearise small
195 * frags but do not needlessly split large buffers 199 * frags but do not needlessly split large buffers
@@ -197,7 +201,8 @@ static bool start_new_rx_buffer(int offset, unsigned long size, int head)
197 * own buffers as before. 201 * own buffers as before.
198 */ 202 */
199 BUG_ON(size > MAX_BUFFER_OFFSET); 203 BUG_ON(size > MAX_BUFFER_OFFSET);
200 if ((offset + size > MAX_BUFFER_OFFSET) && offset && !head) 204 if ((offset + size > MAX_BUFFER_OFFSET) && offset && !head &&
205 !full_coalesce)
201 return true; 206 return true;
202 207
203 return false; 208 return false;
@@ -232,6 +237,13 @@ static struct xenvif_rx_meta *get_next_rx_buffer(struct xenvif_queue *queue,
232 return meta; 237 return meta;
233} 238}
234 239
240struct xenvif_rx_cb {
241 int meta_slots_used;
242 bool full_coalesce;
243};
244
245#define XENVIF_RX_CB(skb) ((struct xenvif_rx_cb *)(skb)->cb)
246
235/* 247/*
236 * Set up the grant operations for this fragment. If it's a flipping 248 * Set up the grant operations for this fragment. If it's a flipping
237 * interface, we also set up the unmap request from here. 249 * interface, we also set up the unmap request from here.
@@ -266,7 +278,10 @@ static void xenvif_gop_frag_copy(struct xenvif_queue *queue, struct sk_buff *skb
266 if (bytes > size) 278 if (bytes > size)
267 bytes = size; 279 bytes = size;
268 280
269 if (start_new_rx_buffer(npo->copy_off, bytes, *head)) { 281 if (start_new_rx_buffer(npo->copy_off,
282 bytes,
283 *head,
284 XENVIF_RX_CB(skb)->full_coalesce)) {
270 /* 285 /*
271 * Netfront requires there to be some data in the head 286 * Netfront requires there to be some data in the head
272 * buffer. 287 * buffer.
@@ -548,12 +563,6 @@ static void xenvif_add_frag_responses(struct xenvif_queue *queue, int status,
548 } 563 }
549} 564}
550 565
551struct xenvif_rx_cb {
552 int meta_slots_used;
553};
554
555#define XENVIF_RX_CB(skb) ((struct xenvif_rx_cb *)(skb)->cb)
556
557void xenvif_kick_thread(struct xenvif_queue *queue) 566void xenvif_kick_thread(struct xenvif_queue *queue)
558{ 567{
559 wake_up(&queue->wq); 568 wake_up(&queue->wq);
@@ -609,10 +618,15 @@ static void xenvif_rx_action(struct xenvif_queue *queue)
609 618
610 /* To avoid the estimate becoming too pessimal for some 619 /* To avoid the estimate becoming too pessimal for some
611 * frontends that limit posted rx requests, cap the estimate 620 * frontends that limit posted rx requests, cap the estimate
612 * at MAX_SKB_FRAGS. 621 * at MAX_SKB_FRAGS. In this case netback will fully coalesce
622 * the skb into the provided slots.
613 */ 623 */
614 if (max_slots_needed > MAX_SKB_FRAGS) 624 if (max_slots_needed > MAX_SKB_FRAGS) {
615 max_slots_needed = MAX_SKB_FRAGS; 625 max_slots_needed = MAX_SKB_FRAGS;
626 XENVIF_RX_CB(skb)->full_coalesce = true;
627 } else {
628 XENVIF_RX_CB(skb)->full_coalesce = false;
629 }
616 630
617 /* We may need one more slot for GSO metadata */ 631 /* We may need one more slot for GSO metadata */
618 if (skb_is_gso(skb) && 632 if (skb_is_gso(skb) &&
diff --git a/net/core/filter.c b/net/core/filter.c
index 9de0c25323b4..6bd2e350e751 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -584,7 +584,11 @@ load_byte:
584 * to make sure its still a 3bit field starting at a byte boundary; 584 * to make sure its still a 3bit field starting at a byte boundary;
585 * taken from arch/x86/net/bpf_jit_comp.c. 585 * taken from arch/x86/net/bpf_jit_comp.c.
586 */ 586 */
587#ifdef __BIG_ENDIAN_BITFIELD
588#define PKT_TYPE_MAX (7 << 5)
589#else
587#define PKT_TYPE_MAX 7 590#define PKT_TYPE_MAX 7
591#endif
588static unsigned int pkt_type_offset(void) 592static unsigned int pkt_type_offset(void)
589{ 593{
590 struct sk_buff skb_probe = { .pkt_type = ~0, }; 594 struct sk_buff skb_probe = { .pkt_type = ~0, };
@@ -685,6 +689,10 @@ static bool convert_bpf_extensions(struct sock_filter *fp,
685 return false; 689 return false;
686 insn++; 690 insn++;
687 *insn = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, PKT_TYPE_MAX); 691 *insn = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, PKT_TYPE_MAX);
692#ifdef __BIG_ENDIAN_BITFIELD
693 insn++;
694 *insn = BPF_ALU32_IMM(BPF_RSH, BPF_REG_A, 5);
695#endif
688 break; 696 break;
689 697
690 case SKF_AD_OFF + SKF_AD_IFINDEX: 698 case SKF_AD_OFF + SKF_AD_IFINDEX:
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 60325236446a..4180f54a948e 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -720,15 +720,15 @@ static struct sock *udp_v6_mcast_next(struct net *net, struct sock *sk,
720 if (inet->inet_dport != rmt_port) 720 if (inet->inet_dport != rmt_port)
721 continue; 721 continue;
722 } 722 }
723 if (!ipv6_addr_any(&sk->sk_v6_daddr) && 723 if (!ipv6_addr_any(&s->sk_v6_daddr) &&
724 !ipv6_addr_equal(&sk->sk_v6_daddr, rmt_addr)) 724 !ipv6_addr_equal(&s->sk_v6_daddr, rmt_addr))
725 continue; 725 continue;
726 726
727 if (s->sk_bound_dev_if && s->sk_bound_dev_if != dif) 727 if (s->sk_bound_dev_if && s->sk_bound_dev_if != dif)
728 continue; 728 continue;
729 729
730 if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) { 730 if (!ipv6_addr_any(&s->sk_v6_rcv_saddr)) {
731 if (!ipv6_addr_equal(&sk->sk_v6_rcv_saddr, loc_addr)) 731 if (!ipv6_addr_equal(&s->sk_v6_rcv_saddr, loc_addr))
732 continue; 732 continue;
733 } 733 }
734 if (!inet6_mc_check(s, loc_addr, rmt_addr)) 734 if (!inet6_mc_check(s, loc_addr, rmt_addr))