aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ehea
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ehea')
-rw-r--r--drivers/net/ehea/ehea_main.c29
-rw-r--r--drivers/net/ehea/ehea_qmr.c4
2 files changed, 17 insertions, 16 deletions
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index 41bd7aeafd82..7b62336e6736 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -189,8 +189,8 @@ static void ehea_update_firmware_handles(void)
189 for (k = 0; k < EHEA_MAX_PORTS; k++) { 189 for (k = 0; k < EHEA_MAX_PORTS; k++) {
190 struct ehea_port *port = adapter->port[k]; 190 struct ehea_port *port = adapter->port[k];
191 191
192 if (!port || (port->state != EHEA_PORT_UP) 192 if (!port || (port->state != EHEA_PORT_UP) ||
193 || (num_ports == 0)) 193 (num_ports == 0))
194 continue; 194 continue;
195 195
196 for (l = 0; 196 for (l = 0;
@@ -447,7 +447,9 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr,
447 max_index_mask = q_skba->len - 1; 447 max_index_mask = q_skba->len - 1;
448 for (i = 0; i < fill_wqes; i++) { 448 for (i = 0; i < fill_wqes; i++) {
449 u64 tmp_addr; 449 u64 tmp_addr;
450 struct sk_buff *skb = netdev_alloc_skb(dev, packet_size); 450 struct sk_buff *skb;
451
452 skb = netdev_alloc_skb_ip_align(dev, packet_size);
451 if (!skb) { 453 if (!skb) {
452 q_skba->os_skbs = fill_wqes - i; 454 q_skba->os_skbs = fill_wqes - i;
453 if (q_skba->os_skbs == q_skba->len - 2) { 455 if (q_skba->os_skbs == q_skba->len - 2) {
@@ -457,7 +459,6 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr,
457 } 459 }
458 break; 460 break;
459 } 461 }
460 skb_reserve(skb, NET_IP_ALIGN);
461 462
462 skb_arr[index] = skb; 463 skb_arr[index] = skb;
463 tmp_addr = ehea_map_vaddr(skb->data); 464 tmp_addr = ehea_map_vaddr(skb->data);
@@ -500,7 +501,7 @@ static int ehea_refill_rq2(struct ehea_port_res *pr, int nr_of_wqes)
500{ 501{
501 return ehea_refill_rq_def(pr, &pr->rq2_skba, 2, 502 return ehea_refill_rq_def(pr, &pr->rq2_skba, 2,
502 nr_of_wqes, EHEA_RWQE2_TYPE, 503 nr_of_wqes, EHEA_RWQE2_TYPE,
503 EHEA_RQ2_PKT_SIZE + NET_IP_ALIGN); 504 EHEA_RQ2_PKT_SIZE);
504} 505}
505 506
506 507
@@ -508,7 +509,7 @@ static int ehea_refill_rq3(struct ehea_port_res *pr, int nr_of_wqes)
508{ 509{
509 return ehea_refill_rq_def(pr, &pr->rq3_skba, 3, 510 return ehea_refill_rq_def(pr, &pr->rq3_skba, 3,
510 nr_of_wqes, EHEA_RWQE3_TYPE, 511 nr_of_wqes, EHEA_RWQE3_TYPE,
511 EHEA_MAX_PACKET_SIZE + NET_IP_ALIGN); 512 EHEA_MAX_PACKET_SIZE);
512} 513}
513 514
514static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num) 515static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num)
@@ -656,8 +657,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, 657static void ehea_proc_skb(struct ehea_port_res *pr, struct ehea_cqe *cqe,
657 struct sk_buff *skb) 658 struct sk_buff *skb)
658{ 659{
659 int vlan_extracted = (cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) 660 int vlan_extracted = ((cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) &&
660 && pr->port->vgrp; 661 pr->port->vgrp);
661 662
662 if (use_lro) { 663 if (use_lro) {
663 if (vlan_extracted) 664 if (vlan_extracted)
@@ -1388,8 +1389,8 @@ out:
1388 1389
1389int ehea_rem_smrs(struct ehea_port_res *pr) 1390int ehea_rem_smrs(struct ehea_port_res *pr)
1390{ 1391{
1391 if ((ehea_rem_mr(&pr->send_mr)) 1392 if ((ehea_rem_mr(&pr->send_mr)) ||
1392 || (ehea_rem_mr(&pr->recv_mr))) 1393 (ehea_rem_mr(&pr->recv_mr)))
1393 return -EIO; 1394 return -EIO;
1394 else 1395 else
1395 return 0; 1396 return 0;
@@ -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;
diff --git a/drivers/net/ehea/ehea_qmr.c b/drivers/net/ehea/ehea_qmr.c
index bc7c5b7abb88..18d405f78c0f 100644
--- a/drivers/net/ehea/ehea_qmr.c
+++ b/drivers/net/ehea/ehea_qmr.c
@@ -837,8 +837,8 @@ static u64 ehea_reg_mr_section(int top, int dir, int idx, u64 *pt,
837 hret = ehea_h_register_rpage_mr(adapter->handle, mr->handle, 0, 837 hret = ehea_h_register_rpage_mr(adapter->handle, mr->handle, 0,
838 0, pt_abs, EHEA_MAX_RPAGE); 838 0, pt_abs, EHEA_MAX_RPAGE);
839 839
840 if ((hret != H_SUCCESS) 840 if ((hret != H_SUCCESS) &&
841 && (hret != H_PAGE_REGISTERED)) { 841 (hret != H_PAGE_REGISTERED)) {
842 ehea_h_free_resource(adapter->handle, mr->handle, 842 ehea_h_free_resource(adapter->handle, mr->handle,
843 FORCE_FREE); 843 FORCE_FREE);
844 ehea_error("register_rpage_mr failed"); 844 ehea_error("register_rpage_mr failed");