From nobody Mon Jun 8 07:22:48 2026 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (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 4665E36165E for ; Wed, 3 Jun 2026 11:05:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484733; cv=none; b=IefBy55ybD8qiotsdvwUXP2X5rguBA86sZQAnU3ZMNi708BEHsRZ009hRIZ33aUIqEUL4tWd3RGClI8zINNIWgbLf2nDbPNbV6TAEQoccjjsQXkWziWn/r4nLgc2oG139+2tQQ8CoyWGhYiOL3EsYnTopsmIjlzV1EWRYMCqb8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484733; c=relaxed/simple; bh=N4nUkQGM7/NHyDefp+wz7m+O5ovVwz3oUwrZbaLkYZ0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Y/SnikU0K5fbvcTRJCGSxgyHySYc9CRWKr5gOCoDrzWKQzVprJrmYwoBOr0rmNkQy0d9dE+TU6imQ0pE3ZdK5kCFNdD3Wgr+UCdzHblwCG/RTfJrqktdHxKAYk80zMaA5HzEFnJOpo92WhansXrk2z6nEeXXyGHERqqSwqtTXj8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=E92K0nrV; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="E92K0nrV" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-490bae3a39bso1845385e9.1 for ; Wed, 03 Jun 2026 04:05:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780484731; x=1781089531; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xGcwkTAP+0x56KFi5xH9yzo8Ys7TxU7DTYK9eKfTIZY=; b=E92K0nrVcD+aWmAuVhdSsTpR6+AGLGlEyRgELfvI4ENC9FqZawAEUP95FJvdMvL/Y4 SDR8wmEH5rY2wQDdlWzBIOshl0X7eSIH6Bp5Fwzr2t7YWmlcUG3S/DniNR+kB1yHYVzh pcl5aryuk6QT5DQdiKI7FBb2RfVxEeJVhCSUIHJkVNDQg+gZGT1u7RnW7bEKLnwnL+X4 33I7ZmfRAORmRmb8x5vPcuqeo7Wx39uksOemvTYwFrE/N8tNc0vIKyxZNFrL8BKuriZd vuFFijN91QnORRcFBH/ioIkszVUmQnXV9q0hQVrG68JOOYbdK+b2O/25dRMaqPGhTvAp +ILQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780484731; x=1781089531; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xGcwkTAP+0x56KFi5xH9yzo8Ys7TxU7DTYK9eKfTIZY=; b=ZOxSKjC74wMH0/gQTAXK9A4pHjo9ycYvA9P3ZuZP10bxF4lXw/BLayn7Xweh3XHBSz qbD891jsOdktW+wece6i6ellpOkMOhSp0Qd+cwJlMogXQBX+gVLvFXz0FsYi5FwnFOjH DCtDNiBKQEL9YbW5w34UTYgyTz1hgVnePB6IkKe7El/6Xit4ryZAasOk6Zn7+R7XDoOH FJGPAV2gRUtG8sS989mwmELMQs7tMXOAoADl/yQJykahSnTJ8wsUUG7dKAUViZneWWvY Lnu8uP5oXw9PA/IxjM343rUtwsUmfCB1hxyLAnj/j/Ft5CkYvE1LDNdzkyziVddW6zsN meKQ== X-Forwarded-Encrypted: i=1; AFNElJ8go0zPqiZK74f0PgJWnCVndcmEWH3ZifcShnPEASBjzxGnn5C5owzx+rB9rdaeIxYkQvaIOO+dzcC8BcM=@vger.kernel.org X-Gm-Message-State: AOJu0YwRtPiIUIea5mdOHPeo/d0tVIL7DXDpbb7PlTUyn/WM8DSGXAVY w5YIhE8qg28aiHgugV6vuW7tmuLenj6Uz19we7v2K+0nkK/cImJbhXpkNcVMVdV1dseC6TXiu1D f9atrmvS/4siSpg== X-Received: from wmbz27.prod.google.com ([2002:a05:600c:c09b:b0:490:b258:4672]) (user=smostafa job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c1e:b0:490:5466:8591 with SMTP id 5b1f17b1804b1-490b5ecff9cmr47408085e9.12.1780484730594; Wed, 03 Jun 2026 04:05:30 -0700 (PDT) Date: Wed, 3 Jun 2026 11:05:20 +0000 In-Reply-To: <20260603110522.3331819-1-smostafa@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260603110522.3331819-1-smostafa@google.com> X-Mailer: git-send-email 2.54.0.1032.g2f8565e1d1-goog Message-ID: <20260603110522.3331819-2-smostafa@google.com> Subject: [PATCH 1/3] arm64/mm: Simplify SWIOTLB setup in arch_mm_preinit() From: Mostafa Saleh To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, maz@kernel.org, aneesh.kumar@kernel.org, Mostafa Saleh Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" At the moment, arch_mm_preinit() checks if the system has limited addressing or is running under CCA to enable SWIOTLB, only after to be forced to true anyway if it was false due to CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC being unconditionally true for arm64. Simplify this logic, by making it clear that SWIOTLB is always used but its size depends on the address layout of the system. Signed-off-by: Mostafa Saleh Reviewed-by: Aneesh Kumar K.V (Arm) --- arch/arm64/mm/init.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 97987f850a33..fcc9c05a8fe6 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -336,25 +336,22 @@ void __init arch_setup_zero_pages(void) void __init arch_mm_preinit(void) { unsigned int flags =3D SWIOTLB_VERBOSE; - bool swiotlb =3D max_pfn > PFN_DOWN(arm64_dma_phys_limit); + bool limited_addressing =3D max_pfn > PFN_DOWN(arm64_dma_phys_limit); =20 if (is_realm_world()) { - swiotlb =3D true; flags |=3D SWIOTLB_FORCE; - } - - if (IS_ENABLED(CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC) && !swiotlb) { + } else if (!limited_addressing) { /* * If no bouncing needed for ZONE_DMA, reduce the swiotlb * buffer for kmalloc() bouncing to 1MB per 1GB of RAM. */ unsigned long size =3D DIV_ROUND_UP(memblock_phys_mem_size(), 1024); + swiotlb_adjust_size(min(swiotlb_size_or_default(), size)); - swiotlb =3D true; } =20 - swiotlb_init(swiotlb, flags); + swiotlb_init(true, flags); =20 /* * Check boundaries twice: Some fundamental inconsistencies can be --=20 2.54.0.1032.g2f8565e1d1-goog From nobody Mon Jun 8 07:22:48 2026 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 BB3DD43E4B2 for ; Wed, 3 Jun 2026 11:05:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484735; cv=none; b=lP/il9TAETELEK9sTkVEKiLEuVrwc6JqmHWhXF9CVs2qx6mhF2cVclGYuBhb27D42YaqJ2nRuHhIpd2YMvx3NXCpKSDCXbn3o8u9asKEvjMnirxDpys64QeNXpx+w7zpm0iaktpE95YqLkSN+Kph1zj4zt89DNCChAbcq6fY4gM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484735; c=relaxed/simple; bh=t1BiPfq2o/Y/qY0POWhYt7Iqk2cwhm0xp6qx6Nxl0MQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jVMKDypm7jFbbGNoI2WlT1jb2qi28Hx4rqluERHyJEfYZQ0qWbAD1YQCSnbSs8BM8P0oPP3K2o4vUq13JwZzpJ0H7f7NLGGLuqIiVdQdCQOdroIwjaj+26hkZ0MOS427ECwxMKe0AI3RtLZUM7VulN0p4JfXUr5GUiAO8pQJb74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=E0hH4/io; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="E0hH4/io" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-45ef616db45so3174246f8f.2 for ; Wed, 03 Jun 2026 04:05:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780484732; x=1781089532; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=JPcON38i/uY+vfZomqsbE4paaQjqW1yEj/vRQWl6QlA=; b=E0hH4/iog33jzNvaaNZ+RmtQ3POM47jV/jq0toxfM0jELjbKNSMwIdF/0Xn9Yri6Lr gDNmWI680QsycRZhxi5RUJDELXQh36HeJNEx7Nhvok6DXeZqBVsW6mGl8ek8dqmGpof8 ORjreV1dGHNzwtiL1reKbwzdzi7CPzdkDX7FkwqamNs8SLncuE3et8qrqx0ra1tqoE9s 9KBGPcMcO9LpFCxxzNK6VGN2mu075ro38esq3e/TIefV6OcYIpr2xnhNoVUTyV0yROuq 3MbqiTOLQsjBi4jTm1aV78asu3KjlNpZF7aOx+tIcxEXFL34OwvAVtW0YrmJdKBcDc// k1fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780484732; x=1781089532; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JPcON38i/uY+vfZomqsbE4paaQjqW1yEj/vRQWl6QlA=; b=Irn7jkTHSoL1TmIb6S/rtb5ttKBoIwSbCKw28jmDjyUiNL4BuwA780nU1YL2Mki9tn ZtFxZ4pQ27mKy1IEqVL5aqi6nuzq9pAowdk5AS9IlXHBqnjM8nJX9P7xEk3qPmW0GgcK vZvdHjrVy+uHju0C9gQ6p13kFKIo/FJmOYG7Jk2BC6SDxp85Qck2imnrs6zi+pUpsaL6 5ZXWIcRTP0EDeK5ZnKWg/pyDek8Lqz2wduAVcByPlZ+iWyZ0zpJEOL59IDRDGQ3TsR3r FsOuMrKoygencARd3tBx8Vv+HZ6gjUCMkLVD3hBDct0X9njQIkPtVDw0Q0boTvt9do+t 721g== X-Forwarded-Encrypted: i=1; AFNElJ8NA6b5OwHOD9jifQrpjmuLZQQZDhHnlZOwNHqcvGAzKkvTH7ch7ueCRUQ4QqZw5dnoteZK4+vKX9exwJQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyw5Lq92sXmbM2mY3IOLYrPb6hB3LLG0eLDiFq6sT8nPRekI3Uu mZSWRMApsUOxBXRaeWOW+6MOrVNcQQUh4f8JEY8VFOY9w+gVXQQpt23z1aF4NiXOVb4NpTYXXTt i53mBm2M26tAtdQ== X-Received: from wrwc11.prod.google.com ([2002:a5d:63cb:0:b0:45f:60ce:4270]) (user=smostafa job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:354e:b0:48a:75b9:b0bc with SMTP id 5b1f17b1804b1-490b60edb8bmr44260465e9.29.1780484732043; Wed, 03 Jun 2026 04:05:32 -0700 (PDT) Date: Wed, 3 Jun 2026 11:05:21 +0000 In-Reply-To: <20260603110522.3331819-1-smostafa@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260603110522.3331819-1-smostafa@google.com> X-Mailer: git-send-email 2.54.0.1032.g2f8565e1d1-goog Message-ID: <20260603110522.3331819-3-smostafa@google.com> Subject: [PATCH 2/3] drivers/virt: pkvm: Fix end calculation in mmio_guard_ioremap_hook() From: Mostafa Saleh To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, maz@kernel.org, aneesh.kumar@kernel.org, Mostafa Saleh Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Sashiko (locally) reports a logical issues in mmio_guard_ioremap_hook() mmio_guard_ioremap_hook() attempts to handle unaligned addresses and sizes. However, aligning the start address before adding the size, might shift the end to the page before. Fixes: 0f1269495800 ("drivers/virt: pkvm: Intercept ioremap using pKVM MMIO= _GUARD hypercall") Signed-off-by: Mostafa Saleh --- drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c b/drivers/virt/c= oco/pkvm-guest/arm-pkvm-guest.c index 4230b817a80b..d66291def0f4 100644 --- a/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c +++ b/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c @@ -82,8 +82,8 @@ static int mmio_guard_ioremap_hook(phys_addr_t phys, size= _t size, if (protval !=3D PROT_DEVICE_nGnRE && protval !=3D PROT_DEVICE_nGnRnE) return 0; =20 + end =3D PAGE_ALIGN(phys + size); phys =3D PAGE_ALIGN_DOWN(phys); - end =3D phys + PAGE_ALIGN(size); =20 while (phys < end) { const int func_id =3D ARM_SMCCC_VENDOR_HYP_KVM_MMIO_GUARD_FUNC_ID; --=20 2.54.0.1032.g2f8565e1d1-goog From nobody Mon Jun 8 07:22:48 2026 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 DE5DF44BC92 for ; Wed, 3 Jun 2026 11:05:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484736; cv=none; b=QTA4/ucL4ZGs/sXHKNg223/1MxRibcO8yX6EXK7AA3Dl8M/1ZhjMhzy3WYz54EejLqiU2b84lRXBA6f86aoBV/dBvIydCHrHDHxfJABowEodtL5cry5PGlAmYzKGy/N0FxL0sJOhq71c3aCIRHWtvdoOQTTJa88N4Qwo9OQraxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780484736; c=relaxed/simple; bh=lc/gAF1khc6U81fflZnN7aghnxvRAp3v+HkCoi3AAaw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jIQLlPqodnQQ43TJ/zfupKKcoqLfsm1VdwgSvgx6UJNBHe7uEizHgMzkSjB7RZ10iqPPup0Froa/CI6q1YK0VBQ6rrGLT2lVr+q7/u/uYscKFt4DoRpgvjtqc4OkUdJ128zkBoB8mi6I2aAt7nLj5Zid0+zq5PawSuAmaK72kwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=RgnEBJrc; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--smostafa.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RgnEBJrc" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-460198535bcso1277578f8f.3 for ; Wed, 03 Jun 2026 04:05:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780484733; x=1781089533; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xJ6q700kUF7wjF4x7VovFZph81ig181xRJbw3b4wh8w=; b=RgnEBJrce0vkiUcDkpclNTcm9t+qYsg49RqnNbxvhbh82n7P5ho8jacVfFAKiBEEk4 RD7lxwfAcvtwsnYRqq/6nko/PjMy4QNFkt+RRlvoszBb8nXIiB+VOe3GY0NMmEwBZqkO cBREiLbWZTkjbvvUeiBmGR03yYlcITUtjhRyBoq4Vlpjdo6EnZMorLleVQsOWl1mlK7n Dl8mloSxevEu4PdYu4oIeCg2MOh1s/dn2i0UuZfTBkvbRRZKFRXi7YCwuusA9rskPyzc MRf/OxdBWQ2j/b5ELPh7n1SwEVpugDZ4e6z4HQXTj+RELaUf4zUqiQr/c80Xz6K6YE9V ZFkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780484733; x=1781089533; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xJ6q700kUF7wjF4x7VovFZph81ig181xRJbw3b4wh8w=; b=n9+kNB82bHGBkG7BJAEcPShGdKoJts/ydjVseOWCjeDV+okeQfAPpxYc2hooeO4UDD edNyi5rO4pubRt8Ppycj2ELRC4tARcOu3qMLH7V5Bh0v0+CV/xiNsqGjehx02i1e2DK7 U6PyH28wyT0sYR/ihyNhAs/VmWyQ8NbUmh/DbGBrlJOKcRkb1P43iq4bNwaViyWF2kjr T5Ep8eEDEctPuor5dHUU4Ln+Ns8/t1cC6OgX9xqi/+3WtSfhGtEp1iBfH7qgAz2tM0Jk xChpmaLWriXnEI6din5TpUuwyjE8BDMuyXaMrlbir8N7JGTVU0hph1fM6k6wVcyvkdoT 2dyw== X-Forwarded-Encrypted: i=1; AFNElJ8bToWN77nOICtcbIs7wwQvWpdEdJufK3ObWIyxElK4uYiUtNVckvFw2A6N+nr2UzTUt4tCStB+WJzIUCI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7NXYex26V1kEfFcBqLZ2pDSbY4BgKzHwyJNdbIsVCijLMv7eE FuOofV2prksykenKZzZ1cV1KoRR0hpOgoBRl0lAezQN0nVLgYKvFHLX9lHlD76vGfAvIDJgWRZX EJC5cAAoXmied7Q== X-Received: from wrp11.prod.google.com ([2002:a05:6000:41eb:b0:45e:f3a6:7475]) (user=smostafa job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:46ce:b0:490:4b89:535f with SMTP id 5b1f17b1804b1-490b5ec0349mr42159705e9.8.1780484733255; Wed, 03 Jun 2026 04:05:33 -0700 (PDT) Date: Wed, 3 Jun 2026 11:05:22 +0000 In-Reply-To: <20260603110522.3331819-1-smostafa@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260603110522.3331819-1-smostafa@google.com> X-Mailer: git-send-email 2.54.0.1032.g2f8565e1d1-goog Message-ID: <20260603110522.3331819-4-smostafa@google.com> Subject: [PATCH 3/3] arm64/coco: Add pKVM as a CC platform From: Mostafa Saleh To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, maz@kernel.org, aneesh.kumar@kernel.org, Mostafa Saleh Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" pKVM does support memory encryption, expose that to the rest of the kernel through cc_platform_has() At the moment, all devices inside the guest are emulated which requires its memory to be shared back to the host (decrypted), so set force_dma_unencrypted() to always return true. Although, typically pKVM guests rely on restricted-dma-pools to bounce traffic, with this change, it is possible to solely rely on the default SWIOTLB for that (assuming the appropriate size is set from the command line) Signed-off-by: Mostafa Saleh --- This change is critical for the ongoing refactoring of the DMA-API[1] that will break protected guests under pKVM with this patch. That is due to this rework will make the state of the SWIOTLB and restricted dma pools depends on the value returned by cc_platform_has() [1] https://lore.kernel.org/all/20260522042815.370873-1-aneesh.kumar@kernel= .org/ --- arch/arm64/include/asm/hypervisor.h | 13 +++++++++++++ arch/arm64/include/asm/mem_encrypt.h | 3 ++- arch/arm64/kernel/rsi.c | 12 ------------ arch/arm64/mm/init.c | 15 ++++++++++++++- drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c | 3 +++ 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/arch/arm64/include/asm/hypervisor.h b/arch/arm64/include/asm/h= ypervisor.h index a12fd897c877..8889a0ba1ec5 100644 --- a/arch/arm64/include/asm/hypervisor.h +++ b/arch/arm64/include/asm/hypervisor.h @@ -3,6 +3,9 @@ #define _ASM_ARM64_HYPERVISOR_H =20 #include +#include + +DECLARE_STATIC_KEY_FALSE(pkvm_guest); =20 void kvm_init_hyp_services(void); bool kvm_arm_hyp_service_available(u32 func_id); @@ -10,8 +13,18 @@ void kvm_arm_target_impl_cpu_init(void); =20 #ifdef CONFIG_ARM_PKVM_GUEST void pkvm_init_hyp_services(void); + +static inline bool is_protected_kvm_guest(void) +{ + return static_branch_unlikely(&pkvm_guest); +} #else static inline void pkvm_init_hyp_services(void) { }; + +static inline bool is_protected_kvm_guest(void) +{ + return false; +} #endif =20 static inline void kvm_arch_init_hyp_services(void) diff --git a/arch/arm64/include/asm/mem_encrypt.h b/arch/arm64/include/asm/= mem_encrypt.h index 314b2b52025f..636f45b4d8af 100644 --- a/arch/arm64/include/asm/mem_encrypt.h +++ b/arch/arm64/include/asm/mem_encrypt.h @@ -2,6 +2,7 @@ #ifndef __ASM_MEM_ENCRYPT_H #define __ASM_MEM_ENCRYPT_H =20 +#include #include =20 struct device; @@ -20,7 +21,7 @@ int realm_register_memory_enc_ops(void); =20 static inline bool force_dma_unencrypted(struct device *dev) { - return is_realm_world(); + return is_realm_world() || is_protected_kvm_guest(); } =20 /* diff --git a/arch/arm64/kernel/rsi.c b/arch/arm64/kernel/rsi.c index 92160f2e57ff..25ca75ce1a4d 100644 --- a/arch/arm64/kernel/rsi.c +++ b/arch/arm64/kernel/rsi.c @@ -7,7 +7,6 @@ #include #include #include -#include #include =20 #include @@ -23,17 +22,6 @@ EXPORT_SYMBOL(prot_ns_shared); DEFINE_STATIC_KEY_FALSE_RO(rsi_present); EXPORT_SYMBOL(rsi_present); =20 -bool cc_platform_has(enum cc_attr attr) -{ - switch (attr) { - case CC_ATTR_MEM_ENCRYPT: - return is_realm_world(); - default: - return false; - } -} -EXPORT_SYMBOL_GPL(cc_platform_has); - static bool rsi_version_matches(void) { unsigned long ver_lower, ver_higher; diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index fcc9c05a8fe6..edcc305ec883 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -36,6 +37,7 @@ =20 #include #include +#include #include #include #include @@ -338,7 +340,7 @@ void __init arch_mm_preinit(void) unsigned int flags =3D SWIOTLB_VERBOSE; bool limited_addressing =3D max_pfn > PFN_DOWN(arm64_dma_phys_limit); =20 - if (is_realm_world()) { + if (is_realm_world() || is_protected_kvm_guest()) { flags |=3D SWIOTLB_FORCE; } else if (!limited_addressing) { /* @@ -413,6 +415,17 @@ void dump_mem_limit(void) } } =20 +bool cc_platform_has(enum cc_attr attr) +{ + switch (attr) { + case CC_ATTR_MEM_ENCRYPT: + return is_realm_world() || is_protected_kvm_guest(); + default: + return false; + } +} +EXPORT_SYMBOL_GPL(cc_platform_has); + #ifdef CONFIG_EXECMEM static u64 module_direct_base __ro_after_init =3D 0; static u64 module_plt_base __ro_after_init =3D 0; diff --git a/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c b/drivers/virt/c= oco/pkvm-guest/arm-pkvm-guest.c index d66291def0f4..26fe9c3f22e3 100644 --- a/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c +++ b/drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c @@ -17,6 +17,7 @@ #include =20 static size_t pkvm_granule; +DEFINE_STATIC_KEY_FALSE_RO(pkvm_guest); =20 static int arm_smccc_do_one_page(u32 func_id, phys_addr_t phys) { @@ -120,4 +121,6 @@ void pkvm_init_hyp_services(void) =20 if (kvm_arm_hyp_service_available(ARM_SMCCC_KVM_FUNC_MMIO_GUARD)) arm64_ioremap_prot_hook_register(&mmio_guard_ioremap_hook); + + static_branch_enable(&pkvm_guest); } --=20 2.54.0.1032.g2f8565e1d1-goog