Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1223961ybh; Thu, 23 Jul 2020 03:44:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJymLGYebXLUsmnS6vAdRMl3vzfZlGi+wa0zxEmCCHBYW9Hf4u3TTnJd9Zk2o/j29aDJgsAN X-Received: by 2002:a17:907:4003:: with SMTP id nj3mr3680701ejb.278.1595501063926; Thu, 23 Jul 2020 03:44:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595501063; cv=none; d=google.com; s=arc-20160816; b=JMilw5PwtJlWQXppcYk1nU2F6DYXnGlaGbfvXLjGX06OfkUNvf54HZfZAtzRthrRVB ZEA/wqHegrDuTK0TF69WxQ2VK4JXEsTWltPyjJ39BeVuzYoZtFBHd6rWG85HJO1PW3PQ w1Qo1Q2hPVwm9UoZNazW+RK1ro8BK8b5xI2t7G701CDBCVeQASYQzQ6RwijxE9C79HCD jyxaOb1B0iLI3Cecbfe+PZ94zjRABtqXBGgZKW3V9GkidsI3qbyqqTgUq/umtrTm/cPr RakaONpxu0DWoCytYwVj1Ywihifo/iaJoBjp2NNfvKeBmaDtrlPo0Fl49dQ84NJzWTAr apeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:dkim-signature :dkim-signature:date; bh=EncVA8AiNAS2JwxkkKojkF7tJXBLbz3fsL12OjBoWpY=; b=s/LZz/0btVwuARYpIWTYjeMatFIWh1/MgzNX3n1txRczksCKaCV+yFROGpoNADmQHA MK5zdJZMe/U5s/XfkKbmbzIOx50TjI1U3KBdjqcMGVMA1ZMOiC/mSlG1/qucwktgAw/P KBPckI6s8CalFeDF3oPZ1mETD7iAXGdCP74VgnYZFwqH3mSDjwSO3gg8bO9dOpHdXFhm QjRQBu7zp3E1Li/ATscvSYwTbuRsnXqoP1TjoaoZYt9SXO4bxhGAUl4DCsetfXRO/qPB CZJ9A7xFYOb8P+0AhVzKQgqLPxcCvgPxs4ZUNOTYgbx8sKDIJf7XYSGFCt/Ln1n5TVEV 7A4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linutronix.de header.s=2020 header.b=IRTqSuaH; dkim=neutral (no key) header.i=@vger.kernel.org header.s=2020e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ci27si1883829ejc.179.2020.07.23.03.44.01; Thu, 23 Jul 2020 03:44:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@linutronix.de header.s=2020 header.b=IRTqSuaH; dkim=neutral (no key) header.i=@vger.kernel.org header.s=2020e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728492AbgGWKnp (ORCPT + 99 others); Thu, 23 Jul 2020 06:43:45 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:57110 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728433AbgGWKno (ORCPT ); Thu, 23 Jul 2020 06:43:44 -0400 Date: Thu, 23 Jul 2020 10:43:41 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1595501021; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EncVA8AiNAS2JwxkkKojkF7tJXBLbz3fsL12OjBoWpY=; b=IRTqSuaHd0txxuCDns1RJ2eT4kjMs3on+bqtl5/HnaUoekZzaZiF8ONEJx8MHI+qvmiKfI GO6bFzW4CXXRX/H5bdPIXXJNwp+0qVZhmbbi1fpeWhQJjm1ci2Uwm4GYPvLWjrAHF8QNVw nC2UM2kxuZaTLeqMOfn1YaVU25oO9/nUPktqm5yaoDSynyKTraISMWPOG84dZ3C+sKUMpO XeN+hjDYT1XBQPTx3DupgAc9AEYUIw8z/LNGCsVuvln35G5+R/pNvrCFU6d2PLkAn4zPli oWFOuBAZMD23oRczV+0ySAaYYdvvX5LSknH1jJzYTJuYaVgxYj5WO0OQG3vykg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1595501021; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EncVA8AiNAS2JwxkkKojkF7tJXBLbz3fsL12OjBoWpY=; b=Qf7anx6ZtYRGcO0CpG4CrnV99Etc8xMfT8sQFbayKrssXS/6yczEuXm733uc3JyebGKlUO g8j+mHq4v14pD+Cg== From: "tip-bot2 for Brian Gerst" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/asm] x86/percpu: Clean up percpu_xchg_op() Cc: Brian Gerst , Nick Desaulniers , Thomas Gleixner , Sedat Dilek , Linus Torvalds , "Peter Zijlstra (Intel)" , Dennis Zhou , x86 , LKML In-Reply-To: <20200720204925.3654302-8-ndesaulniers@google.com> References: <20200720204925.3654302-8-ndesaulniers@google.com> MIME-Version: 1.0 Message-ID: <159550102123.4006.9369357791516740311.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the x86/asm branch of tip: Commit-ID: 73ca542fbabb68deaa90130a8153cab1fa8288fe Gitweb: https://git.kernel.org/tip/73ca542fbabb68deaa90130a8153cab1fa8288fe Author: Brian Gerst AuthorDate: Mon, 20 Jul 2020 13:49:21 -07:00 Committer: Thomas Gleixner CommitterDate: Thu, 23 Jul 2020 11:46:41 +02:00 x86/percpu: Clean up percpu_xchg_op() The core percpu macros already have a switch on the data size, so the switch in the x86 code is redundant and produces more dead code. Also use appropriate types for the width of the instructions. This avoids errors when compiling with Clang. Signed-off-by: Brian Gerst Signed-off-by: Nick Desaulniers Signed-off-by: Thomas Gleixner Tested-by: Nick Desaulniers Tested-by: Sedat Dilek Reviewed-by: Nick Desaulniers Acked-by: Linus Torvalds Acked-by: Peter Zijlstra (Intel) Acked-by: Dennis Zhou Link: https://lkml.kernel.org/r/20200720204925.3654302-8-ndesaulniers@google.com --- arch/x86/include/asm/percpu.h | 61 ++++++++++------------------------ 1 file changed, 18 insertions(+), 43 deletions(-) diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 0776a11..ac6d7e7 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h @@ -215,46 +215,21 @@ do { \ * expensive due to the implied lock prefix. The processor cannot prefetch * cachelines if xchg is used. */ -#define percpu_xchg_op(qual, var, nval) \ +#define percpu_xchg_op(size, qual, _var, _nval) \ ({ \ - typeof(var) pxo_ret__; \ - typeof(var) pxo_new__ = (nval); \ - switch (sizeof(var)) { \ - case 1: \ - asm qual ("\n\tmov "__percpu_arg(1)",%%al" \ - "\n1:\tcmpxchgb %2, "__percpu_arg(1) \ - "\n\tjnz 1b" \ - : "=&a" (pxo_ret__), "+m" (var) \ - : "q" (pxo_new__) \ - : "memory"); \ - break; \ - case 2: \ - asm qual ("\n\tmov "__percpu_arg(1)",%%ax" \ - "\n1:\tcmpxchgw %2, "__percpu_arg(1) \ - "\n\tjnz 1b" \ - : "=&a" (pxo_ret__), "+m" (var) \ - : "r" (pxo_new__) \ - : "memory"); \ - break; \ - case 4: \ - asm qual ("\n\tmov "__percpu_arg(1)",%%eax" \ - "\n1:\tcmpxchgl %2, "__percpu_arg(1) \ - "\n\tjnz 1b" \ - : "=&a" (pxo_ret__), "+m" (var) \ - : "r" (pxo_new__) \ - : "memory"); \ - break; \ - case 8: \ - asm qual ("\n\tmov "__percpu_arg(1)",%%rax" \ - "\n1:\tcmpxchgq %2, "__percpu_arg(1) \ - "\n\tjnz 1b" \ - : "=&a" (pxo_ret__), "+m" (var) \ - : "r" (pxo_new__) \ - : "memory"); \ - break; \ - default: __bad_percpu_size(); \ - } \ - pxo_ret__; \ + __pcpu_type_##size pxo_old__; \ + __pcpu_type_##size pxo_new__ = __pcpu_cast_##size(_nval); \ + asm qual (__pcpu_op2_##size("mov", __percpu_arg([var]), \ + "%[oval]") \ + "\n1:\t" \ + __pcpu_op2_##size("cmpxchg", "%[nval]", \ + __percpu_arg([var])) \ + "\n\tjnz 1b" \ + : [oval] "=&a" (pxo_old__), \ + [var] "+m" (_var) \ + : [nval] __pcpu_reg_##size(, pxo_new__) \ + : "memory"); \ + (typeof(_var))(unsigned long) pxo_old__; \ }) /* @@ -354,9 +329,9 @@ do { \ #define this_cpu_or_1(pcp, val) percpu_to_op(1, volatile, "or", (pcp), val) #define this_cpu_or_2(pcp, val) percpu_to_op(2, volatile, "or", (pcp), val) #define this_cpu_or_4(pcp, val) percpu_to_op(4, volatile, "or", (pcp), val) -#define this_cpu_xchg_1(pcp, nval) percpu_xchg_op(volatile, pcp, nval) -#define this_cpu_xchg_2(pcp, nval) percpu_xchg_op(volatile, pcp, nval) -#define this_cpu_xchg_4(pcp, nval) percpu_xchg_op(volatile, pcp, nval) +#define this_cpu_xchg_1(pcp, nval) percpu_xchg_op(1, volatile, pcp, nval) +#define this_cpu_xchg_2(pcp, nval) percpu_xchg_op(2, volatile, pcp, nval) +#define this_cpu_xchg_4(pcp, nval) percpu_xchg_op(4, volatile, pcp, nval) #define raw_cpu_add_return_1(pcp, val) percpu_add_return_op(1, , pcp, val) #define raw_cpu_add_return_2(pcp, val) percpu_add_return_op(2, , pcp, val) @@ -409,7 +384,7 @@ do { \ #define this_cpu_and_8(pcp, val) percpu_to_op(8, volatile, "and", (pcp), val) #define this_cpu_or_8(pcp, val) percpu_to_op(8, volatile, "or", (pcp), val) #define this_cpu_add_return_8(pcp, val) percpu_add_return_op(8, volatile, pcp, val) -#define this_cpu_xchg_8(pcp, nval) percpu_xchg_op(volatile, pcp, nval) +#define this_cpu_xchg_8(pcp, nval) percpu_xchg_op(8, volatile, pcp, nval) #define this_cpu_cmpxchg_8(pcp, oval, nval) percpu_cmpxchg_op(volatile, pcp, oval, nval) /*