Commit 206bd0a7 authored by David S. Miller's avatar David S. Miller

Merge branch 's390-qeth-next'

Julian Wiedmann says:

====================
s390/qeth: updates 2020-03-06

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

Just a small update to take care of a regression wrt to IRQ handling in
net-next, reported by Qian Cai. The fix needs some qdio layer changes,
so you will find Vasily's Acked-by in that patch.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 3f95f55e 49f42f5d
...@@ -224,8 +224,15 @@ static void setup_queues(struct qdio_irq *irq_ptr, ...@@ -224,8 +224,15 @@ static void setup_queues(struct qdio_irq *irq_ptr,
setup_queues_misc(q, irq_ptr, qdio_init->input_handler, i); setup_queues_misc(q, irq_ptr, qdio_init->input_handler, i);
q->is_input_q = 1; q->is_input_q = 1;
q->u.in.queue_start_poll = qdio_init->queue_start_poll_array ? if (qdio_init->queue_start_poll_array &&
qdio_init->queue_start_poll_array[i] : NULL; qdio_init->queue_start_poll_array[i]) {
q->u.in.queue_start_poll =
qdio_init->queue_start_poll_array[i];
set_bit(QDIO_QUEUE_IRQS_DISABLED,
&q->u.in.queue_irq_state);
} else {
q->u.in.queue_start_poll = NULL;
}
setup_storage_lists(q, irq_ptr, input_sbal_array, i); setup_storage_lists(q, irq_ptr, input_sbal_array, i);
input_sbal_array += QDIO_MAX_BUFFERS_PER_Q; input_sbal_array += QDIO_MAX_BUFFERS_PER_Q;
......
...@@ -6582,9 +6582,6 @@ int qeth_open(struct net_device *dev) ...@@ -6582,9 +6582,6 @@ int qeth_open(struct net_device *dev)
QETH_CARD_TEXT(card, 4, "qethopen"); QETH_CARD_TEXT(card, 4, "qethopen");
if (qdio_stop_irq(CARD_DDEV(card), 0) < 0)
return -EIO;
card->data.state = CH_STATE_UP; card->data.state = CH_STATE_UP;
netif_tx_start_all_queues(dev); netif_tx_start_all_queues(dev);
...@@ -6634,6 +6631,8 @@ int qeth_stop(struct net_device *dev) ...@@ -6634,6 +6631,8 @@ int qeth_stop(struct net_device *dev)
} }
napi_disable(&card->napi); napi_disable(&card->napi);
qdio_stop_irq(CARD_DDEV(card), 0);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(qeth_stop); EXPORT_SYMBOL_GPL(qeth_stop);
......
...@@ -1567,23 +1567,11 @@ static int qeth_l2_vnicc_makerc(struct qeth_card *card, u16 ipa_rc) ...@@ -1567,23 +1567,11 @@ static int qeth_l2_vnicc_makerc(struct qeth_card *card, u16 ipa_rc)
return rc; return rc;
} }
/* generic VNICC request call back control */
struct _qeth_l2_vnicc_request_cbctl {
struct {
union{
u32 *sup_cmds;
u32 *timeout;
};
} result;
};
/* generic VNICC request call back */ /* generic VNICC request call back */
static int qeth_l2_vnicc_request_cb(struct qeth_card *card, static int qeth_l2_vnicc_request_cb(struct qeth_card *card,
struct qeth_reply *reply, struct qeth_reply *reply,
unsigned long data) unsigned long data)
{ {
struct _qeth_l2_vnicc_request_cbctl *cbctl =
(struct _qeth_l2_vnicc_request_cbctl *) reply->param;
struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data; struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
struct qeth_ipacmd_vnicc *rep = &cmd->data.vnicc; struct qeth_ipacmd_vnicc *rep = &cmd->data.vnicc;
u32 sub_cmd = cmd->data.vnicc.hdr.sub_command; u32 sub_cmd = cmd->data.vnicc.hdr.sub_command;
...@@ -1596,9 +1584,9 @@ static int qeth_l2_vnicc_request_cb(struct qeth_card *card, ...@@ -1596,9 +1584,9 @@ static int qeth_l2_vnicc_request_cb(struct qeth_card *card,
card->options.vnicc.cur_chars = rep->vnicc_cmds.enabled; card->options.vnicc.cur_chars = rep->vnicc_cmds.enabled;
if (sub_cmd == IPA_VNICC_QUERY_CMDS) if (sub_cmd == IPA_VNICC_QUERY_CMDS)
*cbctl->result.sup_cmds = rep->data.query_cmds.sup_cmds; *(u32 *)reply->param = rep->data.query_cmds.sup_cmds;
else if (sub_cmd == IPA_VNICC_GET_TIMEOUT) else if (sub_cmd == IPA_VNICC_GET_TIMEOUT)
*cbctl->result.timeout = rep->data.getset_timeout.timeout; *(u32 *)reply->param = rep->data.getset_timeout.timeout;
return 0; return 0;
} }
...@@ -1639,7 +1627,6 @@ static int qeth_l2_vnicc_query_chars(struct qeth_card *card) ...@@ -1639,7 +1627,6 @@ static int qeth_l2_vnicc_query_chars(struct qeth_card *card)
static int qeth_l2_vnicc_query_cmds(struct qeth_card *card, u32 vnic_char, static int qeth_l2_vnicc_query_cmds(struct qeth_card *card, u32 vnic_char,
u32 *sup_cmds) u32 *sup_cmds)
{ {
struct _qeth_l2_vnicc_request_cbctl cbctl;
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
QETH_CARD_TEXT(card, 2, "vniccqcm"); QETH_CARD_TEXT(card, 2, "vniccqcm");
...@@ -1650,10 +1637,7 @@ static int qeth_l2_vnicc_query_cmds(struct qeth_card *card, u32 vnic_char, ...@@ -1650,10 +1637,7 @@ static int qeth_l2_vnicc_query_cmds(struct qeth_card *card, u32 vnic_char,
__ipa_cmd(iob)->data.vnicc.data.query_cmds.vnic_char = vnic_char; __ipa_cmd(iob)->data.vnicc.data.query_cmds.vnic_char = vnic_char;
/* prepare callback control */ return qeth_send_ipa_cmd(card, iob, qeth_l2_vnicc_request_cb, sup_cmds);
cbctl.result.sup_cmds = sup_cmds;
return qeth_send_ipa_cmd(card, iob, qeth_l2_vnicc_request_cb, &cbctl);
} }
/* VNICC enable/disable characteristic request */ /* VNICC enable/disable characteristic request */
...@@ -1677,7 +1661,6 @@ static int qeth_l2_vnicc_getset_timeout(struct qeth_card *card, u32 vnicc, ...@@ -1677,7 +1661,6 @@ static int qeth_l2_vnicc_getset_timeout(struct qeth_card *card, u32 vnicc,
u32 cmd, u32 *timeout) u32 cmd, u32 *timeout)
{ {
struct qeth_vnicc_getset_timeout *getset_timeout; struct qeth_vnicc_getset_timeout *getset_timeout;
struct _qeth_l2_vnicc_request_cbctl cbctl;
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
QETH_CARD_TEXT(card, 2, "vniccgst"); QETH_CARD_TEXT(card, 2, "vniccgst");
...@@ -1692,11 +1675,7 @@ static int qeth_l2_vnicc_getset_timeout(struct qeth_card *card, u32 vnicc, ...@@ -1692,11 +1675,7 @@ static int qeth_l2_vnicc_getset_timeout(struct qeth_card *card, u32 vnicc,
if (cmd == IPA_VNICC_SET_TIMEOUT) if (cmd == IPA_VNICC_SET_TIMEOUT)
getset_timeout->timeout = *timeout; getset_timeout->timeout = *timeout;
/* prepare callback control */ return qeth_send_ipa_cmd(card, iob, qeth_l2_vnicc_request_cb, timeout);
if (cmd == IPA_VNICC_GET_TIMEOUT)
cbctl.result.timeout = timeout;
return qeth_send_ipa_cmd(card, iob, qeth_l2_vnicc_request_cb, &cbctl);
} }
/* set current VNICC flag state; called from sysfs store function */ /* set current VNICC flag state; called from sysfs store function */
......
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