From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436163; cv=none; d=zohomail.com; s=zohoarc; b=KspdVZdEBWJ8UpSbr5DNZNYy9kYw4eSr4WONh6VB+tpSGZpWiaDOvPwdeQL1dj06uGjsVv9HJaO1IIfW2LNC0bH3Uio+AyVcbaBJmqT0DwBVvW+Nr6Eq+yu2zl+IIajcSTddyDs7POXLRz/VxPK+kHZdy3ZAnRs4RsbBKW6Myvc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436163; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+fMggmtg/uZNHz3nywgemPAlDNuqwqAYkYrWDswgN9E=; b=FElMQJFJJFNiEf+QsIpoybgeVTItA9UNBJt5x9H7SNP9OyKKg7bclVnGTNoIhjUjYu5MCORApxCNGEduHap5PG0bzfIVD3H/LLMPN8dfWj5UkwrsHC4/AV3ulfixejrpTkatW9h1v+B99VSgJnZ7YD5N0ceDG0gP5JprruiFfzM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436162681434.3020548441626; Wed, 14 Jan 2026 16:16:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1P-0005xY-3t; Wed, 14 Jan 2026 19:15:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1O-0005x8-46 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:30 -0500 Received: from p-west3-cluster4-host3-snip4-10.eps.apple.com ([57.103.74.161] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1M-0001oU-Lr for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:29 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 31B7818000E8; Thu, 15 Jan 2026 00:15:24 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 504CD180042D; Thu, 15 Jan 2026 00:15:18 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=+fMggmtg/uZNHz3nywgemPAlDNuqwqAYkYrWDswgN9E=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=I61uW1Nm2QuzauSvKY214qwLyGuL22ZUatnUrBCFRDoinpg05YPDfib4Cl5XlOKCyQhlsLFdLlWH+B/CS51Oyk47Ta+5UXX1hntX2okMgznx1lZoHc8uXlO/tiBQN82CsR0eKdX7qNeI694bDdfzOa9E0ufg3lV7MfB0oNGHMMjA9uf1SX2fsp51hXKHTiMRp18CcO5yaVbgBTuIkTkDCrij112MPSTNvkEC9juGaXLQLfEWP3/HR8rSaU+cbaZvATqAi4GO0vVTY7b7qAELrJKaU2/fi6Yi1nxqM4Vu355168sT7rFpRTXhbEqw1wCm4rYTRJLWaHxdpCM7bUmLtg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Sebastian Ott , Pierrick Bouvier Subject: [PATCH v15 01/26] target/arm/kvm: add constants for new PSCI versions Date: Thu, 15 Jan 2026 01:14:40 +0100 Message-ID: <20260115001505.57237-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 4iZAi-0Bzmj7suMPTLlg_VLQCCdr-urK X-Proofpoint-ORIG-GUID: 4iZAi-0Bzmj7suMPTLlg_VLQCCdr-urK X-Authority-Info: v=2.4 cv=N4wk1m9B c=1 sm=1 tr=0 ts=6968319e cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=KKAkSRfTAAAA:8 a=DAm2dGrMCKCYv6Tpj9cA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX+OeMywoMADm/ TMT3e5Cea4Fyao7PuTBAlkuQQXKuj8nKbQH2VsK8FTkDlscHJFXV/+yt2EjCmb32HICDTksS/Xe i6o25tNjNGFt1vwPPdS71W4Aw8lQNcEj/Dae/rPyB4WjdGikr2rifCOyrhgACQM4HCjhRXNZxcu D9mkbwJBkh6EfmKv079gu509LkVUzXLWHkzREpjFZtI0esQz1bHT4uDm0PW88vqw3REblcbuEW3 D7diRSru/8VtTFv3IY6VICqUCdWhYxRwDfGTogK9skkyzbfQ3Zhskzmm7gFdzcvi5dHvCpwQvib JR5Nf2j/Tyt3Vqqp523 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 clxscore=1030 adultscore=0 suspectscore=0 mlxlogscore=934 malwarescore=0 phishscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABi3egtGi9ijrMiKQjNYbO59Djg4BRJ7wVr36qyArGMFiK/vT1iMuwa61K0um0ALcns3Orshn/UHAw8A0it7KmkfpC6MN89aTCDwHjLO7j2vJrj01OqASHTJUyNT96lLSpwFEeUp0d+iLP7xi1DBP8xrcZxDo1kr5ta3BdRz8cen2XgD8AjiWZFNZFzsvBMo9TVIHnDdlV9mYrwqpW666xWFwDLYnyrT/9YfnNKKNRyEbiHHfGh0Y1qty7BaNXK3U0qDmh++jYraTXZbkkNTTwlyZWhXb99uIddaAAe/duTsbBPanRBJnsXnGj4s3rf4K1RCwxkAX6s8RtTu6ehFqQnySmVsX7p+Sums3Llhgj5oQhR/6j+XcQS1urvJCfAwcbNzDorKGvDohB2g3KtJ7N86RV3CNSdrlHVodSbygSxxc57kN5LKqbqJ0CWCasOXw1lyTvRZzQ2B99a4YXjqT0Kh7f8l1hSDtyxAUo3WT0XSkrG0/sVcixopU4M0idufuaCwdDlMCrnXGbehZQW6sgXTRA92AGaHWJoCyG/d9bcWiwwWEeeJcKBMzCKotX7MzaRVThpHnXNCN8qs5z44qYbDrApoMyXWUhZF7FQoo34sNgjoKs2fTxs15qKf1ufyiu5UeR8NLKcAA5xRf6+wv7c+MS+H4gKklq8/dlJznWPaVAzhygoDkGMaWTWSZ0QMEntkVMJe6MHjm+PsJTzOo0l1wz3yfwYk6dlC+dU2lNeUb/2FC8yG086cUWB5GiT2b18R1UvMhUhRAwVs8xni14CT3gHfrd+OClIDEj3crl82XnghLDk17S8px9Bxps5SDYlNVvWFzWljAdAC+xu9kA8JuiA2yotU7RkVZxsSI2KyE+13VTb1EtuHZvI2mrzKr9/ZABFZ2vaID4NsDWBmTtFrEJpMo//11lYnaTeP6C6ZkWaupHY4ZaevJtcyaugujCOULE Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.161; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436167748158500 Content-Type: text/plain; charset="utf-8" From: Sebastian Ott Add constants for PSCI version 1_2 and 1_3. Signed-off-by: Sebastian Ott Reviewed-by: Pierrick Bouvier --- target/arm/kvm-consts.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/arm/kvm-consts.h b/target/arm/kvm-consts.h index 54ae5da7ce..9fba3e886d 100644 --- a/target/arm/kvm-consts.h +++ b/target/arm/kvm-consts.h @@ -97,6 +97,8 @@ MISMATCH_CHECK(QEMU_PSCI_1_0_FN_PSCI_FEATURES, PSCI_1_0_F= N_PSCI_FEATURES); #define QEMU_PSCI_VERSION_0_2 0x00002 #define QEMU_PSCI_VERSION_1_0 0x10000 #define QEMU_PSCI_VERSION_1_1 0x10001 +#define QEMU_PSCI_VERSION_1_2 0x10002 +#define QEMU_PSCI_VERSION_1_3 0x10003 =20 MISMATCH_CHECK(QEMU_PSCI_0_2_RET_TOS_MIGRATION_NOT_REQUIRED, PSCI_0_2_TOS_= MP); /* We don't bother to check every possible version value */ --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436163; cv=none; d=zohomail.com; s=zohoarc; b=TMchzYuOs84cCfgcKyEcGJ6mqPSZzLZGa6GN+hDsKMWA6SKymVanIvlz5QaBGgf324OwCUU2IndyZ9LFwuIZ0aSI92RfefFog7Jct6nCzLasOxNTuCSBtsENLCWK5BNZCoD0uUHPTN8MDHM+LwcVwiSQZuSn3O1cQXBJLBYhvQ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436163; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ksqwamjc+5RKV9piY5vkALtcG0RUP+bOT4m8O729l+Y=; b=GmAH7h6D7I9Y6qx/ZK9zieGVRmVDhbZ4e0g8rFDVoSUEvwxB1sq/+IMRLB9tGV2CYJ0ZA2/CUw/xyN0n4jMFuZWQlH5eBzxmZ60kRa0KKeppXstUFYSFwzexh5ZDoC+RXhhVUnqp/ef1uNgEeMLVZcOuYWTkzUv/wu2q0tvyRDM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436162977435.4181423931144; Wed, 14 Jan 2026 16:16:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1U-0005yq-Ni; Wed, 14 Jan 2026 19:15:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1S-0005y9-Uk for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:34 -0500 Received: from p-west3-cluster4-host8-snip4-3.eps.apple.com ([57.103.74.144] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1R-0001pN-Ig for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:34 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 2CD681800452; Thu, 15 Jan 2026 00:15:28 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id C9ADC1800430; Thu, 15 Jan 2026 00:15:23 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ksqwamjc+5RKV9piY5vkALtcG0RUP+bOT4m8O729l+Y=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=gTMP1R6bC6EeMD/YW0hlgTez9KCB4vhilrRfPgr6DPjfDdCuFwSu39hmlcZqLfrA28KEMVkk928vGQyjzlgMfGN0f2qNiC4e23fUPJgpL8Zh58qJ68Guu0seNt9sXG4TpHpfhgS9qf+o9KYaF1eeDCfAFkvF4o4MtZfcqcQXaAON+f7Z+Ajbqo/6jvaO4Kx63nZjVrNmPt+Cf0pFiM5+E5NYxKY/1UKBfvBAW/kddEK5ZAdLxsjrmlww59HOphyW9xg3j+wkGC467L+ViVv5msV5O1pPRx2tIRYzGbdqECrZHECSvCDX9ybTB08NGDizZ1Gtp3ExUHKAAYO6uF+JFA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 02/26] accel/system: Introduce hwaccel_enabled() helper Date: Thu, 15 Jan 2026 01:14:41 +0100 Message-ID: <20260115001505.57237-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX305nvJjifuEG jJ1RLxyT0Qbswawbypa4CL0Pq6idzL3MRxqmOyO9a1thPUQx+Nmfjpmp7mAj375CbkAsO3YymLC PhXGTAdJk1+fU5sbdCBaVyFec49lsx6hXOVUXMyfV8+2gY7aRtznXyocffI1ivUUZtBaK+MvmDi vBi8dSi0UwJKczjQTO/q8oe+jOXYo/alenu8glb51gRRS9GYHF2kwLkybsSLTr1W+0DAaT5QhzR Bj4jZ0scDXN7pmvUVZR7gjK4vcmRr5xu0cFkRbjDoWO2zcebPgKerytcbmOmWfWULU35FMkgwka DV9ZmTe60rGonYt2tUV X-Authority-Info: v=2.4 cv=f4lFxeyM c=1 sm=1 tr=0 ts=696831a3 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=zYwLhoXY7WJC0OmO1EgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: emQ7N1tHdKfoVbvSo-3wZgKw4Z5LY6tC X-Proofpoint-ORIG-GUID: emQ7N1tHdKfoVbvSo-3wZgKw4Z5LY6tC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1030 adultscore=0 bulkscore=0 phishscore=0 mlxscore=0 malwarescore=0 spamscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABvJT1B6xahH4fjaGiOQgugX5HwZt56FsFT2QkbKcig+15KJukNWRK+32AJ7E8to2S4wRfShcuMUdS1GpKfir+LEOGzB/tDxP3GVLME7y7Q2nWZJ8yxctHJis+76Mm/rCAg8iY7hcRh+I2Ixq1UKYZBaY5RoO78wlER5wy5iTGAytmtN/x1aYfkOAfgXNLmGwChpC5LLre8TQBXPj8mZyYMPNHW0y5y0241PULlBTa2C3aF1clcJXmaXDCfBzz65cnKtj5gTYeKgzQwgqOFBRXP75Ts8Ng6sM2uK+bdk3BxMoacBG1VkFM3LMFkIS8oJ0guVf+ZKiU7z1EufM/reCHwltWgJlKeOX3Ggwr2mm1lqhmcnXR6gMjnwzlKwiWvoKKf9p08WRvR141DhZBSYOEzZqFwfypg+qzT+pWKVfuljwEutNU9qOmmIHp6ABRMU12UmVG4yA+UfK9m2e41KLI/gEruJbiSRzUiMPsmiHimEwyLIsBT9sMNqA7NbJYbbiJeZVVnWR6yWzQca1mGEhU7QzFLiEkZZynTX+z93c+gueoftC2A4ahGzPMtZiR4IwP+BSQztyd2uTGdo/yMD1poj34pwk/5VFTISA0S0ochwKvzPOXpZxfnwX3ekjloELNAJWAQOtg9LGxbjeHS7M+ORhx13xyG6YTQD3zCyHNoVUOWHWNMKuO2/vLB26cTpSj8pSpd1pfQET5J54kRfWi+wOF1g7Rtg1K2dQ6CgG267YNgi9sdGyvB4N1x7bT4H2DciGj/PdJ9nFv9r6OoKBxQz63NOypD04hB/FZzuF2/1pKTFsYBmi2aPxtELihiYUs+ZuS2uf2pUs+lk+A+r8EV9NaTiwBSevKZJ2yuYhwnTIE8IFjSV6XPhTpk/rj5Xh8QVgiA6xb0TVTV/WWol+NUPtxC6d3qZ24f1c2Y77xAow+6jMlCqP7Vls27JwldwFefi3aAwMwcaTEkn4= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.144; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436167727158500 From: Philippe Mathieu-Daud=C3=A9 hwaccel_enabled() return whether any hardware accelerator is enabled. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- include/system/hw_accel.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/system/hw_accel.h b/include/system/hw_accel.h index 55497edc29..628a50e066 100644 --- a/include/system/hw_accel.h +++ b/include/system/hw_accel.h @@ -40,4 +40,17 @@ void cpu_synchronize_pre_loadvm(CPUState *cpu); void cpu_synchronize_post_reset(CPUState *cpu); void cpu_synchronize_post_init(CPUState *cpu); =20 +/** + * hwaccel_enabled: + * + * Returns: %true if a hardware accelerator is enabled, %false otherwise. + */ +static inline bool hwaccel_enabled(void) +{ + return hvf_enabled() + || kvm_enabled() + || nvmm_enabled() + || whpx_enabled(); +} + #endif /* QEMU_HW_ACCEL_H */ --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436231; cv=none; d=zohomail.com; s=zohoarc; b=BZuTvVrYmuTn7EVhTHSrHNyNZ+zHaRS4D5zYr/T7iQaBk6BMQMUhIjVwk7iUU/q/Ntr+7IHZt8+XyRdDDpPg7AzfZoGEyvTR4ipWuvAFTB6k291xXCnsGfYp1ND+BzBWwDbDEwcWRRTZweVOU8A0cWY/g5DHmVE87veN8oaGkyc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436231; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lE935EhSo6eiiRGBTf1TCzdO8HBh375WWDyS664DB/c=; b=d8iTvjwi8A+K0f2XPl9/C3P3jPXVk01xFU5rInakl+aHqqI1Zc4SRkz+UBzwPEV21N8y5HlkJ6kS/bwM+fuHcZjApVg9QNXv1Ifedrd5MJTKDtw0qU9LvMHu3Qnc6zEEyBQBeBqCBNgriMXJfIng29O5IAqqMuw4vnrKAg7d2a8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436231003574.5382527042627; Wed, 14 Jan 2026 16:17:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1b-0005zd-AV; Wed, 14 Jan 2026 19:15:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1Y-0005zH-03 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:40 -0500 Received: from p-west3-cluster4-host3-snip4-2.eps.apple.com ([57.103.74.153] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1W-0001qN-7j for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:39 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 89BDD1800430; Thu, 15 Jan 2026 00:15:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id D11BB180043F; Thu, 15 Jan 2026 00:15:28 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=lE935EhSo6eiiRGBTf1TCzdO8HBh375WWDyS664DB/c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=PKsqTqF93OhmLUVl6Llt0wG9juNzJ+dGlemqPQbRDBvGXtDBmrylfIzWskhQ74F3HeYGsWJNM4G0DVUqv3bdaLYMSQ+bZuiL7eUYTD+5baiZT8yo2BK+lCS0VWtfVIzwjhTGao7+LhBQUfIA8k2hRE6jgfgPlR4enxC6zF0Tq7zrXK/1h7vdPC6IGluIlMjNEuh3QaJQt2DX+9465U+ZeUIqMrkT/f4z8nrQLtBBy19YPp5BLHpU6y1+wpGidNa2/ycfJIYadvM+nYwmvdFDSWWV0yuMk5Xut/O1UOguMtLWmqZhxqP+N+ELp/Kran4vTKbGqYz9EB8c7min1OfnxQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 03/26] qtest: hw/arm: virt: skip ACPI test for ITS off Date: Thu, 15 Jan 2026 01:14:42 +0100 Message-ID: <20260115001505.57237-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 4PGoAUdL6o-M8ESRKjClYnSUM_lO1_Qq X-Proofpoint-GUID: 4PGoAUdL6o-M8ESRKjClYnSUM_lO1_Qq X-Authority-Info: v=2.4 cv=Pb3yRyhd c=1 sm=1 tr=0 ts=696831a8 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=1t8nasy7xzbR8br5Zw8A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX9OFGU9z3bbKy /NisbjKwIBoNamGDWcJel6FepV/Rc3ubPi99FLczKs2oR8iP9zYf7cJTqXOAV2GL/VRlabe52rp V+f/+1pAOgWSN1HdViCI3nhhevE1+rMSyOSPkacStdPZ9c4N7CqVjte0AtTZG5mVbM34vE7+1MO dQWiu3ZmeJK92/ADKL4dkSlgU4UVZgDA9gBGtUV4MttpYDM7fY8yA5yTRFxE53/i1MLYZ+nOU/5 aVCw4s4xyxvRUvOyKvBpqXzlAYvCNTCIyGDUN5iFGPdyxy70SlZjfJetLFsWgcQgz0g2Ksm6y9A mfQHSdBDtTQTpdFaFBb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=999 phishscore=0 suspectscore=0 bulkscore=0 mlxscore=0 adultscore=0 spamscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABZuPawWeAa4pcqMXzKr5KnJA9lghI7UPT3h70nxoot3flUz4Dpd62JmPH2l2d2Y4/q01T3F2AwYJuOfUl+P93956lCcETZ+nkl4/QW2NgRRtn7l8W+Mn2aBhEUt6KIQw0/im3QsE1ZsRz4lvQ7iX7/ei2bLp2fbudUfEPGTHm3W8CBKlbCdstMsXiDBOBF+XteFs1eB83ZsrSQNYNEjkLIq45PRGZPfmO7606O6wVA0RM7yqpo2fno4UYYxaTReUHuDS/vKztvVnLeWSMMy6hYy9K2mlgVa8AIr7ltljFSCtcqF4Af7wV2JgolYW2fyjK6/FU2QXZ5kSW2Sts6ADZXuK55QC0rm3bVAJHfmD9LX/pm7CtnuFUzVtnIB3J6tQplXa0nQ8TmJqdvwYyFmFcTM5jMV2vzPMDwJqsE2gEykXr19mBYVkpu1IX03yxiDXHDz5DTG7GqSW6D5qGoZDYiNLAnbIDdviX0+KHOU99hX/aVLM433rc2ZHlBp2ivkAo4m2TKLA44z/dHmCm3coEQwEYF2s2SdoMGnug1bVgo43Shzax6900F24H61PEoqQATBdG8nejy5F1mpJJvlb1AXVc3kW3SDPX+iKZjenOSv0pniWjoGy4ef/L4Jei2nfBn63wUOhRTtP9xPCS3WTqowtuQ32P7Z19KyP+uO3FFedS/16k483Yvujj4MSXgD8SvekCmnW7+OaSZdZ50MkgZouzkDiyzSjh+aUSQ0onMdlcsoay5/MFkXoXjGkb18vHo3Q2+iT08iSh+PPiCnYOcnB+fdjmFYGk8tvdS/DFKsH7NH8j2bes+3TMYjjxpU0ekEVcKeK8gU1yf4UQ/Mlqyyek45+hDuyQJ9M9WXpy2iTqLqA06dJgHwvDfjw/x84/fwug3PbMT4cyqC6t1WcfO9ZtoJ3yZ/V3tvRhgvBsImKaVDW7A7HcnhP5Om3/bzRU Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.153; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436232702158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- tests/qtest/bios-tables-test-allowed-diff.h | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios= -tables-test-allowed-diff.h index dfb8523c8b..bfc4d60124 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,2 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/aarch64/virt/APIC.its_off", --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436182; cv=none; d=zohomail.com; s=zohoarc; b=Augsc4p3dt7PppceKs8CbBHQskabcjqAHiINHY3WHbiXQm+5low24gwf0F/lCTwiZw+sw1f/dxmuMFxO+DuKjFqi/O9kfeZtKX4No/ua5qN2EpAEYosxM0MBMng63s+lsnwiKlm8MhBTlBCtjf4x/aYA3ZZx9HdFs3pVmhzctHY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436182; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pnYhzV+5jiiMNx1pcU6+RM5m8iDu5NPUOmI5LVpVt6Q=; b=f1qrZwhc/z5VKUnbw8DaN8J+MhpgzSE+IXoMCXyuMWMeHy5iB53dDIcQ7153JT2e6N71WPijkk1iJwz0LYV8DIRpyJGsqHhY9MIjTNEzweRzC/YPfiTDfU/+y4YXHY7o7yKvmeRa4l3E+TwuzSFCwffrlHjupi+t/W4AJQXqJbo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176843618211664.31756806308249; Wed, 14 Jan 2026 16:16:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1g-00060d-H6; Wed, 14 Jan 2026 19:15:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1d-00060D-B0 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:46 -0500 Received: from p-west3-cluster4-host1-snip4-10.eps.apple.com ([57.103.74.181] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1b-0001rg-Og for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:45 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id C78C6180042D; Thu, 15 Jan 2026 00:15:39 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 598B81800412; Thu, 15 Jan 2026 00:15:34 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=pnYhzV+5jiiMNx1pcU6+RM5m8iDu5NPUOmI5LVpVt6Q=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Yx5rxy7dvM3NoIosN9RuxzM4xRCjRbqi5NxiUaaEU3uyOp0XZzz4pxrrp8jkFMxoSDVAAzRnqHlzRX76/aZLp/RwYofS5dNhS9IUOKmUfUa/cI1JBGkKatw2qEv3Rcq624Ekvp5u6PYh6KUARPRMqpMF5g/MO0pP4Q9Bv8vSon57L2UHkM8kASAWtBes+TYRtnwG+gbHU+gwnZXvraeeWLCIPUelBYSE5a2egZUG3iQp9ObbnHOR8B+539pfaLiKp0BdlaHrPtIQTkeAJYZvA0D2jnIZeCQ7TmO5v/Jj5nVzvfOYK1QGZszESB4mP1y0rKQthfJp6gllTbgy73FH5w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 04/26] hw/arm: virt: add GICv2m for the case when ITS is not available Date: Thu, 15 Jan 2026 01:14:43 +0100 Message-ID: <20260115001505.57237-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: wzfZFFoBUDWS6zr6qgtbJ-sUHaJRB_iE X-Authority-Info: v=2.4 cv=VbD6/Vp9 c=1 sm=1 tr=0 ts=696831ae cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=8tVNtdTugjW4QW2w:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GHBMd-oUYIP45a8agUkA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: wzfZFFoBUDWS6zr6qgtbJ-sUHaJRB_iE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXy7xoeZt48mzl YpaEz3Tyet3wIO1W5px9u7DauBwPyFwWBXwfER97W4EPZpehZ2sfK8q2qPfC9DTTCxxSDsJFeAi a9wEP/UNWosGtrW4dmNUlN1oFh+T42MIMkK2MY4noXur76HHdySVJRv/ZRu+aBtkUfn/GPJX8iM x9ccAb1GSg6krAu2zAMJT9l7DXb9xDH/UKBNb9WMnWJVQ58C4kx5PlXVkqjCcmQrpp89n6rNJjN O8yiTKIGUSoDdQaFjevt8PQoCEB4BpwVniW340yyHx5suNzR/2cZNuCU/z+bLhGiCSiGLyrc2qE E6xd5Krvjd/uYkMd5Zl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 mlxscore=0 clxscore=1030 malwarescore=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABbo6OrdgDDk0fKlqTDIHMkox/xMytvL1RER4qqnei5bAj9wfcr0eXIz9yFpkZ03yu6biIqXoh3O9N1s4mtozXpA6k/T03UGuZl7ANi5o7lZ3ApAmMNIVlyQw20vfGmgSqAYsa0rOxm5lKe5USxhpRL7KZ//Cv5nBhOl6FJ+8luAQDqkXNBg6wsIRmcFwOXwUkHq0gCKibqQERj9DKSNDJRY9j1X2tWfi1fMYzKwUrRzlyILM12TFTFu3IVMMSU4Vvk4wHwDlOUUL/0fHTdMDS+Om8a0n3+4WYkokNIBJCUHPgpc6ldI+n+S/LHpPq8SSh5MsB8lszOsI0RNOr5NbVcVArTMCGwvsHUpdTjvLaGwdh+UOAIcdvQI7mg/OK9q9MahIBfVmDJhZe84zrD9HPlp0Zm80SbOM1j2KBnVL5vteKZm6uj9gT/ub+2ux9yX7ItiE7WlkGG5PmSxg5llPHpXNYcWJZuH7Qu/OTlQhl1i3wIJKzj/7u78yn1Mpte/9FuptgycLAYWWyH2sfZQr6W1j15akbRH4sfpvZUJwLRttB+D2rdJ+2Hp//VFd+ZmK2jlp/FBKwYsz5viL9PV2oIkvNCk26MFdzAvr1hiMh+GgZCra8mV0MkDjQTz7D0/05jDal4w0DVnyOSi/AntcLk2wXEgBtSdpivU8TjfGqntAjhwNp4SnHw8EZ13fjb6URTV9Ao9Lw24w7wFPwQ+g6B3HjzEEty9gj0MIYyrVM5VLH8ZEDMhNRrmPNKtvkwn9lkEwMR4pORTOJ98BD4AMysLCIaFe+SbOS3jZqJ+0OusKCWLWfe7VPrAKauqdT7iHtE9Ya6nd5YrJQ6MbsDiUC40ri6F+0jjRQ30JVWPY5uRbECgQJ+YQWDrGcwp5uF3MLJsm0ypqgjL7tfbJM+70OvV8SsAcc+E3vZLfTb2bBygh8GDxJNM626jIK9mRsocJj4E/tpA== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.181; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436184209158500 Content-Type: text/plain; charset="utf-8" On Hypervisor.framework for macOS and WHPX for Windows, the provided enviro= nment is a GICv3 without ITS. As such, support a GICv3 w/ GICv2m for that scenario. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 5 ++++- hw/arm/virt.c | 8 ++++++++ include/hw/arm/virt.h | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 03b4342574..40ea6b6dd5 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -960,7 +960,10 @@ build_madt(GArray *table_data, BIOSLinker *linker, Vir= tMachineState *vms) build_append_int_noprefix(table_data, memmap[VIRT_GIC_ITS].bas= e, 8); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ } - } else { + } + + if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) + && !vms->no_gicv3_with_gicv2m) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 /* 5.2.12.16 GIC MSI Frame Structure */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9d0568a7d5..4fad34e108 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -959,6 +959,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) =20 if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) { create_its(vms); + } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { + create_v2m(vms); } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { create_v2m(vms); } @@ -2444,6 +2446,8 @@ static void machvirt_init(MachineState *machine) vms->ns_el2_virt_timer_irq =3D ns_el2_virt_timer_present() && !vmc->no_ns_el2_virt_timer_irq; =20 + vms->no_gicv3_with_gicv2m =3D vmc->no_gicv3_with_gicv2m; + fdt_add_timer_nodes(vms); fdt_add_cpu_nodes(vms); =20 @@ -3488,6 +3492,7 @@ static void virt_instance_init(Object *obj) vms->its =3D true; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; + vms->no_gicv3_with_gicv2m =3D false; =20 /* Default disallows iommu instantiation */ vms->iommu =3D VIRT_IOMMU_NONE; @@ -3540,7 +3545,10 @@ DEFINE_VIRT_MACHINE_AS_LATEST(11, 0) =20 static void virt_machine_10_2_options(MachineClass *mc) { + VirtMachineClass *vmc =3D VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); + virt_machine_11_0_options(mc); + vmc->no_gicv3_with_gicv2m =3D true; compat_props_add(mc->compat_props, hw_compat_10_2, hw_compat_10_2_len); } DEFINE_VIRT_MACHINE(10, 2) diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 8694aaa4e2..c5bc47ee88 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -130,6 +130,7 @@ struct VirtMachineClass { bool no_cpu_topology; bool no_tcg_lpa2; bool no_ns_el2_virt_timer_irq; + bool no_gicv3_with_gicv2m; bool no_nested_smmu; }; =20 @@ -178,6 +179,7 @@ struct VirtMachineState { char *oem_id; char *oem_table_id; bool ns_el2_virt_timer_irq; + bool no_gicv3_with_gicv2m; CXLState cxl_devices_state; bool legacy_smmuv3_present; }; --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436239; cv=none; d=zohomail.com; s=zohoarc; b=KTuTKynbBSBdPloyzurYatx0XSJeMPUXmjDmJsiaTBhMUQTJoMdDeYCMFCkzuPZ27s3qoNrHfE8G6akkVnLhr0RtB6adueSko/9vcC0lP+049MbJ/wzE493pf/AMjtkRxmLjeiEsrhAVHwg2H388Pprk3HSnOZpVpkL43Jqsohw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436239; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hV2Yybxjg6na+16RP+CDNexXZ22gE/2/GrNlo4/7dxE=; b=KoiO9jr/MfyotCJGUBnKX6qJbmAdqjrFTNqKC9uTJS1kv08d2iSZ2ehK7hcBbcPE+oatsReIu16eASTuZ/4odA1FqkeFpxSOQE9zl9Q1nMYV6p6kOQQst2XFZgpBceP/9zitqQJiZ5gC7korApQ1/2EFxrYHTjCWaZLg7bGL0Og= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436239146702.7269655322312; Wed, 14 Jan 2026 16:17:19 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1l-00061y-Gw; Wed, 14 Jan 2026 19:15:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1j-00061C-6u for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:51 -0500 Received: from p-west3-cluster4-host3-snip4-8.eps.apple.com ([57.103.74.159] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1h-0001sX-Mb for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:50 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 39A321800457; Thu, 15 Jan 2026 00:15:45 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id A4AE21800429; Thu, 15 Jan 2026 00:15:39 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hV2Yybxjg6na+16RP+CDNexXZ22gE/2/GrNlo4/7dxE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=NHBZ8uA8xLrbwLmcf6UJkzn+1spZXoOl5Wgbnuh3v2ll1KxOJFDqk6w9yEBmxZnoVFX5Efdoa3v4hylyyGLDaXjB5zVDLmIVqkE3R86BX6qtuinWNrZl1b7zvQBQTVLzyL1zqL9czUHTnwb26kwAIm7raZTeLRYfVxVr5U8IMV5xluVyI0bJ/lKQvfVgEiDM9ap63prsqal2OXJfhm5nM1vN8lfYrvguCRHqBNFKmpeYDchIm3AAKEzOwdtwppBiNRNvsiqs9Z3ZVmJHDOPWUvRYejmLZgTiKl2JffwDmVBbc5rKe8JRugs6P7EMo9KVZvXwiy5s57w+OAaiaXbuOA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 05/26] tests: data: update AArch64 ACPI tables Date: Thu, 15 Jan 2026 01:14:44 +0100 Message-ID: <20260115001505.57237-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: D9PAkjc3qTxiQGKM1DbUxhhZyjQ7nG06 X-Authority-Info: v=2.4 cv=aNH9aL9m c=1 sm=1 tr=0 ts=696831b3 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=CvHhVyPyXxbOnLnphYAA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXxdZ7H4LYbSX3 II6D8Za1eC9JNXoCjKnm9JIBTYv7ByMsbMLnO6Iid/KVbNWIzdtFG7WOB8fnOphMgXaOozjaAIb fVwrRMhFJbQNO5da+ocdCoOGW5haN2QSzCF4/7BZgst+bRe4v1cm4RJGTgTrhusnK7Qs59GWSvO gfFNDFQVYngUhnes8EfAyCceVefB+rGyE94xXucDXTrun+fsmLXkHxjOuF/OIwrcpoecYVom0/P v4JclZMFJsLxV6VlNiUlD1M7Mn8twG/ZdC5lGzRTE4PzMRbxEhvk+G+fwDiE++JZvoqnzYBgZXH DseTMKQ3GGoV/T1reRs X-Proofpoint-ORIG-GUID: D9PAkjc3qTxiQGKM1DbUxhhZyjQ7nG06 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 adultscore=0 bulkscore=0 clxscore=1030 spamscore=0 suspectscore=0 malwarescore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABI8VYlyxJxxtAMw1tFGJKH1yNEqdaXwRQh6NK6JkU8kX66SGsmCfWa2a8IpLIrDblszjxn164N1+Nf52QOdZvyAJxjvUWzJTZtXFUUkinK3j9UyID1UCqQQfUIsxh9AtGZpieBKCmlonG78pTsgtsfindKwQKhgdjS851Bg50rFIQyVfDtxwAMfBWyyzDXPi50/kKurkjzr+DtM3IQg/d/v8go55Lc9cgACQX4bO2qjA6wH9oIELX9KcnPOYzfoFkQsWnCpduckDmdX0Y6LqhK+WnOn81u604Eepph3MQ/iCz9QbUG4IhLTQKK9sdrGgdcKHRQkMOuYRSwJ4C+Qij8PIuWZNlSlltFPuAnesHZEZ0cMFnWEfLcLZI3xyyCAgauFTGqYT1wyyCYRIOn01HM6ZjQqx3Hbd+6xFKGoTstjoz2/W+V/1L+CvCUV+Qi6EZBkKiFW95U9cdXdhXr3dsNs1hvdknof5ZtqAUZzpk3VcOFtABBmc1SVNfyHrrM5zV0v8/DS3GzNFM4VWD470YIk35TrUq7IaoI91T6UmdDjzNpjTNXUx8mXQp0gVZzDVek9xG5FaK+PjCbvMJPE/NtbOP/AswTS9WygOK5QNxRKfqp+rK9rWgewHFkrKsZCYM3YFrHp4Uv8vxkauJJmL/e8QSoI/qsUBuQZ3B3dV3OzLVAuuzlFh7Kls/zj0Z+21BUlkkNioO+iAo5wUI1AfF4k5/c2F2F5XV7M8pgxJmS7cNN7GtHJGWnGc51P4t7wCvYEeRR4vBUczFO/halvNhJKucsHsXT16vX/EaM55S3hhLYQQOa4EmT9ZSVex4uxMksErYFvH8IZxnj4dVR6O7KKItBkq2PiokakgF9UGeRbFEq8O6HeHFVe72PK/WAIYyFlbn7GNtWgTp8K0oU18LUs8TeVWgNUE9vn1pz9vspvdhh9XPlImz5fT8Empl2kkMJMjeMs4Vlw== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.159; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436240074158500 Content-Type: text/plain; charset="utf-8" After the previous commit introducing GICv3 + GICv2m configurations, update the AArch64 ACPI table for the its=3Doff case. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- tests/data/acpi/aarch64/virt/APIC.its_off | Bin 164 -> 188 bytes tests/qtest/bios-tables-test-allowed-diff.h | 1 - 2 files changed, 1 deletion(-) diff --git a/tests/data/acpi/aarch64/virt/APIC.its_off b/tests/data/acpi/aa= rch64/virt/APIC.its_off index 6130cb7d07103b326feb4dcd7034f85808bebadf..16a01a17c0af605daf64f3cd2de= 3572be9e60cab 100644 GIT binary patch delta 43 qcmZ3&xQCI;F~HM#4+8@Oi@`*$SrWVwKqeS4aeydBAa-B~U;qHCpaq8j delta 18 ZcmdnPxP+0*F~HM#2?GNI3&%vRSpY3v1aANU diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios= -tables-test-allowed-diff.h index bfc4d60124..dfb8523c8b 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,2 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/aarch64/virt/APIC.its_off", --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436204; cv=none; d=zohomail.com; s=zohoarc; b=kSRABkFTTbUkENxylYHDc7hCPiW5H0IPl6cS1h71loe12SzMWHC8XsK//QCJOJqhw4IeO3dR5NuwzA90ecBLByOY7qP81IYjZuQAq/CFQq0fUsVi86k3VKEVcyVvpbNcW2El52DWT79JDoE72DoDGI0ekyEjYqWVW3q8LOphSVQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436204; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CDXmA90VChDNF+mgLamehM2Ivt5rkq6oevwq5r0nHLE=; b=hZ2hDzP4YVZKIRh/mUdwsiOMqd4fyXsVZ3EE45bSx0g+BD0SEoUh3lxWo5k4Ac8vKulBijBx+pTPlA8SKnOB5d8E5uYY7SzCahxfP0zlMGSFt0mjlYmbkq2EzpXGKr+30vWwGBilR2nAjJ8yRMexm8QbxzZLI7Zdwri3DJ5reR4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436204363551.7876132449674; Wed, 14 Jan 2026 16:16:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1r-00063A-Gf; Wed, 14 Jan 2026 19:15:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1p-00062l-Ab for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:57 -0500 Received: from p-west3-cluster5-host4-snip4-10.eps.apple.com ([57.103.72.43] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1n-0001tw-F9 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:15:57 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 64EED180045A; Thu, 15 Jan 2026 00:15:51 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 03D0A1800440; Thu, 15 Jan 2026 00:15:44 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=CDXmA90VChDNF+mgLamehM2Ivt5rkq6oevwq5r0nHLE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WQomujiwHnpNDmi+JoZXRNnQ76IvxXNj/rtwWaEtl40fRlDVR2k53E8SBY7ay4KgzwBt5/GKy1b+oUEKN203/1XnUvmozsf9M0SGTc0SlWKNxqgUwnajDgnNmesumv52Iv5zSTNn5bYqpcupZ3S8EUi6dei8w0DeplcjMKYffLtsDaLJ77ZRJcKBLVKSSLcIVER4otYrPjBJqdzXxp+vl6wNX5+tSC0JqP2t2l9DzKb/6iixwl/HrgJRRky6N8xbf6sdylZKQ9+sTDNhrcGuGjWT4gE0Mhx9oxErK3qwCqKQEhhE/FGbPmGq9DUUw4J909v2IHKE+WZUMjiUkIBxGA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu Subject: [PATCH v15 06/26] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Date: Thu, 15 Jan 2026 01:14:45 +0100 Message-ID: <20260115001505.57237-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=ZdMQ98VA c=1 sm=1 tr=0 ts=696831b9 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=065Y4zqepXN3nrMe:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=eCCvHKTOcc9AFgEG6kwA:9 X-Proofpoint-GUID: kxA3zGJdCUkjpPVUDEKKQKtRqkyDoyZd X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXy6A3VZ/mPH1L iqlLyqFyQbGvGn/a2TB4BHpw6MQ9Zh8pxZEYDhtZQ05sQWa99bBZQxlhcNQ2CNlt+0jgzbCcA/C nupYXLjMqZB67IUj7TZ9yyylMjbwGJjbQIq7uWH8xUt6eVoAnAes9CWpIRiEeItxzuxRAfLK/23 MMSXANTSMdySeRVlnNcNgjiI4/l2DhfpZJaeg9Tb2O9YRUNzacMQCmqSdDRGn0J1ZlN3bl+5Ok5 Ic1HYMGQO+Pb/VS7Pgg7glEMwTu1kxwRHNkc5YFMJoJ5sNE+okgC6/Tufssjx4RGnNBWTOq3Fi7 FKEWJnOWzTlIBHNeWG7 X-Proofpoint-ORIG-GUID: kxA3zGJdCUkjpPVUDEKKQKtRqkyDoyZd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 clxscore=1030 malwarescore=0 adultscore=0 spamscore=0 phishscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABvh+kXK8CFn8p9aHIuX4xE6gPZfHhIdf9vahydm2lI+RxXBbDxVeLOvvgQP46OuPXFiC6CPXmSvDyH4O5FATu/oKhJLIklBOiPxgkeMQd0ahkLY5PXOgVSzw4t5s40Tw0KoG9mR8Yu8lqZx3fRDsZZbkrKVjeZO+Y7qI6HmOYknH1NXn5jAnfXAJ1L1YcT0w93jc3aMrMb+y/fplycyAw0okQz1/EeUfl7UT2TW+lqj/VphY78XFzXmR6+OHbTifKo1euaCQ6GJkkbAqjVzLcpY4nAlT+liUcdHJSEu7C0aZgFGe5z2/yd+NeLIn4rPsw5P9PRm818mIOi/TWLj7F50eE7KjqvnA92e5SYjpeSjcfVGqL3W8E5hqlF4hL1jM1/HVo5LFOuXc8RaTSH8F9tYXJ72C8e9yrfk1J5Q5rx+X/q5sB+vbVJG72nQgxOaJiHD158yoUYf9nREqra598q2xaeDQNS9/Dqocrz8Ubtt/REKKwQA3cwwQZuQijQrI94+f13ipqE8xDNgEXRuAnLIH6xaBPOgZukfUYqpm1/dpbCr+2z/W7xo8q/odA65rYPp8+FtxDcQMrwTATOVRc2DSbpYEUAR1aUDMHJuJyS+uikq2jH2LKHEJRQbK/pFG7vghu/PJFkH1NjS8WaMR4afcFV8lObxWDGE97vJAxqwJCsObaJ7kTKq9vXatCk+TDkvx2G4aI5aMevyCWN4WLfodMrH6nGVvwTVS/CUGlcW6fq4bahqcWZbNkqWzT2VBs1f5M7OokAmMoDNeD/O7sH3r2Utq4WhSnYNTaVTW/CyEwGxWY+TEpd/b4vDrZUKgGevafv3LeCmFHONTkDRTFKeLzfs+oLq/ngTRTu4jVGjTJk1JRT4+tliPx/Ga89UuBvtfE1UG/JAEzw7Prr8KyJd22cTyRKypTqLpM4bkNy7ddWZhx/j0= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.43; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436206219158500 Content-Type: text/plain; charset="utf-8" Switch its to a tristate. Windows Hypervisor Platform's vGIC doesn't support ITS. Deal with this by reporting to the user and exiting. Regular configuration: GICv3 + ITS New default configuration with WHPX: GICv3 with GICv2m And its=3Doff explicitly for the newest machine version: GICv3 + GICv2m Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 14 ++++++------ hw/arm/virt.c | 46 +++++++++++++++++++++++++++++++--------- include/hw/arm/virt.h | 4 +++- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 40ea6b6dd5..86024a1a73 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -473,7 +473,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) nb_nodes =3D num_smmus + 1; /* RC and SMMUv3 */ rc_mapping_count =3D rc_smmu_idmaps_len; =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * Knowing the ID ranges from the RC to the SMMU, it's possibl= e to * determine the ID ranges from RC that go directly to ITS. @@ -484,7 +484,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) rc_mapping_count +=3D rc_its_idmaps->len; } } else { - if (vms->its) { + if (virt_is_its_enabled(vms)) { nb_nodes =3D 2; /* RC and ITS */ rc_mapping_count =3D 1; /* Direct map to ITS */ } else { @@ -499,7 +499,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) build_append_int_noprefix(table_data, IORT_NODE_OFFSET, 4); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* Table 12 ITS Group Format */ build_append_int_noprefix(table_data, 0 /* ITS Group */, 1); /* Ty= pe */ node_size =3D 20 /* fixed header size */ + 4 /* 1 GIC ITS Identif= ier */; @@ -518,7 +518,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) int smmu_mapping_count, offset_to_id_array; int irq =3D sdev->irq; =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { smmu_mapping_count =3D 1; /* ITS Group node */ offset_to_id_array =3D SMMU_V3_ENTRY_SIZE; /* Just after the h= eader */ } else { @@ -611,7 +611,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * Map bypassed (don't go through the SMMU) RIDs (input) to * ITS Group node directly: RC -> ITS. @@ -946,7 +946,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) memmap[VIRT_HIGH_GIC_REDIST2].si= ze); } =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * ACPI spec, Revision 6.0 Errata A * (original 6.0 definition has invalid Length) @@ -962,7 +962,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) + if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(= vms)) && !vms->no_gicv3_with_gicv2m) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 4fad34e108..553c7f62cc 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -737,7 +737,7 @@ static void create_its(VirtMachineState *vms) { DeviceState *dev; =20 - assert(vms->its); + assert(virt_is_its_enabled(vms)); if (!kvm_irqchip_in_kernel() && !vms->tcg_its) { /* * Do nothing if ITS is neither supported by the host nor emulated= by @@ -746,6 +746,15 @@ static void create_its(VirtMachineState *vms) return; } =20 + if (whpx_enabled()) { + /* + * Signal to the user when ITS is neither supported by the host + * nor emulated by the machine. + */ + error_report("ITS not supported on WHPX."); + exit(1); + } + dev =3D qdev_new(its_class_name()); =20 object_property_set_link(OBJECT(dev), "parent-gicv3", OBJECT(vms->gic), @@ -957,7 +966,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) =20 fdt_add_gic_node(vms); =20 - if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) { + if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(vm= s)) { create_its(vms); } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { create_v2m(vms); @@ -2699,18 +2708,34 @@ static void virt_set_highmem_mmio_size(Object *obj,= Visitor *v, extended_memmap[VIRT_HIGH_PCIE_MMIO].size =3D size; } =20 -static bool virt_get_its(Object *obj, Error **errp) +bool virt_is_its_enabled(VirtMachineState *vms) +{ + if (vms->its =3D=3D ON_OFF_AUTO_OFF) { + return false; + } + if (vms->its =3D=3D ON_OFF_AUTO_AUTO) { + if (whpx_enabled()) { + return false; + } + } + return true; +} + +static void virt_get_its(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); + OnOffAuto its =3D vms->its; =20 - return vms->its; + visit_type_OnOffAuto(v, name, &its, errp); } =20 -static void virt_set_its(Object *obj, bool value, Error **errp) +static void virt_set_its(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - vms->its =3D value; + visit_type_OnOffAuto(v, name, &vms->its, errp); } =20 static bool virt_get_dtb_randomness(Object *obj, Error **errp) @@ -3427,8 +3452,9 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) "guest CPU which implements the = ARM " "Memory Tagging Extension"); =20 - object_class_property_add_bool(oc, "its", virt_get_its, - virt_set_its); + object_class_property_add(oc, "its", "OnOffAuto", + virt_get_its, virt_set_its, + NULL, NULL); object_class_property_set_description(oc, "its", "Set on/off to enable/disable " "ITS instantiation"); @@ -3488,8 +3514,8 @@ static void virt_instance_init(Object *obj) vms->highmem_mmio =3D true; vms->highmem_redists =3D true; =20 - /* Default allows ITS instantiation */ - vms->its =3D true; + /* Default allows ITS instantiation if available */ + vms->its =3D ON_OFF_AUTO_AUTO; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; vms->no_gicv3_with_gicv2m =3D false; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index c5bc47ee88..394b70c62e 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -147,7 +147,7 @@ struct VirtMachineState { bool highmem_ecam; bool highmem_mmio; bool highmem_redists; - bool its; + OnOffAuto its; bool tcg_its; bool virt; bool ras; @@ -216,4 +216,6 @@ static inline int virt_gicv3_redist_region_count(VirtMa= chineState *vms) vms->highmem_redists) ? 2 : 1; } =20 +bool virt_is_its_enabled(VirtMachineState *vms); + #endif /* QEMU_ARM_VIRT_H */ --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436178; cv=none; d=zohomail.com; s=zohoarc; b=KH8krNqDbK2aBcKG+EKjBlPX+KMX15yt6irrD1fsa/aCKrq8NROsNxdaMGaxqgVa+XSj4MBYu7JGzymzTmVY6IBM4FqNvIKtTvzrSa4szfekFDZ+2R36y/MB856gG1ZWFGNQCuSAgSKTKDqKcOm/dneCEfdZWD2MCijTgphF+r4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436178; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pV+1Am7tr1YVsc3hZ5jzgr7hS1W1WG1c4qjADMcW5D0=; b=T49N8IvGT69xOaDwWb1sPkaPYvS3OaJU+mNGdPEPb+4kJ+hnmMI6WxPYiRU3txp8Cee4Obe7uTkZg0oHLBHsEYJuGkCarIjhMVy2s9xcxwiJvIKPi4TqnoWrD3IEWfyEv/QCV/vT/owQPrjxVHodDOkwcqEkMiGmAUhu0j4pZ04= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17684361771561014.7081534676236; Wed, 14 Jan 2026 16:16:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB1y-0006At-KQ; Wed, 14 Jan 2026 19:16:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1t-00063m-8U for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:02 -0500 Received: from p-west3-cluster5-host3-snip4-4.eps.apple.com ([57.103.72.27] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1r-0001up-8I for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:00 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 33E4918000CC; Thu, 15 Jan 2026 00:15:56 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 34BC418000B6; Thu, 15 Jan 2026 00:15:51 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=pV+1Am7tr1YVsc3hZ5jzgr7hS1W1WG1c4qjADMcW5D0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Uk0g74qWcGJpyy33WbTVZhB+8+idRID0js9A4CQhqbtTWdTxT7nLIFFqDibhksd/zmgBnyFtLtm8P939Kge37hrqI3fgFp4WIUNEFX4oB8BO39CNgqPsK29VforKX91ynboLmupTTfWdDG4VV1VZ0sLOW+2OcwhvjOGLDwKY4UukzFvM1eMvjYpQZlhJclxX6HeYCJuxsU5v5oDFIKxZ3sMTIIW3jcL0KI3S4MK0aiN3mB0vICZ1NDoyMFyfpkLJCamk8wNSp1dKv+I9kroh/VJatoOoAKiRxfiXuXY2CxSSJenz8PQYM426h/5wUy0Xe6ItKOMQABDa3CAF9ETDUA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu Subject: [PATCH v15 07/26] hw: arm: virt: rework MSI-X configuration Date: Thu, 15 Jan 2026 01:14:46 +0100 Message-ID: <20260115001505.57237-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=dJCrWeZb c=1 sm=1 tr=0 ts=696831bd cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=DPHOBc7XtNdUtUkKMRoA:9 X-Proofpoint-GUID: 4zYJpomSZxABtPDLJ9P4n92V72eBPXMp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXwGpQxdxULeGR ci7Iaku2cGGDL7HlwEVlKb5hcJWZiP/UXBXH5pK1AqHCR8NO3EquRz28hKx+Jckht5rfazxrHph tdQV2JujzqyUuYlqqTuJ4MDSBKT+PXUHz7x9vU3UzROqH+ndL+QbIbtzzbst3N6fIadBOokJM4l Nf14rNEN09Uc7+cg6qoDDBOCcnkwTfEsb/8YBWYO7x3OnLyLUjjzoibb/8ofaiWDAIkQu0E/CuG dw+E4RSp9C5qhtU7PH4uDdLv9LXEMXAC8sMXf5s165eeFueWsicJslJeuwk1EY5hP2fiaTBhudc 4VVYJ8kjOz3T+BPwZwW X-Proofpoint-ORIG-GUID: 4zYJpomSZxABtPDLJ9P4n92V72eBPXMp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 spamscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABI+eroKMuyfNTDCGsdxB2g0/sxUK6KU9SyYtDIqqbr9DuYnbjIGoARxIDln1EARAp4ByO7ag+5SyZ2JaOkcjFy4bzmv/cjxFG9sg1mT9Jrov3/CIV+ZimEn3m6KubtFLif9GnIu1zqagvKw9AqlnesFW/VK4NfVcA2IOBNOGWM0TVVOl/YCHeQzbpeOheswlXLv3c1dIti0YZ91BvoU4UnvRx/35w1ngH/npa7LJGlhMuAb+oB1zwYQbQOswqGS7v1pMVEQL/CY+7GtcF3CxZG0upFcb3NtDnq+gt903Chw9Nn9eyvu7nOt4uKt+bCA6FxnZBMZRg2iQ37Y4fk52e0nXBLOMOMW5Vk9WTFSBw51Vmv4GJremt7i7QxbmX+x4XBjrLvyZm1a4yuDPoVAyiEztRXZ5NFWESyTC/oUxSNxX1jBm+S02NwKX1KbdUbdjFC7VL7rUDBDj5domsI3IF2t4ltR4+IyHAfVz6v2riQ5YVNenNnElqK3yBlKz/EEQZR1EhB4ABW436NuI89NC7DLftcssj0UNhZby6X8lw3jukSU8fPBAebsLKP95pztNZo3C6O4ZOpGTFiupT+nIN2SodjQB3llthPvi/R5y7qy3/0iuaP0oUziEeV/s+HsOL4zeuf7z14nUwaL8a6xa3NUh7XL6HCc62t+/h4BweuDl3Z4ZnqpZD3cW68ag6pe6jGCbGKt4Ui0UJu7asNmdgVA4HpwIatsrhBawJCnXAJVhZ+be0CI1Lm8Kst5teCqCHzE0E0jilk9T+xj9+SDVxDUxq5/TQNENfqHmJS27wDN3aZMWeLgViSv0gb8EJZ2YcbAGSkNQW14iHGs6Q6eHHiC2PYwpj5mditGbxlRR8DVqCUrPf2rPW5gTzkHJy21b24OWLgIKb9yw6tbVbT5K+zRysD5nLZX/6FQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.27; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436180263158500 Content-Type: text/plain; charset="utf-8" Introduce a -M msi=3D argument to be able to control MSI-X support independ= ently from ITS, as part of supporting GICv3 + GICv2m platforms. Remove vms->its as it's no longer needed after that change. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 24 +++++--- hw/arm/virt.c | 116 ++++++++++++++++++++++++++++++++------- include/hw/arm/virt.h | 4 +- 3 files changed, 116 insertions(+), 28 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 86024a1a73..187dd4e272 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -440,6 +440,17 @@ static void create_rc_its_idmaps(GArray *its_idmaps, G= Array *smmuv3_devs) } } =20 +/* + * In the prior Qemu ACPI table handling, GICv2 configurations + * had vms->its=3D1... That's broken. + * + * Match that assumption to match the existing ACPI tables that + * have been shipping for quite a while. + */ +static int is_gicv2_acpi_workaround_needed(VirtMachineState *vms) { + return vms->gic_version =3D=3D 2; +} + /* * Input Output Remapping Table (IORT) * Conforms to "IO Remapping Table System Software on ARM Platforms", @@ -473,7 +484,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) nb_nodes =3D num_smmus + 1; /* RC and SMMUv3 */ rc_mapping_count =3D rc_smmu_idmaps_len; =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { /* * Knowing the ID ranges from the RC to the SMMU, it's possibl= e to * determine the ID ranges from RC that go directly to ITS. @@ -484,7 +495,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) rc_mapping_count +=3D rc_its_idmaps->len; } } else { - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { nb_nodes =3D 2; /* RC and ITS */ rc_mapping_count =3D 1; /* Direct map to ITS */ } else { @@ -499,7 +510,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) build_append_int_noprefix(table_data, IORT_NODE_OFFSET, 4); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vms)) { /* Table 12 ITS Group Format */ build_append_int_noprefix(table_data, 0 /* ITS Group */, 1); /* Ty= pe */ node_size =3D 20 /* fixed header size */ + 4 /* 1 GIC ITS Identif= ier */; @@ -518,7 +529,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) int smmu_mapping_count, offset_to_id_array; int irq =3D sdev->irq; =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { smmu_mapping_count =3D 1; /* ITS Group node */ offset_to_id_array =3D SMMU_V3_ENTRY_SIZE; /* Just after the h= eader */ } else { @@ -611,7 +622,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { /* * Map bypassed (don't go through the SMMU) RIDs (input) to * ITS Group node directly: RC -> ITS. @@ -962,8 +973,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(= vms)) - && !vms->no_gicv3_with_gicv2m) { + if (virt_is_gicv2m_enabled(vms)) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 /* 5.2.12.16 GIC MSI Frame Structure */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 553c7f62cc..bc0d54eb7c 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -966,12 +966,12 @@ static void create_gic(VirtMachineState *vms, MemoryR= egion *mem) =20 fdt_add_gic_node(vms); =20 - if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(vm= s)) { + if (virt_is_its_enabled(vms)) { create_its(vms); - } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { - create_v2m(vms); - } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { + } else if (virt_is_gicv2m_enabled(vms)) { create_v2m(vms); + } else { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; } } =20 @@ -2710,32 +2710,101 @@ static void virt_set_highmem_mmio_size(Object *obj= , Visitor *v, =20 bool virt_is_its_enabled(VirtMachineState *vms) { - if (vms->its =3D=3D ON_OFF_AUTO_OFF) { + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: return false; - } - if (vms->its =3D=3D ON_OFF_AUTO_AUTO) { - if (whpx_enabled()) { + case VIRT_MSI_CTRL_ITS: + return true; + case VIRT_MSI_CTRL_GICV2M: + return false; + case VIRT_MSI_CTRL_AUTO: + if (whpx_enabled() && whpx_irqchip_in_kernel()) { + return false; + } + if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { return false; } + return true; + default: + g_assert_not_reached(); } - return true; } =20 -static void virt_get_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +bool virt_is_gicv2m_enabled(VirtMachineState *vms) +{ + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: + return false; + case VIRT_MSI_CTRL_ITS: + case VIRT_MSI_CTRL_GICV2M: + case VIRT_MSI_CTRL_AUTO: + return !virt_is_its_enabled(vms); + default: + g_assert_not_reached(); + } +} + +static char *virt_get_msi(Object *obj, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); - OnOffAuto its =3D vms->its; + const char *val; =20 - visit_type_OnOffAuto(v, name, &its, errp); + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: + val =3D "off"; + break; + case VIRT_MSI_CTRL_ITS: + val =3D "its"; + break; + case VIRT_MSI_CTRL_GICV2M: + val =3D "gicv2m"; + break; + case VIRT_MSI_CTRL_AUTO: + val =3D "auto"; + break; + default: + g_assert_not_reached(); + } + return g_strdup(val); } =20 -static void virt_set_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +static void virt_set_msi(Object *obj, const char *value, Error **errp) +{ + ERRP_GUARD(); + VirtMachineState *vms =3D VIRT_MACHINE(obj); + + if (!strcmp(value, "auto")) { + vms->msi_controller =3D VIRT_MSI_CTRL_AUTO; /* Will be overriden l= ater */ + } else if (!strcmp(value, "its")) { + vms->msi_controller =3D VIRT_MSI_CTRL_ITS; + } else if (!strcmp(value, "gicv2m")) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (!strcmp(value, "none")) { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; + } else { + error_setg(errp, "Invalid msi value"); + error_append_hint(errp, "Valid values are auto, gicv2m, its, off\n= "); + } +} + +static bool virt_get_its(Object *obj, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - visit_type_OnOffAuto(v, name, &vms->its, errp); + return virt_is_its_enabled(vms); +} + +static void virt_set_its(Object *obj, bool value, Error **errp) +{ + VirtMachineState *vms =3D VIRT_MACHINE(obj); + + if (value) { + vms->msi_controller =3D VIRT_MSI_CTRL_ITS; + } else if (vms->no_gicv3_with_gicv2m) { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; + } else { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } } =20 static bool virt_get_dtb_randomness(Object *obj, Error **errp) @@ -3062,6 +3131,8 @@ static void virt_machine_device_pre_plug_cb(HotplugHa= ndler *hotplug_dev, db_start =3D base_memmap[VIRT_GIC_V2M].base; db_end =3D db_start + base_memmap[VIRT_GIC_V2M].size - 1; break; + case VIRT_MSI_CTRL_AUTO: + g_assert_not_reached(); } resv_prop_str =3D g_strdup_printf("0x%"PRIx64":0x%"PRIx64":%u", db_start, db_end, @@ -3452,13 +3523,18 @@ static void virt_machine_class_init(ObjectClass *oc= , const void *data) "guest CPU which implements the = ARM " "Memory Tagging Extension"); =20 - object_class_property_add(oc, "its", "OnOffAuto", - virt_get_its, virt_set_its, - NULL, NULL); + object_class_property_add_bool(oc, "its", virt_get_its, + virt_set_its); object_class_property_set_description(oc, "its", "Set on/off to enable/disable " "ITS instantiation"); =20 + object_class_property_add_str(oc, "msi", virt_get_msi, + virt_set_msi); + object_class_property_set_description(oc, "msi", + "Set MSI settings. " + "Valid values are auto/gicv2m/it= s/off"); + object_class_property_add_bool(oc, "dtb-randomness", virt_get_dtb_randomness, virt_set_dtb_randomness); @@ -3515,7 +3591,7 @@ static void virt_instance_init(Object *obj) vms->highmem_redists =3D true; =20 /* Default allows ITS instantiation if available */ - vms->its =3D ON_OFF_AUTO_AUTO; + vms->msi_controller =3D VIRT_MSI_CTRL_AUTO; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; vms->no_gicv3_with_gicv2m =3D false; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 394b70c62e..ff43bcb739 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -101,6 +101,8 @@ typedef enum VirtIOMMUType { =20 typedef enum VirtMSIControllerType { VIRT_MSI_CTRL_NONE, + /* This value is overriden at runtime.*/ + VIRT_MSI_CTRL_AUTO, VIRT_MSI_CTRL_GICV2M, VIRT_MSI_CTRL_ITS, } VirtMSIControllerType; @@ -147,7 +149,6 @@ struct VirtMachineState { bool highmem_ecam; bool highmem_mmio; bool highmem_redists; - OnOffAuto its; bool tcg_its; bool virt; bool ras; @@ -217,5 +218,6 @@ static inline int virt_gicv3_redist_region_count(VirtMa= chineState *vms) } =20 bool virt_is_its_enabled(VirtMachineState *vms); +bool virt_is_gicv2m_enabled(VirtMachineState *vms); =20 #endif /* QEMU_ARM_VIRT_H */ --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436187; cv=none; d=zohomail.com; s=zohoarc; b=Alscv8HKKmo62MGkXb6vYRN0LoO66Wnwu1bY8dJDAS+m0W8AnrEpcGxVyUGeu/KZtLGDng0UQapELrLfHbcYHSOnPe3i5K28PcIawQrvwXUE45hWmOxNE+O0ox+zZ8zcLSCWUmeDvmZF8LXglEqbAJvx3Of5OdM0/u0QqpD39xw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436187; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WIhlnxgxBCyc+dWCY0SbNhn5OBvUHdUcvG79a1EP0Gg=; b=EB1KjcW6HAa17rSLcciglUzYMqdUPXa9bcGZlFf1d0SA4ulN3XuY34+B7OeKm9LpYUeJtXMbS0nZ4bOgY5rA1I21lIz553OB8nNEhu6USJTze6f0sVn64SbtGi0XTHiorjA/lxutcnDHLmL6HTHhLuF75py0v1EVrX8fADxMu9s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436187269743.8499952002967; Wed, 14 Jan 2026 16:16:27 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB22-0006EL-E4; Wed, 14 Jan 2026 19:16:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB20-0006Dl-Iw for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:08 -0500 Received: from p-west3-cluster5-host2-snip4-1.eps.apple.com ([57.103.72.74] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB1y-0001vv-90 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:07 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 2AA5218000B6; Thu, 15 Jan 2026 00:16:02 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 34534180044C; Thu, 15 Jan 2026 00:15:56 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=WIhlnxgxBCyc+dWCY0SbNhn5OBvUHdUcvG79a1EP0Gg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=D5W0YS65SUWkp/h/4y5QctrCaSLqPnV3MDsrG3lydd/8f+e8vhjN3kH+0jnZDicHhaXuEgy7EMA1xKKmlqIMXAAR0RQdSR0Ln+9hjyuQ8n7SiGyf4ILzJqP+3D3UdS8ywqKcK4y+rrarH2pj6ZGzp+5kyMiMqzZKYtCXtVY3udVVpPGG7vijUDKYrVABkHvF2CJnVLhISCNrVa4rg1tolWD3wHuQi/RiHAv1StDeJnMwe5506Mwsdhhl3fqV0iChLmBlao9Juw1ro4Entsm/Hj4+k8u+2g1/2FfHtp4AVFbrFiWwk3ECaLfLJDZkl9XhpoZcKjcdkPj48wa4snAEFw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 08/26] docs: arm: update virt machine model description Date: Thu, 15 Jan 2026 01:14:47 +0100 Message-ID: <20260115001505.57237-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=a7c9NESF c=1 sm=1 tr=0 ts=696831c4 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=UWX6RoDBcPCHCN3xbnsA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 3FUIQYR1-voFzuNammOTidQV0H2SKBQw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX8exHBDpIB5EC iuhoPeEJpKfat6dKK4kPgsnwA/2RP5WCy33/jRXbToraHvbYK5QBzLyFh1az/I8HJXd2Gnp+4gD E9eoNWnIhUWQCHpfn2TPBgXUVPIuBz3srsFrdhBcAgUh1SRAiEiYyq09wRjqdyp9+q0oB6BD/ql lHXggqAgMxkxM+15ERF+bYPA3GMMoNljmmY64FhzJ1jevY7tEycB+C8jcZtodCSS/Iif7aZauRv WXdOZ2xCswqaBd0qnLF+uFly4AcOABVhrIyeTU8QZKqn9geAThuxz3QcOLPbZ5zr9DbnS5cMTsm s+vyU8zn9+GiJDO5ves X-Proofpoint-ORIG-GUID: 3FUIQYR1-voFzuNammOTidQV0H2SKBQw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0 malwarescore=0 clxscore=1030 adultscore=0 mlxlogscore=999 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABf2GbJ5eYyFpYcBr1q7jrnKfLVrRNlwQWnXZcByIUzrwr0cm1WuoeGNZ2r5yoIUDWUK5tIfNpjSyLo9ga7Pbe10eJSv1LCjSiPKpz7eJC11llyfS0MWrpIx2RQTvIOkQ6BCN7MRZTluwYCPfNtFMFiTSR2zis4lpTaUoY6Zapopkm3LUwb6zRJLbkYDKu3uha93775gIe8Qvw0hYoZc60ALjQn/e8zuwXgGSosCgfsgpWw9kCy5reiyiYyGPfTewbJxufHtX7GhzGbm2QhgmJLGxfM5e17teTnJVB6VNi5++MGWLgMucAV+NrzgfbDnsMSIC6BZTBeb7eBoscp649+h2fUjGWqjKd162VXWNRPhtJp7x2M/DWglYL9Bo7gE6Lbv0lMDtBvIvhUIHrocymw6n9KTGrqPqOKUJKY6adPv3Z6N6vvqMzBTEuD/aiekA6n/7DKq1JFINB6SLn8tCEGjyX+7m1G5PIXqcc85+1lIScgN9TCXav2egaw6RO1vEz503GZ0LHqO50yeYcFMgln/csFtcSb7ZyEyO4fLf56jMBFN0umlXu/2uXF1ZPDZAn2VEjsfkRc6u78kcGGJy1vShces302zvNQ4a2Wy7xDAURKjKjIAh6iGF9s/66aIvzbrLFpdDhVspXbe/tWqcz6YMB6CJ6gz+WcrScX81rW7C0J1pKAmdlEyjWWL87FPlsKwAqslyMUssBRhA/0WT1E64IRdGyT/Jtk8XYppG69LnBPeTNttcN7azEZpQA3zUuQm+eXConzY/X5lu1hN6AVZ5zxnWX4pqfcApFXdO1rEnQqUzqdfxqD2IF3zjRM1PxeVYDxkQ+N/wN/3F6ykcI64iwAJi/YyBvTwtcRpQtUq5qKzCNNbbdZliruYY6fLhGEPYFhMS+NZ5KAwOqL046zRKK0zvYOnpvJ/vGX6xyvdD8Sv9UaCOd3h46psfMj1lUblw/hS62 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.74; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436188415158500 Content-Type: text/plain; charset="utf-8" Update the documentation to match current QEMU. Remove the mention of pre-2.7 machine models as those aren't provided anymore. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- docs/system/arm/virt.rst | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst index e5570773ba..b6e88c4f13 100644 --- a/docs/system/arm/virt.rst +++ b/docs/system/arm/virt.rst @@ -41,9 +41,10 @@ The virt board supports: - User-creatable SMMUv3 devices (see below for example) - hotpluggable DIMMs - hotpluggable NVDIMMs -- An MSI controller (GICv2M or ITS). GICv2M is selected by default along - with GICv2. ITS is selected by default with GICv3 (>=3D virt-2.7). Note - that ITS is not modeled in TCG mode. +- An MSI controller (GICv2m or ITS). + - When using a GICv3, ITS is selected by default when available on the p= latform. + - If using a GICv2 or when ITS is not available or disabled, a GICv2m is= provided by default instead. + - Before virt-11.0, when using a GICv3 without the ITS, a GICv2m is not = provided. - 32 virtio-mmio transport devices - running guests using the KVM accelerator on aarch64 hardware - large amounts of RAM (at least 255GB, and more if using highmem) @@ -167,9 +168,11 @@ gic-version with TCG this is currently ``3`` if ``virtualization`` is ``off`` and ``4`` if ``virtualization`` is ``on``, but this may change in future) =20 +msi + Set ``auto``/``gicv2m``/``its``/``none`` to control MSI controller confi= guration. The default is ``auto``. + its - Set ``on``/``off`` to enable/disable ITS instantiation. The default is `= `on`` - for machine types later than ``virt-2.7``. + Set ``on``/``off``/``auto`` to control ITS instantiation. The default is= ``auto``. =20 iommu Set the IOMMU type to create for the guest. Valid values are: --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436210; cv=none; d=zohomail.com; s=zohoarc; b=hrtM0SFlIXZygLvzHgPiwUhRnqFKosiltds/1gNZOjPyODKjkmB/+9pA2nQuMk6lwNm3Jg/vmQxkMpKFnQNA1LUA3c2wcKQHBNGEZtDDBcedyzPT2jZeQHb/j6qXBFvIaNxdgPzTTED359GllHWgmZJ8GxiSpsCUU28fxWoc6WY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436210; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZDL+1ZrQdQMU6W30aFxKeJ0WSSWhexTpAIoa7LZHNfo=; b=ckzXy5X+HUcUdBrEozbMBaAMLHaGsQEP0/gL6/+J/seAnd1craD3xYxR6lfu2SttAc1GlGUY/aYRYKaD0MXAHBA/shkdXdAHGXBlWnigmL1fQ+llpoMlMlpwpqNHInhFBQou+/zvJM+tHVDyWNxcvuHNUCfNkg6C5df4fAgvg2M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436210670456.766831890801; Wed, 14 Jan 2026 16:16:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2F-0006Wl-46; Wed, 14 Jan 2026 19:16:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2D-0006SN-0X for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:21 -0500 Received: from p-west3-cluster5-host1-snip4-3.eps.apple.com ([57.103.72.66] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB22-0001wu-Pz for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:12 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 73D3A180040C; Thu, 15 Jan 2026 00:16:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 3074D18000C4; Thu, 15 Jan 2026 00:16:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ZDL+1ZrQdQMU6W30aFxKeJ0WSSWhexTpAIoa7LZHNfo=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=CwpI7cx8Mr8pPHOGgTJrq5vXat7odzOv2Fi76xPhn8IFPPMBtL6zjce86sWGDjQw+Z1Q2dfYLTOyepmzSC5KcZLa5JQu57txb0EHtndMzabkcn1X8syRpvG7biTLe/hznG17Dgw61YbngtFVn8ynPLxsKN6wnSkxp9jZ0Ogwl8+PzZhSsQZfN3qy20x47cBFbb7+UmMIJD5XIOFzZoNnAhhmqVkX+ygE4TYy+KR8Q1uj6WsU8RNh+xw3YEGnwmOcTDsbsLcPqGsLSpS7cpPZk7vgO3daeZQqxzSu74tNmKsyX+77kjY6lYezJaL4EZugSIkh/XvMs62wzu3U7HevDA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 09/26] whpx: Move around files before introducing AArch64 support Date: Thu, 15 Jan 2026 01:14:48 +0100 Message-ID: <20260115001505.57237-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 75i6WwNN-9pnvNBsVgzrbIx0pDK2auYZ X-Proofpoint-GUID: 75i6WwNN-9pnvNBsVgzrbIx0pDK2auYZ X-Authority-Info: v=2.4 cv=bPMb4f+Z c=1 sm=1 tr=0 ts=696831c8 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=5-iGLm-LtT_B5TT3xKgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX0HCKgo1rfSNh OgP1TDtS6+1x4QoDJJphzkak52CiQCEIhxTXQxdC9PxiW9sslGEZGgv/xJbw0jzpn+mVvOjxX2a Hm09mHw4jAXYGUJibLgLnDjAcGqPEr23zw1LsTC6Y3ErJXPPcHOEoiglh9dunmdjh/6obo7949s oqqPOyKVytsuFeP1kjSvMCT364MjbLz0K9kav05mpQe8+slmIWGV1z1R/wLQxeUik8/ylkKhiOb dDMku0v/X3d1E5jjT5wXDReKHbwjpfyyHK0JW/w2A7WKuJnKVoAJsXSEuRUAc2kplR6uaOD5sfC 0OO+d1VJUmXPPR0n+ny X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABzzko6saJ7WT7wdzmIkY+mwFuWhQDLAaSGAnw7+Fi9J8HyGAZVOMunOlD8MvbN8HQdZJcBkXLFCq+0hUhpPFV2gUA/5DaAHFRClVnH6tbr49GNvc7JM5Z0zMcIPerDxXNBbsLzHXhPkW0oLrte6ooEb1ukz36y7KvQRkdO5NSrKlSxbRfiATCitFmcHWrVrnM4SikpG/kusMxb4gg7kty25ZinuJ57L2rPi7r4fLLsQJ7PPdC1s9YxSVsvtfl1gV4zvucNPVKErhiS7uaI++ngnlGpIWERlij3xb9+zUpjwyJf+k/y7bID52t4du2rNxPMC4fmYqOhXxMPmLO6RbWZae3D1ebMnRsDgT6Ib56EXY5/RDjh2zja6j6784fNJlfZJta9OHov7XHGHrdTHaAjHyMXb5tX+CgbIpEbC3MvE8qDo0mEY/a1A+CwEipmvayBn7X9YrjOhT9iv8w4GLndDM7ORZcIE0PqIeTiFq8h5XnfmpD9CRpPM5ELrIwm1x7hrzYyTPgjndJesRNxxwFyPnsflwtr6f0baurL3rS0ayIys1CoPhdqU9WqW844rFeJNGFGLQb0mSN2s15DxAG0Nmh6tpmDHhWoXNmWPxQPUgYtSViHlgfsoytk2m21sdws4C0A5YlXunR5BuCr0jHbz/oxmzGKr32IBQMHbX+X5Lyc/S7sd7joGdvJkDKKdoRICe27Yph/dcBSdQ3c10ms72bCRdtZCgkvECDoGzgisDxiAhU2VieM+k0JHy+AzLZ6an6zoF/90jzvF1uzVuI9THztINtuVaO1gbB8Dba/krRB+JFzHagnar8Xw82IRsI8gAf1nZi3/lilTcr0FI70MvlDLFZxLBLIyORXerl1dsMKhHiQx0KFol/9b3VJPJvQUDVuP8df6u/whSH9gEpZ8xv3DAB/c/hOL/Rl6D/0Q+niBrzLI2BZlVehXU4M3qH+muHTBvcNNAFsPnJ Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.66; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436212469158500 Switch to a design where we can share whpx code between x86 and AArch64 whe= n it makes sense to do so. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 ++ accel/meson.build | 1 + accel/whpx/meson.build | 6 ++++++ {target/i386 =3D> accel}/whpx/whpx-accel-ops.c | 4 ++-- {target/i386/whpx =3D> include/system}/whpx-accel-ops.h | 4 ++-- {target/i386/whpx =3D> include/system}/whpx-internal.h | 6 ++++-- target/i386/whpx/meson.build | 1 - target/i386/whpx/whpx-all.c | 4 ++-- target/i386/whpx/whpx-apic.c | 2 +- 9 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 accel/whpx/meson.build rename {target/i386 =3D> accel}/whpx/whpx-accel-ops.c (97%) rename {target/i386/whpx =3D> include/system}/whpx-accel-ops.h (92%) rename {target/i386/whpx =3D> include/system}/whpx-internal.h (97%) diff --git a/MAINTAINERS b/MAINTAINERS index 4ddbfba9f0..561f18c8d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -563,9 +563,11 @@ WHPX CPUs M: Pedro Barbuda M: Mohamed Mediouni S: Supported +F: accel/whpx/ F: target/i386/whpx/ F: accel/stubs/whpx-stub.c F: include/system/whpx.h +F: include/system/whpx-accel-ops.h =20 MSHV M: Magnus Kulke diff --git a/accel/meson.build b/accel/meson.build index 983dfd0bd5..289b7420ff 100644 --- a/accel/meson.build +++ b/accel/meson.build @@ -6,6 +6,7 @@ user_ss.add(files('accel-user.c')) subdir('tcg') if have_system subdir('hvf') + subdir('whpx') subdir('qtest') subdir('kvm') subdir('xen') diff --git a/accel/whpx/meson.build b/accel/whpx/meson.build new file mode 100644 index 0000000000..7b3d6f1c1c --- /dev/null +++ b/accel/whpx/meson.build @@ -0,0 +1,6 @@ +whpx_ss =3D ss.source_set() +whpx_ss.add(files( + 'whpx-accel-ops.c', +)) + +specific_ss.add_all(when: 'CONFIG_WHPX', if_true: whpx_ss) diff --git a/target/i386/whpx/whpx-accel-ops.c b/accel/whpx/whpx-accel-ops.c similarity index 97% rename from target/i386/whpx/whpx-accel-ops.c rename to accel/whpx/whpx-accel-ops.c index f75886128d..c84a25c273 100644 --- a/target/i386/whpx/whpx-accel-ops.c +++ b/accel/whpx/whpx-accel-ops.c @@ -16,8 +16,8 @@ #include "qemu/guest-random.h" =20 #include "system/whpx.h" -#include "whpx-internal.h" -#include "whpx-accel-ops.h" +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" =20 static void *whpx_cpu_thread_fn(void *arg) { diff --git a/target/i386/whpx/whpx-accel-ops.h b/include/system/whpx-accel-= ops.h similarity index 92% rename from target/i386/whpx/whpx-accel-ops.h rename to include/system/whpx-accel-ops.h index 54cfc25a14..ed9d4c49f4 100644 --- a/target/i386/whpx/whpx-accel-ops.h +++ b/include/system/whpx-accel-ops.h @@ -7,8 +7,8 @@ * See the COPYING file in the top-level directory. */ =20 -#ifndef TARGET_I386_WHPX_ACCEL_OPS_H -#define TARGET_I386_WHPX_ACCEL_OPS_H +#ifndef SYSTEM_WHPX_ACCEL_OPS_H +#define SYSTEM_WHPX_ACCEL_OPS_H =20 #include "system/cpus.h" =20 diff --git a/target/i386/whpx/whpx-internal.h b/include/system/whpx-interna= l.h similarity index 97% rename from target/i386/whpx/whpx-internal.h rename to include/system/whpx-internal.h index 2dcad1f565..041fa958b4 100644 --- a/target/i386/whpx/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -1,11 +1,13 @@ -#ifndef TARGET_I386_WHPX_INTERNAL_H -#define TARGET_I386_WHPX_INTERNAL_H +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_INTERNAL_H +#define SYSTEM_WHPX_INTERNAL_H =20 #include #include #include =20 #include "hw/i386/apic.h" +#include "exec/vaddr.h" =20 typedef enum WhpxBreakpointState { WHPX_BP_CLEARED =3D 0, diff --git a/target/i386/whpx/meson.build b/target/i386/whpx/meson.build index 9c54aaad39..c3aaaff9fd 100644 --- a/target/i386/whpx/meson.build +++ b/target/i386/whpx/meson.build @@ -1,5 +1,4 @@ i386_system_ss.add(when: 'CONFIG_WHPX', if_true: files( 'whpx-all.c', 'whpx-apic.c', - 'whpx-accel-ops.c', )) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index db184e1b0d..cef31fc1a8 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -31,8 +31,8 @@ #include "accel/accel-cpu-target.h" #include =20 -#include "whpx-internal.h" -#include "whpx-accel-ops.h" +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" =20 #include #include diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c index afcb25843b..b934fdcbe1 100644 --- a/target/i386/whpx/whpx-apic.c +++ b/target/i386/whpx/whpx-apic.c @@ -18,7 +18,7 @@ #include "hw/pci/msi.h" #include "system/hw_accel.h" #include "system/whpx.h" -#include "whpx-internal.h" +#include "system/whpx-internal.h" =20 struct whpx_lapic_state { struct { --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436269; cv=none; d=zohomail.com; s=zohoarc; b=ZCjVNgjQtjAOne/dEKQPPMf8FSuuWrl7b+I1hDdR+dhN+vsVb6aloGEk3/BxiaagldtAdSKaA4b6xRdsGjFhefOanOOo0NP4VOuX5u6mo3NngiHYbJvvHSU3e/97Cwyf0AKTy8oV0cIVy0drPcE9Oyy9SlzFl7m4iDi4FQLUhQc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436269; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sQ3V08xbcalhtr2aUzzc620bG2/z/ncYXthbkxktV8U=; b=a9xB40/SzVLqGNWso5J5HyLz7tlgsf/mZ9TAgBB6RT87oiq1IW+zMP3WQHUEeqJtkre7mxxO4z60TlngbqNzobqX95Mr1Hvbi5sze/X7IGWnfelABkpYBFAxt+b9JO7jSwjY0+uxwmZLVaUbGjRKTbqd5wU5KegMY/10kGqLt/s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436269309276.31220484815174; Wed, 14 Jan 2026 16:17:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2I-0006fu-Tm; Wed, 14 Jan 2026 19:16:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2G-0006Za-D6 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:24 -0500 Received: from p-west3-cluster5-host3-snip4-4.eps.apple.com ([57.103.72.27] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2C-0001xe-4u for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:24 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 89FB81800457; Thu, 15 Jan 2026 00:16:13 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 79F751800429; Thu, 15 Jan 2026 00:16:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=sQ3V08xbcalhtr2aUzzc620bG2/z/ncYXthbkxktV8U=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=PCuirYxJGOfccuvdu1PCqfLiq9oCNUIdbhpLpRQF3SlufzZiXAzF5y9WnJR4rxwOc4720Lix4dy/LCxiZooVQXRvay0kqaouHKT43t8gGRtVCqhif4G5r+6xqHpgEA5v+jRggX3UEII1Rrql/BzEoGpEZ0F8QH9grgMXWLYidM4LYobPaB63+z48OnDEu5KNLugFKN7O9U3ch1ex2b6o1GFOMm12tFmP9JV5UXX6WgKIjixYGJMb5zpyS10cNpciGpBResmIvgiVabPZtBWNlGxpdqhORlgvuDd0BHZ9Gg/1/UULnn0FKdflN3MvVJX+oKFJsy1T3OZITTyry3bXgQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 10/26] whpx: reshuffle common code Date: Thu, 15 Jan 2026 01:14:49 +0100 Message-ID: <20260115001505.57237-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: zoOFd2xlivQEHz1sOnxaimslXluWEi9D X-Proofpoint-GUID: zoOFd2xlivQEHz1sOnxaimslXluWEi9D X-Authority-Info: v=2.4 cv=bPMb4f+Z c=1 sm=1 tr=0 ts=696831ce cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=XtnWhMvHLvoGx0dyWtYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX8QKFt6PCAS3q oON8T2kVEBkCZQw77vDLZZQqDKacDaASePqhewD4GxJHxkmtPoO6Te6nLUFtNWtQ6mH0KvBUwlB qx4EJ77iFPt7GlL4dwt0tvbmHuSyElYifTmpnIdlm6g8lhtWWkiJo7ni/i4xclNG+VDMyrORJpZ 8Dgu2X+9XzU8RUtYNVxc4F42qu/MI5aJwOhtWTcWtg6Y1rPL8+MQVL2T39ESr4g+nfXNxuDcKY9 i5To/QNqidr2QsZEk5r//QBCzk4D7LaO4hb11yJwaWBXW555peF+wdK6fkUdODQtOWi3Ru/tNUv lGve5aGemDAN5qXdcPK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABYi74qtaZscWyfd4eE9avw/UVdNOSp+X3MA62rUqzesF0Bh5HNivCi953jAdwkQBy89EoukrAxFcUEdQWiz80Eu/uywRKAkjGwK1+OI6lco4P6fn9kZkm5bauhyLhJWqxxfK9SYeBAObyv/Dokmpmp90GlSX2zOgYFAwDZ+yADdxviQofdOANtxmQbQTwsPGeb6saoOQv4sY0Bx9hqzxqYdlEuLIS6q2iefVhsgJ1ipuCWZjltLwkkzOoeMnSUvLRZmZFGqgFUUC9bjfYRW0yQnFG6EZdLHHzTCBsvSQgYUjlCXapJdsTYMCducgFwlWZBd/WX92bKOyULl5TClGIR900EPm6+6+sS5YRpZj17OLKUwWR6dkK7yTLFkdwWWac6ue6WRGLnsz33YAUKvNXIZcebJ4PnKYVTBnOjAlF4rD0jvl3BSWqDE4O6YSnvUUU9lbOQCKtAv4Hehz3O3HSQcvY7kvVC7sG2MyaI9oRPiX7NaBcF4AB9A5sHePv6q1G21dGDNOss0RwHkT49dXmowRU1j82TCOU60uU+/CF4IXYrXTGZnlsIkkXUjiLm2KjS8YAT23IHUaSn85xRbV2ol/+7USrPzSRk+cWB/k7ichgBsPqzRAfOb5gtpYGtn2bzx/QUYK0KuNGMa959bUHLHE/z0VxdYxHOkugNM3GUlEIq2mhHgbPeNLzDRX3pgXQDgc+vx8a7KO7vXzVJLAQIjVCUz7Bgayx9C4RVQtSfHKlm8sMrfD0RlS+T0bcfW8b7rmju+QEuRpI+vMHNRen2CpGlR0GLnnNPgW1GhdkYhvyKPDqASmlEWjaRKhPG/17/ZsvwWD0wcUqHzliftxe3Krblz92JqoUwbcVFs/gHPseG6jECyduhIFvXezRcu6W/6NfgzQ5gLtUevq2/lT+ITAB Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.27; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436270176158500 Content-Type: text/plain; charset="utf-8" Some code can be shared between x86_64 and arm64 WHPX. Do so as much as rea= sonable. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 + accel/whpx/meson.build | 1 + accel/whpx/whpx-common.c | 558 +++++++++++++++++++++++++++++++++++ include/system/whpx-all.h | 20 ++ include/system/whpx-common.h | 21 ++ target/i386/whpx/whpx-all.c | 551 +--------------------------------- 6 files changed, 612 insertions(+), 541 deletions(-) create mode 100644 accel/whpx/whpx-common.c create mode 100644 include/system/whpx-all.h create mode 100644 include/system/whpx-common.h diff --git a/MAINTAINERS b/MAINTAINERS index 561f18c8d2..e66c764167 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -568,6 +568,8 @@ F: target/i386/whpx/ F: accel/stubs/whpx-stub.c F: include/system/whpx.h F: include/system/whpx-accel-ops.h +F: include/system/whpx-common.h +F: include/system/whpx-internal.h =20 MSHV M: Magnus Kulke diff --git a/accel/whpx/meson.build b/accel/whpx/meson.build index 7b3d6f1c1c..fad28dddcb 100644 --- a/accel/whpx/meson.build +++ b/accel/whpx/meson.build @@ -1,6 +1,7 @@ whpx_ss =3D ss.source_set() whpx_ss.add(files( 'whpx-accel-ops.c', + 'whpx-common.c' )) =20 specific_ss.add_all(when: 'CONFIG_WHPX', if_true: whpx_ss) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c new file mode 100644 index 0000000000..0a6068fdde --- /dev/null +++ b/accel/whpx/whpx-common.c @@ -0,0 +1,558 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Windows Hypervisor Platform accelerator (WHPX) + * + * Copyright Microsoft Corp. 2017 + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "system/address-spaces.h" +#include "system/ioport.h" +#include "gdbstub/helpers.h" +#include "qemu/accel.h" +#include "accel/accel-ops.h" +#include "system/whpx.h" +#include "system/cpus.h" +#include "system/runstate.h" +#include "qemu/main-loop.h" +#include "hw/core/boards.h" +#include "hw/intc/ioapic.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-types-common.h" +#include "qapi/qapi-visit-common.h" +#include "migration/blocker.h" +#include "accel/accel-cpu-target.h" +#include + +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" +#include "system/whpx-common.h" +#include "system/whpx-all.h" + +#include +#include + +bool whpx_allowed; +static bool whp_dispatch_initialized; +static HMODULE hWinHvPlatform; +static HMODULE hWinHvEmulation; + +struct whpx_state whpx_global; +struct WHPDispatch whp_dispatch; + +/* Tries to find a breakpoint at the specified address. */ +struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address) +{ + struct whpx_state *whpx =3D &whpx_global; + int i; + + if (whpx->breakpoints.breakpoints) { + for (i =3D 0; i < whpx->breakpoints.breakpoints->used; i++) { + if (address =3D=3D whpx->breakpoints.breakpoints->data[i].addr= ess) { + return &whpx->breakpoints.breakpoints->data[i]; + } + } + } + + return NULL; +} + +/* + * This function is called when the a VCPU is about to start and no other + * VCPUs have been started so far. Since the VCPU start order could be + * arbitrary, it doesn't have to be VCPU#0. + * + * It is used to commit the breakpoints into memory, and configure WHPX + * to intercept debug exceptions. + * + * Note that whpx_set_exception_exit_bitmap() cannot be called if one or + * more VCPUs are already running, so this is the best place to do it. + */ +int whpx_first_vcpu_starting(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + + g_assert(bql_locked()); + + if (!QTAILQ_EMPTY(&cpu->breakpoints) || + (whpx->breakpoints.breakpoints && + whpx->breakpoints.breakpoints->used)) { + CPUBreakpoint *bp; + int i =3D 0; + bool update_pending =3D false; + + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { + if (i >=3D whpx->breakpoints.original_address_count || + bp->pc !=3D whpx->breakpoints.original_addresses[i]) { + update_pending =3D true; + } + + i++; + } + + if (i !=3D whpx->breakpoints.original_address_count) { + update_pending =3D true; + } + + if (update_pending) { + /* + * The CPU breakpoints have changed since the last call to + * whpx_translate_cpu_breakpoints(). WHPX breakpoints must + * now be recomputed. + */ + whpx_translate_cpu_breakpoints(&whpx->breakpoints, cpu, i); + } + /* Actually insert the breakpoints into the memory. */ + whpx_apply_breakpoints(whpx->breakpoints.breakpoints, cpu, true); + } + HRESULT hr; + uint64_t exception_mask; + if (whpx->step_pending || + (whpx->breakpoints.breakpoints && + whpx->breakpoints.breakpoints->used)) { + /* + * We are either attempting to single-step one or more CPUs, or + * have one or more breakpoints enabled. Both require intercepting + * the WHvX64ExceptionTypeBreakpointTrap exception. + */ + exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; + } else { + /* Let the guest handle all exceptions. */ + exception_mask =3D 0; + } + hr =3D whpx_set_exception_exit_bitmap(exception_mask); + if (!SUCCEEDED(hr)) { + error_report("WHPX: Failed to update exception exit mask," + "hr=3D%08lx.", hr); + return 1; + } + return 0; +} + +/* + * This function is called when the last VCPU has finished running. + * It is used to remove any previously set breakpoints from memory. + */ +int whpx_last_vcpu_stopping(CPUState *cpu) +{ + whpx_apply_breakpoints(whpx_global.breakpoints.breakpoints, cpu, false= ); + return 0; +} + +static void do_whpx_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data a= rg) +{ + if (!cpu->vcpu_dirty) { + whpx_get_registers(cpu); + cpu->vcpu_dirty =3D true; + } +} + +static void do_whpx_cpu_synchronize_post_reset(CPUState *cpu, + run_on_cpu_data arg) +{ + whpx_set_registers(cpu, WHPX_SET_RESET_STATE); + cpu->vcpu_dirty =3D false; +} + +static void do_whpx_cpu_synchronize_post_init(CPUState *cpu, + run_on_cpu_data arg) +{ + whpx_set_registers(cpu, WHPX_SET_FULL_STATE); + cpu->vcpu_dirty =3D false; +} + +static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu, + run_on_cpu_data arg) +{ + cpu->vcpu_dirty =3D true; +} + +/* + * CPU support. + */ + +void whpx_cpu_synchronize_state(CPUState *cpu) +{ + if (!cpu->vcpu_dirty) { + run_on_cpu(cpu, do_whpx_cpu_synchronize_state, RUN_ON_CPU_NULL); + } +} + +void whpx_cpu_synchronize_post_reset(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_post_reset, RUN_ON_CPU_NULL); +} + +void whpx_cpu_synchronize_post_init(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_post_init, RUN_ON_CPU_NULL); +} + +void whpx_cpu_synchronize_pre_loadvm(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL); +} + +static void whpx_pre_resume_vm(AccelState *as, bool step_pending) +{ + whpx_global.step_pending =3D step_pending; +} + +/* + * Vcpu support. + */ + +int whpx_vcpu_exec(CPUState *cpu) +{ + int ret; + int fatal; + + for (;;) { + if (cpu->exception_index >=3D EXCP_INTERRUPT) { + ret =3D cpu->exception_index; + cpu->exception_index =3D -1; + break; + } + + fatal =3D whpx_vcpu_run(cpu); + + if (fatal) { + error_report("WHPX: Failed to exec a virtual processor"); + abort(); + } + } + + return ret; +} + +void whpx_destroy_vcpu(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + + whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); + AccelCPUState *vcpu =3D cpu->accel; + whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); + g_free(cpu->accel); +} + + +void whpx_vcpu_kick(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + whp_dispatch.WHvCancelRunVirtualProcessor( + whpx->partition, cpu->cpu_index, 0); +} + +/* + * Memory support. + */ + +static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, + void *host_va, int add, int rom, + const char *name) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + /* + if (add) { + printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", + (void*)start_pa, (void*)size, host_va, + (rom ? "ROM" : "RAM"), name); + } else { + printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", + (void*)start_pa, (void*)size, host_va, name); + } + */ + + if (add) { + hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, + host_va, + start_pa, + size, + (WHvMapGpaRangeFlagRead | + WHvMapGpaRangeFlagExecute | + (rom ? 0 : WHvMapGpaRangeFlagWri= te))); + } else { + hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, + start_pa, + size); + } + + if (FAILED(hr)) { + error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," + " Host:%p, hr=3D%08lx", + (add ? "MAP" : "UNMAP"), name, + (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); + } +} + +static void whpx_process_section(MemoryRegionSection *section, int add) +{ + MemoryRegion *mr =3D section->mr; + hwaddr start_pa =3D section->offset_within_address_space; + ram_addr_t size =3D int128_get64(section->size); + unsigned int delta; + uint64_t host_va; + + if (!memory_region_is_ram(mr)) { + return; + } + + delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); + delta &=3D ~qemu_real_host_page_mask(); + if (delta > size) { + return; + } + start_pa +=3D delta; + size -=3D delta; + size &=3D qemu_real_host_page_mask(); + if (!size || (start_pa & ~qemu_real_host_page_mask())) { + return; + } + + host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) + + section->offset_within_region + delta; + + whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, + memory_region_is_rom(mr), mr->name); +} + +static void whpx_region_add(MemoryListener *listener, + MemoryRegionSection *section) +{ + memory_region_ref(section->mr); + whpx_process_section(section, 1); +} + +static void whpx_region_del(MemoryListener *listener, + MemoryRegionSection *section) +{ + whpx_process_section(section, 0); + memory_region_unref(section->mr); +} + +static void whpx_transaction_begin(MemoryListener *listener) +{ +} + +static void whpx_transaction_commit(MemoryListener *listener) +{ +} + +static void whpx_log_sync(MemoryListener *listener, + MemoryRegionSection *section) +{ + MemoryRegion *mr =3D section->mr; + + if (!memory_region_is_ram(mr)) { + return; + } + + memory_region_set_dirty(mr, 0, int128_get64(section->size)); +} + +static MemoryListener whpx_memory_listener =3D { + .name =3D "whpx", + .begin =3D whpx_transaction_begin, + .commit =3D whpx_transaction_commit, + .region_add =3D whpx_region_add, + .region_del =3D whpx_region_del, + .log_sync =3D whpx_log_sync, + .priority =3D MEMORY_LISTENER_PRIORITY_ACCEL, +}; + +void whpx_memory_init(void) +{ + memory_listener_register(&whpx_memory_listener, &address_space_memory); +} + +/* + * Load the functions from the given library, using the given handle. If a + * handle is provided, it is used, otherwise the library is opened. The + * handle will be updated on return with the opened one. + */ +static bool load_whp_dispatch_fns(HMODULE *handle, + WHPFunctionList function_list) +{ + HMODULE hLib =3D *handle; + + #define WINHV_PLATFORM_DLL "WinHvPlatform.dll" + #define WINHV_EMULATION_DLL "WinHvEmulation.dll" + #define WHP_LOAD_FIELD_OPTIONAL(return_type, function_name, signature)= \ + whp_dispatch.function_name =3D \ + (function_name ## _t)GetProcAddress(hLib, #function_name); \ + + #define WHP_LOAD_FIELD(return_type, function_name, signature) \ + whp_dispatch.function_name =3D \ + (function_name ## _t)GetProcAddress(hLib, #function_name); \ + if (!whp_dispatch.function_name) { \ + error_report("Could not load function %s", #function_name); \ + goto error; \ + } \ + + #define WHP_LOAD_LIB(lib_name, handle_lib) \ + if (!handle_lib) { \ + handle_lib =3D LoadLibrary(lib_name); \ + if (!handle_lib) { \ + error_report("Could not load library %s.", lib_name); \ + goto error; \ + } \ + } \ + + switch (function_list) { + case WINHV_PLATFORM_FNS_DEFAULT: + WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) + LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) + break; + case WINHV_EMULATION_FNS_DEFAULT: + WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) + LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) + break; + case WINHV_PLATFORM_FNS_SUPPLEMENTAL: + WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) + LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_LOAD_FIELD_OPTIONAL) + break; + } + + *handle =3D hLib; + return true; + +error: + if (hLib) { + FreeLibrary(hLib); + } + + return false; +} + +static void whpx_set_kernel_irqchip(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffSplit mode; + + if (!visit_type_OnOffSplit(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_SPLIT_ON: + whpx->kernel_irqchip_allowed =3D true; + whpx->kernel_irqchip_required =3D true; + break; + + case ON_OFF_SPLIT_OFF: + whpx->kernel_irqchip_allowed =3D false; + whpx->kernel_irqchip_required =3D false; + break; + + case ON_OFF_SPLIT_SPLIT: + error_setg(errp, "WHPX: split irqchip currently not supported"); + error_append_hint(errp, + "Try without kernel-irqchip or with kernel-irqchip=3Don|off"); + break; + + default: + /* + * The value was checked in visit_type_OnOffSplit() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + +static void whpx_cpu_accel_class_init(ObjectClass *oc, const void *data) +{ + AccelCPUClass *acc =3D ACCEL_CPU_CLASS(oc); + + acc->cpu_instance_init =3D whpx_cpu_instance_init; +} + +static const TypeInfo whpx_cpu_accel_type =3D { + .name =3D ACCEL_CPU_NAME("whpx"), + + .parent =3D TYPE_ACCEL_CPU, + .class_init =3D whpx_cpu_accel_class_init, + .abstract =3D true, +}; + +/* + * Partition support + */ + +bool whpx_apic_in_platform(void) +{ + return whpx_global.apic_in_platform; +} + +static void whpx_accel_class_init(ObjectClass *oc, const void *data) +{ + AccelClass *ac =3D ACCEL_CLASS(oc); + ac->name =3D "WHPX"; + ac->init_machine =3D whpx_accel_init; + ac->pre_resume_vm =3D whpx_pre_resume_vm; + ac->allowed =3D &whpx_allowed; + + object_class_property_add(oc, "kernel-irqchip", "on|off|split", + NULL, whpx_set_kernel_irqchip, + NULL, NULL); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure WHPX in-kernel irqchip"); +} + +static void whpx_accel_instance_init(Object *obj) +{ + struct whpx_state *whpx =3D &whpx_global; + + memset(whpx, 0, sizeof(struct whpx_state)); + /* Turn on kernel-irqchip, by default */ + whpx->kernel_irqchip_allowed =3D true; +} + +static const TypeInfo whpx_accel_type =3D { + .name =3D ACCEL_CLASS_NAME("whpx"), + .parent =3D TYPE_ACCEL, + .instance_init =3D whpx_accel_instance_init, + .class_init =3D whpx_accel_class_init, +}; + +static void whpx_type_init(void) +{ + type_register_static(&whpx_accel_type); + type_register_static(&whpx_cpu_accel_type); +} + +bool init_whp_dispatch(void) +{ + if (whp_dispatch_initialized) { + return true; + } + + if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { + goto error; + } + + if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { + goto error; + } + + assert(load_whp_dispatch_fns(&hWinHvPlatform, + WINHV_PLATFORM_FNS_SUPPLEMENTAL)); + whp_dispatch_initialized =3D true; + + return true; +error: + if (hWinHvPlatform) { + FreeLibrary(hWinHvPlatform); + } + if (hWinHvEmulation) { + FreeLibrary(hWinHvEmulation); + } + return false; +} + +type_init(whpx_type_init); diff --git a/include/system/whpx-all.h b/include/system/whpx-all.h new file mode 100644 index 0000000000..f13cdf7f66 --- /dev/null +++ b/include/system/whpx-all.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_ALL_H +#define SYSTEM_WHPX_ALL_H + +/* Called by whpx-common */ +int whpx_vcpu_run(CPUState *cpu); +void whpx_get_registers(CPUState *cpu); +void whpx_set_registers(CPUState *cpu, int level); +int whpx_accel_init(AccelState *as, MachineState *ms); +void whpx_cpu_instance_init(CPUState *cs); +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions); +void whpx_apply_breakpoints( +struct whpx_breakpoint_collection *breakpoints, + CPUState *cpu, + bool resuming); +void whpx_translate_cpu_breakpoints( + struct whpx_breakpoints *breakpoints, + CPUState *cpu, + int cpu_breakpoint_count); +#endif diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h new file mode 100644 index 0000000000..e549c7539c --- /dev/null +++ b/include/system/whpx-common.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_COMMON_H +#define SYSTEM_WHPX_COMMON_H + +struct AccelCPUState { + WHV_EMULATOR_HANDLE emulator; + bool window_registered; + bool interruptable; + bool ready_for_pic_interrupt; + uint64_t tpr; + uint64_t apic_base; + bool interruption_pending; + /* Must be the last field as it may have a tail */ + WHV_RUN_VP_EXIT_CONTEXT exit_ctx; +}; + +int whpx_first_vcpu_starting(CPUState *cpu); +int whpx_last_vcpu_stopping(CPUState *cpu); +void whpx_memory_init(void); +struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address); +#endif diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index cef31fc1a8..052cda42bf 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -33,6 +33,8 @@ =20 #include "system/whpx-internal.h" #include "system/whpx-accel-ops.h" +#include "system/whpx-all.h" +#include "system/whpx-common.h" =20 #include #include @@ -232,28 +234,9 @@ typedef enum WhpxStepMode { WHPX_STEP_EXCLUSIVE, } WhpxStepMode; =20 -struct AccelCPUState { - WHV_EMULATOR_HANDLE emulator; - bool window_registered; - bool interruptable; - bool ready_for_pic_interrupt; - uint64_t tpr; - uint64_t apic_base; - bool interruption_pending; - - /* Must be the last field as it may have a tail */ - WHV_RUN_VP_EXIT_CONTEXT exit_ctx; -}; - -bool whpx_allowed; -static bool whp_dispatch_initialized; -static HMODULE hWinHvPlatform, hWinHvEmulation; static uint32_t max_vcpu_index; static WHV_PROCESSOR_XSAVE_FEATURES whpx_xsave_cap; =20 -struct whpx_state whpx_global; -struct WHPDispatch whp_dispatch; - static bool whpx_has_xsave(void) { return whpx_xsave_cap.XsaveSupport; @@ -379,7 +362,7 @@ static uint64_t whpx_cr8_to_apic_tpr(uint64_t cr8) return cr8 << 4; } =20 -static void whpx_set_registers(CPUState *cpu, int level) +void whpx_set_registers(CPUState *cpu, int level) { struct whpx_state *whpx =3D &whpx_global; AccelCPUState *vcpu =3D cpu->accel; @@ -594,7 +577,7 @@ static void whpx_get_xcrs(CPUState *cpu) cpu_env(cpu)->xcr0 =3D xcr0.Reg64; } =20 -static void whpx_get_registers(CPUState *cpu) +void whpx_get_registers(CPUState *cpu) { struct whpx_state *whpx =3D &whpx_global; AccelCPUState *vcpu =3D cpu->accel; @@ -934,7 +917,7 @@ static int whpx_handle_portio(CPUState *cpu, * The 'exceptions' argument accepts a bitmask, e.g: * (1 << WHvX64ExceptionTypeDebugTrapOrFault) | (...) */ -static HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) { struct whpx_state *whpx =3D &whpx_global; WHV_PARTITION_PROPERTY prop =3D { 0, }; @@ -1084,23 +1067,6 @@ static HRESULT whpx_vcpu_configure_single_stepping(C= PUState *cpu, return S_OK; } =20 -/* Tries to find a breakpoint at the specified address. */ -static struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t add= ress) -{ - struct whpx_state *whpx =3D &whpx_global; - int i; - - if (whpx->breakpoints.breakpoints) { - for (i =3D 0; i < whpx->breakpoints.breakpoints->used; i++) { - if (address =3D=3D whpx->breakpoints.breakpoints->data[i].addr= ess) { - return &whpx->breakpoints.breakpoints->data[i]; - } - } - } - - return NULL; -} - /* * Linux uses int3 (0xCC) during startup (see int3_selftest()) and for * debugging user-mode applications. Since the WHPX API does not offer @@ -1136,7 +1102,7 @@ static const uint8_t whpx_breakpoint_instruction =3D = 0xF1; * memory, but doesn't actually do it. The memory accessing is done in * whpx_apply_breakpoints(). */ -static void whpx_translate_cpu_breakpoints( +void whpx_translate_cpu_breakpoints( struct whpx_breakpoints *breakpoints, CPUState *cpu, int cpu_breakpoint_count) @@ -1230,7 +1196,7 @@ static void whpx_translate_cpu_breakpoints( * Passing resuming=3Dtrue will try to set all previously unset breakpoin= ts. * Passing resuming=3Dfalse will remove all inserted ones. */ -static void whpx_apply_breakpoints( +void whpx_apply_breakpoints( struct whpx_breakpoint_collection *breakpoints, CPUState *cpu, bool resuming) @@ -1306,93 +1272,6 @@ static void whpx_apply_breakpoints( } } =20 -/* - * This function is called when the a VCPU is about to start and no other - * VCPUs have been started so far. Since the VCPU start order could be - * arbitrary, it doesn't have to be VCPU#0. - * - * It is used to commit the breakpoints into memory, and configure WHPX - * to intercept debug exceptions. - * - * Note that whpx_set_exception_exit_bitmap() cannot be called if one or - * more VCPUs are already running, so this is the best place to do it. - */ -static int whpx_first_vcpu_starting(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - HRESULT hr; - - g_assert(bql_locked()); - - if (!QTAILQ_EMPTY(&cpu->breakpoints) || - (whpx->breakpoints.breakpoints && - whpx->breakpoints.breakpoints->used)) { - CPUBreakpoint *bp; - int i =3D 0; - bool update_pending =3D false; - - QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { - if (i >=3D whpx->breakpoints.original_address_count || - bp->pc !=3D whpx->breakpoints.original_addresses[i]) { - update_pending =3D true; - } - - i++; - } - - if (i !=3D whpx->breakpoints.original_address_count) { - update_pending =3D true; - } - - if (update_pending) { - /* - * The CPU breakpoints have changed since the last call to - * whpx_translate_cpu_breakpoints(). WHPX breakpoints must - * now be recomputed. - */ - whpx_translate_cpu_breakpoints(&whpx->breakpoints, cpu, i); - } - - /* Actually insert the breakpoints into the memory. */ - whpx_apply_breakpoints(whpx->breakpoints.breakpoints, cpu, true); - } - - uint64_t exception_mask; - if (whpx->step_pending || - (whpx->breakpoints.breakpoints && - whpx->breakpoints.breakpoints->used)) { - /* - * We are either attempting to single-step one or more CPUs, or - * have one or more breakpoints enabled. Both require intercepting - * the WHvX64ExceptionTypeBreakpointTrap exception. - */ - - exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; - } else { - /* Let the guest handle all exceptions. */ - exception_mask =3D 0; - } - - hr =3D whpx_set_exception_exit_bitmap(exception_mask); - if (!SUCCEEDED(hr)) { - error_report("WHPX: Failed to update exception exit mask," - "hr=3D%08lx.", hr); - return 1; - } - - return 0; -} - -/* - * This function is called when the last VCPU has finished running. - * It is used to remove any previously set breakpoints from memory. - */ -static int whpx_last_vcpu_stopping(CPUState *cpu) -{ - whpx_apply_breakpoints(whpx_global.breakpoints.breakpoints, cpu, false= ); - return 0; -} - /* Returns the address of the next instruction that is about to be execute= d. */ static vaddr whpx_vcpu_get_pc(CPUState *cpu, bool exit_context_valid) { @@ -1634,7 +1513,7 @@ static void whpx_vcpu_process_async_events(CPUState *= cpu) } } =20 -static int whpx_vcpu_run(CPUState *cpu) +int whpx_vcpu_run(CPUState *cpu) { HRESULT hr; struct whpx_state *whpx =3D &whpx_global; @@ -2057,65 +1936,6 @@ static int whpx_vcpu_run(CPUState *cpu) return ret < 0; } =20 -static void do_whpx_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data a= rg) -{ - if (!cpu->vcpu_dirty) { - whpx_get_registers(cpu); - cpu->vcpu_dirty =3D true; - } -} - -static void do_whpx_cpu_synchronize_post_reset(CPUState *cpu, - run_on_cpu_data arg) -{ - whpx_set_registers(cpu, WHPX_SET_RESET_STATE); - cpu->vcpu_dirty =3D false; -} - -static void do_whpx_cpu_synchronize_post_init(CPUState *cpu, - run_on_cpu_data arg) -{ - whpx_set_registers(cpu, WHPX_SET_FULL_STATE); - cpu->vcpu_dirty =3D false; -} - -static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu, - run_on_cpu_data arg) -{ - cpu->vcpu_dirty =3D true; -} - -/* - * CPU support. - */ - -void whpx_cpu_synchronize_state(CPUState *cpu) -{ - if (!cpu->vcpu_dirty) { - run_on_cpu(cpu, do_whpx_cpu_synchronize_state, RUN_ON_CPU_NULL); - } -} - -void whpx_cpu_synchronize_post_reset(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_post_reset, RUN_ON_CPU_NULL); -} - -void whpx_cpu_synchronize_post_init(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_post_init, RUN_ON_CPU_NULL); -} - -void whpx_cpu_synchronize_pre_loadvm(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL); -} - -static void whpx_pre_resume_vm(AccelState *as, bool step_pending) -{ - whpx_global.step_pending =3D step_pending; -} - /* * Vcpu support. */ @@ -2244,295 +2064,18 @@ error: return ret; } =20 -int whpx_vcpu_exec(CPUState *cpu) -{ - int ret; - int fatal; - - for (;;) { - if (cpu->exception_index >=3D EXCP_INTERRUPT) { - ret =3D cpu->exception_index; - cpu->exception_index =3D -1; - break; - } - - fatal =3D whpx_vcpu_run(cpu); - - if (fatal) { - error_report("WHPX: Failed to exec a virtual processor"); - abort(); - } - } - - return ret; -} - -void whpx_destroy_vcpu(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - AccelCPUState *vcpu =3D cpu->accel; - - whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); - whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); - g_free(cpu->accel); -} - -void whpx_vcpu_kick(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - whp_dispatch.WHvCancelRunVirtualProcessor( - whpx->partition, cpu->cpu_index, 0); -} - -/* - * Memory support. - */ - -static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, - void *host_va, int add, int rom, - const char *name) -{ - struct whpx_state *whpx =3D &whpx_global; - HRESULT hr; - - /* - if (add) { - printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", - (void*)start_pa, (void*)size, host_va, - (rom ? "ROM" : "RAM"), name); - } else { - printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", - (void*)start_pa, (void*)size, host_va, name); - } - */ - - if (add) { - hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, - host_va, - start_pa, - size, - (WHvMapGpaRangeFlagRead | - WHvMapGpaRangeFlagExecute | - (rom ? 0 : WHvMapGpaRangeFlagWri= te))); - } else { - hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, - start_pa, - size); - } - - if (FAILED(hr)) { - error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," - " Host:%p, hr=3D%08lx", - (add ? "MAP" : "UNMAP"), name, - (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); - } -} - -static void whpx_process_section(MemoryRegionSection *section, int add) -{ - MemoryRegion *mr =3D section->mr; - hwaddr start_pa =3D section->offset_within_address_space; - ram_addr_t size =3D int128_get64(section->size); - unsigned int delta; - uint64_t host_va; - - if (!memory_region_is_ram(mr)) { - return; - } - - delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); - delta &=3D ~qemu_real_host_page_mask(); - if (delta > size) { - return; - } - start_pa +=3D delta; - size -=3D delta; - size &=3D qemu_real_host_page_mask(); - if (!size || (start_pa & ~qemu_real_host_page_mask())) { - return; - } - - host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) - + section->offset_within_region + delta; - - whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, - memory_region_is_rom(mr), mr->name); -} - -static void whpx_region_add(MemoryListener *listener, - MemoryRegionSection *section) -{ - memory_region_ref(section->mr); - whpx_process_section(section, 1); -} - -static void whpx_region_del(MemoryListener *listener, - MemoryRegionSection *section) -{ - whpx_process_section(section, 0); - memory_region_unref(section->mr); -} - -static void whpx_transaction_begin(MemoryListener *listener) -{ -} - -static void whpx_transaction_commit(MemoryListener *listener) -{ -} - -static void whpx_log_sync(MemoryListener *listener, - MemoryRegionSection *section) -{ - MemoryRegion *mr =3D section->mr; - - if (!memory_region_is_ram(mr)) { - return; - } - - memory_region_set_dirty(mr, 0, int128_get64(section->size)); -} - -static MemoryListener whpx_memory_listener =3D { - .name =3D "whpx", - .begin =3D whpx_transaction_begin, - .commit =3D whpx_transaction_commit, - .region_add =3D whpx_region_add, - .region_del =3D whpx_region_del, - .log_sync =3D whpx_log_sync, - .priority =3D MEMORY_LISTENER_PRIORITY_ACCEL, -}; - -static void whpx_memory_init(void) -{ - memory_listener_register(&whpx_memory_listener, &address_space_memory); -} - -/* - * Load the functions from the given library, using the given handle. If a - * handle is provided, it is used, otherwise the library is opened. The - * handle will be updated on return with the opened one. - */ -static bool load_whp_dispatch_fns(HMODULE *handle, - WHPFunctionList function_list) -{ - HMODULE hLib =3D *handle; - - #define WINHV_PLATFORM_DLL "WinHvPlatform.dll" - #define WINHV_EMULATION_DLL "WinHvEmulation.dll" - #define WHP_LOAD_FIELD_OPTIONAL(return_type, function_name, signature)= \ - whp_dispatch.function_name =3D \ - (function_name ## _t)GetProcAddress(hLib, #function_name); \ - - #define WHP_LOAD_FIELD(return_type, function_name, signature) \ - whp_dispatch.function_name =3D \ - (function_name ## _t)GetProcAddress(hLib, #function_name); \ - if (!whp_dispatch.function_name) { \ - error_report("Could not load function %s", #function_name); \ - goto error; \ - } \ - - #define WHP_LOAD_LIB(lib_name, handle_lib) \ - if (!handle_lib) { \ - handle_lib =3D LoadLibrary(lib_name); \ - if (!handle_lib) { \ - error_report("Could not load library %s.", lib_name); \ - goto error; \ - } \ - } \ - - switch (function_list) { - case WINHV_PLATFORM_FNS_DEFAULT: - WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) - LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) - break; - - case WINHV_EMULATION_FNS_DEFAULT: - WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) - LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) - break; - - case WINHV_PLATFORM_FNS_SUPPLEMENTAL: - WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) - LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_LOAD_FIELD_OPTIONAL) - break; - } - - *handle =3D hLib; - return true; - -error: - if (hLib) { - FreeLibrary(hLib); - } - - return false; -} - -static void whpx_set_kernel_irqchip(Object *obj, Visitor *v, - const char *name, void *opaque, - Error **errp) -{ - struct whpx_state *whpx =3D &whpx_global; - OnOffSplit mode; - - if (!visit_type_OnOffSplit(v, name, &mode, errp)) { - return; - } - - switch (mode) { - case ON_OFF_SPLIT_ON: - whpx->kernel_irqchip_allowed =3D true; - whpx->kernel_irqchip_required =3D true; - break; - - case ON_OFF_SPLIT_OFF: - whpx->kernel_irqchip_allowed =3D false; - whpx->kernel_irqchip_required =3D false; - break; - - case ON_OFF_SPLIT_SPLIT: - error_setg(errp, "WHPX: split irqchip currently not supported"); - error_append_hint(errp, - "Try without kernel-irqchip or with kernel-irqchip=3Don|off"); - break; - - default: - /* - * The value was checked in visit_type_OnOffSplit() above. If - * we get here, then something is wrong in QEMU. - */ - abort(); - } -} - -static void whpx_cpu_instance_init(CPUState *cs) +void whpx_cpu_instance_init(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); =20 host_cpu_instance_init(cpu); } =20 -static void whpx_cpu_accel_class_init(ObjectClass *oc, const void *data) -{ - AccelCPUClass *acc =3D ACCEL_CPU_CLASS(oc); - - acc->cpu_instance_init =3D whpx_cpu_instance_init; -} - -static const TypeInfo whpx_cpu_accel_type =3D { - .name =3D ACCEL_CPU_NAME("whpx"), - - .parent =3D TYPE_ACCEL_CPU, - .class_init =3D whpx_cpu_accel_class_init, - .abstract =3D true, -}; - /* * Partition support */ =20 -static int whpx_accel_init(AccelState *as, MachineState *ms) +int whpx_accel_init(AccelState *as, MachineState *ms) { struct whpx_state *whpx; int ret; @@ -2715,77 +2258,3 @@ error: =20 return ret; } - -bool whpx_apic_in_platform(void) { - return whpx_global.apic_in_platform; -} - -static void whpx_accel_class_init(ObjectClass *oc, const void *data) -{ - AccelClass *ac =3D ACCEL_CLASS(oc); - ac->name =3D "WHPX"; - ac->init_machine =3D whpx_accel_init; - ac->pre_resume_vm =3D whpx_pre_resume_vm; - ac->allowed =3D &whpx_allowed; - - object_class_property_add(oc, "kernel-irqchip", "on|off|split", - NULL, whpx_set_kernel_irqchip, - NULL, NULL); - object_class_property_set_description(oc, "kernel-irqchip", - "Configure WHPX in-kernel irqchip"); -} - -static void whpx_accel_instance_init(Object *obj) -{ - struct whpx_state *whpx =3D &whpx_global; - - memset(whpx, 0, sizeof(struct whpx_state)); - /* Turn on kernel-irqchip, by default */ - whpx->kernel_irqchip_allowed =3D true; -} - -static const TypeInfo whpx_accel_type =3D { - .name =3D ACCEL_CLASS_NAME("whpx"), - .parent =3D TYPE_ACCEL, - .instance_init =3D whpx_accel_instance_init, - .class_init =3D whpx_accel_class_init, -}; - -static void whpx_type_init(void) -{ - type_register_static(&whpx_accel_type); - type_register_static(&whpx_cpu_accel_type); -} - -bool init_whp_dispatch(void) -{ - if (whp_dispatch_initialized) { - return true; - } - - if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { - goto error; - } - - if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { - goto error; - } - - assert(load_whp_dispatch_fns(&hWinHvPlatform, - WINHV_PLATFORM_FNS_SUPPLEMENTAL)); - whp_dispatch_initialized =3D true; - - return true; -error: - if (hWinHvPlatform) { - FreeLibrary(hWinHvPlatform); - } - - if (hWinHvEmulation) { - FreeLibrary(hWinHvEmulation); - } - - return false; -} - -type_init(whpx_type_init); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436223; cv=none; d=zohomail.com; s=zohoarc; b=fWSl573087zuo3lUdEuXgIbqpWNZ7Q0be7rIpkMI9S22bY6UF3BJkiVmfp/4c35NgDysL/1fS4SXuPnCOc+IjEyAQ9d8fAAWmgdZd90WLwdfpB9BmdYfXkfwudajuDwWFtXBdUDCxMLRfZSEIomelyIUeFk9RBJuOzMpOfNs5d0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436223; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4Um6hRxHh4BMXdx4GLCdFkThKG/poHmK1RPmbKL0RKU=; b=lAUH/KAoW4oQcrajxY5FPbUNuzuo83Y5l9tkJ9L5kSKHpWXqE0IWD9MW3jzxVfma/WgVUbnwQ0nn1X8r1rcBez8niUDmf/IAoxgvyEar8WUqJNSMk/0S74ZheEN8Ml3fN3u+leMZOAjUNIu9bTjXyqzvnWsJeYUrxabNi05FMYw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176843622362660.78118082803019; Wed, 14 Jan 2026 16:17:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2J-0006iE-JF; Wed, 14 Jan 2026 19:16:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2I-0006bm-1N for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:26 -0500 Received: from p-west3-cluster6-host1-snip4-5.eps.apple.com ([57.103.75.68] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2G-0001z2-BW for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:25 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id D48FA1800413; Thu, 15 Jan 2026 00:16:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 20F3F180043D; Thu, 15 Jan 2026 00:16:13 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=4Um6hRxHh4BMXdx4GLCdFkThKG/poHmK1RPmbKL0RKU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=JVAjuVAtCE+83F6oFz892g5wC7P6G+rQzbCtqwST+dEhLeUuRgXC1xb7l+a/+9/1T5TsuMaF8KD/coun0R7geLNmPSGlW2HUIwuSB+k83+BtiiEPahCtwk+4DM+TlEfmyNHmhcK6kKdV9UNVs1a63ria5uzq6d7ts3FWwN+FJApF5Neh88PSwikpI4yOBRzCrU2uurnEZQEhJL8/hu7QpERKLl4g6O92fUC9G1wGFnEj7/ISbnfVCjOOcX0f3FGMdb4468iMI8ZSWvGdXy8vtKfkDKtlHP9F/gKxJNPxGStVU1q5qpBrrr4po+H7gEmbNG5I/FOATFyjTUyapOcc5A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 11/26] whpx: ifdef out winhvemulation on non-x86_64 Date: Thu, 15 Jan 2026 01:14:50 +0100 Message-ID: <20260115001505.57237-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=dJCrWeZb c=1 sm=1 tr=0 ts=696831d5 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VExx-Oqz_yhFp4n2Ql0A:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: qS3gXXQQ8c9Sjt7JlzrmSzD6LgnipskV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX5lc18MFdaxcF +9a/xtCTrCaQ+FLRUsEPxUJXAe+GMxnQtQ8DOKBMZ3Tv/L9T+QzHNT1DkPR30x60Joqe5prNZjo vMebNbVHB/TKvomvuXW8EJFSmKdW+vr/t8CNGPsUmjp8znVhDaJsqSMdsQ2ZlQM6ufOZfuI+Ftq RHGnNiGavgZ2sQpUOJDclRc/8YvvdlSs686970DLLehfDHu0cjZOFT/XNVwAiTn1pO6B10iLqnu BHCYVZNu5P0jyLmXfnluiv7oVVr3GBlwqJcWewONNBjS775l6ZTaf4qRk0ipP32TyyIffwij0r+ 4NL3Npm3gZZX/ywaxIU X-Proofpoint-ORIG-GUID: qS3gXXQQ8c9Sjt7JlzrmSzD6LgnipskV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 mlxlogscore=963 malwarescore=0 mlxscore=0 spamscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABnlLcDfPeZ6GG5cU1t0SDj6PrXeSzTqm9IJ6xGJf0IB54zc/gbMiWh+bE9xCdDlnQ0x5/5B72hBM8poAmJVNvohT++0GQy5x/u34/dXV+KRc6qFKoCx0qtHjpVslvDUm19HeXZuAkN+arRtXiCUh/A3C6wemV5a41VEKs+3wqYOxnYpe5FzM1mwDJWDi5SyGTW8fNo5fCuKR3fHoc+O0VucDPCKgyLjubJiRUbtVa1R2P4unavdMLbQbqVa0lCSxW5NYmsjBZh2cW1/hahQWJRCHDu1hHOlhhMbMMvf2BVZmbDavLtRoF03dzpxhzTYiYpQFtjbiUcNbpWAgo8pzVSqO44pMGB2ALPgH53xgX5JTF8a7CY+L/FDwTNrTLjBieE+hjbwwRNynut1AzVgmEdyTccrQH7LrAD9s53a3juoPk+rkomyuX1KQb8qAxHjkDDYYqB5ptbW6C7QLqno3Wrbn0B6mKW9pmevG4dXE+la6KWFIBoCyEA5Uvn6rK6mbKK/XssLGw4TTAYfnkuyUr5kuQqlxaqDkXsAt12BPTpDrjC+vIj1uP3jHsOpdFS9uiW4QSJQtyu9UMCR7wJH/zbeyS+U4FEJBThJy/yP20E9lj1pyNug2nZ1sklI0UEYD6YJkjUWdFZSRIkorjxZy9m95d7mROu5P3RSW7HDPbofYmiIbNl3tP3IiKDyYTodJzaU7v1CHbBN1+ct+o+/aNUvpLIN1qjtWlULk7gya1jEGP22iDziOpMDefhgNKqKrURpVVPD0TUNvO6I5BrEjYFH+p63rbsTfzJu1dMRa1sbgO3zJ6yUeJmweFTG7tmeMaehzibEoCjMBfZkbGACLx4kiG9WIIrmeHdSI7+FWxTWpnVGm8HyaepmnFj5fmVsTZZuwYrrrZm+qnjA+QdcUqr4Gp106Do/xqX4HP53PkCGuvC1OO2Zo= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.75.68; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436224359158500 Content-Type: text/plain; charset="utf-8" winhvemulation is x86_64 only. In the future, we might want to get rid of winhvemulation usage entirely. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 14 ++++++++++++-- include/system/whpx-common.h | 2 ++ include/system/whpx-internal.h | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 0a6068fdde..c58344cb61 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -37,7 +37,9 @@ bool whpx_allowed; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; +#ifdef HOST_X86_64 static HMODULE hWinHvEmulation; +#endif =20 struct whpx_state whpx_global; struct WHPDispatch whp_dispatch; @@ -232,8 +234,10 @@ void whpx_destroy_vcpu(CPUState *cpu) struct whpx_state *whpx =3D &whpx_global; =20 whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); +#ifdef HOST_X86_64 AccelCPUState *vcpu =3D cpu->accel; whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); +#endif g_free(cpu->accel); } =20 @@ -408,8 +412,12 @@ static bool load_whp_dispatch_fns(HMODULE *handle, LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) break; case WINHV_EMULATION_FNS_DEFAULT: +#ifdef HOST_X86_64 WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) +#else + g_assert_not_reached(); +#endif break; case WINHV_PLATFORM_FNS_SUPPLEMENTAL: WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) @@ -535,11 +543,11 @@ bool init_whp_dispatch(void) if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { goto error; } - +#ifdef HOST_X86_64 if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { goto error; } - +#endif assert(load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_SUPPLEMENTAL)); whp_dispatch_initialized =3D true; @@ -549,9 +557,11 @@ error: if (hWinHvPlatform) { FreeLibrary(hWinHvPlatform); } +#ifdef HOST_X86_64 if (hWinHvEmulation) { FreeLibrary(hWinHvEmulation); } +#endif return false; } =20 diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index e549c7539c..8f171d1397 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -3,7 +3,9 @@ #define SYSTEM_WHPX_COMMON_H =20 struct AccelCPUState { +#ifdef HOST_X86_64 WHV_EMULATOR_HANDLE emulator; +#endif bool window_registered; bool interruptable; bool ready_for_pic_interrupt; diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 041fa958b4..609d0e1c08 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -4,8 +4,9 @@ =20 #include #include +#ifdef HOST_X86_64 #include - +#endif #include "hw/i386/apic.h" #include "exec/vaddr.h" =20 @@ -101,12 +102,16 @@ void whpx_apic_get(APICCommonState *s); =20 /* Define function typedef */ LIST_WINHVPLATFORM_FUNCTIONS(WHP_DEFINE_TYPE) +#ifdef HOST_X86_64 LIST_WINHVEMULATION_FUNCTIONS(WHP_DEFINE_TYPE) +#endif LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_DEFINE_TYPE) =20 struct WHPDispatch { LIST_WINHVPLATFORM_FUNCTIONS(WHP_DECLARE_MEMBER) +#ifdef HOST_X86_64 LIST_WINHVEMULATION_FUNCTIONS(WHP_DECLARE_MEMBER) +#endif LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_DECLARE_MEMBER) }; =20 --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436302; cv=none; d=zohomail.com; s=zohoarc; b=TYpc3+E0e/YAPY+j9fxg0Y/67wkbM1dlo/amvcxQXj0wZ9rOWfkPCggt5UlTXy+VzoUQaECtfkXY8Q5CvrNBsZ1xukLeJ7D/5j11pf0ThFrw+yj/td/hdKLf5xn6jJAwqdK14cJNAmNCBS8kyIhlRj1i9QCdl3UK1EE9KvFQghc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436302; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=usn+5WRKOGJaDLoRmA1S0SGx2PVU5yWwDmjw2JCpvZ4=; b=JDid1Y0ZE1+C+re2M7s2zkIoDJH0yWg4rqkZ4s5wrt3aIPEKPt18qZymjG1SII99U2y3ZdueKuHoSqSdVSosBj7F8XLBV9bnCgazV2Iym44CI0SBSSCmKc+NJiSdLD5phckJNZSBIuFKWTYMlPHO7hAep7XxXzQsH/MhcOeQMwU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436302089388.5900797714354; Wed, 14 Jan 2026 16:18:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2S-0006w0-22; Wed, 14 Jan 2026 19:16:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2N-0006qS-P3 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:31 -0500 Received: from p-west3-cluster6-host10-snip4-4.eps.apple.com ([57.103.75.97] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2M-00020D-5x for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:31 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 3FD6A18000EF; Thu, 15 Jan 2026 00:16:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 75C4A18000B2; Thu, 15 Jan 2026 00:16:20 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=usn+5WRKOGJaDLoRmA1S0SGx2PVU5yWwDmjw2JCpvZ4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=YRry34nI0UaIfVA5RWAf4qX7eDASWHrKRcSfMXXqNY3q5eyyAdVsLZ9shPkqCirEpz0lHlgmXIPJjZu2u+0lpPWExzQp66D5fQ6HM+aA2S2ZOkYfpoyIgRa62/9puM9pdGk4eabBNJnvburaBbqYuxFou+YpL3ziUjCsT8yAYnnRxUnczqT+LM4bd75he8CrckeZJold7m6VRXuvmVXKu9POsfrtE6MPSgHm/xb15dkpU80evQPedIV+8cVXpxq1TiTUss7kiRPHqjjF1l7UCeiArYJP+Kb2jMtwiwQgEYnm05FlYciT6ZBo40IIYYJEfM09PbTgr3tlvjaIoGOyGg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 12/26] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Date: Thu, 15 Jan 2026 01:14:51 +0100 Message-ID: <20260115001505.57237-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: lrsEPbI1MGdoxhRIMXUggJzB9gMwsyOD X-Authority-Info: v=2.4 cv=L48QguT8 c=1 sm=1 tr=0 ts=696831dc cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2psWIPzlEfUqwKpUe20A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXwkbnfNnxfo9u R5FN8IaCdOVfrCNjUusrRZLmtxKEGOL3rHtmrs9R1YRzCg9Gh9/VO2jQkQXTO/l1FGz4T7sDlSd D6H00U9Gg7Njvz7GdJ7/j6k4pGG3jeuqJZxHAkT0svxLyHEQVlcgqqK+16srzV6Tp2inSJINxbD C4C4yjKT3Ob1uG+1Rz0KOPvwvrWPCIlvkvouk6Vhi6ifjYuDlh/eWpQpdlo69I+x997urkXbCAE BM9iUStL7tkf4NCyv1z2ogvUvbOWey2HYMk1hSjV5kwm3IMFJSn+39yalEHXvMOysrHZNZuXLIi YxrAbPLO0yaTLcyl36Y X-Proofpoint-GUID: lrsEPbI1MGdoxhRIMXUggJzB9gMwsyOD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 clxscore=1030 spamscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABgeKrtCuXGb3tbzsgH7re08hyLgfx35B/++oY15bD9dhTIXBb6g6P9odb5XiBJ4ivpBMzh7NVuMYYCm5WNKI1NBdHAh5WaR+Q0KCSDHQhbDra5AS1IYs3u/6tOKSYrqBrb9pj7wBZu80bP82hXPzu/UKPsE3QhRJgwxDCMUP2rpwWeWQ4lwJEG5suOZwCeHFyn83hDvdOO1v8Pe0GUvFDEiX5yUFGpnNvamw/QpmhFFwU/yPYbLfeLfcPqtHwwV0ghWh++cPLl1GPaNy1ShwC3YbIV8eZGu69NhXPBG5pKQXtljrNXdEOCAd75DXmLkQDi5qHkAwMf5+GsOPy/AffTEfzNuomTtTVXhfvT16vouZtt4PjFHRiAX36EV8GftDgZWt8Gd8pJEBF3KwGKsBgxyEsMBFtCckM3WC78aKh0jSaeJijDW41B9/taZYUEdPVJBJqTGVMjqsQ3erJhzHcQBEOMDvaswkF6NsKI5CC7xGEVuwabkQI9E/0+kHIA3F8Qr0PPYOn8Rj61hXT/N2C3avAY5ypnZkuTxoq5iExLith1rErYNA2tsVX6MwqJFeb9QS8xEBmZLyZRCMkJ9miFsV/XSITwF8IHV7iCMLIVQm5nt2WFTUBF0JHipp3jjnvR4a0yEd3dVik1C+7aWtrTd8RdqBkD2UQ6DWfjZVs4wNcnLkEU5G9R4nhfajCY3UVRJWecF73gAhzCVFeaXhxud1WiIeg+8pF90GSDT6s+ayFQn+6NdbXFaw4bksNKwW5VIjPAcXTVkLsR6myG7Sb3CPXofcpBnmIZQmR0kQYbkEOPVe4u2aQPLbQPLDoCJdZsYpdI/grdjJsrHu25/bwB6k3y+NkDtfaFc5gT5mJ4IOs2jgirVghyzv5kl6pdvewkoTqjnsH+5ytByBEnDQoAPLAlGc62SLz4RSVGy0Pl1hmKSB8/593aKC/8UfzhL09SMRUWcY= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.75.97; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436302201158500 Content-Type: text/plain; charset="utf-8" As of why: WHPX on arm64 doesn't have debug trap support as of today. Keep the exception bitmap interface for now - despite that being entirely u= navailable on arm64 too. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 2 +- include/system/whpx-common.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index c58344cb61..c0610815d9 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -119,7 +119,7 @@ int whpx_first_vcpu_starting(CPUState *cpu) * have one or more breakpoints enabled. Both require intercepting * the WHvX64ExceptionTypeBreakpointTrap exception. */ - exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; + exception_mask =3D 1UL << WHPX_INTERCEPT_DEBUG_TRAPS; } else { /* Let the guest handle all exceptions. */ exception_mask =3D 0; diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index 8f171d1397..b86fe9db6e 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -20,4 +20,7 @@ int whpx_first_vcpu_starting(CPUState *cpu); int whpx_last_vcpu_stopping(CPUState *cpu); void whpx_memory_init(void); struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address); + +/* On x64: same as WHvX64ExceptionTypeDebugTrapOrFault */ +#define WHPX_INTERCEPT_DEBUG_TRAPS 1 #endif --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436224; cv=none; d=zohomail.com; s=zohoarc; b=eOlyw74S3AD0D3rDjiXGvqQpdn6r71Gdob2MMuon9T7p4JkmRP1KQkXJRqhQD8cZXPfrzyQEktCK3y9FqLH100coX+U7Lp5p0r1OqguvqacKusac/dbtOHXlNMRR/kCE1hFoauPJ1T9E6cU/9At9GiSXnpzzG852zlGDYbe/yU4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436224; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hnr/l3fVCXOwiitRXS2ohIqOEeTiZCS04hRdJTWOeH0=; b=jp8NMyughrOOCV5rEDNYxwSgO7RRS21IPKMo5rfrQvPadKBqidcoqH2fj4Ixd89UGYsyzuIfFNuYu9ggZCp1JqC5x50kn6g2UmKE+LlYlNlYy66eKE+2uBW3LnoUKOV6r2Q5rQiOv+9P8pf/XqNfgS1rZ4klvumwRJr54AUD/0o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176843622449859.443006311564886; Wed, 14 Jan 2026 16:17:04 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2Y-0007Hl-Ig; Wed, 14 Jan 2026 19:16:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2T-00074V-K7 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:37 -0500 Received: from p-west3-cluster6-host10-snip4-2.eps.apple.com ([57.103.75.95] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2R-00020y-PI for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:37 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id B49C618000C4; Thu, 15 Jan 2026 00:16:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 187AE180043D; Thu, 15 Jan 2026 00:16:25 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hnr/l3fVCXOwiitRXS2ohIqOEeTiZCS04hRdJTWOeH0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=fg9EAdV0xalCu/1c0CtLBCMCzG7h8K9g2HZL0GIZ2Ftn6DZpI75ua+GtY+uNcU+qiGnsXESOwUXX6VahosQduCdGrJsZsQyDauTUjzkmm/qtGuUesx9nqx44eI56qobqdH2Q+mvXH29EBehpYf7RXKUDlU5lAA+NmagFk4Kw0EGVbtVLgTSVG7fJ/OnujJugfQQCMqg1IR36uo00pwmF8BtsBOE5vS1zuda/4EVLLprejFy8Qo4pqxjy81rhIOXh9E5trOvC7p5T3PNan+F7JdWgnd7fy1oxWIEJ7B3SbwIxYFlopkdEmVyhRR99eESNmfTLkl89JX/zSBFMqCQyzQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 13/26] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Date: Thu, 15 Jan 2026 01:14:52 +0100 Message-ID: <20260115001505.57237-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: iBGN_li5u8YLuMJsd4DH4YCbK_irgR3Q X-Proofpoint-ORIG-GUID: iBGN_li5u8YLuMJsd4DH4YCbK_irgR3Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX24TN05R4ENHS fFlLYipcMAMrN8FGdj3oVKNyJNYOS/w59IfHU1YXXyva9T7BjA6Qhbt84i/ir1db1/VMNMR8EmQ 9DJIsUsiJl5zJwalH8XDeXvqWM9eufy1MoJjVgAilEZX8hklAqs99HFih65qc5V3NyD2KQhGO+A nKyZYwaXyyz7jMt9KouctYrkjptn+FfBulUuTTxYnRDLbKJHFFZXgUJw0V5z4QwHn5l7BPbK6yz lbmxD07W0WfizNLOZSwZOJjB6kZULi5RsoMx6yQq5+M8iu2EdvZwwkpscIL9nxqbU3FFtNzblom OYmPj+jtkNS7MfSmiKi X-Authority-Info: v=2.4 cv=dO+rWeZb c=1 sm=1 tr=0 ts=696831e1 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ogbMO5OAvhA2mBZm2BUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 spamscore=0 adultscore=0 mlxscore=0 malwarescore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABaeZEPX8NT23lpLfbGhVSrcnuZLTs6+eyBSm0mA7yYmcJlTmM4yo/wGAGnVCuzC/NNbl7fva6VSUE/dHtLhM5LrZLURqFEwVbtWDILbUQc79Nmh/75DuKxZo+buqqnX3jW+Czbw5oWOmcc02H8U5zb8ax/b8Zg3GzY3e/dUNDXUGv+Ou6vaxjoFR/l47uIZThi3ftz2Ux2HbrtWeG1eTTM/qJDnV9G0Eh1TH95dAzUuip30pY67JypJ5Toc9zucKzb4GdZQDF8xxG0M/jxDMCfYdExxeEkWUuNsFUZtR9CvybShRjQXDUU/U46WNOYBD/T7IKyHj0vU9xoUaPU48K3yLz3BXCeOyiV8KBaNgGkvvD0I1RtAtUU5KHccPxzWpvhlfzRtPg0ufN0jivKjv4hI70SjlD9IMSPfTFUvQQ2gJRdu7Qy4P2stjFM70MBz/cEM5sA1v1z64/ytcIgUkvdWtWwE6wmAI5lPiIBVX3S8zMQz3B4osUfR+EkIu4JxEYOK1kTZa7i6/EICc851JJ3KgUuehT5XyNG3+s4EE3NnlAcq7+YzsMr7N9UdI3kagPqBmGqnUDWRBA6nee55VvcQeTU92W9lg0EN96UQoSARG6PmbvLxbEExbR/oyXboSaHokcg58GSmQee62xYJ5G0ioISi1Ya6CrYs3yX3JynSoPUJLkJbtSaHu2KikOxyiKeQ3m/B7Ao+3Wxj2uPFaL2CiLCDCv8BrjfcKzLlYZSo3njHQhZzLHvnoVUfPcSb6WDgEKSlbZC2jM3NrEYsLdlw2hRDItKklFw3gO1hLImkN6MiJtsOwB/fPPswKSRcULWyrQOO3Lt4cc81COyjsBsYYi6bn2YgfsB18TYxs7jwg2Zi1rWKpw2P3cWol/G+51GRYtD3GPMt0s+hutnMesYDZ+mijF6OicL6qVw/oiWgr2zzkjYR0RT0Hm//rQgjBoerxt Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.75.95; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436225986158500 Content-Type: text/plain; charset="utf-8" Change terminology to match the KVM one, as APIC is x86-specific. And move out whpx_irqchip_in_kernel() to make it usable from common code even when not compiling with WHPX support. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/stubs/whpx-stub.c | 1 + accel/whpx/whpx-accel-ops.c | 2 +- accel/whpx/whpx-common.c | 10 +--------- hw/i386/x86-cpu.c | 4 ++-- include/system/whpx-internal.h | 1 - include/system/whpx.h | 5 +++-- target/i386/cpu-apic.c | 2 +- target/i386/whpx/whpx-all.c | 14 +++++++------- 8 files changed, 16 insertions(+), 23 deletions(-) diff --git a/accel/stubs/whpx-stub.c b/accel/stubs/whpx-stub.c index c564c89fd0..4529dc4f78 100644 --- a/accel/stubs/whpx-stub.c +++ b/accel/stubs/whpx-stub.c @@ -10,3 +10,4 @@ #include "system/whpx.h" =20 bool whpx_allowed; +bool whpx_irqchip_in_kernel; diff --git a/accel/whpx/whpx-accel-ops.c b/accel/whpx/whpx-accel-ops.c index c84a25c273..50fadea0fd 100644 --- a/accel/whpx/whpx-accel-ops.c +++ b/accel/whpx/whpx-accel-ops.c @@ -78,7 +78,7 @@ static void whpx_kick_vcpu_thread(CPUState *cpu) =20 static bool whpx_vcpu_thread_is_idle(CPUState *cpu) { - return !whpx_apic_in_platform(); + return !whpx_irqchip_in_kernel(); } =20 static void whpx_accel_ops_class_init(ObjectClass *oc, const void *data) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index c0610815d9..05f9e520b7 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -35,6 +35,7 @@ #include =20 bool whpx_allowed; +bool whpx_irqchip_in_kernel; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; #ifdef HOST_X86_64 @@ -488,15 +489,6 @@ static const TypeInfo whpx_cpu_accel_type =3D { .abstract =3D true, }; =20 -/* - * Partition support - */ - -bool whpx_apic_in_platform(void) -{ - return whpx_global.apic_in_platform; -} - static void whpx_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); diff --git a/hw/i386/x86-cpu.c b/hw/i386/x86-cpu.c index 276f2b0cdf..95e08e3c2a 100644 --- a/hw/i386/x86-cpu.c +++ b/hw/i386/x86-cpu.c @@ -45,7 +45,7 @@ static void pic_irq_request(void *opaque, int irq, int le= vel) =20 trace_x86_pic_interrupt(irq, level); if (cpu_is_apic_enabled(cpu->apic_state) && !kvm_irqchip_in_kernel() && - !whpx_apic_in_platform()) { + !whpx_irqchip_in_kernel()) { CPU_FOREACH(cs) { cpu =3D X86_CPU(cs); if (apic_accept_pic_intr(cpu->apic_state)) { @@ -71,7 +71,7 @@ int cpu_get_pic_interrupt(CPUX86State *env) X86CPU *cpu =3D env_archcpu(env); int intno; =20 - if (!kvm_irqchip_in_kernel() && !whpx_apic_in_platform()) { + if (!kvm_irqchip_in_kernel() && !whpx_irqchip_in_kernel()) { intno =3D apic_get_interrupt(cpu->apic_state); if (intno >=3D 0) { return intno; diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 609d0e1c08..8ded54a39b 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -45,7 +45,6 @@ struct whpx_state { =20 bool kernel_irqchip_allowed; bool kernel_irqchip_required; - bool apic_in_platform; }; =20 extern struct whpx_state whpx_global; diff --git a/include/system/whpx.h b/include/system/whpx.h index 00f6a3e523..4217a27e91 100644 --- a/include/system/whpx.h +++ b/include/system/whpx.h @@ -25,11 +25,12 @@ =20 #ifdef CONFIG_WHPX_IS_POSSIBLE extern bool whpx_allowed; +extern bool whpx_irqchip_in_kernel; #define whpx_enabled() (whpx_allowed) -bool whpx_apic_in_platform(void); +#define whpx_irqchip_in_kernel() (whpx_irqchip_in_kernel) #else /* !CONFIG_WHPX_IS_POSSIBLE */ #define whpx_enabled() 0 -#define whpx_apic_in_platform() (0) +#define whpx_irqchip_in_kernel() (0) #endif /* !CONFIG_WHPX_IS_POSSIBLE */ =20 #endif /* QEMU_WHPX_H */ diff --git a/target/i386/cpu-apic.c b/target/i386/cpu-apic.c index eeee62b52a..50a2b8ae86 100644 --- a/target/i386/cpu-apic.c +++ b/target/i386/cpu-apic.c @@ -32,7 +32,7 @@ APICCommonClass *apic_get_class(Error **errp) apic_type =3D "kvm-apic"; } else if (xen_enabled()) { apic_type =3D "xen-apic"; - } else if (whpx_apic_in_platform()) { + } else if (whpx_irqchip_in_kernel()) { apic_type =3D "whpx-apic"; } =20 diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 052cda42bf..8210250dc3 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -607,7 +607,7 @@ void whpx_get_registers(CPUState *cpu) hr); } =20 - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { /* * Fetch the TPR value from the emulated APIC. It may get overwrit= ten * below with the value from CR8 returned by @@ -749,7 +749,7 @@ void whpx_get_registers(CPUState *cpu) =20 assert(idx =3D=3D RTL_NUMBER_OF(whpx_register_names)); =20 - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { whpx_apic_get(x86_cpu->apic_state); } =20 @@ -1379,7 +1379,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) } =20 /* Get pending hard interruption or replay one that was overwritten */ - if (!whpx_apic_in_platform()) { + if (!whpx_irqchip_in_kernel()) { if (!vcpu->interruption_pending && vcpu->interruptable && (env->eflags & IF_MASK)) { assert(!new_int.InterruptionPending); @@ -1553,7 +1553,7 @@ int whpx_vcpu_run(CPUState *cpu) =20 if (exclusive_step_mode =3D=3D WHPX_STEP_NONE) { whpx_vcpu_process_async_events(cpu); - if (cpu->halted && !whpx_apic_in_platform()) { + if (cpu->halted && !whpx_irqchip_in_kernel()) { cpu->exception_index =3D EXCP_HLT; qatomic_set(&cpu->exit_request, false); return 0; @@ -1642,7 +1642,7 @@ int whpx_vcpu_run(CPUState *cpu) break; =20 case WHvRunVpExitReasonX64ApicEoi: - assert(whpx_apic_in_platform()); + assert(whpx_irqchip_in_kernel()); ioapic_eoi_broadcast(vcpu->exit_ctx.ApicEoi.InterruptVector); break; =20 @@ -2187,7 +2187,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } } else { - whpx->apic_in_platform =3D true; + whpx_irqchip_in_kernel =3D true; } } =20 @@ -2196,7 +2196,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) prop.ExtendedVmExits.X64MsrExit =3D 1; prop.ExtendedVmExits.X64CpuidExit =3D 1; prop.ExtendedVmExits.ExceptionExit =3D 1; - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { prop.ExtendedVmExits.X64ApicInitSipiExitTrap =3D 1; } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436254; cv=none; d=zohomail.com; s=zohoarc; b=Bxe1SfcSB5UZIHBrBp+tb7xQejqxHws31oZP5z2t5flgH0ktGZNtYRcd2rhhhLUcArDFeyBA5eUJucip7YVtYqJkT3NGnRLrzE5vG+JJTM4pq0rD+hapb72NzIYjMjOVui6ye5fgd/K5aQO2/LR3GI40C3hn0GxzpmfqjI43ZiY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436254; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fu88LVAa0+MC/QVWXVtWIGnbFWyyMCSt7DGWHrjRS7c=; b=a8drMl/CqMiqJ3N78ElS9TZ05RKs4tEj1bKdNYoEt+pqJVAw3VCwgscEqAJEQR2/R+tG687bNC1Q9NMbTVRbnVEH6mWuzwXki0NfUXClcsX7RC2RK1jmxA3jTzaMAJiu8a2fiE87AO/dwUrOBizFYKyT/AFTjGN+2MkGmWMpH8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436254188809.5053799087015; Wed, 14 Jan 2026 16:17:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2c-0007nC-81; Wed, 14 Jan 2026 19:16:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2a-0007aK-NE for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:44 -0500 Received: from p-west3-cluster6-host5-snip4-2.eps.apple.com ([57.103.75.105] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2Y-00021v-GW for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:44 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id BBCCD180043D; Thu, 15 Jan 2026 00:16:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 8E55318000B5; Thu, 15 Jan 2026 00:16:31 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=fu88LVAa0+MC/QVWXVtWIGnbFWyyMCSt7DGWHrjRS7c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=e95GOKFv3h1a0u4Kj6O0hwWy/hEwkXXpoVxxVBJVwvajcNHPSX8+Hm04ARN9EFtpQa4IUDXTp0UVW3fVRr7WUKjSFOO3juJeYiXtpMH9ry8MUgIO5hF/W++0Yi1iUaKiZ8onYSrTVF1sPVBsWLA8mjlETawlyOHuAEWKeInoqWnCPwHE29NCayBWKXumaKZDGMKqIJOhsWQz3P2kM037swQ+g5nnexihJGawqhmwDm6Ynukw8LI/QZwZGWxoZVvHFs1ZVWq2ISaSS07QYDgL5LQWAxDYF+YuOd8jQhCcbVpwtqkBlR4RVS0T2KzvgYJAFe9EW52ScQepfyDqjOpxqw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 14/26] whpx: interrupt controller support Date: Thu, 15 Jan 2026 01:14:53 +0100 Message-ID: <20260115001505.57237-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 0bQnvV08Z2MjFPspQRmvtXxzOOeGhxeu X-Authority-Info: v=2.4 cv=VLvQXtPX c=1 sm=1 tr=0 ts=696831e5 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=flZNgbgI_Ya0FyYah8EA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 0bQnvV08Z2MjFPspQRmvtXxzOOeGhxeu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXyBroWFf8efUp JsacyeFQhWV13sYH2hgVIO9pwqo8bZoONv3BPgufqaYdgouwu31x8oq9oMDoafJigoBLgN0inN/ 9vhrBCrlDDE1T8FWW4bX9q0GGxaj8ECLcwi0TBv+nac9uSv7eq0xzsjMMfNtBPW0qTPfxVeeSh2 MOWMch8iW+N5kodtJPnDqH72nyrqI4ytLs6GHK7oFPdeVtrIOB4ZcSCeIRaTj2Y7VJV94YfQgy1 +m106XbMvOiUnTEYSw3IHFpArpXmKjSyoWS/A7pG/hGLqFgQREt6ZxQg9GwYtYnqMTFDV9bVBaH s1eQPul4yrrfPHzSlkG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 bulkscore=0 mlxscore=0 clxscore=1030 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABq74wCZ/otb5JIXwRhzABvR3ntBwSslPx39wqgj0waS3Jvx2rggQNm2ikZoByAg6+QGVeUFovNhpAoaYxULl+Q3FjaA70RJjqaV66Ad4qAjfShfijmlpM1/3pbmHfpU5G2E/T4Ch9Un8hl4OG1uZmpizvg9HNhP/fnB5zNEnEnLJ0Omb3UACubLbTwBDWptrjQK/5/F3Cgdd9Squ+xppbCm6S3cRPZg3iKd2/PtznsxOOb8Z+okwvAmK+qGF6Ww6+3ZI7DeWZ1gioMsSdkxg4YybITKx4jioWKif1W8bnXtwgqQZxXkXUc5JBs2z2Eg3+P0hNnV1Trv82c2pL0Wzuq3NjLECk9GaqffsmU0UtTlUdutvMc6yEzuJkS2/L2uKyVQsIyBmQIIMXOGPV8pb34bHZK36P+PIuFBPA8AvxLi0cOw84MD1vpzFg2oLmY51k5BYB5p5O/49URN9CbtnUpp82gV7Q75Y5jInJrqw1XRY3LucBkce1qL+He9pfXOdgS6I92CA7Ma24hn/oMJ0DN8x9FHwOBpKfN8SPC26cTeTI17Q8NsfSY1UWdcUDfZyegCsElaTUXnFhwD2Y1LHo9NYk2VA03wqAzegg5MoXWZCsJORAPTAP2tx4Nxddhbh7H/4LSrzfDVQUUetTdpJGYwgzCJh078EIRAjnvHtdC2glFYqTrDvZQQGQWgnvW53yE3Br6s6auA20SRBZwgyP1nDtI0SNBCHfUcxGplr0nxEcy6JTwwN9N2QDZTRL13FCx7kekuVs7RfzQK8yoHx26e7FtiIcMxU9N3nJNW/JENnu6m0HhDL3k7uUENIszk3VQ3AUk3dbrohelG1e0Hi4dSih05CTLWsKa4RSMdS88BXbPFX6e/CsAfOPXT6YHydMEZ8+tmJc8QgMZxN1pT8FnunC/5Mnvq/jwbThdmXzIzx28GNChYwJLjns5r5vuv3w4JAi4Q== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.75.105; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436256218158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt.c | 3 + hw/intc/arm_gicv3_common.c | 3 + hw/intc/arm_gicv3_whpx.c | 239 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 249 insertions(+) create mode 100644 hw/intc/arm_gicv3_whpx.c diff --git a/hw/arm/virt.c b/hw/arm/virt.c index bc0d54eb7c..b51c97a020 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -49,6 +49,7 @@ #include "system/tcg.h" #include "system/kvm.h" #include "system/hvf.h" +#include "system/whpx.h" #include "system/qtest.h" #include "system/system.h" #include "hw/core/loader.h" @@ -2117,6 +2118,8 @@ static void finalize_gic_version(VirtMachineState *vm= s) /* KVM w/o kernel irqchip can only deal with GICv2 */ gics_supported |=3D VIRT_GIC_VERSION_2_MASK; accel_name =3D "KVM with kernel-irqchip=3Doff"; + } else if (whpx_enabled()) { + gics_supported |=3D VIRT_GIC_VERSION_3_MASK; } else if (tcg_enabled() || hvf_enabled() || qtest_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_2_MASK; if (module_object_class_by_name("arm-gicv3")) { diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 0a2e5a3e2f..9054143ea7 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -32,6 +32,7 @@ #include "gicv3_internal.h" #include "hw/arm/linux-boot-if.h" #include "system/kvm.h" +#include "system/whpx.h" =20 =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) @@ -663,6 +664,8 @@ const char *gicv3_class_name(void) { if (kvm_irqchip_in_kernel()) { return "kvm-arm-gicv3"; + } else if (whpx_enabled()) { + return TYPE_WHPX_GICV3; } else { if (kvm_enabled()) { error_report("Userspace GICv3 is not supported with KVM"); diff --git a/hw/intc/arm_gicv3_whpx.c b/hw/intc/arm_gicv3_whpx.c new file mode 100644 index 0000000000..f34f841a4a --- /dev/null +++ b/hw/intc/arm_gicv3_whpx.c @@ -0,0 +1,239 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support + * + * Copyright (c) 2025 Mohamed Mediouni + * Based on vGICv3 KVM code by Pavel Fedin + * + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/intc/arm_gicv3_common.h" +#include "qemu/error-report.h" +#include "qemu/module.h" +#include "system/runstate.h" +#include "system/whpx.h" +#include "system/whpx-internal.h" +#include "gicv3_internal.h" +#include "vgic_common.h" +#include "qom/object.h" +#include "target/arm/cpregs.h" + +#include "hw/arm/bsa.h" +#include +#include +#include + +struct WHPXARMGICv3Class { + ARMGICv3CommonClass parent_class; + DeviceRealize parent_realize; + ResettablePhases parent_phases; +}; + +OBJECT_DECLARE_TYPE(GICv3State, WHPXARMGICv3Class, WHPX_GICV3) + +/* TODO: Implement GIC state save-restore */ +static void whpx_gicv3_check(GICv3State *s) +{ +} + +static void whpx_gicv3_put(GICv3State *s) +{ + whpx_gicv3_check(s); +} + +static void whpx_gicv3_get(GICv3State *s) +{ +} + +static void whpx_gicv3_set_irq(void *opaque, int irq, int level) +{ + struct whpx_state *whpx =3D &whpx_global; + + GICv3State *s =3D opaque; + if (irq > s->num_irq) { + return; + } + + WHV_INTERRUPT_CONTROL interrupt_control =3D { + .InterruptControl.InterruptType =3D WHvArm64InterruptTypeFixed, + .RequestedVector =3D GIC_INTERNAL + irq, + .InterruptControl.Asserted =3D level + }; + + whp_dispatch.WHvRequestInterrupt(whpx->partition, &interrupt_control, + sizeof(interrupt_control)); +} + +static void whpx_gicv3_icc_reset(CPUARMState *env, const ARMCPRegInfo *ri) +{ + GICv3State *s; + GICv3CPUState *c; + + c =3D env->gicv3state; + s =3D c->gic; + + c->icc_pmr_el1 =3D 0; + /* + * Architecturally the reset value of the ICC_BPR registers + * is UNKNOWN. We set them all to 0 here; when the kernel + * uses these values to program the ICH_VMCR_EL2 fields that + * determine the guest-visible ICC_BPR register values, the + * hardware's "writing a value less than the minimum sets + * the field to the minimum value" behaviour will result in + * them effectively resetting to the correct minimum value + * for the host GIC. + */ + c->icc_bpr[GICV3_G0] =3D 0; + c->icc_bpr[GICV3_G1] =3D 0; + c->icc_bpr[GICV3_G1NS] =3D 0; + + c->icc_sre_el1 =3D 0x7; + memset(c->icc_apr, 0, sizeof(c->icc_apr)); + memset(c->icc_igrpen, 0, sizeof(c->icc_igrpen)); + + if (s->migration_blocker) { + return; + } + + c->icc_ctlr_el1[GICV3_S] =3D c->icc_ctlr_el1[GICV3_NS]; +} + +static void whpx_gicv3_reset_hold(Object *obj, ResetType type) +{ + GICv3State *s =3D ARM_GICV3_COMMON(obj); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_GET_CLASS(s); + + if (kgc->parent_phases.hold) { + kgc->parent_phases.hold(obj, type); + } + + whpx_gicv3_put(s); +} + + +/* + * CPU interface registers of GIC needs to be reset on CPU reset. + * For the calling arm_gicv3_icc_reset() on CPU reset, we register + * below ARMCPRegInfo. As we reset the whole cpu interface under single + * register reset, we define only one register of CPU interface instead + * of defining all the registers. + */ +static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { + { .name =3D "ICC_CTLR_EL1", .state =3D ARM_CP_STATE_BOTH, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 12, .crm =3D 12, .opc2 =3D 4, + /* + * If ARM_CP_NOP is used, resetfn is not called, + * So ARM_CP_NO_RAW is appropriate type. + */ + .type =3D ARM_CP_NO_RAW, + .access =3D PL1_RW, + .readfn =3D arm_cp_read_zero, + .writefn =3D arm_cp_write_ignore, + /* + * We hang the whole cpu interface reset routine off here + * rather than parcelling it out into one little function + * per register + */ + .resetfn =3D whpx_gicv3_icc_reset, + }, +}; + +static void whpx_set_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_gicv3_realize(DeviceState *dev, Error **errp) +{ + ERRP_GUARD(); + GICv3State *s =3D WHPX_GICV3(dev); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_GET_CLASS(s); + Error *local_err =3D NULL; + int i; + + kgc->parent_realize(dev, &local_err); + if (local_err) { + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + return; + } + + if (s->security_extn) { + error_setg(errp, "the platform vGICv3 does not implement the " + "security extensions"); + return; + } + + if (s->nmi_support) { + error_setg(errp, "NMI is not supported with the platform GIC"); + return; + } + + if (s->nb_redist_regions > 1) { + error_setg(errp, "Multiple VGICv3 redistributor regions are not " + "supported by WHPX"); + error_append_hint(errp, "A maximum of %d VCPUs can be used", + s->redist_region_count[0]); + return; + } + + gicv3_init_irqs_and_mmio(s, whpx_gicv3_set_irq, NULL); + + for (i =3D 0; i < s->num_cpu; i++) { + CPUState *cpu_state =3D qemu_get_cpu(i); + ARMCPU *cpu =3D ARM_CPU(cpu_state); + WHV_REGISTER_VALUE val =3D {.Reg64 =3D 0x080A0000 + (GICV3_REDIST_= SIZE * i)}; + whpx_set_reg(cpu_state, WHvArm64RegisterGicrBaseGpa, val); + define_arm_cp_regs(cpu, gicv3_cpuif_reginfo); + } + + if (s->maint_irq) { + error_setg(errp, "Nested virtualisation not currently supported by= WHPX."); + return; + } +} + +static void whpx_gicv3_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + ARMGICv3CommonClass *agcc =3D ARM_GICV3_COMMON_CLASS(klass); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_CLASS(klass); + + agcc->pre_save =3D whpx_gicv3_get; + agcc->post_load =3D whpx_gicv3_put; + + device_class_set_parent_realize(dc, whpx_gicv3_realize, + &kgc->parent_realize); + resettable_class_set_parent_phases(rc, NULL, whpx_gicv3_reset_hold, NU= LL, + &kgc->parent_phases); +} + +static const TypeInfo whpx_arm_gicv3_info =3D { + .name =3D TYPE_WHPX_GICV3, + .parent =3D TYPE_ARM_GICV3_COMMON, + .instance_size =3D sizeof(GICv3State), + .class_init =3D whpx_gicv3_class_init, + .class_size =3D sizeof(WHPXARMGICv3Class), +}; + +static void whpx_gicv3_register_types(void) +{ + type_register_static(&whpx_arm_gicv3_info); +} + +type_init(whpx_gicv3_register_types) diff --git a/hw/intc/meson.build b/hw/intc/meson.build index faae20b93d..96742df090 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -41,6 +41,7 @@ specific_ss.add(when: 'CONFIG_APIC', if_true: files('apic= .c', 'apic_common.c')) arm_common_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif_= common.c')) arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: files('arm_gicv3_cpui= f.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) +specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index 3d24ad22d2..c55cf18120 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -313,6 +313,9 @@ typedef struct ARMGICv3CommonClass ARMGICv3CommonClass; DECLARE_OBJ_CHECKERS(GICv3State, ARMGICv3CommonClass, ARM_GICV3_COMMON, TYPE_ARM_GICV3_COMMON) =20 +/* Types for GICv3 kernel-irqchip */ +#define TYPE_WHPX_GICV3 "whpx-arm-gicv3" + struct ARMGICv3CommonClass { /*< private >*/ SysBusDeviceClass parent_class; --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436250; cv=none; d=zohomail.com; s=zohoarc; b=FZCZrCtiINRrYcCAYWJxMtFJWnza739SH5HDD6AKtH/PDWes3nUNpnG7VME+xxGoTJ9PioiXuBYZX1UVW7JiVqR8omj5Vw+aL9rSirHnhgBxHad7plqEA0Bf8BL1D04NKdB5RwVaMTeKaCuDQ9QJ/YEHwJg/xTkZqvGvOCvvl0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436250; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mR3PJeVaQ0egL2+AOPmViXMRbolp5hOP+/rTbwPtJEk=; b=CQLRi4X14szuUZL7dRONppcLhmGZMspvb3DQVuPmhz2dMrLwreJxBp9cfAheETAa+W8+oJqgOaJoHQIMPKvjPbVesEuSwR7LULOCpdY8DTwzxkoNG8MaU1FTy5lKu57ul0wEIU4gujEhobxxbR6mfh+dr10VugK+mDa5A5WHCb8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436250079522.7137318387424; Wed, 14 Jan 2026 16:17:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2g-0008K9-TG; Wed, 14 Jan 2026 19:16:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2f-0008Gm-5X for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:49 -0500 Received: from p-west3-cluster6-host12-snip4-10.eps.apple.com ([57.103.75.43] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2b-000231-GU for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:48 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 89C0318000FE; Thu, 15 Jan 2026 00:16:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id D49741800440; Thu, 15 Jan 2026 00:16:36 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=mR3PJeVaQ0egL2+AOPmViXMRbolp5hOP+/rTbwPtJEk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=awfNfAVoY6XXknrhe6YjP83D6gdo8l+gGN6kQK59rt+ZLK++p4Adf9eo1FA+MpG4cCFR+jXKCAbNLkaIYLGKjiCHeiCkOMkwLtHxwXbdg+iKGZ+wa+DqU0SINiuEw/xX+ZD2HDsuDApoh2yeCLuT4MkoMfU5iLGR1lnULtvgr1hR9ruWcVm8CHAzUaMZoOeNjPmrLAn0QhQHPKjnmFRddOsgAl14MW7yVt9/sPiVI1FhhHOHMoCafP2+RPE5m63h7v8aPLqp5r2oKkISuuxjROI/9NuVO5r88aWGTtXYK87BfaG65BoHOG+Czmwk/e/RgmGYTLH6RE/+WmpL4RhlAA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu Subject: [PATCH v15 15/26] whpx: add arm64 support Date: Thu, 15 Jan 2026 01:14:54 +0100 Message-ID: <20260115001505.57237-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: DqxVkizVMILEQiJXyHTo4iSjd_CZhSZ5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXyzYPkUGqKsWp 0204au1zCngBwjUlu1Jt52i9pdud00LHqmiOXwRUeEZmaNmN2U2Gb/WLuuJh/e1X177pMbhPzRP toWyyz6KOKMJnt5W60Re1AsaZphUDUUTPKpWZrG3cutOHSrb9GIFCuY3fQGbjL+JUgiGy4IlZ0l OILIY6KET6wsOvI6U3qIAqTF/DLOjH7Ji/9NAhX7LV19dsNb3Y7WuIHyzmB6HcM3AYU3iIxEZ2X /EBw4Q9BQOXqV2809gukhnYlJLZSAbe8VeOF7TosezA/uRNatlSq4/VOBPxNNsjPLlmdVbzN4MH eb5pJz2dmAB8XC5j2qo X-Authority-Info: v=2.4 cv=R4UO2NRX c=1 sm=1 tr=0 ts=696831ec cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=7SW9J7SZZjhvT-K8fPQA:9 X-Proofpoint-ORIG-GUID: DqxVkizVMILEQiJXyHTo4iSjd_CZhSZ5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 clxscore=1030 mlxscore=0 phishscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAAB+Bmms2jMcHOk9DmiuM+lRKcTyrXf4BpzyGIDtuzOoEBNTARd22QpIBeHTvmNMifGGe17iSzUaj7Kr22RTpD0O85ebGH5KPShl2cXJc/At3y14rDWe7Tqm2lZsf7oaH3wFbOlbO3a6tcXiBwcj1wiFcZcBkj0P7vJyHmE/wJnJPmCIxdo7YqYDiaEG4Muco55wTfANNKHI4syqfdGpIf0NSjo0WOlmFCqTAT718DvyYP2zZgZb6nzMe869mV5QxF/reLuNrKshiUYEaDLC4btRY87+9Jok41cOGDa2VKYfBuLbUVprJ6dTUneij75ncAf/6nBgQvpdArIdnBFqWqZDdXVpH4x6CLL2cz9BxogCvpidkHIkdwoUT8aPj8FlcAsO0aHtW9GSP09YMc9Hl53ukldxyYRPhIR12lvgWYxzYhKpwLnGGWfEidCO+mJrATWpfXZy+bjTxUdx55q1WkCqB0MyfdZsVquKT2aA2Qrfx/y1PowifeRC6o/GQ1Z/y0Q0nVPM9cW1r2QDhKj40o1Dymrp0U/2lpIjUdO4wK9+tF3CyUZkzPalr2yCRpG8yfarT4B3evfYMNguBM1EVr9mPP1ORiZHRMhK4jktCpUTnPPL13L1D+Hr+Sc7+AES+8sKHie5QXWYacn3BFm4FY9lJ9xoEvjcdWzj2WuCAktQFnjp5jJHzYcfeMEnf/THQ2TM/2a6GXImqD732yCr3jnbnVWRWptuvJU1NHwgVPDbAdoGZRs0e2eFRed/DLEDU+5ns4fQ2+ank6cZjkfbwXEPHxvoo5CEnNpnm1q2YbuCoYjW7X9WKjpBVY1J3Fblmmxml3+4NPIe7kfme4IyR4hQ74HAz7hCOxhVwwkT2wUlPcNzfIcG5Pwb19BOfsZV0MCxOECXsYcgZ9UD90dXbr30ZlPlGGSPcVgUvt5htMhlL4JY5iZCnkE Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.75.43; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436252202158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 1 + target/arm/meson.build | 1 + target/arm/whpx/meson.build | 3 + target/arm/whpx/whpx-all.c | 815 ++++++++++++++++++++++++++++++++++++ 4 files changed, 820 insertions(+) create mode 100644 target/arm/whpx/meson.build create mode 100644 target/arm/whpx/whpx-all.c diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 05f9e520b7..827f50f3e0 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -12,6 +12,7 @@ #include "gdbstub/helpers.h" #include "qemu/accel.h" #include "accel/accel-ops.h" +#include "system/memory.h" #include "system/whpx.h" #include "system/cpus.h" #include "system/runstate.h" diff --git a/target/arm/meson.build b/target/arm/meson.build index 462c71148d..ce155ba9b4 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -59,6 +59,7 @@ arm_common_system_ss.add(files( )) =20 subdir('hvf') +subdir('whpx') =20 if 'CONFIG_TCG' in config_all_accel subdir('tcg') diff --git a/target/arm/whpx/meson.build b/target/arm/whpx/meson.build new file mode 100644 index 0000000000..1de2ef0283 --- /dev/null +++ b/target/arm/whpx/meson.build @@ -0,0 +1,3 @@ +arm_system_ss.add(when: 'CONFIG_WHPX', if_true: files( + 'whpx-all.c', +)) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c new file mode 100644 index 0000000000..62fda15597 --- /dev/null +++ b/target/arm/whpx/whpx-all.c @@ -0,0 +1,815 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Windows Hypervisor Platform accelerator (WHPX) + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "system/address-spaces.h" +#include "system/ioport.h" +#include "gdbstub/helpers.h" +#include "qemu/accel.h" +#include "accel/accel-ops.h" +#include "system/whpx.h" +#include "system/cpus.h" +#include "system/runstate.h" +#include "qemu/main-loop.h" +#include "hw/core/boards.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-types-common.h" +#include "qapi/qapi-visit-common.h" +#include "migration/blocker.h" +#include "accel/accel-cpu-target.h" +#include + +#include "syndrome.h" +#include "cpu.h" +#include "target/arm/cpregs.h" +#include "internals.h" + +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" +#include "system/whpx-all.h" +#include "system/whpx-common.h" +#include "hw/arm/bsa.h" +#include "arm-powerctl.h" + +#include +#include + +struct whpx_reg_match { + WHV_REGISTER_NAME reg; + uint64_t offset; +}; + +static const struct whpx_reg_match whpx_reg_match[] =3D { + { WHvArm64RegisterX0, offsetof(CPUARMState, xregs[0]) }, + { WHvArm64RegisterX1, offsetof(CPUARMState, xregs[1]) }, + { WHvArm64RegisterX2, offsetof(CPUARMState, xregs[2]) }, + { WHvArm64RegisterX3, offsetof(CPUARMState, xregs[3]) }, + { WHvArm64RegisterX4, offsetof(CPUARMState, xregs[4]) }, + { WHvArm64RegisterX5, offsetof(CPUARMState, xregs[5]) }, + { WHvArm64RegisterX6, offsetof(CPUARMState, xregs[6]) }, + { WHvArm64RegisterX7, offsetof(CPUARMState, xregs[7]) }, + { WHvArm64RegisterX8, offsetof(CPUARMState, xregs[8]) }, + { WHvArm64RegisterX9, offsetof(CPUARMState, xregs[9]) }, + { WHvArm64RegisterX10, offsetof(CPUARMState, xregs[10]) }, + { WHvArm64RegisterX11, offsetof(CPUARMState, xregs[11]) }, + { WHvArm64RegisterX12, offsetof(CPUARMState, xregs[12]) }, + { WHvArm64RegisterX13, offsetof(CPUARMState, xregs[13]) }, + { WHvArm64RegisterX14, offsetof(CPUARMState, xregs[14]) }, + { WHvArm64RegisterX15, offsetof(CPUARMState, xregs[15]) }, + { WHvArm64RegisterX16, offsetof(CPUARMState, xregs[16]) }, + { WHvArm64RegisterX17, offsetof(CPUARMState, xregs[17]) }, + { WHvArm64RegisterX18, offsetof(CPUARMState, xregs[18]) }, + { WHvArm64RegisterX19, offsetof(CPUARMState, xregs[19]) }, + { WHvArm64RegisterX20, offsetof(CPUARMState, xregs[20]) }, + { WHvArm64RegisterX21, offsetof(CPUARMState, xregs[21]) }, + { WHvArm64RegisterX22, offsetof(CPUARMState, xregs[22]) }, + { WHvArm64RegisterX23, offsetof(CPUARMState, xregs[23]) }, + { WHvArm64RegisterX24, offsetof(CPUARMState, xregs[24]) }, + { WHvArm64RegisterX25, offsetof(CPUARMState, xregs[25]) }, + { WHvArm64RegisterX26, offsetof(CPUARMState, xregs[26]) }, + { WHvArm64RegisterX27, offsetof(CPUARMState, xregs[27]) }, + { WHvArm64RegisterX28, offsetof(CPUARMState, xregs[28]) }, + { WHvArm64RegisterFp, offsetof(CPUARMState, xregs[29]) }, + { WHvArm64RegisterLr, offsetof(CPUARMState, xregs[30]) }, + { WHvArm64RegisterPc, offsetof(CPUARMState, pc) }, +}; + +static const struct whpx_reg_match whpx_fpreg_match[] =3D { + { WHvArm64RegisterQ0, offsetof(CPUARMState, vfp.zregs[0]) }, + { WHvArm64RegisterQ1, offsetof(CPUARMState, vfp.zregs[1]) }, + { WHvArm64RegisterQ2, offsetof(CPUARMState, vfp.zregs[2]) }, + { WHvArm64RegisterQ3, offsetof(CPUARMState, vfp.zregs[3]) }, + { WHvArm64RegisterQ4, offsetof(CPUARMState, vfp.zregs[4]) }, + { WHvArm64RegisterQ5, offsetof(CPUARMState, vfp.zregs[5]) }, + { WHvArm64RegisterQ6, offsetof(CPUARMState, vfp.zregs[6]) }, + { WHvArm64RegisterQ7, offsetof(CPUARMState, vfp.zregs[7]) }, + { WHvArm64RegisterQ8, offsetof(CPUARMState, vfp.zregs[8]) }, + { WHvArm64RegisterQ9, offsetof(CPUARMState, vfp.zregs[9]) }, + { WHvArm64RegisterQ10, offsetof(CPUARMState, vfp.zregs[10]) }, + { WHvArm64RegisterQ11, offsetof(CPUARMState, vfp.zregs[11]) }, + { WHvArm64RegisterQ12, offsetof(CPUARMState, vfp.zregs[12]) }, + { WHvArm64RegisterQ13, offsetof(CPUARMState, vfp.zregs[13]) }, + { WHvArm64RegisterQ14, offsetof(CPUARMState, vfp.zregs[14]) }, + { WHvArm64RegisterQ15, offsetof(CPUARMState, vfp.zregs[15]) }, + { WHvArm64RegisterQ16, offsetof(CPUARMState, vfp.zregs[16]) }, + { WHvArm64RegisterQ17, offsetof(CPUARMState, vfp.zregs[17]) }, + { WHvArm64RegisterQ18, offsetof(CPUARMState, vfp.zregs[18]) }, + { WHvArm64RegisterQ19, offsetof(CPUARMState, vfp.zregs[19]) }, + { WHvArm64RegisterQ20, offsetof(CPUARMState, vfp.zregs[20]) }, + { WHvArm64RegisterQ21, offsetof(CPUARMState, vfp.zregs[21]) }, + { WHvArm64RegisterQ22, offsetof(CPUARMState, vfp.zregs[22]) }, + { WHvArm64RegisterQ23, offsetof(CPUARMState, vfp.zregs[23]) }, + { WHvArm64RegisterQ24, offsetof(CPUARMState, vfp.zregs[24]) }, + { WHvArm64RegisterQ25, offsetof(CPUARMState, vfp.zregs[25]) }, + { WHvArm64RegisterQ26, offsetof(CPUARMState, vfp.zregs[26]) }, + { WHvArm64RegisterQ27, offsetof(CPUARMState, vfp.zregs[27]) }, + { WHvArm64RegisterQ28, offsetof(CPUARMState, vfp.zregs[28]) }, + { WHvArm64RegisterQ29, offsetof(CPUARMState, vfp.zregs[29]) }, + { WHvArm64RegisterQ30, offsetof(CPUARMState, vfp.zregs[30]) }, + { WHvArm64RegisterQ31, offsetof(CPUARMState, vfp.zregs[31]) }, +}; + +struct whpx_sreg_match { + WHV_REGISTER_NAME reg; + uint32_t key; + bool global; + uint32_t cp_idx; +}; + +static struct whpx_sreg_match whpx_sreg_match[] =3D { + { WHvArm64RegisterDbgbvr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 7) }, +#ifdef SYNC_NO_RAW_REGS + /* + * The registers below are manually synced on init because they are + * marked as NO_RAW. We still list them to make number space sync easi= er. + */ + { WHvArm64RegisterMidrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 0, 0) }, + { WHvArm64RegisterMpidrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 0, 5) }, + { WHvArm64RegisterIdPfr0El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 0) }, +#endif + { WHvArm64RegisterIdAa64Pfr1El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 1), tr= ue }, + { WHvArm64RegisterIdAa64Dfr0El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 0), tr= ue }, + { WHvArm64RegisterIdAa64Dfr1El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 1), tr= ue }, + { WHvArm64RegisterIdAa64Isar0El1, ENCODE_AA64_CP_REG(0, 6, 3, 0, 0), t= rue }, + { WHvArm64RegisterIdAa64Isar1El1, ENCODE_AA64_CP_REG(0, 6, 3, 0, 1), t= rue }, +#ifdef SYNC_NO_MMFR0 + /* We keep the hardware MMFR0 around. HW limits are there anyway */ + { WHvArm64RegisterIdAa64Mmfr0El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 0) }, +#endif + { WHvArm64RegisterIdAa64Mmfr1El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 1), t= rue }, + { WHvArm64RegisterIdAa64Mmfr2El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 2), t= rue }, + { WHvArm64RegisterIdAa64Mmfr3El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 3), t= rue }, + + { WHvArm64RegisterMdscrEl1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 2) }, + { WHvArm64RegisterSctlrEl1, ENCODE_AA64_CP_REG(1, 0, 3, 0, 0) }, + { WHvArm64RegisterCpacrEl1, ENCODE_AA64_CP_REG(1, 0, 3, 0, 2) }, + { WHvArm64RegisterTtbr0El1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 0) }, + { WHvArm64RegisterTtbr1El1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 1) }, + { WHvArm64RegisterTcrEl1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 2) }, + + { WHvArm64RegisterApiAKeyLoEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 0) }, + { WHvArm64RegisterApiAKeyHiEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 1) }, + { WHvArm64RegisterApiBKeyLoEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 2) }, + { WHvArm64RegisterApiBKeyHiEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 3) }, + { WHvArm64RegisterApdAKeyLoEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 0) }, + { WHvArm64RegisterApdAKeyHiEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 1) }, + { WHvArm64RegisterApdBKeyLoEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 2) }, + { WHvArm64RegisterApdBKeyHiEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 3) }, + { WHvArm64RegisterApgAKeyLoEl1, ENCODE_AA64_CP_REG(2, 3, 3, 0, 0) }, + { WHvArm64RegisterApgAKeyHiEl1, ENCODE_AA64_CP_REG(2, 3, 3, 0, 1) }, + + { WHvArm64RegisterSpsrEl1, ENCODE_AA64_CP_REG(4, 0, 3, 0, 0) }, + { WHvArm64RegisterElrEl1, ENCODE_AA64_CP_REG(4, 0, 3, 0, 1) }, + { WHvArm64RegisterSpEl1, ENCODE_AA64_CP_REG(4, 1, 3, 0, 0) }, + { WHvArm64RegisterEsrEl1, ENCODE_AA64_CP_REG(5, 2, 3, 0, 0) }, + { WHvArm64RegisterFarEl1, ENCODE_AA64_CP_REG(6, 0, 3, 0, 0) }, + { WHvArm64RegisterParEl1, ENCODE_AA64_CP_REG(7, 4, 3, 0, 0) }, + { WHvArm64RegisterMairEl1, ENCODE_AA64_CP_REG(10, 2, 3, 0, 0) }, + { WHvArm64RegisterVbarEl1, ENCODE_AA64_CP_REG(12, 0, 3, 0, 0) }, + { WHvArm64RegisterContextidrEl1, ENCODE_AA64_CP_REG(13, 0, 3, 0, 1) }, + { WHvArm64RegisterTpidrEl1, ENCODE_AA64_CP_REG(13, 0, 3, 0, 4) }, + { WHvArm64RegisterCntkctlEl1, ENCODE_AA64_CP_REG(14, 1, 3, 0, 0) }, + { WHvArm64RegisterCsselrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 2, 0) }, + { WHvArm64RegisterTpidrEl0, ENCODE_AA64_CP_REG(13, 0, 3, 3, 2) }, + { WHvArm64RegisterTpidrroEl0, ENCODE_AA64_CP_REG(13, 0, 3, 3, 3) }, + { WHvArm64RegisterCntvCtlEl0, ENCODE_AA64_CP_REG(14, 3, 3, 3, 1) }, + { WHvArm64RegisterCntvCvalEl0, ENCODE_AA64_CP_REG(14, 3, 3, 3, 2) }, + { WHvArm64RegisterSpEl1, ENCODE_AA64_CP_REG(4, 1, 3, 4, 0) }, +}; + +static void flush_cpu_state(CPUState *cpu) +{ + if (cpu->vcpu_dirty) { + whpx_set_registers(cpu, WHPX_SET_RUNTIME_STATE); + cpu->vcpu_dirty =3D false; + } +} + +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) +{ + if (exceptions !=3D 0) { + return E_NOTIMPL; + } + return ERROR_SUCCESS; +} +void whpx_apply_breakpoints( + struct whpx_breakpoint_collection *breakpoints, + CPUState *cpu, + bool resuming) +{ + +} +void whpx_translate_cpu_breakpoints( + struct whpx_breakpoints *breakpoints, + CPUState *cpu, + int cpu_breakpoint_count) +{ + +} + +static void whpx_get_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE* val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + flush_cpu_state(cpu); + + hr =3D whp_dispatch.WHvGetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to get register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_set_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_get_global_reg(WHV_REGISTER_NAME reg, WHV_REGISTER_VALUE = *val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + hr =3D whp_dispatch.WHvGetVirtualProcessorRegisters(whpx->partition, W= HV_ANY_VP, + ®, 1, val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to get register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_set_global_reg(WHV_REGISTER_NAME reg, WHV_REGISTER_VALUE = val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, W= HV_ANY_VP, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static uint64_t whpx_get_gp_reg(CPUState *cpu, int rt) +{ + assert(rt <=3D 31); + if (rt =3D=3D 31) { + return 0; + } + WHV_REGISTER_NAME reg =3D WHvArm64RegisterX0 + rt; + WHV_REGISTER_VALUE val; + whpx_get_reg(cpu, reg, &val); + + return val.Reg64; +} + +static void whpx_set_gp_reg(CPUState *cpu, int rt, uint64_t val) +{ + assert(rt < 31); + WHV_REGISTER_NAME reg =3D WHvArm64RegisterX0 + rt; + WHV_REGISTER_VALUE reg_val =3D {.Reg64 =3D val}; + + whpx_set_reg(cpu, reg, reg_val); +} + +static int whpx_handle_mmio(CPUState *cpu, WHV_MEMORY_ACCESS_CONTEXT *ctx) +{ + uint64_t syndrome =3D ctx->Syndrome; + + bool isv =3D syndrome & ARM_EL_ISV; + bool iswrite =3D (syndrome >> 6) & 1; + bool sse =3D (syndrome >> 21) & 1; + uint32_t sas =3D (syndrome >> 22) & 3; + uint32_t len =3D 1 << sas; + uint32_t srt =3D (syndrome >> 16) & 0x1f; + uint32_t cm =3D (syndrome >> 8) & 0x1; + uint64_t val =3D 0; + + assert(!cm); + assert(isv); + + if (iswrite) { + val =3D whpx_get_gp_reg(cpu, srt); + address_space_write(&address_space_memory, + ctx->Gpa, + MEMTXATTRS_UNSPECIFIED, &val, len); + } else { + address_space_read(&address_space_memory, + ctx->Gpa, + MEMTXATTRS_UNSPECIFIED, &val, len); + if (sse) { + val =3D sextract64(val, 0, len * 8); + } + whpx_set_gp_reg(cpu, srt, val); + } + + return 0; +} + +static void whpx_psci_cpu_off(ARMCPU *arm_cpu) +{ + int32_t ret =3D arm_set_cpu_off(arm_cpu_mp_affinity(arm_cpu)); + assert(ret =3D=3D QEMU_ARM_POWERCTL_RET_SUCCESS); +} + +int whpx_vcpu_run(CPUState *cpu) +{ + HRESULT hr; + struct whpx_state *whpx =3D &whpx_global; + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + AccelCPUState *vcpu =3D cpu->accel; + int ret; + + + g_assert(bql_locked()); + + if (whpx->running_cpus++ =3D=3D 0) { + ret =3D whpx_first_vcpu_starting(cpu); + if (ret !=3D 0) { + return ret; + } + } + + bql_unlock(); + + + cpu_exec_start(cpu); + do { + bool advance_pc =3D false; + if (cpu->vcpu_dirty) { + whpx_set_registers(cpu, WHPX_SET_RUNTIME_STATE); + cpu->vcpu_dirty =3D false; + } + + if (qatomic_read(&cpu->exit_request)) { + whpx_vcpu_kick(cpu); + } + + hr =3D whp_dispatch.WHvRunVirtualProcessor( + whpx->partition, cpu->cpu_index, + &vcpu->exit_ctx, sizeof(vcpu->exit_ctx)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to exec a virtual processor," + " hr=3D%08lx", hr); + ret =3D -1; + break; + } + + switch (vcpu->exit_ctx.ExitReason) { + case WHvRunVpExitReasonGpaIntercept: + case WHvRunVpExitReasonUnmappedGpa: + advance_pc =3D true; + + if (vcpu->exit_ctx.MemoryAccess.Syndrome & BIT(8)) { + error_report("WHPX: cached access to unmapped memory" + "Pc =3D 0x%llx Gva =3D 0x%llx Gpa =3D 0x%llx", + vcpu->exit_ctx.MemoryAccess.Header.Pc, + vcpu->exit_ctx.MemoryAccess.Gpa, + vcpu->exit_ctx.MemoryAccess.Gva); + break; + } + + ret =3D whpx_handle_mmio(cpu, &vcpu->exit_ctx.MemoryAccess); + break; + case WHvRunVpExitReasonCanceled: + cpu->exception_index =3D EXCP_INTERRUPT; + ret =3D 1; + break; + case WHvRunVpExitReasonArm64Reset: + switch (vcpu->exit_ctx.Arm64Reset.ResetType) { + case WHvArm64ResetTypePowerOff: + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN= ); + break; + case WHvArm64ResetTypeReboot: + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + break; + default: + g_assert_not_reached(); + } + bql_lock(); + if (arm_cpu->power_state !=3D PSCI_OFF) { + whpx_psci_cpu_off(arm_cpu); + } + bql_unlock(); + break; + case WHvRunVpExitReasonNone: + case WHvRunVpExitReasonUnrecoverableException: + case WHvRunVpExitReasonInvalidVpRegisterValue: + case WHvRunVpExitReasonUnsupportedFeature: + default: + error_report("WHPX: Unexpected VP exit code 0x%08x", + vcpu->exit_ctx.ExitReason); + whpx_get_registers(cpu); + bql_lock(); + qemu_system_guest_panicked(cpu_get_crash_info(cpu)); + bql_unlock(); + break; + } + if (advance_pc) { + WHV_REGISTER_VALUE pc; + + flush_cpu_state(cpu); + pc.Reg64 =3D vcpu->exit_ctx.MemoryAccess.Header.Pc + 4; + whpx_set_reg(cpu, WHvArm64RegisterPc, pc); + } + } while (!ret); + + cpu_exec_end(cpu); + + bql_lock(); + current_cpu =3D cpu; + + if (--whpx->running_cpus =3D=3D 0) { + whpx_last_vcpu_stopping(cpu); + } + + qatomic_set(&cpu->exit_request, false); + + return ret < 0; +} + +static void clean_whv_register_value(WHV_REGISTER_VALUE *val) +{ + memset(val, 0, sizeof(WHV_REGISTER_VALUE)); +} + +void whpx_get_registers(CPUState *cpu) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + WHV_REGISTER_VALUE val; + int i; + + for (i =3D 0; i < ARRAY_SIZE(whpx_reg_match); i++) { + whpx_get_reg(cpu, whpx_reg_match[i].reg, &val); + *(uint64_t *)((char *)env + whpx_reg_match[i].offset) =3D val.Reg6= 4; + } + + for (i =3D 0; i < ARRAY_SIZE(whpx_fpreg_match); i++) { + whpx_get_reg(cpu, whpx_reg_match[i].reg, &val); + memcpy((char *)env + whpx_fpreg_match[i].offset, &val, sizeof(val.= Reg128)); + } + + whpx_get_reg(cpu, WHvArm64RegisterPc, &val); + env->pc =3D val.Reg64; + + whpx_get_reg(cpu, WHvArm64RegisterFpcr, &val); + vfp_set_fpcr(env, val.Reg32); + + whpx_get_reg(cpu, WHvArm64RegisterFpsr, &val); + vfp_set_fpsr(env, val.Reg32); + + whpx_get_reg(cpu, WHvArm64RegisterPstate, &val); + pstate_write(env, val.Reg32); + + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + if (whpx_sreg_match[i].global) { + /* WHP disallows us from accessing global regs as a vCPU */ + whpx_get_global_reg(whpx_sreg_match[i].reg, &val); + } else { + whpx_get_reg(cpu, whpx_sreg_match[i].reg, &val); + } + arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx] =3D val.Reg64; + } + + assert(write_list_to_cpustate(arm_cpu)); + aarch64_restore_sp(env, arm_current_el(env)); +} + +void whpx_set_registers(CPUState *cpu, int level) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + WHV_REGISTER_VALUE val; + clean_whv_register_value(&val); + int i; + + assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); + + for (i =3D 0; i < ARRAY_SIZE(whpx_reg_match); i++) { + val.Reg64 =3D *(uint64_t *)((char *)env + whpx_reg_match[i].offset= ); + whpx_set_reg(cpu, whpx_reg_match[i].reg, val); + } + + for (i =3D 0; i < ARRAY_SIZE(whpx_fpreg_match); i++) { + memcpy(&val.Reg128, (char *)env + whpx_fpreg_match[i].offset, size= of(val.Reg128)); + whpx_set_reg(cpu, whpx_reg_match[i].reg, val); + } + + clean_whv_register_value(&val); + val.Reg64 =3D env->pc; + whpx_set_reg(cpu, WHvArm64RegisterPc, val); + + clean_whv_register_value(&val); + val.Reg32 =3D vfp_get_fpcr(env); + whpx_set_reg(cpu, WHvArm64RegisterFpcr, val); + val.Reg32 =3D vfp_get_fpsr(env); + whpx_set_reg(cpu, WHvArm64RegisterFpsr, val); + val.Reg32 =3D pstate_read(env); + whpx_set_reg(cpu, WHvArm64RegisterPstate, val); + + aarch64_save_sp(env, arm_current_el(env)); + + assert(write_cpustate_to_list(arm_cpu, false)); + + /* Currently set global regs every time. */ + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + val.Reg64 =3D arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx]; + if (whpx_sreg_match[i].global) { + /* WHP disallows us from accessing global regs as a vCPU */ + whpx_set_global_reg(whpx_sreg_match[i].reg, val); + } else { + whpx_set_reg(cpu, whpx_sreg_match[i].reg, val); + } + } +} + +static uint32_t max_vcpu_index; + +static void whpx_cpu_update_state(void *opaque, bool running, RunState sta= te) +{ +} + +int whpx_init_vcpu(CPUState *cpu) +{ + HRESULT hr; + struct whpx_state *whpx =3D &whpx_global; + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + int ret; + + uint32_t sregs_match_len =3D ARRAY_SIZE(whpx_sreg_match); + uint32_t sregs_cnt =3D 0; + WHV_REGISTER_VALUE val; + int i; + + hr =3D whp_dispatch.WHvCreateVirtualProcessor( + whpx->partition, cpu->cpu_index, 0); + if (FAILED(hr)) { + error_report("WHPX: Failed to create a virtual processor," + " hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + /* Assumption that CNTFRQ_EL0 is the same between the VMM and the part= ition. */ + asm volatile("mrs %0, cntfrq_el0" : "=3Dr"(arm_cpu->gt_cntfrq_hz)); + + cpu->vcpu_dirty =3D true; + cpu->accel =3D g_new0(AccelCPUState, 1); + max_vcpu_index =3D MAX(max_vcpu_index, cpu->cpu_index); + qemu_add_vm_change_state_handler(whpx_cpu_update_state, env); + + env->aarch64 =3D true; + + /* Allocate enough space for our sysreg sync */ + arm_cpu->cpreg_indexes =3D g_renew(uint64_t, arm_cpu->cpreg_indexes, + sregs_match_len); + arm_cpu->cpreg_values =3D g_renew(uint64_t, arm_cpu->cpreg_values, + sregs_match_len); + arm_cpu->cpreg_vmstate_indexes =3D g_renew(uint64_t, + arm_cpu->cpreg_vmstate_indexe= s, + sregs_match_len); + arm_cpu->cpreg_vmstate_values =3D g_renew(uint64_t, + arm_cpu->cpreg_vmstate_values, + sregs_match_len); + + memset(arm_cpu->cpreg_values, 0, sregs_match_len * sizeof(uint64_t)); + + /* Populate cp list for all known sysregs */ + for (i =3D 0; i < sregs_match_len; i++) { + const ARMCPRegInfo *ri; + uint32_t key =3D whpx_sreg_match[i].key; + + ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs, key); + if (ri) { + assert(!(ri->type & ARM_CP_NO_RAW)); + whpx_sreg_match[i].cp_idx =3D sregs_cnt; + arm_cpu->cpreg_indexes[sregs_cnt++] =3D cpreg_to_kvm_id(key); + } else { + whpx_sreg_match[i].cp_idx =3D -1; + } + } + arm_cpu->cpreg_array_len =3D sregs_cnt; + arm_cpu->cpreg_vmstate_array_len =3D sregs_cnt; + + assert(write_cpustate_to_list(arm_cpu, false)); + + /* Set CP_NO_RAW system registers on init */ + val.Reg64 =3D arm_cpu->midr; + whpx_set_reg(cpu, WHvArm64RegisterMidrEl1, + val); + + clean_whv_register_value(&val); + + val.Reg64 =3D deposit64(arm_cpu->mp_affinity, 31, 1, 1 /* RES1 */); + whpx_set_reg(cpu, WHvArm64RegisterMpidrEl1, val); + + return 0; + +error: + return ret; +} + +void whpx_cpu_instance_init(CPUState *cs) +{ +} + +int whpx_accel_init(AccelState *as, MachineState *ms) +{ + struct whpx_state *whpx; + int ret; + HRESULT hr; + WHV_CAPABILITY whpx_cap; + UINT32 whpx_cap_size; + WHV_PARTITION_PROPERTY prop; + WHV_CAPABILITY_FEATURES features; + + whpx =3D &whpx_global; + /* on arm64 Windows Hypervisor Platform, vGICv3 always used */ + whpx_irqchip_in_kernel =3D true; + + if (!init_whp_dispatch()) { + ret =3D -ENOSYS; + goto error; + } + + whpx->mem_quota =3D ms->ram_size; + + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodeHypervisorPresent, &whpx_cap, + sizeof(whpx_cap), &whpx_cap_size); + if (FAILED(hr) || !whpx_cap.HypervisorPresent) { + error_report("WHPX: No accelerator found, hr=3D%08lx", hr); + ret =3D -ENOSPC; + goto error; + } + + memset(&features, 0, sizeof(features)); + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodeFeatures, &features, sizeof(features), NULL); + if (FAILED(hr)) { + error_report("WHPX: Failed to query capabilities, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + if (!features.Arm64Support) { + error_report("WHPX: host OS exposing pre-release WHPX implementati= on. " + "Please update your operating system to at least build 26100.3= 915"); + ret =3D -EINVAL; + goto error; + } + + hr =3D whp_dispatch.WHvCreatePartition(&whpx->partition); + if (FAILED(hr)) { + error_report("WHPX: Failed to create partition, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + memset(&prop, 0, sizeof(prop)); + prop.ProcessorCount =3D ms->smp.cpus; + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeProcessorCount, + &prop, + sizeof(prop)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set partition processor count to %u," + " hr=3D%08lx", prop.ProcessorCount, hr); + ret =3D -EINVAL; + goto error; + } + + if (!whpx->kernel_irqchip_allowed) { + error_report("WHPX: on Arm, only kernel-irqchip=3Don is currently = supported"); + ret =3D -EINVAL; + goto error; + } + + memset(&prop, 0, sizeof(prop)); + + hr =3D whp_dispatch.WHvSetupPartition(whpx->partition); + if (FAILED(hr)) { + error_report("WHPX: Failed to setup partition, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + whpx_memory_init(); + + return 0; + +error: + if (whpx->partition !=3D NULL) { + whp_dispatch.WHvDeletePartition(whpx->partition); + whpx->partition =3D NULL; + } + + return ret; +} --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436352; cv=none; d=zohomail.com; s=zohoarc; b=kNYVbmhWvu2xmC0UsF/BhyFvf+tza7Kwt+f+3mr57HskbssiqM3usXEWzXDxzUKiJBFnmhoxMd7XCUVGBnMmJKqgP37Yx2tTwTOKRtX1JeoBm4q94aJGJcMgbu2O1pHlkV3slyHv9vfzyZ7NwTiO0nk8HCRV9JR0yoTsSW6XLgA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436352; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=F9oLyg/qgYRJ/JZV5dNJO6abkXMsGF/lMhk1P5D4R60=; b=IABV4rPWCYDMMPgs/PAE9kfInIn8IYf6hEbOudz9dLOIaTWF/HCzPEzwqMG36wI7+LT0hHccC1G+Jy1V/F4/SzRJbBILaOJzfKJWHnoBz6ORIELm9L79XE8CnZ+fl7JeKmrxNewpSG3SoWa1tbCnRzevTws8GJw/xzgH8fFHwjI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436352451627.6579486907812; Wed, 14 Jan 2026 16:19:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2m-0000A5-NL; Wed, 14 Jan 2026 19:16:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2k-0008UI-7a for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:54 -0500 Received: from p-west3-cluster5-host12-snip4-10.eps.apple.com ([57.103.72.123] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2i-00024b-K3 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:53 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 5936A1800435; Thu, 15 Jan 2026 00:16:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id EF17018000CC; Thu, 15 Jan 2026 00:16:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=F9oLyg/qgYRJ/JZV5dNJO6abkXMsGF/lMhk1P5D4R60=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=IqOztzt9StR+6sYp8cPTFJVLBOVBkGBx8LkA/84CvU4RMI27PTdJpmdeIGG0uuanNkkgALopaVPWZThLZNhwyjVjG/JqaBG03zuYg/V/IBVh9fGUO7n9VwcHwjlTOEa9sTDs3my9/miAvyo4OKutd/2H4EMnjQOU25n5r42cm6ouR7BdY7a7MdPcDLJDbOwgW01eVTsaUpWNtTVoEbkXbAFGSSrfEYNeogxCVuw/BAm9AuGPEbhuCVxedHMCtMPQbEKsQnWijW9ZRLnAkQ4qSKC6OYpjPL38knm8fzrneB7HMjQTr4Z874LKjkyiNgmxDvO+zZyt4K9BvJSHBimFNA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 16/26] whpx: change memory management logic Date: Thu, 15 Jan 2026 01:14:55 +0100 Message-ID: <20260115001505.57237-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: NylZ5WPpvIk-3fR0CGbUS0jBsfC-pD_r X-Authority-Info: v=2.4 cv=L48QguT8 c=1 sm=1 tr=0 ts=696831f3 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Warxv3Xc6ASOjn9-k1MA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX6SGmzdcuwhmo 1Hg+8FKdZ4647bQkzF3bBW0KFEUy9ytOtpyA6DF2WKvlwPmW4miOqU7ePKMBXcIWtVDiaKo0xRh b1M8akYujqaux/WHMcoCqXZgH+ol+uopAZgeHBgQD7OF843HSW1tIIBnXadNqc0MZ8OC4AyQ1au qt0/W6HXf7hgaHrhoP/7I+ihiNZKEIvaZJ5/yG4K1oJzwRBLAUQgokaQI0jBvMrKfgfj3OGm1Xs gkY4nzwz89ohZ9NsQZeuPHkQeVnhH1um6Wzfyp6BENmFRk1Pl6Ju5rRLN+l44RPaCBOrREeE/bA EaRzJCmAFXGwKiQSkCC X-Proofpoint-GUID: NylZ5WPpvIk-3fR0CGbUS0jBsfC-pD_r X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 clxscore=1030 spamscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABz3pmGMNRX2nHCx553nipzu/u3DjEYNYkmc5xHkx0UWfyF96JKzD+JQFtFqyKQFkJGJp0yEnVZriBBF0J6YM5DTMq5kf8oNZQ8WWaa72HzEi+aSoktgr++LyrdOmJ4GG6eMxLzQSWPyNBVc/Jhtr8s+kaGlPhKlzRKEq+/RBlVo7SAXKfMY5QgvrAJ+9z5GcC9030HqU4f/0Ezq1CVkiOz6MX8jp2rMXOd6In1dhL5UTZdREplXzyr9zeE96O07OJQ+Skpj1akjGA8uegTN+qAMDfn3OdPyxxDqxmxRO0a+WEP4UoedYhVnYVYcLkIagB0Pe8gMpeoyiu+0E46sL7FRkoO+75lxOMIaloLuG9fgOY0Jsbs1XiFTNH4rW3R3zPL3cw4qyIgU3VHwyd6UXsSN43ArXo1YU0oNYZIym9Ds1T+xOn/kWwsk2LN8cYcu2Gaffy2RKud4f2R8e3J+S6xhrwoyiKa9V9XnlSgiEuxLo41m4z2NTKtddSgU8SRRxlyqLXG32oZQcRx7OVLQB+D7WhkAzu9NKZ6t3y9I3cW33dzwiSDrRrfKnu8ruYhy2BEKFxONo5VQY8luB6qiWvqTChcMrWc+B+1iMBrYdDjuIv/vZOISHuskaHCYTRtiRbLWESPsgPuQPRG/0eArHfyHXmrVgbOSxM2FaNfZ+MPGNhw0SHHCu75eb6NW2kx2MSYS2IZgnhyZsFUx3gjiHKIaepfrJtg4iohIDj3r5RuPlD9jkrn+SPN877bq8AXeJAU+oZFPO/i/+ul3x4ZIzCRwDYkBJRahVTu+CJWAyZrj766V3Bd94syAnECGNJJj6neDM5sLZquIlTWerV0DGvjD3mHSDxrGw3/FkZPG5MuQQVNSorTEw3AzWGzXnaWY1H6ZxX/DUuGTLkXhXkiCQnZeH0aBXsi7+omrHSkdbFBlnZ04qLu9fxWcTsNrR9+gYqaVWWXCWn Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.123; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436354465158500 Content-Type: text/plain; charset="utf-8" This allows edk2 to work on Arm, although u-boot is still not functional. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 97 +++++++++++++++------------------------- 1 file changed, 36 insertions(+), 61 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 827f50f3e0..f018a8f5c7 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -255,89 +255,64 @@ void whpx_vcpu_kick(CPUState *cpu) * Memory support. */ =20 -static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, - void *host_va, int add, int rom, - const char *name) +static void whpx_set_phys_mem(MemoryRegionSection *section, bool add) { struct whpx_state *whpx =3D &whpx_global; + MemoryRegion *area =3D section->mr; + bool writable =3D !area->readonly && !area->rom_device; + WHV_MAP_GPA_RANGE_FLAGS flags; + uint64_t page_size =3D qemu_real_host_page_size(); + uint64_t gva =3D section->offset_within_address_space; + uint64_t size =3D int128_get64(section->size); HRESULT hr; + void *mem; =20 - /* - if (add) { - printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", - (void*)start_pa, (void*)size, host_va, - (rom ? "ROM" : "RAM"), name); - } else { - printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", - (void*)start_pa, (void*)size, host_va, name); - } - */ - - if (add) { - hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, - host_va, - start_pa, - size, - (WHvMapGpaRangeFlagRead | - WHvMapGpaRangeFlagExecute | - (rom ? 0 : WHvMapGpaRangeFlagWri= te))); - } else { - hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, - start_pa, - size); - } - - if (FAILED(hr)) { - error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," - " Host:%p, hr=3D%08lx", - (add ? "MAP" : "UNMAP"), name, - (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); + if (!memory_region_is_ram(area)) { + if (writable) { + return; + } else if (!memory_region_is_romd(area)) { + add =3D false; + } } -} - -static void whpx_process_section(MemoryRegionSection *section, int add) -{ - MemoryRegion *mr =3D section->mr; - hwaddr start_pa =3D section->offset_within_address_space; - ram_addr_t size =3D int128_get64(section->size); - unsigned int delta; - uint64_t host_va; =20 - if (!memory_region_is_ram(mr)) { - return; + if (!QEMU_IS_ALIGNED(size, page_size) || + !QEMU_IS_ALIGNED(gva, page_size)) { + /* Not page aligned, so we can not map as RAM */ + add =3D false; } =20 - delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); - delta &=3D ~qemu_real_host_page_mask(); - if (delta > size) { - return; - } - start_pa +=3D delta; - size -=3D delta; - size &=3D qemu_real_host_page_mask(); - if (!size || (start_pa & ~qemu_real_host_page_mask())) { + if (!add) { + hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, + gva, size); + if (FAILED(hr)) { + error_report("WHPX: failed to unmap GPA range"); + abort(); + } return; } =20 - host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) - + section->offset_within_region + delta; + flags =3D WHvMapGpaRangeFlagRead | WHvMapGpaRangeFlagExecute + | (writable ? WHvMapGpaRangeFlagWrite : 0); + mem =3D memory_region_get_ram_ptr(area) + section->offset_within_regio= n; =20 - whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, - memory_region_is_rom(mr), mr->name); + hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, + mem, gva, size, flags); + if (FAILED(hr)) { + error_report("WHPX: failed to map GPA range"); + abort(); + } } =20 static void whpx_region_add(MemoryListener *listener, MemoryRegionSection *section) { - memory_region_ref(section->mr); - whpx_process_section(section, 1); + whpx_set_phys_mem(section, true); } =20 static void whpx_region_del(MemoryListener *listener, MemoryRegionSection *section) { - whpx_process_section(section, 0); - memory_region_unref(section->mr); + whpx_set_phys_mem(section, false); } =20 static void whpx_transaction_begin(MemoryListener *listener) --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436323; cv=none; d=zohomail.com; s=zohoarc; b=fJY8EUYZyJeUPtUks9ur6ULeNBNN+KANSKtsBi41TRXwQLYTGLBTezVGACzb8Ssq9PsrzpNpqMs5w9aKb/8iTN5MUbIhEgnLSnbMKjVV5KgK+3cGAMzSd9oBcI5Mtjymi9T3JEieVXpN9gdE0qEa1tjJNPzeIS388OXmqR/E7eA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436323; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=l9p5jVYclwL2K7rHpkywk2BNDTimX+u9/pjnya/K+yM=; b=co0JUg8eIl3CSbk7hsPYROI2DNLWOtZiRpPzXejtX8Mh5Cp39BNx2yGnSXbhLkDgzO3uP5CQUlfCnzpOeaO/pOsf5pTA8lQwzcFPNUbDMNM5z7/tU9h8t/72N5dLBymm/Zz1h7kRJtJshn4BuxwFJLKH1td5PwYRJdgm9cc1Qa0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436323194617.5125781468047; Wed, 14 Jan 2026 16:18:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB2t-0000k1-AO; Wed, 14 Jan 2026 19:17:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2q-0000OC-6z for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:01 -0500 Received: from p-west3-cluster5-host10-snip4-6.eps.apple.com ([57.103.72.99] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2o-00026K-6b for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:16:59 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 76FFA1800429; Thu, 15 Jan 2026 00:16:55 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 6350C1800447; Thu, 15 Jan 2026 00:16:50 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=l9p5jVYclwL2K7rHpkywk2BNDTimX+u9/pjnya/K+yM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Vdtum5jiQPJHmZO4yyf8XQjQ70WdTcmGWWvp8MSWJPUWYFqKof9po2eXjhzmUyseRxnWYVjjDcQ1TtqctL/hLV09EVbhNsj2l2sTbc3CMeHF9RUyQ/5kMk08iSLwbqjhzbe5iX8zhG4O0YLdZV9rhpnT2pN1B+WWTNfflnFcZ/vgPJbBqozN8lFA6oyHMU5In1FCvj9B73sjSdKR0MwpRy45zY51lvX6AbQUuV04jCbjAD0K3p26Q9jsib2EpSwmnUbNqSKiGmyWFwHd8eBaod+VbrpC0rxr1+9MdDj75cnMUGlm5kRM3Ebv7Mv7BYTdHlW5bZmxH/LgT1gwetNjLA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 17/26] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Date: Thu, 15 Jan 2026 01:14:56 +0100 Message-ID: <20260115001505.57237-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 7uLCjEdlW-tQ8j1jMdLrdQlRiLP4gdz- X-Proofpoint-GUID: 7uLCjEdlW-tQ8j1jMdLrdQlRiLP4gdz- X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX2b60yp6BuQfQ LvuvIJZCmyNeIMa/b+UnFcqcmBdOqkSdLD0jnCXd3j414VPdWkkknr9UL8zWtzSot1occj1f74Q rwxFBlYQDwJFLGYzvL9neCmIOfuisGsT+88HgWJEEaN/gkfI9nUL96AAs/mYUatFiO1kp+4Arwu ttMceKShsyCycCh840yEA5+s5Kl8DkNfTL9LSrfWz+iAR2b0EU1kW+2U5M9KP6oyngKtbkZjovQ fNZj+XRzQP7OiVxI2v3oH4btQs1m3gZyCDUnbiGZvMpB9AImyZfd785tBbp02/brB6/rst/dVT9 KbDu65Xqv1Q/7EloQjs X-Authority-Info: v=2.4 cv=RvvI7SmK c=1 sm=1 tr=0 ts=696831f9 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GfoCO2L6IEBdUbzNuv4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 clxscore=1030 mlxscore=0 phishscore=0 spamscore=0 adultscore=0 mlxlogscore=944 suspectscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAAB6N2uYWQ/UUcJLKRGI9fKiDtdCHmYA7UGUnfcOHUZlRV38/iKUcbYonRJ03ans5BhMGb9FW+EXDPDCYNlZRYR8Jp6wOWTbpipHVQMnNahMxH2J2Vu8avlWwDo+TKAi+IbcXpwXgMHQqhWpTz9QZRwWTEI5+/lNDOuWZQONL2Fs6CeXlOemOeYrL6wDx0vHWFUPPC8vtrklBnRMNSbGsfScJgoRTKR88+eYB0XoGZNKtp3D6U+41gkRr6ZB0+EIeyedos4vC/UXBFIMyS/m6NwpOnQDkTy942vEkVL4FFzHrWlm/1FWDLmcCMcY6EhKMNN9nhZyF3ebW0mMY4GKFsEvZPzPVja0G9aXk4rTLXDH2UsF5mt5hcy2kjeMxOrk8gokxx6bMrOn0HD/3EAb7XDNkKpmrqm47gJoxdkXZvioPPH6Clp6CkJ4mdt1tdE/0fHeJbEX7v0lieTjmAAPs30zrqS99ZswBm9PFr4O/3bgCPy3gqPys8A5g3xyzNmkPvl8CILV7FHhSYzvsAHXjX+F9mpzAoA4rmmw945iAKjhJJpnphZN7NCMVs0AWsq8C6sB1UxRWIYMdj8eVKBZwpvmWgeFLLSiZBF3ledyzq3nxDye2L3uduYJv7F6jbyCooZI5iDSoBtDGiBFWhAVv5MeqhMuy8qQEXoX3/3BnhjsEVbi+WdmQptcuAMycTp60orAfBqlaT3lp6OCRM/ODz2QzXIPtKCBtYUP3vxmFcuQkEemq5j7aUT6AX8GGKbuGxuIMhemtD8jYx2yZrQfP/any1+CvuEVCPsQ/Y/F9o1cROgU7+RBpROFDeWotSupfofK5dMCrMigTgIkkZ0ovugyker+UGEYnVxUxeFTsEUQejOMxeYqUXuuwGJgHAkF0U2p0UJV0tl7nLqn67obMPklXfpqH9XmJ74eLLwMAgyKsdTBcex83xfei0viGcvANXj9gRHKQ4VvTJcknpbTG4ORQA Lp+IH7flQ5g== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.99; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436324304158500 Content-Type: text/plain; charset="utf-8" Hyper-V supports PSCI 1.3, and that implementation is exposed through WHPX. Signed-off-by: Mohamed Mediouni Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- target/arm/cpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index caf7980b1f..70f0bebd19 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -23,6 +23,7 @@ #include "qemu/timer.h" #include "qemu/log.h" #include "exec/page-vary.h" +#include "system/whpx.h" #include "target/arm/idau.h" #include "qemu/module.h" #include "qapi/error.h" @@ -1143,6 +1144,8 @@ static void arm_cpu_initfn(Object *obj) if (tcg_enabled() || hvf_enabled()) { /* TCG and HVF implement PSCI 1.1 */ cpu->psci_version =3D QEMU_PSCI_VERSION_1_1; + } else if (whpx_enabled()) { + cpu->psci_version =3D QEMU_PSCI_VERSION_1_3; } } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436286; cv=none; d=zohomail.com; s=zohoarc; b=FCFo+sP0inHyxpWrAr4Vl1UdCRyu1xPF3srSwFudu/BFwCxUciWGxLONda9Yjdl01E2yOFupuIuDWtmBfho54HntgxIxTOdRqIMMACiorwjP+o3T72dsKfXc4dXiB6oDIuhxRv3m9GT+/tZ2FIv6ZYkAc2w5kHw+Fn41ghstA5c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436286; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5OPzgISuAu/kbfSbrNQxfH/4pMxloF/GjuM5QbpD2n0=; b=CCvdFYBofDriN2oFkpIoMSo9isOSfiL6pwBxNl+yB2GiBwXDCuX7/fCQpJq35O6TdbGu7i9LJbEu/yaq6wtAqjUzro4bB6G1DLkCK1iUicthHbFYIHTlQaKKNM6oZjcYYoR9t9ULAM4hKDv0KoBfeZuBtaUAHEl6SFXsg6Kpem0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436286709655.615206375056; Wed, 14 Jan 2026 16:18:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB32-0001jd-Ou; Wed, 14 Jan 2026 19:17:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB31-0001eO-6q for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:11 -0500 Received: from p-west3-cluster5-host8-snip4-7.eps.apple.com ([57.103.72.20] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB2x-00028B-Hr for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:10 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 559B418000EB; Thu, 15 Jan 2026 00:17:02 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 6707318000EA; Thu, 15 Jan 2026 00:16:55 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=5OPzgISuAu/kbfSbrNQxfH/4pMxloF/GjuM5QbpD2n0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=INz7sG5zB/wbl8bdPvNy8a2scIEL6IFWgjUe9CjQIPU5asw9l/8dou5R1lqeF3DlUypiL9+fHAI5adY3N8RUZmGcoHgHL8tYZ3hWPXXnHTEMqWFFLs6lR85b4T9Ewp84QQWK8d7Fr5TmffG63kjjOEX/A50Lyw1bA/XtMHGE2Uq19Z/NerLbqalQ0Y7QMh4CJV4wNyRRJ248IW4r/fqIM7tgmCtuDi53wSVt4xGgbGuMUIPsamvkRUryaqFioMWx+odgQz9esI22UT/u2k6hGQFeFQJVYe7+kj2Q6U/tVJFgy0Cu1pLayPbrkqjokGa9mWzOBllkSfzJqvvNPsOGiQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 18/26] whpx: arm64: clamp down IPA size Date: Thu, 15 Jan 2026 01:14:57 +0100 Message-ID: <20260115001505.57237-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX8EEffDEFFUmw C9ZP4JzusdsgnBpPETCtnz0MTZWwV3Q41lWi8Q5MeXAwezKo2H/80Ginn8+nRiPLLe4byhF7Htl iSamgO0VYxl/B7WemTyoS8AhMmKc7BAbMRaAIxiH+kpXv+gsQYzdc0PatC0FYjPtOm3gR9FMzQi noatSHGksNFaJKzRj4JSbtyqRQSAD5sSjVPM2JxR5b5Ger078ZP4Dju8UFelOSI7Bb6Jndh9n3p f5V8sxGThJNxrnft1wkta32LtRl8AybSkOCuaQRfSi1FrzWBlCytdweQhrUV0K2MwF6f4DrK+l2 v4W5JQdnocfpgVblKdb X-Proofpoint-ORIG-GUID: 3P1pzU3P7GO5ZBNJDoxUnjDukt2kw_fB X-Authority-Info: v=2.4 cv=Wb4BqkhX c=1 sm=1 tr=0 ts=69683201 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=wAo57kR77d7e8uaIccUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 3P1pzU3P7GO5ZBNJDoxUnjDukt2kw_fB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABSz7kRtiN2kffA1Smxvzm7Yjr/eYuEBcaPQXcGLBkw9t6B7qMN/IPMmtlBIQp9kgkmtAMvVOfA73vVu2sXLGtlQSjXZWal78lcoTdzHVHwoSQduVd4dFssLv+sNT2C022/e/0D5VENIPdO/Ipox4AGYDF3yt0KxdNqRXy3vqIwH+Hwv7exx9/R1rF5wy3e4mSvmAR+YQpA5sG504zDuCErZunvOE+ibwRvh9ALTWKI5tkNdfhVwsAbtPfuLt+Dc1dHE+zolpb+4j8TrC4UlqsGuoSCuc/nI5jKxH92aj2O/MUnJBACwtaN8ml5E5ryZ0f6vBC68WiWRSLFoysM4VVaGj+uNMrtnOTxpBo/XQ4H29aFhyPfV/tjzMYjevBp+wzFeXSlcRkW2xGkdoJg0DeTI8tV3BynGKfmqNZ3VEEoH/x6Ls508f0fwfDZ4XTpEETs9DN+IlO+07jmUuxtlDEFT1BRmJhER8u9cxOOhOVuhq6FaBVWQ0EiUaFQa4LpwtNLnWwyjfTJgKAAhZy7f7klGLtPDqMcvmeJP6t7taGkbJWM3yyjv7r45Ptxbmkz+oBE5M0UsT88zq30qXl2SuNH1GC7XcISwsdzgVOJFPO8PCdSjV1x1QlYiLQ8NBTvQwzhvL+OKxmZGQ8Sino40NXmZ16LGeR80ieFPfZr9ROCAels0EYkEuWjId95RlsedfZC001ovqid7QXkCyL7vuUZLrl/lF+OMaa6rag+fAyDMQce7ejEzIAoaK+Di9NL6Y6r5yT097KFJLcMxTQ5p2nFhQEGgOoBWnbt1Jqza380YyDRXZZ5MbeBGeg83kZdF62P+Zr+w+vV+hPKmV4Rec+IUtT7lOjkjHNVgelxtxYkUn8xjBM9kflvlYwupuSXTIR0C5qLJY0ApFdVc0pzfd+xsk40RN2+JEOSuR69etf3Mvkm7c= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.20; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436288250158500 Content-Type: text/plain; charset="utf-8" Code taken from HVF and adapted for WHPX use. Note that WHPX doesn't have a default vs maximum IPA distinction. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt.c | 32 ++++++++++++++++++++++++++ include/hw/core/boards.h | 1 + target/arm/whpx/meson.build | 2 ++ target/arm/whpx/whpx-all.c | 46 +++++++++++++++++++++++++++++++++++++ target/arm/whpx/whpx-stub.c | 15 ++++++++++++ target/arm/whpx_arm.h | 16 +++++++++++++ 6 files changed, 112 insertions(+) create mode 100644 target/arm/whpx/whpx-stub.c create mode 100644 target/arm/whpx_arm.h diff --git a/hw/arm/virt.c b/hw/arm/virt.c index b51c97a020..06513728d3 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -72,6 +72,7 @@ #include "hw/core/irq.h" #include "kvm_arm.h" #include "hvf_arm.h" +#include "whpx_arm.h" #include "hw/firmware/smbios.h" #include "qapi/visitor.h" #include "qapi/qapi-visit-common.h" @@ -3321,6 +3322,36 @@ static int virt_kvm_type(MachineState *ms, const cha= r *type_str) return fixed_ipa ? 0 : requested_pa_size; } =20 +static int virt_whpx_get_physical_address_range(MachineState *ms) +{ + VirtMachineState *vms =3D VIRT_MACHINE(ms); + + int max_ipa_size =3D whpx_arm_get_ipa_bit_size(); + + /* We freeze the memory map to compute the highest gpa */ + virt_set_memmap(vms, max_ipa_size); + + int requested_ipa_size =3D 64 - clz64(vms->highest_gpa); + + /* + * If we're <=3D the default IPA size just use the default. + * If we're above the default but below the maximum, round up to + * the maximum. whpx_arm_get_max_ipa_bit_size() conveniently only + * returns values that are valid ARM PARange values. + */ + if (requested_ipa_size <=3D max_ipa_size) { + requested_ipa_size =3D max_ipa_size; + } else { + error_report("-m and ,maxmem option values " + "require an IPA range (%d bits) larger than " + "the one supported by the host (%d bits)", + requested_ipa_size, max_ipa_size); + return -1; + } + + return requested_ipa_size; +} + static int virt_hvf_get_physical_address_range(MachineState *ms) { VirtMachineState *vms =3D VIRT_MACHINE(ms); @@ -3420,6 +3451,7 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) mc->get_default_cpu_node_id =3D virt_get_default_cpu_node_id; mc->kvm_type =3D virt_kvm_type; mc->hvf_get_physical_address_range =3D virt_hvf_get_physical_address_r= ange; + mc->whpx_get_physical_address_range =3D virt_whpx_get_physical_address= _range; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler =3D virt_machine_get_hotplug_handler; hc->pre_plug =3D virt_machine_device_pre_plug_cb; diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 07f8938752..0b2aefb126 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -278,6 +278,7 @@ struct MachineClass { void (*wakeup)(MachineState *state); int (*kvm_type)(MachineState *machine, const char *arg); int (*hvf_get_physical_address_range)(MachineState *machine); + int (*whpx_get_physical_address_range)(MachineState *machine); =20 BlockInterfaceType block_default_type; int units_per_default_bus; diff --git a/target/arm/whpx/meson.build b/target/arm/whpx/meson.build index 1de2ef0283..3df632c9d3 100644 --- a/target/arm/whpx/meson.build +++ b/target/arm/whpx/meson.build @@ -1,3 +1,5 @@ arm_system_ss.add(when: 'CONFIG_WHPX', if_true: files( 'whpx-all.c', )) + +arm_common_system_ss.add(when: 'CONFIG_WHPX', if_false: files('whpx-stub.c= ')) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 62fda15597..fce4e1ba10 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -35,6 +35,7 @@ #include "system/whpx-accel-ops.h" #include "system/whpx-all.h" #include "system/whpx-common.h" +#include "whpx_arm.h" #include "hw/arm/bsa.h" #include "arm-powerctl.h" =20 @@ -633,6 +634,40 @@ static void whpx_cpu_update_state(void *opaque, bool r= unning, RunState state) { } =20 +uint32_t whpx_arm_get_ipa_bit_size(void) +{ + WHV_CAPABILITY whpx_cap; + UINT32 whpx_cap_size; + HRESULT hr; + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodePhysicalAddressWidth, &whpx_cap, + sizeof(whpx_cap), &whpx_cap_size); + if (FAILED(hr)) { + error_report("WHPX: failed to get supported" + "physical address width, hr=3D%08lx", hr); + } + + /* + * We clamp any IPA size we want to back the VM with to a valid PARange + * value so the guest doesn't try and map memory outside of the valid = range. + * This logic just clamps the passed in IPA bit size to the first valid + * PARange value <=3D to it. + */ + return round_down_to_parange_bit_size(whpx_cap.PhysicalAddressWidth); +} + +static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARMISARegisters *isar) +{ + uint32_t ipa_size =3D whpx_arm_get_ipa_bit_size(); + uint64_t id_aa64mmfr0; + + /* Clamp down the PARange to the IPA size the kernel supports. */ + uint8_t index =3D round_down_to_parange_index(ipa_size); + id_aa64mmfr0 =3D GET_IDREG(isar, ID_AA64MMFR0); + id_aa64mmfr0 =3D (id_aa64mmfr0 & ~R_ID_AA64MMFR0_PARANGE_MASK) | index; + SET_IDREG(isar, ID_AA64MMFR0, id_aa64mmfr0); +} + int whpx_init_vcpu(CPUState *cpu) { HRESULT hr; @@ -708,6 +743,7 @@ int whpx_init_vcpu(CPUState *cpu) val.Reg64 =3D deposit64(arm_cpu->mp_affinity, 31, 1, 1 /* RES1 */); whpx_set_reg(cpu, WHvArm64RegisterMpidrEl1, val); =20 + clamp_id_aa64mmfr0_parange_to_ipa_size(&arm_cpu->isar); return 0; =20 error: @@ -727,6 +763,8 @@ int whpx_accel_init(AccelState *as, MachineState *ms) UINT32 whpx_cap_size; WHV_PARTITION_PROPERTY prop; WHV_CAPABILITY_FEATURES features; + MachineClass *mc =3D MACHINE_GET_CLASS(ms); + int pa_range =3D 0; =20 whpx =3D &whpx_global; /* on arm64 Windows Hypervisor Platform, vGICv3 always used */ @@ -737,6 +775,14 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + if (mc->whpx_get_physical_address_range) { + pa_range =3D mc->whpx_get_physical_address_range(ms); + if (pa_range < 0) { + ret =3D -EINVAL; + goto error; + } + } + whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( diff --git a/target/arm/whpx/whpx-stub.c b/target/arm/whpx/whpx-stub.c new file mode 100644 index 0000000000..32e434a5f6 --- /dev/null +++ b/target/arm/whpx/whpx-stub.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * WHPX stubs for ARM + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#include "qemu/osdep.h" +#include "whpx_arm.h" + +uint32_t whpx_arm_get_ipa_bit_size(void) +{ + g_assert_not_reached(); +} diff --git a/target/arm/whpx_arm.h b/target/arm/whpx_arm.h new file mode 100644 index 0000000000..de7406b66f --- /dev/null +++ b/target/arm/whpx_arm.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * WHPX support -- ARM specifics + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#ifndef QEMU_WHPX_ARM_H +#define QEMU_WHPX_ARM_H + +#include "target/arm/cpu-qom.h" + +uint32_t whpx_arm_get_ipa_bit_size(void); + +#endif --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436361; cv=none; d=zohomail.com; s=zohoarc; b=W0bzbiSXHb5mTpfDYOKZ+xmXk6ZbcEP/SlKJUX9Ns+7HsfA6t8IcROrU7pj3SrY1r+g2UiKx5Tie4v7rymbpWp4/XiLMVetN4/qVzKcopOTgY0ALg1txK5lED6dci6vayMJwUI5reMoVTefK6iLElXXIctARUtj92NLxDpG7z4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436361; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/1iV9+91lqonkqhpLU7lG9nVe/pL6IoL+SeKGASMt8w=; b=AObp+LFuRM2ZgluXTu0C99EjH8J3m4/nyQd8U35M1anYcyEd4ys5J5OYF9GrS2++5YcQX3cZOv+cXNVPkATcUkFpx9X8Ba8AhmoHkho/jMkQBM31LSk5V9Kyz/R421o3RMNMZsmoa1AtOQDHr3dd0s+g6DwlgJ/te40LhEohyQ0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436361477353.5543152269398; Wed, 14 Jan 2026 16:19:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB37-0002NC-M8; Wed, 14 Jan 2026 19:17:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB35-00027e-VZ for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:16 -0500 Received: from p-west3-cluster5-host6-snip4-4.eps.apple.com ([57.103.72.57] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB33-0002AQ-No for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:15 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 06FDE18000B5; Thu, 15 Jan 2026 00:17:10 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 598E41800457; Thu, 15 Jan 2026 00:17:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=/1iV9+91lqonkqhpLU7lG9nVe/pL6IoL+SeKGASMt8w=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=I0Z/10Qz80kpaYiTkxKo10CBCymyXBVzZopQvpDg6XkUMOEVUDnMR+p9pRQxM+VRlKqqR7YaAqyGC7EZOdi5waC08D3SJA/fCSgdsrinOBok33MlEoB9wlzoT5o9DPD0ylGzOT3k2dEtPtTuUryJ/cjsCgnLbC+4fSBQ+sRMaRqpGLZ3qIKsn8EwCu8fANRO7ITqRDwMhTMs4gQJpu1bY516HujqF8Ov9xolLLOh6D4cprzY1aCWg8XKSR7MF1HX+YX9jeTfQLZsEBzGErNIabdVa24fAKTTXxF9mRwcGbnw6gxrEYR8x+FuifuN+enyteCLdMb2UWHN90o1sEFd+g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 19/26] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Date: Thu, 15 Jan 2026 01:14:58 +0100 Message-ID: <20260115001505.57237-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=O6k0fR9W c=1 sm=1 tr=0 ts=69683208 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2RVAx2gzJTwwV__86OcA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: mYhczQEXIIg9J1qD-86xgFNxlb8IPJJJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXzKGjGapbnbDt C8LQTLBsU/6chNZVQn/WC55/KuwWEvlqHOjuvnDx5lZopcq2FcPm82jejNDm+ZQGuwl+8ZWP6WS d52+a/M5bNItrI6r8vNeBo4RubvUlW6DUpDTrk2njHOW/94nuO1TIc0T95Pep3uYJQdXWpe+fUb LPZ3bbWrHyo/PLUkP5Xog0nUmuoVGiIoKZ4qtQbysIykxOKvruUWPvFuBpvpzrXmBTEKRDuPi9y Xl6ns9DkjKD2XbuFAb9hi9vxlIk11u7rsvHtXhXVqSIQWQnC6/FMszKA9YcpiHqWZGLJlpDlWN/ kR3aEp0Vh33PVKQvzuO X-Proofpoint-ORIG-GUID: mYhczQEXIIg9J1qD-86xgFNxlb8IPJJJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 bulkscore=0 clxscore=1030 mlxlogscore=999 adultscore=0 suspectscore=0 spamscore=0 malwarescore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAAB3uUyGNAj8bbh7iYK1kvZEiNOySUKD5Z8hJtgdYkk9Rs1FEMkCSCukib6l8XmImhUXAFnVJyezWQs9AsePtt8M4VN4+VSWJvFIDwTEjBmMeVE2atMLaSgfFXiZfJ+/7wYOEeK3zkYAXdrpAqirmRoHKTL0/0eN0dmEpx0xZXXwa/0a63+TF5got8u/waX+wS2VDbjE9nYyn0ZWaD34k+ZtqGlO7KgJNfdYt3ADh+kBarkhB/LdE9PL1kJzt0GA3cPY9E7dNA2wGMegZcwo/jtKIXO1kBB+HPkCl0D52+3N2JON9ZSOg/F7kaGXLR3TJ8P/bWeCTflVoAC72s1TXtf6WQwqX0B6lkADoe4xB8W35HZKgspT0oBamLFqyst/m7Wi5gyX1VmrniiyblbHOvg9ng4Rl8ef7CRUh96XCX7J4KJIevQ492wIpJKtm35c5Ln+vj14B1r9KJhyA+GhOF2q5SsSeD70dnCqCMWnJTPPmDS5tgquGy1L0hCqiyWOVazFALWAUf7q3vzGP0+C937Z1aR/DQ2bWxXAh9RjKfANk8vwJyz/NqsxiCyIdjUInqph8Ns92GFYrvG3jyWeuEeJf134BChmtakrTxzHB3+P7YmagAwKSIjga67FybY1vrSBKlgIERRlSqJmjuN8BiedJQGA2+O26EoMxCXmp8iCHrfTAVDnAD2SSUX0PaAL5REuerwRbsRIwrHr3fwCVw5h9ugRUZAD5bFKYGzroH27Y2ZD+mdSgAVbESa1hoeafC1RzG6MVpbomvTgYyHC0D/prBwnJue/iS8C+wXxdeG4Bl8D8ueP7vXFdfbYolbQUaUSIUc6fgzhe4c+egvQ/d5dmDykcLQCfLy09n16Y+kW/lu339CTDKHXEa8R9TLD8Gj9EHbYzPKUOz3oDV5X8qEryKVj5esrcRMzQMk9SciUA8PTGQCED5h7BRrgq0OHjBhg4iz5YmHoN2CBzkuKGg+II/ a Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.57; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436362714158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/hvf/hvf-all.c | 7 +++++-- hw/arm/virt.c | 43 +++++--------------------------------- include/hw/core/boards.h | 4 ++-- include/system/hvf_int.h | 5 +++++ target/arm/hvf-stub.c | 20 ------------------ target/arm/hvf/hvf.c | 6 +++--- target/arm/hvf_arm.h | 3 --- target/arm/meson.build | 1 - target/arm/whpx/whpx-all.c | 5 +++-- target/i386/hvf/hvf.c | 11 ++++++++++ 10 files changed, 34 insertions(+), 71 deletions(-) delete mode 100644 target/arm/hvf-stub.c diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 77f4e4e4f3..ce18bc0dac 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -17,6 +17,7 @@ #include "system/hvf_int.h" #include "hw/core/cpu.h" #include "hw/core/boards.h" +#include "target/arm/hvf_arm.h" #include "trace.h" =20 bool hvf_allowed; @@ -256,8 +257,10 @@ static int hvf_accel_init(AccelState *as, MachineState= *ms) int pa_range =3D 36; MachineClass *mc =3D MACHINE_GET_CLASS(ms); =20 - if (mc->hvf_get_physical_address_range) { - pa_range =3D mc->hvf_get_physical_address_range(ms); + + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + hvf_arch_get_default_ipa_bit_size(), hvf_arch_get_max_ipa_bit_= size()); if (pa_range < 0) { return -EINVAL; } diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 06513728d3..1cc4f2a1ad 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3322,43 +3322,11 @@ static int virt_kvm_type(MachineState *ms, const ch= ar *type_str) return fixed_ipa ? 0 : requested_pa_size; } =20 -static int virt_whpx_get_physical_address_range(MachineState *ms) +static int virt_get_physical_address_range(MachineState *ms, + int default_ipa_size, int max_ipa_size) { VirtMachineState *vms =3D VIRT_MACHINE(ms); =20 - int max_ipa_size =3D whpx_arm_get_ipa_bit_size(); - - /* We freeze the memory map to compute the highest gpa */ - virt_set_memmap(vms, max_ipa_size); - - int requested_ipa_size =3D 64 - clz64(vms->highest_gpa); - - /* - * If we're <=3D the default IPA size just use the default. - * If we're above the default but below the maximum, round up to - * the maximum. whpx_arm_get_max_ipa_bit_size() conveniently only - * returns values that are valid ARM PARange values. - */ - if (requested_ipa_size <=3D max_ipa_size) { - requested_ipa_size =3D max_ipa_size; - } else { - error_report("-m and ,maxmem option values " - "require an IPA range (%d bits) larger than " - "the one supported by the host (%d bits)", - requested_ipa_size, max_ipa_size); - return -1; - } - - return requested_ipa_size; -} - -static int virt_hvf_get_physical_address_range(MachineState *ms) -{ - VirtMachineState *vms =3D VIRT_MACHINE(ms); - - int default_ipa_size =3D hvf_arm_get_default_ipa_bit_size(); - int max_ipa_size =3D hvf_arm_get_max_ipa_bit_size(); - /* We freeze the memory map to compute the highest gpa */ virt_set_memmap(vms, max_ipa_size); =20 @@ -3367,8 +3335,8 @@ static int virt_hvf_get_physical_address_range(Machin= eState *ms) /* * If we're <=3D the default IPA size just use the default. * If we're above the default but below the maximum, round up to - * the maximum. hvf_arm_get_max_ipa_bit_size() conveniently only - * returns values that are valid ARM PARange values. + * the maximum. hvf/whpx_arch_get_max_ipa_bit_size() conveniently only + * return values that are valid ARM PARange values. */ if (requested_ipa_size <=3D default_ipa_size) { requested_ipa_size =3D default_ipa_size; @@ -3450,8 +3418,7 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) mc->get_valid_cpu_types =3D virt_get_valid_cpu_types; mc->get_default_cpu_node_id =3D virt_get_default_cpu_node_id; mc->kvm_type =3D virt_kvm_type; - mc->hvf_get_physical_address_range =3D virt_hvf_get_physical_address_r= ange; - mc->whpx_get_physical_address_range =3D virt_whpx_get_physical_address= _range; + mc->get_physical_address_range =3D virt_get_physical_address_range; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler =3D virt_machine_get_hotplug_handler; hc->pre_plug =3D virt_machine_device_pre_plug_cb; diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 0b2aefb126..26e0879e1a 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -277,8 +277,8 @@ struct MachineClass { void (*reset)(MachineState *state, ResetType type); void (*wakeup)(MachineState *state); int (*kvm_type)(MachineState *machine, const char *arg); - int (*hvf_get_physical_address_range)(MachineState *machine); - int (*whpx_get_physical_address_range)(MachineState *machine); + int (*get_physical_address_range)(MachineState *machine, + int default_ipa_size, int max_ipa_size); =20 BlockInterfaceType block_default_type; int units_per_default_bus; diff --git a/include/system/hvf_int.h b/include/system/hvf_int.h index 3d2be4092e..cecd4617d2 100644 --- a/include/system/hvf_int.h +++ b/include/system/hvf_int.h @@ -73,6 +73,8 @@ void assert_hvf_ok_impl(hv_return_t ret, const char *file= , unsigned int line, const char *hvf_return_string(hv_return_t ret); int hvf_arch_init(void); hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range); +uint32_t hvf_arch_get_default_ipa_bit_size(void); +uint32_t hvf_arch_get_max_ipa_bit_size(void); hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); void hvf_kick_vcpu_thread(CPUState *cpu); =20 @@ -120,4 +122,7 @@ int hvf_update_guest_debug(CPUState *cpu); */ bool hvf_arch_supports_guest_debug(void); =20 +uint32_t hvf_arch_get_default_ipa_bit_size(void); +uint32_t hvf_arch_get_max_ipa_bit_size(void); + #endif diff --git a/target/arm/hvf-stub.c b/target/arm/hvf-stub.c deleted file mode 100644 index ff137267a0..0000000000 --- a/target/arm/hvf-stub.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * QEMU Hypervisor.framework (HVF) stubs for ARM - * - * Copyright (c) Linaro - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "qemu/osdep.h" -#include "hvf_arm.h" - -uint32_t hvf_arm_get_default_ipa_bit_size(void) -{ - g_assert_not_reached(); -} - -uint32_t hvf_arm_get_max_ipa_bit_size(void) -{ - g_assert_not_reached(); -} diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index fa26f63a61..5e93c42047 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -731,7 +731,7 @@ static uint64_t hvf_get_reg(CPUState *cpu, int rt) static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARMISARegisters *isar) { uint32_t ipa_size =3D chosen_ipa_bit_size ? - chosen_ipa_bit_size : hvf_arm_get_max_ipa_bit_size(); + chosen_ipa_bit_size : hvf_arch_get_max_ipa_bit_size(); uint64_t id_aa64mmfr0; =20 /* Clamp down the PARange to the IPA size the kernel supports. */ @@ -827,7 +827,7 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUFea= tures *ahcf) return r =3D=3D HV_SUCCESS; } =20 -uint32_t hvf_arm_get_default_ipa_bit_size(void) +uint32_t hvf_arch_get_default_ipa_bit_size(void) { uint32_t default_ipa_size; hv_return_t ret =3D hv_vm_config_get_default_ipa_size(&default_ipa_siz= e); @@ -836,7 +836,7 @@ uint32_t hvf_arm_get_default_ipa_bit_size(void) return default_ipa_size; } =20 -uint32_t hvf_arm_get_max_ipa_bit_size(void) +uint32_t hvf_arch_get_max_ipa_bit_size(void) { uint32_t max_ipa_size; hv_return_t ret =3D hv_vm_config_get_max_ipa_size(&max_ipa_size); diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index ea82f2691d..5d19d82e5d 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -22,7 +22,4 @@ void hvf_arm_init_debug(void); =20 void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); =20 -uint32_t hvf_arm_get_default_ipa_bit_size(void); -uint32_t hvf_arm_get_max_ipa_bit_size(void); - #endif diff --git a/target/arm/meson.build b/target/arm/meson.build index ce155ba9b4..1ddc4b2a54 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -41,7 +41,6 @@ arm_common_system_ss.add(files('cpu.c')) arm_common_system_ss.add(when: 'TARGET_AARCH64', if_false: files( 'cpu32-stubs.c')) arm_common_system_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c')) -arm_common_system_ss.add(when: 'CONFIG_HVF', if_false: files('hvf-stub.c')) arm_common_system_ss.add(when: 'CONFIG_ARM_COMPATIBLE_SEMIHOSTING', if_true: files('common-semi-target.c')) arm_common_system_ss.add(files( diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index fce4e1ba10..038a9dcfd7 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -775,8 +775,9 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - if (mc->whpx_get_physical_address_range) { - pa_range =3D mc->whpx_get_physical_address_range(ms); + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); if (pa_range < 0) { ret =3D -EINVAL; goto error; diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 2023a7bfbb..9d41e51b83 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -225,6 +225,17 @@ int hvf_arch_init(void) return 0; } =20 +/* 48-bit on all Intel Macs. Function currently unused. */ +uint32_t hvf_arch_get_default_ipa_bit_size(void) +{ + g_assert_not_reached(); +} + +uint32_t hvf_arch_get_max_ipa_bit_size(void) +{ + g_assert_not_reached(); +} + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { return hv_vm_create(HV_VM_DEFAULT); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436286; cv=none; d=zohomail.com; s=zohoarc; b=dEyai/YiZ65r6BwEwQ/uMjCTdfnmR/iZ2rDeQTVrJninlYGGJWn1pd3afIX+DP2H32QzQnWO99fsDiDEDigeMY6o1tF0bmdQ5951pNNp/vPEENdka8Dd6dfhcmoQ32psCUX5aawTm4qJdrc6Y9zHGEORXvAfyzz26Hx2r0dprAw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436286; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hmtRjfpovQKAt6bOzupfSsq9QGbrBwhc/6trzg3cQyI=; b=W7HOqzJ1rKLbOrsczzqVTD3VWWtBJqKIDdvOflY6VHdrUj5fPnKHpSqBXaSmgcy5lOM54GVHhJI8GDRvz06dFkGFGRNMfqSFOj/b5zpnfbUeIp2oyucnmwIcZFqRQlSZhPVrYSgY6FPUCZDUFCqFcgvVC1kNJrnLOpOkacj3FTI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436286799760.5458238326013; Wed, 14 Jan 2026 16:18:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3Q-0003CJ-15; Wed, 14 Jan 2026 19:17:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3J-0002ti-6d for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:32 -0500 Received: from p-west3-cluster5-host11-snip4-6.eps.apple.com ([57.103.72.109] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3F-0002Cm-Tx for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:27 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 208301800463; Thu, 15 Jan 2026 00:17:20 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 640C9180045D; Thu, 15 Jan 2026 00:17:10 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hmtRjfpovQKAt6bOzupfSsq9QGbrBwhc/6trzg3cQyI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=cAEjSstkRdEbTvdoQLz5afO0JbUr6BtH1gOfF6hKo7LhFKqhac5Rt2Z7TR+04LpelTitwn0VyfufbgfmTWNfVdOAIBi0fDP8ZirWMyS+9EAix1Y2pZV2JBszzuSt5DCgJAk+yNPycDqDYh/zqihiU+G/TRNyzNoNEZLoHEf2YQdUh9Wy412EHIGBLYJuC4u3HbiHlzhMVwIBINdxsDosE7l+pt4mtCoTCDI8Y7NtEAAPTF1H8ZKSjSi/0dkU3/O9QvBZqFpuLZsx+ub7wotklbenwNwIpK60YDm6IfldLxBflN0XIXPDTTOvSuIDzgsLNhRNsokN2PHNVIksEntG7w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 20/26] whpx: arm64: implement -cpu host Date: Thu, 15 Jan 2026 01:14:59 +0100 Message-ID: <20260115001505.57237-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX71IV5POAXN9p UDSbYodItQi4BXrECbs+E36J31MMw9vYKEZ7hBhoLMG3KweXkCR0QlDpQ0/rDR6I9bIIsQaT0/V 7HEswn9s9PrtkiDQh/p1TKVo/hRjnr6afqiemeNFnDjf5r8NGqNMOzymQd7N+OXB8YRdFbLMkmt QCKd8++PoexoKJ3Lgrtd+DKENrkk5KtcbZC9Ni3HYnLY767ZLAaLDNezE2esR0shZI3+zSngEMI NJiL1a5AsbO4xuB0zzIYzFOMEv+5t+pM+1+iVkpiCQljHjsKtAwH7vYwU3HXc9Z/sH6LV6Hk4A6 quU7kk36qDfwQ/blSyk X-Proofpoint-GUID: JHMmC090WP4oNO6e145PJCjWYWWKjUSz X-Authority-Info: v=2.4 cv=A5Jh/qWG c=1 sm=1 tr=0 ts=69683213 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=L6Cw-x9jAAAA:20 a=KKAkSRfTAAAA:8 a=hGuVB2XOhXFvD5HHq_UA:9 a=cvBusfyB2V15izCimMoJ:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: JHMmC090WP4oNO6e145PJCjWYWWKjUSz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 phishscore=0 adultscore=0 spamscore=0 clxscore=1030 mlxscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABy2cfN994bbmpnDse5KrzwAEaGzsEwNhycD8I4VePEyuFsiPcgtH8Md3ko2UlsIA2DYeBEUk5StQpJMjAavkdnLXyRShUkEahWcsJ/PH97vLzg3Js2Ctny02c+K43meFNbF0YkeacXblb3JaJRCPr349OVsIgEwub2SLCPt4fk+e5HAWrGwuEd1mx5eWQoh9jEvjGGHcKaH/ZdnTcFL20Q8D2W+b62HsZknAphN8h+2CFWoahpK9BQzot5tkJLZLpovAUyLSOUtFlPHLBSXN/C80TmHSa7Df0OwkUICZ1aUaR5ssN05K5c036M0qjPY4InU1acXgEm6lKETz5wOumz1mwfzaUj8pRMRRPgaj07QXGhXWT7kA8dRBaT70qRhzNYtz3zc9RfaRAYBHWyzjc9pdLOkvvfbthi8p5SO/q9bif2JQJ8sLH4jbBW0g5BntUVG8mf9HNdJTspBT0rcFtKj1oJfvSWAB9P/LtDe1lS6RXR5sH4AXTYzPapCZdaeefGhGwksH7HsdB3ICO8Qo3yknj10xw0rVTMWlEHxw/D4xMil79SXjSytUy1SR6sXpSb9MRwFCI0cICHSFCvAFzO9pf+NLHIStDGBlua30EvNQMk2s2TkaCObYxD4D8gADqpsGUghTvOqgfiWQIZhWdnR5rRw7selAG/mGfdNIEtkaqGP5az846yqdwJgqAQFLxgEN4exmVWbJx8KZCp2HkdKnpg1AqyGjzASnvNFANzbAwN+2uAVo8WOCqDs+6SjVVO4YZLQEi2TF8FVUI9LYdxLhoArGs9RrC5AIrFaiqntthBnekAiFMhZ6GKdbfHRXKcj9KJgcgtILCSLc01Wib/TR2cO4egicJorFhX5ts42wDY8AaxaxWChWtQ4smrWZm+cSzcviwr/RKOVPriTXBOdZ5fsDMVfuNc8cc20WcF5u8V4uAOBx6HeNyk4bIRuAgAWhPEnMqZoA= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.109; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436288259158500 Content-Type: text/plain; charset="utf-8" Logic to fetch MIDR_EL1 for cpu 0 adapted from: https://github.com/FEX-Emu/FEX/blob/e6de17e72ef03aa88ba14fa0ec13163061608c7= 4/Source/Windows/Common/CPUFeatures.cpp#L62 Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/cpu64.c | 17 +++--- target/arm/whpx/whpx-all.c | 104 +++++++++++++++++++++++++++++++++++++ target/arm/whpx_arm.h | 1 + 3 files changed, 116 insertions(+), 6 deletions(-) diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index bf30381370..689babe822 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -26,10 +26,13 @@ #include "qemu/units.h" #include "system/kvm.h" #include "system/hvf.h" +#include "system/whpx.h" +#include "system/hw_accel.h" #include "system/qtest.h" #include "system/tcg.h" #include "kvm_arm.h" #include "hvf_arm.h" +#include "whpx_arm.h" #include "qapi/visitor.h" #include "hw/core/qdev-properties.h" #include "internals.h" @@ -521,7 +524,7 @@ void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp) isar2 =3D FIELD_DP64(isar2, ID_AA64ISAR2, APA3, 0); isar2 =3D FIELD_DP64(isar2, ID_AA64ISAR2, GPA3, 0); =20 - if (kvm_enabled() || hvf_enabled()) { + if (hwaccel_enabled()) { /* * Exit early if PAuth is enabled and fall through to disable it. * The algorithm selection properties are not present. @@ -598,10 +601,10 @@ void aarch64_add_pauth_properties(Object *obj) =20 /* Default to PAUTH on, with the architected algorithm on TCG. */ qdev_property_add_static(DEVICE(obj), &arm_cpu_pauth_property); - if (kvm_enabled() || hvf_enabled()) { + if (hwaccel_enabled()) { /* * Mirror PAuth support from the probed sysregs back into the - * property for KVM or hvf. Is it just a bit backward? Yes it is! + * property for HW accel. Is it just a bit backward? Yes it is! * Note that prop_pauth is true whether the host CPU supports the * architected QARMA5 algorithm or the IMPDEF one. We don't * provide the separate pauth-impdef property for KVM or hvf, @@ -769,6 +772,8 @@ static void aarch64_host_initfn(Object *obj) } #elif defined(CONFIG_HVF) hvf_arm_set_cpu_features_from_host(cpu); +#elif defined(CONFIG_WHPX) + whpx_arm_set_cpu_features_from_host(cpu); #else g_assert_not_reached(); #endif @@ -779,8 +784,8 @@ static void aarch64_host_initfn(Object *obj) =20 static void aarch64_max_initfn(Object *obj) { - if (kvm_enabled() || hvf_enabled()) { - /* With KVM or HVF, '-cpu max' is identical to '-cpu host' */ + if (hwaccel_enabled()) { + /* When hardware acceleration enabled, '-cpu max' is identical to = '-cpu host' */ aarch64_host_initfn(obj); return; } @@ -799,7 +804,7 @@ static const ARMCPUInfo aarch64_cpus[] =3D { { .name =3D "cortex-a57", .initfn =3D aarch64_a57_initfn }, { .name =3D "cortex-a53", .initfn =3D aarch64_a53_initfn }, { .name =3D "max", .initfn =3D aarch64_max_initfn }, -#if defined(CONFIG_KVM) || defined(CONFIG_HVF) +#if defined(CONFIG_KVM) || defined(CONFIG_HVF) || defined(CONFIG_WHPX) { .name =3D "host", .initfn =3D aarch64_host_initfn }, #endif }; diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 038a9dcfd7..3b79b8b376 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -41,6 +41,17 @@ =20 #include #include +#include + +typedef struct ARMHostCPUFeatures { + ARMISARegisters isar; + uint64_t features; + uint64_t midr; + uint32_t reset_sctlr; + const char *dtb_compatible; +} ARMHostCPUFeatures; + +static ARMHostCPUFeatures arm_host_cpu_features; =20 struct whpx_reg_match { WHV_REGISTER_NAME reg; @@ -668,6 +679,99 @@ static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARM= ISARegisters *isar) SET_IDREG(isar, ID_AA64MMFR0, id_aa64mmfr0); } =20 +static uint64_t whpx_read_midr(void) +{ + HKEY key; + uint64_t midr_el1; + DWORD size =3D sizeof(midr_el1); + const char *path =3D "Hardware\\Description\\System\\CentralProcessor\= \0\\"; + assert(!RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &key)); + assert(!RegGetValueA(key, NULL, "CP 4000", RRF_RT_REG_QWORD, NULL, &mi= dr_el1, &size)); + RegCloseKey(key); + return midr_el1; +} + +static bool whpx_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) +{ + const struct isar_regs { + WHV_REGISTER_NAME reg; + uint64_t *val; + } regs[] =3D { + { WHvArm64RegisterIdAa64Pfr0El1, &ahcf->isar.idregs[ID_AA64PFR0_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Pfr1El1, &ahcf->isar.idregs[ID_AA64PFR1_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Dfr0El1, &ahcf->isar.idregs[ID_AA64DFR0_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Dfr1El1 , &ahcf->isar.idregs[ID_AA64DFR1_E= L1_IDX] }, + { WHvArm64RegisterIdAa64Isar0El1, &ahcf->isar.idregs[ID_AA64ISAR0_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Isar1El1, &ahcf->isar.idregs[ID_AA64ISAR1_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Isar2El1, &ahcf->isar.idregs[ID_AA64ISAR2_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr0El1, &ahcf->isar.idregs[ID_AA64MMFR0_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr1El1, &ahcf->isar.idregs[ID_AA64MMFR1_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr2El1, &ahcf->isar.idregs[ID_AA64MMFR2_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr3El1, &ahcf->isar.idregs[ID_AA64MMFR2_= EL1_IDX] } + }; + + int i; + WHV_REGISTER_VALUE val; + + ahcf->dtb_compatible =3D "arm,armv8"; + ahcf->features =3D (1ULL << ARM_FEATURE_V8) | + (1ULL << ARM_FEATURE_NEON) | + (1ULL << ARM_FEATURE_AARCH64) | + (1ULL << ARM_FEATURE_PMU) | + (1ULL << ARM_FEATURE_GENERIC_TIMER); + + for (i =3D 0; i < ARRAY_SIZE(regs); i++) { + clean_whv_register_value(&val); + whpx_get_global_reg(regs[i].reg, &val); + *regs[i].val =3D val.Reg64; + } + + /* + * MIDR_EL1 is not a global register on WHPX + * As such, read the CPU0 from the registry to get a consistent value. + * Otherwise, on heterogenous systems, you'll get variance between CPU= s. + */ + ahcf->midr =3D whpx_read_midr(); + + clamp_id_aa64mmfr0_parange_to_ipa_size(&ahcf->isar); + + /* + * Disable SVE, which is not supported by QEMU whpx yet. + * Work needed for SVE support: + * - SVE state save/restore + * - any potentially needed VL management + * Also disable SME at the same time. (not currently supported by Hype= r-V) + */ + SET_IDREG(&ahcf->isar, ID_AA64PFR0, + GET_IDREG(&ahcf->isar, ID_AA64PFR0) & ~R_ID_AA64PFR0_SVE_MAS= K); + + SET_IDREG(&ahcf->isar, ID_AA64PFR1, + GET_IDREG(&ahcf->isar, ID_AA64PFR1) & ~R_ID_AA64PFR1_SME_MAS= K); + + return true; +} + +void whpx_arm_set_cpu_features_from_host(ARMCPU *cpu) +{ + if (!arm_host_cpu_features.dtb_compatible) { + if (!whpx_enabled() || + !whpx_arm_get_host_cpu_features(&arm_host_cpu_features)) { + /* + * We can't report this error yet, so flag that we need to + * in arm_cpu_realizefn(). + */ + cpu->host_cpu_probe_failed =3D true; + return; + } + } + + cpu->dtb_compatible =3D arm_host_cpu_features.dtb_compatible; + cpu->isar =3D arm_host_cpu_features.isar; + cpu->env.features =3D arm_host_cpu_features.features; + cpu->midr =3D arm_host_cpu_features.midr; + cpu->reset_sctlr =3D arm_host_cpu_features.reset_sctlr; +} + int whpx_init_vcpu(CPUState *cpu) { HRESULT hr; diff --git a/target/arm/whpx_arm.h b/target/arm/whpx_arm.h index de7406b66f..df65fd753c 100644 --- a/target/arm/whpx_arm.h +++ b/target/arm/whpx_arm.h @@ -12,5 +12,6 @@ #include "target/arm/cpu-qom.h" =20 uint32_t whpx_arm_get_ipa_bit_size(void); +void whpx_arm_set_cpu_features_from_host(ARMCPU *cpu); =20 #endif --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436267; cv=none; d=zohomail.com; s=zohoarc; b=fQj3mydvq4qJZUz8hXiHa8qfsLc322QsP9+FsECYaHcIVGG30xry3tbGBxX+qjSb/FeuTLwFQB1WB7lS4iXGJohqE7yclReXC7fxL3UZDAKPBDntAY50B1ShuXKpXUqx/LHHTK1WkbLYyKHPwCAi2ODvxEfbbNEM0GMmYoWjeH4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436267; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ECjpVySg6XZ/QHOAAJ+X/A1Hu2Jhdy4KwMcQqAyYNsk=; b=nlYvJT4jITqhu04CV5677WrjKduvErY1UOJum3ekDF8/NAgVkQEKSTUEyyn74icoC8TD9NHS0GtcyVK5PewDzMy/PAfOXBj6PnSHxE84g2TjPHjlaZOEK0yoqYOk0f16Hs0rFEzxhroUkM7EXdS3/oDaObPZxGb2zwJHzGAgRrQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436267769382.0729497868523; Wed, 14 Jan 2026 16:17:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3S-0003UH-Vm; Wed, 14 Jan 2026 19:17:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3O-000339-9H for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:35 -0500 Received: from p-west3-cluster5-host7-snip4-4.eps.apple.com ([57.103.72.7] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3M-0002E7-Qk for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:34 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 4848F18000EA; Thu, 15 Jan 2026 00:17:28 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 23E181800464; Thu, 15 Jan 2026 00:17:20 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ECjpVySg6XZ/QHOAAJ+X/A1Hu2Jhdy4KwMcQqAyYNsk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=UemdLdlnW3pw756109SGHhqjByNQoXkKy8QR53VjtLsW4QmTIiiZQ200Xy4OId6+BeqNUQyRAX/B1uxpRmIA0mNfLtHATtYarZslj2FOuuJ5KEGaXi1TFj0UbL4s+fcVN4X/LjOrNDqdnWMPHzO+jHoxQsRKEj3rI4Ry3dnUw42cQ/IzjXz0BDOdHskI10kE1NY5tqvAq1A3/jUCiLNou5tqudCb4w6spfTyKdt18NyF29HSNcVJMHFfQqKk+sRj2x7x1p5QVRRndTi4J77EdWDH7ogeG325s7iz3+JavmReVNiNU8daXT3UMEdJ5EvKHzRgFn4rfQouSIxa3TIKtA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 21/26] target/arm: whpx: instantiate GIC early Date: Thu, 15 Jan 2026 01:15:00 +0100 Message-ID: <20260115001505.57237-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=NcvrFmD4 c=1 sm=1 tr=0 ts=6968321a cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=EYz79TNVRTG0waESW9UA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: -A4VqT8Yb9eqdo194hmSRYXls96GieF_ X-Proofpoint-GUID: -A4VqT8Yb9eqdo194hmSRYXls96GieF_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX134Ykxz/O9dZ qdUr0a7n9t/nBu39RWn+MvRLDdC0uWWn2m8xeLfR5xbCAMxH1EtvqfzHhew7+z2TBbRKE7FtUmb yHXWXnpHBkOn50tcYxxzvRpp3xPnnVozTDY460wSemaqJCOx1bFsm9FIkxbdPgdT1xYjbFnjML3 luSb5wEUwmOYlEPki564bjAmjgbA+3LyvPd3NqBHdFtuO3WQgPp2RPQUMJMR4yt1VKJwUYhjX1c Xoq2NL1laGaEGsbCIpa/vwmbjd2FgUIfQKXVuBgvTIJfoMU88/FoyFRKdcG4NdQQ2QNk4hQCB6t tKRHXll/M+jh9TerOcE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1030 malwarescore=0 phishscore=0 mlxscore=0 spamscore=0 adultscore=0 bulkscore=0 mlxlogscore=729 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAAB/g9miUHotC68RiIo/rG/KyaoUrevrCalQcvf3K7BMUg696QP243Wy8hynCqU2v0hes0HxxQSriSW59wxu1ZqSyLMqL5XDwL2o9/GYTkVWoskctwOdfck28UZcU4yODbMWUNrxTLKOTzx4aS7Ezb94e66NxYBSQULsPK23yGupbnL2k+o7sbnmUQnLIuXp9HeJ5BmYs39Y2ggnPMdbPrdN5HFESNhMSWYwkxioCpfE93vK+IBxE1ZaE8V0Ts5Ojsibu29/czvTUBKBMUopnm0jmMZMiYxcbxkI/kEgAIPmhUMQFP8Na7FhqU6sJxLOCmo7lyk8tZjyp8nC0DK22INasjsXFUOCykshvBVwrQeIJFI8LZrJPhwdCS07imq/GJ9p1tuB4lZof26jjkJtjhmV+tybae+wBZnwM+qXaN4q3NqQYRIuFCGrTG5zP+FeCeGntRx4jhyz7s1kVQxFgTQzV+U2rCLIgNNZY9XPZilqOddXhBXXDX3uzQ+okJgH4Z4obvo1XgK/pIza5RMF0OFEXBwpTAHmmXa2WXdJpbHzSdPnHthEeYkVkgBt4lnOaaCU1xI5YEQpgZBfJx/bXISx3NheJsRgTdiGnjYUhEpVKaYAeUe2OvsBUHYTRwlNX7eG2CWB2Ecmn/WBAqnesf8d0W8OwKprHVoHETcc3tLB521gImGpIAVWfkD5JBze43rs4vdHQNS1CbghqRgmftY/970AphdV/8fioo6s0bHFDta/Sa0AvaoMDIntc60tcueS5Lc1AWr+sCwdUedy+yMSls6U20cQ+NS7w7WGWwrAyULZz418gl5yW1/Pb7/zUuB8AM8TJVCVDiTTrIjyg6HucpTNduyveMpenRhpATEywh0mJUn8LWPtIrHlvl9zQ7BbmXIwovL9eFPfIZH5RC7CjkRFBRb0hVLI+dQrI8jxDACA5J0iI0TFw== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.7; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436268203158500 Content-Type: text/plain; charset="utf-8" While figuring out a better spot for it, put it in whpx_accel_init. Needs to be done before WHvSetupPartition. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/whpx/whpx-all.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 3b79b8b376..ab31371aea 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -945,6 +945,29 @@ int whpx_accel_init(AccelState *as, MachineState *ms) =20 memset(&prop, 0, sizeof(prop)); =20 + WHV_ARM64_IC_PARAMETERS ic_params =3D { + .EmulationMode =3D WHvArm64IcEmulationModeGicV3, + .GicV3Parameters =3D { + .GicdBaseAddress =3D 0x08000000, + .GitsTranslaterBaseAddress =3D 0x08080000, + .GicLpiIntIdBits =3D 0, + .GicPpiPerformanceMonitorsInterrupt =3D VIRTUAL_PMU_IRQ, + .GicPpiOverflowInterruptFromCntv =3D ARCH_TIMER_VIRT_IRQ + } + }; + prop.Arm64IcParameters =3D ic_params; + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeArm64IcParameters, + &prop, + sizeof(prop)); + if (FAILED(hr)) { + error_report("WHPX: Failed to enable GICv3 interrupt controller, h= r=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + hr =3D whp_dispatch.WHvSetupPartition(whpx->partition); if (FAILED(hr)) { error_report("WHPX: Failed to setup partition, hr=3D%08lx", hr); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436298; cv=none; d=zohomail.com; s=zohoarc; b=iOkYMLFP1S9/amgoxuD+8ucN2nKl8Yh3jNGlHA2L6nqd5Oz3TwChg7un9ax98VdLOhMUaywBijKT9WgLRcV6BXaMe2yoOeAFfgrrgJmy+1/vSTW5QpG6M/naEUpcQGtRHldZq8ts0LWTkImz1dTO+v29t60mca2JiuLbNDdc7jA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436298; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NqtcHJC/jmtg6zxYmtUDz1F7scGINBcHMu0R0Ue6BzE=; b=i58S5f/zCSirvcxl/mKbHHkcePjbndvqVsiR+OSjDadAXa+furRMIYfwRNmSMOwb4gZfsuKnt8Qyk9XE7Isa2tyZIdXOK8C6fn3JUpbACqRJWU00anJEayLsxzeSp4586u/wjEzQm//tLZlGJhGk9pN7TQ6W81O0VAfKGlpulYw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176843629889096.99982369153724; Wed, 14 Jan 2026 16:18:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3Z-0004Ir-6p; Wed, 14 Jan 2026 19:17:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3W-00041l-HB for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:42 -0500 Received: from p-west3-cluster5-host8-snip4-5.eps.apple.com ([57.103.72.18] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3V-0002GE-1p for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:42 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 912C81800462; Thu, 15 Jan 2026 00:17:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 02AC9180040C; Thu, 15 Jan 2026 00:17:27 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=NqtcHJC/jmtg6zxYmtUDz1F7scGINBcHMu0R0Ue6BzE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=V8hozmfhGkI0na0XLftap3dBJ9Gp77EIHdG+rlgn6NXRLFMZ+JJNesR9d4WzZ5A0sFIROgN4k0sjFHYS15sUajhZxF7FjCCxVe1UkjVH5fCsFbs69jTDRj5AhN8CMk1B/uif4C8pqPcgZpaD7Uo6KOyOj3F8h0PXc9T1LINdy5C9ByY8L+ruERAGXCFS7/3kfYQZEuX5JZQyw7l7Yl5CYQkujrpajWA2QO8eZIUw+qjr1leGDuAHiiF8WyjMP7Avly1bAeeVP3t3D9xiWJWt8diM6lrEU2A4zlaZS9AJdthXm9z4zga4zQy4Fzcpz2dict4sGbpH5Q2uuakrw3160w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 22/26] whpx: arm64: gicv3: add migration blocker Date: Thu, 15 Jan 2026 01:15:01 +0100 Message-ID: <20260115001505.57237-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: h9ko_pP5ovDxd5V6a8gEzwQKFYzeheCr X-Authority-Info: v=2.4 cv=R9kO2NRX c=1 sm=1 tr=0 ts=69683223 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ZsnAEJ0dk2gu5naU1fIA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX/6CvAKPIskVw xpU+T1CoE6BIFCgCTtSc6qgib9Apmi2WBx5HGLjnlbgppwGtp3gBIkUxCzUcULv9YNWnHEVMhug PPPGZem56N3pTExdrH4bI53zNq2rwXt3ubNu5O/m8LXjMOyLvQoVVkHbA62lTs+N1SZTV429oZ5 afXQ55mUYDkaR3S42XXMyNOltanvNJ7psRWCOLSVZK+hinIw36YFNtYXOR8Vxg4n+zg2tauo4sC jrOL0AQO8Y2SAgFRZ9XO/D/SskN/qPwnoy/iid4YHzJgtIFnXkcwCLVXMpykDoZMOJr7HYKz7AZ 8YyUb97KQjIYvi666PF X-Proofpoint-GUID: h9ko_pP5ovDxd5V6a8gEzwQKFYzeheCr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 spamscore=0 clxscore=1030 suspectscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABajZq1bfHG3XADGJGy8J0qB9Oyslz0WK0KSdjK5Pg+eaJctKFQ1TOX6yfjLndE6ptgjj/D8zAs0fo56BhLd/M6Mlh95XFO3HbvKwVdOrbvZ3e3LapmX01TjjO1kP4bJBkQkZYMVABu0xVCCeMJUbB6wmYTDCEaPB/6vU+z4CxKRv1/OJ9tP14ddNf/XI0gNm7K/cjoWsZPUzOVmvPz2WqLWbanPn7ZTXcfYVfwjTa8epGIc96Ui8U328WyXQwtQND9QoEal31Zb6hsFpmq8kmKVavI2iA9To4n2OCRm/8YoEmZ0npJ52EqT+NmU62KWARy2ffSWy0MpEPy7fNi85M2IVzJ69/aJjpaYgQiy76sdzHbwpdNwhHW6vYrdIGX96gbL+JSpYySvMqSoICCfM3GNqKBItWh4qFUui8ko+1Qjg3gdTLs4jEkgC275sYBuOXP6j+Wc+o7ANo73vjwTeDKjBjb5DOd3F48nhjiTz87wJV8sX/UsdgtETsqwBP0wgNa1WKJLWZK6W3JL9R3vFb586Jp5qTjcdW34XkXnxUlE/AAQ45ge5AMk4O8CAX3vvOO0QsuEs4HN/xOtH/GWSWYdmDOXxU7zsCbTxkJHKZ1Z6fL079iHyR9Ml2mwraWA+SeHt+iIWWcwBEIo9cJS0FSYatZDF+3J5cXU60RGk4X9JI2GO2cTaSbMAmIal1nEqfghxINhhDKOOiefHQpdzF9E5C+BY78NL2vF3rugQllIyOT2hj2r7h9SVMLTu441L8LRxjEXZxcD323M8qvp/kzcb+4XVgZFQ7hFGiagjd+XmBJie+PFD8p/xi5ezjnv3md0gzim0CMEP5TsCywtWvyNEXpVNGGzvvuwZKtKv2YJnLPj9gxnxRjoosFIHnnBKUPIhBe1YtmpsVaLZewYQxVxm+zuduEbIXzqlIn8TzLFbidy8/IsTC1AXbVqgnLhG4Rx6uVvkRFmzp Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.72.18; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436300407158500 Content-Type: text/plain; charset="utf-8" GICv3 state save-restore is currently not implemented yet. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/intc/arm_gicv3_whpx.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/intc/arm_gicv3_whpx.c b/hw/intc/arm_gicv3_whpx.c index f34f841a4a..bf21ceb454 100644 --- a/hw/intc/arm_gicv3_whpx.c +++ b/hw/intc/arm_gicv3_whpx.c @@ -17,6 +17,7 @@ #include "system/whpx-internal.h" #include "gicv3_internal.h" #include "vgic_common.h" +#include "migration/blocker.h" #include "qom/object.h" #include "target/arm/cpregs.h" =20 @@ -205,6 +206,15 @@ static void whpx_gicv3_realize(DeviceState *dev, Error= **errp) error_setg(errp, "Nested virtualisation not currently supported by= WHPX."); return; } + + Error *whpx_migration_blocker =3D NULL; + + error_setg(&whpx_migration_blocker, + "Live migration disabled because GIC state save/restore not suppor= ted on WHPX"); + if (migrate_add_blocker(&whpx_migration_blocker, errp)) { + error_free(whpx_migration_blocker); + return; + } } =20 static void whpx_gicv3_class_init(ObjectClass *klass, const void *data) --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436286; cv=none; d=zohomail.com; s=zohoarc; b=MU3rfmlkCKcg9q1Dy/gnS81UeMcHJ92V5/AhcYeskWFwGj7QZ+x+YWQmo9kiFJObGh3XUce4t3zM+x6LQM9WIAv73DsmKXzi2WFzakVZcK2T6eUKswDxbgVyasWEAIumosy1kUGrvDXel0MOcTiMvlkwAjQS9bzJaSXSwpKQnFs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436286; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Rk0URHLzFbQb2J2pqqyT/zI1JsK2Hqgs3DZKJWsJ2S8=; b=bgP/8ppMFWK13IN1g+mhlqDvlkKR1wK2Gajg0J/R3o4A2gF75gzNMEN3tqnNq2XLUqZZe9x8/7LcJAAkrBrw1pr9Rv8m8dH0F+vrbhf6dSgmQbWdW7lvVBgPKLMCfDCE3sF5J6Qh4CqYsrT8S5yIe8mM1XVAuUZTWIU1ooOcJzU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436286850617.6205119576157; Wed, 14 Jan 2026 16:18:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3d-0004kw-Q6; Wed, 14 Jan 2026 19:17:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3c-0004cq-CX for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:48 -0500 Received: from p-west3-cluster4-host11-snip4-1.eps.apple.com ([57.103.74.212] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3a-0002HB-O8 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:48 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 19E201800452; Thu, 15 Jan 2026 00:17:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 490C71800435; Thu, 15 Jan 2026 00:17:36 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=Rk0URHLzFbQb2J2pqqyT/zI1JsK2Hqgs3DZKJWsJ2S8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ZLxKHhwddhUTljJce5T3qCBKngBTAgv3lQ1P91iaIGzwNfCQyZhJtK67Q72vh0rT0WIldxnKw4uGDvrQU/8G/TLZ3tEL7Plg0ftE4EqnvxrIsgbvbAFp3Rris047ve1zpUy1kFJo1OkKI45m/QVwFTpfd4cL0EPEUbiCgneCMkqH0HtzUWpdu8C2KZ40HX5nbU3LegyuCIVl33WrBMX3SWrYdyHLdJ0uUiC7x951w7o/UbrlpRE4oQDbvoIBwHzM+//xFiM/6b1tXfz354rIhp8uQH+5oGilU78pRRaKBF+yfPWY7qwCyIfu74c6LvGsPwEhJ10T3OpwdB0xPej/gw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 23/26] whpx: enable arm64 builds Date: Thu, 15 Jan 2026 01:15:02 +0100 Message-ID: <20260115001505.57237-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: EFDse8HgdwV1SDUF3J5Iwzn-LsN9dZaq X-Proofpoint-ORIG-GUID: EFDse8HgdwV1SDUF3J5Iwzn-LsN9dZaq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX4BHCCU7Rh0KV MCwToJxKDSNCjkCaFQ0aZOrUov7eTief/oy2TS0hdKhLV83C8LkXIN0X+7WGqBuUm676LzgVONI wuGWRsQiDt2uvHBn5A8AV+msl2CH9Al7KTudYamDzgNVrdOdKP38JjlE4GyNg8Rfs4e7MwgFskI mzdXAVCmQHlEcvG1/yH/oC6NcsF/7KLq1xsoUgyQsA9CGVhj9GBmbehLvHIMGL3AtQJRL2ha5zA FmzHufdgNsED7lQLdTnjAi9gf/gKOGQRnG0QkrOl2dY5ehSIpbOg2Rnf44lrLja0pDL7JrauzsJ IzvD+I4m32SZFtk6ubZ X-Authority-Info: v=2.4 cv=WoYm8Nfv c=1 sm=1 tr=0 ts=69683229 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Ck9h3XeVBPDugYI9Na4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxlogscore=848 adultscore=0 spamscore=0 bulkscore=0 mlxscore=0 phishscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABBUffu0PRf7M3htzPKtcU9n6nMChP7Gcoqc+li9Oi9TnvvOjVtcvmOU1dAtL8CRNia2hOLDHjxiC+cPerwXE6fTLXTGqpYNXFwRmIkxjeX/aui8YOs+eUGzvl0HigBM584LUw72yLnnLPdzcvBRIQTYKiX2izOrJo3QlTPSakFrnxombo3FO2hG67AP4zeZ0L11lJmDSL2ipYEuoFIl78u2RNqYITtN4ma5+ZEztM2HEEwc49jWXUCzJneoGlXdP0r0PizwODTrTVyMxD9Qh3RDAliwj6t3E1VYoXd2HCCRA/Cx6qO2LIc6Tqj0ILV1AW/NsOJUyZtk6YlZiTwiBBB7aPVMIAl0YhuWgqntXPKrSjP4lF7oOMkB4MbANynlEUMICDH2JuyJ3qLDQzcgXoVQYCaPJz5suKQyo3l7k1UCClCpAYBIRw6duOwYP7JnIYkujqsLeOSVTMAGz7OzzFYdb3JDIyiPVOtSQzyw1zVt0wyM33kcKft6JFd0oBj61hB1x0H/4Qhj6v93bfjvGkfQjc7l+q9GLZa3kCZFhiVMQbiAacuUlp8VSWO2Ag23EcmduSOFbaaDJCWczPtwxg5BSwH1kDwdnR27pHDxYmyO9alaYEZu67PjjVlM009hSAupU9fy4qNdjRHYdRjb0LM9Q0NFG/H1ZHB2pWc7qAAagWINN9nlfZddvzrYghRt4ef0rZWKKVoV+EMovEqtgVuVHX1zdHJjS7EYzIi4niH/arAZ4uy4K1Qkt2ygjxWqVE/vPCa1G8TLfD5V3Kr6P80Ml7RFeb+m4S26QOuR7pUrcX96Ba6EhlBRiKjk4GF1JGBZuqIe9bn2IHkTlH8KF0iwBGXH4c6KCs5GW/Of542sqyhh/uwGvtaplldIWL/i0M8clrTvhZzteXWCOv5gsCh14N7eGKrOnF37Q= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.212; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436288135158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- meson.build | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index c58007291a..34c799e066 100644 --- a/meson.build +++ b/meson.build @@ -317,7 +317,8 @@ accelerator_targets +=3D { 'CONFIG_XEN': xen_targets } =20 if cpu =3D=3D 'aarch64' accelerator_targets +=3D { - 'CONFIG_HVF': ['aarch64-softmmu'] + 'CONFIG_HVF': ['aarch64-softmmu'], + 'CONFIG_WHPX': ['aarch64-softmmu'] } elif cpu =3D=3D 'x86_64' accelerator_targets +=3D { @@ -892,13 +893,18 @@ if get_option('mshv').allowed() and host_os =3D=3D 'l= inux' endif =20 if get_option('whpx').allowed() and host_os =3D=3D 'windows' - if get_option('whpx').enabled() and host_machine.cpu() !=3D 'x86_64' - error('WHPX requires 64-bit host') - elif cc.has_header('winhvplatform.h', required: get_option('whpx')) and \ - cc.has_header('winhvemulation.h', required: get_option('whpx')) - accelerators +=3D 'CONFIG_WHPX' + if cpu =3D=3D 'i386' + if get_option('whpx').enabled() + error('WHPX requires 64-bit host') + endif + # Leave CONFIG_WHPX disabled + else + if cc.has_header('winhvplatform.h', required: get_option('whpx')) and \ + cc.has_header('winhvemulation.h', required: get_option('whpx')) + accelerators +=3D 'CONFIG_WHPX' + endif endif -endif + endif =20 hvf =3D not_found if get_option('hvf').allowed() --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436350; cv=none; d=zohomail.com; s=zohoarc; b=dpD2tNiv/FChqdIrl8qfn6kYqp42lfaon2uO0e5RU7mKa/eJJJx3fNN5ZDOeuU3ZK7REbTqXRFQMU6RhhQE2SLl/FHLry2D7eaJUikCJJGruoo4//Q5MRGpTg0rwwPiLtfnRiJ7f9gc1YcarwPXCfQOZ2eKVzvgj45JftoKETM4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436350; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=j3gxaGgJ/UOlr7E7Wf1HhS3Y6+PzTtQg7lYYYapxm5A=; b=Yd8dkaUZlf5wFWQZ0rlVKqtJIndtnO2Tpnk0H8hHPUMH6VtXU+KKWcuuEAyXe7jbKKx+mFNRBvWM3XPwjc7on8m0sHk74Z0GwcReJTEIscWdk76wSgvuV33BvcJZD9j75HUh39RuTQeCdR5Dq54jEFvXvCGhdVKSdjNjtmeH/kA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436350855294.47885020808826; Wed, 14 Jan 2026 16:19:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3m-0005KQ-B4; Wed, 14 Jan 2026 19:17:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3j-000595-VB for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:55 -0500 Received: from p-west3-cluster4-host6-snip4-2.eps.apple.com ([57.103.74.203] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3i-0002Ir-HD for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:17:55 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 766611800412; Thu, 15 Jan 2026 00:17:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id DCE571800440; Thu, 15 Jan 2026 00:17:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=j3gxaGgJ/UOlr7E7Wf1HhS3Y6+PzTtQg7lYYYapxm5A=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WUPKWO3G+qTUjzeVfm3tOxfIIkQVN0eECH5wH2/qmIW60WWGmYtkWvAu91watGYvWfEo4ejWnFCd2nvJDvGQMV7HGKVKeWBdusNPLbFh+PGS+sxcoV9ySFP4o2TdRdI5pgl00mA6heV3rlH78aq4kOmJheIYPD6iuhpksAUvPjSf7zMMcwzEjUMOird3Hv5v4zErxqlWshNxIaf0xz4WtMcNER9F8AIViFAqMy4cJdBMQkjrJrrYh5B9fWH3Z1blWAU+8QhePa0FFaigzsVJw2+5n1syAwuiHHMXta6QyPC0hBpXCS2oYw+5DXbFIvKJpjIdC3IrnT2p9xyHnJJe2g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 24/26] whpx: arm64: check for physical address width after WHPX availability Date: Thu, 15 Jan 2026 01:15:03 +0100 Message-ID: <20260115001505.57237-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=a7c9NESF c=1 sm=1 tr=0 ts=69683230 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=lhTSZ31de6YUvqMuns4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: BuuWRK_Lf1o0Y0N85gXC5QsfmjBvE1cH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX7HAmcsrnwADA Mfh4zNbG2bZJp6womv0C97Yfnoa9kr16AfsymB+GG6xzWoJ7KhE/Xf1u6vijddYm09tSaNBoBmM ihYFx4MncKEBLXPDEwqOJ27+2rU8mtcna9pKB2Mv4i0H75T2mzVE6tw8ChlwEQkFxGt3O8jea49 t+ariZjcCHOePPDHt57uORPArb4FlcrtamLipQtdjq/XeEAIR9FmpcyRxhJZrgOEgULbX2Bpsi1 5DqJbIarIxbQdMg6tEP6nBYvXxmLBsDRll0e/OMTzofSpKNql4DqAivSTQr4+T1puxNj34X6026 QMRmMzIZPjnAiaHubD8 X-Proofpoint-ORIG-GUID: BuuWRK_Lf1o0Y0N85gXC5QsfmjBvE1cH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0 malwarescore=0 clxscore=1030 adultscore=0 mlxlogscore=999 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABRHA02LwuS8bMOV//VuGbwwN7qP1XWZWUe9FCH8SMcFY8uI578w7jFeKiJKviayplt5Aq4+z/heNzIT+b/Eoq9KVNXzJqmF/V9CkMTNvJN2Gj7umedawJh6osIlTVw2FGk9CiuBhjFGs+4IW81zbBdnNTuO6L069xizv/uJxj49QsTro3N7Pyap7Yr/WZjyJKsGEiVikAWGT3AZnuvUPQONjNheTy/2PXNjxaxJFK0GFDTbbHyqB7PYEm1l1ON9uWJd/Z8oIZqAh/UzOyD+DCgH77QNJ2Twrv61qviTUYAhK7xftTAeld+CBXS5Upzt8lQ5rPWrze8Mzl9Yb/0cpvzN4kQVTjQL5CDW4BpaKsEkilBjEkD3Vbc6osMnojJGV/L5zZyAFzTf0SeUVw4VLgZQ9Ll9SB4n12yIVrc5bWJ1VLIgdw74QvgHYTjog/fZuh7xtM+j1r08+hBUh+iQGoq1H33gL3ZTRlF3g2glkpEkqvvt2QQ57ZKS12aYluJt5YlhTs0/Gou6lc852qy1KN9vY7gATo1zrdYYgarL6fBgmTMb6XMMI3UjIJX0xb97xjIixcDJBM4Fb6vXnl/HVqSi2FnO+07B8N7KPsaIetGz2nRvsl5+k+1rVH7pkBmIjfmlVsDGW6eQf/X1IdhBxDclsTrUxUyB1rZBDcSFqb5spyGcHObFax+HGDVQq+EamBXShnQxOjOXZyNQYd2LmXjbdtHB/BxVuZUQwCgWWZ7kpJ1ZpEQ8tX1JBdXkO5Q5gQDQigBopDyzGHIlrU+uTmlrJjLVOg9Y/+egYBut4QK249wLRfH6csbmdgdU0Lraw+N27Uge/GwKuwgrQtGbevXKfBxeOR7KmDVRXL0I8z50vFdq9SrSVFCfs1Vj9wTQAntxpTezhT3Z8KlHYt/eXVenKbxrtYo6kgIV49L8OSDNQ9iZAMeGKvJ7gl05qcZZyO3ul2FdRpYTGeavVt Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.203; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436352416158500 Content-Type: text/plain; charset="utf-8" In the case where WHPX isn't supported on the platform, makes the intended error appear instead of failing at getting the IPA width. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/whpx/whpx-all.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index ab31371aea..def85988e7 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -654,7 +654,7 @@ uint32_t whpx_arm_get_ipa_bit_size(void) WHvCapabilityCodePhysicalAddressWidth, &whpx_cap, sizeof(whpx_cap), &whpx_cap_size); if (FAILED(hr)) { - error_report("WHPX: failed to get supported" + error_report("WHPX: failed to get supported " "physical address width, hr=3D%08lx", hr); } =20 @@ -879,15 +879,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - if (mc->get_physical_address_range) { - pa_range =3D mc->get_physical_address_range(ms, - whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); - if (pa_range < 0) { - ret =3D -EINVAL; - goto error; - } - } - whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( @@ -915,6 +906,14 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); + if (pa_range < 0) { + return -EINVAL; + } + } + hr =3D whp_dispatch.WHvCreatePartition(&whpx->partition); if (FAILED(hr)) { error_report("WHPX: Failed to create partition, hr=3D%08lx", hr); --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436287; cv=none; d=zohomail.com; s=zohoarc; b=G+/Ob+HRWuSRZnNd9hqQzQtGuu5Wgg30FFooFM9fkeVVnpoaZHeVbPrDmxwT2yuIAEBJKgEyC4pewT9oCo5ErcMzAJFs/h5Er7e7nhCpNV4KkqOrusGTLW52PjDXnDk+eT+6uOf4DZjtrj6wb8FGvueDygQIgGTP2I3IhBnOkzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436287; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8BCQd7Pm/bl3RBBACCAJWlsvec2RfbtyFInvh6wrHr0=; b=aSYniiQ8PwYVaWhcvQ8mbSnuiIncZY+gh5Dyr9qXQkOiJwew3PbNyYt8w0TdHN4G5UZvqaa9h17JhmWlHsFT1+tRpRM8nDq7ZiLIqQoBgt4s11dUmHfut5GsE9A16CODCY7VuV+IedAYsSYfCS9+bW9vHAVhcQsA4XdXk919PwI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436287570912.6629008574992; Wed, 14 Jan 2026 16:18:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3r-0005dY-9S; Wed, 14 Jan 2026 19:18:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3p-0005Um-Fh for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:18:01 -0500 Received: from p-west3-cluster4-host7-snip4-10.eps.apple.com ([57.103.74.141] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3n-0002Jr-UW for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:18:01 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 2C8BD18000EB; Thu, 15 Jan 2026 00:17:56 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id 3564F18000B5; Thu, 15 Jan 2026 00:17:50 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=8BCQd7Pm/bl3RBBACCAJWlsvec2RfbtyFInvh6wrHr0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ArQJYhCtloiSoSwbZQPSe+22e5nAuMlk6sg8Ww04E4019XBd8wcXENKs0ON8MRTAkaLF3TCQ5V6c23Dj14o96FAVYzX5CjlyQ/MhylQpByDB2niq1Dsz02Zdd5xRDc44d5GU4DlfceOglgNAKpvXNuvS0+SqsUsPVjjaOm69wy8GeYFs4vGMq67bfFf4u3j32CUzp5kbrSKQS/8OGqa9F4gkEbcGVlghsyS8wms86hpIG4WqEWm7byiw0n2FWfuh7FOkxSpHZxmWFm3pXCNw/s1yAVytcm+v+hm1Z5WDhOy+e0+Pn+klgkOgnkushMBtvQukWU/UHtPjK4bc170urA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 25/26] whpx: arm64: add partition-wide reset on the reboot path Date: Thu, 15 Jan 2026 01:15:04 +0100 Message-ID: <20260115001505.57237-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: ul7neQda63ds19tib5uNEVJs1L9o1M0m X-Authority-Info: v=2.4 cv=Ev/fbCcA c=1 sm=1 tr=0 ts=69683236 cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=h5GvOLqLgfJ3vAEETv4A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfXx0EhmOpTUp2A qrYGUVnHxAYSbKVK+lDXCXPeh1rRs+8HC+v4QaAiFeEwZB6rxwojH93RrwMlTqSmp/vlAk0YLrX WzLRptCjmqFUxMUH+1O7P0WYjNUbn+ViE2CxMb1gxW0F46D5F5tPdNPvTFq0XAremzfPWPKw3AP DMiW8KhOZcFmkHRszAP1EQtK+cz8LyZFkMfYaWBX4vEXm0sbNs0U+prO59Qkp5cGoQuR3ZrofzF /RrUFffqbVRljQECI7T7z1hxNO4fddJzqOpy5cXlGHu3F5ix8GrZd+xrhMUP8jzMdNw8ZPMLp6V 5e/z5JpWXPDSuLEiO0r X-Proofpoint-GUID: ul7neQda63ds19tib5uNEVJs1L9o1M0m X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 clxscore=1030 bulkscore=0 malwarescore=0 mlxlogscore=932 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABU8Ikf7h5VuvgN8QhO4l1miLWzOvERXoruMGnXE5XYAEJDZ2z6MMe0WtpCTv/2itn2j4RynFwL3NsDy4a6Lx7Cjp1PByhQa8Qvm2d+Pts8pu9mO/pUmzW7MJ28pj5BmG5nXncXEhX1Y0GMXgZhvX0esrTYlmLCCxuHsUGBgCvWt3tPH7JV0vdpMrB01P9PjfYJ1hyDSyteFhCWMxidLM+RV4aGjkJL0I5vCdVL8ptZsSpoGFhLDUmP7prxW26mbcseTGwnBlfDepc+ckKCqICP/26g26cFS7yDGvhNA/efBSpJfwzKMpFi5yWlwcMhh8tDR1dNPKtzrEZuuKqWWoTgmWBMpszure5TfYle9Iwd0JzpcbGI577+QHR05vVr9ffMVCtOe740QS8PvmvCgqO/tEOlolwAp7OI/AfR3w5vMq5wxtxsIMgB37Ve6RG/0+Whn6v/CCLLQ15xwgtE9QRPhlaXTBuXXkimmRCnHtWIbCqNWfXsjraubGnaNh3ZcwhVBwOM40OWaJhQUFfbYAAlXRW1+v58of8sWs4Y0GkEcgK9up8TfOqPUbHzmVHOcUXOpcsGn3v+EkHE65wEEZEWTQOdubjIDSXkRk1mnb0U4B9LQngdcG1Rf25JklxNKmToaHUViSmyP8iS0I2+6New1mIFIuWWHhwrMDjaSwdyOkwygyLTDu6ybmSvm6orCkIVQyuy3yGeiNMb5hQoywqd7NLH21+owJ7qjStG+329r5lL/zTx/MODwBjQgv2ThAArXII9QVDQdjOd757oW4NnaF1qVueiNICQ0mSq4eI6iIjS9OGJ4TlxFEt7HPDBqEOqRNTSNquj7Jbojp8fojqlAmYDFyjiWxtHyWwZ22vOvIS6gyeN/+CjOop3H+RuD8lPlQEU7/cuKTBN3LlMAYF445nU3ZuAxfYUQI7TGwaMJdgo9m+yeKhAUBniwTs Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.141; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436288134158500 Content-Type: text/plain; charset="utf-8" This resets non-architectural state to allow for reboots to succeed. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- include/system/whpx-internal.h | 2 ++ target/arm/whpx/whpx-all.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 8ded54a39b..ad6ade223e 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -86,6 +86,8 @@ void whpx_apic_get(APICCommonState *s); X(HRESULT, WHvSetVirtualProcessorInterruptControllerState2, \ (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, PVOID State, \ UINT32 StateSize)) \ + X(HRESULT, WHvResetPartition, \ + (WHV_PARTITION_HANDLE Partition)) \ =20 #define LIST_WINHVEMULATION_FUNCTIONS(X) \ X(HRESULT, WHvEmulatorCreateEmulator, (const WHV_EMULATOR_CALLBACKS* Cal= lbacks, WHV_EMULATOR_HANDLE* Emulator)) \ diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index def85988e7..e1611f8660 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -497,6 +497,8 @@ int whpx_vcpu_run(CPUState *cpu) if (arm_cpu->power_state !=3D PSCI_OFF) { whpx_psci_cpu_off(arm_cpu); } + /* Partition-wide reset, to reset state for reboots to succeed= . */ + whp_dispatch.WHvResetPartition(whpx->partition); bql_unlock(); break; case WHvRunVpExitReasonNone: --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 08:45:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1768436317; cv=none; d=zohomail.com; s=zohoarc; b=OK0nWicHKOvpYXFmUE98xZNmUPEA1qo24dYK1Mauu+gMh6OpwRpvW2JGPasYH2v2TFwuoJO/sLoT1o40W64dcdEdtKUaH+6GIwnj271gYdaoHFLP7JM1wJ/O65u5dPFpY8RAODoQrUByoLQtJ26LyBT8vtZk2BQY2kRieYkWumU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768436317; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tKQ/4xbc6eQJ5bc3AgtiWrCRgVv5jEGUZv6XVNIKmZw=; b=Vpjuev/RAIWtmiRpRiGvnRR+PeEZ6tsSLJU2sdOEdzAl8n50b8KVG+wJJmBSVdZQg9qFgBNXQDadS6qusSm54ZkihV8OXNTvvoQtlanl73YLnxe0NybC+ncK2OoLz4pOFKCEGkHNBznVGwpVmzKUB5knXEwtDoJDsVGMF9TJAQc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768436317109202.77352132014914; Wed, 14 Jan 2026 16:18:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgB3w-0006OX-J6; Wed, 14 Jan 2026 19:18:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3u-00060x-5m for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:18:06 -0500 Received: from p-west3-cluster4-host2-snip4-4.eps.apple.com ([57.103.74.185] helo=outbound.ms.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgB3s-0002Ku-MY for qemu-devel@nongnu.org; Wed, 14 Jan 2026 19:18:05 -0500 Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPS id 9A87218000B5; Thu, 15 Jan 2026 00:18:01 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.154.37]) by p00-icloudmta-asmtp-us-west-3a-60-percent-0 (Postfix) with ESMTPSA id EF0E918000CC; Thu, 15 Jan 2026 00:17:55 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=tKQ/4xbc6eQJ5bc3AgtiWrCRgVv5jEGUZv6XVNIKmZw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WKCRshI/0Tkx4mHs6VsXWO3UIRVF4wL3ZtTk44GHxyke3xtjzqAs7aK76BIEEveFNDu5EKms8vRteEWlIp6u9N1/2SuYkP43UPFKZCiTwI5d9OiY0yyAtkH+Pkh1jvc9MnmFkFd1orhxcEKWzKcT+hs1hC8uVSk3ZxgBR36Xrb/eJG8uh9LLTHgf6bQCRe1Cdprc2qFVyeI1wU954Yi/RR6VVObpiFQDLd/BiRoCeNgn1q/HPN/3qtzEkR3BthxTq7TpPaJDwzsIn/3gZHWNAj95roxI9tswOySXh6du58rauNpAuHyOqM4D1QKGemXaZmqRkVYF3UMiClqCvBva0A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Paolo Bonzini , Yanan Wang , Phil Dennis-Jordan , Shannon Zhao , Alexander Graf , Mads Ynddal , Peter Xu , Roman Bolshakov , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Ani Sinha , Marcel Apfelbaum , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Akihiko Odaki , Pedro Barbuda , Cameron Esfahani , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , Peter Maydell , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Richard Henderson , Zhao Liu , Pierrick Bouvier Subject: [PATCH v15 26/26] MAINTAINERS: update the list of maintained files for WHPX Date: Thu, 15 Jan 2026 01:15:05 +0100 Message-ID: <20260115001505.57237-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260115001505.57237-1-mohamed@unpredictable.fr> References: <20260115001505.57237-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=NcvrFmD4 c=1 sm=1 tr=0 ts=6968323b cx=c_apl:c_apl_out:c_pps a=qkKslKyYc0ctBTeLUVfTFg==:117 a=t-S863UTctjxRPX8:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=hdCJvu6vi-O6ykQZt0QA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: gAdJBJTaPBeK40LzObMOhpECS6YEvoQE X-Proofpoint-GUID: gAdJBJTaPBeK40LzObMOhpECS6YEvoQE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDAwMCBTYWx0ZWRfX5nw/kcZ7/SS7 JYQS//+2DA8qBStq08+hwc/CcX2py0E5jSQfXQ5JgwTsquArZFJvBRfPLMwKK8rrHquCMpLjv58 4NDQmuMBZILxp4GU/K2nprge6yF78IN/PXa8yOR01dSQAW8NBSrIG1raUpNTWtiIZpx67I/Nbnc nsgJ5NhigeFUHBlnMuexEIXjGAWzK47CaMXUSBaIZ3vt77g9MBPXcQSVufbAE78YbScNYpSmC/n ExNywciGf9BAKMrvRonPn+7cAaXCNBfykua6xm5K2HGA24qFqQ7D8hlmfEOZkYRdoIFG5xYkyRq o8WQ3ApJd3lBvcVQ2Ym X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_07,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 clxscore=1030 malwarescore=0 phishscore=0 mlxscore=0 spamscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601150000 X-JNJ: AAAAAAABe7vZduSPEjPt5y+WZ1izOfnYwcHUu6yKSmBzHlkHX9Gpd3byLZ+47vsdS28Dv10ITHgogaRIqyJkt/n2D21FOmqOOlB0bu2ryFReNrWG+VqoljEbbD6VvIO/TIgsBMz2noVN/M75TQbANwQnqFTtVGznO/B6SNGUsHE2jV145Va5a/UWxKzjzeTq8g5rcQ4hL5QHyUi94+9DkmBYg7g+Mc7KhXcMcvFHaMIA/4AE/bjybOdVIrJp6Tw3BrLMKQkruS48yahVZ0iy8OcRHUAoAATl5hsgQqYJ8e/eiZvWONb9WOagDPWcTZaXGORRYlufffNAIobsT3C8kyBM8KJvSZlqCl5zAh058Aq7yfYwraysF1fzSEu4OcQLrZnKZcOV9h46dbE7ddMuiX2bCQqp9h/6+t7QftfCXo6Ovcim0eMx64hJC9CfUoaiZXk3Y3gW9DbO6GL3uPsrT80UyvUj5H/A/QV1GzQxkNmTpWAqFCfZ9mKMrEYapHgM14kbF8tfr1FYpsHY6qcFy+H59DGz8wVTBG4ll+jdsH8rjzkjeHFOwbYap7PoOfSUo2oLt3sx8Vsq57HMm88L7Nzji2V8DRf6kOVHubJHMl3v2EtM1sSMajv9Zr+T5LzG66k2lmVL0+NdkMoXSRG4QMa/M+uKiYVxf/krJTlSm8XsiEInxptHdg44g+xt4MHvHS/AAXxaBfc9miouH7FYN6wN97jVN3nYePkyaOKh75+nXgdK18O9wfhKQcHwrf+U0kIOvjfjY8kp8XrG2a41jZjA1BdJDIe1Ja9mJ8v/DOX883RroCbSS25GAO0WvqKEzckolT+RDRzIRTg5ICirAT89coL7lA4s2ShcjyqVjWQn0AjHE5SXeyZiyQo1UOZiOCOwlyIJ0MjpAGwD864Y+PPe4RCPZOZ2cuBSvOjGv6+QRQHWdZZ/RJK7xFmAjZIWJ7vWewtlqlq6Gyg= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.74.185; envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768436318236158500 Content-Type: text/plain; charset="utf-8" Add arm64-specific files. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index e66c764167..3190f1f354 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -565,6 +565,8 @@ M: Mohamed Mediouni S: Supported F: accel/whpx/ F: target/i386/whpx/ +F: target/arm/whpx/ +F: hw/intc/arm_gicv3_whpx.c F: accel/stubs/whpx-stub.c F: include/system/whpx.h F: include/system/whpx-accel-ops.h --=20 2.50.1 (Apple Git-155)