From nobody Sat Apr 11 18:38:41 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=1775124406; cv=none; d=zohomail.com; s=zohoarc; b=h8ExqhcpmUOu2F3XmiJHDl6hNULgUqVRLLhklzRfcxKtZvmU0l1vu6J7hKRerradnzrjMWZAlg8DkErPobCbG86TLTqDUdDwf4HK7EoXXBy29ZcqAemB8BvCZ8tz8wj+0mOQklyWaAXG9fehsdjAj+23ESMFLy85mf+G7o/DA7c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775124406; 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=/MUkLPgFZBpV3m64Kp5Hg3FT9nhtEW1quSiDaAGCvyk=; b=SHoOsu4YtlygQwUmBAcAPzzK7utUtKqm5IjZzsHXQBAkGlFjc5OPfdUaSL6gbe1D64/K1qzKIE1efy6k4AtcwvTb/IN8zasFpNE5XLu4Mn6AA8TWtX265qwsIXqLPUL4O275SvzCES6/6TN7Q2xEiz9aj1WkTEIot+NopMcXkWY= 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 1775124406058388.0386872763387; Thu, 2 Apr 2026 03:06:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Ew0-0006t1-B6; Thu, 02 Apr 2026 06:05:56 -0400 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 1w8Evs-0006pw-El for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:50 -0400 Received: from qs-2004i-snip4-5.eps.apple.com ([57.103.84.88] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Evp-0003mq-VP for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:48 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPS id 6CC80300012C; Thu, 02 Apr 2026 10:05:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPSA id D5D0F30000E1; Thu, 02 Apr 2026 10:05:38 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1775124343; x=1777716343; bh=/MUkLPgFZBpV3m64Kp5Hg3FT9nhtEW1quSiDaAGCvyk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BrIDuYZzTgqIXTAzoIyvqUxC4ZvAbmnVpJGxUTqVz8Zf4c2vF7f82AT4KEzMvPyRcXRradcFmm+I9qlJ21lfrw4QE3YBPYJbX2DJbCVUEprllks6/8jSFrj9lLYywyo96/5aDfUG9TeCc3iJq0j6+s6qnK9LuPFH9MLAmz6R3hpXkLOOsyKUMzlr1PdWIp+SufPovjJ4skvnvz2Qd9A1sDcuJm/FiK77hOXL5ah2aNw5inKb7okmAwOw3noJcM4JIpXAh8WrDM7dKudnHkLuwJAWxd107bfu2ViJuKeMgi+FHNBgv9XQ0m+ieoaHEsQENHrt/87z2r+WUdevDRW30Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Mohamed Mediouni , Pedro Barbuda Subject: [PATCH 1/2] whpx: i386: enable x2apic by default for user-mode LAPIC Date: Thu, 2 Apr 2026 12:05:34 +0200 Message-ID: <20260402100535.42960-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260402100535.42960-1-mohamed@unpredictable.fr> References: <20260402100535.42960-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5MCBTYWx0ZWRfX4jD38TIzKCv2 38pN0j/jcwG4SOujplmbVgbtnmdKwL3nVf5BWbUnIPMKLhKyEX1FoZqN5oVsJuDif+IFFRkHYE4 Kj1i9EL/9hUk9jTaL+GWqNob0FXAJubQ+zDk8MxmIb8GhVXdK6kVNKTJJVhsQo5DA20Rw3kQ3x3 +oqtkb9+FWmjr+fylCehiA86HGBdCAgCeopWY+ToOVZBDnn9YCOKu1BG+Hf4OCmIuwa44/2b1xk IXFewRT9ffUETI31/bcnYTsVVYGzGi36/1WvWkl02LasaefAwGt3f1bwQiPBz/IWJy4eYWXa/B5 UCh9KPRBR9esnh6XrpxVHwJeVWIFhwBIwYguT+H6UV08k2mTDNvfT3jHE5cYQo= X-Authority-Info-Out: v=2.4 cv=CrKys34D c=1 sm=1 tr=0 ts=69ce3f74 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=23N40mErLr3Vl_GD1psA:9 X-Proofpoint-GUID: wyWc4IxrgjXp5kLpQ_aRe9blGJLlSFMa X-Proofpoint-ORIG-GUID: wyWc4IxrgjXp5kLpQ_aRe9blGJLlSFMa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 clxscore=1030 malwarescore=0 mlxlogscore=999 bulkscore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2604020090 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.84.88; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: 0 X-Spam_score: -0.1 X-Spam_bar: / X-Spam_report: (-0.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=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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: 1775124408298154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index b29f8d43c9..5460207bdb 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2269,11 +2269,18 @@ error: return ret; } =20 +static PropValue whpx_default_props[] =3D { + { "x2apic", "on" }, + { NULL, NULL }, +}; + + void whpx_cpu_instance_init(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); =20 host_cpu_instance_init(cpu); + x86_cpu_apply_props(cpu, whpx_default_props); } =20 /* --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 18:38:41 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=1775124400; cv=none; d=zohomail.com; s=zohoarc; b=UYv16qoXygfKnV9xk8toYJBpW8bq1/j0jAqxSLuCSQDzYxyEl5WgPLk9xxOpJXvIH1JGi7BaDi2ICAtL4tAAl1CJ0wbNzJ1+nDlv9TGYZRNz83FkHclGhJHTaDkY37rETt+4aQ5CzlmlQ/nbnbAekRRHDLhsgQFwBxf5vDX6J8I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775124400; 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=GLvxS3ZXniVWZSo6nScZk1ySvLSYx1kbrzXjMB1npTo=; b=UFjduSIaZiL/d/9d/J2Xz/cvaycBUrXRsojH/8wfwQgCieSsIitxtglSOs3G+FOAyHgITvodQGNGAMIWrhDiE9Roe/MDksF2zYedVG7Jpwj6h01Q2AdVnKVM5RKJMXUBDqYjqPv7znyXrIedxPt2zDIyUOOc2oW6doKYSyD61+w= 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 1775124399908972.3707253608484; Thu, 2 Apr 2026 03:06:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w8Ew6-0006xE-CO; Thu, 02 Apr 2026 06:06:02 -0400 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 1w8Evs-0006q7-LN for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:50 -0400 Received: from qs-2004g-snip4-8.eps.apple.com ([57.103.84.71] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w8Evo-0003mn-Fm for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:48 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPS id 1BB923000139; Thu, 02 Apr 2026 10:05:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPSA id 9F72F30000AF; Thu, 02 Apr 2026 10:05:39 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1775124343; x=1777716343; bh=GLvxS3ZXniVWZSo6nScZk1ySvLSYx1kbrzXjMB1npTo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AWR8xgWaZghBhzw/siuPqqfp7MTX9Z9YMq3vdzmG7Xi+knB1sBWX01Mm7pFNxtjV2uBC15hahF3DAuRG5bDDlwYL/0OAsSR2cnMfF0ba0IYGIxwStjzWoL/S7xyOLS0eBsM8ksEG+gBcs9KnbgFPeT642XYHegSuyfZ3uVV2syM2Rb2olEAmpfnho+p0V8o7F7/V0g1PwZCj5wiJIMqvcCfffsCbkBSM5EFWLhdzj4Eg48AAIQBg7N8BPykmV/486ZrrtRfezg+SwG6+ULyjcJthb5R4wEV9N4/QmnsI6b3edEC6I/55ekGAkoJMriOZhI79FFIJua6cPInsw90ZLA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Mohamed Mediouni , Pedro Barbuda Subject: [PATCH 2/2] whpx: i386: reintroduce enlightenments for Windows 10 Date: Thu, 2 Apr 2026 12:05:35 +0200 Message-ID: <20260402100535.42960-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260402100535.42960-1-mohamed@unpredictable.fr> References: <20260402100535.42960-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 4Oyofk0OczscGxahp1QHjl9DsdsdxQuf X-Authority-Info-Out: v=2.4 cv=GMsF0+NK c=1 sm=1 tr=0 ts=69ce3f75 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=7Tkn1UfjudUksutfP3gA:9 X-Proofpoint-ORIG-GUID: 4Oyofk0OczscGxahp1QHjl9DsdsdxQuf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAyMDA5MCBTYWx0ZWRfXyHu52Jk7k3O6 ohC1Wh/U1CVHw8sHAsbhPsFKyQ2Y94s6QoEaj32bgWOLxPFM66HeNf95u23MonHQ9Fe9n9QkmCw jwpl9JEoTy6jAaEqAil5ZcJ4zEIc2/auxc/0kSramG4KAA425RAiHdh1Ee5SXvdrLZnuQwFsJ9i hSqP7BIYjVGGsIKNrLzUoE1fEwQDCduIrNN/+1FUXNh+93DKQjICphpwqvCCle/s6fL8F2VFoQ1 TR55aVgTtjqJi2Uq/rW3RZ8Cfz2XJfdupCApgosk5TTh5uR598Z0WdMK0niierWXw8DDt2nYx5s 4MFuITBOsbDZapcXk9c3Wj/ijI1rNPLZvPHkRJfxPM5cn0fxhcVkaIsctbxyNY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-02_01,2026-04-02_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 clxscore=1030 mlxlogscore=699 bulkscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2604020090 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.84.71; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: 0 X-Spam_score: -0.1 X-Spam_bar: / X-Spam_report: (-0.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=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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: 1775124403044158500 Content-Type: text/plain; charset="utf-8" Was removed in 2c08624 but it's still useful for Windows 10 so reintroduce it there. And this time, actually make it work by reporting the hypervisor bit in CPUID. Also pretend to be KVM, with the only capability reported being X2APIC support. Although looks like Linux doesn't use that vmware leaf... Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 64 ++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 5460207bdb..e4f297eec1 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2071,15 +2071,45 @@ int whpx_vcpu_run(CPUState *cpu) vcpu->exit_ctx.VpContext.Rip + vcpu->exit_ctx.VpContext.InstructionLength; =20 - reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRax; - reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRcx; - reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRdx; - reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRbx; - - if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 1) { - if (cpu_has_x2apic_feature(env)) { - reg_values[2].Reg64 |=3D CPUID_EXT_X2APIC; + if (whpx_is_legacy_os()) { + reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRax; + reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRcx; + reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRdx; + reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRbx; + switch (vcpu->exit_ctx.CpuidAccess.Rax) { + case 1: + if (cpu_has_x2apic_feature(env)) { + reg_values[2].Reg64 |=3D CPUID_EXT_X2APIC; + } + reg_values[2].Reg64 |=3D CPUID_EXT_HYPERVISOR; + break; + case 0x40000000: + /* report KVM */ + if (x86_cpu->vmware_cpuid_freq) { + reg_values[1].Reg64 =3D 0x40000010; + } else { + reg_values[1].Reg64 =3D 0x40000001; + } + reg_values[4].Reg64 =3D 0x4b4d564b; + reg_values[2].Reg64 =3D 0x564b4d56; + reg_values[3].Reg64 =3D 0x4d; + break; + case 0x40000001: + /* report X2APIC */ + reg_values[1].Reg64 =3D reg_values[4].Reg64 =3D reg_va= lues[2].Reg64 =3D 1 << 15; + break; + case 0x40000010: + if (x86_cpu->vmware_cpuid_freq) { + reg_values[1].Reg64 =3D env->tsc_khz; + reg_values[4].Reg64 =3D env->apic_bus_freq / 1000;= /* Hz to KHz */ + } + break; } + } else { + cpu_x86_cpuid(env, vcpu->exit_ctx.CpuidAccess.Rax, 0,=20 + (UINT32 *)®_values[1].Reg32, + (UINT32 *)®_values[4].Reg32, (UINT32 *)®_values[= 2].Reg32, + (UINT32 *)®_values[3].Reg32); } =20 hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( @@ -2253,6 +2283,24 @@ int whpx_init_vcpu(CPUState *cpu) env->apic_bus_freq =3D 1000000000; } =20 + /* Windows 10 doesn't provide Hyper-V enlightenments. */ + if (whpx_is_legacy_os()) { + UINT32 cpuidExitList[] =3D {1, 0x40000000, 0x40000001, 0x40000010= }; + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeCpuidExitList, + cpuidExitList, + RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set partition CpuidExitList hr= =3D%08lx", + hr); + ret =3D -EINVAL; + goto error; + } + } + vcpu->interruptable =3D true; cpu->vcpu_dirty =3D true; cpu->accel =3D vcpu; --=20 2.50.1 (Apple Git-155)