PERFORCE change 114899 for review
John Baldwin
jhb at FreeBSD.org
Fri Feb 23 20:15:32 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=114899
Change 114899 by jhb at jhb_mutex on 2007/02/23 20:15:10
Merge in changes from jhb_lock.
Affected files ...
.. //depot/projects/smpng/sys/modules/crash/crash.c#35 integrate
.. //depot/projects/smpng/sys/modules/crash2/crash2.c#19 integrate
.. //depot/projects/smpng/sys/modules/evtest/evtest.c#23 integrate
Differences ...
==== //depot/projects/smpng/sys/modules/crash/crash.c#35 (text+ko) ====
@@ -87,6 +87,71 @@
/* Events. */
static void
+sleep_sx_recurse(void)
+{
+ sx_slock(&foo);
+ sx_slock(&foo);
+ printf("sleeping on recursed sx\n");
+ sx_sleep(&load, &foo, PWAIT, "sxsslp", hz/10);
+ sx_sunlock(&foo);
+ sx_sunlock(&foo);
+}
+CRASH_EVENT("test recursive sx_sleep()", sleep_sx_recurse);
+
+static void
+sleep_rw_recurse(void)
+{
+ rw_init(&baz, "baz");
+ rw_rlock(&baz);
+ rw_rlock(&baz);
+ printf("sleeping on recursed rwlock\n");
+ rw_sleep(&load, &baz, PWAIT, "rwrslp", hz/10);
+ rw_runlock(&baz);
+ rw_runlock(&baz);
+ rw_destroy(&baz);
+}
+CRASH_EVENT("test recursive rw_sleep()", sleep_rw_recurse);
+
+static void
+pause_test(void)
+{
+ printf("sleeping for 5 seconds..\n");
+ pause("pt", 5 * hz);
+ printf("awake..\n");
+}
+CRASH_EVENT("test pause()", pause_test);
+
+static void
+sleep_sx(void)
+{
+ sx_slock(&foo);
+ sx_sleep(&load, &foo, PWAIT, "sxsslp", hz/10);
+ if (sx_try_upgrade(&foo) == 0)
+ printf("bad juju, upgrade failed\n");
+ else {
+ sx_sleep(&load, &foo, PWAIT, "sxxslp", hz/10);
+ sx_xunlock(&foo);
+ }
+}
+CRASH_EVENT("test sx_sleep()", sleep_sx);
+
+static void
+sleep_rw(void)
+{
+ rw_init(&baz, "baz");
+ rw_rlock(&baz);
+ rw_sleep(&load, &baz, PWAIT, "rwrslp", hz/10);
+ if (rw_try_upgrade(&baz) == 0)
+ printf("bad juju, upgrade failed\n");
+ else {
+ rw_sleep(&load, &baz, PWAIT, "rwwslp", hz/10);
+ rw_wunlock(&baz);
+ }
+ rw_destroy(&baz);
+}
+CRASH_EVENT("test rw_sleep()", sleep_rw);
+
+static void
lock_destroyed_mtx(void)
{
@@ -170,7 +235,7 @@
#ifdef WITNESS
static void
-rw_sleep(void)
+rw_tsleep(void)
{
rw_init(&baz, "baz");
rw_rlock(&baz);
@@ -178,7 +243,7 @@
rw_runlock(&baz);
rw_destroy(&baz);
}
-CRASH_EVENT("test sleeping with rw lock held", rw_sleep);
+CRASH_EVENT("test sleeping with rw lock held", rw_tsleep);
static void
rw_order_sx(void)
@@ -769,6 +834,8 @@
kthread_exit(0);
break;
}
+ /* Give sysctl time to finish. */
+ pause("delay", hz / 5);
if (ev < 0 || ev >= MAX_EVENT) {
printf("crash: event %d is not defined!\n", event);
continue;
==== //depot/projects/smpng/sys/modules/crash2/crash2.c#19 (text+ko) ====
@@ -361,6 +361,8 @@
kthread_exit(0);
break;
}
+ /* Give sysctl time to finish. */
+ pause("delay", hz / 5);
if (ev < 0 || ev >= MAX_EVENT) {
printf("crash2[%d]: event %d is not defined!\n", i, ev);
continue;
==== //depot/projects/smpng/sys/modules/evtest/evtest.c#23 (text+ko) ====
@@ -300,6 +300,8 @@
while ((ev = event) == 0)
cv_wait(&event_cv, &event_mtx);
mtx_unlock(&event_mtx);
+ /* Give sysctl time to finish. */
+ pause("delay", hz / 5);
if (ev >= 1 && ev <= MAX_EVENT && events[ev].ei_help != NULL)
printf("evtest: %s\n", events[ev].ei_help);
switch (ev) {
More information about the p4-projects
mailing list