On Tue, Jun 06, 2023 at 06:01:17PM +0530, Manivannan Sadhasivam wrote: ... > +static void mhi_ep_net_dev_process_queue_packets(struct work_struct *work) > +{ > + struct mhi_ep_net_dev *mhi_ep_netdev = container_of(work, > + struct mhi_ep_net_dev, xmit_work); > + struct mhi_ep_device *mdev = mhi_ep_netdev->mdev; > + struct sk_buff_head q; > + struct sk_buff *skb; > + int ret; > + > + if (mhi_ep_queue_is_empty(mdev, DMA_FROM_DEVICE)) { > + netif_stop_queue(mhi_ep_netdev->ndev); > + return; > + } > + > + __skb_queue_head_init(&q); > + > + spin_lock_bh(&mhi_ep_netdev->tx_lock); > + skb_queue_splice_init(&mhi_ep_netdev->tx_buffers, &q); > + spin_unlock_bh(&mhi_ep_netdev->tx_lock); > + > + while ((skb = __skb_dequeue(&q))) { > + ret = mhi_ep_queue_skb(mdev, skb); > + if (ret) { Hi Manivannan, I wonder if this should be kfree_skb(skb); > + kfree(skb); > + goto exit_drop; > + } ...