aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ehea/ehea_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ehea/ehea_main.c')
-rw-r--r--drivers/net/ehea/ehea_main.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index 41bd7aeafd82..809ccc9ff09c 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -32,6 +32,7 @@
32#include <linux/udp.h> 32#include <linux/udp.h>
33#include <linux/if.h> 33#include <linux/if.h>
34#include <linux/list.h> 34#include <linux/list.h>
35#include <linux/slab.h>
35#include <linux/if_ether.h> 36#include <linux/if_ether.h>
36#include <linux/notifier.h> 37#include <linux/notifier.h>
37#include <linux/reboot.h> 38#include <linux/reboot.h>
@@ -189,8 +190,8 @@ static void ehea_update_firmware_handles(void)
189 for (k = 0; k < EHEA_MAX_PORTS; k++) { 190 for (k = 0; k < EHEA_MAX_PORTS; k++) {
190 struct ehea_port *port = adapter->port[k]; 191 struct ehea_port *port = adapter->port[k];
191 192
192 if (!port || (port->state != EHEA_PORT_UP) 193 if (!port || (port->state != EHEA_PORT_UP) ||
193 || (num_ports == 0)) 194 (num_ports == 0))
194 continue; 195 continue;
195 196
196 for (l = 0; 197 for (l = 0;
@@ -447,7 +448,9 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr,
447 max_index_mask = q_skba->len - 1; 448 max_index_mask = q_skba->len - 1;
448 for (i = 0; i < fill_wqes; i++) { 449 for (i = 0; i < fill_wqes; i++) {
449 u64 tmp_addr; 450 u64 tmp_addr;
450 struct sk_buff *skb = netdev_alloc_skb(dev, packet_size); 451 struct sk_buff *skb;
452
453 skb = netdev_alloc_skb_ip_align(dev, packet_size);
451 if (!skb) { 454 if (!skb) {
452 q_skba->os_skbs = fill_wqes - i; 455 q_skba->os_skbs = fill_wqes - i;
453 if (q_skba->os_skbs == q_skba->len - 2) { 456 if (q_skba->os_skbs == q_skba->len - 2) {
@@ -457,7 +460,6 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr,
457 } 460 }
458 break; 461 break;
459 } 462 }
460 skb_reserve(skb, NET_IP_ALIGN);
461 463
462 skb_arr[index] = skb; 464 skb_arr[index] = skb;
463 tmp_addr = ehea_map_vaddr(skb->data); 465 tmp_addr = ehea_map_vaddr(skb->data);
@@ -500,7 +502,7 @@ static int ehea_refill_rq2(struct ehea_port_res *pr, int nr_of_wqes)
500{ 502{
501 return ehea_refill_rq_def(pr, &pr->rq2_skba, 2, 503 return ehea_refill_rq_def(pr, &pr->rq2_skba, 2,
502 nr_of_wqes, EHEA_RWQE2_TYPE, 504 nr_of_wqes, EHEA_RWQE2_TYPE,
503 EHEA_RQ2_PKT_SIZE + NET_IP_ALIGN); 505 EHEA_RQ2_PKT_SIZE);
504} 506}
505 507
506 508
@@ -508,7 +510,7 @@ static int ehea_refill_rq3(struct ehea_port_res *pr, int nr_of_wqes)
508{ 510{
509 return ehea_refill_rq_def(pr, &pr->rq3_skba, 3, 511 return ehea_refill_rq_def(pr, &pr->rq3_skba, 3,
510 nr_of_wqes, EHEA_RWQE3_TYPE, 512 nr_of_wqes, EHEA_RWQE3_TYPE,
511 EHEA_MAX_PACKET_SIZE + NET_IP_ALIGN); 513 EHEA_MAX_PACKET_SIZE);
512} 514}
513 515
514static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num) 516static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num)
@@ -656,8 +658,8 @@ static int get_skb_hdr(struct sk_buff *skb, void **iphdr,
656static void ehea_proc_skb(struct ehea_port_res *pr, struct ehea_cqe *cqe, 658static void ehea_proc_skb(struct ehea_port_res *pr, struct ehea_cqe *cqe,
657 struct sk_buff *skb) 659 struct sk_buff *skb)
658{ 660{
659 int vlan_extracted = (cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) 661 int vlan_extracted = ((cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) &&
660 && pr->port->vgrp; 662 pr->port->vgrp);
661 663
662 if (use_lro) { 664 if (use_lro) {
663 if (vlan_extracted) 665 if (vlan_extracted)
@@ -1388,8 +1390,8 @@ out:
1388 1390
1389int ehea_rem_smrs(struct ehea_port_res *pr) 1391int ehea_rem_smrs(struct ehea_port_res *pr)
1390{ 1392{
1391 if ((ehea_rem_mr(&pr->send_mr)) 1393 if ((ehea_rem_mr(&pr->send_mr)) ||
1392 || (ehea_rem_mr(&pr->recv_mr))) 1394 (ehea_rem_mr(&pr->recv_mr)))
1393 return -EIO; 1395 return -EIO;
1394 else 1396 else
1395 return 0; 1397 return 0;
@@ -1966,7 +1968,7 @@ static void ehea_set_multicast_list(struct net_device *dev)
1966{ 1968{
1967 struct ehea_port *port = netdev_priv(dev); 1969 struct ehea_port *port = netdev_priv(dev);
1968 struct dev_mc_list *k_mcl_entry; 1970 struct dev_mc_list *k_mcl_entry;
1969 int ret, i; 1971 int ret;
1970 1972
1971 if (dev->flags & IFF_PROMISC) { 1973 if (dev->flags & IFF_PROMISC) {
1972 ehea_promiscuous(dev, 1); 1974 ehea_promiscuous(dev, 1);
@@ -1980,7 +1982,7 @@ static void ehea_set_multicast_list(struct net_device *dev)
1980 } 1982 }
1981 ehea_allmulti(dev, 0); 1983 ehea_allmulti(dev, 0);
1982 1984
1983 if (dev->mc_count) { 1985 if (!netdev_mc_empty(dev)) {
1984 ret = ehea_drop_multicast_list(dev); 1986 ret = ehea_drop_multicast_list(dev);
1985 if (ret) { 1987 if (ret) {
1986 /* Dropping the current multicast list failed. 1988 /* Dropping the current multicast list failed.
@@ -1989,15 +1991,14 @@ static void ehea_set_multicast_list(struct net_device *dev)
1989 ehea_allmulti(dev, 1); 1991 ehea_allmulti(dev, 1);
1990 } 1992 }
1991 1993
1992 if (dev->mc_count > port->adapter->max_mc_mac) { 1994 if (netdev_mc_count(dev) > port->adapter->max_mc_mac) {
1993 ehea_info("Mcast registration limit reached (0x%llx). " 1995 ehea_info("Mcast registration limit reached (0x%llx). "
1994 "Use ALLMULTI!", 1996 "Use ALLMULTI!",
1995 port->adapter->max_mc_mac); 1997 port->adapter->max_mc_mac);
1996 goto out; 1998 goto out;
1997 } 1999 }
1998 2000
1999 for (i = 0, k_mcl_entry = dev->mc_list; i < dev->mc_count; i++, 2001 netdev_for_each_mc_addr(k_mcl_entry, dev)
2000 k_mcl_entry = k_mcl_entry->next)
2001 ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr); 2002 ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr);
2002 2003
2003 } 2004 }
@@ -2030,8 +2031,8 @@ static void ehea_xmit2(struct sk_buff *skb, struct net_device *dev,
2030 write_ip_start_end(swqe, skb); 2031 write_ip_start_end(swqe, skb);
2031 2032
2032 if (iph->protocol == IPPROTO_UDP) { 2033 if (iph->protocol == IPPROTO_UDP) {
2033 if ((iph->frag_off & IP_MF) 2034 if ((iph->frag_off & IP_MF) ||
2034 || (iph->frag_off & IP_OFFSET)) 2035 (iph->frag_off & IP_OFFSET))
2035 /* IP fragment, so don't change cs */ 2036 /* IP fragment, so don't change cs */
2036 swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM; 2037 swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM;
2037 else 2038 else
@@ -2076,8 +2077,8 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev,
2076 write_tcp_offset_end(swqe, skb); 2077 write_tcp_offset_end(swqe, skb);
2077 2078
2078 } else if (iph->protocol == IPPROTO_UDP) { 2079 } else if (iph->protocol == IPPROTO_UDP) {
2079 if ((iph->frag_off & IP_MF) 2080 if ((iph->frag_off & IP_MF) ||
2080 || (iph->frag_off & IP_OFFSET)) 2081 (iph->frag_off & IP_OFFSET))
2081 /* IP fragment, so don't change cs */ 2082 /* IP fragment, so don't change cs */
2082 swqe->tx_control |= EHEA_SWQE_CRC 2083 swqe->tx_control |= EHEA_SWQE_CRC
2083 | EHEA_SWQE_IMM_DATA_PRESENT; 2084 | EHEA_SWQE_IMM_DATA_PRESENT;