[media] drivers/media/dvb-core/en50221: move code to dvb_ca_private_free()
authorMax Kellermann <max@duempel.org>
Mon, 21 Mar 2016 13:30:17 +0000 (10:30 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 7 Jun 2016 20:14:43 +0000 (17:14 -0300)
Prepare for postponing the call until all file handles have been
closed.

[mchehab@osg.samsung.com: make checkpatch happy]
Signed-off-by: Max Kellermann <max@duempel.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/dvb-core/dvb_ca_en50221.c

index f82cd1ff4f3a015481ef1125cb8f096aaf761132..b1e3a26b1431a6867504204f4ae012a6437ca36a 100644 (file)
@@ -161,6 +161,18 @@ struct dvb_ca_private {
        struct mutex ioctl_mutex;
 };
 
+static void dvb_ca_private_free(struct dvb_ca_private *ca)
+{
+       unsigned int i;
+
+       dvb_unregister_device(ca->dvbdev);
+       for (i = 0; i < ca->slot_count; i++)
+               vfree(ca->slot_info[i].rx_buffer.data);
+
+       kfree(ca->slot_info);
+       kfree(ca);
+}
+
 static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private *ca);
 static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * ebuf, int ecount);
 static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, u8 * ebuf, int ecount);
@@ -1759,10 +1771,7 @@ void dvb_ca_en50221_release(struct dvb_ca_en50221 *pubca)
 
        for (i = 0; i < ca->slot_count; i++) {
                dvb_ca_en50221_slot_shutdown(ca, i);
-               vfree(ca->slot_info[i].rx_buffer.data);
        }
-       kfree(ca->slot_info);
-       dvb_unregister_device(ca->dvbdev);
-       kfree(ca);
+       dvb_ca_private_free(ca);
        pubca->private = NULL;
 }