All of lore.kernel.org
 help / color / mirror / Atom feed
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;
> +}



  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.