net: qrtr: Do not call wait while holding spinlock

Do not call wait_for_completion holding spinlock inside
qrtr_local_enqueue().This will result in disabling interrupts
for long time if we did not get signal for rx_queue_has_space
completion from qrtr_recvmsg() for control port.

This wait mechanisim we added to avoid the packet drop issue
via the control port for control packets where we are waiting
for the space in the control socket using wait api's. this wait
api will be signaled once control sock has some space.

This patch will removes the wait inside spinlock.

Change-Id: I469c860e1a016348235f11e1e21ed97743325773
Signed-off-by: Sivaji Boddupilli <quic_boddupil@quicinc.com>
Signed-off-by: Linux Image Build Automation <quic_ibautomat@quicinc.com>
This commit is contained in:
Sivaji Boddupilli 2023-07-18 18:20:22 +05:30 committed by Linux Image Build Automation
parent 0a6cdea3d8
commit 4b977c48ea

View File

@ -1480,13 +1480,12 @@ void qrtr_endpoint_unregister(struct qrtr_endpoint *ep)
if (*slot != node)
continue;
src.sq_node = iter.index;
skb = qrtr_alloc_ctrl_packet(&pkt, GFP_ATOMIC);
spin_unlock_irqrestore(&qrtr_nodes_lock, flags);
skb = qrtr_alloc_ctrl_packet(&pkt, GFP_KERNEL);
if (skb) {
pkt->cmd = cpu_to_le32(QRTR_TYPE_BYE);
qrtr_local_enqueue(NULL, skb, QRTR_TYPE_BYE, &src, &dst, 0);
}
spin_unlock_irqrestore(&qrtr_nodes_lock, flags);
qrtr_fwd_del_proc(node, iter.index);
spin_lock_irqsave(&qrtr_nodes_lock, flags);
}