diff options
Diffstat (limited to 'drivers/s390/net/qeth_l3_main.c')
| -rw-r--r-- | drivers/s390/net/qeth_l3_main.c | 33 | 
1 files changed, 10 insertions, 23 deletions
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index 2dd99f103671..d7bfc7a0e4c0 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c @@ -1435,27 +1435,19 @@ static void qeth_l3_stop_card(struct qeth_card *card)  	flush_workqueue(card->event_wq);  } -/* - * test for and Switch promiscuous mode (on or off) - *  either for guestlan or HiperSocket Sniffer - */ -static void -qeth_l3_handle_promisc_mode(struct qeth_card *card) +static void qeth_l3_set_promisc_mode(struct qeth_card *card)  { -	struct net_device *dev = card->dev; +	bool enable = card->dev->flags & IFF_PROMISC; -	if (((dev->flags & IFF_PROMISC) && -	     (card->info.promisc_mode == SET_PROMISC_MODE_ON)) || -	    (!(dev->flags & IFF_PROMISC) && -	     (card->info.promisc_mode == SET_PROMISC_MODE_OFF))) +	if (card->info.promisc_mode == enable)  		return;  	if (IS_VM_NIC(card)) {		/* Guestlan trace */  		if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) -			qeth_setadp_promisc_mode(card); +			qeth_setadp_promisc_mode(card, enable);  	} else if (card->options.sniffer &&	/* HiperSockets trace */  		   qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) { -		if (dev->flags & IFF_PROMISC) { +		if (enable) {  			QETH_CARD_TEXT(card, 3, "+promisc");  			qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE);  		} else { @@ -1502,11 +1494,9 @@ static void qeth_l3_rx_mode_work(struct work_struct *work)  				addr->disp_flag = QETH_DISP_ADDR_DELETE;  			}  		} - -		if (!qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) -			return;  	} -	qeth_l3_handle_promisc_mode(card); + +	qeth_l3_set_promisc_mode(card);  }  static int qeth_l3_arp_makerc(u16 rc) @@ -1967,7 +1957,6 @@ static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue,  			/* some HW requires combined L3+L4 csum offload: */  			if (ipv == 4)  				hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_HDR_REQ; -			QETH_TXQ_STAT_INC(queue, skbs_csum);  		}  	} @@ -2054,9 +2043,10 @@ static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,  	u16 txq = skb_get_queue_mapping(skb);  	int ipv = qeth_get_ip_version(skb);  	struct qeth_qdio_out_q *queue; -	int tx_bytes = skb->len;  	int rc; +	if (!skb_is_gso(skb)) +		qdisc_skb_cb(skb)->pkt_len = skb->len;  	if (IS_IQD(card)) {  		queue = card->qdio.out_qs[qeth_iqd_translate_txq(dev, txq)]; @@ -2079,11 +2069,8 @@ static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,  	else  		rc = qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header); -	if (!rc) { -		QETH_TXQ_STAT_INC(queue, tx_packets); -		QETH_TXQ_STAT_ADD(queue, tx_bytes, tx_bytes); +	if (!rc)  		return NETDEV_TX_OK; -	}  tx_drop:  	QETH_TXQ_STAT_INC(queue, tx_dropped);  |