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

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
...@@ -1453,7 +1453,7 @@ static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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);
......
...@@ -1123,24 +1123,6 @@ static int qeth_l3_add_mcast_rtnl(struct net_device *dev, int vid, void *arg) ...@@ -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 = { ...@@ -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 = { ...@@ -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) ...@@ -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))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment