From nobody Sat Jun 27 16:00:27 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5F2E3128D4 for ; Mon, 8 Jun 2026 15:52:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780933981; cv=none; b=r2fPieHbV1ima41BXuJ35/uvF+eFuoSZLNJILtIfSlh5aFVVnRm2Cj26oIqVxDK1SvV7uJKQDstyK0aFTjuFcfB3GVnnfKwx6GlVp+zPNBULt0vuzRoXTtkmr/TIZvHFcyzFaG1j5+3B5Z+eqDbbg7p6p3xMzlEFlusEhjcdfEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780933981; c=relaxed/simple; bh=56Obr3ilAhtl2cWD3iUafGgsyWMvUy2ZtTlofiDa9zI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=DXgS3t1Z8AIGJaVjOGyHRE4FHgw9HwHlBupVCQed23aNBmaqfTDE9q8D72qMgEnl74f+OHrvdnuz/Vesv2EKX5brtlglTHZs3bfHWR/fKLZPzWTdQrJlnpKMYj669Evcb2EagGhO7piOvbRwbay/SUjVq5A+VeK2A3mK1rnIg08= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YWPu6+is; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YWPu6+is" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2c0c3315c5dso48505185ad.3 for ; Mon, 08 Jun 2026 08:52:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780933979; x=1781538779; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=EVMcV2amC0zCzG7WFGyPAc9k2b2Mh+czO6Q9ao0kqOA=; b=YWPu6+iszPcd5uJ+lf2TeRpux019k5um/RSxrOLFEFWgeYI7FwLUgkedkJHa/bCjdN zBsKGbw2QVsEkhsU6wzf7W7oJWAKTu0jJjdrJ8Bxj80RYg4VoczxSMEJrfljXBg2LqdT jmYM25SUy21os7Vm+MbznlPtP0BfDiyQeEUqmCIxT/aYrHThu1SgQ3rp2hGMu+ZuXm6y GkrrUoaM6iSDxRyTfovk4DvmawBpSDr07wE+egZXD3iznmw/LX38tuk40/NREfLnEpMt iQwZWE/MV8oCjecP1xBxrKJSgmq+Ogvd5KsBv1uYCQ05KK/j+AiWDyDDLPi0kM5bEgpN CpoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780933979; x=1781538779; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=EVMcV2amC0zCzG7WFGyPAc9k2b2Mh+czO6Q9ao0kqOA=; b=ZGP1W/9s9VBB+xP+akCYWg1ZYwHkKMzOz+X8vWgzUeSRNasL4iv6C7nEcGu+RSe5Zs edn/gji0ZDcn14wLz8o3254VOPkSaf5XBmtmCZlWniDBUoahvVbSWKeZ/FQ6GVswtOhi DH5ovHSZRsXIFD/LZtXhJsPgrcIxpnOsyy4jP8f033ue6qLPmaeA4o0edCUX5uVfb2NP f+yJjTj0hxa8BaAZBhRvQrtE5zlqdBNzROzCKO0cViMcitNyp1dMCdfsTZiGuYR6H0o7 2qtkUbHQJdIV0ICImvvndlUXft5xWP+ZVT56k66Devc5suAAX2fTj3zRF+9ec5vFcyY2 2GMA== X-Forwarded-Encrypted: i=1; AFNElJ+DVrOPvIC2K/laWYCoFiu5uVzAeSQYSCXsl/ME06unRLEPAGwJWXIb5HiIWrNjDpzrvGYTdnNPUfHiagg=@vger.kernel.org X-Gm-Message-State: AOJu0YyXkVPEyCKlQmdFWku1CODqGu2uZKymfnKANmWf1YRfQTqo+uyC A2b6tPIf7ELpa3vqhsOxwn4rSPW8g64vfOJ61P8K4sTeBL7xSRkgT3Rb X-Gm-Gg: Acq92OEzYRHFznv8WLZU0ylhasKZPoW61L4fT/H4SmySoN0z17NaTtL5u66CE3GREu3 rz/MT6u5Axr26Aht9nEO303gbR1hI7/wqnKhcVfduqxt7Dca90HeYNJwgFXRtvpE295KudBDmE+ zqqRIgkfHTdyk5N0a7V2L1Wb+D/m6+nRE6yBWNSDgSWqRD8EhYu6lkFoy84rLRH3y0nmpNtbdwN UyUmp48B84SkQ1XPaYg8TVinuIh66r0+fwNuStynwIpcC0mhsSpNcC3PMrs/Z0D5oazoeXM8ztL k/5jplUlA/vb5lj6gedDzTlL3VBVh2OHwdo4fFB7CruEeOxL8RRVL8Bp//Q/fmNnHsKoxu+0tRm iDEgbsiST4kzui2OAD5KfqywX3nurN8rTgER2dT+K+Xmr+Eig06vpsrqRCpntf6dSc2vE5SuA0a 2+gSBN91kpVaakNyZQeJSztXeiDVjCoYG/18HzO8lS9U/8UIuS6fKt7x8vCf8ZdhYvIyKoxJKDM RdaGQzkiydrGogr+ZbnzFR7drLhBA9/okFuCF9DZg== X-Received: by 2002:a17:902:ce92:b0:2c0:db23:4a4 with SMTP id d9443c01a7336-2c1e85d210amr175246605ad.36.1780933979031; Mon, 08 Jun 2026 08:52:59 -0700 (PDT) Received: from LAPTOP-M4N25KQ5.tail73068d.ts.net (1-160-247-151.dynamic-ip.hinet.net. [1.160.247.151]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c1664ad138sm192371645ad.82.2026.06.08.08.52.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2026 08:52:58 -0700 (PDT) From: Sean Chang To: Anup Patel , Palmer Dabbelt Cc: Atish Patra , Paul Walmsley , Albert Ou , Alexandre Ghiti , kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Sean Chang Subject: [PATCH v1] riscv: kvm: Use endian-specific __lelong for NACL shared memory Date: Mon, 8 Jun 2026 23:52:52 +0800 Message-ID: <20260608155252.4292-1-seanwascoding@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When compiling with sparse enabled (C=3D2), bitwise type warnings are triggered in the RISC-V KVM implementation. This occurs because the user-space data unboxing macro '__get_user_asm' performs implicit casting on restricted types without forcing the compiler's compliance. Additionally, raw 'unsigned long *' pointers are used to access the SBI NACL shared memory, whereas the RISC-V SBI specification mandates that these structures must follow little-endian byte ordering. Fix these by: 1. Adding a '__force' cast to '__get_user_asm()' to safely suppress implicit cast warnings during user-space data fetching. 2. Introducing the '__lelong' type macro, which dynamically resolves to '__le32' or '__le64' depending on XLEN, and replacing 'unsigned long *' with '__lelong *' to enforce proper compile-time endianness checks. Signed-off-by: Sean Chang Reviewed-by: Anup Patel --- arch/riscv/include/asm/kvm_nacl.h | 14 ++++++++------ arch/riscv/include/asm/uaccess.h | 2 +- arch/riscv/kvm/nacl.c | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/arch/riscv/include/asm/kvm_nacl.h b/arch/riscv/include/asm/kvm= _nacl.h index 4124d5e06a0f..f45407bcaa26 100644 --- a/arch/riscv/include/asm/kvm_nacl.h +++ b/arch/riscv/include/asm/kvm_nacl.h @@ -60,9 +60,11 @@ int kvm_riscv_nacl_init(void); #ifdef CONFIG_32BIT #define lelong_to_cpu(__x) le32_to_cpu(__x) #define cpu_to_lelong(__x) cpu_to_le32(__x) +#define __lelong __le32 #else #define lelong_to_cpu(__x) le64_to_cpu(__x) #define cpu_to_lelong(__x) cpu_to_le64(__x) +#define __lelong __le64 #endif =20 #define nacl_shmem() \ @@ -70,7 +72,7 @@ int kvm_riscv_nacl_init(void); =20 #define nacl_scratch_read_long(__shmem, __offset) \ ({ \ - unsigned long *__p =3D (__shmem) + \ + __lelong *__p =3D (__shmem) + \ SBI_NACL_SHMEM_SCRATCH_OFFSET + \ (__offset); \ lelong_to_cpu(*__p); \ @@ -78,7 +80,7 @@ int kvm_riscv_nacl_init(void); =20 #define nacl_scratch_write_long(__shmem, __offset, __val) \ do { \ - unsigned long *__p =3D (__shmem) + \ + __lelong *__p =3D (__shmem) + \ SBI_NACL_SHMEM_SCRATCH_OFFSET + \ (__offset); \ *__p =3D cpu_to_lelong(__val); \ @@ -87,7 +89,7 @@ do { \ #define nacl_scratch_write_longs(__shmem, __offset, __array, __count) \ do { \ unsigned int __i; \ - unsigned long *__p =3D (__shmem) + \ + __lelong *__p =3D (__shmem) + \ SBI_NACL_SHMEM_SCRATCH_OFFSET + \ (__offset); \ for (__i =3D 0; __i < (__count); __i++) \ @@ -168,7 +170,7 @@ __kvm_riscv_nacl_hfence(__shmem, \ =20 #define nacl_csr_read(__shmem, __csr) \ ({ \ - unsigned long *__a =3D (__shmem) + SBI_NACL_SHMEM_CSR_OFFSET; \ + __lelong *__a =3D (__shmem) + SBI_NACL_SHMEM_CSR_OFFSET; \ lelong_to_cpu(__a[SBI_NACL_SHMEM_CSR_INDEX(__csr)]); \ }) =20 @@ -176,7 +178,7 @@ __kvm_riscv_nacl_hfence(__shmem, \ do { \ void *__s =3D (__shmem); \ unsigned int __i =3D SBI_NACL_SHMEM_CSR_INDEX(__csr); \ - unsigned long *__a =3D (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \ + __lelong *__a =3D (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \ u8 *__b =3D (__s) + SBI_NACL_SHMEM_DBITMAP_OFFSET; \ __a[__i] =3D cpu_to_lelong(__val); \ __b[__i >> 3] |=3D 1U << (__i & 0x7); \ @@ -186,7 +188,7 @@ do { \ ({ \ void *__s =3D (__shmem); \ unsigned int __i =3D SBI_NACL_SHMEM_CSR_INDEX(__csr); \ - unsigned long *__a =3D (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \ + __lelong *__a =3D (__s) + SBI_NACL_SHMEM_CSR_OFFSET; \ u8 *__b =3D (__s) + SBI_NACL_SHMEM_DBITMAP_OFFSET; \ unsigned long __r =3D lelong_to_cpu(__a[__i]); \ __a[__i] =3D cpu_to_lelong(__val); \ diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uacc= ess.h index 11c9886c3b70..5d4ec15584cf 100644 --- a/arch/riscv/include/asm/uaccess.h +++ b/arch/riscv/include/asm/uaccess.h @@ -112,7 +112,7 @@ do { \ _ASM_EXTABLE_UACCESS_ERR(1b, %l2, %0) \ : "=3D&r" (__tmp) \ : "m" (*(ptr)) : : label); \ - (x) =3D (__typeof__(x))(unsigned long)__tmp; \ + (x) =3D (__force __typeof__(x))(unsigned long)__tmp; \ } while (0) #else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */ #define __get_user_asm(insn, x, ptr, label) \ diff --git a/arch/riscv/kvm/nacl.c b/arch/riscv/kvm/nacl.c index 08a95ad9ada2..6f9f8963e9dd 100644 --- a/arch/riscv/kvm/nacl.c +++ b/arch/riscv/kvm/nacl.c @@ -20,7 +20,7 @@ void __kvm_riscv_nacl_hfence(void *shmem, unsigned long page_count) { int i, ent =3D -1, try_count =3D 5; - unsigned long *entp; + __lelong *entp; =20 again: for (i =3D 0; i < SBI_NACL_SHMEM_HFENCE_ENTRY_MAX; i++) { --=20 2.43.0