5.4-p1 crash

Mitch Parks mitch at kuoi.asui.uidaho.edu
Mon Jun 20 01:25:00 GMT 2005


On Sun, 19 Jun 2005, Doug White wrote:

> On Fri, 17 Jun 2005, Mitch Parks wrote:
>> Below are details regarding another crash on a Dell 2600 SMP (HTT and USB
>> disabled). It has been 9 days since the last crash. I didn't have the serial
>> console in place for this last crash, but it is now.
>
> As noted, the ttwakeup() panic is a known bug. The best thing we have for
> a fix is this patch:
>
> http://people.freebsd.org/~mlaier/tty.t_pgrp.diff
>
> Please give it a try and report back if you have any more panics (or
> don't :-) ).

Thanks! This patch appears to be for 5.3, but I manually applied the chunk 
of the patch that didn't apply cleanly and the countdown is on.

I'll report back in 10 days unless something bad happens before then.

Below is the patch chunk #10 that I actually applied rather than the one 
given. If I've done something bad here by removing the PGRP_LOCK please let 
me know.

....
Hunk #6 succeeded at 1154 (offset -51 lines).
Hunk #7 succeeded at 1215 (offset -6 lines).
Hunk #8 succeeded at 1203 (offset -51 lines).
Hunk #9 succeeded at 1946 (offset -5 lines).
Hunk #10 failed at 2562.
Hunk #11 succeeded at 2847 (offset -212 lines).
1 out of 11 hunks failed--saving rejects to tty.c.rej


@@ -2495,19 +2511,21 @@
          * On return following a ttyprintf(), we set tp->t_rocount to 0 so
          * that pending input will be retyped on BS.
          */
+       sx_slock(&proctree_lock);
         if (tp->t_session == NULL) {
+               sx_sunlock(&proctree_lock);
                 ttyprintf(tp, "not a controlling terminal\n");
                 tp->t_rocount = 0;
                 return;
         }
         if (tp->t_pgrp == NULL) {
+               sx_sunlock(&proctree_lock);
                 ttyprintf(tp, "no foreground process group\n");
                 tp->t_rocount = 0;
                 return;
         }
-       PGRP_LOCK(tp->t_pgrp);
-       if ((p = LIST_FIRST(&tp->t_pgrp->pg_members)) == 0) {
-               PGRP_UNLOCK(tp->t_pgrp);
+       if ((p = LIST_FIRST(&tp->t_pgrp->pg_members)) == NULL) {
+               sx_sunlock(&proctree_lock);
                 ttyprintf(tp, "empty foreground process group\n");
                 tp->t_rocount = 0;
                 return;

Or the complete patch:
http://kuoi.asui.uidaho.edu/~mitch/crash/tty_5.4.patch

Mitch Parks
mitch at kuoi.asui.uidaho.edu


More information about the freebsd-stable mailing list