The patch attached adds a couple of debug lines to say: - What module has been registered for locking - Each time the module gets locked and unlocked.
This works fine for me on linux-2.6.0-test5. I'm fairly sure it worked a couple of days ago when I tested it on 2.4 as well.
Here is a log from me running tzap on a budget card:
ttpci_eeprom: module license 'unspecified' taints kernel. saa7146: register extension 'budget_ci dvb'. saa7146: found saa7146 @ mem df8f7000 (revision 1, irq 18) (0x13c2,0x1011). DVB: registering new adapter (budget_ci: TT-Budget/WinTV-NOVA-T PCI). TT-Budget/WinTV-NOVA-T PCI adapter 0 has MAC addr = 00:d0:5c:22:22:b4 tda1004x: Detected Philips TDA10045H. tda1004x: Detected Philips TDM1316L tuner. DVB: registering frontend 0:0 (Philips TDA10045H)... [[ TZAP started here ]] DVB: Device opened, locking module budget_ci DVB: Device opened, locking module budget_ci DVB: Device opened, locking module budget_ci [[ TZAP stopped here ]] DVB: Device closed, unlocking module budget_ci DVB: Device closed, unlocking module budget_ci DVB: Device closed, unlocking module budget_ci
Module list after load: Module Size Used by tda1004x 13060 1 budget_ci 5376 0 budget_core 5760 1 budget_ci dvb_core 65664 2 tda1004x,budget_core saa7146 15432 2 budget_ci,budget_core ttpci_eeprom 2432 1 budget_core
When tzap is running the budget_ci module is locked against removal: Module Size Used by tda1004x 13060 1 budget_ci 5376 3 budget_core 5760 1 budget_ci dvb_core 65920 8 tda1004x,budget_core saa7146 15432 2 budget_ci,budget_core ttpci_eeprom 2432 1 budget_core
--- linux-2.6.0-test5-dxr3/drivers/media/dvb/dvb-core/dvbdev.c~ 2003-09-17
23:33:56.000000000 +0100
+++ linux-2.6.0-test5-dxr3/drivers/media/dvb/dvb-core/dvbdev.c 2003-09-20
15:50:09.960583408 +0100
@@ -91,6 +91,9 @@
fops_put(file->f_op);
file->f_op = fops_get(old_fops);
module_put(dvbdev->adapter->module);
+ } else {
+ printk("DVB: Device opened, locking module %s\n",
+ module_name(dvbdev->adapter->module));
}
fops_put(old_fops);
return err;
@@ -102,6 +105,8 @@
void dvb_device_release(struct dvb_device *dvbdev)
{
if (dvbdev && dvbdev->adapter) {
+ printk("DVB: Device closed, unlocking module %s\n",
+ module_name(dvbdev->adapter->module));
module_put(dvbdev->adapter->module);
}
}
@@ -285,7 +290,7 @@
memset (adap, 0, sizeof(struct dvb_adapter));
INIT_LIST_HEAD (&adap->device_list);
- printk ("DVB: registering new adapter (%s).\n", name);
+ printk ("DVB: registering new adapter (%s: %s).\n", module_name(module), name);
devfs_mk_dir("dvb/adapter%d", num);
adap->num = num;
