Received: by 2002:a17:90a:c8b:0:0:0:0 with SMTP id v11csp2291696pja; Fri, 19 Apr 2019 11:24:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqzyd0J3PgotneiUpfU6O7g7+InKpdo7RDRtwYkXeiDXNMZLz8WNPGgOjS3zCAy7lzf52lCD X-Received: by 2002:aa7:8252:: with SMTP id e18mr5438347pfn.105.1555698245676; Fri, 19 Apr 2019 11:24:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555698245; cv=none; d=google.com; s=arc-20160816; b=ezcY9UBvKIBLn6tJ3ginJtMNwf9EVgtlKhWvdN59Ubmbxd4g4NSF5U6fda/D5oKVs1 jM1OBzimsEpYEIL9pOThpPM4T4Fbtjbp8MdcdB0F4eaeSVeC3c2KcqcloiNX46HUGZk0 3bGYIt0oxMTbQ92Uo7kWORTsDoQ6EdgxEz89a/M49RtoAG/UeZnnJ6xbhqmNFNFwTNVV KJt4j4vfwDMDY0EHp+afN64X4mcIkWKalkue6NsJErWUsQStOFpPWbNZ1i9FVbIuDVTT BzlToQYoAD3dywsYCjNuGie7tFov/dYSFGwsaxXo+NhCOA1uRxTBkvoOsLIwLOFgjc0o LGAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:subject:cc:to :from:date; bh=oQdireEIeNtKNAk2pmJJw7YsOjh6gHM2+mkBT1b38r0=; b=gMURvkQ6bqN2cTcobXPXBd5XfbDH6/+9Dgj3uOuhnp6JYTcJPhIQ3sElSVVNrR5j06 MitnVJOq65POm9JwMn9IPTJIW+qV+Za7MO0c3z7rVOIQvg3B0WjpnnQwgh3RaBOXFq8N EJiR0VZXe8zclEQEwl23pBn80Xmi0zQdx5UID+6iUNuLksffuhkBdguCD2pDVhfE3+K+ zNGCLKblUP13Nas3ke+ADgD0Jb59TQtpArCaPAZ39LRUK4sInVIAnAAHNe1cnYhKybEz PLb04TwP2NdS4agbMupsI2cdgLouU3s/yODXT7s0nbwwa1RAj2gUlHoZW99iefPpiJQm myUA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z4si4512505pgp.428.2019.04.19.11.23.50; Fri, 19 Apr 2019 11:24:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727526AbfDSSVs (ORCPT + 99 others); Fri, 19 Apr 2019 14:21:48 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:60878 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1727399AbfDSSVr (ORCPT ); Fri, 19 Apr 2019 14:21:47 -0400 Received: (qmail 5596 invoked by uid 2102); 19 Apr 2019 13:21:45 -0400 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 19 Apr 2019 13:21:45 -0400 Date: Fri, 19 Apr 2019 13:21:45 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: LKMM Maintainers -- Akira Yokosawa , Andrea Parri , Boqun Feng , Daniel Lustig , David Howells , Jade Alglave , Luc Maranget , Nicholas Piggin , "Paul E. McKenney" , Peter Zijlstra , Will Deacon cc: Kernel development list Subject: [PATCH] Documentation: atomic_t.txt: Explain ordering provided by smp_mb__{before,after}_atomic() Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The description of smp_mb__before_atomic() and smp_mb__after_atomic() in Documentation/atomic_t.txt is slightly terse and misleading. It does not clearly state that these barriers only affect the ordering of other instructions with respect to the atomic operation. This improves the text to make the actual ordering implications clear, and also to explain how these barriers differ from a RELEASE or ACQUIRE ordering. Signed-off-by: Alan Stern --- Documentation/atomic_t.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) Index: usb-devel/Documentation/atomic_t.txt =================================================================== --- usb-devel.orig/Documentation/atomic_t.txt +++ usb-devel/Documentation/atomic_t.txt @@ -171,7 +171,10 @@ The barriers: smp_mb__{before,after}_atomic() only apply to the RMW ops and can be used to augment/upgrade the ordering -inherent to the used atomic op. These barriers provide a full smp_mb(). +inherent to the used atomic op. Unlike normal smp_mb() barriers, they order +only the RMW op itself against the instructions preceding the +smp_mb__before_atomic() or following the smp_mb__after_atomic(); they do +not order instructions on the other side of the RMW op at all. These helper barriers exist because architectures have varying implicit ordering on their SMP atomic primitives. For example our TSO architectures @@ -195,7 +198,8 @@ Further, while something like: atomic_dec(&X); is a 'typical' RELEASE pattern, the barrier is strictly stronger than -a RELEASE. Similarly for something like: +a RELEASE because it orders preceding instructions against both the read +and write parts of the atomic_dec(). Similarly, something like: atomic_inc(&X); smp_mb__after_atomic(); @@ -227,7 +231,8 @@ strictly stronger than ACQUIRE. As illus This should not happen; but a hypothetical atomic_inc_acquire() -- (void)atomic_fetch_inc_acquire() for instance -- would allow the outcome, -since then: +because it would not order the W part of the RMW against the following +WRITE_ONCE. Thus: P1 P2