Received: by 10.223.176.46 with SMTP id f43csp1893458wra; Thu, 25 Jan 2018 01:35:33 -0800 (PST) X-Google-Smtp-Source: AH8x2247YN2Ko2PS5dLv1LE8f21SDYO5BSzEETFiGFqyfISAgjn+P92bEKCdNH/mOQeeATVjUjNO X-Received: by 2002:a17:902:7488:: with SMTP id h8-v6mr956201pll.164.1516872933260; Thu, 25 Jan 2018 01:35:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516872933; cv=none; d=google.com; s=arc-20160816; b=qYvQkHvrJP6Wk5IFrvk8omDiexSck+hoLKcj6ThXO40zLlYg6vg1i2XOzBokWFLT8D Q3o//gIq7AGZE7MBhbbAgmPrn9ZyXeN8yGK5wTy6JKzxPXUE3XrzHmmf9uK9IxpodNWe pMcCd/wDH2DQMN32QdaNYigIRVibzN25VGZbFsQSeSOlFNIuKK2IOZwxiFipyUBoeIAv N65K9qP9oQ9ns7hoPY46X6v4/I92K57gccfzoZp3hMxXNyImntjvowC3FlEF9hjo2m/Z Qgy/KzkY8veyazT4EeClImCYOIdMqD/VBw7WJNIB9oZsG4XwfJurkkTk1TEglau/qGR1 P94A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:user-agent:content-disposition :mime-version:reply-to:subject:cc:to:from:date :arc-authentication-results; bh=eLqXrA5k+275NTzlO8LUnPgpbkJ/41vace9rGRWpsWc=; b=WnkBTFxd0HURReIoXThbj8eyeqXSZUL8gLz+r7Pxdy8Tus/TbF8YGkQYVAtdj09ZZO CPj0Q8+lAyy42a6TQW8Y1IJMgFaAgmJsl9TM6kWS5CoypU1310HF6p6OFIeCWLGKig31 JRfLDYKzjLlCKbKzmoRnTmGHOzBvxsICBzH0Swij+O2bbzNL6rIkm6H5t5Kek+F/hhMS iFPVNUOaGSffp02tWljXnKmY8YDmnyUrY79HMc8cHrZzbW0Dnl25PCwZj7HaWqej/oFz hF6aUl4fDUuwxC/3WtmM/JMqUQveBi8SJz2j8PkcApPkaGgWQvSS9ajc8ilKv7C5l1zU Peig== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d7si1330253pgf.470.2018.01.25.01.35.18; Thu, 25 Jan 2018 01:35:33 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751557AbeAYJey (ORCPT + 99 others); Thu, 25 Jan 2018 04:34:54 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:36304 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751436AbeAYJew (ORCPT ); Thu, 25 Jan 2018 04:34:52 -0500 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w0P9YYih133767 for ; Thu, 25 Jan 2018 04:34:51 -0500 Received: from e18.ny.us.ibm.com (e18.ny.us.ibm.com [129.33.205.208]) by mx0a-001b2d01.pphosted.com with ESMTP id 2fqaf35n13-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 25 Jan 2018 04:34:51 -0500 Received: from localhost by e18.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 25 Jan 2018 04:34:49 -0500 Received: from b01cxnp22034.gho.pok.ibm.com (9.57.198.24) by e18.ny.us.ibm.com (146.89.104.205) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 25 Jan 2018 04:34:44 -0500 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp22034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w0P9Yhtu49021152; Thu, 25 Jan 2018 09:34:43 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F21EAB2046; Thu, 25 Jan 2018 04:31:41 -0500 (EST) Received: from paulmck-ThinkPad-W541 (unknown [9.85.165.236]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP id 242F6B204D; Thu, 25 Jan 2018 04:31:41 -0500 (EST) Received: by paulmck-ThinkPad-W541 (Postfix, from userid 1000) id 9426116C6AEA; Thu, 25 Jan 2018 01:34:40 -0800 (PST) Date: Thu, 25 Jan 2018 01:34:40 -0800 From: "Paul E. McKenney" To: mingo@kernel.org Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, stern@rowland.harvard.edu, parri.andrea@gmail.com, j.alglave@ucl.ac.uk, luc.maranget@inria.fr, boqun.feng@gmail.com, will.deacon@arm.com, peterz@infradead.org, npiggin@gmail.com, dhowells@redhat.com, elena.reshetova@intel.com, mhocko@suse.com, akiyks@gmail.com Subject: [GIT PULL tools] Linux kernel memory model Reply-To: paulmck@linux.vnet.ibm.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 18012509-0044-0000-0000-000003D60982 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008423; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000247; SDB=6.00980077; UDB=6.00496806; IPR=6.00759378; BA=6.00005794; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00019199; XFM=3.00000015; UTC=2018-01-25 09:34:48 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18012509-0045-0000-0000-000008056ED0 Message-Id: <20180125093440.GA875@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-01-25_03:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1801250133 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, Ingo, This pull request contains a single commit that adds a memory model to the tools directory. This memory model can (roughly speaking) be thought of as an automated version of memory-barriers.txt. It is written in the "cat" language, which is executable by the externally provided "herd7" simulator, which exhaustively explores the state space of small litmus tests. This memory model is accompanied by extensive documentation on its use and its design. Two versions have been sent to LKML and feedback incorporated: 1. http://lkml.kernel.org/r/20171113184031.GA26302@linux.vnet.ibm.com 2. http://lkml.kernel.org/r/20180119035855.GA29296@linux.vnet.ibm.com This model has been presented and demoed at a number of Linux gatherings, including the 2016 LinuxCon EU, the 2016 Linux Plumbers Conference, the 2016 Linux Kernel Summit, the 2017 linux.conf.au, and the 2017 Linux Plumbers Conference, which featured a workshop helping a number of Linux kernel hackers install and use the tool. This memory model has matured to the point where it would be good to include it in the Linux kernel, for example, to allow it to track changes as new hardware and use cases are added. We expect the rate of change to be similar to that of Documentation/memory-barriers.txt. This memory model is available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git for you to fetch changes up to 1c27b644c0fdbc61e113b8faee14baeb8df32486: Automate memory-barriers.txt; provide Linux-kernel memory model (2018-01-24 20:53:49 -0800) ---------------------------------------------------------------- Paul E. McKenney (1): Automate memory-barriers.txt; provide Linux-kernel memory model tools/memory-model/Documentation/cheatsheet.txt | 30 + tools/memory-model/Documentation/explanation.txt | 1840 ++++++++++++++++++++ tools/memory-model/Documentation/recipes.txt | 570 ++++++ tools/memory-model/Documentation/references.txt | 107 ++ tools/memory-model/MAINTAINERS | 15 + tools/memory-model/README | 220 +++ tools/memory-model/linux-kernel.bell | 53 + tools/memory-model/linux-kernel.cat | 124 ++ tools/memory-model/linux-kernel.cfg | 21 + tools/memory-model/linux-kernel.def | 108 ++ .../litmus-tests/CoRR+poonceonce+Once.litmus | 19 + .../litmus-tests/CoRW+poonceonce+Once.litmus | 18 + .../litmus-tests/CoWR+poonceonce+Once.litmus | 18 + .../litmus-tests/CoWW+poonceonce.litmus | 11 + .../litmus-tests/IRIW+mbonceonces+OnceOnce.litmus | 35 + .../litmus-tests/IRIW+poonceonces+OnceOnce.litmus | 33 + .../litmus-tests/ISA2+poonceonces.litmus | 28 + ...cerelease+poacquirerelease+poacquireonce.litmus | 28 + .../litmus-tests/LB+ctrlonceonce+mbonceonce.litmus | 23 + .../LB+poacquireonce+pooncerelease.litmus | 21 + .../litmus-tests/LB+poonceonces.litmus | 21 + .../litmus-tests/MP+onceassign+derefonce.litmus | 25 + tools/memory-model/litmus-tests/MP+polocks.litmus | 24 + .../litmus-tests/MP+poonceonces.litmus | 20 + .../MP+pooncerelease+poacquireonce.litmus | 20 + .../memory-model/litmus-tests/MP+porevlocks.litmus | 24 + .../litmus-tests/MP+wmbonceonce+rmbonceonce.litmus | 22 + .../memory-model/litmus-tests/R+mbonceonces.litmus | 21 + .../memory-model/litmus-tests/R+poonceonces.litmus | 19 + tools/memory-model/litmus-tests/README | 125 ++ .../memory-model/litmus-tests/S+poonceonces.litmus | 19 + .../S+wmbonceonce+poacquireonce.litmus | 20 + .../litmus-tests/SB+mbonceonces.litmus | 23 + .../litmus-tests/SB+poonceonces.litmus | 21 + .../litmus-tests/WRC+poonceonces+Once.litmus | 27 + .../WRC+pooncerelease+rmbonceonce+Once.litmus | 28 + .../Z6.0+pooncelock+poonceLock+pombonce.litmus | 33 + .../Z6.0+pooncelock+pooncelock+pombonce.litmus | 32 + ...ooncerelease+poacquirerelease+mbonceonce.litmus | 28 + tools/memory-model/lock.cat | 99 ++ 40 files changed, 3973 insertions(+) create mode 100644 tools/memory-model/Documentation/cheatsheet.txt create mode 100644 tools/memory-model/Documentation/explanation.txt create mode 100644 tools/memory-model/Documentation/recipes.txt create mode 100644 tools/memory-model/Documentation/references.txt create mode 100644 tools/memory-model/MAINTAINERS create mode 100644 tools/memory-model/README create mode 100644 tools/memory-model/linux-kernel.bell create mode 100644 tools/memory-model/linux-kernel.cat create mode 100644 tools/memory-model/linux-kernel.cfg create mode 100644 tools/memory-model/linux-kernel.def create mode 100644 tools/memory-model/litmus-tests/CoRR+poonceonce+Once.litmus create mode 100644 tools/memory-model/litmus-tests/CoRW+poonceonce+Once.litmus create mode 100644 tools/memory-model/litmus-tests/CoWR+poonceonce+Once.litmus create mode 100644 tools/memory-model/litmus-tests/CoWW+poonceonce.litmus create mode 100644 tools/memory-model/litmus-tests/IRIW+mbonceonces+OnceOnce.litmus create mode 100644 tools/memory-model/litmus-tests/IRIW+poonceonces+OnceOnce.litmus create mode 100644 tools/memory-model/litmus-tests/ISA2+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/ISA2+pooncerelease+poacquirerelease+poacquireonce.litmus create mode 100644 tools/memory-model/litmus-tests/LB+ctrlonceonce+mbonceonce.litmus create mode 100644 tools/memory-model/litmus-tests/LB+poacquireonce+pooncerelease.litmus create mode 100644 tools/memory-model/litmus-tests/LB+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/MP+onceassign+derefonce.litmus create mode 100644 tools/memory-model/litmus-tests/MP+polocks.litmus create mode 100644 tools/memory-model/litmus-tests/MP+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/MP+pooncerelease+poacquireonce.litmus create mode 100644 tools/memory-model/litmus-tests/MP+porevlocks.litmus create mode 100644 tools/memory-model/litmus-tests/MP+wmbonceonce+rmbonceonce.litmus create mode 100644 tools/memory-model/litmus-tests/R+mbonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/R+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/README create mode 100644 tools/memory-model/litmus-tests/S+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/S+wmbonceonce+poacquireonce.litmus create mode 100644 tools/memory-model/litmus-tests/SB+mbonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/SB+poonceonces.litmus create mode 100644 tools/memory-model/litmus-tests/WRC+poonceonces+Once.litmus create mode 100644 tools/memory-model/litmus-tests/WRC+pooncerelease+rmbonceonce+Once.litmus create mode 100644 tools/memory-model/litmus-tests/Z6.0+pooncelock+poonceLock+pombonce.litmus create mode 100644 tools/memory-model/litmus-tests/Z6.0+pooncelock+pooncelock+pombonce.litmus create mode 100644 tools/memory-model/litmus-tests/Z6.0+pooncerelease+poacquirerelease+mbonceonce.litmus create mode 100644 tools/memory-model/lock.cat