Hi,
Here's a patch against 2.5.2-pre9 that updates the usb-skeleton driver
to document the module reference count logic a bit better. The patch
was written by Chris Rankin.
thanks,
greg k-h
diff -Nru a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
--- a/drivers/usb/usb-skeleton.c Sun Jan 6 12:18:37 2002
+++ b/drivers/usb/usb-skeleton.c Sun Jan 6 12:18:37 2002
@@ -138,9 +138,37 @@
/* lock to protect the minor_table structure */
static DECLARE_MUTEX (minor_table_mutex);
-/* file operations needed when we register this driver */
+/*
+ * File operations needed when we register this driver.
+ * This assumes that this driver NEEDS file operations,
+ * of course, which means that the driver is expected
+ * to have a node in the /dev directory. If the USB
+ * device were for a network interface then the driver
+ * would use "struct net_driver" instead, and a serial
+ * device would use "struct tty_driver".
+ */
static struct file_operations skel_fops = {
+ /*
+ * The owner field is part of the module-locking
+ * mechanism. The idea is that the kernel knows
+ * which module to increment the use-counter of
+ * BEFORE it calls the device's open() function.
+ * This also means that the kernel can decrement
+ * the use-counter again before calling release()
+ * or should the open() function fail.
+ *
+ * Not all device structures have an "owner" field
+ * yet. "struct file_operations" and "struct net_device"
+ * do, while "struct tty_driver" does not. If the struct
+ * has an "owner" field, then initialize it to the value
+ * THIS_MODULE and the kernel will handle all module
+ * locking for you automatically. Otherwise, you must
+ * increment the use-counter in the open() function
+ * and decrement it again in the release() function
+ * yourself.
+ */
owner: THIS_MODULE,
+
read: skel_read,
write: skel_write,
ioctl: skel_ioctl,
@@ -215,7 +243,11 @@
return -ENODEV;
}
- /* increment our usage count for the module */
+ /* Increment our usage count for the module.
+ * This is redundant here, because "struct file_operations"
+ * has an "owner" field. This line is included here soley as
+ * a reference for drivers using lesser structures... ;-)
+ */
MOD_INC_USE_COUNT;
/* lock our minor table and get our local data for this minor */
@@ -278,8 +310,8 @@
/* the device was unplugged before the file was released */
up (&dev->sem);
skel_delete (dev);
- MOD_DEC_USE_COUNT;
up (&minor_table_mutex);
+ MOD_DEC_USE_COUNT;
return 0;
}
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel