Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 's390-qeth-fixes'

Julian Wiedmann says:

====================
s390/qeth: fixes 2019-03-18

please apply the following three patches to -net. The first two are fixes
for minor race conditions in the probe code, while the third one gets
dropwatch working (again).
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+11 -9
+4 -1
drivers/s390/net/qeth_core_main.c
··· 1150 1150 1151 1151 static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf) 1152 1152 { 1153 + struct sk_buff *skb; 1154 + 1153 1155 /* release may never happen from within CQ tasklet scope */ 1154 1156 WARN_ON_ONCE(atomic_read(&buf->state) == QETH_QDIO_BUF_IN_CQ); 1155 1157 1156 1158 if (atomic_read(&buf->state) == QETH_QDIO_BUF_PENDING) 1157 1159 qeth_notify_skbs(buf->q, buf, TX_NOTIFY_GENERALERROR); 1158 1160 1159 - __skb_queue_purge(&buf->skb_list); 1161 + while ((skb = __skb_dequeue(&buf->skb_list)) != NULL) 1162 + consume_skb(skb); 1160 1163 } 1161 1164 1162 1165 static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
+3 -4
drivers/s390/net/qeth_l2_main.c
··· 629 629 } /* else fall through */ 630 630 631 631 QETH_TXQ_STAT_INC(queue, tx_dropped); 632 - QETH_TXQ_STAT_INC(queue, tx_errors); 633 - dev_kfree_skb_any(skb); 632 + kfree_skb(skb); 634 633 netif_wake_queue(dev); 635 634 return NETDEV_TX_OK; 636 635 } ··· 644 645 struct qeth_card *card = dev_get_drvdata(&gdev->dev); 645 646 int rc; 646 647 648 + qeth_l2_vnicc_set_defaults(card); 649 + 647 650 if (gdev->dev.type == &qeth_generic_devtype) { 648 651 rc = qeth_l2_create_device_attributes(&gdev->dev); 649 652 if (rc) ··· 653 652 } 654 653 655 654 hash_init(card->mac_htable); 656 - card->info.hwtrap = 0; 657 - qeth_l2_vnicc_set_defaults(card); 658 655 return 0; 659 656 } 660 657
+4 -4
drivers/s390/net/qeth_l3_main.c
··· 2096 2096 2097 2097 tx_drop: 2098 2098 QETH_TXQ_STAT_INC(queue, tx_dropped); 2099 - QETH_TXQ_STAT_INC(queue, tx_errors); 2100 - dev_kfree_skb_any(skb); 2099 + kfree_skb(skb); 2101 2100 netif_wake_queue(dev); 2102 2101 return NETDEV_TX_OK; 2103 2102 } ··· 2252 2253 struct qeth_card *card = dev_get_drvdata(&gdev->dev); 2253 2254 int rc; 2254 2255 2256 + hash_init(card->ip_htable); 2257 + 2255 2258 if (gdev->dev.type == &qeth_generic_devtype) { 2256 2259 rc = qeth_l3_create_device_attributes(&gdev->dev); 2257 2260 if (rc) 2258 2261 return rc; 2259 2262 } 2260 - hash_init(card->ip_htable); 2263 + 2261 2264 hash_init(card->ip_mc_htable); 2262 - card->info.hwtrap = 0; 2263 2265 return 0; 2264 2266 } 2265 2267