From nobody Thu Apr 9 07:16:34 2026 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.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 6E67C3C73E3 for ; Tue, 10 Mar 2026 12:49:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773146995; cv=none; b=aW7qj8YzTXfwDSaOMwgVuv+RextMDHs9aZbIM/JOKgbY7uVLvLyn1sO//Gqwmkf2zrvEKxuITMkswA1vwyuu9tIVKMMzYLd8lm07t6Yux/YbqAV9nMrUPTWhdj3/DXeZwsU0Cp+LjQ8Eh3orfdIDYJRUFO9uLwatTQE97zMR6OM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773146995; c=relaxed/simple; bh=k6UwhIhhsfW0It/EuFgaW+IK3aiuqQqET1Q14sl0QXw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FSkuUDWuPx/Y+p+1XjciWxX/no23iUwsClYlQnk3FLjlGAR23YE0WXDRyqqcoXJlo+uRuj2Mu8Hu0ivXwsca3IU1H6OB/DeS/abPT2ng/iqal7ZHLK53Si2j7Sv8Z9c53QnD/OYfS0UDnGLM9GlXPBXQwawLvOVVZUFmDBSFo8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gCQp0/qs; arc=none smtp.client-ip=209.85.128.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--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gCQp0/qs" Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-48531e8ae62so17664095e9.3 for ; Tue, 10 Mar 2026 05:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1773146993; x=1773751793; 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=jMGGQ3IiwT5PMH1OcoXP65zz2QzMpSJC2ga0AgyGkCg=; b=gCQp0/qsp4/cH8sohZZ8FLILT7JQUjO6h5mCAuKHrBMOXVGIAi+ABNAxPk80qlh40C XpC0DZADLcLbGVLPsahV1fmB1hs7rsuZZmsHwOXlE+6EJxANpO4BzsUEIuGx59JlXPIC ZqXJ0NcxgFJl5eCufrwNqfUrbMGaXhw6yrzly2R+xyCdANR0BTedQB4qUnXlwU7nINqI SG/ZLb+1kLBJnY7hGfpAnhldxmCg5DL1+WPDAxFF0HME82vq6xUW+jrY6qkXo7KuH/QJ GLcc292C1toWMCCo/pISQAlukZsfmK5PIydYycjURcIHuuG7YYlo67BKxwFKNCnRC2e7 KYWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773146993; x=1773751793; 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=jMGGQ3IiwT5PMH1OcoXP65zz2QzMpSJC2ga0AgyGkCg=; b=C1to29/NiKHHWQE1/S9rfoZ1FQIKQ+71CkdfNwDNXbXx6YuQ0Aj5+r6jXOzcUse4Vc 64Yl7QioPMzLo4aN6V+OXpfQ07l9NC9olU5j57Zk4pGVopifLsyxVrBMpKtWugXFv708 kX7Pg51Y7Nh3iqRbp6dhrfFbaA3TJ3R8Rb9nVyfJLZecvUl0bJHGYBXkRzJVjKj5v5HH Zbkc6kyraTGUkdCES/fmKgTJn1LRhnGh6W3iEfu0BhuCxJ0kJ3Uvjzdzvzz5pKQW0pEg eS5qzn0LFnpKOg12n0MQTWp6TqBUt/nW6ZwrimOhfwkUNICn+QXfDNswlClYj/2LWL6e 6OJQ== X-Forwarded-Encrypted: i=1; AJvYcCVNBH9EAq8Z0zNHxb0bl7ZJItNCuZZh4l31RoG7WE9BxWtTvwtHflql8EHuc1op54QiH+B0pw11CAyRkVw=@vger.kernel.org X-Gm-Message-State: AOJu0YzCNRIplAau3l7v+6ClcsOciKuLPoJsxLBxnjaxrOn1JtZPmdu2 N3QLawFEGsnyc2FFJyh4IzEKDl/m8tizahr5hKXSsvrDI57lQIyYPyln1EGtHq48cdBkDtY4L3s f3n2QJPwqDykVAiXaPRjZ5hmnFEwuUQ== X-Received: from wmoo8-n1.prod.google.com ([2002:a05:600d:108:10b0:485:4553:1a97]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6383:b0:485:4526:ee06 with SMTP id 5b1f17b1804b1-4854526fc21mr24095095e9.11.1773146992719; Tue, 10 Mar 2026 05:49:52 -0700 (PDT) Date: Tue, 10 Mar 2026 12:49:28 +0000 In-Reply-To: <20260310124933.830025-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260310124933.830025-1-sebastianene@google.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260310124933.830025-10-sebastianene@google.com> Subject: [PATCH 09/14] KVM: arm64: Trap & emulate the ITS VMAPP command From: Sebastian Ene To: alexandru.elisei@arm.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com Cc: catalin.marinas@arm.com, dbrazdil@google.com, joey.gouly@arm.com, kees@kernel.org, mark.rutland@arm.com, maz@kernel.org, oupton@kernel.org, perlarsen@google.com, qperret@google.com, rananta@google.com, sebastianene@google.com, smostafa@google.com, suzuki.poulose@arm.com, tabba@google.com, tglx@kernel.org, vdonnefort@google.com, bgrzesik@google.com, will@kernel.org, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Parse the VMAPP command and extract the virtual pending table address and the size of the table. When the command has the valid bit set, share the memory that holds this table with the hypervisor and track it in an array. Unshare this from the hypervisor when the valid bit is cleared. Check if we need to do any shadow table updates in case the vPE table is configured with an indirect layout. Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/its_emulate.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arch/arm64/kvm/hyp/nvhe/its_emulate.c b/arch/arm64/kvm/hyp/nvh= e/its_emulate.c index 722fe80dc2e5..7049d307a236 100644 --- a/arch/arm64/kvm/hyp/nvhe/its_emulate.c +++ b/arch/arm64/kvm/hyp/nvhe/its_emulate.c @@ -178,6 +178,26 @@ static int process_its_mapd(struct its_priv_state *its= , struct its_cmd_block *cm return track_pfn(its, base_pfn, num_pages, remove); } =20 +static int process_its_vmapp(struct its_priv_state *its, struct its_cmd_bl= ock *cmd) +{ + bool remove =3D !(cmd->raw_cmd[2] & BIT(63)); + phys_addr_t vpt_addr =3D cmd->raw_cmd[3] & GENMASK(51, 16); + u8 vpt_size =3D cmd->raw_cmd[3] & GENMASK(4, 0); + u32 vpe_id =3D (cmd->raw_cmd[1] & GENMASK(47, 32)) >> 32; + int num_pages; + u64 base_pfn; + int ret; + + base_pfn =3D hyp_phys_to_pfn(vpt_addr); + num_pages =3D ALIGN(BIT((vpt_size + 1) >> 3), SZ_64K); + + ret =3D check_table_update(its, vpe_id, GITS_BASER_TYPE_VCPU); + if (ret) + return ret; + + return track_pfn(its, base_pfn, num_pages, remove); +} + static int parse_its_cmdq(struct its_priv_state *its, int offset, ssize_t = len) { struct its_cmd_block *cmd =3D its->cmd_hyp_base + offset; @@ -191,6 +211,10 @@ static int parse_its_cmdq(struct its_priv_state *its, = int offset, ssize_t len) case GITS_CMD_MAPD: ret =3D process_its_mapd(its, cmd); break; + + case GITS_CMD_VMAPP: + ret =3D process_its_vmapp(its, cmd); + break; } =20 cmd++; --=20 2.53.0.473.g4a7958ca14-goog