Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753027AbbKXP6T (ORCPT ); Tue, 24 Nov 2015 10:58:19 -0500 Received: from mail-am1on0064.outbound.protection.outlook.com ([157.56.112.64]:15280 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751224AbbKXP6R (ORCPT ); Tue, 24 Nov 2015 10:58:17 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=cmetcalf@ezchip.com; Subject: Re: [PATCH 1/7] atomic: Export fetch_or() To: Frederic Weisbecker , LKML References: <1447424529-13671-1-git-send-email-fweisbec@gmail.com> <1447424529-13671-2-git-send-email-fweisbec@gmail.com> CC: Peter Zijlstra , Thomas Gleixner , Luiz Capitulino , Christoph Lameter , Ingo Molnar , Viresh Kumar , Rik van Riel From: Chris Metcalf Message-ID: <56548908.50509@ezchip.com> Date: Tue, 24 Nov 2015 10:58:00 -0500 User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1447424529-13671-2-git-send-email-fweisbec@gmail.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [12.216.194.146] X-ClientProxiedBy: DM2PR11CA0007.namprd11.prod.outlook.com (25.160.91.17) To AM3PR02MB116.eurprd02.prod.outlook.com (10.242.243.147) X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB116;2:yysL02d7ZAViBKrBe2a675z7S+Hwn3SN6h38fzaybCZZJ4lzG1BV6okFlKnOFdzgf2lIbYwqHfSYW1Bpfz2/dvswts6bYSCrhialAoWMBw5FYcPMABI5nT5quhWxCzFZn06f2/P8K/06nSuDMdZS4g==;3:TDt3iUv0JUN8P5x+KmICZkanLEU6jdzm+pn8WJqSZJzZCPvjsd8OMxIYK8r58p2TwEenBK4u2dYIUNqojhbKeyYqnEeCsOXJ9lsUrc6u7jtG0bqMIg2UK+ZWXRdBVZiA;25:hrOk6fNQ5Of/SuBmdYaEbmRguuCWTo69MdXX9nFKjFa0St90qSuY44+cTq/pFKf1aJoNyHJJCmavh2HN/q1ExJopeC8EKf+/7CLOGDAkHJ59x1apCUVAYudum3PECVCnDCWPf4/RgYAx3/uFzaVV9RZW8keIk+wFRk1ZrNX6FODqF3ZGJydEkHvSvDMG/gatqEKkvMf+YxCvnQ3x97OdZUbn3ozufC/Abd/ekOdtR0cawoUC6yeC0lYn4cAtrFllWwrfRJOjmouQTQDzI8bL2A==;20:qvx/vNiVH71PkdxKWiybSHPe3zdAU7zNxPB7Usc3GGsLU9+4t1gj8O9t4LgpdChjHabbf0iC2ogt3/64hNDKpVFSCq+MRvOYzQvjTNLJB1iwqmaAYCjNzZsYAj8CZApy8DkdmyWYOe55dCyOR+QJgQ3/mdZ99qm0SZ87seBveus= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR02MB116; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(121898900299872); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001)(10201501046);SRVR:AM3PR02MB116;BCL:0;PCL:0;RULEID:;SRVR:AM3PR02MB116; X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB116;4:er7mC9hf9TAxEC3ODZOJSN1C0vSItzUgiPFww/2dmkCZH0ZoN5lylf0xDMF/7G11xwj7NHOofOE3DznSPRmQ/qCJMAasnwoQ4lRQjYJSilr3kcq2mvTy8Sj/Fbh7eQR59LoQA8vG8NGnQjdgjgzK+L0srdGXj09dqcV6EoQuR8HXxMeB8uKSfFbdA0R9lKiaWxKywNUsDRApqVufuzApWfq6aTOJ9muZJlfiFvonmHBEZXuOxRTSR5VWycLP+e50cXdn+3VDL0/s5EF1RNA1WslMbiZ698IC7eczhFfYqJaxYkjLGMRIfEr2WSQpIhhrBg9EsnGhgyIm6p8JPQmXIYBqziABAopv4x1DgePZdaLQfri9QL4y3pQm6scdyDz5eWZkq3Q8SVuDw+x4xMbNCgHtZepqzT3SDDUcZf8EI29yN0/9r0zyx2vaTvyR/h2C X-Forefront-PRVS: 0770F75EA9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(6049001)(24454002)(189002)(479174004)(377454003)(199003)(5001770100001)(189998001)(23746002)(50986999)(65816999)(5004730100002)(4001350100001)(65956001)(122386002)(40100003)(586003)(81156007)(50466002)(5007970100001)(19580395003)(3846002)(76176999)(6116002)(101416001)(19580405001)(92566002)(36756003)(54356999)(97736004)(64126003)(5001960100002)(47776003)(15975445007)(66066001)(5008740100001)(105586002)(117636001)(106356001)(83506001)(5001920100001)(65806001)(86362001)(77096005)(230700001)(42186005)(87976001)(2950100001)(21314002)(62816006)(18886065003);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR02MB116;H:[10.7.0.41];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM3PR02MB116;23:o67STIzbjQeqCJahB/wJ/e7+A6BIXQAEEloriE?= =?Windows-1252?Q?TnZ1eKKNQHnT/Pckz6p3y0olJLYQq+ourI3uAPv8F3/L6VjtLBQe9a5B?= =?Windows-1252?Q?GOWr0y0RBcVXt6Ei6W6Zupiaw6rNvSJ/tqOq0DWckaQ1rbDRSAG+G1SZ?= =?Windows-1252?Q?wblGVmsgW34O+/HCRI3xfTyBdx6LRbciBazGY3V3mdrSwWiz/1CY01hg?= =?Windows-1252?Q?Fe9kXcWotYsQZmsO5fY9t9mwl1OumUpSaBQmwOZ9wyIW1fiqUmoRIvMc?= =?Windows-1252?Q?/tKRPxNnXbMVP6Eo9VfLuK94P3IonSXotQNL3yKl6Qc7DDNkxsDK09H7?= =?Windows-1252?Q?TMNVQZSWp/xHHwCXdDKO23O/foClhTJXoe+FtjaZniw+uJpWoUR2H//9?= =?Windows-1252?Q?dHAOGF3JR4XvyqCowWYZlbJfbmX7CYowTcqzjyhNmSDiy2kRcxJSd8YE?= =?Windows-1252?Q?6loAKi/uhVSs0vSWGvKBQjSt4KdgajfZ/8+DrXIMwnym1wMBVff8T2RA?= =?Windows-1252?Q?xJY+/QGeIJf5yMyM9irydWKt64F8VplCArvb5RxhLt5l2XYihlyKfhNN?= =?Windows-1252?Q?23Ug3CexrxY2JCbRqBVH5DfJzOoKAQwz5Z/h6fwDtI2fyGZgxN7/ieHt?= =?Windows-1252?Q?vW3I5qhUC4/JMZhkKUmbOcom9xH33BRVOpyisAeCjdyuYEyWG66MZVuj?= =?Windows-1252?Q?VyvMzcpc24cnwoDtPBlzOJ9PBieU/8ntwhyksaw4a3jqBiR9gCaDscDS?= =?Windows-1252?Q?g/eiUUUCckVMC6dz+tT8gN15ABsW0tn+MomUna32IkAuq+28NjgYNmaC?= =?Windows-1252?Q?0mZJYGBRsx8wilxjUYChyXE+sQs4CDg25oj8Ax1PQ+hEZ9fdcxLGR7JQ?= =?Windows-1252?Q?oLzuVFRYDM2n5t5aMblnFTbjMG8m6sdKk2p1FAuoHBDXeykUbMl5VPce?= =?Windows-1252?Q?W2c684QRRZjyZybce/NckzjtZtsTT/F8E5bdgTCMxl6XHOl77ikQv/5T?= =?Windows-1252?Q?hlpM7TTMYHA9J9mC4GwIzf0J2SPJLygrWHapAZ2bFAfE86LrndorC+am?= =?Windows-1252?Q?zMWSVMvryquHFCeKOchErk1j/B6FBgHDDKp8PBxdNvMkdjMT/cBZTfNH?= =?Windows-1252?Q?mkzDmheYyiN2Giw/ZZdLBX6DjMRp2nBOcaCwPZ3r2+a4yCZXpZ2q8eTY?= =?Windows-1252?Q?IEbfP5km65XS/dXYgQRcHUdioWCcjmlWPa9WFq4ZBQZrAy9qLG7ji+4I?= =?Windows-1252?Q?zYZ2c4WUQSaS/6yRw4GPgnIYxqBTRulsLoyyROGszsJnDwXHXjyqo/my?= =?Windows-1252?Q?/50GZFbSMSfG1sQOmBKbW+5FNgEs8T5ghe8d+O513g8Kqf6ebYq2Fff7?= =?Windows-1252?Q?KaVCD8kvYRReHSxtpBPlWXLTm36TMFsY0ufjaxFL3aCW/CCkpYG0xdwq?= =?Windows-1252?Q?IGreUgc1vsiRPoBcYHzP9BDpeGlREaVUBEF0w9d3SQ3soIKZG5tzg92W?= =?Windows-1252?Q?lmWiQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR02MB116;5:ngS0HS9g6bZHL5PvzKOZ8oah6Zyl+yJBBQygcdji1YcV1d0oEQaw68kCJEA7M62O2sY72LLBOZQBUDdKZ6gsgArAHl0xqdBIvKRUe6/HJYVtdGPJpP+fGy9w7/LZsOKGLoFcgUWAtY/MYi+NzPdI+Q==;24:Le1kDKxq+k1zGjmp92AdmGb0+53Vpp0S8Zbi+UMhN65NJuelju+jNIrbkdCvpi7GZ2Pk7WLOTZiNbRPkt58Qw2guX9C/jgX2EFmt/PTJwAI= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2015 15:58:13.0937 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR02MB116 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2618 Lines: 73 On 11/13/2015 09:22 AM, Frederic Weisbecker wrote: > Export fetch_or() that's implemented and used internally by the > scheduler. We are going to use it for NO_HZ so make it generally > available. > > Cc: Christoph Lameter > Cc: Chris Metcalf > Cc: Ingo Molnar > Cc: Luiz Capitulino > Cc: Peter Zijlstra > Cc: Rik van Riel > Cc: Thomas Gleixner > Cc: Viresh Kumar > Signed-off-by: Frederic Weisbecker > --- > include/linux/atomic.h | 18 ++++++++++++++++++ > kernel/sched/core.c | 14 -------------- > 2 files changed, 18 insertions(+), 14 deletions(-) > > diff --git a/include/linux/atomic.h b/include/linux/atomic.h > index 00a5763..c3b99f8 100644 > --- a/include/linux/atomic.h > +++ b/include/linux/atomic.h > @@ -451,6 +451,24 @@ static inline int atomic_dec_if_positive(atomic_t *v) > } > #endif > > +/** > + * fetch_or - perform *ptr |= mask and return old value of *ptr > + * @ptr: pointer to value > + * @mask: mask to OR on the value > + * > + * cmpxchg based fetch_or, macro so it works for different integer types > + */ > +#define fetch_or(ptr, mask) \ > +({ typeof(*(ptr)) __old, __val = *(ptr); \ > + for (;;) { \ > + __old = cmpxchg((ptr), __val, __val | (mask)); \ > + if (__old == __val) \ > + break; \ > + __val = __old; \ > + } \ > + __old; \ > +}) > + > #include > #ifdef CONFIG_GENERIC_ATOMIC64 > #include I think this should be guarded by an "#ifndef" like other things in this file, so architectures can provide their own implementations, or can use the C11 atomic_fetch_or() for newer compilers. Also, I wonder about the nomenclature here: other than cmpxchg and xchg, all the atomic ops are named "atomic_xxx". For something that returns the old value, I'd expect it to be atomic_or_return() and be otherwise like the existing atomic_or() routine, and thus you'd specify "atomic_t tick_dependency". Avoiding all of these issues is probably why fetch_or() is not exported :-) I made some similar comments last time around: https://lkml.kernel.org/r/55B2794A.8040707@ezchip.com -- Chris Metcalf, EZChip Semiconductor http://www.ezchip.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/