From owner-freebsd-stable@FreeBSD.ORG Thu Jun 20 23:54:50 2013 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 207D1E1 for ; Thu, 20 Jun 2013 23:54:50 +0000 (UTC) (envelope-from bengta@P142.sics.se) Received: from sink.sics.se (sink.sics.se [193.10.64.88]) by mx1.freebsd.org (Postfix) with ESMTP id A20FA1D4D for ; Thu, 20 Jun 2013 23:54:49 +0000 (UTC) Received: from P142.sics.se (h139n3-u-d1.ias.bredband.telia.com [90.228.197.139]) by sink.sics.se (8.14.5/8.14.5) with ESMTP id r5KNsfGw093422 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 21 Jun 2013 01:54:41 +0200 (CEST) (envelope-from bengta@P142.sics.se) Received: from P142.sics.se (localhost [127.0.0.1]) by P142.sics.se (8.14.5/8.14.5) with ESMTP id r5KNt4f5002042; Fri, 21 Jun 2013 01:55:04 +0200 (CEST) (envelope-from bengta@P142.sics.se) Received: (from bengta@localhost) by P142.sics.se (8.14.5/8.14.5/Submit) id r5KNt2mc002041; Fri, 21 Jun 2013 01:55:02 +0200 (CEST) (envelope-from bengta@P142.sics.se) From: Bengt Ahlgren To: Konstantin Belousov Subject: Re: system sporadically hangs on shutdown after switching to WITH_NEW_XORG In-Reply-To: <20130617193726.GR91021@kib.kiev.ua> (Konstantin Belousov's message of "Mon, 17 Jun 2013 22:37:26 +0300") References: <51BDD593.5000102@xs4all.nl> <51BF60A8.6000503@xs4all.nl> <20130617193726.GR91021@kib.kiev.ua> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (berkeley-unix) Date: Fri, 21 Jun 2013 01:55:02 +0200 Message-ID: MIME-Version: 1.0 Content-Type: text/plain Cc: Michiel Boland , FreeBSD Stable X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Jun 2013 23:54:50 -0000 Konstantin Belousov 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