On Fri, 31 Jan 2020 19:20:07 +0530, Manivannan Sadhasivam wrote: > +/* From QRTR to MHI */ > +static void qcom_mhi_qrtr_ul_callback(struct mhi_device *mhi_dev, > + struct mhi_result *mhi_res) > +{ > + struct qrtr_mhi_dev *qdev = dev_get_drvdata(&mhi_dev->dev); > + struct qrtr_mhi_pkt *pkt; > + unsigned long flags; > + > + spin_lock_irqsave(&qdev->ul_lock, flags); > + pkt = list_first_entry(&qdev->ul_pkts, struct qrtr_mhi_pkt, node); > + list_del(&pkt->node); > + complete_all(&pkt->done); > + > + kref_put(&pkt->refcount, qrtr_mhi_pkt_release); Which kref_get() does this pair with? Looks like qcom_mhi_qrtr_send() will release a reference after completion, too. > + spin_unlock_irqrestore(&qdev->ul_lock, flags); > +}