From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E111F3E1222; Wed, 29 Jul 2026 19:44:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785354256; cv=none; b=nh3A2XjDpgXx3AATwB5Qofj42o56N+WrEx548IlST4DccxE+QUnxId6Q/xl+TXAAJKPTq+mqndYFa/zSR0m8KZlLmpfeoO5kft/SUpbl63LZs2cN69N30QJBLKQ4AOUiDOUvA+m+H1g342kr8ZvRbDsdf72xEqzD2tKVaVpObjM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785354256; c=relaxed/simple; bh=anr9jp6F95ZMl5OuNXc1gxmHfRhIi2vcRZyTglo+qmk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FVgTfXYmSVOFMmEHpL8xcrUM6/6+K8uZSJ3fO4J+gqicyMCOZWsyZwazcadNslfnUeWIu/jDSyEqUxO4EXKzIij6r/Ihu0P38CUGnSup7JVRQt1QJrV1zmdAEd3U45LnQa7n3HnwSjIS6OxkcLvuAriZEaOtWiUlVfWqXqA1ABE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=M3CkfqZp; arc=none smtp.client-ip=192.198.163.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="M3CkfqZp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1785354252; x=1816890252; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=anr9jp6F95ZMl5OuNXc1gxmHfRhIi2vcRZyTglo+qmk=; b=M3CkfqZpETjLiu2AqYF7ZMK0zeSYo2eGdSUc/Dq69kowISaTKGxDp2Mw 5H0DKaRaAjf1K/27J+uBGbv1QcW2Rcshc7aIj2je/1EpTMCCpCPjlPmaY ON+Aorex04XfZbp9RYH6kJQUL9+5CT8e/BDZfQeHDR0DfybpA8a5LCSsR iSxq3WHlCgdD1vgXv3CuSQG9/B/ikfzMlrUbJaEBrhUQ91a5HKacfR6Io 3N7Z9m3+auh0YK0lFICB1zyMpeCso6tOnxhAkSDSN7Gk5OIuk1hyIPNGY q3NuOXOiFe3slQvknyvZHOsCD0i4p+5Lp4y19LcXI8dxiLZ+/qblAYZzF g==; X-CSE-ConnectionGUID: A94MnSgARq6dxXezoHTmuQ== X-CSE-MsgGUID: h4E2auFpTzal4gqhsyaimQ== X-IronPort-AV: E=McAfee;i="6800,10657,11859"; a="103508328" X-IronPort-AV: E=Sophos;i="6.25,193,1779174000"; d="scan'208";a="103508328" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2026 12:43:36 -0700 X-CSE-ConnectionGUID: RMB3Op9RTX25KlFcG69lCQ== X-CSE-MsgGUID: 1Vq6B6G8SY+BQUUp56mfHg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,193,1779174000"; d="scan'208";a="256769287" Received: from chang-linux-3.sc.intel.com (HELO chang-linux-3) ([172.25.66.174]) by fmviesa007.fm.intel.com with ESMTP; 29 Jul 2026 12:43:36 -0700 From: "Chang S. Bae" To: pbonzini@redhat.com, seanjc@google.com Cc: kvm@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, chang.seok.bae@intel.com Subject: [PATCH v6 20/20] KVM: x86: selftests: Add APX state handling and XCR0 sanity checks Date: Wed, 29 Jul 2026 19:16:56 +0000 Message-ID: <20260729191656.598771-21-chang.seok.bae@intel.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260729191656.598771-1-chang.seok.bae@intel.com> References: <20260729191656.598771-1-chang.seok.bae@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Now that KVM exposes the APX feature to guests, extend some existing selftests to validate XCR0 configuration and state management. Since APX repurposes the XSAVE area previously used by MPX in the non-compacted format, add a check to ensure that MPX state is not set when APX is enabled. Also, load non-init APX state data in the guest so that XSTATE_BV[APX] is set, allowing validation of APX state testing. Signed-off-by: Chang S. Bae --- tools/testing/selftests/kvm/x86/state_test.c | 3 +++ .../selftests/kvm/x86/xcr0_cpuid_test.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/selftests/kvm/x86/state_test.c index 4a1056a6cb8d..9727dbb2b981 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -164,6 +164,9 @@ static void __attribute__((__flatten__)) guest_code(void *arg) asm volatile ("vmovupd %0, %%zmm16" :: "m" (buffer)); } + if (supported_xcr0 & XFEATURE_MASK_APX) + write_egpr(16, 0xcccccccc); + if (this_cpu_has(X86_FEATURE_MPX)) { u64 bounds[2] = { 10, 0xffffffffull }; u64 output[2] = { }; diff --git a/tools/testing/selftests/kvm/x86/xcr0_cpuid_test.c b/tools/testing/selftests/kvm/x86/xcr0_cpuid_test.c index 40dc9e6b3fad..f74978ef5951 100644 --- a/tools/testing/selftests/kvm/x86/xcr0_cpuid_test.c +++ b/tools/testing/selftests/kvm/x86/xcr0_cpuid_test.c @@ -46,6 +46,20 @@ do { \ __supported, (xfeatures)); \ } while (0) +/* + * Verify that mutually exclusive architectural features do not overlap. + * For example, APX and MPX must never be reported as supported together. + */ +#define ASSERT_XFEATURE_CONFLICT(supported_xcr0, xfeatures, conflicts) \ +do { \ + uint64_t __supported = (supported_xcr0) & ((xfeatures) | (conflicts)); \ + \ + __GUEST_ASSERT((__supported & (xfeatures)) != (xfeatures) || \ + !(__supported & (conflicts)), \ + "supported = 0x%lx, xfeatures = 0x%llx, conflicts = 0x%llx", \ + __supported, (xfeatures), (conflicts)); \ +} while (0) + static void guest_code(void) { u64 initial_xcr0; @@ -79,6 +93,11 @@ static void guest_code(void) ASSERT_ALL_OR_NONE_XFEATURE(supported_xcr0, XFEATURE_MASK_XTILE); + /* Check APX by ensuring MPX is not exposed concurrently */ + ASSERT_XFEATURE_CONFLICT(supported_xcr0, + XFEATURE_MASK_APX, + XFEATURE_MASK_BNDREGS | XFEATURE_MASK_BNDCSR); + vector = xsetbv_safe(0, XFEATURE_MASK_FP); __GUEST_ASSERT(!vector, "Expected success on XSETBV(FP), got %s", -- 2.53.0