From owner-freebsd-current@freebsd.org Thu Mar 9 13:08:06 2017 Return-Path: Delivered-To: freebsd-current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 07219D02EA1 for ; Thu, 9 Mar 2017 13:08:06 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 788751F2A for ; Thu, 9 Mar 2017 13:08:05 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id v29D7sv1013863 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 9 Mar 2017 15:07:54 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua v29D7sv1013863 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id v29D7sqH013862; Thu, 9 Mar 2017 15:07:54 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 9 Mar 2017 15:07:54 +0200 From: Konstantin Belousov To: Alexandre Martins Cc: freebsd-current Subject: Re: smp_rendezvous_action: Are atomics correctly used ? Message-ID: <20170309130754.GX30979@kib.kiev.ua> References: <2092905.6A8RAGlt18@pc-alex> <4355496.HzrDjoMEL6@pc-alex> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4355496.HzrDjoMEL6@pc-alex> User-Agent: Mutt/1.8.0 (2017-02-23) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Mar 2017 13:08:06 -0000 On Thu, Mar 09, 2017 at 10:59:27AM +0100, Alexandre Martins wrote: > I have the save question for the cpu_ipi_pending here: > > https://svnweb.freebsd.org/base/head/sys/x86/x86/mp_x86.c?view=annotate#l1080 > > Le jeudi 9 mars 2017, 10:43:14 Alexandre Martins a ?crit : > > Hello, > > > > I'm curently reading the code of the function smp_rendezvous_action, in > > kern/subr_smp.c file. In that function, i see that the variable > > smp_rv_waiters is read in some while() loop in a non-atomic way. > > > > https://svnweb.freebsd.org/base/head/sys/kern/subr_smp.c?view=annotate#l412 > > https://svnweb.freebsd.org/base/head/sys/kern/subr_smp.c?view=annotate#l458 > > https://svnweb.freebsd.org/base/head/sys/kern/subr_smp.c?view=annotate#l472 > > > > I suspect one of my freeze to be due by that. You should provide either evidence or, at least, some reasoning supporting your claims. > > > > Should this function be patched to use > > "atomic_load_acq_int(&smp_rv_waiters[])" ? There too. As a side note, any read or write of the naturally aligned integer types with size less or equal than the machine word, on all supported architectures, are atomic. The meaning of the word atomic there is that when reading, you always get a complete value that was written by a writer into this location, not some out of thin air value. Similarly, when writing, you are guaranteed that any observer of the write will see the value you have wrote. The guarantees above hold both for C-level code and for the assembler accesses. atomic_load_acq() provides additional guarantees which do not affect the value read from the variable itself, but establish the ordering on the visibility of the related operations.