From patchwork Mon Jul 16 11:30:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Rutland X-Patchwork-Id: 141996 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp2305439ljj; Mon, 16 Jul 2018 04:30:35 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdQyxj5140/B+b/ExlCHTAlW2KSSy7c1AaJpfdHfEqVWkUtiBvlsQudzjaKX5Gf4a1i2hgu X-Received: by 2002:a17:902:8c88:: with SMTP id t8-v6mr16213813plo.117.1531740635004; Mon, 16 Jul 2018 04:30:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531740634; cv=none; d=google.com; s=arc-20160816; b=DiqObX5Jtfv0k03ZAeX5xGZkVyAsJYrpyol+6l2Nq1OM4t1BakCcDQLwLvJTAE/pCl QlJN3MXI+WK43y9BDDYxZuUzr+0Mgs0p8RPUp8xxXxims0r5T2xa3pihCjSY0x0nZ1rp qIGOaKcKTGamCLASRw1Cxx667Towy+9uhtTfSuvVQ0CSCdqAwed5mPkWp0mrmKqktWja 9tBsHdU2VRJN2HXYbS76MVBlHtX858ZBZCsc48/YuuYuOvRnlsAcakNsIX4laO5krxzg paTEeEqfYhLnhaAl2HEGgzRetRLDSxCYA0RT3KeoVHiRH25lvBehZyLaXuKgaRq6s7UE M96g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=8ww4Iu10dwYSze3ynGfFV76Rc3pIHZk8emtUOleM4nU=; b=0laLhSdj/ZX+oyHmaMjotYW8cAbTxSCYnCr/OeUjturTjrfHWsjFgvsFRtBGkhaQWs ep3vn2WN6byWev4Mf+nScVGBqnCnCKAl6zbRprR//wGnOZ2o3o4+/SFilsa6VvImNYR9 UIeBmmTFFedPGvIeMdo+D+46VEM3fP0MtPeIi9Qptg6Qy1Uc9U4yH64jM/F9jwJY5Mea +stzErncwRJ+DFJo+NVcYGh6QbTwJrltM40a3pwzDz6Hl+vYIwfqNVFKmXinTcoS21iV k3NoD5EYlrsIcVtQ5u2YzcXRWJwJXq82vMmePPxOq6WcipRK0ueYiQ+C+OQaNY9fsjgF BTgA== 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 i20-v6si29014920pgb.547.2018.07.16.04.30.34; Mon, 16 Jul 2018 04:30:34 -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 S1730724AbeGPL5b (ORCPT + 31 others); Mon, 16 Jul 2018 07:57:31 -0400 Received: from foss.arm.com ([217.140.101.70]:57548 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728477AbeGPL5b (ORCPT ); Mon, 16 Jul 2018 07:57:31 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 109BE18A; Mon, 16 Jul 2018 04:30:32 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 1F2183F589; Mon, 16 Jul 2018 04:30:28 -0700 (PDT) From: Mark Rutland To: mingo@kernel.org, mingo@redhat.com Cc: andy.shevchenko@gmail.com, arnd@arndb.de, aryabinin@virtuozzo.com, boqun.feng@gmail.com, catalin.marinas@arm.com, dvyukov@google.com, glider@google.com, hpa@zytor.com, linux-kernel@vger.kernel.org, mark.rutland@arm.com, parri.andrea@gmail.com, peter@hurleysoftware.com, peterz@infradead.org, tglx@linutronix.de, will.deacon@arm.com, linux-arm-kernel@lists.infradead.org Subject: [PATCHv4 00/12] atomics: generate atomic headers / instrument arm64 Date: Mon, 16 Jul 2018 12:30:05 +0100 Message-Id: <20180716113017.3909-1-mark.rutland@arm.com> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ingo, Are you happy to pick this series? Both Will and Peter are happy with v3, and since then I've only made a minor cleanup to the commit messages for patches 8-10 (as requested by Peter), and added Will's Acked-by tags. This series scripts the generation of the various atomic headers, to ensure that the various atomic APIs remain consistent, reducing the risk of human error, and simplifying future rework. This fleshes out the instrumented atomics such that arm64 can be migrated over to them. Since v1 [1]: * Use 'p' instead of 'I' for pointer to base int type * Use Peter's patch for ldsem * Rename atomic acquire/release barriers * Handle xchg/cmpxchg variants * Typo fixes * Migrate arm64 to instrumented atomics Since v2 [2]: * Drop undefs for __atomic_*_fence() * Rename __atomic_{pre,post}_fence => __atomic_{pre,post}_full_fence() * Restore atomic_long_cond_read_relaxed() * Add Kbuild step to verify atomic headers are up-to-date * Rework arm64 atomic naming * Commit message cleanups * Accumulate acks Since v3 [3]: * Add Will's Acked-by tags * Clean up rationale for patches 8-10 given we check at kbuild time The series is based on my atomic API cleanup patches [4], which have been queued in the tip locking/core branch. The first six patches clean up some issues with the existing atomic instrumentation, with patch six introducing the header generation infrastructure. The subsequent three patches migrate to each generated header in turn, with the final patch moving arm64 over to the instrumented atomics. The scripts themselves are mostly POSIX sh (modulo local), without bashisms, and work in dash and bash. Per Linus request that it is possible to use git grep to inspect the atomic headers [3], the headers are committed (and not generated by kbuild). Since we now expand the fallback definitions inline, each *should* be easier to find with grep. Each header also has a comment at the top with a path to the script used to generate it. That scripting comes to ~900 lines, and replaces ~1700 lines of hand-written boilerplate with ~4700 lines of generated code. Some of that increase in line count is due to filling in missing portions of the API (e.g. adding all the ordering variants to the instrumented atomics), while some of that is due to expanding fallbacks in place, and consistently spreading these across multiple lines. I've build-tested this for x86_64 and arm64 (with and without LSE), and given this some basic boot testing on an Arm Juno platform. I've pushed the series out to my atomics/generated branch [5], based atop of tip locking/core. Thanks, Mark. [1] https://lkml.kernel.org/r/20180529180746.29684-1-mark.rutland@arm.com [2] https://lkml.kernel.org/r/20180625105952.3756-1-mark.rutland@arm.com [3] https://lkml.kernel.org/r/20180705164053.10073-1-mark.rutland@arm.com [4] https://lkml.kernel.org/r/20180621121321.4761-1-mark.rutland@arm.com [5] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git atomics/generated Mark Rutland (11): atomics/x86: reduce arch_cmpxchg64*() instrumentation atomics: simplify cmpxchg() instrumentation atomics/treewide: instrument xchg() atomics: instrument cmpxchg_double*() atomics/treewide: rework ordering barriers atomics: add common header generation files atomics: switch to generated fallbacks atomics: switch to generated atomic-long atomics: switch to generated instrumentation atomics: check generated headers are up-to-date arm64: use instrumented atomics Peter Zijlstra (1): atomic/tty: Fix up atomic abuse in ldsem Kbuild | 18 +- MAINTAINERS | 1 + arch/alpha/include/asm/atomic.h | 8 +- arch/arm64/include/asm/atomic.h | 237 +-- arch/arm64/include/asm/atomic_ll_sc.h | 28 +- arch/arm64/include/asm/atomic_lse.h | 38 +- arch/arm64/include/asm/cmpxchg.h | 60 +- arch/arm64/include/asm/sync_bitops.h | 16 +- arch/powerpc/include/asm/atomic.h | 17 +- arch/riscv/include/asm/atomic.h | 17 +- arch/x86/include/asm/atomic.h | 2 +- arch/x86/include/asm/atomic64_64.h | 2 +- arch/x86/include/asm/cmpxchg.h | 2 +- arch/x86/include/asm/cmpxchg_64.h | 4 +- drivers/tty/tty_ldsem.c | 82 +- include/asm-generic/atomic-instrumented.h | 1770 +++++++++++++++++--- include/asm-generic/atomic-long.h | 1173 ++++++++++--- include/linux/atomic-fallback.h | 2294 ++++++++++++++++++++++++++ include/linux/atomic.h | 1279 +------------- include/linux/tty_ldisc.h | 4 +- scripts/atomic/atomic-tbl.sh | 186 +++ scripts/atomic/atomics.tbl | 41 + scripts/atomic/check-atomics.sh | 19 + scripts/atomic/fallbacks/acquire | 9 + scripts/atomic/fallbacks/add_negative | 16 + scripts/atomic/fallbacks/add_unless | 16 + scripts/atomic/fallbacks/andnot | 7 + scripts/atomic/fallbacks/dec | 7 + scripts/atomic/fallbacks/dec_and_test | 15 + scripts/atomic/fallbacks/dec_if_positive | 15 + scripts/atomic/fallbacks/dec_unless_positive | 14 + scripts/atomic/fallbacks/fence | 11 + scripts/atomic/fallbacks/fetch_add_unless | 23 + scripts/atomic/fallbacks/inc | 7 + scripts/atomic/fallbacks/inc_and_test | 15 + scripts/atomic/fallbacks/inc_not_zero | 14 + scripts/atomic/fallbacks/inc_unless_negative | 14 + scripts/atomic/fallbacks/read_acquire | 7 + scripts/atomic/fallbacks/release | 8 + scripts/atomic/fallbacks/set_release | 7 + scripts/atomic/fallbacks/sub_and_test | 16 + scripts/atomic/fallbacks/try_cmpxchg | 11 + scripts/atomic/gen-atomic-fallback.sh | 181 ++ scripts/atomic/gen-atomic-instrumented.sh | 182 ++ scripts/atomic/gen-atomic-long.sh | 101 ++ 45 files changed, 5994 insertions(+), 2000 deletions(-) create mode 100644 include/linux/atomic-fallback.h create mode 100755 scripts/atomic/atomic-tbl.sh create mode 100644 scripts/atomic/atomics.tbl create mode 100755 scripts/atomic/check-atomics.sh create mode 100644 scripts/atomic/fallbacks/acquire create mode 100644 scripts/atomic/fallbacks/add_negative create mode 100644 scripts/atomic/fallbacks/add_unless create mode 100644 scripts/atomic/fallbacks/andnot create mode 100644 scripts/atomic/fallbacks/dec create mode 100644 scripts/atomic/fallbacks/dec_and_test create mode 100644 scripts/atomic/fallbacks/dec_if_positive create mode 100644 scripts/atomic/fallbacks/dec_unless_positive create mode 100644 scripts/atomic/fallbacks/fence create mode 100644 scripts/atomic/fallbacks/fetch_add_unless create mode 100644 scripts/atomic/fallbacks/inc create mode 100644 scripts/atomic/fallbacks/inc_and_test create mode 100644 scripts/atomic/fallbacks/inc_not_zero create mode 100644 scripts/atomic/fallbacks/inc_unless_negative create mode 100644 scripts/atomic/fallbacks/read_acquire create mode 100644 scripts/atomic/fallbacks/release create mode 100644 scripts/atomic/fallbacks/set_release create mode 100644 scripts/atomic/fallbacks/sub_and_test create mode 100644 scripts/atomic/fallbacks/try_cmpxchg create mode 100755 scripts/atomic/gen-atomic-fallback.sh create mode 100755 scripts/atomic/gen-atomic-instrumented.sh create mode 100755 scripts/atomic/gen-atomic-long.sh -- 2.11.0