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];
int ctcm_register_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, ...);
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)
if (new_skb == NULL) {
CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
"%s(%d): skb allocation failed",
"%s(%s): skb allocation failed",
CTCM_FUNTAIL, dev->name);
fsm_event(priv->mpcg->fsm, MPCG_EVENT_INOP, dev);
goto again;
......
......@@ -1808,19 +1808,20 @@ lcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer)
return;
}
/* What kind of frame is it? */
if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL)
if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL) {
/* Control frame. */
lcs_get_control(card, (struct lcs_cmd *) lcs_hdr);
else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET ||
lcs_hdr->type == LCS_FRAME_TYPE_TR ||
lcs_hdr->type == LCS_FRAME_TYPE_FDDI)
} else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET ||
lcs_hdr->type == LCS_FRAME_TYPE_TR ||
lcs_hdr->type == LCS_FRAME_TYPE_FDDI) {
/* Normal network packet. */
lcs_get_skb(card, (char *)(lcs_hdr + 1),
lcs_hdr->offset - offset -
sizeof(struct lcs_header));
else
} else {
/* Unknown frame type. */
; // FIXME: error message ?
}
/* Proceed to next frame. */
offset = lcs_hdr->offset;
lcs_hdr->offset = LCS_ILLEGAL_OFFSET;
......
......@@ -194,9 +194,6 @@ static void qeth_clear_working_pool_list(struct qeth_card *card)
&card->qdio.in_buf_pool.entry_list, list)
list_del(&pool_entry->list);
if (!queue)
return;
for (i = 0; i < ARRAY_SIZE(queue->bufs); i++)
queue->bufs[i].pool_entry = NULL;
}
......@@ -275,8 +272,8 @@ int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count)
QETH_CARD_TEXT(card, 2, "realcbp");
/* Defer until queue is allocated: */
if (!card->qdio.in_q)
/* Defer until pool is allocated: */
if (list_empty(&pool->entry_list))
goto out;
/* Remove entries from the pool: */
......@@ -2557,14 +2554,9 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card)
QETH_QDIO_ALLOCATED) != QETH_QDIO_UNINITIALIZED)
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 */
if (qeth_alloc_buffer_pool(card))
goto out_freeinq;
goto out_buffer_pool;
/* outbound */
for (i = 0; i < card->qdio.no_out_queues; ++i) {
......@@ -2605,10 +2597,7 @@ static int qeth_alloc_qdio_queues(struct qeth_card *card)
card->qdio.out_qs[i] = NULL;
}
qeth_free_buffer_pool(card);
out_freeinq:
qeth_free_qdio_queue(card->qdio.in_q);
card->qdio.in_q = NULL;
out_nomem:
out_buffer_pool:
atomic_set(&card->qdio.state, QETH_QDIO_UNINITIALIZED);
return -ENOMEM;
}
......@@ -2623,11 +2612,12 @@ static void qeth_free_qdio_queues(struct qeth_card *card)
qeth_free_cq(card);
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);
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 */
qeth_free_buffer_pool(card);
/* free outbound qdio_qs */
......@@ -6447,6 +6437,12 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
qeth_determine_capabilities(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;
rc = qeth_update_from_chp_desc(card);
if (rc)
......@@ -6473,6 +6469,8 @@ static int qeth_core_probe_device(struct ccwgroup_device *gdev)
err_setup_disc:
err_chp_desc:
qeth_free_qdio_queue(card->qdio.in_q);
err_rx_queue:
free_netdev(card->dev);
err_card:
qeth_core_free_card(card);
......@@ -6494,6 +6492,7 @@ static void qeth_core_remove_device(struct ccwgroup_device *gdev)
qeth_free_qdio_queues(card);
qeth_free_qdio_queue(card->qdio.in_q);
free_netdev(card->dev);
qeth_core_free_card(card);
put_device(&gdev->dev);
......
......@@ -142,7 +142,7 @@ static inline size_t iucv_msg_length(struct iucv_message *msg)
* iucv_sock_in_state() - check for specific states
* @sk: sock structure
* @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.
*/
......@@ -172,7 +172,7 @@ static inline int iucv_below_msglim(struct sock *sk)
(atomic_read(&iucv->pendings) <= 0));
}
/**
/*
* iucv_sock_wake_msglim() - Wake up thread waiting on msg limit
*/
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();
}
/**
/*
* afiucv_hs_send() - send a message through HiperSockets transport
*/
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)
memset(skb->data, 0, ETH_HLEN);
}
/**
/*
* afiucv_hs_callback_syn - react on received SYN
**/
*/
static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *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)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_callback_synack() - react on received SYN-ACK
**/
*/
static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb)
{
struct iucv_sock *iucv = iucv_sk(sk);
......@@ -1917,9 +1917,9 @@ static int afiucv_hs_callback_synack(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_callback_synfin() - react on received SYN_FIN
**/
*/
static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb)
{
struct iucv_sock *iucv = iucv_sk(sk);
......@@ -1937,9 +1937,9 @@ static int afiucv_hs_callback_synfin(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_callback_fin() - react on received FIN
**/
*/
static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb)
{
struct iucv_sock *iucv = iucv_sk(sk);
......@@ -1960,9 +1960,9 @@ static int afiucv_hs_callback_fin(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_callback_win() - react on received WIN
**/
*/
static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb)
{
struct iucv_sock *iucv = iucv_sk(sk);
......@@ -1978,9 +1978,9 @@ static int afiucv_hs_callback_win(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_callback_rx() - react on received data
**/
*/
static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
{
struct iucv_sock *iucv = iucv_sk(sk);
......@@ -2022,11 +2022,11 @@ static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
return NET_RX_SUCCESS;
}
/**
/*
* afiucv_hs_rcv() - base function for arriving data through HiperSockets
* transport
* called from netif RX softirq
**/
*/
static int afiucv_hs_rcv(struct sk_buff *skb, struct net_device *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,
return err;
}
/**
/*
* afiucv_hs_callback_txnotify() - handle send notifications from HiperSockets
* transport
**/
*/
static void afiucv_hs_callback_txnotify(struct sock *sk, enum iucv_tx_notify n)
{
struct iucv_sock *iucv = iucv_sk(sk);
......
......@@ -276,8 +276,8 @@ static union iucv_param *iucv_param[NR_CPUS];
static union iucv_param *iucv_param_irq[NR_CPUS];
/**
* iucv_call_b2f0
* @code: identifier of IUCV call to CP.
* __iucv_call_b2f0
* @command: identifier of IUCV call to CP.
* @parm: pointer to a struct iucv_parm block
*
* Calls CP to execute IUCV commands.
......@@ -309,7 +309,7 @@ static inline int iucv_call_b2f0(int command, union iucv_param *parm)
return ccode == 1 ? parm->ctrl.iprcode : ccode;
}
/**
/*
* iucv_query_maxconn
*
* Determines the maximum number of connections that may be established.
......@@ -493,8 +493,8 @@ static void iucv_retrieve_cpu(void *data)
cpumask_clear_cpu(cpu, &iucv_buffer_cpumask);
}
/**
* iucv_setmask_smp
/*
* iucv_setmask_mp
*
* Allow iucv interrupts on all cpus.
*/
......@@ -512,7 +512,7 @@ static void iucv_setmask_mp(void)
cpus_read_unlock();
}
/**
/*
* iucv_setmask_up
*
* Allow iucv interrupts on a single cpu.
......@@ -529,7 +529,7 @@ static void iucv_setmask_up(void)
smp_call_function_single(cpu, iucv_block_cpu, NULL, 1);
}
/**
/*
* iucv_enable
*
* This function makes iucv ready for use. It allocates the pathid
......@@ -564,7 +564,7 @@ static int iucv_enable(void)
return rc;
}
/**
/*
* iucv_disable
*
* This function shuts down iucv. It disables iucv interrupts, retrieves
......@@ -1347,8 +1347,9 @@ EXPORT_SYMBOL(iucv_message_send);
* @srccls: source class of message
* @buffer: address of send buffer or address of struct iucv_array
* @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
* @residual: ignored
*
* This function transmits data to another application. Data to be
* 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,
}
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 {
u16 ippathid;
u8 ipflags1;
......@@ -1420,6 +1414,13 @@ struct iucv_path_pending {
u8 res4[3];
} __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)
{
struct iucv_path_pending *ipp = (void *) data;
......@@ -1461,13 +1462,6 @@ static void iucv_path_pending(struct iucv_irq_data *data)
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 {
u16 ippathid;
u8 ipflags1;
......@@ -1481,6 +1475,13 @@ struct iucv_path_complete {
u8 res4[3];
} __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)
{
struct iucv_path_complete *ipc = (void *) data;
......@@ -1492,13 +1493,6 @@ static void iucv_path_complete(struct iucv_irq_data *data)
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 {
u16 ippathid;
u8 res1;
......@@ -1511,6 +1505,13 @@ struct iucv_path_severed {
u8 res5[3];
} __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)
{
struct iucv_path_severed *ips = (void *) 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 {
u16 ippathid;
u8 res1;
......@@ -1547,6 +1541,13 @@ struct iucv_path_quiesced {
u8 res5[3];
} __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)
{
struct iucv_path_quiesced *ipq = (void *) data;
......@@ -1556,13 +1557,6 @@ static void iucv_path_quiesced(struct iucv_irq_data *data)
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 {
u16 ippathid;
u8 res1;
......@@ -1575,6 +1569,13 @@ struct iucv_path_resumed {
u8 res5[3];
} __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)
{
struct iucv_path_resumed *ipr = (void *) data;
......@@ -1584,13 +1585,6 @@ static void iucv_path_resumed(struct iucv_irq_data *data)
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 {
u16 ippathid;
u8 ipflags1;
......@@ -1606,6 +1600,13 @@ struct iucv_message_complete {
u8 res2[3];
} __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)
{
struct iucv_message_complete *imc = (void *) 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 {
u16 ippathid;
u8 ipflags1;
......@@ -1653,6 +1647,13 @@ struct iucv_message_pending {
u8 res2[3];
} __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)
{
struct iucv_message_pending *imp = (void *) data;
......@@ -1673,7 +1674,7 @@ static void iucv_message_pending(struct iucv_irq_data *data)
}
}
/**
/*
* iucv_tasklet_fn:
*
* This tasklet loops over the queue of irq buffers created by
......@@ -1717,7 +1718,7 @@ static void iucv_tasklet_fn(unsigned long ignored)
spin_unlock(&iucv_table_lock);
}
/**
/*
* iucv_work_fn:
*
* 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)
spin_unlock_bh(&iucv_table_lock);
}
/**
/*
* iucv_external_interrupt
* @code: irq code
*
* Handles external interrupts coming in from CP.
* 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