PERFORCE change 99078 for review
John Baldwin
jhb at FreeBSD.org
Mon Jun 12 20:33:06 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=99078
Change 99078 by jhb at jhb_mutex on 2006/06/12 20:30:28
Style fixes and close a race.
Affected files ...
.. //depot/projects/smpng/sys/kern/subr_firmware.c#9 edit
Differences ...
==== //depot/projects/smpng/sys/kern/subr_firmware.c#9 (text+ko) ====
@@ -96,11 +96,6 @@
return frp;
}
-/*
- * Note that for a module loaded via kldload before it was asked for by
- * a consumer, fp->file will be NULL, so we won't try to unload the
- * module when the last reference is dropped.
- */
static void
clearentry(struct firmware *fp)
{
@@ -226,8 +221,7 @@
if (fp == NULL)
break;
file = fp->file;
- /* No longer explicitly loaded. */
- fp->file = NULL;
+ clearentry(fp);
mtx_unlock(&firmware_mtx);
linker_release_module(NULL, NULL, file);
@@ -251,6 +245,8 @@
if (fp->refcnt == 0) {
if ((flags & FIRMWARE_UNLOAD) == 0)
fp->flags |= FIRMWAREFLAG_KEEPKLDREF;
+ else if (fp->file)
+ taskqueue_enqueue(taskqueue_thread, &firmware_task);
}
mtx_unlock(&firmware_mtx);
}
@@ -261,6 +257,7 @@
static int
firmware_modevent(module_t mod, int type, void *unused)
{
+ struct firmware *fp;
int i;
switch (type) {
@@ -269,7 +266,7 @@
return 0;
case MOD_UNLOAD:
for (i = 0; i < FIRMWARE_MAX; i++) {
- struct firmware *fp = &firmware_table[i];
+ fp = &firmware_table[i];
fp->flags &= ~FIRMWAREFLAG_KEEPKLDREF;
}
taskqueue_enqueue(taskqueue_thread, &firmware_task);
More information about the p4-projects
mailing list