|
@@ -597,6 +597,7 @@ static int rppc_release(struct inode *inode, struct file *filp)
|
|
|
{
|
|
{
|
|
|
struct rppc_instance *rpc = filp->private_data;
|
|
struct rppc_instance *rpc = filp->private_data;
|
|
|
struct rppc_device *rppcdev = rpc->rppcdev;
|
|
struct rppc_device *rppcdev = rpc->rppcdev;
|
|
|
|
|
+ struct sk_buff *skb = NULL;
|
|
|
|
|
|
|
|
dev_dbg(rpc->dev, "releasing Instance %p, in state %d\n", rpc,
|
|
dev_dbg(rpc->dev, "releasing Instance %p, in state %d\n", rpc,
|
|
|
rpc->state);
|
|
rpc->state);
|
|
@@ -611,6 +612,11 @@ static int rppc_release(struct inode *inode, struct file *filp)
|
|
|
|
|
|
|
|
rppc_delete_fxns(rpc);
|
|
rppc_delete_fxns(rpc);
|
|
|
|
|
|
|
|
|
|
+ while (!skb_queue_empty(&rpc->queue)) {
|
|
|
|
|
+ skb = skb_dequeue(&rpc->queue);
|
|
|
|
|
+ kfree_skb(skb);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
mutex_lock(&rpc->lock);
|
|
mutex_lock(&rpc->lock);
|
|
|
idr_for_each(&rpc->dma_idr, rppc_free_dmabuf, rpc);
|
|
idr_for_each(&rpc->dma_idr, rppc_free_dmabuf, rpc);
|
|
|
idr_destroy(&rpc->dma_idr);
|
|
idr_destroy(&rpc->dma_idr);
|