From patchwork Tue Mar 21 06:34:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72713 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1619668wrt; Mon, 20 Mar 2023 23:43:45 -0700 (PDT) X-Google-Smtp-Source: AK7set8j4pJuOK1GAV++PB4JwUMgc4SbWOkonWlE99anqkvTzShDgSJi0pPWLvUXg/40KR5lW2Z0 X-Received: by 2002:a17:902:e74f:b0:19a:a9d8:e47f with SMTP id p15-20020a170902e74f00b0019aa9d8e47fmr1821339plf.36.1679381025290; Mon, 20 Mar 2023 23:43:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679381025; cv=none; d=google.com; s=arc-20160816; b=Y26xAcKOeMH/+pcmo348ILASS+eHBqCrFgaEosNLS/IGbLz40J7AL6jk6V5hyg4OWD Ll6drn0Q4NxtCtm6e781HaFSJ773s/Sup9J2ZVm5uBjPki16HiUxj2+Us0aldoe6Hz+l Vu7zG14C8uOMAZZV0rUcxQbUC+EHzOh2ls9POw5jsHMLBJkPEHDH7QEPSYuMUo/KfS+Y ikqzRk6vupIKEqayiozt/AeRusk0coWumTMIgSdMb2fc+PbgkxFSGCwx0I0nSRFk5TaZ n2OnieLuzQnKsVUXMuVky9jYYj7GCDd1girl65QxGdaZWi1rdeKg2gpHB5ElftGkbKSt B+uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/yn+twTZLAkRdUYrcTaC/OxuB+ZzmlZ8IAyD5qH6ScI=; b=BylZVXuLEAvznrqhStfSeiF3+CBH+wThLGyOKbiTLih3nv1yC0VrsKPrqB4/AHY7o7 OcMGIV7lo1F7eNY/zguo7jBP7VwQ77kzKiBlqWt5CfJaPDPff6w1NJre/fcnp4FD2F48 yqGp0I/wZlIQKmUXgVQ8RYg5oTehVPn7LqXxbbmM/ZYl8Htx3/DGHtuRZdZ6Dnipb1yQ Ez082HTsNPgzELjZCHjLcbBIXlUhqCdeObDB5mhb63KDJxUWE7DUK3MVKjJqVaGIVXbR A7iPYacizQsq+CXyLDIJ+384J5u3IqzBOxgAEz0lOAo7tXmp4XxPeOa7PJ3PgdSI3Loi 9ORw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ax5gjjdH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p24-20020a170902a41800b0019ca3bea310si11851576plq.303.2023.03.20.23.43.32; Mon, 20 Mar 2023 23:43:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ax5gjjdH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230195AbjCUGgI (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229828AbjCUGgH (ORCPT ); Tue, 21 Mar 2023 02:36:07 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E2DDF44BC for ; Mon, 20 Mar 2023 23:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380508; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/yn+twTZLAkRdUYrcTaC/OxuB+ZzmlZ8IAyD5qH6ScI=; b=ax5gjjdHj0X3N4R2Jt49hifX5dNsphkv4GTukUaRkoRTmq3kFFdse9NGdxXfOgLmyLz2ZI 9SZUtaY6ssqHa4xZ31N9OhRptfWC88/km3REwJq/0xEVoV/SWCXng9PhmCstA/vH31+gJT CTqCAnifBJkG1dPtEH93PHFDYSfrwfM= Received: from mail-ot1-f72.google.com (mail-ot1-f72.google.com [209.85.210.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-180-08i64ABRNFqTocw0tz60Zg-1; Tue, 21 Mar 2023 02:35:07 -0400 X-MC-Unique: 08i64ABRNFqTocw0tz60Zg-1 Received: by mail-ot1-f72.google.com with SMTP id g19-20020a056830161300b0069d6fbb1a72so6433503otr.11 for ; Mon, 20 Mar 2023 23:35:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380506; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/yn+twTZLAkRdUYrcTaC/OxuB+ZzmlZ8IAyD5qH6ScI=; b=rt9AJveVggFBD7iUWoFHu0GHJ1PHgb1biBTOSWoLxCsVb0sweu2/2XWqCSG2cWlvPe wNZ187NpsdKaz/s+EXHFPfwjhLzDhg9PCbi1FaHxJuAMlOiOR5mSGgzE66LhAL/5KUhx aeGJ2GGWBUCdi80MnPMjru3m2O2zF+zEThVN3PAtF69XFtcdEO+1452kwF1aFiiuyzSk p7Px2x3rzjxpDBIWmUNuPWcbXwYu5b7okZPIv1Ybn73adHF/S0jGNR/+B3VX8x9mej4y 6YBHFlRPKesrmwVtyVM6aasEat+i1vOcGtGstsmlCzjS+T4lkPmewgtWpZ9vcfBBgBXR stgw== X-Gm-Message-State: AO0yUKUFWSf8cHoJ/XIsYaM6qGQF+xtRJgz053YXyB3OJJPb3rD5L97q VlXv/MOaPCj5IfE0JG8S5XFgrkuH5+gTj7wIljJsxRTEXIc+AAV3JC8+tvn52Fr1M2pHY2Htdbi 5a6OGNOFc+hVL5VfrfDRcPhc9 X-Received: by 2002:a54:4701:0:b0:378:a0a7:28f7 with SMTP id k1-20020a544701000000b00378a0a728f7mr528777oik.12.1679380506590; Mon, 20 Mar 2023 23:35:06 -0700 (PDT) X-Received: by 2002:a54:4701:0:b0:378:a0a7:28f7 with SMTP id k1-20020a544701000000b00378a0a728f7mr528768oik.12.1679380506290; Mon, 20 Mar 2023 23:35:06 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:05 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 1/6] riscv/cmpxchg: Deduplicate cmpxchg() asm functions Date: Tue, 21 Mar 2023 03:34:27 -0300 Message-Id: <20230321063430.2218795-2-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760958637665202320?= X-GMAIL-MSGID: =?utf-8?q?1760958637665202320?= In this header every cmpxchg define (_relaxed, _acquire, _release, vanilla) contain it's own asm file, both for 4-byte variables an 8-byte variables, on a total of 8 versions of mostly the same asm. This is usually bad, as it means any change may be done in up to 8 different places. Unify those versions by creating a new define with enough parameters to generate any version of the previous 8. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 102 ++++++++----------------------- 1 file changed, 24 insertions(+), 78 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index 12debce235e52..21984d24cbfe7 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -163,6 +163,22 @@ * store NEW in MEM. Return the initial value in MEM. Success is * indicated by comparing RETURN with OLD. */ + +#define ___cmpxchg(lr_sfx, sc_sfx, prepend, append) \ +{ \ + __asm__ __volatile__ ( \ + prepend \ + "0: lr" lr_sfx " %0, %2\n" \ + " bne %0, %z3, 1f\n" \ + " sc" sc_sfx " %1, %z4, %2\n" \ + " bnez %1, 0b\n" \ + append \ + "1:\n" \ + : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ + : "rJ" ((long)__old), "rJ" (__new) \ + : "memory"); \ +} + #define __cmpxchg_relaxed(ptr, old, new, size) \ ({ \ __typeof__(ptr) __ptr = (ptr); \ @@ -172,26 +188,10 @@ register unsigned int __rc; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - "0: lr.w %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.w %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" ((long)__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".w", ".w", "", ""); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - "0: lr.d %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.d %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" (__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".d", ".d", "", ""); \ break; \ default: \ BUILD_BUG(); \ @@ -216,28 +216,10 @@ register unsigned int __rc; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - "0: lr.w %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.w %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - RISCV_ACQUIRE_BARRIER \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" ((long)__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".w", ".w", "", RISCV_ACQUIRE_BARRIER); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - "0: lr.d %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.d %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - RISCV_ACQUIRE_BARRIER \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" (__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".d", ".d", "", RISCV_ACQUIRE_BARRIER); \ break; \ default: \ BUILD_BUG(); \ @@ -262,28 +244,10 @@ register unsigned int __rc; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - RISCV_RELEASE_BARRIER \ - "0: lr.w %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.w %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" ((long)__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".w", ".w", RISCV_RELEASE_BARRIER, ""); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - RISCV_RELEASE_BARRIER \ - "0: lr.d %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.d %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" (__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".d", ".d", RISCV_RELEASE_BARRIER, ""); \ break; \ default: \ BUILD_BUG(); \ @@ -308,28 +272,10 @@ register unsigned int __rc; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - "0: lr.w %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.w.rl %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - " fence rw, rw\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" ((long)__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".w", ".w.rl", "", " fence rw, rw\n"); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - "0: lr.d %0, %2\n" \ - " bne %0, %z3, 1f\n" \ - " sc.d.rl %1, %z4, %2\n" \ - " bnez %1, 0b\n" \ - " fence rw, rw\n" \ - "1:\n" \ - : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ - : "rJ" (__old), "rJ" (__new) \ - : "memory"); \ + ___cmpxchg(".d", ".d.rl", "", " fence rw, rw\n"); \ break; \ default: \ BUILD_BUG(); \ From patchwork Tue Mar 21 06:34:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72711 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1618406wrt; Mon, 20 Mar 2023 23:39:22 -0700 (PDT) X-Google-Smtp-Source: AK7set8vAai8UqjZ9TQ3FsYgdsRjutPXrkyGoOtoAV+eb5YnoBKXK7cBrHOo1Taev/yhjXOq56PE X-Received: by 2002:a17:903:5cb:b0:19a:a9d8:e48a with SMTP id kf11-20020a17090305cb00b0019aa9d8e48amr1246319plb.22.1679380762537; Mon, 20 Mar 2023 23:39:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679380762; cv=none; d=google.com; s=arc-20160816; b=uGvIjcaKTVVs9XkZv6LRxT89skTSJ/gKaXNfa4NV3/adwZ6vxFxTrwFWWmenyrCNmA eZEfJvjST9hO7AbTyQMAiSVTwg4bhaDE5UY2cDfW3UnlMGWB4fxY9xZwD8bNaWhNo4WF 1rC4r49xKT4PgUOScJcM70BMSq6iTurqeLrhdB0QStFKVcz613psXm3tZ8y26VJlyOCY 3Mhe8wQhihCDVoFfupuev9xyScEC1dEsTy5RSZOG1uMUoiZduXXn0ktmLhsDVRsFAvHl 3nCxqDU8pr4CTiU9btJW0ynXeQh4ELiiQGiXNIcJArtTNXaf6FV0xO88SD2yMNVggnG+ koQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=TPnhvOcPIzsxcdPaGdi9oJi4cZ44pFeBuguAKI/S1NE=; b=MwmyHTDTotBW5jK81mNn4IiNVtjYekMzq7OonHA5UoO//b5XqFl7V+PlXkejNT1tvl nn2JCSfXSj8aFusZ8JSG9C/lUs7zL8YC31qYUV78+iTYx2X62bRLXcchylciWYw9deDW 9VZM/H2wKgBDf4sNi9EYoYihy+vlFNRqVguhhZPm8aTBRzz7EoHwsYbrtPdZiKI1V2Sz E9LAOTHgHGcxdPkJySL3XadnfpxMvUEauOJgjGAWB21e4muu9znTP6TL+vDxg31qkaUi up6l+DcDmHSn1lPW8pW1xcyrfD/QlE9mdKjQBdTIHxQoZ0cfx2ViGvA3bitE8O0xffON BqVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="KDTvg9u/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e2-20020a170902f10200b0019ad22c40c7si11466242plb.132.2023.03.20.23.39.09; Mon, 20 Mar 2023 23:39:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="KDTvg9u/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230315AbjCUGgV (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230325AbjCUGgP (ORCPT ); Tue, 21 Mar 2023 02:36:15 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3F643BD90 for ; Mon, 20 Mar 2023 23:35:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380513; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TPnhvOcPIzsxcdPaGdi9oJi4cZ44pFeBuguAKI/S1NE=; b=KDTvg9u/d0qIIZG3UuztkTO2g6Qnz2JlUa0DtlEBB/9Sf4kqtfAhrLqtjdXSHK3hXUG7qc c4jVP67G7obnlnNkNxQeY8616JyzFjAXLc9R8O3ugn/4a3URGXfuu5V0ODQP7mKuyFiCIK rvTFnOD7HxwapdAnIC3o6+I9uBW1n2E= Received: from mail-oa1-f69.google.com (mail-oa1-f69.google.com [209.85.160.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-192-oZm837k3M9K6jg1cdjbTaw-1; Tue, 21 Mar 2023 02:35:12 -0400 X-MC-Unique: oZm837k3M9K6jg1cdjbTaw-1 Received: by mail-oa1-f69.google.com with SMTP id 586e51a60fabf-176347f3b28so8140801fac.23 for ; Mon, 20 Mar 2023 23:35:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380511; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TPnhvOcPIzsxcdPaGdi9oJi4cZ44pFeBuguAKI/S1NE=; b=UtFd83ez1oLXsy8GE69jK4bIk3mLdpcNFDHM9wbMQkdxraK17ELYoLIa2rJi28cXFh RhLkqlxWIukHBN4O9+/5ficHaGsqcRJogua7LMB4yw/LVE1YevQ0vyyERMLTWoBFk2Kq InPAPtmyCiloQc/aOScAWJOVbZq2Nuo++YeGblJKtyFla7g5KXkhbOjYe1/L7Hhmdvlv obIXiL/CEY+DjI19c55/LlPcx9M5r4hYyu0r/novMSVeLHVmVCTkl84lQroDi7CUpwZF O1SDiAqeOA0zCvBoMbCJ9NEwNU2GtxbhOERNv0oeicjO52dfv1RnjDXu0VE7sjxPgARy ahwA== X-Gm-Message-State: AO0yUKUd+42a60WxqcEiYQy8wATRqQdQwuxH3ov5/c18kKG5HoeiBVMu myeNz547A4Y86q1/bdbpXH/lCI6UcTubOQEzBfooKMuCgfNHbCPmZPkc7fSvjxeCyOZIqR5SHRg hVmK7npLCsB48WWxy4SUKzuyaWPnGcdSWWH0= X-Received: by 2002:a4a:3717:0:b0:525:4cde:53ca with SMTP id r23-20020a4a3717000000b005254cde53camr387161oor.7.1679380511409; Mon, 20 Mar 2023 23:35:11 -0700 (PDT) X-Received: by 2002:a4a:3717:0:b0:525:4cde:53ca with SMTP id r23-20020a4a3717000000b005254cde53camr387155oor.7.1679380511137; Mon, 20 Mar 2023 23:35:11 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:10 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 2/6] riscv/cmpxchg: Deduplicate cmpxchg() macros Date: Tue, 21 Mar 2023 03:34:28 -0300 Message-Id: <20230321063430.2218795-3-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760958362213266113?= X-GMAIL-MSGID: =?utf-8?q?1760958362213266113?= Every cmpxchg define (_relaxed, _acquire, _release, vanilla) contain it's own define for creating tmp variables and selecting the correct asm code for give variable size. All those defines are mostly the same code (other than specific barriers), so there is no need to keep the 4 copies. Unify those under a more general define, that can reproduce the previous 4 versions. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 72 ++++++-------------------------- 1 file changed, 12 insertions(+), 60 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index 21984d24cbfe7..c7a13eec4dbcc 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -164,8 +164,8 @@ * indicated by comparing RETURN with OLD. */ -#define ___cmpxchg(lr_sfx, sc_sfx, prepend, append) \ -{ \ +#define ____cmpxchg(lr_sfx, sc_sfx, prepend, append) \ +({ \ __asm__ __volatile__ ( \ prepend \ "0: lr" lr_sfx " %0, %2\n" \ @@ -177,9 +177,9 @@ : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \ : "rJ" ((long)__old), "rJ" (__new) \ : "memory"); \ -} +}) -#define __cmpxchg_relaxed(ptr, old, new, size) \ +#define ___cmpxchg(ptr, old, new, size, sc_sfx, prepend, append) \ ({ \ __typeof__(ptr) __ptr = (ptr); \ __typeof__(*(ptr)) __old = (old); \ @@ -188,10 +188,10 @@ register unsigned int __rc; \ switch (size) { \ case 4: \ - ___cmpxchg(".w", ".w", "", ""); \ + ____cmpxchg(".w", ".w" sc_sfx, prepend, append); \ break; \ case 8: \ - ___cmpxchg(".d", ".d", "", ""); \ + ____cmpxchg(".d", ".d" sc_sfx, prepend, append); \ break; \ default: \ BUILD_BUG(); \ @@ -199,6 +199,9 @@ __ret; \ }) +#define __cmpxchg_relaxed(ptr, old, new, size) \ + ___cmpxchg(ptr, old, new, size, "", "", "") + #define arch_cmpxchg_relaxed(ptr, o, n) \ ({ \ __typeof__(*(ptr)) _o_ = (o); \ @@ -208,24 +211,7 @@ }) #define __cmpxchg_acquire(ptr, old, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(*(ptr)) __old = (old); \ - __typeof__(*(ptr)) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - register unsigned int __rc; \ - switch (size) { \ - case 4: \ - ___cmpxchg(".w", ".w", "", RISCV_ACQUIRE_BARRIER); \ - break; \ - case 8: \ - ___cmpxchg(".d", ".d", "", RISCV_ACQUIRE_BARRIER); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___cmpxchg(ptr, old, new, size, "", "", RISCV_ACQUIRE_BARRIER) #define arch_cmpxchg_acquire(ptr, o, n) \ ({ \ @@ -236,24 +222,7 @@ }) #define __cmpxchg_release(ptr, old, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(*(ptr)) __old = (old); \ - __typeof__(*(ptr)) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - register unsigned int __rc; \ - switch (size) { \ - case 4: \ - ___cmpxchg(".w", ".w", RISCV_RELEASE_BARRIER, ""); \ - break; \ - case 8: \ - ___cmpxchg(".d", ".d", RISCV_RELEASE_BARRIER, ""); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___cmpxchg(ptr, old, new, size, "", RISCV_RELEASE_BARRIER, "") #define arch_cmpxchg_release(ptr, o, n) \ ({ \ @@ -264,24 +233,7 @@ }) #define __cmpxchg(ptr, old, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(*(ptr)) __old = (old); \ - __typeof__(*(ptr)) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - register unsigned int __rc; \ - switch (size) { \ - case 4: \ - ___cmpxchg(".w", ".w.rl", "", " fence rw, rw\n"); \ - break; \ - case 8: \ - ___cmpxchg(".d", ".d.rl", "", " fence rw, rw\n"); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___cmpxchg(ptr, old, new, size, ".rl", "", " fence rw, rw\n") #define arch_cmpxchg(ptr, o, n) \ ({ \ From patchwork Tue Mar 21 06:34:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72715 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1621192wrt; Mon, 20 Mar 2023 23:48:50 -0700 (PDT) X-Google-Smtp-Source: AK7set+hiFStO2NQIMFkmtvfhAsJRVAIdpBMWhOKxrkv4Btzsn61wYocQSUyJJRS+Ggefn4yyXO/ X-Received: by 2002:a17:90a:e7ce:b0:234:2485:6743 with SMTP id kb14-20020a17090ae7ce00b0023424856743mr1710359pjb.3.1679381330180; Mon, 20 Mar 2023 23:48:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679381330; cv=none; d=google.com; s=arc-20160816; b=IWlBfTga+0DeGnJX8/8huTGKV4CshFRb7Uh1UGOzJHI2kShSdICUxNK43zqK5zQmZ1 e1zNU5A9V1MEiLZdTT4hXpzFudseZcIBFxTMwFrQYmRgLugqJGt5ThdFmzE2CC1GK4cn n/6YrhWTf5zumsJmRaYS2eVgt+eCheXwOdlDl4soGuv6WfiE//O6Y/61lGvMH756rzvm JuQ1h54DLN7+tiw1ExhyrZX/RJIKgui4GHRz1FUOVho2tXKWEv/p2MYfiW9otMk5XM6L XmdQ9goTS2SLbD3uBZnxLdW7bP//CAuMkjJB5zmKmlD9a+TY2pKoEEsOdqRxuKZZ4swT 59KA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=XMfpmYwfPn+xgsAmrLdh6YxWI9aM4T+CUsR5ROJOFiM=; b=vsIfm2SGnkOXsnVVokngVRdyzxLjNyvaAIn8Rv4D6Ll3MebhqINKBJScqZ7KwxqJpw cyQYTCKZLov9npK9zby1lq6m4ZWbrhn4tZ59T1+VWi/JH+YAbx/acS4KLKSOW6KQgYbV 5PLKnPuuXDZ3/9Kl6KCI3eeg0KmDzRoNsL02VewE9PvtFW24pTNF9DVkfwGEEoLhKGkM ryGBXvOSvbzi1pbPrewehwJG3+47CujfCNjmZSUuV5QNuUs/q5v40i8lETM2Kh8KSOHr VzRg/qMDaCR1Szelu/FmUTFxRgthFBu1JZA6Wi7rUW0km8v/QAcCNRVUOg4BAUoEQOd3 1VEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=UXQZKNNv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ds19-20020a17090b08d300b0023750b695e1si18003234pjb.156.2023.03.20.23.48.37; Mon, 20 Mar 2023 23:48:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=UXQZKNNv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230252AbjCUGge (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230345AbjCUGg0 (ORCPT ); Tue, 21 Mar 2023 02:36:26 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52E9930DD for ; Mon, 20 Mar 2023 23:35:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380518; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XMfpmYwfPn+xgsAmrLdh6YxWI9aM4T+CUsR5ROJOFiM=; b=UXQZKNNvrmvAVorVMmtXHvAaO+FvhCUA6dbTds+RTOdPgAC24mmoxU8dxlcNHN3BEmEHB8 6P1gLjrAtoLLCfSHo5cSAPm+fnrbfRdANybu9VcWuFSfj3KcP4FV2TzvA1bsnW/L7H+ARc gZdfVoHiqHxQwuQLtdxW7oIlDTr4JjU= Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-611-MLK6455cMVytZ0lLgRTSaQ-1; Tue, 21 Mar 2023 02:35:17 -0400 X-MC-Unique: MLK6455cMVytZ0lLgRTSaQ-1 Received: by mail-oi1-f199.google.com with SMTP id n205-20020acabdd6000000b003846654dd65so6114161oif.19 for ; Mon, 20 Mar 2023 23:35:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380517; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XMfpmYwfPn+xgsAmrLdh6YxWI9aM4T+CUsR5ROJOFiM=; b=vw6UuFtq8JuCosg83g+V950g3Rhj2CYCrNawFzcFxGyIrzhEzoZm6HfoFHl/30/mhF tKIpFjrkTBXAfEfdWYuSFBkC4+VVTNQTOApgZqyYsgZUBs/oaNW1GH41aKW4QMPVzscc OoDn+bEu10t6aqyEVQRs+KgZVzd3BMWsLxG74RBMcWKG3XCgnMamPCyKgZBw/BjRiJbG jFfb3+wvEmEdn/8XcXtjwchrbZnNE96ZZ9qt1KxSvJCaY63B6XGCMzzo3hqrjn4uMpqJ xZjLGz153woj/Bq9l8WychAP1RzsyzqCp/ujFt+1KOALaQ31Ma4+Tx3PpBg6YUmwvhHe g8uA== X-Gm-Message-State: AO0yUKVclnn9f+23dYLjsJeqVTuZQtkebuhJV1qpmpBgRvaJnFoq1ggl fAkC1mYJt1CIVE6Gt+dZ8d7BXkjBTku0mBYBcb6xhz4t/H3af/VQOwci6fs+U0EFkR1aUbg8QnS rMRiKTRgBRDUmvXn6FwK0eCCp X-Received: by 2002:a4a:49ce:0:b0:53b:4b94:45bf with SMTP id z197-20020a4a49ce000000b0053b4b9445bfmr436115ooa.3.1679380516942; Mon, 20 Mar 2023 23:35:16 -0700 (PDT) X-Received: by 2002:a4a:49ce:0:b0:53b:4b94:45bf with SMTP id z197-20020a4a49ce000000b0053b4b9445bfmr436107ooa.3.1679380516740; Mon, 20 Mar 2023 23:35:16 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:16 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 3/6] riscv/cmpxchg: Deduplicate arch_cmpxchg() macros Date: Tue, 21 Mar 2023 03:34:29 -0300 Message-Id: <20230321063430.2218795-4-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760958957407979123?= X-GMAIL-MSGID: =?utf-8?q?1760958957407979123?= Every arch_cmpxchg define (_relaxed, _acquire, _release, vanilla) contain it's own define for creating tmp variables and calling the correct internal macro for the desired version. Those defines are mostly the same code, so there is no need to keep the 4 copies. Create a helper define to avoid code duplication. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index c7a13eec4dbcc..e49a2edc6f36c 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -202,46 +202,35 @@ #define __cmpxchg_relaxed(ptr, old, new, size) \ ___cmpxchg(ptr, old, new, size, "", "", "") -#define arch_cmpxchg_relaxed(ptr, o, n) \ +#define _arch_cmpxchg(order, ptr, o, n) \ ({ \ __typeof__(*(ptr)) _o_ = (o); \ __typeof__(*(ptr)) _n_ = (n); \ - (__typeof__(*(ptr))) __cmpxchg_relaxed((ptr), \ - _o_, _n_, sizeof(*(ptr))); \ + (__typeof__(*(ptr))) __cmpxchg ## order((ptr), \ + _o_, _n_, \ + sizeof(*(ptr)));\ }) +#define arch_cmpxchg_relaxed(ptr, o, n) \ + _arch_cmpxchg(_relaxed, ptr, o, n) + #define __cmpxchg_acquire(ptr, old, new, size) \ ___cmpxchg(ptr, old, new, size, "", "", RISCV_ACQUIRE_BARRIER) #define arch_cmpxchg_acquire(ptr, o, n) \ -({ \ - __typeof__(*(ptr)) _o_ = (o); \ - __typeof__(*(ptr)) _n_ = (n); \ - (__typeof__(*(ptr))) __cmpxchg_acquire((ptr), \ - _o_, _n_, sizeof(*(ptr))); \ -}) + _arch_cmpxchg(_acquire, ptr, o, n) #define __cmpxchg_release(ptr, old, new, size) \ ___cmpxchg(ptr, old, new, size, "", RISCV_RELEASE_BARRIER, "") #define arch_cmpxchg_release(ptr, o, n) \ -({ \ - __typeof__(*(ptr)) _o_ = (o); \ - __typeof__(*(ptr)) _n_ = (n); \ - (__typeof__(*(ptr))) __cmpxchg_release((ptr), \ - _o_, _n_, sizeof(*(ptr))); \ -}) + _arch_cmpxchg(_release, ptr, o, n) #define __cmpxchg(ptr, old, new, size) \ ___cmpxchg(ptr, old, new, size, ".rl", "", " fence rw, rw\n") #define arch_cmpxchg(ptr, o, n) \ -({ \ - __typeof__(*(ptr)) _o_ = (o); \ - __typeof__(*(ptr)) _n_ = (n); \ - (__typeof__(*(ptr))) __cmpxchg((ptr), \ - _o_, _n_, sizeof(*(ptr))); \ -}) + _arch_cmpxchg(, ptr, o, n) #define arch_cmpxchg_local(ptr, o, n) \ (__cmpxchg_relaxed((ptr), (o), (n), sizeof(*(ptr)))) From patchwork Tue Mar 21 06:34:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72716 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1621213wrt; Mon, 20 Mar 2023 23:48:55 -0700 (PDT) X-Google-Smtp-Source: AK7set8j5J3JxWXUuOQTiKoWXL5v7IHztXRlyOU7z7FEmEtECB4U8P92EwkjosJcopVQqfA6IO52 X-Received: by 2002:a17:90a:e7cd:b0:237:f018:6433 with SMTP id kb13-20020a17090ae7cd00b00237f0186433mr1679244pjb.27.1679381335489; Mon, 20 Mar 2023 23:48:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679381335; cv=none; d=google.com; s=arc-20160816; b=0O1lofOAJsKISHK+FVRIL1ADVN092Y+MpeK0704FWvBh4894EnrnfNHh+lGCJa39IP E+B/m/jTFII9JHll2BcWWVEAXBBJCRWscvtAblb5trQepnc6Nixa2iuBx1y9orjLdjEb dSreF91Uj17S1+FbI1X1QU7ztBVoa7JYOo//vFZ/0oebwH1Pk75OsjNyQQh7sWZ7hU0l IRtfBefojQRckJrtAwRbDz7/oDRQLoaFpxTO6gKrabXQ7hXR1T7hJoao0WnpkM8fe5nB WQxxBHu1WJX3dX1OR22L/gtK7uJqZEXzUxCQQ9DBtyuqVfTbhk1hZ7NPL1fuvfBf3PLU UDmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uYmUB/WTTMvmBA0Z285enRAA2vTEDkWBaww5wTiZcXo=; b=Rw80JYfoYp11lYsVjCPcoD6KB+LpfezY6m4ld4q3e6/9Ni4eUTKEkGldq/Ob1ccv5I hPYEjQmaspijaUwHEk5VS5eCbpwdhtA0lFLbBewGYAXEKxSlE3qMhOjAijn/vliBTS2d FSB7N0yZdm0RvMtOB+nFyoFnm49Bc7hgyfPgNIyc7pui7+XyEtyPD/gcHS0fvghON0Sr V7bdEchEsb7V1rpuzn8uttXSuIbjLPr9pgmjmnx/qE2EvgwbWbdrCpikc9cGkB20EbLj XIU8goBrlnK3h7zzzez8GqhIl/3irdbzCCX//D05/ap3ucUczoM4WN7Wg+zdpv/yBTj8 Ur/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="LD6PZ/PW"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o3-20020a656a43000000b0050780e66602si14531157pgu.734.2023.03.20.23.48.40; Mon, 20 Mar 2023 23:48:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="LD6PZ/PW"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230345AbjCUGgj (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230342AbjCUGgd (ORCPT ); Tue, 21 Mar 2023 02:36:33 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E98F3B858 for ; Mon, 20 Mar 2023 23:35:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380526; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uYmUB/WTTMvmBA0Z285enRAA2vTEDkWBaww5wTiZcXo=; b=LD6PZ/PWifhc4ZUQeAiJkN886Z5rS5B4p7Nb0y97j08Rb+4rUlSiiJBzfoc/MP0Up+R3n3 7v6Fvr+JXDfNRLgYlEhED6uSBkiDTOPVxAGbVNBU72EESWw1TkEpow0RikGBwCCgHwlzfl K8s52/99Yk4Xp6Od1XnsFA4i2ki9AE4= Received: from mail-oi1-f200.google.com (mail-oi1-f200.google.com [209.85.167.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-655-t0dZcG4BOJSUcJZQt2Mbew-1; Tue, 21 Mar 2023 02:35:22 -0400 X-MC-Unique: t0dZcG4BOJSUcJZQt2Mbew-1 Received: by mail-oi1-f200.google.com with SMTP id bh14-20020a056808180e00b00364c7610c6aso6081381oib.6 for ; Mon, 20 Mar 2023 23:35:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380522; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uYmUB/WTTMvmBA0Z285enRAA2vTEDkWBaww5wTiZcXo=; b=R5ZH57zs+wsLD6I/VstVVNfAY5RLtw6yrwBcGSTA26d/LsUlL1NBAe9oij5TgpsGH9 nt8SBIrx3Xg9m8QhP5fKRFVGTZE2kKfgTGt/TDh08Znwfz8upxWHWuJR7IPF16qY19bB s2ZxblZwL6uLMRye9AD2InVTyunTILdg/cOAXXZ7B2IC1tfMxhXyvrM4p8h/nTHz3u2y gGoEJwNyB079+fLvSxpznlxGWYj+KfGZEXrYcRzs1lBcZKWddRdKeGr8JrNtiq4NODoA ARCev3MgciWNzicduMJtD/JRLV+arinByQYybObfEPvT1ngsPleZg+AP9XssTRSuWPe/ u/Ew== X-Gm-Message-State: AO0yUKUX/wTcvMVYcaxCEyCRKrbpqPm3RGlvefrZriGc2ypj+tvxP0qX st0vlItTB9yKI1QIqcgqWrjFb0MtRlFPbWuC4FcLu1i+XXcGRmukXP95zYoL8Gv2zg7t3nZsLX9 7VgO6hTGS4/CE4az8YTeJbgFBad7XoAyUBFo= X-Received: by 2002:a05:6830:138c:b0:69e:1412:75b8 with SMTP id d12-20020a056830138c00b0069e141275b8mr781583otq.15.1679380521774; Mon, 20 Mar 2023 23:35:21 -0700 (PDT) X-Received: by 2002:a05:6830:138c:b0:69e:1412:75b8 with SMTP id d12-20020a056830138c00b0069e141275b8mr781575otq.15.1679380521553; Mon, 20 Mar 2023 23:35:21 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:21 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 4/6] riscv/cmpxchg: Deduplicate xchg() asm functions Date: Tue, 21 Mar 2023 03:34:30 -0300 Message-Id: <20230321063430.2218795-5-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760958963002835734?= X-GMAIL-MSGID: =?utf-8?q?1760958963002835734?= In this header every xchg define (_relaxed, _acquire, _release, vanilla) contain it's own asm file, both for 4-byte variables an 8-byte variables, on a total of 8 versions of mostly the same asm. This is usually bad, as it means any change may be done in up to 8 different places. Unify those versions by creating a new define with enough parameters to generate any version of the previous 8. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 63 ++++++++++---------------------- 1 file changed, 19 insertions(+), 44 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index e49a2edc6f36c..715bf61e72c82 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -11,6 +11,17 @@ #include #include +#define ___xchg(sfx, prepend, append) \ +({ \ + __asm__ __volatile__ ( \ + prepend \ + " amoswap" sfx " %0, %2, %1\n" \ + append \ + : "=r" (__ret), "+A" (*__ptr) \ + : "r" (__new) \ + : "memory"); \ +}) + #define __xchg_relaxed(ptr, new, size) \ ({ \ __typeof__(ptr) __ptr = (ptr); \ @@ -18,18 +29,10 @@ __typeof__(*(ptr)) __ret; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - " amoswap.w %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".w", "", ""); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - " amoswap.d %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".d", "", ""); \ break; \ default: \ BUILD_BUG(); \ @@ -51,20 +54,10 @@ __typeof__(*(ptr)) __ret; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - " amoswap.w %0, %2, %1\n" \ - RISCV_ACQUIRE_BARRIER \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".w", "", RISCV_ACQUIRE_BARRIER); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - " amoswap.d %0, %2, %1\n" \ - RISCV_ACQUIRE_BARRIER \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".d", "", RISCV_ACQUIRE_BARRIER); \ break; \ default: \ BUILD_BUG(); \ @@ -86,20 +79,10 @@ __typeof__(*(ptr)) __ret; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - RISCV_RELEASE_BARRIER \ - " amoswap.w %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".w", RISCV_RELEASE_BARRIER, ""); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - RISCV_RELEASE_BARRIER \ - " amoswap.d %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".d", RISCV_RELEASE_BARRIER, ""); \ break; \ default: \ BUILD_BUG(); \ @@ -121,18 +104,10 @@ __typeof__(*(ptr)) __ret; \ switch (size) { \ case 4: \ - __asm__ __volatile__ ( \ - " amoswap.w.aqrl %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".w.aqrl", "", ""); \ break; \ case 8: \ - __asm__ __volatile__ ( \ - " amoswap.d.aqrl %0, %2, %1\n" \ - : "=r" (__ret), "+A" (*__ptr) \ - : "r" (__new) \ - : "memory"); \ + ___xchg(".d.aqrl", "", ""); \ break; \ default: \ BUILD_BUG(); \ From patchwork Tue Mar 21 06:34:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72720 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1626541wrt; Tue, 21 Mar 2023 00:01:51 -0700 (PDT) X-Google-Smtp-Source: AK7set+ul28k3QlaGtMGHaIfv6pz1fraebxmfo4aj828b3DdtMR5Oud+5gCnmfnUDGZs7qsOzkwG X-Received: by 2002:a17:903:27c4:b0:1a1:ad71:7403 with SMTP id km4-20020a17090327c400b001a1ad717403mr1140026plb.33.1679382111477; Tue, 21 Mar 2023 00:01:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679382111; cv=none; d=google.com; s=arc-20160816; b=Xw5IKWDoiT0wvA7khhjF4YpoVyLTHQOUIilZkRZsT3mvjelbWWidnfH7FW2ETa9lKD ZM5sY+TUjomBSo49Ftp+i0XAMJ54RttK5PyxA+lF5crf3MCEPr4YwviQsvkHUDTRzG12 0RSYG6o5jbCqumV2UiX2XY8rU8WRQrC7l2I/SDFaM/NVZECXTD2If7JdMsCoqnP/xGSb n735FFSplh3FUVYMqFXRZmrn8E9idO6Z3G89ruLuMLs44LUZFlVY6CKPcyrpdt/INlU9 +rQPMYM1YGY0JwizgBWS1ne/NFg1I/O7xFuYOzKxg3QB6XEeFprLqEa8ofYhXNhFBrDW GM+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tlcmKFBm9EfeLOX/A4Ek+TTZZd7OjXZ+kA7z9b9Tay8=; b=MG5zw786Xm/nueSRrXZu3n7QilMOthUNlFSjo5EZnvq4UfBpLYPclz4JCeie7i6ZD8 TEhOT90Y8rI2xzVa1TfYJmDva2eEDlAegY1Z1o0Nkge1EuQp+R6hiV/RDSFSNOsTFwRv TuDlgPthov9cefQN7O/VZlEaGYEjJChs8vsU3+cC+6mc3zts5e8ql39D7Uacwl3FXQ6e BGHpJCRJAvgD/1D80RBuF2oJcRp77SHlQqe5kozCr0aEHV4CFzWpxMqlVqO8jT/Q/FoZ FFkhDzXmf5pXiCo2TpNkO0ZXHUEiK1oOVJbdOMan4rJY2w5EFd3/hhOwrkeDv2ItMj0H iBOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Xyg1avX6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h7-20020a170902b94700b001a1809e22c2si12059118pls.435.2023.03.21.00.01.15; Tue, 21 Mar 2023 00:01:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Xyg1avX6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230353AbjCUGgn (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41916 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230327AbjCUGgi (ORCPT ); Tue, 21 Mar 2023 02:36:38 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11EAA3B85C for ; Mon, 20 Mar 2023 23:35:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380528; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tlcmKFBm9EfeLOX/A4Ek+TTZZd7OjXZ+kA7z9b9Tay8=; b=Xyg1avX62sTLnt4ZtsX27ok177kZnMQPdX1tMbow9isdbLzRdw71rZoS2x2/ASfImrqxrN 4OBh5AFblJqRn1d9Go5Kqsqkq58AhrwB2dIyBrwGPQi/EJRQZ3HTgS1uQC5DKVPTt4Khbn FHIgb5QrKR3ZG9zvDSJ79U4I/GW4vbw= Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-665--RKgjSXMNWq3KZ8UyX6bRw-1; Tue, 21 Mar 2023 02:35:27 -0400 X-MC-Unique: -RKgjSXMNWq3KZ8UyX6bRw-1 Received: by mail-ot1-f70.google.com with SMTP id p28-20020a0568301d5c00b0069f851af0aaso466901oth.22 for ; Mon, 20 Mar 2023 23:35:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380526; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tlcmKFBm9EfeLOX/A4Ek+TTZZd7OjXZ+kA7z9b9Tay8=; b=HA2wkDpmYfAqNiDYAEdpfZcva/Uxdsno6sRtdNlCZc541VGlilOaiQt2Le56VaWCkY v7iABDOncRlFSuz5embpQXqQu73zqByK1ZU3Ey3066/N0fPqXeJRYYkfF/CdDJmNXpmp q1OTDqeJJB3h6JyPxxNWxJpM9ri7A/wSIYjps/tjlphKadWvEjQkazxrSZpJgzidldjK r/PhPEMbPig9m8gzSwI2f+zbTo5OS3tX+fSHlf64aGOuOgdP7cW+mDDs6R/YCou8QGZu vNdhikBQBZPyVxknFXAmLj0kecgpdOUrPqYFgsPUGrTaxGrq3J+fFT0xjmGq9TdPvbEe kLIg== X-Gm-Message-State: AO0yUKXCqf72vq4ePYZWCL8FvmcxQfT/RUFYx+rrfONWbUnd2JuinJsj SBUtwn6iR5V4fnOIRIXTu2UbrasHpgPWcrdw2L8j1R8OvqH6/3SFKdrAj2YLP5RNDO2NxK8WnMa tsNIBTySw9fjc9CG/3k+SZvTb8t7HqMJBL6Y= X-Received: by 2002:a9d:6ad0:0:b0:69f:d2:4ff9 with SMTP id m16-20020a9d6ad0000000b0069f00d24ff9mr658172otq.34.1679380525851; Mon, 20 Mar 2023 23:35:25 -0700 (PDT) X-Received: by 2002:a9d:6ad0:0:b0:69f:d2:4ff9 with SMTP id m16-20020a9d6ad0000000b0069f00d24ff9mr658162otq.34.1679380525642; Mon, 20 Mar 2023 23:35:25 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:25 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 5/6] riscv/cmpxchg: Deduplicate xchg() macros Date: Tue, 21 Mar 2023 03:34:31 -0300 Message-Id: <20230321063430.2218795-6-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760959776686741010?= X-GMAIL-MSGID: =?utf-8?q?1760959776686741010?= Every xchg define (_relaxed, _acquire, _release, vanilla) contain it's own define for creating tmp variables and selecting the correct asm code for given variable size. All those defines are mostly the same code (other than specific barriers), so there is no need to keep the 4 copies. Unify those under a more general define, that can reproduce the previous 4 versions. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 62 ++++++-------------------------- 1 file changed, 10 insertions(+), 52 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index 715bf61e72c82..23da4d8e6f0c8 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -11,7 +11,7 @@ #include #include -#define ___xchg(sfx, prepend, append) \ +#define ____xchg(sfx, prepend, append) \ ({ \ __asm__ __volatile__ ( \ prepend \ @@ -22,17 +22,17 @@ : "memory"); \ }) -#define __xchg_relaxed(ptr, new, size) \ +#define ___xchg(ptr, new, size, sfx, prepend, append) \ ({ \ __typeof__(ptr) __ptr = (ptr); \ __typeof__(new) __new = (new); \ __typeof__(*(ptr)) __ret; \ switch (size) { \ case 4: \ - ___xchg(".w", "", ""); \ + ____xchg(".w" sfx, prepend, append); \ break; \ case 8: \ - ___xchg(".d", "", ""); \ + ____xchg(".d" sfx, prepend, append); \ break; \ default: \ BUILD_BUG(); \ @@ -40,6 +40,9 @@ __ret; \ }) +#define __xchg_relaxed(ptr, new, size) \ + ___xchg(ptr, new, size, "", "", "") + #define arch_xchg_relaxed(ptr, x) \ ({ \ __typeof__(*(ptr)) _x_ = (x); \ @@ -48,22 +51,7 @@ }) #define __xchg_acquire(ptr, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(new) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - switch (size) { \ - case 4: \ - ___xchg(".w", "", RISCV_ACQUIRE_BARRIER); \ - break; \ - case 8: \ - ___xchg(".d", "", RISCV_ACQUIRE_BARRIER); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___xchg(ptr, new, size, "", "", RISCV_ACQUIRE_BARRIER) #define arch_xchg_acquire(ptr, x) \ ({ \ @@ -73,22 +61,7 @@ }) #define __xchg_release(ptr, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(new) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - switch (size) { \ - case 4: \ - ___xchg(".w", RISCV_RELEASE_BARRIER, ""); \ - break; \ - case 8: \ - ___xchg(".d", RISCV_RELEASE_BARRIER, ""); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___xchg(ptr, new, size, "", RISCV_RELEASE_BARRIER, "") #define arch_xchg_release(ptr, x) \ ({ \ @@ -98,22 +71,7 @@ }) #define __xchg(ptr, new, size) \ -({ \ - __typeof__(ptr) __ptr = (ptr); \ - __typeof__(new) __new = (new); \ - __typeof__(*(ptr)) __ret; \ - switch (size) { \ - case 4: \ - ___xchg(".w.aqrl", "", ""); \ - break; \ - case 8: \ - ___xchg(".d.aqrl", "", ""); \ - break; \ - default: \ - BUILD_BUG(); \ - } \ - __ret; \ -}) + ___xchg(ptr, new, size, ".aqrl", "", "") #define arch_xchg(ptr, x) \ ({ \ From patchwork Tue Mar 21 06:34:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonardo Bras Soares Passos X-Patchwork-Id: 72727 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp1632483wrt; Tue, 21 Mar 2023 00:18:26 -0700 (PDT) X-Google-Smtp-Source: AK7set+MeKVzl78BDAgiTc41FoEWSJrl7Rtlr9s6nSPMIMB3/uuKdxpSZ5RiYUiTd50kfiy0NjSN X-Received: by 2002:a05:6a20:b29f:b0:da:144:92bf with SMTP id ei31-20020a056a20b29f00b000da014492bfmr1151366pzb.14.1679383106028; Tue, 21 Mar 2023 00:18:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679383106; cv=none; d=google.com; s=arc-20160816; b=oj87P63DHDLyRaZXINMXrhjyHETfqrQ+hb8kfIOTVBII37Vjm/A3DmWplsaXoXqo5K KCVKs7gl46ddGTmibZEanoQIabyNCoxOm3Q0nnobhvn9ZzaCfaohSulUhobTh8xyN6Gy RnqhInMm8B1xN2uO9DzVUu+vrnfyYT0JVejLQ8+IqVMUCmemyvBMoRhCGrU+n8WWL5bR UMZRN3yxJYm54vh4Ow6DEO86NmPbVbyoLkomUcIRkH4cHf1Q1qu9VCRFSgtmogctkU+i k9mpaM97KeltRZBeKLydlYJs+mP0nmiefETn5H0CGObi0sA3FNJ/9hnMDszbCC/WwSR+ XW/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lpwvsmW/EIvjt3XpmgOB2tOjIn+1scWXRJYbQwzYCy4=; b=Kq+nddwHoALpxDVNWT4N8v/bAYNlNBrdA+xE3bdlknDhfDiRpzKv6R7NSHTI3ezfu5 U/8a2xprnR2ZIO+nkpnLyXLn3421GNhVC7MT1DqLBm9IMwvZDfafjFaE7sq6hw/X4rT7 2HWdHA+Ox129Ecu8ZCu/pZKw6QUwWWD04mX4BTCGPieJcKGgFSXHUabuJz+iJ9SouADu 1xzFnynoXdhdh60u6cHvxipW6dn4uhXowYjoCu2BRkl9ORCbS8XuhsEnRepIBdePQeOB AezHofiXtkpXUZAgC9W1n2/53AAPt7O4ESRHdkgO2zjHdnAu8JaMgTA2VPKX7a5AdKQu ktIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CdbjvdUU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c5-20020a056a000ac500b0059072f087b7si12807421pfl.135.2023.03.21.00.18.13; Tue, 21 Mar 2023 00:18:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CdbjvdUU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230328AbjCUGgw (ORCPT + 99 others); Tue, 21 Mar 2023 02:36:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230313AbjCUGgk (ORCPT ); Tue, 21 Mar 2023 02:36:40 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75C7D3B86C for ; Mon, 20 Mar 2023 23:35:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679380532; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lpwvsmW/EIvjt3XpmgOB2tOjIn+1scWXRJYbQwzYCy4=; b=CdbjvdUUaRqT/cE+KdS0dLsTiANDvV9wp5hMDx/P9QP2SJ4oCzZKqDAszLhG3krUwpYXBz 8t2Y+5NDrnI/jOK5bcoyrKqF8Y01pgNWcc5tSgx9bBUVLOdtoSccvWdtT0IHPIIkgAiL69 HRVoQtVbZoGoRJrLWp5vzisLIwZoMaQ= Received: from mail-oo1-f69.google.com (mail-oo1-f69.google.com [209.85.161.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-110-vKSrda-aNHy5mU7quyEJbw-1; Tue, 21 Mar 2023 02:35:30 -0400 X-MC-Unique: vKSrda-aNHy5mU7quyEJbw-1 Received: by mail-oo1-f69.google.com with SMTP id bp27-20020a056820199b00b0052513faabe1so4251039oob.4 for ; Mon, 20 Mar 2023 23:35:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679380530; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lpwvsmW/EIvjt3XpmgOB2tOjIn+1scWXRJYbQwzYCy4=; b=lTv+DVqEsXzsWvDYvraDHDtTgdMdXFEuew18QgtpBzFpo1SEllq9StW/UO+cfYzcNR cPxaZ9OW4pjbVKRQVM0Oq7SCwcYXwgUEOy3dTtDXY/XEDiGhmxP6ff9lQfVKmqOL02k3 vpJKkRGoOxD600eFcd/yeBL6U9zxvsRNNVf7khokfJuTWgguzXRiu+Y0wKRXKIeCOhnS 9wDOQm++V/39vhwDYX5ZwQrxjFiqLeluxwbRRdjyClmqDmSyqg31siK7eCzZFybggfEB Qa1dr674uK7m7g64kAvIj+EResuwY2Lgjz/0tkiSJ/AtsjYAajxDrXkvBFaFMv7ug2QL GJnQ== X-Gm-Message-State: AO0yUKXR4XDH7JMaRr/ZkJLkXZPqghKtS152zazsJGfk/unrlXeLMtmQ X0dmEzeZcoONdK/XVOGj1lnNyo661P3KGGtC9A6MRD5vP0eOhSjSfUnVb6oFRj+L1EAMk6MWRCk KFp5TbjNXZTZEkjflkblYa+nw X-Received: by 2002:a4a:584f:0:b0:53b:4d59:405a with SMTP id f76-20020a4a584f000000b0053b4d59405amr457322oob.3.1679380530165; Mon, 20 Mar 2023 23:35:30 -0700 (PDT) X-Received: by 2002:a4a:584f:0:b0:53b:4d59:405a with SMTP id f76-20020a4a584f000000b0053b4d59405amr457315oob.3.1679380529942; Mon, 20 Mar 2023 23:35:29 -0700 (PDT) Received: from localhost.localdomain ([2804:1b3:a801:b074:274d:d04e:badc:c89f]) by smtp.gmail.com with ESMTPSA id y75-20020a4a454e000000b005293e9a12f5sm4545147ooa.45.2023.03.20.23.35.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Mar 2023 23:35:29 -0700 (PDT) From: Leonardo Bras To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Leonardo Bras , Guo Ren Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 6/6] riscv/cmpxchg: Deduplicate arch_xchg() macros Date: Tue, 21 Mar 2023 03:34:32 -0300 Message-Id: <20230321063430.2218795-7-leobras@redhat.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230321063430.2218795-1-leobras@redhat.com> References: <20230321063430.2218795-1-leobras@redhat.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760960819571315973?= X-GMAIL-MSGID: =?utf-8?q?1760960819571315973?= Every arch_xchg define (_relaxed, _acquire, _release, vanilla) contain it's own define for creating tmp variables and calling the correct internal macro for the desired version. Those defines are mostly the same code, so there is no need to keep the 4 copies. Create a helper define to avoid code duplication. (This did not cause any change in generated asm) Signed-off-by: Leonardo Bras --- arch/riscv/include/asm/cmpxchg.h | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h index 23da4d8e6f0c8..d13da2286c82a 100644 --- a/arch/riscv/include/asm/cmpxchg.h +++ b/arch/riscv/include/asm/cmpxchg.h @@ -43,41 +43,33 @@ #define __xchg_relaxed(ptr, new, size) \ ___xchg(ptr, new, size, "", "", "") -#define arch_xchg_relaxed(ptr, x) \ +#define _arch_xchg(order, ptr, x) \ ({ \ __typeof__(*(ptr)) _x_ = (x); \ - (__typeof__(*(ptr))) __xchg_relaxed((ptr), \ - _x_, sizeof(*(ptr))); \ + (__typeof__(*(ptr))) __xchg ## order((ptr), \ + _x_, sizeof(*(ptr))); \ }) +#define arch_xchg_relaxed(ptr, x) \ + _arch_xchg(_relaxed, ptr, x) + #define __xchg_acquire(ptr, new, size) \ ___xchg(ptr, new, size, "", "", RISCV_ACQUIRE_BARRIER) #define arch_xchg_acquire(ptr, x) \ -({ \ - __typeof__(*(ptr)) _x_ = (x); \ - (__typeof__(*(ptr))) __xchg_acquire((ptr), \ - _x_, sizeof(*(ptr))); \ -}) + _arch_xchg(_acquire, ptr, x) #define __xchg_release(ptr, new, size) \ ___xchg(ptr, new, size, "", RISCV_RELEASE_BARRIER, "") #define arch_xchg_release(ptr, x) \ -({ \ - __typeof__(*(ptr)) _x_ = (x); \ - (__typeof__(*(ptr))) __xchg_release((ptr), \ - _x_, sizeof(*(ptr))); \ -}) + _arch_xchg(_release, ptr, x) #define __xchg(ptr, new, size) \ ___xchg(ptr, new, size, ".aqrl", "", "") #define arch_xchg(ptr, x) \ -({ \ - __typeof__(*(ptr)) _x_ = (x); \ - (__typeof__(*(ptr))) __xchg((ptr), _x_, sizeof(*(ptr))); \ -}) + _arch_xchg(, ptr, x) #define xchg32(ptr, x) \ ({ \