From owner-freebsd-current Wed Jul 10 8:11:31 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 89E2637B400 for ; Wed, 10 Jul 2002 08:11:28 -0700 (PDT) Received: from mail.speakeasy.net (mail16.speakeasy.net [216.254.0.216]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5E7DD43E58 for ; Wed, 10 Jul 2002 08:11:28 -0700 (PDT) (envelope-from jhb@FreeBSD.org) Received: (qmail 15046 invoked from network); 10 Jul 2002 15:11:26 -0000 Received: from unknown (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender ) by mail16.speakeasy.net (qmail-ldap-1.03) with DES-CBC3-SHA encrypted SMTP for ; 10 Jul 2002 15:11:26 -0000 Received: from laptop.baldwin.cx (gw1.twc.weather.com [216.133.140.1]) by server.baldwin.cx (8.11.6/8.11.6) with ESMTP id g6AFBP001333; Wed, 10 Jul 2002 11:11:25 -0400 (EDT) (envelope-from jhb@FreeBSD.org) Message-ID: X-Mailer: XFMail 1.5.2 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <200207100334.g6A3Yp323268@arch20m.dellroad.org> Date: Wed, 10 Jul 2002 11:11:30 -0400 (EDT) From: John Baldwin To: Archie Cobbs Subject: Re: Timeout and SMP race Cc: Julian Elischer , freebsd-current@FreeBSD.ORG, David Xu Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 10-Jul-2002 Archie Cobbs wrote: > John Baldwin writes: >> > code would be modified to fit this new behaviour, besides this, everywhere >> > callout_stop() is used need to hold sched_lock and do a mi_switch() and >> > modify td_flags is also unacceptable, this SMP race should be resolved in >> > kern_timeout.c. >> >> How would you resolve it while still preserving the existing semantics? >> Saying "this race should be resolved" doesn't explain how you would go about >> resolving it. It's a lot harder than it looks. > > I don't know if this is the same problem or a different problem, but FWIW.. It is the same problem. What we do is change callout_stop() to let you know if it actually stopped the timeout or not. You then have to use your own locking and synchronization in the timeout function and yourself to close the rest of the race. -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message