Date: Fri, 3 Apr 1998 01:34:20 +0400 From: =?koi8-r?B?4c7E0sXKIP7F0s7P1w==?= <ache@nagual.pp.ru> To: "Alok K. Dhir" <adhir@worldbank.org>, current@FreeBSD.ORG, phk@FreeBSD.ORG Cc: adkin003@tc.umn.edu Subject: Re: More info RE: X slowdown in -current Message-ID: <19980403013420.63188@nagual.pp.ru> In-Reply-To: <19980402225744.22309@nagual.pp.ru>; from ache@nagual.pp.ru on Thu, Apr 02, 1998 at 10:57:44PM %2B0400 References: <Pine.BSF.3.96.980402134204.620A-100000@shadow.worldbank.org> <19980402225744.22309@nagual.pp.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Apr 02, 1998 at 10:57:44PM +0400, Андрей Чернов wrote: > On Thu, Apr 02, 1998 at 01:43:48PM -0500, Alok K. Dhir wrote: > > > > In case it helps debug the problem, the apps most affected (i.e. > > visibily) by this slowdown are Netscape and xterm. None of my other > > "staple" apps are visibly affected. Even rxvt is fine... > > > > ---------- Forwarded message ---------- > > Date: Thu, 2 Apr 1998 13:14:37 -0500 (EST) > > From: "Alok K. Dhir" <adhir@worldbank.org> > > To: current@freebsd.org > > Subject: X slowdown in -current > > > > The slowdown still exists on a kernel and its world supped and made at > > 11:30am today. I saw a commit go by from phk that I thought was supposed > > to fix this problem, but it doesn't seem to have worked for me. > > > The reason is that phk's fix really _not_ fix anything, try the patch > posted in current recently instead, it works! > This one (related to latest -current) really works, maybe because splhigh() removed: *** sys_generic.c.orig Thu Apr 2 11:22:17 1998 --- sys_generic.c Fri Apr 3 01:22:00 1998 *************** *** 538,545 **** */ fd_mask s_selbits[howmany(2048, NFDBITS)]; fd_mask *ibits[3], *obits[3], *selbits, *sbp; ! struct timeval atv; ! int s, ncoll, error, timo, term; u_int nbufbytes, ncpbytes, nfdbits; if (uap->nd < 0) --- 538,545 ---- */ fd_mask s_selbits[howmany(2048, NFDBITS)]; fd_mask *ibits[3], *obits[3], *selbits, *sbp; ! struct timeval atv, ctv; ! int s, ncoll, error, timo; u_int nbufbytes, ncpbytes, nfdbits; if (uap->nd < 0) *************** *** 600,627 **** error = EINVAL; goto done; } ! term = ticks + tvtohz(&atv); } else ! term = 0; retry: ncoll = nselcoll; p->p_flag |= P_SELECT; error = selscan(p, ibits, obits, uap->nd); if (error || p->p_retval[0]) goto done; ! s = splhigh(); ! if (term && term <= ticks) { ! splx(s); goto done; } - timo = term ? term - ticks : 0; if ((p->p_flag & P_SELECT) == 0 || nselcoll != ncoll) { - splx(s); goto retry; } p->p_flag &= ~P_SELECT; error = tsleep((caddr_t)&selwait, PSOCK | PCATCH, "select", timo); - splx(s); if (error == 0) goto retry; done: --- 600,627 ---- error = EINVAL; goto done; } ! getmicrotime(&ctv); ! timevaladd(&atv, &ctv); ! timo = hzto(&atv); } else ! timo = 0; retry: ncoll = nselcoll; p->p_flag |= P_SELECT; error = selscan(p, ibits, obits, uap->nd); if (error || p->p_retval[0]) goto done; ! getmicrotime(&ctv); ! /* this should be timercmp(&time, &atv, >=) */ ! if (uap->tv && (ctv.tv_sec > atv.tv_sec || ! (ctv.tv_sec == atv.tv_sec && ctv.tv_usec >= atv.tv_usec))) { goto done; } if ((p->p_flag & P_SELECT) == 0 || nselcoll != ncoll) { goto retry; } p->p_flag &= ~P_SELECT; error = tsleep((caddr_t)&selwait, PSOCK | PCATCH, "select", timo); if (error == 0) goto retry; done: *************** *** 701,708 **** { caddr_t bits; char smallbits[32 * sizeof(struct pollfd)]; ! struct timeval atv; ! int s, ncoll, error = 0, timo, term; size_t ni; if (SCARG(uap, nfds) > p->p_fd->fd_nfiles) { --- 701,708 ---- { caddr_t bits; char smallbits[32 * sizeof(struct pollfd)]; ! struct timeval atv, ctv; ! int s, ncoll, error = 0, timo; size_t ni; if (SCARG(uap, nfds) > p->p_fd->fd_nfiles) { *************** *** 724,751 **** error = EINVAL; goto done; } ! term = ticks + tvtohz(&atv); } else ! term = 0; retry: ncoll = nselcoll; p->p_flag |= P_SELECT; error = pollscan(p, (struct pollfd *)bits, SCARG(uap, nfds)); if (error || p->p_retval[0]) goto done; ! s = splhigh(); ! if (term && term <= ticks) { ! splx(s); goto done; } - timo = term ? term - ticks : 0; if ((p->p_flag & P_SELECT) == 0 || nselcoll != ncoll) { - splx(s); goto retry; } p->p_flag &= ~P_SELECT; error = tsleep((caddr_t)&selwait, PSOCK | PCATCH, "poll", timo); - splx(s); if (error == 0) goto retry; done: --- 724,749 ---- error = EINVAL; goto done; } ! getmicrotime(&ctv); ! timevaladd(&atv, &ctv); ! timo = hzto(&atv); } else ! timo = 0; retry: ncoll = nselcoll; p->p_flag |= P_SELECT; error = pollscan(p, (struct pollfd *)bits, SCARG(uap, nfds)); if (error || p->p_retval[0]) goto done; ! getmicrotime(&ctv); ! if (timo && timercmp(&ctv, &atv, >=)) { goto done; } if ((p->p_flag & P_SELECT) == 0 || nselcoll != ncoll) { goto retry; } p->p_flag &= ~P_SELECT; error = tsleep((caddr_t)&selwait, PSOCK | PCATCH, "poll", timo); if (error == 0) goto retry; done: -- Andrey A. Chernov http://www.nagual.pp.ru/~ache/ MTH/SH/HE S-- W-- N+ PEC>+ D A a++ C G>+ QH+(++) 666+>++ Y To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980403013420.63188>