Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0645cfd authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents fae846e2 104b4859
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1150,13 +1150,16 @@ static void qeth_notify_skbs(struct qeth_qdio_out_q *q,

static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf)
{
	struct sk_buff *skb;

	/* release may never happen from within CQ tasklet scope */
	WARN_ON_ONCE(atomic_read(&buf->state) == QETH_QDIO_BUF_IN_CQ);

	if (atomic_read(&buf->state) == QETH_QDIO_BUF_PENDING)
		qeth_notify_skbs(buf->q, buf, TX_NOTIFY_GENERALERROR);

	__skb_queue_purge(&buf->skb_list);
	while ((skb = __skb_dequeue(&buf->skb_list)) != NULL)
		consume_skb(skb);
}

static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
+3 −4
Original line number Diff line number Diff line
@@ -629,8 +629,7 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb,
	} /* else fall through */

	QETH_TXQ_STAT_INC(queue, tx_dropped);
	QETH_TXQ_STAT_INC(queue, tx_errors);
	dev_kfree_skb_any(skb);
	kfree_skb(skb);
	netif_wake_queue(dev);
	return NETDEV_TX_OK;
}
@@ -645,6 +644,8 @@ static int qeth_l2_probe_device(struct ccwgroup_device *gdev)
	struct qeth_card *card = dev_get_drvdata(&gdev->dev);
	int rc;

	qeth_l2_vnicc_set_defaults(card);

	if (gdev->dev.type == &qeth_generic_devtype) {
		rc = qeth_l2_create_device_attributes(&gdev->dev);
		if (rc)
@@ -652,8 +653,6 @@ static int qeth_l2_probe_device(struct ccwgroup_device *gdev)
	}

	hash_init(card->mac_htable);
	card->info.hwtrap = 0;
	qeth_l2_vnicc_set_defaults(card);
	return 0;
}

+4 −4
Original line number Diff line number Diff line
@@ -2096,8 +2096,7 @@ static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,

tx_drop:
	QETH_TXQ_STAT_INC(queue, tx_dropped);
	QETH_TXQ_STAT_INC(queue, tx_errors);
	dev_kfree_skb_any(skb);
	kfree_skb(skb);
	netif_wake_queue(dev);
	return NETDEV_TX_OK;
}
@@ -2253,14 +2252,15 @@ static int qeth_l3_probe_device(struct ccwgroup_device *gdev)
	struct qeth_card *card = dev_get_drvdata(&gdev->dev);
	int rc;

	hash_init(card->ip_htable);

	if (gdev->dev.type == &qeth_generic_devtype) {
		rc = qeth_l3_create_device_attributes(&gdev->dev);
		if (rc)
			return rc;
	}
	hash_init(card->ip_htable);

	hash_init(card->ip_mc_htable);
	card->info.hwtrap = 0;
	return 0;
}