From nobody Thu Sep 19 16:18:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1725296511; cv=none; d=zohomail.com; s=zohoarc; b=eo+g+BO3HoP4KmEmM2P98scGW9TwdiHmqBy1rpmwEogd1KyUWtuwM/zN+KBc9CL9QTkAAdWY5SL/D6MVRV0oOXkQc99WETzibq5IAdGtsebGRWeKVeBH26KBCarHp72AvcxQ6rLLjKEnKSgylm3fbLMEr0eZvRk8X9ecaaQS8Yg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1725296511; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VhrBEFGtPZRdWxQy1MAPcPMepK4SQW4esAy9pknAaq4=; b=KjpzgfZWVVOAGNDIJVH+Ivm2e3O/TvU8drptK3hx0IKf/iPDs9bBPINgljyO1bM9xs4nIQoT7+2W3Gwk0Bkx1/6K5ZghbFduPzxXi6Ivt6oQpULP0W4s+SEoZoHnE/liPVjG4Zb7jHtnheKvB0pr0x5K7uCjKwnBxEo5EIV5/bQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1725296511525130.74728805287668; Mon, 2 Sep 2024 10:01:51 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.788308.1197825 (Exim 4.92) (envelope-from ) id 1slAQl-00037r-H7; Mon, 02 Sep 2024 17:01:31 +0000 Received: by outflank-mailman (output) from mailman id 788308.1197825; Mon, 02 Sep 2024 17:01:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1slAQl-000343-7t; Mon, 02 Sep 2024 17:01:31 +0000 Received: by outflank-mailman (input) for mailman id 788308; Mon, 02 Sep 2024 17:01:30 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1slAQk-0002dz-DU for xen-devel@lists.xenproject.org; Mon, 02 Sep 2024 17:01:30 +0000 Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [2a00:1450:4864:20::236]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id ff9d6725-694c-11ef-a0b2-8be0dac302b0; Mon, 02 Sep 2024 19:01:29 +0200 (CEST) Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2f3f0bdbcd9so52191531fa.1 for ; Mon, 02 Sep 2024 10:01:29 -0700 (PDT) Received: from fedora.. ([94.75.70.14]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-535408410f5sm1677618e87.211.2024.09.02.10.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Sep 2024 10:01:27 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: ff9d6725-694c-11ef-a0b2-8be0dac302b0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725296489; x=1725901289; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VhrBEFGtPZRdWxQy1MAPcPMepK4SQW4esAy9pknAaq4=; b=lWVYvoT+tkzrXC//iJdeL867F2qT1gDLeklDUIwR7m6G2TLqHPBOu19OLrOudTkkcA g6AXmP5O6uCjs9vZWkJss76rrSMjRPAJAvF4PB6McIhSyIKSOw+pnwyNzEsb/uOc8qJp I9yg8VYSF7fGGgkbRVwEoUrKg6NcZsU6b3APZNtQtjHGmKubCgjpgotTN1IcGrFy+LZg rIyD7b4iyeaQxFlNFklHXgRbt5KFiQjMMgJh/k5gxiYeXdQVNxIy9rA+hSUOUzJ485I0 XPmtLDUByJa1LDPOqJTuwH75jidy22FFSthw1fTFfePeEN/DpDjXB1FXbueVMaO869ZT MyrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725296489; x=1725901289; 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=VhrBEFGtPZRdWxQy1MAPcPMepK4SQW4esAy9pknAaq4=; b=mk5fRidfTqVtwQyYbxyy3/Z2XWkK3NFzQsClyr1XDL5blENqNZn+lIvEbsLC2Lfj7l 4qZKsY+BvcJXoFRyiE2q3N5YSacjf6rP3CWGg1zjq1Kp/SxtY0uP0U9hTjq03TRWjQfb 5+fyNke/VcN9yTGedigZQa4K9PvVWz6BaAb20B3DR2chqEl04puLVk9tR9MVfoigdgyo L+za93J6fnlKOGdBk512UV6pCstt8usveNODqYv6pHGiAtwN0s/78T5s72U1/ks0skhO R8wIdH25ThQpBSQKrrkZQiKqPD6M6IMy2qbVdK+3xGSW+sS2ZjyYGTY1hRW1wT4unuXQ 2r0w== X-Gm-Message-State: AOJu0YxonHo6L+Y9umNQ5oNOSbv0hZEJaVqlOgMwCVaPgDNVwjmT7ZIR JK/S4ZdefVAuJ9Kx5zSVkCvsvBlkVOgnSManHEI1NDjQfjzv2NuCBU8Ljw== X-Google-Smtp-Source: AGHT+IFFa1M8ACKBxL1lFnWok+mgQAdnsPXQHjvYLuCwMIgw8/f9HAaKcI6eOp2cHkK1vi3M3bGKFQ== X-Received: by 2002:a05:6512:3ba5:b0:535:3da2:8a4d with SMTP id 2adb3069b0e04-53546b907f6mr7432708e87.44.1725296488303; Mon, 02 Sep 2024 10:01:28 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Alistair Francis , Bob Eshleman , Connor Davis , Andrew Cooper , Jan Beulich , Julien Grall , Stefano Stabellini Subject: [PATCH v6 3/9] xen/riscv: allow write_atomic() to work with non-scalar types Date: Mon, 2 Sep 2024 19:01:16 +0200 Message-ID: <44810c0c3faa4fd2d36a8be9a87c5022088c0e62.1725295716.git.oleksii.kurochko@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1725296512195116600 Content-Type: text/plain; charset="utf-8" Update the 2nd argument of _write_atomic() from 'unsigned long x' to 'void *x' to allow write_atomic() to handle non-scalar types, aligning it with read_atomic(), which can work with non-scalar types. Additionally, update the implementation of _add_sized() to use "writeX_cpu(readX_cpu(p) + x, p)" instead of "write_atomic(ptr, read_atomic(ptr) + x)" because 'ptr' is defined as 'volatile uintX_t *'. This avoids a compilation error that occurs when passing the 2nd argument to _write_atomic() (i.e., "passing argument 2 of '_write_atomic' discards 'volatile' qualifier from pointer target type") since the 2nd argument of _write_atomic() is now 'void *' instead of 'unsigned long'. Signed-off-by: Oleksii Kurochko --- Changes in v6: - new patch. --- xen/arch/riscv/include/asm/atomic.h | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/xen/arch/riscv/include/asm/atomic.h b/xen/arch/riscv/include/a= sm/atomic.h index 3c6bd86406..92b92fb4d4 100644 --- a/xen/arch/riscv/include/asm/atomic.h +++ b/xen/arch/riscv/include/asm/atomic.h @@ -54,16 +54,16 @@ static always_inline void read_atomic_size(const volati= le void *p, }) =20 static always_inline void _write_atomic(volatile void *p, - unsigned long x, + void *x, unsigned int size) { switch ( size ) { - case 1: writeb_cpu(x, p); break; - case 2: writew_cpu(x, p); break; - case 4: writel_cpu(x, p); break; + case 1: writeb_cpu(*(uint8_t *)x, p); break; + case 2: writew_cpu(*(uint16_t *)x, p); break; + case 4: writel_cpu(*(uint32_t *)x, p); break; #ifndef CONFIG_RISCV_32 - case 8: writeq_cpu(x, p); break; + case 8: writeq_cpu(*(uint64_t *)x, p); break; #endif default: __bad_atomic_size(); break; } @@ -72,7 +72,7 @@ static always_inline void _write_atomic(volatile void *p, #define write_atomic(p, x) \ ({ \ typeof(*(p)) x_ =3D (x); \ - _write_atomic(p, x_, sizeof(*(p))); \ + _write_atomic(p, &x_, sizeof(*(p))); \ }) =20 static always_inline void _add_sized(volatile void *p, @@ -82,27 +82,23 @@ static always_inline void _add_sized(volatile void *p, { case 1: { - volatile uint8_t *ptr =3D p; - write_atomic(ptr, read_atomic(ptr) + x); + writeb_cpu(readb_cpu(p) + x, p); break; } case 2: { - volatile uint16_t *ptr =3D p; - write_atomic(ptr, read_atomic(ptr) + x); + writew_cpu(readw_cpu(p) + x, p); break; } case 4: { - volatile uint32_t *ptr =3D p; - write_atomic(ptr, read_atomic(ptr) + x); + writel_cpu(readl_cpu(p) + x, p); break; } #ifndef CONFIG_RISCV_32 case 8: { - volatile uint64_t *ptr =3D p; - write_atomic(ptr, read_atomic(ptr) + x); + writeq_cpu(readw_cpu(p) + x, p); break; } #endif --=20 2.46.0