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

Merge branch 's390-qeth-next'



Julian Wiedmann says:

====================
s390/qeth: updates 2021-03-18

please apply the following patch series for qeth to netdev's net-next
tree.

This brings two small optimizations (replace a hard-coded GFP_ATOMIC,
pass through the NAPI budget to enable napi_consume_skb()), and removes
some redundant VLAN filter code.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c2ed62b9 d96a8c69
Loading
Loading
Loading
Loading
+10 −8
Original line number Original line Diff line number Diff line
@@ -1453,7 +1453,7 @@ static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,


static void qeth_tx_complete_pending_bufs(struct qeth_card *card,
static void qeth_tx_complete_pending_bufs(struct qeth_card *card,
					  struct qeth_qdio_out_q *queue,
					  struct qeth_qdio_out_q *queue,
					  bool drain)
					  bool drain, int budget)
{
{
	struct qeth_qdio_out_buffer *buf, *tmp;
	struct qeth_qdio_out_buffer *buf, *tmp;


@@ -1465,7 +1465,7 @@ static void qeth_tx_complete_pending_bufs(struct qeth_card *card,
			if (drain)
			if (drain)
				qeth_notify_skbs(queue, buf,
				qeth_notify_skbs(queue, buf,
						 TX_NOTIFY_GENERALERROR);
						 TX_NOTIFY_GENERALERROR);
			qeth_tx_complete_buf(buf, drain, 0);
			qeth_tx_complete_buf(buf, drain, budget);


			list_del(&buf->list_entry);
			list_del(&buf->list_entry);
			kmem_cache_free(qeth_qdio_outbuf_cache, buf);
			kmem_cache_free(qeth_qdio_outbuf_cache, buf);
@@ -1477,7 +1477,7 @@ static void qeth_drain_output_queue(struct qeth_qdio_out_q *q, bool free)
{
{
	int j;
	int j;


	qeth_tx_complete_pending_bufs(q->card, q, true);
	qeth_tx_complete_pending_bufs(q->card, q, true, 0);


	for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
	for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
		if (!q->bufs[j])
		if (!q->bufs[j])
@@ -2590,11 +2590,12 @@ static int qeth_ulp_setup(struct qeth_card *card)
	return qeth_send_control_data(card, iob, qeth_ulp_setup_cb, NULL);
	return qeth_send_control_data(card, iob, qeth_ulp_setup_cb, NULL);
}
}


static int qeth_init_qdio_out_buf(struct qeth_qdio_out_q *q, int bidx)
static int qeth_alloc_out_buf(struct qeth_qdio_out_q *q, unsigned int bidx,
			      gfp_t gfp)
{
{
	struct qeth_qdio_out_buffer *newbuf;
	struct qeth_qdio_out_buffer *newbuf;


	newbuf = kmem_cache_zalloc(qeth_qdio_outbuf_cache, GFP_ATOMIC);
	newbuf = kmem_cache_zalloc(qeth_qdio_outbuf_cache, gfp);
	if (!newbuf)
	if (!newbuf)
		return -ENOMEM;
		return -ENOMEM;


@@ -2629,7 +2630,7 @@ static struct qeth_qdio_out_q *qeth_alloc_output_queue(void)
		goto err_qdio_bufs;
		goto err_qdio_bufs;


	for (i = 0; i < QDIO_MAX_BUFFERS_PER_Q; i++) {
	for (i = 0; i < QDIO_MAX_BUFFERS_PER_Q; i++) {
		if (qeth_init_qdio_out_buf(q, i))
		if (qeth_alloc_out_buf(q, i, GFP_KERNEL))
			goto err_out_bufs;
			goto err_out_bufs;
	}
	}


@@ -6088,7 +6089,8 @@ static void qeth_iqd_tx_complete(struct qeth_qdio_out_q *queue,


				/* Prepare the queue slot for immediate re-use: */
				/* Prepare the queue slot for immediate re-use: */
				qeth_scrub_qdio_buffer(buffer->buffer, queue->max_elements);
				qeth_scrub_qdio_buffer(buffer->buffer, queue->max_elements);
				if (qeth_init_qdio_out_buf(queue, bidx)) {
				if (qeth_alloc_out_buf(queue, bidx,
						       GFP_ATOMIC)) {
					QETH_CARD_TEXT(card, 2, "outofbuf");
					QETH_CARD_TEXT(card, 2, "outofbuf");
					qeth_schedule_recovery(card);
					qeth_schedule_recovery(card);
				}
				}
@@ -6150,7 +6152,7 @@ static int qeth_tx_poll(struct napi_struct *napi, int budget)
		unsigned int bytes = 0;
		unsigned int bytes = 0;
		int completed;
		int completed;


		qeth_tx_complete_pending_bufs(card, queue, false);
		qeth_tx_complete_pending_bufs(card, queue, false, budget);


		if (qeth_out_queue_is_empty(queue)) {
		if (qeth_out_queue_is_empty(queue)) {
			napi_complete(napi);
			napi_complete(napi);
+1 −24
Original line number Original line Diff line number Diff line
@@ -1123,24 +1123,6 @@ static int qeth_l3_add_mcast_rtnl(struct net_device *dev, int vid, void *arg)
	return 0;
	return 0;
}
}


static int qeth_l3_vlan_rx_add_vid(struct net_device *dev,
				   __be16 proto, u16 vid)
{
	struct qeth_card *card = dev->ml_priv;

	QETH_CARD_TEXT_(card, 4, "aid:%d", vid);
	return 0;
}

static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev,
				    __be16 proto, u16 vid)
{
	struct qeth_card *card = dev->ml_priv;

	QETH_CARD_TEXT_(card, 4, "kid:%d", vid);
	return 0;
}

static void qeth_l3_set_promisc_mode(struct qeth_card *card)
static void qeth_l3_set_promisc_mode(struct qeth_card *card)
{
{
	bool enable = card->dev->flags & IFF_PROMISC;
	bool enable = card->dev->flags & IFF_PROMISC;
@@ -1861,8 +1843,6 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
	.ndo_do_ioctl		= qeth_do_ioctl,
	.ndo_do_ioctl		= qeth_do_ioctl,
	.ndo_fix_features	= qeth_fix_features,
	.ndo_fix_features	= qeth_fix_features,
	.ndo_set_features	= qeth_set_features,
	.ndo_set_features	= qeth_set_features,
	.ndo_vlan_rx_add_vid	= qeth_l3_vlan_rx_add_vid,
	.ndo_vlan_rx_kill_vid   = qeth_l3_vlan_rx_kill_vid,
	.ndo_tx_timeout		= qeth_tx_timeout,
	.ndo_tx_timeout		= qeth_tx_timeout,
};
};


@@ -1878,8 +1858,6 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
	.ndo_do_ioctl		= qeth_do_ioctl,
	.ndo_do_ioctl		= qeth_do_ioctl,
	.ndo_fix_features	= qeth_fix_features,
	.ndo_fix_features	= qeth_fix_features,
	.ndo_set_features	= qeth_set_features,
	.ndo_set_features	= qeth_set_features,
	.ndo_vlan_rx_add_vid	= qeth_l3_vlan_rx_add_vid,
	.ndo_vlan_rx_kill_vid   = qeth_l3_vlan_rx_kill_vid,
	.ndo_tx_timeout		= qeth_tx_timeout,
	.ndo_tx_timeout		= qeth_tx_timeout,
	.ndo_neigh_setup	= qeth_l3_neigh_setup,
	.ndo_neigh_setup	= qeth_l3_neigh_setup,
};
};
@@ -1933,8 +1911,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card)


	card->dev->needed_headroom = headroom;
	card->dev->needed_headroom = headroom;
	card->dev->features |=	NETIF_F_HW_VLAN_CTAG_TX |
	card->dev->features |=	NETIF_F_HW_VLAN_CTAG_TX |
				NETIF_F_HW_VLAN_CTAG_RX |
				NETIF_F_HW_VLAN_CTAG_RX;
				NETIF_F_HW_VLAN_CTAG_FILTER;


	netif_keep_dst(card->dev);
	netif_keep_dst(card->dev);
	if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6))
	if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6))