From nobody Sat Feb 7 07:31:24 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=1768571917; cv=none; d=zohomail.com; s=zohoarc; b=BytM+uQYxjLTe/jgHJTRlPgFjXCXBWf2lsOxMXc/U2axw9AmxTJgXTOxcgY8Yykregb7WritRKRrMbC8MhC4TBkARIu4juNUYe5HGRKdOGTVvBGc0rzfGLHNXQEw47loS1slD6F8zwKhloBJLMGiH0Ru+qxgQERQesho9IbyRiQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571917; 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=Zfg+RMWQjxCtQ96X8i9zYPHJkyjm74Pw7taoekd75eZZajD4plgU/3uM1OYmHrH8Dj7XKB4RhhEuOySVxEMW9O4OCkhHsLa2YgM4rvLrCQPqFN59CsRzf3u/lxMEPcZQDa2QqQ/PBb/6okMF6lkChAQzLpNqMsy4Cgx4rs4oTBU= 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 1768571917583813.2666101265503; Fri, 16 Jan 2026 05:58:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkFu-0002tU-1b; Fri, 16 Jan 2026 08:52: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 1vgkFr-0002sV-K0 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:47 -0500 Received: from ci-2003b-snip4-2.eps.apple.com ([57.103.91.143] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkFq-00023l-5b for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:47 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 97D4D180020A; Fri, 16 Jan 2026 13:52:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id D89FD18007F1; Fri, 16 Jan 2026 13:52:39 +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=LjsE9MwZeWl6ex5s4DyMRNt53cRORgqXLN74QeacFr9hx8z4sNsGKlWgDCcDSFn4jOMGhSQRX7OfJVtiXLvjkXQUa3jNjXGtYjK41okKlURRW//NhlScewk+FounwY4/jEYSnzxUBia3jWXoKq4XFjJ6hmX9n6Ngcbieo2T39Or7eVmyw+YulajeKqBGaqgbWzN5yOvC32TRqGfn5uzCdKGklTsVg+RteTwyBa1uzncOOu+rYwIUsDQMVIf5ZjT+KVinMhAcxUzGpz8chHDTlt8AQLxl2OuwuVxuTZe6AhRLMbDDpQTNYH2xKP7SMLRJyPeWclVQAFRs0VPQOvFe/w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Sebastian Ott , Pierrick Bouvier Subject: [PATCH v16 01/26] target/arm/kvm: add constants for new PSCI versions Date: Fri, 16 Jan 2026 14:52:10 +0100 Message-ID: <20260116135235.38092-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX2bV8hADP8fPk Aae/zPOFscAihtEVnAv/DSULSe1aMONwThXvLTzMHo5o1tv/cyQ4I8SOXN1RakQDQj7ciJqfvsC +ZAOtb69BYkjvSHaO7LO5L6anX1gNe8bMoaH7oZRQqmwQk2HuuJsXgU6wemLLZmjemRy5dxTRfC VmGSHaJZZzTJqI2/NMtgWNEHDb0tyOdO/OPDV+17BxCGZMOXbdC4e5jud8giW6HxHaoSjV3ezaV 3HtsVeW1B5ffNCeouPHG/5nFB0MEcX55FS4qDEg39CN0AqKcKWg6BYO/9QOVcQtgVKvupK6Cdju vbojavULE6X/0gQjzXA X-Authority-Info: v=2.4 cv=T8+BjvKQ c=1 sm=1 tr=0 ts=696a42ac cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=KKAkSRfTAAAA:8 a=DAm2dGrMCKCYv6Tpj9cA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: qgyhaYsES5xwQg6MLArLNa9_Yzyp8oDa X-Proofpoint-GUID: qgyhaYsES5xwQg6MLArLNa9_Yzyp8oDa 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 phishscore=0 suspectscore=0 mlxlogscore=939 malwarescore=0 clxscore=1030 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABquP5xaAzWxHEwvIP8LPZLpAH9+37B7XOMrfemLHVzx5Fe2Xe3ePtlVUoWEORS2LvoSIMbkdPbOdNpIflLGmLg1KAT7sOxls6QDK03PcyyegCRHzHBRvYEi2q/LlnP6SGFRBH82Djp+oUYeXu+9czKbteA8KggqA3LnalUBY0F5Zz+dkAbs59qkCJJ5nFCHr+sXmNVxkqI5q4DipVO18X/SYekd5Una2g16bSWrt5nMXauRllq/CFu66aTjwnTlUtQPGyJNaBi9Pt7jAaXqaYhHumY8r00WI+t3ZdjqJOmhAty3xCO/fb8PyOc08a99tgYTY9XQAXxiz6AfS7tY7SC7UlyhTkt7go5pkQRJSyaPwM/u2D+YE57ZarW3ljw5r9vxzQKElfjq9J/bCXM9fUcTa+YRqaMRi012zd6X48JkV7Canv00dFoL65T6heJSdkz7nOaNcWGe1yqpjNS/RO9F+8yMaB50JKwzIXRyiS+lvAEdto5hammNy5+KYVv69sVWi9eM7r3WjPYVjR0t0uA63aM8KA4vD0Sp98XFBVKfMOCijwJETyucY77778YmH/9FFYFvY1wBXm2DEHEh1+W4/KXtIsB9bg8a8+XSUKGM1jvUrKffKacsgWKhA+b5vIXU05CXbsddfO7rxLGpdvqw1M1AfBS15ASP+i6vMtOJERmbTmNtdQD/CMkf3gJe1iKjKDyRK+JEuaVswBJfwpYfNVfFOdmyQpdPuWdsF2OZVeSsEQWZ9Haxw2/L4/eJuTVi+ZCn7UcKis85RFF7D2Q2cCQ+S/73rXAmMy6S3mkBMCSC+cVQY= 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.91.143; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571918179158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571621; cv=none; d=zohomail.com; s=zohoarc; b=d2yrphw3p5l9awv0vnR8HMpK5sT6+pywZzcd+Ewrd13cfEYoy9cTxFpcHgc9KXdfmZicv/64MQoEKwx1yDnZM1CDqDfvCSyyRbmYDWiycBjH7Cm6VGTKkZGH/ZhZZNTfW6HdRxLcTRP/sQjBuDqhy+FCUwd+UmQbT9Hrsxk+8Xk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571621; 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=lNAwR+4VUf92nY5rbIa6tVj179Cf7v3i+vhi5r6cYX0UVnYnTOWShVzQOzzJfJ9irE2wXZ34cG55L9MvFYwzxi+l3tjFO+tAXboDEJdnV/thMh4uvHp301ZjA0I+9irgBeo32uc8QLxY3XCDMHFMZAebNIZDNltuTTOjjxJsbyY= 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 1768571620879594.1113648034609; Fri, 16 Jan 2026 05:53:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkFw-0002up-SS; Fri, 16 Jan 2026 08:52:52 -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 1vgkFu-0002tY-AU for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:50 -0500 Received: from ci-2003b-snip4-4.eps.apple.com ([57.103.91.145] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkFs-00024i-UZ for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:50 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 75F4D18007F0; Fri, 16 Jan 2026 13:52:45 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 2E638180F919; Fri, 16 Jan 2026 13:52:42 +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=GTh9gostxkOef5jssb2a8xOxa7O2jATrtTpgU/gUEX1/8n0CAcaOz9AqmmOS9qfNYKzoAO9t5WkQQ3HGrGPcXYLORWXXeDkCHhdzlhAD3oLT1tGJCLbwwwHe7hQ2DRqUGyPBWcsovlQRbo4qGN9y1uUPsptDWhyQxJ9sFFraV6tYKoB0nNDXdieCxq4m4PbdG/2PKGLJw5Hyi1nO7FzNeKeOUrvy/MA5Hio7JMrr8IhyKuLaMBua4H7203a2gwt86kGnq9qrWq9TOmlsRvwV2/DDPkDlSpb24H7mXNViJYjgndM3XBp1Rv1qnYRSP28rdNL6MBSdR1QSAgzEu1bHQQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 02/26] accel/system: Introduce hwaccel_enabled() helper Date: Fri, 16 Jan 2026 14:52:11 +0100 Message-ID: <20260116135235.38092-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=CcEFJbrl c=1 sm=1 tr=0 ts=696a42ae cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 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: Y0smF5NtWqI19Mecxy6e5KsISPuGYowK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX4bQRisPaBtpK QYRWNP7t/gK/0j7b1e3NpGXYGwmtpOIK+NFaPa7hXHo2IdFJNTmQFTp7q21xwkTK86Y9iUT6TV5 yvTHNJPUrxMZjsueGi3ECRJR5rzSnZ2LKrazhBJzrG+nr7PN5AbFK6Xok9eSmQ/fKecKIo2h82T t0PK5XmGuEqDkuHi82i3RAeeonHUr23yO01JsHr5Br+WsjA0R9trvSGYpaTsPoogJMkWqwVwKyX oO7ruQZd7ypRZiRVkkIj8G+NRX3r+cHyV+wfcwPFk8PvfRXyGv3ZR2d8uqTYQsl1jFaq2r1q/07 /IrkVwvfE+jDyn0vIli X-Proofpoint-ORIG-GUID: Y0smF5NtWqI19Mecxy6e5KsISPuGYowK 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABfHICVNlQpcT7s/hw5PxnLPNJDi9NhRYhcrKW1bKDDm1w3zWswKmRsJFq9bSDlhNR//QU30VHTFh/mw4tMcfahzw4/TK1mAseXD/VZaJInn84cmus1/my0y+YaM+JeE9ULnTxkqSGQa+237a7a/7m1G/xQFQbiWJxC9jgE0G4VwVzGctpx6A+bm6N99y+kWoQNdSLm+ug3P4iUyeyw3p2XYCBVMyK5I944k6OM+Fk0QVwzfk+1ZrQwiuOA+DsmHyNuLwMSdokGxAIe/QAsoR+Hgwwc84YyvwApCR3TvCCvAqdYdIfI2WezFqA/PRKEWOXsuwivKhcBg73AyCkqErApq6R79P8U5n795TxUvUZFgyagcel4b7QVkiWh5J4I0rzazENhrl/m9nRmt8GXS4/z3ue7EDkeIrBZdaCQA5vrY1jVjk4iTagX8KDx5908SbmF4xbT7lL5KXVmmTYO5+066J2j5CP1+KMD4kmziFF8tX9txNlazJmU16cYQShf0TN7N0SfSIHYBkVm0Mww8YMbBMRC51ufczT3VrgjVhAm6CwllcVaIWLlAjfUpyl5Sk2tVLjskesVZ5bnWgY25vqQisbqBAq/LK4lsUTe5naMx8hNc0PCv21425w0M1l+3/7+xEgavo5Ax/7Dp8v9/8VYs352Xel96udHUPckPmWOY4d8veo99NtzXA+3PFWEn0YO/DzdP1n+L4gIMYkb2Yvia0HBcQgXfdpr6KAUjVOauZfrW9FxQgTnwaBJ+wErgWhBV4Gy10Y1VxePyX+WAFZMKJITAzJsg8zLooawNuf+KazjB8p2tiRVPfwD4K4RQ== 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.91.145; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571626445158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571678; cv=none; d=zohomail.com; s=zohoarc; b=P3C/4sAJPeQp7Ljly0VO5U/LUgrqyLAJmgfspiD19FIABj1inSnUHPc1zoHurth9Q8I8Wow8jgluziS25NWduZd/P29ZfYcyiyNx/1umFsaRUgbGSA2+5qZys8L6OsRD6tS9/WiLXSgNTIFiIH5cATjjjQI+R2iUHZFsg87xNL0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571678; 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=JVZp6N01gxBkj03gm+TfxrwwH3+ciIC11UHMfYpmmxhdHjwmh3ad76Qc//axeH8DIACnPQ8kPX1KZKCk0NqgPL0/V+QwCvCOJfnBAMhP8zr9EfGHZ+Ggd4g59cDuYBQlRNqJ72C525+ygg0uvTopaLJN8txvzwajdjrTLp2Qn3w= 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 1768571678789651.4845512513075; Fri, 16 Jan 2026 05:54:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkG3-0002zk-BE; Fri, 16 Jan 2026 08:52: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 1vgkFy-0002vc-HW for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:55 -0500 Received: from ci-2003i-snip4-1.eps.apple.com ([57.103.91.212] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkFx-00025G-4y for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:54 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 1B7EF18007F2; Fri, 16 Jan 2026 13:52:49 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 0B22E1800135; Fri, 16 Jan 2026 13:52:44 +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=btG7LVF4FVUlY/WG1R/l44bepPF3fEaEZCxuJMp9FR57ff0s2dT2WqD3I66cwK9d8LfRcgPrkejwVYud7id7ib/f3mYKe7nVIf6y9y7ZXUTdP+iU5JS5qXw1WBA2E0S1mmq7R7MhbsTND6otbxnm1e6SIfWsBPbwnwPdICgyJ5yqpxAEPT5GDyk5kBaBE58c56JTepjP8PA8wZrzSKc1N7qgTXlV+zr+GMsuI+nYdBeQXCuxKXffp/bZf9DkRZb7EURPP+1G5KbejnuVUXgTKxgmpt/ADe45SMPuzfijCRGlN+h+g0L41nVNAmTcOk3oi2zp1mGvLqcL7vEES00t2w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 03/26] qtest: hw/arm: virt: skip ACPI test for ITS off Date: Fri, 16 Jan 2026 14:52:12 +0100 Message-ID: <20260116135235.38092-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX6GBeL6hc2Gvx kXvxcCL0aKHnOoMYwZMXgREYEjCit+W0A7aTNzgwKAPOB5ST2PXVwJXGIeUGNU/HKyCZ+nIl8Nj rjB7Kzqf8m9fP1tc9U96Gq7yEq3xs32ZN9RLim4YW8yUhCcVW5+kdbGXiSs3f3fvIws4Z9bADeK M3uWcS0J+2lq6pDVKZ4yIheHPetGYlu2QMWbv8kB8RXeMHBGKVZFJcymopJd0fBfC/FX7IYLslD yJzI1N80Ngg7eLqUl+QPDobaBHqGwnEBXU3+a+J5+vFak+/+yn1ENJ1Wh6QMkHbZl+cBheZqLyW z8BnBlLmRFcDIRQVF1t X-Proofpoint-ORIG-GUID: miGxH8NC2HMg8Ve4b4-v4a0_hOw6CKLC X-Proofpoint-GUID: miGxH8NC2HMg8Ve4b4-v4a0_hOw6CKLC X-Authority-Info: v=2.4 cv=QrRTHFyd c=1 sm=1 tr=0 ts=696a42b3 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=1t8nasy7xzbR8br5Zw8A: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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=923 bulkscore=0 phishscore=0 malwarescore=0 clxscore=1030 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABtozFUpXpe5Thb+0CDg1zjDkTOsfn7OvPoZrkFr7l6M4Huxds+h+KN4sPwOlJ+RRKnuufrlAhKGnN7WMB4LV53SdON+1BljphTKF2YQIiQFQumdZ7JgP+XRUnSunAIxoeI0T/gdSYHlmfxALs3csMOcr1R6J/4eIlWF3M0f8QMDubCArDAnyotR2c8jfXGucgN8WxgKiO+NBA0++MK16MFTxApLbzUnbCDcjgmG4/72LDG4jpKvmY9OIjc8VGaNB/QJfhpx3xLoyXbcdbaZWF7exEtvmrauB+Q2Lhb7l7htmxH8f1C/thOXew0mAcRxYlq59ZF5rhutCKVswcZ6QRdKiaW/YcdUyjzMN+eFjwJxaG7jmzZnMkLsLIXFq0rtpA1k6sTfC4buevsu6iNdMNrh2f/ZCTljBZM1D+b5k6e31wrYlANvzwkhZAsFtFhG4248m0tqFRHyKCF8IU3iWLeakc1u6YRE/wHUAGAVmGidkhJpsVUdmwISnoHA8kk54IXj9KHZjSf1nWoiKkQPI5eLPI3j0mV76fuQtJ6AqpTCiXzamq2AbEQrbuvgiu21WiJzcTJNsXLaJz6wXQbP4kMRLXJbfRxRxvGaOG8aBv0fglhotwr2+UoyuHRQVxXL5+1oPRvtIPQLc3itP0VNZQ8LYKnZNSda0ivfEfLCPRMZSEdtX3ssrDZbb7PMZnO7XPOu4M+qeDIG5xBDHnyreYUtk3XectmmmZEfUqYj7+CvB1lCPnkTtJXeKtUGoeU+SspJNoK72SvT7y8cROsrFAEW7TU7Rakwp686opHlPfYrU= 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.91.212; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571679220158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571705; cv=none; d=zohomail.com; s=zohoarc; b=P4KWNGA8GSDUOVX8gQtEGvXcttq+4Kf0bmWNgcfFyRBFi6zXtUCSVH2fwthSAnthP55KNEzDjrPCvAfCgIX9qaVP+m1xY5DW6YryXmNG+pV3vmqDGTXqm757sCd0gQLF6vJVLGtOSmrRnC+/XUCgE3RbmVl8Lkioz34pCs3GpH8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571705; 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=IRh8UKRU225HT8b9oQN8hIs6Dl68wlCfuPh9dj3ZRIA=; b=gTKrvznbliqCWMvwbjK30+Q1pgxCMio3WcwEAxpEE+hn+yqah7zKYxqSECVvYTGDIeDQ0vKLBEL8SkNjE04MXTGRYGJl51mMGiVrF954J2B/DVAos33ja2kJEymiruZaBRbDdaEJeep7ViUnCF3lG/rIZ50IDX5fXJPDb84M0Yk= 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 1768571705218518.0011974832992; Fri, 16 Jan 2026 05:55:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGC-00035S-AQ; Fri, 16 Jan 2026 08:53: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 1vgkG1-0002zZ-KT for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:59 -0500 Received: from ci-2003l-snip4-1.eps.apple.com ([57.103.91.242] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkFz-00025i-R9 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:57 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 613401800135; Fri, 16 Jan 2026 13:52:52 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id B61471800211; Fri, 16 Jan 2026 13:52:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=IRh8UKRU225HT8b9oQN8hIs6Dl68wlCfuPh9dj3ZRIA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=MWH/QDyFVRRGHI81bdamgAdn/M9pNKQsYJFCDdSZSRXYv1lFmUCZKeoQ7khGRQysTiZcsXc4jmDsCouxtVV60qZVcXS7ubaEB1x7jGD+iiAjS3/0ZPt7txXSJn+d/NXefKrq8WSqx2lNIvs16LRNXFZ9hC0Uf3PFLsmxv2k7xVLY3Uh5m7sgql5qGU8xVjKgVSoGfgLpnjgkYveJuhmruw5IlEf87/M9Ifh0D8PzGzWUPDE4TNmGEiY8suFQAOqWQGhR7axCQMgQYCcoNI/Xbu26cIsggJhDOiGwS/hMiJm9/B4fOjoFBssXfPZulgJg+M5NecAKi4uDLaqOXogNtg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 04/26] hw/arm: virt: add GICv2m for the case when ITS is not available Date: Fri, 16 Jan 2026 14:52:13 +0100 Message-ID: <20260116135235.38092-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX12D8r+RJVwZJ PPfeKiNJQlPQCxZid3BmIL5CbQP0Sdsk/tcC/veBiWVUUfmGT+lj5YYHAhYTfD0pLohUJB5u9Q8 WypR9iz4JnPsxN/tjQBe/hP91qgq6CvW8PkJKjQvg39E6NDzbF7hK7Y8ygdUXn0THvCWibCuYX4 5RSwEAoPOeOhVuo/0YXXwzCRdKZe/nowQsgrEZ/iWOIsJ165gox/x2Lt/CiyzCBCv7zeCGbzojN /uIoji8P5SB3Ome+BpP/YTnITA5BFBIk6cnd+G2JrJxxNsVCDS3O2qCXyG7VYiRG/tY45uMmkdd aXSLFonez3p4qDtQqhM X-Authority-Info: v=2.4 cv=LtqfC3dc c=1 sm=1 tr=0 ts=696a42b5 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=8tVNtdTugjW4QW2w:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GHBMd-oUYIP45a8agUkA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: MqRUHi5OD6B-KkOC8buEbcuD_Y67cMTZ X-Proofpoint-GUID: MqRUHi5OD6B-KkOC8buEbcuD_Y67cMTZ 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 clxscore=1030 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABJ6RYuf67u/mdVU+67w//tf9iuLoT1B4RTMjN1xG9DnN2YKSqHOQI4X4dNeFCL9YqkWeDV6VRsRGOEJGilI0pq5JQLrGk3wDaGjn3olPuLjCjvRSXNW9qrM/VMEg0kN3KDs2s48+uRq6+p/MENcmN+5JJxV1+qZAV3qQBuk58EI8UYDRv3uxqKDgnPEM90usHlCtowsvEno7KlkyeyH5gt3wE1be/kzXKxs3oRKfvB8SzqbiyvKLZJtyPHpv/W0L2xFleBZ136ej6BPiPxYhnXnJIrlzbYwThNEntsqNXkmrNtK+5yzZ9YvhQb32CNXbnHQSMIp1H909A7SEYcI8/gpN3Q9PILGnK8bNJsBMcXUoGvuiRAXzu+qZxHpFXcTZhwdUa8qvasoABHaC88m9FclCerQmHzvT9Jm0JsATI2OTtnBRedl3tSsxjLrtjqTAoFS1spqdURDBFZOj0q1TuqWvB+Q1bRZARTDM2GUv7NW1oDjorDuJBc2SOmwKHn26gC/Ty2fAb7jkGr4ZJWRCJxdpCYMr4TI87XmCX2bBJwZWf+F0ee8qAPW+4EGSQuzZCunGdTjozL1YENC7JPpIjMsXibdgQlc/RpA4gSYeDpAq0BMrLOtnfndfNsUcTepns7pN/rrAZ7U5dN3zhkJLABHA+5H5lw3CmJ09hydxHKdoZe398IarhR8KCG+g5TzG7zzWij5Sg0sI4mnU+M1JoP+UtUDtAP/kUGjlYuqj39sPaEEZbvgGK2gkbuPwH1VbZm4N3nHWeaiM5izO7GQLK/0K1EEfMJJdDP5mglSOWTwG0NHqWep8r 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.91.242; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571707343158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 4badc1a734..275f26d439 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); } @@ -2449,6 +2451,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 @@ -3497,6 +3501,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; @@ -3549,7 +3554,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 5907d41dbb..b7e59b8c63 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; MemoryRegion *sysmem; --=20 2.50.1 (Apple Git-155) From nobody Sat Feb 7 07:31:24 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=1768571697; cv=none; d=zohomail.com; s=zohoarc; b=ZBs30JDTazHa8HrpRs5yNoAFN8uQ6keugufU//cdeUa4+CyMwr1ig0OM5EhUnXpjAY873A2J/X+0B9xnuSIc1MS80UJA5ziPjwrxfI6dYJnWr7ecdJ0rZUHAKUCH4E3O+YNvFBSv8kIr8a80CdkR3XrDllbAOMhHsUihRHrCk7g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571697; 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=B5YMTtjNWiM4lDOvevHdTNGnS20KLVJVfksv6B5aBWwfQZa/eemptCVmjfjkhGXivRU5xUqs+0c1JpUVEjtC7Il87i3eruCtbSpDU00+hr68vJ2Wc6aPDJRoRU9TbHnUegnkVr3U5TbZQ3r1/yxBFVwbgOn9PE8Fy5yQ+yibOk4= 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 1768571697190221.36067506813617; Fri, 16 Jan 2026 05:54:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGC-00037X-CE; Fri, 16 Jan 2026 08:53: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 1vgkG3-00030a-7l for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:59 -0500 Received: from ci-2003a-snip4-3.eps.apple.com ([57.103.91.134] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkG1-00025u-Tp for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:52:58 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 9545118007C8; Fri, 16 Jan 2026 13:52:54 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id E5C93180F919; Fri, 16 Jan 2026 13:52:51 +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=goA/VrHNJqtb0hPhjjJ9bid4L7ThJWQ4dFPg0CLJ8DSG5+H8iUNBxrWwv2NpxVVvh2CLuEzzfrJ5gt4CboDvJe9vY2lMc669Mz0kezoz3WylXiTkXK370Acv7I1uyjCap+J7mZIoPVqQs3e/rP8RD6eGpQJ2mlM4bGiYbS3fPgPA7OUOXF+eQ7dyKEVsJYuXRkbXNYqM1WJnEDJ9Wavzcj0NyVJlpyGK9eQZ6lQeqfU/K21h0jluCjv5Ydwwgu+e5hV0IBIs1HDAA89OpD7nTOts/MovdTYOOEoepQS3/2vSwTMIvsq6kCzLPF4sORPYsz5ya0r65tOsPMBJoISW5w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 05/26] tests: data: update AArch64 ACPI tables Date: Fri, 16 Jan 2026 14:52:14 +0100 Message-ID: <20260116135235.38092-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=CcEFJbrl c=1 sm=1 tr=0 ts=696a42b7 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=CvHhVyPyXxbOnLnphYAA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: hzy6tkvpEy03wEEz8foc-GlIQmQnRivM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXwdWLn31HOdMc HkNIkTdGd8vAFIu26ExPTkxmBGuNMJpTfnZG8yZOdJVoS6lXGOuJVPyD46HU2B8nRI6L8zGX3b4 9hjG7M79GBEG9vNs5v7hMFOFTICkDYcuG7DxsAy1ev37fqsPHi/Ng75OalUNHqqArwY4ZUZw+IR 5EZ6dioZe//bednEkqQUBvMlbvDQRqhoij1iUJv0m71xB0OWice4gNU1iQM5lVzks7gGjgLFfo4 QSlPcwb+aaOj6V+yiaS2Beuj2NI8ZE8rIln6fg3m2w4wvgCgHoMgFjHIz0ekwZZVvEwKPUVSq5y uV4hcLLCebb7csUYAj3 X-Proofpoint-ORIG-GUID: hzy6tkvpEy03wEEz8foc-GlIQmQnRivM 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=940 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABu9enEF+Qt7j9jJxZSqqo88jIIb8cyXo1sV9VkN2qXdMKuE8n0ebgwxVsFQ1RsZChWflRVxOcbQ7ygMM36K0WffoHyndeAOJX6SK7XP3jfK33chAnK8didcr92VGLMGMMcWSHrYpdvsNqzBnO9nf3IsdVErJXnmRdKC/BODSzL7GYDmPvOGWloWsVLY8pPBXeYWxn1v0Lg8YDRmqiCA6x+xmfP0+OQgaGtAMW6nd6PXjlU9DQaqo9HEmhzTF+ttG2Ks4muW01ITV3RYCaL6eNoKJ81q65YilalQUlXxV6L1l1ZM1OdhoGyCpYv9E5SS97xgD0JbUiWXvpkUOB+SBlKGnRlZbBuBybALfJ5utpk2QUWEQKpv6BUs0WehBXQeoW5mwS/v6BMbkOInLrvPkBRiXKG8PTERcIVlkaZmf2tx1io+ZVHyREufSu+h3PNzndj24EMJn8rEtWf/HsxhTXJd/nhWvd/Kc/NMeJmuE6dXvKbtLoyXVniVLVeuogfv7WgMNEPzdV4rTbVwZVyvPmTF/LiLGU1nlmEgzJQaaBIeOSDJ5NtlVeWD6iTjgJhZyOwlhWMo4c3A6jbOp0h+uBpKpuIoRnXcuVnhWTB2ZI/4lXaGJ482AvLmEn0jcRBbTdhC8pQAIAPycuEFFFY111nejFCG3SKVyvT2xbfYg61NgIfl+dpNU9pF4HMQocN13pa/Ijk8SBUgLoyEYzdis37k6VrirSM7CayWBhRnNsm+HjsEbk4L4UcdZMRJBsP1IkF/nC+8RmFMyjT5Wo8cpS6yCgBxioSyPxbFJtUytV0LiT2OyNvVrgwF//u+Q= 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.91.134; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571699257158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571660; cv=none; d=zohomail.com; s=zohoarc; b=hHWlNpYYagjr/BwwlY7eol1C6EV4zampEPdKpeGsWVYeK4I/s9XfFCFg+qMK23otGvEfIuJrqRaPWOGfTdf88Gz4gb858Qp1ELaVzIZ0MZEUrY9WT1s6ElbaeFZiCFT1jcgV06CLttOEux6hyFNFMZnHSQfOVSARRG9KfJkFUXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571660; 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=F2G+4QyPPZGvVP3hmEoFmjFOWmbiEiXWYTyLCRGbNQo=; b=Gm5kZv1zeqNiGEV8UG9OiF8qUeCibrtT5lsNPPNoBUoMXj2Nm0AEhoGYKJJwf0rqLYrKQs9sWeH7umEvqk0b//lSlO9D9yhZo9IctEl4p1dNSW2wD/R2do1iv3d0+OwwhzDLk2IEbXO2G2hlAQnSXQCl492CM1jB6HW7PwAsWRc= 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 176857166068187.04196350582595; Fri, 16 Jan 2026 05:54:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGE-0003BE-51; Fri, 16 Jan 2026 08:53: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 1vgkG9-00034e-CU for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:06 -0500 Received: from ci-2003e-snip4-2.eps.apple.com ([57.103.91.173] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkG5-00026P-AH for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:02 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id A3CB2180F907; Fri, 16 Jan 2026 13:52:56 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 1C9C1180F906; Fri, 16 Jan 2026 13:52:53 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=F2G+4QyPPZGvVP3hmEoFmjFOWmbiEiXWYTyLCRGbNQo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=cGw+UU3+2D7Bnj0oiFGr1PW3ySn7WMbPWIBX7CTxbNLPgNwFgEI+iIwNEFcYWUngyFLp0S7drbqfQIY8nVOw7A9No2X/WgGlhX3LxeU9CqYtXik8UFq0qly6Kp5eZ95s+rn2n9bHI3wuljSer775xFPo+5/gzzMgTL+QerY9aHmjv/B6HLc5yWJzittsiBbgkJqCbDvOSDKoT4KC2O6C/lsc2HTe9Me3zey6a0sx5owL9Lk3jdzXAdLAdJZ7NrjqHv7Q93UELumJpRf0WAvpSnJSBt0xRsQnVHN55Db7gHlzPFjWNVgA0Gzd7JTduSLn3zCXkCeYFDJSiHgFhLYnEQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 06/26] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Date: Fri, 16 Jan 2026 14:52:15 +0100 Message-ID: <20260116135235.38092-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: lVZrG6kohWjbZDYiBw7XVeSeuysVl6yD X-Authority-Info: v=2.4 cv=VLvQXtPX c=1 sm=1 tr=0 ts=696a42b9 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=065Y4zqepXN3nrMe:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=tHnZtBUoIiMOMUCmYmkA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: lVZrG6kohWjbZDYiBw7XVeSeuysVl6yD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX5137MGOTt79h 0DwIwnmeE0uXhaioxDUmry+D5P0Ps6RpbmnpqaqBcesSdskpv6jR3PgmJYp9N5zs+G0GBiKr3sA rJ3jzDkbSim9q8u9q1eN92RSIHNe7ym/5JU7bwWsulPotgVIQE/Xj/GJu6tJOmz1sEGd0+T/g4l 8/dEiVqg4O28M7E8/hlJOHVhJjZJ137L9/UPbDTD3U2BmiRrd33s+w/E4kbeD54bipWy6zoKgr4 p9supGdx0rSkYfNgrSKB8SkdWijp3zBuRC4uCA9KVI8fVgAiho8YZATPLC/M+fSpaFu83JYC8YB aIvE2Tr4CVLkyDwltws 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-16_05,2026-01-15_02,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-2601160097 X-JNJ: AAAAAAABEd6niHOy0/rbk/Nk0kVco/LO6FjzlTUA/l/NnoYdY+X9DAL3BZlyjiRhGLnjEXpbY1K9z1bwKBxYzSktOkGWal6GWpCT1nM6Wg/+iOaWHN0qimmInkIQeuyet7CY/EAupFNyhZcjq+3JhCW8ywmuYAqcrJpzu8vb8uydEXJowNQvtDLRPXIUf6xEp+3voCqsBtYEGPwNUWz1DmhaQ1pWtB3cRNuDAel4AqvwjnAvf1HDiCFodAkGVsIwZxjcekCFP6H/yVckzhVr05ixavs7ZFQMP2CJzDcT5LzJeR3D/ZpBG3E4DtR+GE686qN23El5fYcW7Gx7g23T4aMmHl/SuQBIdcHRHuoKdqRQ0/XaOYq/pdwuZhaQdSAUOFHBQIWjvS8PTzhmHmaPeQrcYr9K2A06o1f2JifD4yNTSbzBNKiN42GoXtvefW61kCPgBOvaUFdrUAiYkh17GrJTDVWddTnpeTyDUiulOSE4tIiGalg/nqiLLzySabXIHuBxVYuUGwfXw47cQlFYZilk/dwRwB3i1JSWCrqp+waVyqBJwz8Uf7IutZ9o9I0luvf2yTKm9zionevB/cKpwVfIsbr29l3yMOUfPUwDgwRdbFMOEjNITAb5Yb7c1Kp+k7bhIkM8sfPGV2IQGlKCT1KG4yYrFVwIgU8U32O4NDVoD4v7nQKHUUCCA2x7jbo7jWQlG4VlGCXgXA8KLCnDSGpn+CS1vhMuJ0jrE2zQS8l3m7f8G+xzbNuZPpyN8X5M2RDQaUtguDSF0WKcgies7ZOAl4+i44iekyimM50svUoWKx9nz9CHWBI= 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.91.173; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571661522158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 275f26d439..b4656b3476 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); @@ -2704,18 +2713,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) @@ -3436,8 +3461,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"); @@ -3497,8 +3523,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 b7e59b8c63..23c714d67e 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; @@ -218,4 +218,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 07:31:24 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=1768571640; cv=none; d=zohomail.com; s=zohoarc; b=XRRamcaq7GO7wUDegjMAoVbW2h/lochz9NgqmeJcc8hlMbtR+HBTeCZlcvLdMV8bibADydUZRHzgXq+848MKJJsmretVimeeuGs1O2wcLz9bL7MJlAu5hppIlVV6iPD+/0Y85Ffba/6slmDa3B8eKA2Pvu1GUwzZ3cktJl7Lxw8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571640; 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=SdkDw3mmBKiRUSrpgahAMGCt2Fg4nL0LRdYY7rn6dQI=; b=BGVQLMCcpiEAi7lCK9UWNFvRV76KgOqDbOLVsqhBlDWAmU1GW6CDFfcRoF301/pimpRd8eZfnANN2kBI4A6wHrD7N2L+cF/KlbolGsaSXSgFzrepuA5d9rK2uIlGjHWj8S+kZEiAyGnjMR62S1vio9GrrNlz6PJ0el8fQRqZE+Y= 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 1768571640400960.4427152774433; Fri, 16 Jan 2026 05:54:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGJ-0003Ew-5v; Fri, 16 Jan 2026 08:53:15 -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 1vgkGD-0003Ah-4g for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:09 -0500 Received: from ci-2004k-snip4-11.eps.apple.com ([57.103.89.113] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkG7-00026r-BN for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:08 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 0B188180F902; Fri, 16 Jan 2026 13:52:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 4A24E180F91B; Fri, 16 Jan 2026 13:52:56 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=SdkDw3mmBKiRUSrpgahAMGCt2Fg4nL0LRdYY7rn6dQI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=A9hf/GHCK1ZLe3tp1KKWDLe/j0V2xilY3oted9dEcU2Fg09fR4Mmq1TS15X5WsSRnNmK3BDRMvW4wb3MSmw5An37V8mNJhaBBRR2BXwcmfQjv1DFVXyI9gQD+qcg+b02Gj9wSacupxjuhzlxXLQjsKaNj7QyKif5dYXtYHO9b+mhTq+TBomansQYebBKHpDb60n7c2AksccTumdwvR0NrtizvHM2UDjgV/JfWq645lKPNnjxQwFDHTvJfU6m+/n2cFSMQD8vA0CRrHVWiMPDPurMYCDeES7cwbW6RWksf1ldsZsY4DY78cI/OqF8UuQd3rQWQph8pOkwiSL1VFaC6w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 07/26] hw: arm: virt: rework MSI-X configuration Date: Fri, 16 Jan 2026 14:52:16 +0100 Message-ID: <20260116135235.38092-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX4CokwmFrGwoI h/K7HDhfvnvabkXqWUDtq/3eOTLv1y65HweXW4aJsccly2yZoxnyd1+sHbW8QsJWTptkaBvqsut L/7Pw+PyqFnxKDX/JzmCGWtMqRjM5ThUqILsd9CyKATm+LC9PDYxKfuL0Z26+AYMaaGw65cNLLb RjWxRfe0c7zBql947mOXUu1d9lroQcY2mGIlbEhX9Q7JPuuBKjvqJHqkOLeJDPc1ilTW3kAaZBz yBt0olydegUq+EkYONveLO2rQUt5zXueebI+Oc23Zwigup4uluYsjq4hj/fXbG8g/zqnKGZ3Lif tWlDKNN5yK4MKIbA+YA X-Authority-Info: v=2.4 cv=LtqfC3dc c=1 sm=1 tr=0 ts=696a42bc cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=DPHOBc7XtNdUtUkKMRoA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: M2k855p3hQhvF1Q_avHtzuatScgs0niX X-Proofpoint-GUID: M2k855p3hQhvF1Q_avHtzuatScgs0niX 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 clxscore=1030 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABcWDSS31yVVjG682RRKOZ7gCBXgOof8tEV1j9pzkxlpd/cIfkqHJbHjnXHDg5GEpcK6wEedQMMb4NHXM/CvRMoGwXwEvxtRyb1F8pCGeQDl9OGY9IknS1C5ej8rjtvmq7qxHKC5oKSkkd0Rte4HfumDNWR6dJk9G7SeSaTmhLgWu33EQnWy1neeZmQE9XbLN6yACc4N9xIJOxq9R2+BMrR5c0uW9XetO/ebmSb1ckjOdiCCJiz8jM089YbqEwgRaMZWfy1Qbf9T8b8NLMAQOQAgydLpsOwFujUdKwbrUXtQJk0DcjS2PT3vmZlfmkHMlkAOA+anmEEynsOoW5O9SujtaBcJ6+n9UCcSv/lK6ghkIv1wtGoxCf30YBSpCOwP6JBUB2pQfItin7ZohrhoFJkI7sgOI4JLBaS0p8tT6SsFNpfH92JTPonVXbOdh9i/bJYE6BQxpvnzbf08UFjsdjrP2aCIJmWZ2i0rOGjYIjgWpGux6zghW8uY51pRMvHRRHWqKW67te0AnKalG79Aor/eJ2Xcxqk0OmI/0TrDDERytah2OzHdegl7G70c5wCJGd2glUDwksCS4MwR76psu7Twlox2W7G9lBIejxcNHnZ6wvpm/tJ3SvjoeL+v+w9OSMfw/aawZUTuhIr5VSQpbjuFRns2bIRz5CBE1jg1WNZB/wfY+qU6vUmngPWtLxUg9UA6UeP7O2JCenTExWg6reOg1az8a8bgY9exemV3RGKvqap7umc1RktEjpfXtGhHHPpZDyVdHzLHAYjriv7KUsX+mkG+Q5tfPaqQ5a 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.89.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571643468158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 b4656b3476..1bbc030baf 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 @@ -2715,32 +2715,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) @@ -3067,6 +3136,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, @@ -3461,13 +3532,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); @@ -3524,7 +3600,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 23c714d67e..72ecc5e62a 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; @@ -219,5 +220,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 07:31:24 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=1768571700; cv=none; d=zohomail.com; s=zohoarc; b=ADsrzBJU8MwclBJ0rhiNbUTpMBCvDIKqERQ2NL/9rXbYWFJEhwLAIBQdWl3FnGIgNUW8mXb90RMzHa5fCyueLoioHv4blE0x4934/7ZdHW8c9iduJdI/gT7buXvUD5SZj4XfD4US2YdDuypHnoq1SbbXC1yEO9UMCEPVsB/zB4I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571700; 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=ipo1JiUTjEltY2vhh3bv47DWFt0f8f5/+tYCNiR8qQ3mUqGOS0q8ESBFr+dUePkNDPJdfGnnZ545fJbTKxIMWNK+KNTBZm3lFn8S9sAJFcrkg2odyIVRVfaEoyJdz77ZgD22p26cK2+XqDKhcD7Fv4ZiqHjojyRE/eqkksxG0ho= 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 1768571700067318.1193828940794; Fri, 16 Jan 2026 05:55:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGl-0003bb-Q2; Fri, 16 Jan 2026 08:53:44 -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 1vgkGF-0003CU-5b for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:11 -0500 Received: from ci-2004e-snip4-11.eps.apple.com ([57.103.89.53] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkG9-000278-68 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:09 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 16A02180F914; Fri, 16 Jan 2026 13:53:00 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 8E9D718000A4; Fri, 16 Jan 2026 13:52:58 +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=I4vr2TS9kAGIBsfxbERJ5pxPSsLyrHQ4d2GMZBMVJUKKf0aGsAYDbGIdzyN7QlAB5yzwaKgg4YVTZ5r+jF/5B09+f5Swea+F60DJ8fsmk7Bi9Ocs4HwtZE8SGNqNlA00VG1QOZY+er98GTYwJTjPxpiRszCXZgx41LO19qBOEq/edpbUKlN60WWGhutyGxNOhQTdf9Lufi1V1lPry4d+ZkiMpJf6zRmJHp86ILDM2JWlQE5+bLuca4V9UAbd3sxKnKW4iC97CIX0IHVR9PguzP7uBe3gJNRCEzZP+2L1LTnAR/8CP+YpN+p89fv6AIpwDqpi5H2mmQsqsPg2VzP/5Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 08/26] docs: arm: update virt machine model description Date: Fri, 16 Jan 2026 14:52:17 +0100 Message-ID: <20260116135235.38092-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX0vARsX7Wgb/U lwxnhxRaVRnGa3BtuGskq/cZ8ucV8b0mQev0277f0xtbvqM21aT65AoIFCnWvGTrtbvCVXI+hDB rzOwcTEEGJgg1hQ43hsk+usZ1a51iacuaOr3Usy7QBi/vOOHCk+UwjK6juUOTRoT9gi6UiY+R0i d2LrsLazzzzt+TdHtQ5fv79aDmgCTUChEd7Y9CHjINgwDtv9fUIIHargwHqFfnqFXV6fOlE8MFy iiy/eB8CYrZXRvVML9674lS7u2VFCqN/IgBQnAXi0FT9KTeu4STgTYnOqf08iqILkxAuAQEiQe8 MXEFsaZnvPQwPMOSqYE X-Proofpoint-ORIG-GUID: yAl4kIizYxx4W336QSnJhB8L6cCWvxjp X-Authority-Info: v=2.4 cv=ZOTaWH7b c=1 sm=1 tr=0 ts=696a42be cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=UWX6RoDBcPCHCN3xbnsA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: yAl4kIizYxx4W336QSnJhB8L6cCWvxjp 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 clxscore=1030 adultscore=0 spamscore=0 malwarescore=0 phishscore=0 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABtRPL1EnVv0qKcotpu0t1LKxV4Y5QMn7c1DHMsJdk3I4lw3NWanbBd5AMs+UWmaJqiCpNUw9ka07Y2mviewh/C0Uz1qUiuev1Xq+W7zbpBAxZJVfIfeo0p0mrBWMU45rUcqKn2cIlqI2clpGNTZxTbyUWj4iJXdnUU1jTzXX1OH+43G0eLMzPNwcCyLUsDkXufbQqbj5/s2HdN7rgUZsNS2/GPaGGGT4X0vKhWedkeVhCdnyupz9Udv4FP8iF5wPTvxChxZJKTS5tEvBO5KvKiRLXnN4PaOMzygi8habhL5R0O+KIqUTG+8g20GC2hJtHn1Pr0UWyBoDycjH8J60EYGZ6eiSUt7lIbAghD/j6XGK0mnk30jwTuaKz1H+IEieTLXTqYqjK2urStfWLofSyeZVmbCU34YCgslpavwTxQigGtH1fKQsUQuFoXZQsLjRtEU0cfX3/yainIYyadDdebATLJ6SUjoiiHmB5nxGrGtSL1tIr0kfoQxcC5alZaJ1kW07zH5m07K2OXoV7KXJu+iRYmEC1e3VJmV7ktmO/MdO8rhH2ReS2UnTYS+gsAthCiMkzNmRb8wor31mqxU8LF87z4+JHmPldB6YtMK16Pubsp1IFlEcoiMk1l2JKTPmPpOxTHr0pczHEUejUdEzrCYp+o03iY628m/tXkXAYTpf8yUGkO8QPeZ6K/sEUPFtDcKAx0QY20LAl6SKUmmrfbeAO5eOfI2HckaHoU7BWEaXoshbqLHYWQ4Exx4GXxToNZ2dGu5RFZeWl92Vbs7m1wpHO6hfEHWJjN59Tp1iYa2JiEjtAOA== 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.89.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571701124158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571640; cv=none; d=zohomail.com; s=zohoarc; b=bdABn3KKvE5dOT4MCP/8m4yrPKrGIxOTeGObrzHeAIF8DoeBTHbab3+3Bam5mygT4do0+EQh/TKqHGSldyHQIOCZV6H7nDZBtW8pv76DJp5xi3f3918/2kFlzZPw3II3bQ7hmtZ6nzSOntjVN4mdLQENuJl81SXqFcRxLCj45hc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571640; 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=kY0T8z/MBSVW4Qvo8YL2+j+aa2FE+3xTaY3r3PxXVGU=; b=C6FlDFp9/fMCona9WqSQQ5ku853PDJNl+6RnzhXY/T5Cbcen2HQvCwKeg2OKejYgdxexOv+pvV53dSGf2pbJbXlztePjtqUV+1HdaGzTyZ4+5/vvXGg1UKjUx+Xy2rR8vaZcnVhmbmp8BVRUiZi5Be1rCr4OXx/2S8+zIt309W8= 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 1768571640805429.6610258198916; Fri, 16 Jan 2026 05:54:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkGQ-0003IZ-BT; Fri, 16 Jan 2026 08:53:22 -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 1vgkGF-0003CT-5C for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:11 -0500 Received: from ci-2004a-snip4-6.eps.apple.com ([57.103.89.9] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGB-00027Y-TG for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:10 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id A57721800215; Fri, 16 Jan 2026 13:53:03 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id B90F418007F1; Fri, 16 Jan 2026 13:53:00 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=kY0T8z/MBSVW4Qvo8YL2+j+aa2FE+3xTaY3r3PxXVGU=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=S2hHBXd0VaimbnLe7VN8B0z02XH7z2pqhzmVSwlyU1KdhFk/YfcRFUJh9kfpfaaUFDyzrpNuy5/U6WJN625/x6hs7d27DwMVSlgFPGsOI0Q8T7hHEOfygx4GXUuygJ7pydCIUZzggG+67z9XAZ/2QF/Arw03rt0kpHxKAxmHoA9c2ouaytAMM6cwSTMThdK3toe/BeQ1vWgJ7EpEjdXH9vDSnDWmF96Fi9zm2/Ph5tHITyZof5b/NC68rBrmwx5XLabQcCq4CS9anwx24reZ7s1/oD3nPGtpAhiQ661myXVBCFjyFRSNfOCbb/4zYyKRKjUiaiTUTiBE2gK+y0Ls/Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 09/26] whpx: Move around files before introducing AArch64 support Date: Fri, 16 Jan 2026 14:52:18 +0100 Message-ID: <20260116135235.38092-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=CcEFJbrl c=1 sm=1 tr=0 ts=696a42c1 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 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-GUID: BBRLS7HN79QN-HRY6rKgOGMpZgSf1iAt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXwr1QlkqWk1ID eNFW3Vc0oLVdS2KYoLXGu1gLUuc/pJa8BRhvG0FjkCH0BFQmohxgr2n9vNh27R8J5t9WhXwAI03 AGo5jBWZH+6XAB9SEdZjusqII2RaW0G6VibTZNGMCP76PVWqKncmmt7trNn5xD1IqhxVq3Z+bsT QgjtfxoYRmkOa1MmTfhaqPLc3gza9kktnRBe1H/bgBiOpA9ddthvFAeHXPS0HtgYaWrLmm6Pz0R dmUDbkBDZkwlDCScRA1PoGhMVIbZJR3eoCNvQUbiuA/iq3r1yyyBHugQZYeSPlFd1Ka+O6x2i7p pOzXwaHtw18p23/Wjxe X-Proofpoint-ORIG-GUID: BBRLS7HN79QN-HRY6rKgOGMpZgSf1iAt 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABqCmsyALQcPX+rlCOn+kumDc31xr+joWN+dDpEUcfmBT2GGjxRiQRwGnPpcOA59SKtTmvBS3+UAI360U4hGkh3rHQfYovt1jJgdWAdSUlTOMKX+YRr+mmuQ8R/peui9AH4fJAcbqTjJM2XxnKc3IpZyV2wX5k5Li05z77yg64g7bnoP6C6/I2lQ0Z8c5ojO4+bkccY+RSpuyXDGpaC+qdZqOy6G4Jjlm+Bid3/QjNIt0GXY5nHpJGNz3bZnnnA61MMgt7O+gFR0lh7I2vzUTTtZaOnkPxtiZWfsxYEbfrvpAeHzowYStfhJ4i7maQHxqzbOFEAJ37P0nvEXgA/KR+lYtPNrR6zz4d/5sg4XbhOmZiwb18g6WdZ/petTm6rLDEB5w/I+HBdSiEAthTuBi1t31Zx8lrxiULv+2oTie2iPzrh8rSBXO3x0qSiWG0cqCV9td/cXPYEq/AYs3g1Alzn8Eg0sDNzxjeIiVP/vwc2uXbIP3wAhsW6nzOgNjX6YzY2KMh36KdBngBNaQbzYqCQZlyNSxOLZq6r0IqrNLJrmv0CFwzoS3Vc9x/6PKgh2tKChD1J4sTp0muW8o4+MA6ZyO+MRVltSZz22m5TMnwR+I87g9oWVoM36mwO1NfqJUG8WJloW9oQoAoD/pTzk6d65h0PEEa/1u9tyeykz1aDOMaUtVGde0ymBcHuCt607fRHqyT6zgXcwB+me7oM5Td9HEGuEoXk2OUUivAvHh6jL3dFVwKeDEjZ5srbnjxPjYIw2qeS55Qkp8Q0iISzuzPGMwJ6QlmQQJ9TUMY+Cs9zfV2/x/1t/V7vq7aBKrmUjdE/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.89.9; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571643407158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 de8246c3ff..356ede09da 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 07:31:24 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=1768571697; cv=none; d=zohomail.com; s=zohoarc; b=HGlK+aXmVhp+Vag5JZHO5OpevzQXtEfO/FbGZXv5Uj3PmBb2yDcVRoMtsxKGoE+HDYy4GTPO2plMYP5ZoGxOjjPBoaRIjmmAnXpRUZcUJEzvTrD1jFssy6SCUi8cqzUEU8ewgSNj4LIuQ7KauwdF7+g72qsK32UB/PZdvQ9ZdcE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571697; 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=h7/AtWSQvYehGtMPcqEe3To6CFiTubRC1Vj2cFfCtnA=; b=Ecumdqc3xFwtGjYKwhos+ZmiGd1OA1RXiqQtJgAi1SYKG2vhsv6ZweSqC8YQACv06jdECsO4cP5qz0sNiWOMI9recaRsx+/YwI/qs/mzkE2fuCIXhSpq5ixmNdKmgfKGyJEebrFuIFprqfCLRFNn9r8bWgXmjTa2q2FwSD/+T3U= 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 1768571696311711.0231118922467; Fri, 16 Jan 2026 05:54:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHF-00047d-O4; Fri, 16 Jan 2026 08:54:13 -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 1vgkGJ-0003FS-5f for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:15 -0500 Received: from ci-2004c-snip4-11.eps.apple.com ([57.103.89.33] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGC-00027f-Tp for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:13 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id AACBB180F91B; Fri, 16 Jan 2026 13:53:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 2D174180010D; Fri, 16 Jan 2026 13:53:03 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=h7/AtWSQvYehGtMPcqEe3To6CFiTubRC1Vj2cFfCtnA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=eYdU+kO1vUB6I8uyZqVbVRE/FzySfXlw4VS1OX5pbLe8rG576oQBBvXv1Dof0f9ADIX8oUgc/fwK86XDcxTLopnGPRWMQ7GeETGi/j4304sTUqqfT3j75+ZBXOKX41pT8KOThKb6cYjezAloAhSi7FrH1PKAoL41oo0ap66VEgOvZtaS5TRVRmIQal8rGJEJtJbJxNXCGk+NvIVxUD6/1xkDpbxx/qj4wx14sA8/JzFIv6vY4QwC5xPCZbX6ECuTd4hJHv2jVaiZBIqfHGr3S2Ap5olHqQ+VifY9QRzE9lWokg/BjmEeOTZLq2lfIMiehhM3F9t8ykNHLYBkisKa7w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 10/26] whpx: reshuffle common code Date: Fri, 16 Jan 2026 14:52:19 +0100 Message-ID: <20260116135235.38092-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 5bt7S2eiHWQl8c6FMU3FSKq7-V727ktW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXx/fOTpEv/rMW 1XfEuYM5fIAggu0AsGuoLFBOeYJiXEt1YK9vg5tKDCXy2PPArHVc0koBz3yi72+7zLQ7de9mXQt s/iwmis4DR/eFRZaI6LyCk7ggX3zFgs1HhfyqykFgDfU3l9wlYPKNH+I53/upOt9KkYs4joaNQN UwVk+qIGVQyT13YWaKFk0XLnkADPGsIZDtQVW+J2srUYEVeeWNOE3vBzYXXWLAFz+YGeTwcoH+J OuJp6zQAd6UpvOMpKae8l5KE2mipG8Dl/Puc7lBrk4TRKmhcm6jq5iB8Rp0MyAF6zScVOvnOPkV mrg8zS84RlhgAwj50Qr X-Proofpoint-GUID: 5bt7S2eiHWQl8c6FMU3FSKq7-V727ktW X-Authority-Info: v=2.4 cv=H4TWAuYi c=1 sm=1 tr=0 ts=696a42c2 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=XtnWhMvHLvoGx0dyWtYA: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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 phishscore=0 adultscore=0 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABjfwQUOMiDKY0Kiik9zuB2L7rIR+rLxBNXtITnU/yoM145ghx+4jKhaNngpm1xOCGA4mUWRQKBOZdNWv4U4JmZTxspEr3+GCN1c5uEY7ypAKqn/Lis4Y5dX62cCwzleOcWOvgUr/y0BMyJQkPSyRF1YZ3PpbWUtVeCCBEpBGXooEqQuSX4v7gU2+wc4Nf1zzOAGIB7afeFjs8iSg2DScboZL4XNZM/0Etv7eYfeBscUJnXWh1j9frRbjU3QHS6aZfAXm6nGUf7wk+G4GWIMB5fm+tYnaiwBc5kgUYbdFn4aj9lIYDOInzmQcs9yMATV86xeHL9afMS7W1zjssqjiGLU0ZsDSA1ANiUkV/HghKJcb0tWjIG89eSEGBpcR6SeVrJUv6ypaBw1xp9zbdkm9K+e5JAxixHM+WghkG9mppqsV3J1zhN0qk2CDb9tDnj/6JPCGk7dnGpzzOpEsJJEGcILWGeHOOSCVkGivuAHd10dn94Hiypb+fHoRu9w6VNxkPGjqCZBTZGmnyT41OwQLYDcThp7oOCktCMqWZSYw1cWclSiN+J4t8+6u00+ZbrotBvfN+TSu9dQmsl/+36hj2uEPnQ3ipWNagUCWw95B7xnIL9zHbLzDW7CjFoqfhHJ6noBEyZkVcxzxbV2DVOuk/qzlqR8YmkzsdIRsrNYX+3rLVS9rmnonzw3dYvzmQz1Q/lcfKRL7C0ua9dqlAmr8zYkivhN1e5qSICzv7Svna/PWCTk3llNReUnpZwDOZxj9P4+E= 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.89.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571699675158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 356ede09da..9127a82ec3 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 07:31:24 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=1768571917; cv=none; d=zohomail.com; s=zohoarc; b=fXUxToeR76LI0MfiNTWVkT9X16JVQrFC+KmQqkfMt9e6m6EeoaTcOHd0gt0/UoMeAxLuvgxNlFK3WL5q9AlerwT5rAdnRfOOVnOsNIcFN4w5986kNAre79nzfHWv85Vh1xkT7iHySIQSsUh1a9ZK5LGFXuscDV00R5HL45QKovU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571917; 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=NYZsclq5K3BZu0eonuFQa1Xpa4xnd2QZpgIRbpXnkxnFXwfB7vSksQsBd64oKpd3NFTB5hy5G9nLkR4XRvynGez2gztCEAMObgJBHeBJs8kasakfeVaidh6aahLlLuyjfTjS89HT8OH9VIDBVUHOiBj2CGk3l12nLYSY3S9u9iM= 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 1768571917609649.686241689772; Fri, 16 Jan 2026 05:58:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkH8-0003o2-On; Fri, 16 Jan 2026 08:54: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 1vgkGK-0003Fe-6f for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:19 -0500 Received: from ci-2004h-snip4-10.eps.apple.com ([57.103.89.82] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGG-00028X-Tq for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:15 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 15C4518000A4; Fri, 16 Jan 2026 13:53:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 606C41800211; Fri, 16 Jan 2026 13:53:05 +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=Iwx2sEeJIY14b4UPfe116J5xYO9lyo6DbFNSjP4VJ6DGg575wciXE/evv/WgvqcbVjh8aXPpwpqyWJHjDxW/hhCnK5dOCTKZvuTCuuTIAFjMH4nkh954y7bZW/ihCRrzczdwZO04SbubQtsT+lVbQ5Sn5rGd4VE0gpx+WZgOopwcgYGvU8mzXhP47Lld1s5mmdqOThr+QwU+FrQk1aArEoYQCzsFCh2xnp0rRFn5GNg7P4J0mCWNPq9JbI/MPB1ai8OCSXRivSjQUIgHvN593Iw6qG424zRQgagoup6pZPp6wXFSWRy7STg6fygaZ6t1qKthFIZkcRmYWTwfHMqRLQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 11/26] whpx: ifdef out winhvemulation on non-x86_64 Date: Fri, 16 Jan 2026 14:52:20 +0100 Message-ID: <20260116135235.38092-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 6GJPcTzBCxOFlIHIdePcmzMkjDt5o0Iw X-Authority-Info: v=2.4 cv=HtB72kTS c=1 sm=1 tr=0 ts=696a42c5 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VExx-Oqz_yhFp4n2Ql0A:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 6GJPcTzBCxOFlIHIdePcmzMkjDt5o0Iw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX7FDXO5VVXwr8 FnYdfbmoAPU6j7JDV6Eq+pBA/S8tkJct5WZhzq5PBmGD+fmRZpul/eIBp2V8sYuUJkXYcHJnB9F Twi+bNhiiKhT72Q5fIwjS27AjkK/XehRBuRzEPeXhfl997gfCNx/Ix87DJgq4lKzxi7xIU4Ozdx AJDSFEJ68qBrqi2zgr5Kz6HaAxivrYx3u2yfRhKKvJbiUYhU/kNI/jzNnfLdxP+inhNv5Jxi3BR RI4YDV6SjB8iWu6PhY8UJgCSWweH1G3vT4HvfrNdKhkh5nUY9HHSNavES4WwBmXCeMKsuTkEu42 l+s/147qguNsoP3tlYG 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 clxscore=1030 suspectscore=0 malwarescore=0 mlxlogscore=866 spamscore=0 bulkscore=0 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABjsUw10cmh/oChTqqykJJbXj9s+ZxcTN52P7fTKN07Ek+EN0utnIFNSGK5JazROQWwcOGWNkMiPfaetTaaGzuuarWMOYWT2XY4mz2N+R3KI8elW003xhgDkmzPzQYJ76ruq04/W42azFuuooGUyJIJD8e5rE3u5UDPRTixsk4+R4ekm5SsFo21QVDzeXgvuyGj6++5VCw0v2b3ze+LZXLeYugFhBjLrwaw+ugXf0tmbQuQGApZCQvnNqNvKj2ceJYDZRsw2sfc6HopnbDuWnH1TQ8uH7kHq/SL7Kzqz2OOrEkTesYWvOadg2PkKPJJwyi/AxB4m4CQm5eBxlOq/QSAaHa4c1RxzJrAStQSfBBXWrR2uG0of3eg29m0EABaPBIBJ0TlR6z7tsQBP7Z1X6ydjTtzRd4Lyn41Oh7R8hVDP/BnyaF84r2oe77qylgu2C7aYpe5JbGrOUdfwyCOvxyOVcMpX2mxc22czZSi3lVWr62MZfya16M/rCWKUVdB5foNOCUzgmNr+gcvTl2QlKlA2egutx+xqzCXtZUVsc3i4BQt3m0JyY8UIyvXAqV1+f2Zt/LOE2Te7dF9W2o/Fld6hyW/JX0RwOJckiX0SibnnseX8e1J8Ij8ei/pGcaz+c65ssANmo2aYlOtTrqYDzD/NSPq2Q6lcOKYP/nH7CYHETIIS/ZCjLaidJdi5CmvDl7zkoM2/5eBTJa6rx1rRTt0IZX/enQIX+jC2a2jFpO/qMn6usTN+7zeaA6gDyDYucJ1NedRoVkB2gSbnhytDMmCbtEOy8j4uauOJl2NeP1BQ== 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.89.82; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571918212158500 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 Reviewed-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768572071; cv=none; d=zohomail.com; s=zohoarc; b=EsflV1XXocZ02bBaanER4grUinIenvYMfQZom9qHetNSbbM8pkyh6rDkoZb/h1q6clfvZj9683hcUps2nWFZ9pdn/TBPT0MSfHkc222mOHruwDZAt05XuoqOaURW4wcIwZJJMjw9I+eqR6K2r1SEFOy/bmUlJbcHvkZ9j1fHwD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768572071; 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=LQxFjUZRCMC8LPdxR7VWkUPQ07d6NpM8yqvLoeFACQjvm2QfjE8n1oHbSIG3Z6tBEy2z00jdcdsBu+HKrDYwCSLMjptra6xrW/tPEN6tmYn9BoYQiDfeQrlmp9vmnOaSsRWbvEGUOYVLsDDYJwG7tSdAA7q8r9ME1IAX8PZCz3o= 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 1768572071071269.5688764670267; Fri, 16 Jan 2026 06:01:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkH0-0003nB-16; Fri, 16 Jan 2026 08:54: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 1vgkGN-0003GO-2o for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:20 -0500 Received: from ci-2004b-snip4-11.eps.apple.com ([57.103.89.23] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGI-00028i-Uy for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:17 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 12C2B180F920; Fri, 16 Jan 2026 13:53:09 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 8E5AA180011E; Fri, 16 Jan 2026 13:53:07 +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=bbTcOVaR1HRoBT9kCuQre+gfTf1YWh0bnSTJLQQAiqhMhjtqJUmfsk+zAL2CKktHfQFP+xHb5rdxce9m1UvLVO8MZhI59CBvI8G1TnwcgqAVbkTi062Gyk5DrOnIfwSxX2sny5G/610fmjxC9AQwx9Mudjt0HEhj9hoyEM+LOhXvhSdZ6OVZr1HBOosbm64up2mK7O13ydo89mljI6Jdjliv00KUoZKcWDib4Y3nVlZp1JQWtHh1N5d0XPGsxdRFHDAjFqgRyBYQBQ5HXbckTdULkW29OPHJ1X+HPaC+W2ZZIsE6cTpT5xhoJCUVw+L3b5p7mi4s0rmKs0aBY5IP4Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 12/26] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Date: Fri, 16 Jan 2026 14:52:21 +0100 Message-ID: <20260116135235.38092-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX+Se2HDRYoLyT rJEdNmB18SrwsxcjPGg5Hr9qTD3DAJghtx4piWdGWrX/GNfrL9F5LxGmryacvXB7XYF+LE/GMdr JRMEIt/FFSGMOUGx8gX+T4Cb9EKf9EJZL77ULVTgfnSMN7qylt0B+UgGDrTS8gg/R3gAQEc9eqg bIjreJsgZ5aC/6z7nGMx4DNX2ZmJaxwvKBXxsNmLUUDtRavsxpVdWIXvabYOLrKu1r3EHr+vLpS J+wXlxvOwL62rchgw8lN2Ta0aCXYQEc5dUbSbh8OeCW1+A52PAPg3r4f05H2zn1+FE0pbZNcXpx o+UDse6qMMFWiCeM1uu X-Proofpoint-ORIG-GUID: 4DwXAfP2qen8uIIzVEchue9TeEM8-DW- X-Proofpoint-GUID: 4DwXAfP2qen8uIIzVEchue9TeEM8-DW- X-Authority-Info: v=2.4 cv=QrRTHFyd c=1 sm=1 tr=0 ts=696a42c7 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2psWIPzlEfUqwKpUe20A: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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 malwarescore=0 clxscore=1030 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABPEn+9ZKAE0/xM5Pa2cMDVGBfWEQE2EEmMOefmkALhX8QTSieCfj18+Pu2THBt+JLPpqTvI7XfF6u1oqNzNLUqx1sBo9UgqVCrEGEj6QoYwmWJIXvMliw6HneVnAY1igZmihx3GkEz/lvcNbxUCtP5VRhHqPQ0EO9FXN/XJcymypIXCS5pHn7UoU4OcPSJGGQOPPkVx59CtX16ECGHXpN4crvL+cnHCiGYZlmoiHZW4Ck7mS6bLtW/kQ+iQ7tE5o4+Ro5I9rqwYoEWfXZ9jWfZ/iBL5IjtJNv9v5YNUw1oXsMS79hDknBiC3GioF6KZ9w7tOkdwrT2AH8wUoyoc/E8rf8K6mJH2e3Dscw3BGO5RXvnrfxLDjN2MtGRgW5MxtaLqLxZqzd1yz2nSTZnzjF4Ygeof0+UGWrE4PjjAGGkLvfM4ltbgmwSwW/W5BX/ksZnBwtRUeMvE6sVbQ7OgLVHudloaBp4DAptFrJfn6YBIaaKxQQNwGH6XybPI5ERFLV+eKOs2g7iYs7pAxU7cGjlMoXTPFzZKFrrmTUzuTDsGQoKijb3Lu8bF2TUvFb/3XeEdfk5TzstiHlZbog0JDJ3kkQaYc1D/QAGYr6dkE4L4df66B0s0yMkgUvlY1mQrK9wnBg8hCblJKWHCskc39WFhK27PuDoUAR6xl1CXyA3J7LvRssVGPYirkFJjVVAKCcGDg57+1Cfmg2YtdyqLeUHIQEBjlCOqWaUIty1fJhMEiYrK8wm3GloL4IEg2tl5zwWI2Lm8jyDeg5LODYoVITU5xOjqJZpxTJd78A7Nl3Oht2PF1ovOkDF/KUaGs= 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.89.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768572071731158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571913; cv=none; d=zohomail.com; s=zohoarc; b=fiDyiUgchqThc7wIyeMyNsDHC2gOsKuTvBuATK2E8hlycH7DM4Q2TeVKzFXccDbn7cjlettMBQDspVB/gWeAB7suOBR/AGvYwE6eIGEk93HRsEVyDW8DnGToKAmLLWvYQHbk+E3GcbgmiE5zcBhP9xfO8ruAlqQezv+5Y39FE9o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571913; 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=GYyVnUNpzw4wlT9Lr5OqEjrIf4POcPk7rHJXEubGcOjDr8SL3jClnEVjyAfiJgobOk9ceBQdMdsEGTSWAd4BcvPsAoZOEOng3jQhlUdzsoQSU6/NKYObCbdUHqZgC2j+FSBpxyz7Hu14x06A0NjC5D313SONHz20c8DiefdRK7g= 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 176857191317140.302374518980514; Fri, 16 Jan 2026 05:58:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHH-0004Nr-6y; Fri, 16 Jan 2026 08:54:15 -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 1vgkGN-0003GT-4N for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:20 -0500 Received: from ci-2004k-snip4-5.eps.apple.com ([57.103.89.108] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGJ-0002AZ-VB for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:17 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 663F5180011E; Fri, 16 Jan 2026 13:53:12 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id B0B76180F909; Fri, 16 Jan 2026 13:53:09 +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=UADJ5K10G0FMojACLtKOgiWzi54kfHAqJRewIqGXC9GuF7yh2MN4yf6RcXk7eQu/DHsy+xa1yS2SLaBuhRADQgnJQVHW9T53Wd1ehhubmfPnrCLDfWGpdyEhJlixi2JKlSZ+LMUQ1TGi44ZBy5Kk6985z1EoP5UfJTMlItlkvnxO+uFd5BNemCcbh9CEG+Td9q23KZJi75+F2IqfQM3zm+BOU0hhMu+2uxHRNmxSzsaI2XjysTw55pXaDDy6y6rUfbtQIRxOdi07XJlEukwGFN0OBJJf8rwJnXb0azqWx+6t1KEo8OVkBUApE9gflsREooSXVKyIwrPA6YVBYUjUbw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 13/26] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Date: Fri, 16 Jan 2026 14:52:22 +0100 Message-ID: <20260116135235.38092-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX2LaPCg+KZxQf Z6rzfk5JHiDeerNCVVRtFxbQSLzVNelFaqRf8dt8GIlwGaFkTM7bvkQ/TcsZatHkwRb3+cjvkVL aGnRhyyAivDj8FZ83rl7i/HKhztxgvZpG5aGVXD0Z6Mg+3/de/uTKzfWaDSei7BX9CWkHrcfz13 wC1a7OhJlzuj+6J8FyfwWkNNl8TJQ0HeTSS1aJcG1wtTcKiSCprRESvRxYJ69Rfqs+m23sM+bxi KXjldlk+J38X3s8n2vCewtCVclwhNz297J9rkSo5erl+mM6DTOa2CmLr5zva+Bkghn5lcwjgbyF 4bDkivd/I/GlMW34lps X-Proofpoint-ORIG-GUID: VBPS_MTzq_V6uYoRg6t6HOOUM7S9YgAv X-Proofpoint-GUID: VBPS_MTzq_V6uYoRg6t6HOOUM7S9YgAv X-Authority-Info: v=2.4 cv=QrRTHFyd c=1 sm=1 tr=0 ts=696a42c9 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 malwarescore=0 clxscore=1030 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABbhIBsG+P3IYdZCzBNPaYmI6Z4StLDlcGW1oCevws919LxcBrQm4jY5+B938yL2Xa6yArHtFboI3i9B0yj+6E3yNrkH6+8MU8vmzpQuRRHLcu89p08T9wSfs+QxFPtpriCJpeFTVhvI9TqnKFhDGuGSPnxS6Qp+ov1O9mDWclpgcIOGX5+ftwRkI/UfbaKciBlj2yz3PxGnMxIkbL0Eq7B7J4RctPy62Wcuf+zKOHeeWbulME+qAZU3CjW2NQZhGK48IAw9dUTVLBzk+Ym3LXNRfQviMHeZbu2ykvQVNIV+vzcGfz/HbRf6M8ONz16JnlE0SvWMW+LLeLEwv5V2Fd7XSBfaGNV62/oMvsa8bDQ5k/ZgDyPCBLXo3RTOCdqA/305gY7UXywToKUP2Gvu4XTnNfub3NRsWM5U252DgwC1uSLzVaToCxZUOTnVjzwNkbOCIJyfQqaKMuGrEAdotGlgkYQjD1crvpC7gjro/SwRk0kyyog85cIHfQ6sgD8nBSRUpsJ9No4BE8DeigUKPsmaxcvGzuwTcBSL7td/hzVq7efhK4bLp+RedBrWK84ljFjGwFu211HGPZyJKiR7/+ufA0AsOD8klfmY6rXfxyIyYNHYLgc4Jp9YHglBTzaa/SOC/8w2wtg/VU2+Iprvk9ydz/RyqTcmlnMXjskQ2przrT22EK2nXJeGK0nJ6AFJIxb6mhWwYUmVV66AcaHVeMHZk+QfpQ04zGmHFe38/Je2re8VJKqYhkPSJW8n2VO+z1b4brEmmklxvst06q4I/M7EbpqPDZ5RfGZQpU1ZvCN/DiCfABK46WYg== 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.89.108; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571914281158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571893; cv=none; d=zohomail.com; s=zohoarc; b=khzvZM76RsRLlaffEWjxDxasO0/MsnKfhalj1SpNn2YS3Pu7Kh56Y+EcLCxr4dYupytsV3+bTYZ8lK9CBoKsTFvZ7WaWUkUQ6KUux7Zjpi/JMK+Y1BwnThY5gPsPFuY69VsglMDkJrNS0sQRxI0JHmxq+ldCsy542nm3gENpQ7E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571893; 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=l3WUhXCTMqm+XUxzyfVRYyLyuBVhepttFRVjqAxvYpQ=; b=DHzWvT+9yEgc2oMeqy62oyK3Alutyb4mMB3eOvHLF2nQfpH2R4V+ID25ImzFppEorBURZ2UE/AoPKAN5cFYG38ZCf++r2FFxo8ksBas2gl9g2il/rOH1OpeiHGmcVjhugkPbL1MlQCdrWaKzZGr7PAgoRlXCIvV66Fu3XgHkW5A= 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 1768571893206893.9840694752176; Fri, 16 Jan 2026 05:58:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHH-0004Nq-6z; Fri, 16 Jan 2026 08:54:15 -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 1vgkGO-0003IW-W3 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:22 -0500 Received: from ci-2004l-snip4-3.eps.apple.com ([57.103.89.116] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGM-0002BR-SA for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:20 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 94C34180F902; Fri, 16 Jan 2026 13:53:14 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id DD9DF180010D; Fri, 16 Jan 2026 13:53:11 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=l3WUhXCTMqm+XUxzyfVRYyLyuBVhepttFRVjqAxvYpQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=I0NKiXcyIBtpJe+tJIX2mJLAqyZdwiuFxi+3MmVPUyJveIa6I2tOJoVIiqdxdFb4Ejcll0Shjb4PFaLtRc2mJvmfAe1149onl5xl8BUADuVsnCRaon9oTnP1NKZw7rJd8tRo8lBKYm6cinCJm7TON6Kb/E3agSd6zrOJFEBKzU7tRoHElNg2uFQifBtzWWVs0WY2TLoj92No7ABu7fiUgxTXQ6xQ7arir5TgUhuMVAnna5Ie+SMEjqt8VViP0uSnXKCVyfwuPNAbvFEEQYi1VbE48W6pqDpU/9by4yD0An7RqJ2o/1ON/DncZZ30xOetRPJHUXY4yafP88hKHH94AQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 14/26] whpx: interrupt controller support Date: Fri, 16 Jan 2026 14:52:23 +0100 Message-ID: <20260116135235.38092-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=CcEFJbrl c=1 sm=1 tr=0 ts=696a42cb cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=flZNgbgI_Ya0FyYah8EA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: t8Szu0YNm_awQ6PioQr4sAbhECYuKzQh X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXxBa8yxmTJuDt ytoU8FWtklV5h/YcHk6QXTGnJHvyEnceC6uGBjshJp90wCbsLhpBnOkxnkNzwflxJNTpNH0KDKx ZaXCBlAPphxjLZOgG03xycj2jhPstSAWCN0dwvAnn9vuNzsPmDQ/nQ15Ux1erUc9KIJSEdgSMbZ L6jGO8chUaFKal0KjT4aXRm0iGdQH2fBr7kEHqL/TIlqT62WvZa5evtjwaLbL9PBm/sIcIHsq2z YUJuA81BUPs/RaTD33iWWAf6aszmdhJ62EF97nUQ74fXU6FSMqhpAYM/yB5/q+1ZeARrgFZUZDG U4lcg3nwmnoozRhM3ip X-Proofpoint-ORIG-GUID: t8Szu0YNm_awQ6PioQr4sAbhECYuKzQh 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=999 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABMJzlqn1YO0IsRsgMujuPWxteBarZinNvjPl+OfjWV5jv8bn3tGwR88XAMKeRcTZcdnfpvd5AFWmpbsSmkO33RRQb80uXyCU7Rbmx2lA3dA4SpVn/nC933256pT+Qs39+Kse7dGyZNnTtbk8VVzqngmrCpOcLLEbvy0EHGaWCGw8Ohe7YcubwcQXzW+P4U1cwh3qtZ4L2m76N2h9sL8uF+bNnOpBv9kKThDUHsgLIPhYHsSe6lATxnV9dSQ+JTg4OdMMBym/rkaX4huIEuradimPqCGna3uGhC4/nHWVrxSFffg7w6VleVSfF7UXvsT2KEW50urH19S79U1//cVyJgFbgIfIT9Oj5Fohu3yhVDOqH3SUnYFyOtBONl99lLMLzBEumtPKlVI/E+t4/KFUpxFI583HOi/NG3pa03OyHjinM4o3nvBVbu3+pnUjK9faodMzFyvX90AF6Y0f6gxTwQi8ceWSCzb0sHg609fIX80bpYIJ0YiyhmVsAA8LEaWEgI+RQBIXumi+epaF12DBkv/GhJvD8aqa3pX6XKUfHoYDkI8n63sQzlWX9qYU2PpMuG1h1lr2Ftrb5lfTvA/hDgSNKKK95uGlDcELqK+3UzH5jlf2ozIBNZ/mm9Kmm99WNqiL1iOVmezzT+7SmQHrYCBP9COddCOVQ36czSwrwqXZ0tnr3OJHANHQd1gKheyyw+f7K/0XzFQrksgwYHhk5fEIfW4jVDUYOTl8pE9wIegt15qnwXaspAwFemVKQtojEhRKkHtu4I/y6fJzexlbn3+pEKyVKSoOK8mk/p+Ho207XbkyhCRUfy5GYGw== 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.89.116; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571894308158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- hw/arm/virt.c | 3 + hw/intc/arm_gicv3_common.c | 3 + hw/intc/arm_gicv3_whpx.c | 238 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 248 insertions(+) create mode 100644 hw/intc/arm_gicv3_whpx.c diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 1bbc030baf..f43279ec18 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" @@ -2121,6 +2122,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..9bc036d1ac --- /dev/null +++ b/hw/intc/arm_gicv3_whpx.c @@ -0,0 +1,238 @@ +/* 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; + WHV_INTERRUPT_CONTROL interrupt_control =3D { + .InterruptControl.InterruptType =3D WHvArm64InterruptTypeFixed, + .RequestedVector =3D GIC_INTERNAL + irq, + .InterruptControl.Asserted =3D level + }; + + if (irq > s->num_irq) { + return; + } + + + 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); + int i; + + kgc->parent_realize(dev, errp); + if (*errp) { + 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 07:31:24 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=1768571679; cv=none; d=zohomail.com; s=zohoarc; b=YngnkRC29kqoKeusGnVN0L6XyxeKGMj/gSu8BW7q8hVEvwnKl+iwkvIxYSfeZT5iAxiaAFXnVpbF3T4EU/pZlUP9V5xyZJKGLo7fkg2c7gun2RQZ+JV/CNq48kKVqaQXgPOtd28LJ4izCF0mAoCsSbsUKasq7pmICwA4prETqtI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571679; 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=PVZcRTTvmYQsSoPW40/X5gMrK/E7BgNAfEK5edOgA8c=; b=Mxb2JbgRgD8b7AD94Mvv3hgDdv4jjbxwM0mDIDEKx3yazo3s0RXcgXANd1TUMiVJ9L09xUc6mzEvmN0mjviYLjWNnUrOtPMLnS76lDw5XhtgmD3mqGlv+3C6qVc4Lz1GRTmRA2oJK9VDZ2mq2Q3PiQlk0vKYj7Re71KfsZZny+o= 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 1768571678746517.4106164398889; Fri, 16 Jan 2026 05:54:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHJ-0004hW-KK; Fri, 16 Jan 2026 08:54: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 1vgkGV-0003Md-AZ for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:33 -0500 Received: from ci-2004d-snip4-10.eps.apple.com ([57.103.89.42] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGP-0002CW-0r for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:25 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 2FB95180F906; Fri, 16 Jan 2026 13:53:16 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 7B9FE1800211; Fri, 16 Jan 2026 13:53:14 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=PVZcRTTvmYQsSoPW40/X5gMrK/E7BgNAfEK5edOgA8c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=URDSWuXEGkfgcOSpefoPpo0GmHPNxxN7yimAVnpFiJDfvwsy9+Lcu50DbaMwu73gzvihX7X9/3k7gRlVHUKl1T2Zni4minp68DUd7kXZt3kMTp6nqnFkuLZmHfc/q/JmJoIsgRu9XtPyC2hCpNBMI3pzxjNm1U+Qm2R3qGSOQivi4jDndNeURslXShzHW3JPKryPjjU8CBc3PVEKYrF/TFJkvvF+nhAR0W//RPlnp0ANEJXg67Bvc58ORKGNifUHqsbZ9qjcpCueov3MU7e3Xs7zYbOHxZTDiws9TxrWY8ndUPOmkWIji1e0zdxK+BYx3LDNcukGlJySUyXoWyX5QA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 15/26] whpx: add arm64 support Date: Fri, 16 Jan 2026 14:52:24 +0100 Message-ID: <20260116135235.38092-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=GagaXAXL c=1 sm=1 tr=0 ts=696a42ce cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=7SW9J7SZZjhvT-K8fPQA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX2YRjBOAKn5zR ucYxZKvGD052K8x37c3c1d909zUqPk8Zghxf6L2vxw4SKSj9t77imQ8qgNYPq0vzxfiGKPKNssP OSd8AYG/k9CR1sDYcW2XOiirv+bfLZU4CdkNP+/vobcDPKCsdq6DLj6SW6OWHkFLfveox5VsVJQ WbJHJMwVd1lHU5Wpi5fhFID7pudBBqaPhhO161yXsL4QVRH+WoBO58tfe9G1x/Ig09k6j47ecrs cRAqlHeDqdPV6p8wcea9s9cHYHFfTI0eIie13FPAUGak9WEwxh4zA/JEDFCfvnvQFnsqrxt+5RW O/YVeATxkl3v0R4W57s X-Proofpoint-GUID: dnTKH4xoFnQ8ARS7hagvKWH1G2y6QMIZ X-Proofpoint-ORIG-GUID: dnTKH4xoFnQ8ARS7hagvKWH1G2y6QMIZ 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 bulkscore=0 phishscore=0 mlxscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABetod+rMw6tkQ2yaGHZZ7/8ma1J8ucfvB99kdH/iWRbB0eM0uIfVyZFeQ0I8r044+LE8rsQjEvckMEeCCqwjTuRXXeUBgUDW3Jxlf179DvCv7lK4ITLDRCZKYrlM7CVy6Z+cEb8CzJJ7LPT7yprsivA7AQjddH6lFaZ2wtVWdOEo0ER2KyzRf/EgBTu4Dlw7nbRkW5gug99/HE9XI0fGPSPPmQTFm56WXfh2ZTVTt2H5qTMJAXS7yVJCzvxkOXefSToxV0CFS45ZPcGlN4YYgQwXWR1cYTaRjcVd72jIlW8EQu963R+8kSfzXa2ptPFfR/wtyG8ooujMFP0ENsAQGVQi4sHWFFi09tyLJdvpoa3BvjsbP3ru1s9Q6OnNJ/UcAZMG0RazndlDs/U7LgNB4/gl0Hv9zj+YLMA8XGMNnhLwx7/OZNqjN48YW2Vp4w/w980OU5t7iCEPqrdWnB8s3ZIqkUtYT4Kpc9mcm142i5LoAZsAjYD8PYwNQN3GRekIpKjJGJYVp1n4dn2jM+3du42Ggw8h370rRDjl72zYQObI+cUftQFlYLa7MQA7QUHpdVV+iQ18bbyQpHxN2F1hmakAeAvJV2KE0Z04r5akpOTdqM4eg3F/E1BF6t5nK/fhJ45ALe/E6EoTBmJfR3oXXEwYPE9iB21u/5XBhyGNZjs25ozbPtheilp/XVyX6GQCoQDFKOZIaPOsZ+ebX6DIf4WpESK1k9iO1bqAM7QekM6x5cpGF7RyqaFS6gZXw7FsMFREinJDEZ1m/BNQANo/te22Aq05Z6KJkkDcW8XaD1aiRgs8VWl0= 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.89.42; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571681151158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- accel/whpx/whpx-common.c | 1 + target/arm/meson.build | 1 + target/arm/whpx/meson.build | 3 + target/arm/whpx/whpx-all.c | 810 ++++++++++++++++++++++++++++++++++++ 4 files changed, 815 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..a17cc93ce9 --- /dev/null +++ b/target/arm/whpx/whpx-all.c @@ -0,0 +1,810 @@ +/* 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 + +typedef struct WHPXRegMatch { + WHV_REGISTER_NAME reg; + uint64_t offset; +} WHPXRegMatch; + +static const WHPXRegMatch 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 WHPXRegMatch 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; + + 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); + return -EINVAL; + } + + /* 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; +} + +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 07:31:24 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=1768571998; cv=none; d=zohomail.com; s=zohoarc; b=CvcRB2R8RWpfV0EAtn6ifeW65APJjrk34LeA+Os8Eah8AEq5AVlYdhbcy9TWMBA1sFXo7PeyXseNXoQqAAsg3oCvWoZwG5MX1AJLovmP6ISbLsMHDAF+KVSmphr8iw+gbsboRAJni5VayWu9BGt7kcV/DNynH4K8mf3YEW8+GIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571998; 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=D+vZTSeVy3Zr/uQrqJJphGmamECgfddCplg50iSwQMIOl9XZbNtNE+qpbP7boRTYgv1DHl6NtllH9IcSN/SVkSJ9u9C0kk1auMhWR4tLX9qd9HD4Fi6Z3HCvMl0K3H7yp2O7myFwR45z6b/tQsRCntK7OrfsomJNfhz8wH8Xyn8= 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 1768571998160292.8434696659248; Fri, 16 Jan 2026 05:59:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHa-0005UH-Vz; Fri, 16 Jan 2026 08:54:35 -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 1vgkGV-0003Me-Ax for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:33 -0500 Received: from ci-2004c-snip4-7.eps.apple.com ([57.103.89.30] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGQ-0002Ds-Sf for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:25 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 806BD180F91B; Fri, 16 Jan 2026 13:53:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id A9441180F919; Fri, 16 Jan 2026 13:53:16 +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=V/DCRBnOY7EPplMJMkORJcmUIebBkZKTVbTe1d7b/gzm3wOzE6hkLtUWVggiPJkI7xWkmcaBZ3f3T9+bhNJrGYmbGZXjR/QwoHDJJdPleFM6Tr2R5UsqrAcdWGIFH3VmGFJk2rdlj45RG3dePH6+BCd2f/xSEuipg3nwSkQMkrfdmnANl5HDEF3gN0q9IGrG11k5/m2eN37dxips8TLpofJ8oCejXdS1SgA20eT/I+KgCk+D3Ar0m6mSaO8UQXRbIFaaPXusEfcAotJwGWpTubwrWwXOvk3gaMqXE6pGNewTZAkDLZjy//ZqEA7v3C3OFzU0wqtBthRHnKQ4SJPgvQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 16/26] whpx: change memory management logic Date: Fri, 16 Jan 2026 14:52:25 +0100 Message-ID: <20260116135235.38092-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX4wm1OqAK1Jii JeQyVTRCe7Fvl9LA4e+W4z73rLWUr90bzj6ytC+U8X8uaThSqfIeJCJAVtUQGZhFBT6S4lk+LNm pJOvVRyrVDXAREsawXXiDzgkBaCZx7lOUVdC3qoxc0WsDVFKuDOChaqil1uLAzMGvgKQgpjOK2Q fo3EzQe6Cuf80eiQyjab05VqFvLu3hjqU+2O5OAg8KFbqXyZGfi31lyabOtyFcHzYa4sLIPf5Fz HorSeWySRPE4gHvbBO5A1jxIz4UXBWOlih1b23aN6L7/5klRchPKEfxLSzYJUF/mo3AVHcIf1+G iUbhonXzifkB7chK1O3 X-Proofpoint-ORIG-GUID: 06k2PckgwW2R64H6X8ZfrvqX0SiQ_tG6 X-Proofpoint-GUID: 06k2PckgwW2R64H6X8ZfrvqX0SiQ_tG6 X-Authority-Info: v=2.4 cv=QrRTHFyd c=1 sm=1 tr=0 ts=696a42d0 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Warxv3Xc6ASOjn9-k1MA: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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 malwarescore=0 clxscore=1030 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABpNRb62xx8c3AKNySiCggtM/GRv121TvndpMY6aWioPbu41RpU5T9UChEOIgqB87vAp5I0TXSZuhxU6S1OSiw0BtKq7VfPEektgMYSMO6MCFcYFHT+wneK1gLLj8PAsKJr5h6rIJfI6c5Xk9p6HStWeDbbefyHb6IbT7Ocxt0A7QhGk3DnPZfaoSi9Fr5h6zIznyin5BvWSpywnKmNvEvs/DsWZeg/yo+mdXWEWAFH2myfTk0L3mvf3E2Pa0tvEw5VR+ctG4ppd4UnBSt5YV7IUtEcGGGkG7ZzgOn+kF7wtEsayBCAs+l6vgMzNwj4IkC4Tyk/XS5g4BnJfieTROec74MxhOKmG97xCwwadwZ8m4knz5Jrbw9Id+2jrqxuNzWdXwmyH/yvZUgw9pZ3vRtqdV0gAPIX6/4/SaBrWY539s8k3hEIm5f0SMtLoMiDB0osAZ+3HJqM4RLpPmSihrZVpFzqyoen04SSY/p5cZxtx6c6l12ntYU3alnQsXVN3pVnWf6A0JdAs90lZrxXwUZI3oHHOU6zcF6qufRX3CAJTJfJ9O+9WR05QrPQ5xegDfTZxoJsJqCwhtunNdXPU5nx9+PK9+bmnbI7aYauci96U6eCPQHD1vY/VBGKi6P+IpGRR5fwgL9Tfl8rLXzyG1e2+u2DahleeMvli6gdOjKxWI0w/OcUTnlZzgwz8hoZN9rLtX1MgSeknDdVLX1jAyJjencwzUEDTuSOsldVJsKhV2AURsEKvbQuYp6M+dDvL7poVSm8K0KUH+yj4hlh7+8xaPadMRiCRhNtIugBe5qwtyIFWlqFDvAV/nRYnw1FA== 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.89.30; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768572000700158500 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 Reviewed-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Bernhard Beschow --- 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 07:31:24 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=1768571744; cv=none; d=zohomail.com; s=zohoarc; b=FvGFtbgMqo7x5LsvNyjrwpdUPXrEWvsGdXMVL4ZJGfkJ0H1TtqVDuzkF+2guc8KfXSsrLydEByCBkvqkQZlscN3SAf8GT0PkzvbgThq5NNUR7hlaBUhC0lcYr/dZuvAptya1JebnpVAvwFcwsmLPmxcJx7rhPrr6JCNh5YTz7Vg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571744; 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=wKVePVvWDgW0hRHNH/Kje+Z2OVAlIW4rCnZoh1gdDUc=; b=Wvx8pT7hRj715HDhQ8RbLAXmGGr99QqKst+van7il9n222mKR9xFyHu4xdMz96FD9fsgnzwf6U17guCLgep0G7/NQ/VHu9OyfiRc0xJvWXmjWlUDMdPQBfOK6AyO7/zuSeA8afUorysSJWzAopUcPVuEgn7yKrc010GAZ3RmTVY= 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 1768571743889701.3499000446886; Fri, 16 Jan 2026 05:55:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHJ-0004h8-JD; Fri, 16 Jan 2026 08:54: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 1vgkGZ-0003Sy-LR for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:36 -0500 Received: from ci-2004k-snip4-11.eps.apple.com ([57.103.89.113] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGV-0002Fq-33 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:28 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 01C3E180F914; Fri, 16 Jan 2026 13:53:21 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 316E3180F909; Fri, 16 Jan 2026 13:53:19 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=wKVePVvWDgW0hRHNH/Kje+Z2OVAlIW4rCnZoh1gdDUc=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KolvY+QSqg+mYQklwG+f+XpdAcqtULzbTO2QgAsI7nLLxRvHtJ7RIPvkFVm3Zgh5BDlalfE6K0dEMDCYsNCA4g1nqas6jBFpGbwCWVfnctB/GuJPiokOG3h1szx2jzdtrekEgxqxHN3N6omy5r7NLvXO5seIwzImAuCVtPgEZCTqpmppHSEQujL5dNaxY8rROBQ1qmK+zVHeiUFYTS8cPeq73+fTCQ0IzXGOPv8wZ6vxcTiks+c04T0CM0hKy9dkXM5ZnpOXFiOVp1kkdN9PgVSGWYchMvY/xQ3HioYUGLaSuAZmJ9itHtYa3dEKyMl5LhdEbJPcMttjBZ1+ele6Ww== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 17/26] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Date: Fri, 16 Jan 2026 14:52:26 +0100 Message-ID: <20260116135235.38092-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: eQfJHBnYPLo5gpXieNQdXxf9tA9k_ojf X-Authority-Info: v=2.4 cv=VLvQXtPX c=1 sm=1 tr=0 ts=696a42d3 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GfoCO2L6IEBdUbzNuv4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: eQfJHBnYPLo5gpXieNQdXxf9tA9k_ojf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX4wTJy7kptKXP 1AFyloMqb+Xqms2PTcR3CayOe07Em3kChjHYVr2MPFJwMsx1tlVKWe8phefgjYl41WjDSX3JcSB vZ+79Mi87QBo6ET60zy0iilBszuayJ1VHRgchLl59qlYsjTYSGG2uwnJMwQs1TIWcGKhP25rHoq w8ciNQQjLCURQ6HZ7ul1yQPvl0fTinL1yl2wAemBidcZ09qHr/ssjQPe9NkcmqXa2alEow0Fir5 16BBpWlbleR6zQw+0xcvfB1/HLWCJKbZy2FqZTfHIkKlMeJbklTjk7AKgtIYhXNCb2quq2k5I7y j+ClzWNgNq3duXBeJDZ 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-16_05,2026-01-15_02,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=833 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABvHsnH4wEqw+ytKt2orghkzDjZ227L0UKUJqdRG0n/g/A2J39/MyAIfBPID4mClTQiTcSGmimgU18dZWOjA2JMYX1bF1lr1K9NjiNIMC73j0vNUVp6DEIkzPTy29JFZTy3h4aTK6INpp8yevJjKmeJvh9p908aoiTLM/iW0+ac/NcsIZs3tVhO7Blhp8+y1oI+Epk9F9cM44XVrhhFK9+pFwpKLnCKfsOiEkadLssmHEqEpqaXUg8Jg4sZC2OJ6xSMSRgNdjx2uKTkJQFZhIkoI07La9bNYiPdysIsD6ulGxZ+zu8DGbpBhxzCBFhxaZdWZ7R+DCncHtqK/aedYolUU/e5rH4Ae2Lo6hHPFl/N6u6Dp1my9fJHbrLkp9tmyF9PhAFz/oKGTy8wNYcEO1KfJCJCHp9VimyU8Nl4pdKAK0K6VrEZ4/dTGDGIp41lPGgA9JdguIY/yZL1j/qW7NlBMew16t88tWrOeaa0QFn2IcoJdInK4K4LiaC+Icwqov98+j8y5cFMHTxlmNJI/P5x/XXSqdfvR+gukzrFuan/VSEbGi2K1gNthVT5HoAns0ilcSbaCvPTLm32P3BqpP6okqry2A2/MvDCGiY9j6ut6mxwM2Bplfp0AjZtGUOptM/qmfGiEZYh8hpNu2eeKBr2u4AWlLS4f1xd+I2JBv5M5wE6csj7RpQxIQJ7UAbLoHOhv5K9awMTk3FfMs45i2ZsAMAVopLTsaE/DeMEgtE6RurKAKcau0J8Zd2YIS+w/qtNhPKKkxgTRNRBtcfi3jDMKGgvSZAgJHg556Ywb4QTyBNxRVaHEaIvgerewY792WQlxrYx3P698QBgw== 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.89.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571745343158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- target/arm/cpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 05fa3339b1..fd1e3197ad 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 07:31:24 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=1768571862; cv=none; d=zohomail.com; s=zohoarc; b=e/HRDPCwTgLzeqnniK4uZcIuqZ1s4MPQiQYDniZdxZMdDhX6OrLbUJf0L+O1+eGKImwWG3+d2WE4xRYJWzTdf90gVtqqL2/SH0SH9DFVnU8Ehe37XR0wFpJ0sjRRfmmQ/90MyC+/YYVLGw4yrRGZfSx9ricpk96mCmoCiY2jdKQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571862; 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=KY0Am+WCDDkdqncMa5XTV2lAyEDNt6oXjjvZoSeEqwE=; b=m+Wck6mnoGORcrKit3sHkOdR5US4ZCekfKAUNFvPa4PBN9LcLdANHkjS8eCk8Vw989O+NOIVQXHtEQ3EnnCkaylH47l3VIdouMzGroLhnLnS1KwFknTBsq6ToPMa/Y9y3IqFVXGVtqz2OYQ4S35Blfj4eR6+YPAUBeYCIbcLizY= 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 176857186271222.850126443267754; Fri, 16 Jan 2026 05:57:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHG-00048i-0Q; Fri, 16 Jan 2026 08:54:14 -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 1vgkGb-0003T7-SM for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:38 -0500 Received: from ci-2004i-snip4-11.eps.apple.com ([57.103.89.93] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGX-0002Gh-Lc for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:33 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id AE689180F910; Fri, 16 Jan 2026 13:53:24 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 70789180F90E; Fri, 16 Jan 2026 13:53:21 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=KY0Am+WCDDkdqncMa5XTV2lAyEDNt6oXjjvZoSeEqwE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=gwR2tht4FhuV4dnIImJlyPfz7/r+s8++S87BjIvgjEUoxWliOkVnrQZTyZp7iSvKtc0z+qxUTex/ryZyOIjIJfGqKFT5n+i/W+BL6wWqglbqrqNIslqasusx5LdvPiT/F6FRLVvWx6Mi58fCz2iNwfWO6M9+PGgHztXZvGGX56lH44k2vDk/G39Ny/SzaHYu3OSy/c4w/dU9U7JfrUPbOaKDadFMfEdml4k/FkWtPths9sysizsnaibndWENgWGqJQjgVtL+sv49CiuIkSeboH9+E/Jnc4wkoXlllsJwI0FSTSndHYqTMAvXYJJQq6xra6bT5OADAlc+X0cFf5zu8A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 18/26] whpx: arm64: clamp down IPA size Date: Fri, 16 Jan 2026 14:52:27 +0100 Message-ID: <20260116135235.38092-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 3zWpFLmXfKqTN38TtplaqEao0VSzW8rW X-Authority-Info: v=2.4 cv=VLvQXtPX c=1 sm=1 tr=0 ts=696a42d6 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=wAo57kR77d7e8uaIccUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 3zWpFLmXfKqTN38TtplaqEao0VSzW8rW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXzzV7OooGC/H+ L45oyweJ4J/SJknmj1FXV+Nadwwj9wZ49ISejbcXEY70Yn9tDliupn7Ji1yNTmJ1eKDOldeRSSt wEKH2Cl0tJePI/j80KgL+byxt5Pl16ZBUQiTk693cKxT+Iwz2gtfpyNkv8/f9WtXD0cRX9VIzMp D5xQ/b0w6xbQTb2NjaM7XKwFuGhKosxL70s9PfUTpSv6tKPq/Uwmi3GVkPqpseXqgFA81JHCR+Z 50pltPdpWxWTTwn2wJKmRumFyAgRUZp4T0FCi/90kF8Vu7qRaMjgEPcojGn+DlTtdDTzU7GIHgY IF8kr+zh3a8Iik+cc8N 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-16_05,2026-01-15_02,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-2601160097 X-JNJ: AAAAAAABvYT4m8HDkFagB56qAMVQh5W57dus12/TlRzk1Gmk91P+FPVjWeNJ/us4GFTD5LxXz3LPcAWTGeLu3rC6EgZ6+9lw2r50iRiL4iWww4iGDWb/RKHkBxlAgR9gID8gFQ1Dfs4LEx041DIdCyF3Ni5nf8JY6gTl28iCMjapWDhsm2S3uiYxMLk9rZ8CZrABt8+7oAGt8SfKelAzzLKRwaFp6SzGISAXoS5xkRTWrR2ARIMQn73culZPYfy0hKTf1n7l/evRF3fcPLC4SeNWQwZwzj/eDfZhNi5TpzsTnnm/KHRk/Uq9ep9g3nCKldOiynYUAWY1j6dqqLQ7MhA9yi/Ka4Dk9Smpg5LteIwlSpXEuP/4a54o1vfovwJcv0zFHZBPHfbUt1brB3Gm9bi6bWKw2dbJjlNxP8mFNpxXYuOH89PZx3OnDUUKyC9gHomS9Dnf+4xaSyP7GKNnXgbqhGEf1v3qnrLBzdFPmyQM+N8Q/drIEC0ydOkDTtU4aPbaGwWzGIhR3BG0NRLeVlf7ahWey4/xOf8vhGe0C95Eyrx524IOcyP7FaELVxL/lImgG3qbSIqef3LobXF1zRowWuEUtUFj3m4VM85fLym6QoB1uFJGjhjPweiw75c0xxEJw3iiGf8HMepArGL1uNFAU3qPQeKfFTve/P+8DiUY9VVZ76HHWeBXwMpcW1CdSVZM4RcWMA5/xJanjWSANOprMQy8d4jfQU108BQrtDLhNmArvt9zhWx7Q0F8b71aZ5NRCdSA1tgfCiodkztkyLQ4LeFBP9DJT15Y+Q== 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.89.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571864145158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 f43279ec18..7038315232 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" @@ -3330,6 +3331,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); @@ -3429,6 +3460,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 a17cc93ce9..d3d8fda8fa 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; @@ -706,6 +741,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 @@ -722,6 +758,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 */ @@ -732,6 +770,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 07:31:24 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=1768571829; cv=none; d=zohomail.com; s=zohoarc; b=V/NAQb7zIzRx5NgO24VOuAFys6nHXUw6CerK3ZdLo7/EmFoQRdv5kmPVyGzlG1J+30pvqCM7oVBq2lVTsfKHOIOMJnW9Gof5uNFE53TnUb/T2uZFPud26U+R8Pm3X/uoT2RG3DridTJ61rIvuCgb9MCn6vF5Kxmn/5ItOvTAbpg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571829; 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=DOoWF5uDYa5hRsMCvHVD4K4k+uFmuB5JMSr2YkzrX1c=; b=XLmBWmWh9uVKdWnOcP0lw8TtsLFnEK9QHkrI4lTLMb9eD6HqpjnG/oqbRJ1bsZqj0yrQty9zaAW3wQ/ruayYSPMzc0tWrMK591j2pAVTIT+NzuZcbacK3rz9t4Kal4t2mDko2ATr6hQhrXNLIsM/UkhOFcG5AmM0Z/TkXohGST4= 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 1768571829746174.16060662598545; Fri, 16 Jan 2026 05:57:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHM-0004yk-NM; Fri, 16 Jan 2026 08:54:20 -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 1vgkGd-0003TS-OV for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:40 -0500 Received: from ci-2004b-snip4-3.eps.apple.com ([57.103.89.16] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGb-0002Hv-7Q for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:35 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 09EBA180F91E; Fri, 16 Jan 2026 13:53:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 296D4180F902; Fri, 16 Jan 2026 13:53:24 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=DOoWF5uDYa5hRsMCvHVD4K4k+uFmuB5JMSr2YkzrX1c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=MzVdFH9xiPnSMrK0GVrRIZlwNW9ZmmMIf+ytKvWIzO5hb5nRmppEcIqXk6VFt7xWC/uaIesPZSgPanOCvk+OWqJ3/4jLbesw2bX6KP5mAJuYbB6P8AIt3qBvsdgPDBbjZwBdJMGwnFk7kmCeJUTjmX3Bx5UllC6hX02FbJMF6LMPYJEoF55H4yEUaz4MYm2p9b63wjppFe0WCX4osvnadPTTbA6tdm4ITimeEhGz6wsbSmcOE/RWiacpHunc8HW/hmNUkdoc09adIPxCgphNb/OVfdxzIDIfNwB2ZM4xA++DL1gI/LjlqI3Cgnlna2krKxcz9WSNDsYS+nB4UCJS0Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 19/26] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Date: Fri, 16 Jan 2026 14:52:28 +0100 Message-ID: <20260116135235.38092-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXxDvXXrdUUrX1 IQk8Us855CQrsD3H116uHVPkYdCK1eWL3Ki8wDBPvX7WXvsZb9My9OGyodmGUiJjKI3fBpuZT46 1IGpWI/Kc+tEKTQPTV9DB+txaT3eTCtVBKO3Px7Fkhp96aKHwTjX7GF38DSTdDau4MnBRdVk6Df LsD50+vMkDeZhLfaIZsOwbl4ea1H5VqIkalkQLOTP/N6Fj9yKNAaaAS4D07n2AlDM+gq4PAFguF gSxa0zUV2dPjC9hyjOTJrMJD6x788T6aocUPgoZ7KuyXnOEvBhn4rTQBTtFex3ml50zs6tn6dPJ 7t4Z/Cn9ttfraA3RZ3W X-Authority-Info: v=2.4 cv=T8+BjvKQ c=1 sm=1 tr=0 ts=696a42d8 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2RVAx2gzJTwwV__86OcA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: wYkL1JtZlkFMuHbmi2512dxAoGXxMoVp X-Proofpoint-GUID: wYkL1JtZlkFMuHbmi2512dxAoGXxMoVp 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 clxscore=1030 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABvjuHG49HNYnPL+d/b9jhA3kHsos5L9GPyfZ6dxAAf00hpUiD4Yq7JtdrUx3mHhclU3o5nq6ooTKnc9LSJcDoA5b1Thk0EDnCToJdnHOj2lN6xJ6XR+STciRbhLJZgKoT56HHjqpEr3V7RjeuxrGisCteFIm1/JfvfU9Q3a5UQ6BGlCuSEc2RvjdVAmH2DWRZuwBzrSCWmh0eXh//rMnlaW2d+S+616k1S7nVYAUV5GggBeuCI0qFfNIsWb3FqlsFo035M2QLjSkFARZpnDlir6xA1NqTx4IZhHWjO+Q6TU1fba+bLVlwCg6+jWtVQ3x4XGsGtu3Ujucou8BcQgtifJi666qT8wdu632KXbAgnwbH16IhpnH4ObDX0PVtCnn8d0o8DuIvXNvxedwJX5cIjDEbU9G+zSqaM+oMsjyN97ayU3PbVBXAvwDYK4xoYXow/ux8T/SdqFhUC7AemC592ogfjvVUsO3cxNGwz01JTcNvHeLRkymgnhbmGPnlBvci71iCFe3xbuPQairq+9+2fsZuk6J+shsLrr7da0oN/AmeRlfBrClYm1TCWVJHHfgk8/u11LootXv79bR6hjqlCuBRrsqAA42fRk/sToYzM8Mb/m5/AMBAlvve/9CaEeK+aNdx4sqIdfzIYO5DaaPjygyvgRsaZ9IHYyLHCPv0E1SI1eeXig48lNM249adpPeOyh3muyqHZYc0MV8ekMlQPeVDHERjOFBkiZ0TEfA/az+ei3fyigHgIyXI9yFEUwuxxvtHdDeD7+PerVuNJof2wFnORRUUmnEDGklQYQuYk4Ad4V9GpEgvL3xESEUwGHt17HHb 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.89.16; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571832032158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Bernhard Beschow --- accel/hvf/hvf-all.c | 7 +++++-- hw/arm/virt.c | 43 +++++--------------------------------- include/hw/core/boards.h | 4 ++-- include/system/hvf_int.h | 4 ++++ 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, 33 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 0fbe27dfa2..033c677b6f 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -18,6 +18,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; @@ -186,8 +187,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 7038315232..cac0ee3975 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3331,43 +3331,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 @@ -3376,8 +3344,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; @@ -3459,8 +3427,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 96790b4938..2621164cb2 100644 --- a/include/system/hvf_int.h +++ b/include/system/hvf_int.h @@ -57,6 +57,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); void hvf_kick_vcpu_thread(CPUState *cpu); =20 /* Must be called by the owning thread */ @@ -107,5 +109,7 @@ int hvf_update_guest_debug(CPUState *cpu); bool hvf_arch_supports_guest_debug(void); =20 bool hvf_arch_cpu_realize(CPUState *cpu, Error **errp); +uint32_t hvf_arch_get_default_ipa_bit_size(void); +uint32_t hvf_arch_get_max_ipa_bit_size(void); =20 #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 e4c0d936f1..74b6f5e7db 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -729,7 +729,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. */ @@ -825,7 +825,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); @@ -834,7 +834,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 d3d8fda8fa..bd88e9b57e 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -770,8 +770,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 7cfaee389e..ce54020f00 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -228,6 +228,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 07:31:24 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=1768572027; cv=none; d=zohomail.com; s=zohoarc; b=lKOxoucLjCzu9kTsDeTt3aXtkZ3MC7Zjs5UDJ2/T8fZAl4yTZy+p3FR4aIgK3ooUQZ2H+1LJd4LRPanfF16kLsWJkmgKOK+ohw5sphpcgf4/k/bqTsYsDhoPVPWBdFC3k1zWHzs9iuECJuNAZGjGi0njd57q2+13kNieAFoAy5Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768572027; 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=HoyZLQTD9CWAvpmTbVwar6BKDtZmlfBCL6vzGLuGvVk=; b=OLzsj0eoAYiTdio5UL0A9myBLcuaS7UNW9iNfxSstL2Zep2WoSoUaKAMa3qQOQiin/KRt6ckZdlw08eJssEEpcm9IDtJ+aLpKquDEig6T3YdVcoNZXfNfDIsaRLOOtwMJ/pDYi+UhYK7T49qDYz45ehWAb5gU/xKrHaZhmi0Ji4= 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 1768572027611402.3955556018701; Fri, 16 Jan 2026 06:00:27 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHa-0005LU-A7; Fri, 16 Jan 2026 08:54:34 -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 1vgkGh-0003Vu-0e for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:41 -0500 Received: from ci-2004c-snip4-11.eps.apple.com ([57.103.89.33] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGc-0002JK-EV for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:36 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 748FF180F92B; Fri, 16 Jan 2026 13:53:29 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 8249C1800212; Fri, 16 Jan 2026 13:53:26 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=HoyZLQTD9CWAvpmTbVwar6BKDtZmlfBCL6vzGLuGvVk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AO4JmXc4UytUmjTcHUCF5oswy8hwODB0Bxg/C/cFIrp0U0QHeWSM3nY9JmhA7cXxCbwCLGeGTM3vNK4SC9t7AxtdzFaIe6mdRhRpQ00KLZ0g9EUYAOpE8m4uOIoXj84tVWMM++NsB1vYZEByZxrruYDDueTycBLiflZRrUn4rJ5xYGx8Q5WXtS9HOCH1kM05MwX4eEjClsoRdvRDpG0XcJAC/tJnKeCm07Xp04Nj/iKj3J1cSIRXy4Tca/oDe+e2DQMck4Tuw5SYYd5/uH800kD1XiC3LDs09OU14lJfKIqZtnOkIkE5ZdMTEEdcGTvoJrzeQ8eI/3xxRCOdJGeN0w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 20/26] whpx: arm64: implement -cpu host Date: Fri, 16 Jan 2026 14:52:29 +0100 Message-ID: <20260116135235.38092-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: FTGNxnyGqBZfEghlXtkcfdMFdU9lCmOW X-Authority-Info: v=2.4 cv=VLvQXtPX c=1 sm=1 tr=0 ts=696a42db cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 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: FTGNxnyGqBZfEghlXtkcfdMFdU9lCmOW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX0F6l2Gq+Qn/A l1psG774rc2PFOxnZ0tCxVxJqUWYGhj4blu1KBAmxW0aczICxlTJJlzS5IYi41rZ0mxIz0y3B2o GK78KbIjUcBf6G9xYG4vnaTbQASGyYJsS0wXpyVXmrj6GvRIEvWEkSwddh5b6sxpgNPY0hmJLRf kxQR5IG9Qfsnb/zTlBFKGkkWPbx+4lGHzL11M12HzLjaR+/7cFFSmsjSJlFHsLNRQWrZzVoP7sD xm7dr+e6ogAmeTy+nARtudPuh3GahyPaT0F5lgZ0K8ZZgumRi+fZ6sj7Zb6iN7RN23tbzrLGWaj lQvGjNCrgkAOUB/ziPc 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-16_05,2026-01-15_02,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-2601160097 X-JNJ: AAAAAAABGUmUgyVtRqSWQ/rpT892XqFpz6/lgmYzcYWCpfRTs5ou4+7iZ0huMpCiNK6GVG6MIiGhUhEUjEgrgd1grzCkWcCSeViSELr5U1Ap1OuGmbfbZQdSXt26Fnfr/pUxwUq6Q+ZpNRFTN/KpNWiVvbrBfrVE83yNaaj8d5ADVRupNqOlTWP2aRJ/yVbp3dbOIbNNQcrU1QIbmJmuDIKbenkr/iZj4s3rbINbV47LEndmqRoIrr0jT2Uf5W8TIb2huPN98eVzC9T3sJ/f/gNzSHw5ZUvLwyOlyibeeGEk0Dpy0q8nxo+ZXKPVMrj9RW7ypYgy2IIum6p8h0hxjQjpeh5ihG0AzCToxMENjiDtuMMiqGk5mPMEWBsKDp9EirwHT0O5EeNrwoDdbkX8lCWMiVysVytr6xipufaYYL0dX0l8fdVbR9T4ZZjD4kDD1YyHpI1shC014OFY7QmrwHyYC9lTtzErcw3HY/Wsp0YvvOC0K9CVCGOL4Gpm6WuLZXnVjaQNNZZh8ZH7dU5OE6cbl6lnjos8p6vTuZx2mJgA+lzMtgpJggTgUHDqFZEBeztcy5bqpOsR6nr5aADcS+AQh4h6oS4+rMGL3MEKBLkMlh67x4vc8ip5fjH4tVOjLgaFRJQJxa9G2WTMXTViq95ol9RybLulNFHqKwsWZkjPxkg3Z6+OV7oBx00ODuPLjphsQ+gkkWz7evTlas4WWKSVJIkykDQfEJelc874e8ykFRcOGcYDfuN4r6p5P04S79tcToOEVyLdBAnVHPyIjaBD8RIHQ3EbYzkMgCym+P+4uzoyYOMKZ8bF/wwctKvj+e07iA== 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.89.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768572029039158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 bd88e9b57e..78ec109589 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 typedef struct WHPXRegMatch { 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 07:31:24 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=1768571660; cv=none; d=zohomail.com; s=zohoarc; b=FhYFlAbOHkZTGHHHp+9OgfnrygzzeOc6Zdvo531rOG5TswdQaQSgdHVcqvTg+CfnolLzkEjT7bhNSPSfJ8asHIJy+dxsJZUnY03SEwXokvf9QUDIaBxXu1aSuAnUouiQng1Nn8uGJmL5Beim/qdvk/vr6jObvUxWMAMsxgzwJcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571660; 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=4VCTN0/YnZF1hrPtx7tmA3Evz6xoJllzV/zRgIOe0mw=; b=ESmwE47SyTnlhLpPJE37Ws3bG65AwlxJMaKysIaHXuKtCKLVnwLNOIRd0tlCQGsuwUgry1UDeKfkMa/p7cGQbomqc4R83N8ukXxs2iPy2ULdyQlL7WYf2GDdK75T6D7UvWkuPwPARON+ydRPrfz80M5i2pN4RiP2xdnzpQflbhM= 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 1768571660447914.0853735910451; Fri, 16 Jan 2026 05:54:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHJ-0004h7-Id; Fri, 16 Jan 2026 08:54: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 1vgkGl-0003d7-1U for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:43 -0500 Received: from ci-2004j-snip4-1.eps.apple.com ([57.103.89.94] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGd-0002K2-IO for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:39 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id BD79918000A4; Fri, 16 Jan 2026 13:53:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id ECAB8180F909; Fri, 16 Jan 2026 13:53:28 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=4VCTN0/YnZF1hrPtx7tmA3Evz6xoJllzV/zRgIOe0mw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CmQBvKXf9ycDHxoSnfg7AnGfUAdsEI4lk/KiaG+8W7dIp6qqmDWKn9qIf/Aa9kjeKXsWD3dyhKBBDDtS7p96beJubbSAVcrI6zJ5opCxHQyU+8ya20k9fvF9zy7ojm3no0nEAndc4K+40A2q+amO/TYi50wYgYqQ5T0JkYzRPmRFQWaqvXBdZqx24vn5PaS7ZpilRG9K2gZJrkZqPV8MSrL8XzU7/AI3JA29/quF3d1+DGwQUH1dO5zpd9kFTbz3rNd5hJDgigqY0MnWjjXrhlGW/vl8HUzvZY4+pLWU6aALo9/QIKxm9CpGBWvOv4Ktd+SEuTnCzy66k9qmLpa3Eg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 21/26] target/arm: whpx: instantiate GIC early Date: Fri, 16 Jan 2026 14:52:30 +0100 Message-ID: <20260116135235.38092-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXxJF5FRx/yw03 TmRd1LniPWZUekvv6BCfdEZOA8FACbCw6GHcS6OG5DJCHImneBfg0ssyrTP7v7autWy1Omc2FUS FwK939g/2lqkfa9P1nu42RKdRpQGDCJZ85bYdF8Pem0ykTgdMWZdPWpw2wBbzyUVy0bI8z7VR5H Rzfycjb8Wp18jFgxbLjNmq6UOAVRqOeLmCr78IXaEcDQwdOXoFu4eOEuMI6RBkhiFSOhkdvY8d7 kfeZ0Kyd5SfJI8b8UiI+ePG4EwEaHEUcKWBKxEvbU/u1tXvF7n+7yTk4iPAyx8k9yza/sST6Y9h 1I3t/rR7amJxN1CQFOo X-Proofpoint-ORIG-GUID: CJYHErZ9CJaEkwJcOwPzVZMYfy9455Wc X-Authority-Info: v=2.4 cv=ZOTaWH7b c=1 sm=1 tr=0 ts=696a42dd cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=EYz79TNVRTG0waESW9UA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: CJYHErZ9CJaEkwJcOwPzVZMYfy9455Wc 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=640 clxscore=1030 adultscore=0 spamscore=0 malwarescore=0 phishscore=0 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABoeu5OZ4N5/JXv44v/IzlNcrhhG9edLXkaLHio0eN6qz8nyXCeRwNMGX43LmxAzjpeMxAbv7Qele3zGUETw8z96C0Zr6qyAVVNGD5A2jMvZzW2B3ZkAu/IGdNlAst8NVEGpv6z3VmgdHUx3Lgvb+Tsx7xmeiKviB+hC1yaUeMwphjsScUqAe6ierThUCvV1UVXZP15RImhiXhx5xrYgmZwwakqd0pLEP1CYHIdF2NJlWv8M94e/I+vXrFSwCi2fqcbQyBc1CqgfKZdyq8CgoFpJz9l2eLJx68NuHE3gD+eAZYlosqPUFGpSzZxxscT3bYbIpm/kzRN/9eE4Hpyk05ulAMcwrmbfdVkrN2qbQ4F+6W5Ow8jTe0Gv7iRK+vlaqdnp3Skyc/K0Oq8oL74kJBeb7TYGboxyM2Op13tPrpxTSh7GGhYX/AUBQ7j00LtUXw5RCmzmKbwxk4ZRRKJgtn0B0pi8pLbne+Uoob2xQzmF6TUL6PyNdv3C3PUrIUyfuU0MSHUhAr/fZydUOS/FziAuXurVrS6UYPQ+6ZvEnGWEjEEwTQsTH3qofObedICR0cUSXae8etg5NltPt9p8T0t0DT5xdtAGBHDypzg/HFxya1mPWWYfJD7X6VScsaSO+2yOnzOMS4HGjIY7SNruC2zewCj1RpfM75upycAtKRiIEBtAkQOEDBlNAOo/np6pblUdV0dYIQ5tWJFGQBHUUx5MnjY+4hFbUD+UxmtP7f1MiolgphVlEGWqhTwo6oT1Z6O6Y09RVouK7bN6vfa1Mt1nrHERtlc+O2KPc= 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.89.94; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571661407158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 78ec109589..3329deeb57 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -940,6 +940,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 07:31:24 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=1768572030; cv=none; d=zohomail.com; s=zohoarc; b=i+I8uZvYKgMQBe0cdyZLHmBnVIe68runk5naBUmU9vjdentPvBBsAKIs+UvZXdjZOWFaXM50vL5HK0N2IvVgTlzEvSk1IXkLaKsmAPzwYa6hY4zOCGVKj2hgUiZ/vRO5hrh0K6oCpo3C7N1EL/QgfQU0N37PxqfWqB078ivZmjQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768572030; 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=LSoZk/Ieo2Gxgsu0UDLYcCkL+4HMxr52m2AtfldXZ94=; b=J6qVPrWQv9WVJXjcAPMeyoi6thTT6h0TJhx1N9LpDMtwJHty5EvzjZoVe4n0HtXapyisSCLYb1MOgTkDkOhorc0oXS/97JgRPIt8BGLmhL301cKRr78V56ux5QaoXQ1k/cUPSf9uW2e/ChD7POsJSjU4+Hz8xHzgDGwDYQgtUkc= 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 1768572030152761.1272025338939; Fri, 16 Jan 2026 06:00:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHK-0004mG-9V; Fri, 16 Jan 2026 08:54:18 -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 1vgkGl-0003eE-98 for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:44 -0500 Received: from ci-2004g-snip4-11.eps.apple.com ([57.103.89.73] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGg-0002KY-Rh for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:40 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 002A0180F921; Fri, 16 Jan 2026 13:53:33 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 3F891180013D; Fri, 16 Jan 2026 13:53:31 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=LSoZk/Ieo2Gxgsu0UDLYcCkL+4HMxr52m2AtfldXZ94=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ERQpXBTa4qlWh9tr93DvyW/UG2oG6zfZpI0srdjMZOHRWCx75P86RM9yJjSamuH6oTooYkAcIiny9FcpF0mal6SlvUvvBpoQm9zjbyrbwNM84n4paZRYOeLyXjTdpaGPnSWuoIfv83OBleTvn7OwE6kU5PUHGvlgKdZVbkppIaP9LnRhh0PZYq5oQB09sJj1W74nvJ+sLEpCSeQWweRv+t7P1P2ZVlZOFdXbO+rH61NlPspxDrZzKKOPLHYL9YkA7//gsJFLms1tmEC+5/u5xpI3X4fc6YuIAaeNdThDFyBnkLS/FE4uwcyhZ0iV66s55mmXt9hC6boQPcTAkCKzXA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 22/26] whpx: arm64: gicv3: add migration blocker Date: Fri, 16 Jan 2026 14:52:31 +0100 Message-ID: <20260116135235.38092-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=GagaXAXL c=1 sm=1 tr=0 ts=696a42df cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ZsnAEJ0dk2gu5naU1fIA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX6lEBAfRoVAKj 5/qhfkdDbpKPwBqHjluekf5abDh9wfkUSQzQ6nxiX8Zfam/lSmBdKWhfEX8jVxSmEA3p3k95bZw 9sVaNtTp/tnzx+4/EVtXzN1dm9lgySgLCXl3rT1y8H9Hm9mHGZUcqPsk813ZXALpLGNHYMVY5Eg aL6VsZtSLuIiI/yD3ziIAPrk7vcKra5M1KXzAnoEVmgJSCSPtC+kMyOWrMrgRbD1KSeHg0WwANs 3UVrHLd33bEWLDA/hINgW12aahtr8lCR7W8WMhc3Bnys/FaswF1GQhV/wvgZ4MUf4zqzu8FVgy7 dBrwF0JpoG5i6mxjnvO X-Proofpoint-GUID: cONzmBsdmXB6x_awU1_jYf1cxTYO_7Hl X-Proofpoint-ORIG-GUID: cONzmBsdmXB6x_awU1_jYf1cxTYO_7Hl 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 bulkscore=0 phishscore=0 mlxscore=0 malwarescore=0 mlxlogscore=905 spamscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAAByB9o6ovYiMuK/hrP29ukyawtNipBTrvICjxplc545SyW3WQ8uQXzKlli51tVQpiRKactwl1B31yXJnFjLE+WdVhG676XZKqsQ5TikOI9NHLdLUNbRgkQ6G/4Ce8V1ZZUP04K30UgS2BQjGPhHeEWOgamojgdt9/YFzGYB5AYcbfy+CTYr2JmGAwtYDXAVMjReK1DXWXzkOXD4S6wKJBXN2G7c3KUr3B3gj+AkCwliKD8Sh9+HikfdmSOFsM3BzMgGM9Z6Z7CKhjKAOoE5ocjqgdUIGVXs6Np+8nVPkTRURjYCLWPT58/qLOTQ2iNsHbEwxpDQexLoz0WQtrPqJltFsFJMESpYIHCAsXtRmD/ogrOCMO/2MGScVs3RHtak/H1vIDaj3iL9DF2U1itFLOBaTHCWTxeJ+I4bLC+rraZYWQGrd+dUd/FEY+7A4xY/L47AidI5M9/GtomXe7aJ2s7Jvxz9AL06Mn6B4bzOdOLbJ1NmbhtrlSkZqU076N6DTOWits5fPBzHBzOJMYFeSCvJMLo87WQ67slz/U0AAC+Gp0q8chP/Xgks8UbT+R8g/Cfx40haoEjNyNByiV7VXrBgs6ZWqudNlZI7a8RfkONsatwnKd6tV70OuaF3BijtzTuR/Xbw3VsIXieldn+GVFUqE1Geu82X0sYfqFnVHIenqx1DouCsa861QAQroyoZl582bvfbC/v1uG/v15aZZDxgm3yvmLM5xTP3AdLrzZvU45OeUL6jTWPRjFahWgVx3EPcD7EjCoGBzRRqMkrmElSwRuQ2D/7Caz/6ZIJx9HdXQe60vk0RlpJD+/XAWSg 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.89.73; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768572030998158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 9bc036d1ac..84ef16d9b7 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 @@ -204,6 +205,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 07:31:24 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=1768571989; cv=none; d=zohomail.com; s=zohoarc; b=kqS0gqN2pXVQecuKgmOY8FB2CR61k29TkUQfE41oUpAmqfN/pd/GOe0lKi0WdVNZyK3/qRwzxMlFjbz9+huatSm3nLta45+qzFidKSRxIQMsrl3vg73MGoQ34CVydW2SU+Fk/vXsS9EFMNSP+ZOwLWURoquAIPG9gnuvXwOCpXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571989; 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=mHpwCSJe5qNtqv1FPZQ+j6j3+DfNnaO+7ccebHARuys=; b=FumUF8WFudZ90t9QtfV/kBi5QcKLtbNWbrsFHIogWDlHkQEzCspd8SLzoYK+Ql/cBFpZp2hx6BInMgGXVn53PZlirfpqbvZsTS+4lYekGyUjIXi+E5UbnwJXl9km7blGcNjWIQ3h2P+zgNETFDI+A0CKT27QAq1cpwl4cV/cEjY= 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 1768571989286861.5823930719127; Fri, 16 Jan 2026 05:59:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHK-0004mB-92; Fri, 16 Jan 2026 08:54:18 -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 1vgkGm-0003gN-Sr for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:48 -0500 Received: from ci-2004f-snip4-2.eps.apple.com ([57.103.89.55] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGk-0002Kz-PY for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:44 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id B2B75180F923; Fri, 16 Jan 2026 13:53:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 71BDF180F91B; Fri, 16 Jan 2026 13:53:33 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=mHpwCSJe5qNtqv1FPZQ+j6j3+DfNnaO+7ccebHARuys=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DIGlId4Oipm2VfhMRQiCwSP6BcOF2ZbdhDXHdqY3fwlWI6cJY1NdHEBq2CpJdu5twSRMceJhWjWD0Jk+w5U0/qjd8HGDSUSw4HMVllYxs9oQMD8irhyZKfNHmBYvJZY0rFwZpoNts5kZ+BFupobZQJ5AHxIsdgW8/3d5KUxfn9V1TYAYlI5gpt6tgm2gAvPK65ThVCXxDgYRM13E4BXhIeQZ5PlU3zCTsAf72CsFq2f9rTXWWDPPabyda92iK/65dOVy8orAgRPDm3eVymPp4o/uVAhH3Qtg80yFcqgeV6kINbVsJeZBuI2/s66o7KjrDUUML2B3kpVOYNpiO7LxZA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 23/26] whpx: enable arm64 builds Date: Fri, 16 Jan 2026 14:52:32 +0100 Message-ID: <20260116135235.38092-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: digriShW2JPS8kWQxuiS3YOOC9mdhVSV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXzHYhcLX1Bdgi uOlJTJZxA8swHq5UKloNGGDPvy4ohbkFNTyEqaJw2KCDBsEv0CNG/CdyUml8pS0oUUYf3Ulu3q0 +VJ9xkC2XJYKr5/W/SUW47bbHyOA06ezzBvMeuZDgJ/Y5FB27PFK024Gqu1/PQ6tOBG6aLBsQdw x1DWcRf/ayl7NXFQKYZgMt3k0V9uUOkZ/Eg84WOfls9LnUxqG8K6zQCnpTTAW+qw4qoMopC6Oah U5h9737/mMF8dWxu5bXNsWhiXAIyDWj0nA+c2hUXAIbnEUhbCLlwAXxu9QAWs5kM5au7oxqFhL8 kdcq3YuLkEQqZTKXscU X-Proofpoint-GUID: digriShW2JPS8kWQxuiS3YOOC9mdhVSV X-Authority-Info: v=2.4 cv=H4TWAuYi c=1 sm=1 tr=0 ts=696a42e1 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 mlxlogscore=758 spamscore=0 malwarescore=0 phishscore=0 adultscore=0 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAAB0KwwxMzk+9youiqu9S57aY3Gg9yJ2GUmAbrg0JZ3F9dZ2ZRISHgd7kXafZNcT58fCKGSlYeRkjC0G47E+2thfJ+OL46Bhtl8acF43xEXXQvSMUUkNvcbJlNA6T4AJJwMKghude80CNcf4bZtCXEABdq+V+Va2gAAFZrES5rHFg4h47UHjCMrDkdGlUz12u7ufI6nPkdmFYgd3XbUPPNe8UXxhhTT0nb3woFhTdzD3XkYqwCW+3Uy2lNuGPdkut4hUBGWVHukOvnKQ0iugM67QrF+5WvPQNhfzOPBBbXLGqkyhP8f7nKGAo2SDbej1A956r3FMHgxVD7VjY/lKlFp1Vyg00Bw5opZWs3yO+pdFVlVXUoupwy1JmLUOo0mfi04b8FN99ZVZKBeY75zTCpzGV/SwD7tSLCDm5dLkbuHvjeY0b4/lU2m8GzF3aKgjd0Oc+nLbWi4p6wDA0vSnZi/eb9lc9U/nffYdEVImamI730cYhr9AzykbV25gHNOoF3U+R6tKMPH4Zj81I3KuMTkg6is+R5ZtUIdIo27ZTRUnYllnipTxQkRaGTXzjDpQrNGCPXb1tdIRY80xq2h3cyT2FnRgwzAwvdmaoUTog96uQH7YVTbXzxx+4WRDF1HexqyLOHr34+ih/J5fawdYUtFbvGlkUdGwOhP8sc7aMuDOdikfE1fmnpfnzvHykVjaHTINVJ5mJj3WqOj0O0sbs1cv1V1xwLbE25LTzlZcIpopBRhM7IuaoUcABr+raZKy/frcduju3iRtGly4GZaM/WqYA== 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.89.55; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571991026158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- meson.build | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index 600c50007d..99fbf3ab8a 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 07:31:24 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=1768571893; cv=none; d=zohomail.com; s=zohoarc; b=U0IA/7/sVyNEGIsi2P6/QxVstwUlmNr4OeEXcZ2ERtoZVmB1keZnyXal7Qz5WX/W2axT/TBHyYAUlty9QOXCJFdujHRF83DZpXYfibFSthIW8nGlD0R7cvYbWUJcaRypJgdu6T0HY4lpfMxbHQs9bKjdpjf/ihJ+i9os7iKsfRw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571893; 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=kWlYH2zxPGMFUp9zi5zlCqc8M33cVVw5F5YOcb3QJnY=; b=m9WxBnD4marrcvk5MHyfHp7oyXWvu6j4QhrYP7107cAbvzjiWkVJLsw5WfvGkrfjIuMX4PXduN3KaZ1H9ygQLd7FWwSoEGI/ZC0KGzFTn9xE29wzJ9mcriHBv4/Ft3mE72vuB3QTZ+mCdMPS7bPTP4Nng9AVDHWNSHiohnF75x4= 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 176857189315821.253964078781564; Fri, 16 Jan 2026 05:58:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHb-0005bO-Pu; Fri, 16 Jan 2026 08:54:35 -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 1vgkGm-0003gO-Sm for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:48 -0500 Received: from ci-2004g-snip4-6.eps.apple.com ([57.103.89.69] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGl-0002LS-3y for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:44 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id C90C318007C5; Fri, 16 Jan 2026 13:53:38 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 4E380180F92C; Fri, 16 Jan 2026 13:53:36 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=kWlYH2zxPGMFUp9zi5zlCqc8M33cVVw5F5YOcb3QJnY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=MRaiBl296iIWzdAAMSZiVfVNutwmghfbIp1ZSVfz/Etc0dxrTo1cKOpJkStmkxm6EVrOn+dov5CGJbDMTdkD2SxIoWtx5l5AwKjUMI8KZXlNqDW9Yuwrd/MCMZh16nDRsIzab/nEpTl3n0upVB/7sz0DPE1q87lNtoH76F9x+396yxgblZ0qfD1Z+aHPcQXuyYSnYpuLrj/wW6rlROP4ZwDFeAYYDhbrijhv7jsxFVJzFZcdLWiHySmuOPIEpdoIeLiAIMDKfFAoQ59ANpzJkI516jiHkmblyYtwNCcDsRbL7NYjn0Ko5QNQcasf+3PRlglgbUw+GxWBK76L3qgmog== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 24/26] whpx: arm64: check for physical address width after WHPX availability Date: Fri, 16 Jan 2026 14:52:33 +0100 Message-ID: <20260116135235.38092-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfXyr03FM4AHRME V+mjXmIP+AgqoS6qGZ/vywgshRlQiFmu4krxr5Nb581FyZ++zVa4owlz2xGJ4KatDoOx3+o3TMw eNzQyjsB72RqgTHbdp5bTa3enFLUftd9+iQMHXXG0LWSiTS6vY8tDDqIRG8En13m1p6PrlRDpwr eqsukemPoGIfUB9kSBuMGsvu3Wd/fzElo4mOGodPd76wQ6PmZOEbuPM2xcTWWc4goalm3loNckx KdLXAWTsVjugRZPFgQnY2s/I5rt+TH8A5jYriskoEILwPSAwCx+MIq+MQmPmPMYTrdGBmNFgOTt o57QX2XuXFs7g4RSbTB X-Proofpoint-ORIG-GUID: 736C79dmu9fb4ACLLMZBvvW3V5QrUWLe X-Authority-Info: v=2.4 cv=ZOTaWH7b c=1 sm=1 tr=0 ts=696a42e4 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GePjjIfFpqe_pMnJkREA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 736C79dmu9fb4ACLLMZBvvW3V5QrUWLe 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=995 clxscore=1030 adultscore=0 spamscore=0 malwarescore=0 phishscore=0 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABxyTEDjisQRaQvm339nVTKUMbgt9mlZXl0QlsteAmOzJNjXWrNe4T4NvdKP/0RKojFUD2fakAN0e4bDFi8CFYvkjKQ+c5SfrPGvY010ZMkJa+CUUC+exRmNkNKWe4AFQs5Bt7K4WH8hfsEbLiQeP+/sVz7zO0OTCemytk2x7/GskIaDIbxTwyU+gmP8Ogk+yFdx3juIEIcugmFwxusx7wJEcsSmpWLCMi4/neE0jahGwcqFlNOfTFLAA/ZhgyyO2fa9CypkqIEL8f3rl9j+TjvY/AOZh308OPN4sdmH4BDqd0xFOEpT0zk0TCWm63F8A3HVxehNyJVl+Gm2ADuNkBHMhKRS0uGfbW8pGQfc2ZdFBynGp+0cVISLxRgN1i72X0hjmFdxMnx/rtj/pX4BWicCpc5tN6slKa4Fj95vri/Llg6pRBJxAk7Jhy92eghJpCk45+3mnk2697zZizW3H/6+d3Wpq95ad+/JTBFy77rHJW+SF0DtrB671cJ3Q8AXbnJm1RLGIMQnmqe9NoMP4mWITIOUBknn/9uJqLrXcyPAmY3CTA4AXywWvxcK5BpZr53AwRaV/XkjC50SGcEo71EYqlh3xmopwefXqgZi3kf5a4VZUVbird2fPNwEvTcbE90ZN7qONOTNZqgsN2BFq1rhDjtHfjoItb9ZCWMSbUy91b5AFLMgVaryWbHx5yX7QbwbemDU5uxrz9tLpzqcFSwpDq0z0OWMYA2PMTZd7y0jpsFIM1f9sf5HnEA87KGb0dJfl2B2nLT/uu0pBgFyPi+c/ZfcTsWrduGYMz+CnAz6etX6M2cSElVn//edBWiLyAR5YImA== 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.89.69; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571894324158500 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 Reviewed-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Bernhard Beschow --- 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 3329deeb57..79e9065d3a 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 @@ -874,15 +874,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( @@ -910,6 +901,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 07:31:24 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=1768571928; cv=none; d=zohomail.com; s=zohoarc; b=LXMIuNNcZDA3ATxLeuMdJo/DbpdhNNR9/JNhWq4RwG+dCwdjgfqn/Pkq/rsNljyNlFWZMzkCADzDZrFawDMYHS2OAO2j4eJX5XN2R0kkSQrntyZklSuJB1o2g6T6dSi3e5PkNIUE4Z4k+Pqw1/cDJQeQCOMTXXUXlMx6Y/7/S70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571928; 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=HVZ0nutBP3XUU2ghyFsHVCq59Pl0T83DQcCmyje5ufw=; b=KhG78ZkobZlNRBIw92kz3WUMw4y1yvgd5vcOxtY0WdDNnONEBtf7CKkAdds6gUhTNNlv4SNJSRDgasUmkfNzRY/LcZ74xCojKi3MBJNdAcwhP1NWPR1alp8XhDLrqMpJFUGllpjSQBFlMh64pdOzBTLJIM8PQlbx1jaJCi4sy64= 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 1768571928187353.9818209316535; Fri, 16 Jan 2026 05:58:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHd-0005uq-ND; Fri, 16 Jan 2026 08:54:37 -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 1vgkGq-0003lF-GP for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:54 -0500 Received: from ci-2004h-snip4-8.eps.apple.com ([57.103.89.81] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGm-0002M8-JC for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:45 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 0906718000A5; Fri, 16 Jan 2026 13:53:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id 797E8180013D; Fri, 16 Jan 2026 13:53:38 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=HVZ0nutBP3XUU2ghyFsHVCq59Pl0T83DQcCmyje5ufw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LiXmzf1C2u9wIhus3e2EA9ZBWG++Qmz/5sRzDiWZtZsL1d1Tta3vT5VLNf305fFfHUQTVX/zdYwdCScHBoDfgxWGWBLQohe3SyAWmNFquuW1Bp6aPW3XJIWBI+XOQfNcrzPJd6JhnXop0/hx7nnLwkanEja4LfctcxNGiJDMNckCKsYwpZpDTYzmlPTsmbQ8nerRYBuQrOFLnEYUwZ6re3TkRVwjLDjqrEMfUBV9gmE7zgMFw63JzYupxzX01d8CW+3mA4Cz4ayDV8Xo7I0nyljMjcXQdj6JEd+4pTnGRWx03kpkJRIGlkVhYGzrFscB5FBgb4FFIPUH7z/5Upz1tA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 25/26] whpx: arm64: add partition-wide reset on the reboot path Date: Fri, 16 Jan 2026 14:52:34 +0100 Message-ID: <20260116135235.38092-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=CcEFJbrl c=1 sm=1 tr=0 ts=696a42e6 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=h5GvOLqLgfJ3vAEETv4A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 9ZvnnfcX4Q06VY8nx76EWrQeAa9KIBak X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX5RY20OQqmk0T S0jn6Wn92GLQdPAJhOp2nC05ZNOGfIAPKS/Ooz/6yDSWLB4hdV3Iw2NEQZbEOgoO3zsUeONCAlo wa+z4LMm5cPrEersbRMrjUXgb/HG6ZKkmssztBPZSH19hH7toszmf2nOYWTHl5SuNpxBly3H9Ij 3+F/b8gPNQWPLDoYh5L3xCL+1NNJXZSMn15ViCLG1S+sMKe2hHK6rlIcNMMy3EWmA1KBXXqqIY3 modXYllwSare5k5nYTm+ejXWZLGwr7DJarwPH79eoIvG+3sUab0hlTUQr8BXyurCUtmeqtmKMOY nV7M0WJLLJMC/hGwokU X-Proofpoint-ORIG-GUID: 9ZvnnfcX4Q06VY8nx76EWrQeAa9KIBak 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1030 adultscore=0 mlxlogscore=842 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABOWKM0l64/ezOweRz5bcp0yiN9Gev4J1KoREaOHfDEz1AwMJlKhoPtUYKaatQReZpC9MoLbjsZA02i9LVnxTask6Ot1AISzxj8qacueYqYEOS/8vu/HurdekMmKtrEAMw7KbuDN/53db/65688eEQwRw7SvHEFqRbIAk+l4IICFuYTSaD2I9SfL2qeNHVh43WaqlR/BkuQ61/GWYHJZgCk4zqleQX2g/Sbrpj8fBmxKuU1NA+W83kWTmAYI0DGvmYnJ9tdXWhQyLzKNsReYkfVzmAnKFNCMMJvxE2StOm7Jz//aYPeCHQQ/LIqtwolufO/NMMKoIaM02U5C7yNwryOQT1xrriYizFSBxA9WNlxDq54ye2VedOux0He5S7flloiUFayLOOps9YaTWTIpi2i9zEt1LnO1PvfDOeVqclQMEU0LVYPYRheBIV6VO2v+h2+wa3oiecN5kSb4HuL2+n3p4CLj/47WtDmk+IkznS8e4NyzvxsLG0VAl5Y8Mqj8qROZgoxjryVudxrkXtayVNvQJYhNuPaFgBJYAyPUWFBosYRXj3/1xdkajfByRguDKExHJlF4UAidvcolXMvvxn+piXqdw6RXQ+t4PsVzs2DOJP6TrLeGD8q6WmdVUYAs4AEyUDppKkBR+BOni/y8VaEwHQ10nQzGN/9hjZ/rQ6WNexlVDxLPo2u+bYTRvik4+XP+R1m8rFlJVCft5y86L96KbG9xsA6aoc16fLOXAJRkXmWaNPHfRTCqMFYajLwLWE4vhqDtszAxSmSXwfyzDz+rkh4sGWVj5SAMcvBCkSUm4= 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.89.81; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571930227158500 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 Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- 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 79e9065d3a..7434735a4f 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 07:31:24 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=1768571908; cv=none; d=zohomail.com; s=zohoarc; b=HPnL5RH/aw6wwZkyxrOxhBM0S2ezVwElSjxVhghKW1E9Nl3zDotL0vv1Lz2NMv8XIQ4GUzWKPp/zy0lpIOd3i6FbFTZblHZxcvpzjQtD45zqnolgMEB69USxArAR/x/I9KPRbXjA8qcevMb4zXuTnmvuHKKsUxIXbqFoE2NGbJs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768571908; 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=WYkLiGieWVZ89cLWDDOX8F8k1/0JpGD5pIYxHLMKcmQ=; b=KEFkWq8Z2o0Fx+r3RPjyYL+BKzvjerZZKVUAv52aPQ2XHkeAZqKcgd1O09lw3Ekp4jb+Y4wZ0QmYEVVJyFGRex+OhxkTgM8zobQlQT59a1FP+igdnpZS2GiO9QZadl+0/HP1jGK0dmw0De/66zn2jIolpNcR7gamYA5hRDGIeFk= 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 1768571908401671.5470731208237; Fri, 16 Jan 2026 05:58:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vgkHb-0005ay-Od; Fri, 16 Jan 2026 08:54:35 -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 1vgkGr-0003lM-MU for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:54 -0500 Received: from ci-2004a-snip4-7.eps.apple.com ([57.103.89.10] helo=outbound.ci.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vgkGq-0002N9-7G for qemu-devel@nongnu.org; Fri, 16 Jan 2026 08:53:49 -0500 Received: from outbound.ci.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPS id 30A5018000A4; Fri, 16 Jan 2026 13:53:43 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.156.36]) by p00-icloudmta-asmtp-us-central-1k-60-percent-15 (Postfix) with ESMTPSA id A5C7D1800132; Fri, 16 Jan 2026 13:53:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=WYkLiGieWVZ89cLWDDOX8F8k1/0JpGD5pIYxHLMKcmQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ajPUFs39tKM0mdhD+roQQCcUkbtT6QSNrGNBwYQIV4bfCzuq6dBz+w5eaC3JElLow1VvITQwyoK9UFUKZNuA8v9OaqgLOdgG5+b7fwnpedvCnRmXXgIJPQmfHOG61o6kP1j2Ap9hlgYvK8HJswIk+RjnJZF+OdBg9c1Ms2WDZ9DxQ6gYjcJvoT5uYUqiUW6pTfTIavHqoH0X3QZU58J22obNWaUIvTycadspCMF81pEJJwAWW49HB7LU/19ChNym3C/IPeGhYnU+KaRUhAhB4UIn44zi8Gx1WGccB9YOMyH5/mfpTHWHYcE/PMIWQ57+TIgM7nilhqfubaNTwdumeA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Pedro Barbuda , Peter Maydell , Eduardo Habkost , Marcel Apfelbaum , Phil Dennis-Jordan , Akihiko Odaki , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Shannon Zhao , qemu-arm@nongnu.org, Richard Henderson , Pierrick Bouvier Subject: [PATCH v16 26/26] MAINTAINERS: update the list of maintained files for WHPX Date: Fri, 16 Jan 2026 14:52:35 +0100 Message-ID: <20260116135235.38092-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260116135235.38092-1-mohamed@unpredictable.fr> References: <20260116135235.38092-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE2MDA5NyBTYWx0ZWRfX4oE9eqJ8IxZ9 1GEIo3f2aGWc/3GBkRnJnXMtphhR1PoY85ep90ArBn1+q2IueYJs52QNEjiheEatRWRJJCkk+O2 4ea70LLXXDu9/tLWYl3w1RiYBMQc9OTvpsg9rQSFgYugsl4mtwvjwh9muQjU5a9iFllve7ghwzP HZG0XlnGtIij/fVAI215PK8WiJHc3bfJizRq3++wHGk5+Hh/16SxDIOBv0n8Q8iDuZbUFKD+s1z V0E7p5ugJpv6h1rkt6eswScxKBAxZd2KzG+4FBcWWSR/NU4TC/RBv4BItHD6eyg7ywJ0Puxem7w SdehCIr3HlpQf6WJDCw X-Authority-Info: v=2.4 cv=LtqfC3dc c=1 sm=1 tr=0 ts=696a42e8 cx=c_apl:c_apl_out:c_pps a=2G65uMN5HjSv0sBfM2Yj2w==:117 a=2G65uMN5HjSv0sBfM2Yj2w==:17 a=t-S863UTctjxRPX8:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=hdCJvu6vi-O6ykQZt0QA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 0ienPZMSI4yrwLN8PYhBJXYqjE2BOeM_ X-Proofpoint-GUID: 0ienPZMSI4yrwLN8PYhBJXYqjE2BOeM_ 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-16_05,2026-01-15_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 clxscore=1030 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 mlxlogscore=937 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601160097 X-JNJ: AAAAAAABaZrIDeS0qXl1cebtGU62cQOB+hhphCTUCf7GEkwUo4t+KnRYMRqmLKnZaMMc9rLeAUxcMjOufbNv4jXepOaJAJgxiua6qaeMWH+Bdj+n6qF1aecfvTvoUbX2rWPcRTDa2BH5ro3Yi97lj5aJprh1XPr+xd93QRg2Dy/Svp+vaCTJHm/0JA1Y2B4j2w47lrX8Ws5hjvn5wI26XMOH2RxSt7hCIDbXVfEvc0HWDtAVIQwOQuayaMmR271ZbRgZ/KwNjsy+AKiK4gE9pyH0MC2rMO53DdM2ips7TCVooO8DNrdE/9YQSfLClXrm6shzKp13gKiNT6tRt2AaVnAp8uTA3icaAeqynjU9pdXkbexb0UaiGpETFVSrDS19LEGg4noVbFzab+YBP/+ToVYpJ13vJlNQxzK1NobxinZWnVCis964r/fVXO2gg2XcTuTP8AkqW0bsiWP4ReWZjQZ9H1gsLwbf0FVGfJ2C3D2tKNE9vs3wQDTx+GjrxxNEGf8vHJDW37Rv125j9IQUR8OYgq1yZIP4wWj7ixoAD7Ob1/l8A5/HVpeoCAf0x219NCqQa2miK2js08RU9sCbG81cmKFSw7kVPJctsC/R0u/Ipl0d2kNKT0ywDFJlp7vygASokXkA8hOPpQEolh+Oosc7wt1l941vLHftydmz6CjjlFC+ddUVgr7/B6Xe9moJcs8TS891KZLx01KPI/uiFYxvwyStnBqj9POlZPBQ763/ae5NeM1kgE5uqtw9Wx99IfHMmJeA8WkaZ7ALPxkpJh9C4wCcsuCgBc3pZQZPc8d3i07zbzd3Obqqwb97shIgvZX2 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.89.10; envelope-from=mohamed@unpredictable.fr; helo=outbound.ci.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1768571910273158500 Content-Type: text/plain; charset="utf-8" Add arm64-specific files. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier Reviewed-by: Akihiko Odaki Tested-by: Bernhard Beschow --- MAINTAINERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9127a82ec3..f03ffe907d 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)