From owner-freebsd-acpi@FreeBSD.ORG Fri Sep 21 22:27:33 2007 Return-Path: Delivered-To: freebsd-acpi@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CB95416A418; Fri, 21 Sep 2007 22:27:33 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from anuket.mj.niksun.com (gwnew.niksun.com [65.115.46.162]) by mx1.freebsd.org (Postfix) with ESMTP id 8C74413C480; Fri, 21 Sep 2007 22:27:33 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from niksun.com (anuket [10.70.0.5]) by anuket.mj.niksun.com (8.13.6/8.13.6) with ESMTP id l8LMRWHP060818; Fri, 21 Sep 2007 18:27:32 -0400 (EDT) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: John Baldwin Date: Fri, 21 Sep 2007 18:27:28 -0400 User-Agent: KMail/1.6.2 References: <200709181516.11207.jkim@FreeBSD.org> <200709211715.17940.jhb@freebsd.org> In-Reply-To: <200709211715.17940.jhb@freebsd.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200709211827.29763.jkim@FreeBSD.org> X-Virus-Scanned: ClamAV version 0.90.2, clamav-milter version 0.90.2 on anuket.mj.niksun.com X-Virus-Status: Clean Cc: freebsd-acpi@FreeBSD.org, freebsd-current@FreeBSD.org Subject: Re: [PATCH] OsdSynch.c modernization X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Sep 2007 22:27:33 -0000 On Friday 21 September 2007 05:15 pm, John Baldwin wrote: > On Tuesday 18 September 2007 03:16:07 pm Jung-uk Kim wrote: > > I have rewritten sys/dev/acpica/Osd/OsdSynch.c to match the > > modern ACPI-CA and -CURRENT: > > > > http://people.freebsd.org/~jkim/acpica/OsdSynch.diff > > Why do you use a loop around tsleep() rather than just use > sx_xlock() (which will block) for the WAIT_FOREVER case when > waiting on a semaphore? You mean for AcpiOsAcquireMutex()? sx_xlock() cannot be waken up by the wait channel. > Why don't you just use a spin mutex for the spin lock? > That is a far better fit than the sx lock stuff you are doing. > Manually doing spinlock_enter() (wrongly btw, you should use > critical_enter(), not sched_pin() otherwise you can be preempted) > just to avoid the assertion failure is just going to result in > obscure hangs. Does ACPI-CA want to malloc() while holding an ACPI > spin lock or something? I thought exactly the same when I started rewriting it (almost half year ago!). I have tried all of the above, spent numerous sleepless nights, and miserably failed. :-( Spin mutex is too restrictive (e.g., it cannot be used with other locks gracefully). critical_enter() causes: panic: blockable sleep lock (sleep mutex) 32 @ /usr/src/sys/vm/uma_core.c:1830 cpuid = 0 KDB: enter: panic [thread pid 21 tid 100013 ] Stopped at kdb_enter+0x32: leave http://docs.freebsd.org/cgi/mid.cgi?200709121927.46465.jkim I guess it wants to malloc() while holding spin lock although I haven't traced it down. I intend to investigate and fix further after RELENG_7 is branched and I really like to hear more ideas from you. Thanks, Jung-uk Kim