|
@@ -232,8 +232,9 @@ int misc_register(struct miscdevice * misc)
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * misc_deregister - unregister a miscellaneous device
|
|
|
|
|
|
+ * __misc_deregister - unregister a miscellaneous device
|
|
* @misc: device to unregister
|
|
* @misc: device to unregister
|
|
|
|
+ * @suspended: to be set if the function is used during suspend/resume
|
|
*
|
|
*
|
|
* Unregister a miscellaneous device that was previously
|
|
* Unregister a miscellaneous device that was previously
|
|
* successfully registered with misc_register(). Success
|
|
* successfully registered with misc_register(). Success
|
|
@@ -241,7 +242,7 @@ int misc_register(struct miscdevice * misc)
|
|
* indicates an error.
|
|
* indicates an error.
|
|
*/
|
|
*/
|
|
|
|
|
|
-int misc_deregister(struct miscdevice * misc)
|
|
|
|
|
|
+int __misc_deregister(struct miscdevice *misc, bool suspended)
|
|
{
|
|
{
|
|
int i = misc->minor;
|
|
int i = misc->minor;
|
|
|
|
|
|
@@ -250,7 +251,11 @@ int misc_deregister(struct miscdevice * misc)
|
|
|
|
|
|
mutex_lock(&misc_mtx);
|
|
mutex_lock(&misc_mtx);
|
|
list_del(&misc->list);
|
|
list_del(&misc->list);
|
|
- device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
|
|
|
|
|
|
+ if (suspended)
|
|
|
|
+ destroy_suspended_device(misc_class,
|
|
|
|
+ MKDEV(MISC_MAJOR, misc->minor));
|
|
|
|
+ else
|
|
|
|
+ device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
|
|
if (i < DYNAMIC_MINORS && i>0) {
|
|
if (i < DYNAMIC_MINORS && i>0) {
|
|
misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
|
|
misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
|
|
}
|
|
}
|
|
@@ -259,7 +264,7 @@ int misc_deregister(struct miscdevice * misc)
|
|
}
|
|
}
|
|
|
|
|
|
EXPORT_SYMBOL(misc_register);
|
|
EXPORT_SYMBOL(misc_register);
|
|
-EXPORT_SYMBOL(misc_deregister);
|
|
|
|
|
|
+EXPORT_SYMBOL(__misc_deregister);
|
|
|
|
|
|
static int __init misc_init(void)
|
|
static int __init misc_init(void)
|
|
{
|
|
{
|