From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Yang Zhong <yang.zhong@intel.com>, qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, eblake@redhat.com, seanjc@google.com
Subject: Re: [PATCH v2 2/3] qmp: Add the qmp_query_sgx_capabilities()
Date: Fri, 10 Sep 2021 14:41:08 +0200 [thread overview]
Message-ID: <fc329a6b-117c-2f83-986b-e94312af7dce@redhat.com> (raw)
In-Reply-To: <20210910102258.46648-3-yang.zhong@intel.com>
On 9/10/21 12:22 PM, Yang Zhong wrote:
> Libvirt can use qmp_query_sgx_capabilities() to get the host
> sgx capabilities to decide how to allocate SGX EPC size to VM.
>
> Signed-off-by: Yang Zhong <yang.zhong@intel.com>
> ---
> hw/i386/sgx.c | 66 ++++++++++++++++++++++++++++++++++++++
> include/hw/i386/sgx.h | 1 +
> qapi/misc-target.json | 18 +++++++++++
> target/i386/monitor.c | 5 +++
> tests/qtest/qmp-cmd-test.c | 1 +
> 5 files changed, 91 insertions(+)
>
> diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
> index 8a32d62d7e..1be2670c84 100644
> --- a/hw/i386/sgx.c
> +++ b/hw/i386/sgx.c
> @@ -18,6 +18,72 @@
> #include "qapi/error.h"
> #include "exec/address-spaces.h"
> #include "hw/i386/sgx.h"
> +#include "sysemu/hw_accel.h"
> +
> +#define SGX_MAX_EPC_SECTIONS 8
> +#define SGX_CPUID_EPC_INVALID 0x0
> +
> +/* A valid EPC section. */
> +#define SGX_CPUID_EPC_SECTION 0x1
> +#define SGX_CPUID_EPC_MASK 0xF
> +
> +static uint64_t sgx_calc_section_metric(uint64_t low, uint64_t high)
> +{
> + return (low & MAKE_64BIT_MASK(12, 31 - 12 + 1)) +
> + ((high & MAKE_64BIT_MASK(0, 19 - 0 + 1)) << 32);
Thanks for using MAKE_64BIT_MASK.
Can we have #definitions instead of these magic values please?
> +}
> +
> +static uint64_t sgx_calc_host_epc_section_size(void)
> +{
> + uint32_t i, type;
> + uint32_t eax, ebx, ecx, edx;
> + uint64_t size = 0;
> +
> + for (i = 0; i < SGX_MAX_EPC_SECTIONS; i++) {
> + host_cpuid(0x12, i + 2, &eax, &ebx, &ecx, &edx);
> +
> + type = eax & SGX_CPUID_EPC_MASK;
> + if (type == SGX_CPUID_EPC_INVALID) {
> + break;
> + }
> +
> + if (type != SGX_CPUID_EPC_SECTION) {
> + break;
> + }
> +
> + size += sgx_calc_section_metric(ecx, edx);
> + }
> +
> + return size;
> +}
> +
> +SGXInfo *sgx_get_capabilities(Error **errp)
> +{
> + SGXInfo *info = NULL;
> + uint32_t eax, ebx, ecx, edx;
> +
> + int fd = qemu_open_old("/dev/sgx_vepc", O_RDWR);
> + if (fd < 0) {
> + error_setg(errp, "SGX is not enabled in KVM");
> + return NULL;
> + }
> +
> + info = g_new0(SGXInfo, 1);
> + host_cpuid(0x7, 0, &eax, &ebx, &ecx, &edx);
> +
> + info->sgx = ebx & (1U << 2) ? true : false;
> + info->flc = ecx & (1U << 30) ? true : false;
> +
> + host_cpuid(0x12, 0, &eax, &ebx, &ecx, &edx);
> + info->sgx1 = eax & (1U << 0) ? true : false;
> + info->sgx2 = eax & (1U << 1) ? true : false;
> +
> + info->section_size = sgx_calc_host_epc_section_size();
> +
> + close(fd);
> +
> + return info;
> +}
next prev parent reply other threads:[~2021-09-10 12:50 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-10 10:22 [PATCH v2 0/3] The HMP/QMP interfaces in Qemu SGX Yang Zhong
2021-09-10 10:22 ` [PATCH v2 1/3] monitor: Add HMP and QMP interfaces Yang Zhong
2021-09-10 12:39 ` Philippe Mathieu-Daudé
2021-09-13 10:37 ` Yang Zhong
2021-09-13 12:42 ` Paolo Bonzini
2021-09-10 13:46 ` Daniel P. Berrangé
2021-09-13 9:35 ` Daniel P. Berrangé
2021-09-13 10:46 ` Yang Zhong
2021-09-13 12:48 ` Paolo Bonzini
2021-09-13 12:56 ` Daniel P. Berrangé
2021-09-13 12:52 ` Yang Zhong
2021-09-13 13:24 ` Daniel P. Berrangé
2021-09-16 6:14 ` Yang Zhong
2021-09-10 10:22 ` [PATCH v2 2/3] qmp: Add the qmp_query_sgx_capabilities() Yang Zhong
2021-09-10 12:41 ` Philippe Mathieu-Daudé [this message]
2021-09-13 10:34 ` Yang Zhong
2021-09-10 10:22 ` [PATCH v2 3/3] pc: Cleanup the SGX definitions Yang Zhong
2021-09-10 14:15 ` [PATCH v2 0/3] The HMP/QMP interfaces in Qemu SGX Paolo Bonzini
2021-09-10 14:21 ` Daniel P. Berrangé
2021-09-10 19:10 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fc329a6b-117c-2f83-986b-e94312af7dce@redhat.com \
--to=philmd@redhat.com \
--cc=eblake@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=seanjc@google.com \
--cc=yang.zhong@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.