Merge "net: qrtr: Handle -EAGAIN from MHI layer"

This commit is contained in:
qctecmdr 2023-08-16 10:56:13 -07:00 committed by Gerrit - the friendly Code Review server
commit b61d559c7c

View File

@ -20,6 +20,7 @@ struct qrtr_mhi_dev {
struct mhi_device *mhi_dev;
struct device *dev;
struct completion prepared;
struct completion ringfull;
};
/* From MHI to QRTR */
@ -43,10 +44,13 @@ static void qcom_mhi_qrtr_ul_callback(struct mhi_device *mhi_dev,
struct mhi_result *mhi_res)
{
struct sk_buff *skb = mhi_res->buf_addr;
struct qrtr_mhi_dev *qdev = dev_get_drvdata(&mhi_dev->dev);
if (skb->sk)
sock_put(skb->sk);
consume_skb(skb);
complete_all(&qdev->ringfull);
}
/* Send data over MHI */
@ -83,14 +87,16 @@ static int __qcom_mhi_qrtr_send(struct qrtr_endpoint *ep, struct sk_buff *skb)
static int qcom_mhi_qrtr_send(struct qrtr_endpoint *ep, struct sk_buff *skb)
{
struct qrtr_mhi_dev *qdev = container_of(ep, struct qrtr_mhi_dev, ep);
int rc;
int retry = 5;
do {
rc = __qcom_mhi_qrtr_send(ep, skb);
if (rc == -EAGAIN)
usleep_range(1000, 2000);
} while (rc == -EAGAIN && --retry);
if (rc == -EAGAIN) {
reinit_completion(&qdev->ringfull);
wait_for_completion(&qdev->ringfull);
}
} while (rc == -EAGAIN);
return rc;
}
@ -139,6 +145,7 @@ static int qcom_mhi_qrtr_probe(struct mhi_device *mhi_dev,
qdev->dev = &mhi_dev->dev;
qdev->ep.xmit = qcom_mhi_qrtr_send;
init_completion(&qdev->prepared);
init_completion(&qdev->ringfull);
dev_set_drvdata(&mhi_dev->dev, qdev);