[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 03/13] libs/guest: allow fetching a specific CPUID leaf from a cpu policy
- To: xen-devel@xxxxxxxxxxxxxxxxxxxx
- From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
- Date: Fri, 16 Jun 2023 15:10:09 +0200
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ThmNVYMmQ6VGfb+VH01B+FGJrydg+3CLS9eYmXTIbHE=; b=GmTp73NW93WVCaR0XGym5cBBtSwJuRuAydf5DoHLP2RAfuRjvucYWObeDiaGMRPTlYgDQplnHnic5f5tTZrTsH8xQ4+GTQnCs7uQTuYsVPWgtTYt+H1uZ51HqhdPpruxz0RKxMp0wRxjAHppqpsf4n/S1Nj64IUyvTP+ErfnzZQsapA0mH15Dnd72o5MmVhoN8+9rOZD72DkzrHWdX+JV30WL2tCMn/mc3OgCSuwsyqwIxFO0nXtIaQVk9z2J8OlSFCxcuuug+kshobIe7HlsiySXOW5j75nfUev7hWjWUN5GSgMb8gY9S+pYLIY0ce5j8qlGF632vjREJecNGHnDA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k45Z3xPR1V0NbjFdP3XaIrwitZ3hx9n/oVLM2YZLwUFGO4XmKPbdfO3YO3SZQnyjXHftJD6wp1W4DZZ6jOdkFMrauG+3fPr17vfQ6AWhtBfQw4AgCqr7Z43MpoX+O7oIbD/tbvu8VUPxSA0Mx6OvagCZImQy7Zh2dbtw3+6LY6KE3dL1aNcZjZdMKhi8U7020Ir4g9gzOg60PqoMj0YdlExVQmWelquxo8srZXefyuXjiso1lbCzaC7kHg+EmHUIeSS1H3XoY6KoIXq3tXDJDzLe6wdJQzGC1o8EcAjArS+6O5ARJ5NODdQj6GzWt+8NMC78VydAnAdlj9J52abh8A==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
- Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
- Delivery-date: Fri, 16 Jun 2023 13:11:22 +0000
- Ironport-data: A9a23:ee08zK84l69rD2RZT5E4DrUDtn+TJUtcMsCJ2f8bNWPcYEJGY0x3z DcWXT2AO/yNYmugfd9+atmw/E0DuJ/dnYdiSAtqqCE8E34SpcT7XtnIdU2Y0wF+jCHgZBk+s 5hBMImowOQcFCK0SsKFa+C5xZVE/fjUAOG6UKicYXoZqTZMEE8JkQhkl/MynrlmiN24BxLlk d7pqojUNUTNNwRcawr40Ird7ks31BjOkGlA5AdmO6kV5AW2e0Q9V/rzG4ngdxMUfaEMdgKKb 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+A8BOsDAbzsAB+v9T2M4nQVVWk120c+VZk 72hg3ASpTABZcUgkMxFO/VR/roX0aduoNcrKlDn2SCfItGvn9IBDJyCAWlvVbD09NqbDklft vw6JRUiUSq7xP/vkK21afBMvu8KeZyD0IM34hmMzBn/JNN+G9X4ZfyP4tVVmjAtmspJAPDSI dIDbiZiZwjBZBsJPUoLDJU5n6GjgXyXnz9w8QrJ4/ZopTWMilAtuFTuGIO9ltiiX8Jak1zev mvb12/4HgsbJJqUzj/tHneE37aUxXOmCNNMfFG+3sZHskWwy2ZINBkbDXqCg/2FrBSlct0Kf iT4/QJr98De7neDXtT7GhG1vnOAlhodQMZLVf037hmXzajZ6BrfAXILJhZebPQ2uclwQiYlv neLkMnuHidHq6CORDSW8bL8hTG4NDURLGQCTTQZVgZD6N7myLzflTrKR9dnVbWz19v8HGmqx yjQ9HRiwbIOkcQMyqO3u0jdhC6hrYTISQhz4RjLWmWi7UVyY4vNi5GU1GU3JM1odO6xJmRtd lBe8yRCxIji1a2wqRE=
- Ironport-hdrordr: A9a23:c8Yydq3Y9XGpZFbDVRaeXAqjBIgkLtp133Aq2lEZdPUzSKClfq GV88jzsCWetN9/Yh8dcLy7WZVoI0mslqKdkLNwAV7KZmCP0gaVxepZnOnfKlPbakrD398Y+a B8c7VvTP3cZGIK6/oSOTPIdurIFuP3lJyVuQ==
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
Introduce an interface that returns a specific leaf/subleaf from a cpu
policy in xen_cpuid_leaf_t format.
This is useful to callers can peek data from the opaque
xc_cpu_policy_t type.
No caller of the interface introduced on this patch.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Changes since v6:
- Add newline before return.
Changes since v5:
- Zero out parameter.
Changes since v3:
- Use x86_cpuid_get_leaf.
Changes since v1:
- Use find leaf.
---
tools/include/xenguest.h | 3 +++
tools/libs/guest/xg_cpuid_x86.c | 26 ++++++++++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index e01f494b772a..0a6fd9930627 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -807,6 +807,9 @@ int xc_cpu_policy_update_cpuid(xc_interface *xch,
xc_cpu_policy_t *policy,
uint32_t nr);
int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy,
const xen_msr_entry_t *msrs, uint32_t nr);
+int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *policy,
+ uint32_t leaf, uint32_t subleaf,
+ xen_cpuid_leaf_t *out);
/* Compatibility calculations. */
bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host,
diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
index 67e0dc9b4ad2..630d0018529f 100644
--- a/tools/libs/guest/xg_cpuid_x86.c
+++ b/tools/libs/guest/xg_cpuid_x86.c
@@ -828,6 +828,32 @@ int xc_cpu_policy_update_msrs(xc_interface *xch,
xc_cpu_policy_t *policy,
return rc;
}
+int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *policy,
+ uint32_t leaf, uint32_t subleaf,
+ xen_cpuid_leaf_t *out)
+{
+ const struct cpuid_leaf *tmp;
+
+ *out = (xen_cpuid_leaf_t){};
+
+ tmp = x86_cpuid_get_leaf(&policy->policy, leaf, subleaf);
+ if ( !tmp )
+ {
+ /* Unable to find a matching leaf. */
+ errno = ENOENT;
+ return -1;
+ }
+
+ out->leaf = leaf;
+ out->subleaf = subleaf;
+ out->a = tmp->a;
+ out->b = tmp->b;
+ out->c = tmp->c;
+ out->d = tmp->d;
+
+ return 0;
+}
+
bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host,
xc_cpu_policy_t *guest)
{
--
2.40.0
|