From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 7AA6D3A7850; Tue, 28 Apr 2026 05:26:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777354001; cv=none; b=n8AU3WfDlX0+T8sc8E6hRFaCnXK+ihBlo7tXMPZrdC7n1AANo8o74lRldImWK12TBjjQICvpY9l+Vn3+mxIUP4aUmDhFrcTOGgQIlO1qIzgdN6GV+kGY2oEDmZJDgXjvaHdjusg60p1zROOZCcss0RMg+I2oAEtj3EzH6wRPLhU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777354001; c=relaxed/simple; bh=BA4K49FXnQuhBJJw/KO/ibdCTSpSfOVRwZkwOiJn57A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sNi0NLwqU2E9sLtKDn80I4M3DKn4TDn34IZy56z8a0B/O46/um6/FGnNZ2qLhsFfLXYYRQnWiBdukrs0KoGm1li96WjfWvcTwba7tV9KBG0ZSWGiKJNH93rbOthO8DCEGYDToXMC957skIdv95SxDmWJCeppVgdL+OYLvp55vNs= 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=U6wLoTFe; arc=none smtp.client-ip=192.198.163.17 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="U6wLoTFe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1777353999; x=1808889999; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=BA4K49FXnQuhBJJw/KO/ibdCTSpSfOVRwZkwOiJn57A=; b=U6wLoTFeaqeLRJg4Q6jMpPswRnsag3ZOw2YVEOMqOvROcpk/4dlQheZt n1eb5zVybL9KNmpMw4nqEB0+lDcpxOPtDTCPuSTINLW++EeLQHw/BV3yK +H2SaORqgZxbPt7zG0bExeGVSHWJAzVgTSXetEQApc8CUbtOK/RpjSejV dThcepJYeB4XU0fEZbOZOIfI2tW7t9cCvfPbL9kni77IemjrmD7saIHI8 IvEOreiOPwxPa7pkIDwD/89QSOyWAL1OUoD/YSvH2t2GaMR1khj/dxRNY 5pPwpH2YE0k5FtFtsq32Cm9RuFyQT/9Dq23FD+Z08BpryofrMTzko1mbi Q==; X-CSE-ConnectionGUID: Rjcw9btgRPaTg5r1u4WNhA== X-CSE-MsgGUID: QVLKqPOZTIaChE0NhRj1uQ== X-IronPort-AV: E=McAfee;i="6800,10657,11769"; a="78131759" X-IronPort-AV: E=Sophos;i="6.23,203,1770624000"; d="scan'208";a="78131759" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2026 22:26:37 -0700 X-CSE-ConnectionGUID: voXSxJl3RuW3nFH8HXCiSw== X-CSE-MsgGUID: ZiVwZWXEQXaK28S8Xpdb+A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,203,1770624000"; d="scan'208";a="234130245" Received: from chang-linux-3.sc.intel.com (HELO chang-linux-3) ([172.25.66.106]) by orviesa007.jf.intel.com with ESMTP; 27 Apr 2026 22:26:37 -0700 From: "Chang S. Bae" To: pbonzini@redhat.com, seanjc@google.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, chao.gao@intel.com, chang.seok.bae@intel.com Subject: [PATCH v3 20/20] KVM: x86: selftests: Add APX state handling and XCR0 sanity checks Date: Tue, 28 Apr 2026 05:01:11 +0000 Message-ID: <20260428050111.39323-21-chang.seok.bae@intel.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260428050111.39323-1-chang.seok.bae@intel.com> References: <20260428050111.39323-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 states are 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 --- V2 -> V3: Use EGPR helper --- 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 992a52504a4a..24a8166d2a4f 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -171,6 +171,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)) { uint64_t bounds[2] = { 10, 0xffffffffull }; uint64_t 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 d038c1571729..e3d3af5ab6f2 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) { uint64_t 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.51.0