Commit 3572f57b authored by David S. Miller's avatar David S. Miller

Merge branch 's390-next'

Karsten Graul says:

====================
s390/net: updates 2021-11-18

Please apply the following patches to netdev's net-next tree.

Heiko provided fixes for kernel doc comments and solved some
other compiler warnings.
Julians qeth patch simplifies the rx queue handling in the code.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 2edc4bf6 09ae5982
...@@ -65,6 +65,7 @@ extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS]; ...@@ -65,6 +65,7 @@ extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS];
int ctcm_register_dbf_views(void); int ctcm_register_dbf_views(void);
void ctcm_unregister_dbf_views(void); void ctcm_unregister_dbf_views(void);
__printf(3, 4)
void ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *text, ...); void ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *text, ...);
static inline const char *strtail(const char *s, int n) static inline const char *strtail(const char *s, int n)
......
...@@ -1406,7 +1406,7 @@ static void ctcmpc_chx_rx(fsm_instance *fi, int event, void *arg) ...@@ -1406,7 +1406,7 @@ static void ctcmpc_chx_rx(fsm_instance *fi, int event, void *arg)
if (new_skb == NULL) { if (new_skb == NULL) {
CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
"%s(%d): skb allocation failed", "%s(%s): skb allocation failed",
CTCM_FUNTAIL, dev->name); CTCM_FUNTAIL, dev->name);
fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev); fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev);
goto again; goto again;
......
...@@ -1808,19 +1808,20 @@ lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer) ...@@ -1808,19 +1808,20 @@ lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
return; return;
} }
/* What kind of frame is it? */ /* What kind of frame is it? */
if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL) if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL) {
/* Control frame. */ /* Control frame. */
lcs_get_control(card, (struct lcs_cmd *) lcs_hdr); lcs_get_control(card, (struct lcs_cmd *) lcs_hdr);
else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET || } else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET ||
lcs_hdr->type == LCS_FRAME_TYPE_TR || lcs_hdr->type == LCS_FRAME_TYPE_TR ||
lcs_hdr->type == LCS_FRAME_TYPE_FDDI) lcs_hdr->type == LCS_FRAME_TYPE_FDDI) {
/* Normal network packet. */ /* Normal network packet. */
lcs_get_skb(card, (char *)(lcs_hdr + 1), lcs_get_skb(card, (char *)(lcs_hdr + 1),
lcs_hdr->offset - offset - lcs_hdr->offset - offset -
sizeof(struct lcs_header)); sizeof(struct lcs_header));
else } else {
/* Unknown frame type. */ /* Unknown frame type. */
; // FIXME: error message ? ; // FIXME: error message ?
}
/* Proceed to next frame. */ /* Proceed to next frame. */
offset = lcs_hdr->offset; offset = lcs_hdr->offset;
lcs_hdr->offset = LCS_ILLEGAL_OFFSET; lcs_hdr->offset = LCS_ILLEGAL_OFFSET;
......
...@@ -194,9 +194,6 @@ static void qeth_clear_working_pool_list(struct qeth_card *card) ...@@ -194,9 +194,6 @@ static void qeth_clear_working_pool_list(struct qeth_card *card)
&card->qdio.in_buf_pool.entry_list, list) &card->qdio.in_buf_pool.entry_list, list)
list_del(&pool_entry->list); list_del(&pool_entry->list);
if (!queue)
return;
for (i = 0; i < ARRAY_SIZE(queue->bufs); i++) for (i = 0; i < ARRAY_SIZE(queue->bufs); i++)
queue->bufs[i].pool_entry = NULL; queue->bufs[i].pool_entry = NULL;
} }
...@@ -275,8 +272,8 @@ int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count) ...@@ -275,8 +272,8 @@ int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count)
QETH_CARD_TEXT(card, 2, "realcbp"); QETH_CARD_TEXT(card, 2, "realcbp");
/* Defer until queue is allocated: */ /* Defer until pool is allocated: */
if (!card->qdio.in_q) if (list_empty(&pool->entry_list))
goto out; goto out;
/* Remove entries from the pool: */ /* Remove entries from the pool: */
...@@ -2557,14 +2554,9 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card) ...@@ -2557,14 +2554,9 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card)
QETH_QDIO_ALLOCATED) != QETH_QDIO_UNINITIALIZED) QETH_QDIO_ALLOCATED) != QETH_QDIO_UNINITIALIZED)
return 0; return 0;
QETH_CARD_TEXT(card, 2, "inq");
card->qdio.in_q = qeth_alloc_qdio_queue();
if (!card->qdio.in_q)
goto out_nomem;
/* inbound buffer pool */ /* inbound buffer pool */
if (qeth_alloc_buffer_pool(card)) if (qeth_alloc_buffer_pool(card))
goto out_freeinq; goto out_buffer_pool;
/* outbound */ /* outbound */
for (i = 0; i < card->qdio.no_out_queues; ++i) { for (i = 0; i < card->qdio.no_out_queues; ++i) {
...@@ -2605,10 +2597,7 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card) ...@@ -2605,10 +2597,7 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card)
card->qdio.out_qs[i] = NULL; card->qdio.out_qs[i] = NULL;
} }
qeth_free_buffer_pool(card); qeth_free_buffer_pool(card);
out_freeinq: out_buffer_pool:
qeth_free_qdio_queue(card->qdio.in_q);
card->qdio.in_q = NULL;
out_nomem:
atomic_set(&card->qdio.state, QETH_QDIO_UNINITIALIZED); atomic_set(&card->qdio.state, QETH_QDIO_UNINITIALIZED);
return -ENOMEM; return -ENOMEM;
} }
...@@ -2623,11 +2612,12 @@ static void qeth_free_qdio_queues(struct qeth_card *card) ...@@ -2623,11 +2612,12 @@ static void qeth_free_qdio_queues(struct qeth_card *card)
qeth_free_cq(card); qeth_free_cq(card);
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) { for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
if (card->qdio.in_q->bufs[j].rx_skb) if (card->qdio.in_q->bufs[j].rx_skb) {
consume_skb(card->qdio.in_q->bufs[j].rx_skb); consume_skb(card->qdio.in_q->bufs[j].rx_skb);
card->qdio.in_q->bufs[j].rx_skb = NULL;
}
} }
qeth_free_qdio_queue(card->qdio.in_q);
card->qdio.in_q = NULL;
/* inbound buffer pool */ /* inbound buffer pool */
qeth_free_buffer_pool(card); qeth_free_buffer_pool(card);
/* free outbound qdio_qs */ /* free outbound qdio_qs */
...@@ -6447,6 +6437,12 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev) ...@@ -6447,6 +6437,12 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
qeth_determine_capabilities(card); qeth_determine_capabilities(card);
qeth_set_blkt_defaults(card); qeth_set_blkt_defaults(card);
card->qdio.in_q = qeth_alloc_qdio_queue();
if (!card->qdio.in_q) {
rc = -ENOMEM;
goto err_rx_queue;
}
card->qdio.no_out_queues = card->dev->num_tx_queues; card->qdio.no_out_queues = card->dev->num_tx_queues;
rc = qeth_update_from_chp_desc(card); rc = qeth_update_from_chp_desc(card);
if (rc) if (rc)
...@@ -6473,6 +6469,8 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev) ...@@ -6473,6 +6469,8 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
err_setup_disc: err_setup_disc:
err_chp_desc: err_chp_desc:
qeth_free_qdio_queue(card->qdio.in_q);
err_rx_queue:
free_netdev(card->dev); free_netdev(card->dev);
err_card: err_card:
qeth_core_free_card(card); qeth_core_free_card(card);
...@@ -6494,6 +6492,7 @@ static void qeth_core_remove_device(struct ccwgroup_device *gdev) ...@@ -6494,6 +6492,7 @@ static void qeth_core_remove_device(struct ccwgroup_device *gdev)
qeth_free_qdio_queues(card); qeth_free_qdio_queues(card);
qeth_free_qdio_queue(card->qdio.in_q);
free_netdev(card->dev); free_netdev(card->dev);
qeth_core_free_card(card); qeth_core_free_card(card);
put_device(&gdev->dev); put_device(&gdev->dev);
......
...@@ -142,7 +142,7 @@ static inline size_t iucv_msg_length(struct iucv_message *msg) ...@@ -142,7 +142,7 @@ static inline size_t iucv_msg_length(struct iucv_message *msg)
* iucv_sock_in_state() - check for specific states * iucv_sock_in_state() - check for specific states
* @sk: sock structure * @sk: sock structure
* @state: first iucv sk state * @state: first iucv sk state
* @state: second iucv sk state * @state2: second iucv sk state
* *
* Returns true if the socket in either in the first or second state. * Returns true if the socket in either in the first or second state.
*/ */
...@@ -172,7 +172,7 @@ static inline int iucv_below_msglim(struct sock *sk) ...@@ -172,7 +172,7 @@ static inline int iucv_below_msglim(struct sock *sk)
(atomic_read(&iucv->pendings) <= 0)); (atomic_read(&iucv->pendings) <= 0));
} }
/** /*
* iucv_sock_wake_msglim() - Wake up thread waiting on msg limit * iucv_sock_wake_msglim() - Wake up thread waiting on msg limit
*/ */
static void iucv_sock_wake_msglim(struct sock *sk) static void iucv_sock_wake_msglim(struct sock *sk)
...@@ -187,7 +187,7 @@ static void iucv_sock_wake_msglim(struct sock *sk) ...@@ -187,7 +187,7 @@ static void iucv_sock_wake_msglim(struct sock *sk)
rcu_read_unlock(); rcu_read_unlock();
} }
/** /*
* afiucv_hs_send() - send a message through HiperSockets transport * afiucv_hs_send() - send a message through HiperSockets transport
*/ */
static int afiucv_hs_send(struct iucv_message *imsg, struct sock *sock, static int afiucv_hs_send(struct iucv_message *imsg, struct sock *sock,
...@@ -1831,9 +1831,9 @@ static void afiucv_swap_src_dest(struct sk_buff *skb) ...@@ -1831,9 +1831,9 @@ static void afiucv_swap_src_dest(struct sk_buff *skb)
memset(skb->data, 0, ETH_HLEN); memset(skb->data, 0, ETH_HLEN);
} }
/** /*
* afiucv_hs_callback_syn - react on received SYN * afiucv_hs_callback_syn - react on received SYN
**/ */
static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
{ {
struct af_iucv_trans_hdr *trans_hdr = iucv_trans_hdr(skb); struct af_iucv_trans_hdr *trans_hdr = iucv_trans_hdr(skb);
...@@ -1896,9 +1896,9 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb) ...@@ -1896,9 +1896,9 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_callback_synack() - react on received SYN-ACK * afiucv_hs_callback_synack() - react on received SYN-ACK
**/ */
static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
...@@ -1917,9 +1917,9 @@ static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb) ...@@ -1917,9 +1917,9 @@ static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_callback_synfin() - react on received SYN_FIN * afiucv_hs_callback_synfin() - react on received SYN_FIN
**/ */
static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
...@@ -1937,9 +1937,9 @@ static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb) ...@@ -1937,9 +1937,9 @@ static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_callback_fin() - react on received FIN * afiucv_hs_callback_fin() - react on received FIN
**/ */
static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
...@@ -1960,9 +1960,9 @@ static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb) ...@@ -1960,9 +1960,9 @@ static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_callback_win() - react on received WIN * afiucv_hs_callback_win() - react on received WIN
**/ */
static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
...@@ -1978,9 +1978,9 @@ static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb) ...@@ -1978,9 +1978,9 @@ static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_callback_rx() - react on received data * afiucv_hs_callback_rx() - react on received data
**/ */
static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb) static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
...@@ -2022,11 +2022,11 @@ static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb) ...@@ -2022,11 +2022,11 @@ static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS; return NET_RX_SUCCESS;
} }
/** /*
* afiucv_hs_rcv() - base function for arriving data through HiperSockets * afiucv_hs_rcv() - base function for arriving data through HiperSockets
* transport * transport
* called from netif RX softirq * called from netif RX softirq
**/ */
static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev, static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *pt, struct net_device *orig_dev) struct packet_type *pt, struct net_device *orig_dev)
{ {
...@@ -2128,10 +2128,10 @@ static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -2128,10 +2128,10 @@ static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *dev,
return err; return err;
} }
/** /*
* afiucv_hs_callback_txnotify() - handle send notifications from HiperSockets * afiucv_hs_callback_txnotify() - handle send notifications from HiperSockets
* transport * transport
**/ */
static void afiucv_hs_callback_txnotify(struct sock *sk, enum iucv_tx_notify n) static void afiucv_hs_callback_txnotify(struct sock *sk, enum iucv_tx_notify n)
{ {
struct iucv_sock *iucv = iucv_sk(sk); struct iucv_sock *iucv = iucv_sk(sk);
......
...@@ -276,8 +276,8 @@ static union iucv_param *iucv_param[NR_CPUS]; ...@@ -276,8 +276,8 @@ static union iucv_param *iucv_param[NR_CPUS];
static union iucv_param *iucv_param_irq[NR_CPUS]; static union iucv_param *iucv_param_irq[NR_CPUS];
/** /**
* iucv_call_b2f0 * __iucv_call_b2f0
* @code: identifier of IUCV call to CP. * @command: identifier of IUCV call to CP.
* @parm: pointer to a struct iucv_parm block * @parm: pointer to a struct iucv_parm block
* *
* Calls CP to execute IUCV commands. * Calls CP to execute IUCV commands.
...@@ -309,7 +309,7 @@ static inline int iucv_call_b2f0(int command, union iucv_param *parm) ...@@ -309,7 +309,7 @@ static inline int iucv_call_b2f0(int command, union iucv_param *parm)
return ccode == 1 ? parm->ctrl.iprcode : ccode; return ccode == 1 ? parm->ctrl.iprcode : ccode;
} }
/** /*
* iucv_query_maxconn * iucv_query_maxconn
* *
* Determines the maximum number of connections that may be established. * Determines the maximum number of connections that may be established.
...@@ -493,8 +493,8 @@ static void iucv_retrieve_cpu(void *data) ...@@ -493,8 +493,8 @@ static void iucv_retrieve_cpu(void *data)
cpumask_clear_cpu(cpu, &iucv_buffer_cpumask); cpumask_clear_cpu(cpu, &iucv_buffer_cpumask);
} }
/** /*
* iucv_setmask_smp * iucv_setmask_mp
* *
* Allow iucv interrupts on all cpus. * Allow iucv interrupts on all cpus.
*/ */
...@@ -512,7 +512,7 @@ static void iucv_setmask_mp(void) ...@@ -512,7 +512,7 @@ static void iucv_setmask_mp(void)
cpus_read_unlock(); cpus_read_unlock();
} }
/** /*
* iucv_setmask_up * iucv_setmask_up
* *
* Allow iucv interrupts on a single cpu. * Allow iucv interrupts on a single cpu.
...@@ -529,7 +529,7 @@ static void iucv_setmask_up(void) ...@@ -529,7 +529,7 @@ static void iucv_setmask_up(void)
smp_call_function_single(cpu, iucv_block_cpu, NULL, 1); smp_call_function_single(cpu, iucv_block_cpu, NULL, 1);
} }
/** /*
* iucv_enable * iucv_enable
* *
* This function makes iucv ready for use. It allocates the pathid * This function makes iucv ready for use. It allocates the pathid
...@@ -564,7 +564,7 @@ static int iucv_enable(void) ...@@ -564,7 +564,7 @@ static int iucv_enable(void)
return rc; return rc;
} }
/** /*
* iucv_disable * iucv_disable
* *
* This function shuts down iucv. It disables iucv interrupts, retrieves * This function shuts down iucv. It disables iucv interrupts, retrieves
...@@ -1347,8 +1347,9 @@ EXPORT_SYMBOL(iucv_message_send); ...@@ -1347,8 +1347,9 @@ EXPORT_SYMBOL(iucv_message_send);
* @srccls: source class of message * @srccls: source class of message
* @buffer: address of send buffer or address of struct iucv_array * @buffer: address of send buffer or address of struct iucv_array
* @size: length of send buffer * @size: length of send buffer
* @ansbuf: address of answer buffer or address of struct iucv_array * @answer: address of answer buffer or address of struct iucv_array
* @asize: size of reply buffer * @asize: size of reply buffer
* @residual: ignored
* *
* This function transmits data to another application. Data to be * This function transmits data to another application. Data to be
* transmitted is in a buffer. The receiver of the send is expected to * transmitted is in a buffer. The receiver of the send is expected to
...@@ -1400,13 +1401,6 @@ int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, ...@@ -1400,13 +1401,6 @@ int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg,
} }
EXPORT_SYMBOL(iucv_message_send2way); EXPORT_SYMBOL(iucv_message_send2way);
/**
* iucv_path_pending
* @data: Pointer to external interrupt buffer
*
* Process connection pending work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_path_pending { struct iucv_path_pending {
u16 ippathid; u16 ippathid;
u8 ipflags1; u8 ipflags1;
...@@ -1420,6 +1414,13 @@ struct iucv_path_pending { ...@@ -1420,6 +1414,13 @@ struct iucv_path_pending {
u8 res4[3]; u8 res4[3];
} __packed; } __packed;
/**
* iucv_path_pending
* @data: Pointer to external interrupt buffer
*
* Process connection pending work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_path_pending(struct iucv_irq_data *data) static void iucv_path_pending(struct iucv_irq_data *data)
{ {
struct iucv_path_pending *ipp = (void *) data; struct iucv_path_pending *ipp = (void *) data;
...@@ -1461,13 +1462,6 @@ static void iucv_path_pending(struct iucv_irq_data *data) ...@@ -1461,13 +1462,6 @@ static void iucv_path_pending(struct iucv_irq_data *data)
iucv_sever_pathid(ipp->ippathid, error); iucv_sever_pathid(ipp->ippathid, error);
} }
/**
* iucv_path_complete
* @data: Pointer to external interrupt buffer
*
* Process connection complete work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_path_complete { struct iucv_path_complete {
u16 ippathid; u16 ippathid;
u8 ipflags1; u8 ipflags1;
...@@ -1481,6 +1475,13 @@ struct iucv_path_complete { ...@@ -1481,6 +1475,13 @@ struct iucv_path_complete {
u8 res4[3]; u8 res4[3];
} __packed; } __packed;
/**
* iucv_path_complete
* @data: Pointer to external interrupt buffer
*
* Process connection complete work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_path_complete(struct iucv_irq_data *data) static void iucv_path_complete(struct iucv_irq_data *data)
{ {
struct iucv_path_complete *ipc = (void *) data; struct iucv_path_complete *ipc = (void *) data;
...@@ -1492,13 +1493,6 @@ static void iucv_path_complete(struct iucv_irq_data *data) ...@@ -1492,13 +1493,6 @@ static void iucv_path_complete(struct iucv_irq_data *data)
path->handler->path_complete(path, ipc->ipuser); path->handler->path_complete(path, ipc->ipuser);
} }
/**
* iucv_path_severed
* @data: Pointer to external interrupt buffer
*
* Process connection severed work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_path_severed { struct iucv_path_severed {
u16 ippathid; u16 ippathid;
u8 res1; u8 res1;
...@@ -1511,6 +1505,13 @@ struct iucv_path_severed { ...@@ -1511,6 +1505,13 @@ struct iucv_path_severed {
u8 res5[3]; u8 res5[3];
} __packed; } __packed;
/**
* iucv_path_severed
* @data: Pointer to external interrupt buffer
*
* Process connection severed work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_path_severed(struct iucv_irq_data *data) static void iucv_path_severed(struct iucv_irq_data *data)
{ {
struct iucv_path_severed *ips = (void *) data; struct iucv_path_severed *ips = (void *) data;
...@@ -1528,13 +1529,6 @@ static void iucv_path_severed(struct iucv_irq_data *data) ...@@ -1528,13 +1529,6 @@ static void iucv_path_severed(struct iucv_irq_data *data)
} }
} }
/**
* iucv_path_quiesced
* @data: Pointer to external interrupt buffer
*
* Process connection quiesced work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_path_quiesced { struct iucv_path_quiesced {
u16 ippathid; u16 ippathid;
u8 res1; u8 res1;
...@@ -1547,6 +1541,13 @@ struct iucv_path_quiesced { ...@@ -1547,6 +1541,13 @@ struct iucv_path_quiesced {
u8 res5[3]; u8 res5[3];
} __packed; } __packed;
/**
* iucv_path_quiesced
* @data: Pointer to external interrupt buffer
*
* Process connection quiesced work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_path_quiesced(struct iucv_irq_data *data) static void iucv_path_quiesced(struct iucv_irq_data *data)
{ {
struct iucv_path_quiesced *ipq = (void *) data; struct iucv_path_quiesced *ipq = (void *) data;
...@@ -1556,13 +1557,6 @@ static void iucv_path_quiesced(struct iucv_irq_data *data) ...@@ -1556,13 +1557,6 @@ static void iucv_path_quiesced(struct iucv_irq_data *data)
path->handler->path_quiesced(path, ipq->ipuser); path->handler->path_quiesced(path, ipq->ipuser);
} }
/**
* iucv_path_resumed
* @data: Pointer to external interrupt buffer
*
* Process connection resumed work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_path_resumed { struct iucv_path_resumed {
u16 ippathid; u16 ippathid;
u8 res1; u8 res1;
...@@ -1575,6 +1569,13 @@ struct iucv_path_resumed { ...@@ -1575,6 +1569,13 @@ struct iucv_path_resumed {
u8 res5[3]; u8 res5[3];
} __packed; } __packed;
/**
* iucv_path_resumed
* @data: Pointer to external interrupt buffer
*
* Process connection resumed work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_path_resumed(struct iucv_irq_data *data) static void iucv_path_resumed(struct iucv_irq_data *data)
{ {
struct iucv_path_resumed *ipr = (void *) data; struct iucv_path_resumed *ipr = (void *) data;
...@@ -1584,13 +1585,6 @@ static void iucv_path_resumed(struct iucv_irq_data *data) ...@@ -1584,13 +1585,6 @@ static void iucv_path_resumed(struct iucv_irq_data *data)
path->handler->path_resumed(path, ipr->ipuser); path->handler->path_resumed(path, ipr->ipuser);
} }
/**
* iucv_message_complete
* @data: Pointer to external interrupt buffer
*
* Process message complete work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_message_complete { struct iucv_message_complete {
u16 ippathid; u16 ippathid;
u8 ipflags1; u8 ipflags1;
...@@ -1606,6 +1600,13 @@ struct iucv_message_complete { ...@@ -1606,6 +1600,13 @@ struct iucv_message_complete {
u8 res2[3]; u8 res2[3];
} __packed; } __packed;
/**
* iucv_message_complete
* @data: Pointer to external interrupt buffer
*
* Process message complete work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_message_complete(struct iucv_irq_data *data) static void iucv_message_complete(struct iucv_irq_data *data)
{ {
struct iucv_message_complete *imc = (void *) data; struct iucv_message_complete *imc = (void *) data;
...@@ -1624,13 +1625,6 @@ static void iucv_message_complete(struct iucv_irq_data *data) ...@@ -1624,13 +1625,6 @@ static void iucv_message_complete(struct iucv_irq_data *data)
} }
} }
/**
* iucv_message_pending
* @data: Pointer to external interrupt buffer
*
* Process message pending work item. Called from tasklet while holding
* iucv_table_lock.
*/
struct iucv_message_pending { struct iucv_message_pending {
u16 ippathid; u16 ippathid;
u8 ipflags1; u8 ipflags1;
...@@ -1653,6 +1647,13 @@ struct iucv_message_pending { ...@@ -1653,6 +1647,13 @@ struct iucv_message_pending {
u8 res2[3]; u8 res2[3];
} __packed; } __packed;
/**
* iucv_message_pending
* @data: Pointer to external interrupt buffer
*
* Process message pending work item. Called from tasklet while holding
* iucv_table_lock.
*/
static void iucv_message_pending(struct iucv_irq_data *data) static void iucv_message_pending(struct iucv_irq_data *data)
{ {
struct iucv_message_pending *imp = (void *) data; struct iucv_message_pending *imp = (void *) data;
...@@ -1673,7 +1674,7 @@ static void iucv_message_pending(struct iucv_irq_data *data) ...@@ -1673,7 +1674,7 @@ static void iucv_message_pending(struct iucv_irq_data *data)
} }
} }
/** /*
* iucv_tasklet_fn: * iucv_tasklet_fn:
* *
* This tasklet loops over the queue of irq buffers created by * This tasklet loops over the queue of irq buffers created by
...@@ -1717,7 +1718,7 @@ static void iucv_tasklet_fn(unsigned long ignored) ...@@ -1717,7 +1718,7 @@ static void iucv_tasklet_fn(unsigned long ignored)
spin_unlock(&iucv_table_lock); spin_unlock(&iucv_table_lock);
} }
/** /*
* iucv_work_fn: * iucv_work_fn:
* *
* This work function loops over the queue of path pending irq blocks * This work function loops over the queue of path pending irq blocks
...@@ -1748,9 +1749,8 @@ static void iucv_work_fn(struct work_struct *work) ...@@ -1748,9 +1749,8 @@ static void iucv_work_fn(struct work_struct *work)
spin_unlock_bh(&iucv_table_lock); spin_unlock_bh(&iucv_table_lock);
} }
/** /*
* iucv_external_interrupt * iucv_external_interrupt
* @code: irq code
* *
* Handles external interrupts coming in from CP. * Handles external interrupts coming in from CP.
* Places the interrupt buffer on a queue and schedules iucv_tasklet_fn(). * Places the interrupt buffer on a queue and schedules iucv_tasklet_fn().
......
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