From owner-freebsd-arch@FreeBSD.ORG Wed Jun 6 20:16:20 2012 Return-Path: Delivered-To: freebsd-arch@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 01E35106567C; Wed, 6 Jun 2012 20:16:20 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id D79468FC1C; Wed, 6 Jun 2012 20:16:18 +0000 (UTC) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id XAA09341; Wed, 06 Jun 2012 23:16:11 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1ScMeJ-0009IJ-3l; Wed, 06 Jun 2012 23:16:11 +0300 Message-ID: <4FCFBA89.9030105@FreeBSD.org> Date: Wed, 06 Jun 2012 23:16:09 +0300 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:12.0) Gecko/20120503 Thunderbird/12.0.1 MIME-Version: 1.0 To: Mitsuru IWASAKI References: <4FCB0FE5.4050607@FreeBSD.org> <20120603.234243.28389486.iwasaki@jp.FreeBSD.org> <4FCBBEDD.5000604@FreeBSD.org> <20120607.040342.73368798.iwasaki@jp.FreeBSD.org> In-Reply-To: <20120607.040342.73368798.iwasaki@jp.FreeBSD.org> X-Enigmail-Version: 1.5pre Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: attilio@FreeBSD.org, freebsd-acpi@FreeBSD.org, freebsd-arch@FreeBSD.org Subject: Re: cpu stopping X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jun 2012 20:16:20 -0000 on 06/06/2012 22:03 Mitsuru IWASAKI said the following: > Hi, > > I've created the patches of experimental implementation based on > discussion so far. > > http://people.freebsd.org/~iwasaki/acpi/cpustop_hook-20120606.diff > > In acpi_wakeup.c, cpususpend_handler() and susppcbs are replaced with > cpustop_handler() and stoppcbs. > > This is for RELENG_9 and only for i386 but I think it's enough for the > start. I think that there is no need for DPCPU here. All (affected) CPUs should see the same hook, IMO. At least I can not imagine the case where something else would be required. Also, it might make sense to provide a void pointer as a potential context for for the context. As Attilio has said before this has many similarities to what smp_rendezvous does, just for different kind of situations. > From: Andriy Gapon > Subject: Re: cpu stopping > Date: Sun, 03 Jun 2012 22:45:33 +0300 > Message-ID: <4FCBBEDD.5000604@FreeBSD.org> > >>> Never mind :) What I'm trying to do in the patches is just to unify >>> amd64/i386 independent part (acpi_wakeup.c) for the code maintenance, >>> so please let's commit it first, then start re-design the >>> cpususpend_handler(). >> >> In no way I am trying to delay your work :) >> Just shared my view on the design of cpu stopping code. > > I got it :) > >>>> My view of how this should work is: >>>> - there can be only one master CPU that controls all other (slave) CPUs >>>> - the master sets entry and exit hooks >>> >>> Entry hook for suspending might be >>> ---- >>> ctx_fpusave(suspfpusave[cpu]); >>> wbinvd(); >>> CPU_SET_ATOMIC(cpu, &stopped_cpus); >>> ---- >>> >>> and for stopping is >>> ---- >>> /* Indicate that we are stopped */ >>> CPU_SET_ATOMIC(cpu, &stopped_cpus); >>> ---- >>> >>> Correct? >> >> Yes. The only nit is that CPU_SET_ATOMIC(cpu, &stopped_cpus) could be part of >> the wait loop prologue. No need to duplicate it in each hook. > > OK, I did so. > > I hope the patch is not far from your idea. > > Thanks! -- Andriy Gapon