Date: Sat, 3 Dec 2005 12:09:22 -0800 From: George Hartzell <hartzell@kestrel.alerce.com> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: Jacques Garrigue <garrigue@math.nagoya-u.ac.jp>, hartzell@alerce.com, freebsd-stable@FreeBSD.org, freebsd-mobile@FreeBSD.org Subject: Re: IBM T42 freezes when going to sleep under X11 Message-ID: <17297.64370.923912.244075@satchel.alerce.com> In-Reply-To: <20051203085251.GY22816@cell.sick.ru> References: <20051114.175031.93019232.garrigue@math.nagoya-u.ac.jp> <20051202.110448.25479607.garrigue@math.nagoya-u.ac.jp> <17296.46122.671120.884060@satchel.alerce.com> <20051203085251.GY22816@cell.sick.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
Gleb Smirnoff writes: > On Fri, Dec 02, 2005 at 12:52:58PM -0800, George Hartzell wrote: > G> > I finally found the cause of my problems: there has been changes in > G> > the em driver (Gb ethernet), such that the machine freezes when trying > G> > to switch automatically from the X11 VT to the system console, before > G> > going to sleep. The interaction is surprising, but clearly the problem > G> > disappears when I remove "device em" from the kernel configuration, > G> > and it reappears when I do "kldload if_em". Since I'm using only ath > G> > (wireless) anyway, this is fine with me... > G> > > G> > A previous partial solution suggested to me was to add > G> > hw.syscons.sc_no_suspend_vtswitch=1 > G> > to sysctl.conf, but this means the screen gets garbled and I have to > G> > do the switch by hand anyway, which is a real pain. > G> > Worse still: the machine would still freeze when going to sleep while > G> > the disk is active. > G> > > G> > The last step is to track down the bug in em, as it still seems to > G> > be there in yesterday's STABLE. > G> > G> I don't seem to have any problem with my T42p using a kernel compiled > G> on 11/29 11:21 > G> > G> My copy of if_em.c is: > G> > G> /*$FreeBSD: src/sys/dev/em/if_em.c,v 1.65.2.8 2005/11/25 14:11:59 glebius Exp $*/ > > George, Jacques, > > what em(4) cards exactly do you have? > > pciconf -lv | grep -A4 ^em > > Can you please try the attached patch? > > -- > Totus tuus, Glebius. > GLEBIUS-RIPN GLEB-RIPE > Index: if_em.c > =================================================================== > RCS file: /home/ncvs/src/sys/dev/em/if_em.c,v > retrieving revision 1.85 > diff -u -r1.85 if_em.c > --- if_em.c 10 Nov 2005 11:44:37 -0000 1.85 > +++ if_em.c 11 Nov 2005 12:13:48 -0000 > @@ -129,8 +129,11 @@ > static int em_attach(device_t); > static int em_detach(device_t); > static int em_shutdown(device_t); > +static int em_suspend(device_t); > +static int em_resume(device_t); > static void em_intr(void *); > static void em_start(struct ifnet *); > +static void em_start_locked(struct ifnet *ifp); > static int em_ioctl(struct ifnet *, u_long, caddr_t); > static void em_watchdog(struct ifnet *); > static void em_init(void *); > @@ -208,6 +211,8 @@ > DEVMETHOD(device_attach, em_attach), > DEVMETHOD(device_detach, em_detach), > DEVMETHOD(device_shutdown, em_shutdown), > + DEVMETHOD(device_suspend, em_suspend), > + DEVMETHOD(device_resume, em_resume), > {0, 0} > }; > > @@ -580,6 +585,41 @@ > return(0); > } > > +/* > + * Suspend/resume device methods. > + */ > +static int > +em_suspend(device_t dev) > +{ > + struct adapter *adapter = device_get_softc(dev); > + > + EM_LOCK(adapter); > + em_stop(adapter); > + EM_UNLOCK(adapter); > + > + return bus_generic_suspend(dev); > +} > + > +static int > +em_resume(device_t dev) > +{ > + struct adapter *adapter = device_get_softc(dev); > + struct ifnet *ifp; > + > + EM_LOCK(adapter); > + ifp = adapter->ifp; > + if (ifp->if_flags & IFF_UP) { > + em_init_locked(adapter); > + if (ifp->if_drv_flags & IFF_DRV_RUNNING) > + em_start_locked(ifp); > + } > + > + em_init_locked(adapter); > + EM_UNLOCK(adapter); > + > + return bus_generic_resume(dev); > +} > + > > /********************************************************************* > * Transmit entry point I'll post details as a reply to earlier in the thread, but I have started seeing crashes. I don't suspect the em driver, I *do* suspect synaptics support. But I have more digging to do.... With respect to this patch, it causes me a problem. I have ifconfig_em0="DHCP NOAUTO" in my /etc/rc.conf, so that the interface doesn't come up unless I ask it too (usually via /etc/rc.d/netif start em0) With this patch applied, even if I've never started it, the interface gets started. If I have a cable plugged in, it grabs a dhcp address and takes off. My devd.conf is stock. g.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?17297.64370.923912.244075>