Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Jun 2013 21:54:45 -0700
From:      Kevin Oberman <rkoberman@gmail.com>
To:        Bengt Ahlgren <bengta@sics.se>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, Michiel Boland <boland37@xs4all.nl>, FreeBSD Stable <freebsd-stable@freebsd.org>
Subject:   Re: system sporadically hangs on shutdown after switching to WITH_NEW_XORG
Message-ID:  <CAN6yY1uPXX-mQwS=HQrfKcBK4_TR9kK3RZxKG=qKm43WhxpzHQ@mail.gmail.com>
In-Reply-To: <uh7obb0tk15.fsf@P142.sics.se>
References:  <51BDD593.5000102@xs4all.nl> <51BF60A8.6000503@xs4all.nl> <20130617193726.GR91021@kib.kiev.ua> <uh7obb0tk15.fsf@P142.sics.se>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jun 20, 2013 at 4:55 PM, Bengt Ahlgren <bengta@sics.se> wrote:

> Konstantin Belousov <kostikbel@gmail.com> writes:
>
> > On Mon, Jun 17, 2013 at 09:16:56PM +0200, Michiel Boland wrote:
> >> On 06/16/2013 17:11, Michiel Boland wrote:
> >> > Hi. Recently I switched to WITH_NEW_XORG, primarily because the
> >> > stock X server
> >> > with Intel driver has some issues that make it unusable for me.
> >> >
> >> > The new X server and Intel driver works extremely well, so kudos
> >> > to whoever made
> >> > this possible.
> >> >
> >> > Unfortunately, I am now experiencing random hangs on shutdown. On
> >> > shutdown the
> >> > system randomly freezes after
> >> >
> >> > [...] syslogd: exiting on signal 15
> >> >
> >> > I would then expect to see 'Waiting (max 60 seconds) for system
> >> > process 'XXX' to
> >> > stop messages, but these never arrive.
> >>
> >> So it turns out that init hangs because vga_txtmouse (draw_txtmouse in
> fact) is
> >> hogging the clock swi. The routine is waiting for a vertical retrace
> which never
> >> arrives. (The new intel driver can't return to text console, so the
> screen just
> >> goes blank when X exits.)
> >>
> >> Some workarounds:
> >>
> >> - don't run moused (i.e. disable it in rc.conf and devd.conf)
> >>    instead run the X server in combination with hald
> >>
> >> - do run moused, but then either
> >>
> >>   - unplug the mouse before shutting down
> >>
> >>    - build a kernel with VGA_NO_FONT_LOADING
> >>
> >> Of course the long-term fix is to remove the possibly infinite loop in
> >> draw_txtmouse.
> >>
> >> Thanks to Konstantin for his patience in helping me track this down.
> >
> > The following patch, although a hack, should fix the issue.
> > Michiel tested it.
> >
> > diff --git a/sys/dev/drm2/i915/intel_fb.c b/sys/dev/drm2/i915/intel_fb.c
> > index 3cb3b78..e41a49f 100644
> > --- a/sys/dev/drm2/i915/intel_fb.c
> > +++ b/sys/dev/drm2/i915/intel_fb.c
> > @@ -207,6 +207,8 @@ static void intel_fbdev_destroy(struct drm_device
> *dev,
> >       }
> >  }
> >
> > +extern int sc_txtmouse_no_retrace_wait;
> > +
> >  int intel_fbdev_init(struct drm_device *dev)
> >  {
> >       struct intel_fbdev *ifbdev;
> > @@ -229,6 +231,7 @@ int intel_fbdev_init(struct drm_device *dev)
> >
> >       drm_fb_helper_single_add_all_connectors(&ifbdev->helper);
> >       drm_fb_helper_initial_config(&ifbdev->helper, 32);
> > +     sc_txtmouse_no_retrace_wait = 1;
> >       return 0;
> >  }
> >
> > diff --git a/sys/dev/syscons/scvgarndr.c b/sys/dev/syscons/scvgarndr.c
> > index 6e6663c..fc7f02f 100644
> > --- a/sys/dev/syscons/scvgarndr.c
> > +++ b/sys/dev/syscons/scvgarndr.c
> > @@ -395,6 +395,8 @@ vga_txtblink(scr_stat *scp, int at, int flip)
> >  {
> >  }
> >
> > +int sc_txtmouse_no_retrace_wait;
> > +
> >  #ifndef SC_NO_CUTPASTE
> >
> >  static void
> > @@ -445,7 +447,9 @@ draw_txtmouse(scr_stat *scp, int x, int y)
> >  #if 1
> >       /* wait for vertical retrace to avoid jitter on some videocards */
> >       crtc_addr = scp->sc->adp->va_crtc_addr;
> > -     while (!(inb(crtc_addr + 6) & 0x08)) /* idle */ ;
> > +     while (!sc_txtmouse_no_retrace_wait &&
> > +         !(inb(crtc_addr + 6) & 0x08))
> > +             /* idle */ ;
> >  #endif
> >       c = scp->sc->mouse_char;
> >       vidd_load_font(scp->sc->adp, 0, 32, 8, font_buf, c, 4);
>
> This patch fixes the shutdown hangs after KMS is initialised for me (on
> a Thinkpad X201 w recent 9-STABLE)!  Thanks!
>
> 9.1-REL does not hang, however.  Don't know whether this is interesting,
> but I bisected 9-STABLE to find out where the problem started (kernel
> only together with 9.1-REL userland).  9-STABLE up to and including
> r246775 works as it should, but starting with r246785, it hangs on
> shutdown.  See (yes, it is mouse related!):
>
> http://svnweb.freebsd.org/base?view=revision&revision=246785
>
> Just to be clear: These hangs _only_ occur if KMS gets initialised.
> When testing this, I booted, started kdm, and then chose shutdown in the
> kdm menu.  moused was running.
>
> Bengt
>

See *251961* <http://svnweb.freebsd.org/base?view=revision&revision=251961>to
see the work-around and an explanation of what it worked around. This
goes away when return to console mode is available with KMS. The problem is
as old as KMS support, but
246785<http://svnweb.freebsd.org/base?view=revision&revision=246785>triggered
it most of the time when it was occasional before that. It's a
race issue.
-- 
R. Kevin Oberman, Network Engineer
E-mail: rkoberman@gmail.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAN6yY1uPXX-mQwS=HQrfKcBK4_TR9kK3RZxKG=qKm43WhxpzHQ>