qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 5/6] numa: Enable numa for libvirt interface


From: Paolo Bonzini
Subject: Re: [PATCH 5/6] numa: Enable numa for libvirt interface
Date: Tue, 12 Oct 2021 12:59:32 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0

On 11/10/21 13:15, Yang Zhong wrote:
Libvirt need get the detailed host SGX EPC capabilities to support
numa function. Libvirt can decide how to allocate host EPC sections
to guest numa from host numa info.

(QEMU) query-sgx-capabilities
{"return": {"sgx": true, "sgx2": true, "sgx1": true, "sections": \
[{"index": 0, "size": 17070817280}, {"index": 1, "size": 17079205888}], "flc": 
true}}

Signed-off-by: Yang Zhong <yang.zhong@intel.com>
---
  hw/i386/sgx.c | 15 ++++++++++-----
  1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
index 8af45925c6..fe3034060d 100644
--- a/hw/i386/sgx.c
+++ b/hw/i386/sgx.c
@@ -74,11 +74,13 @@ static uint64_t sgx_calc_section_metric(uint64_t low, 
uint64_t high)
             ((high & MAKE_64BIT_MASK(0, 20)) << 32);
  }
-static uint64_t sgx_calc_host_epc_section_size(void)
+static SGXEPCSectionList *sgx_calc_host_epc_sections(void)
  {
+    SGXEPCSectionList *head = NULL, **tail = &head;
+    SGXEPCSection *section;
      uint32_t i, type;
      uint32_t eax, ebx, ecx, edx;
-    uint64_t size = 0;
+    uint32_t j = 0;
for (i = 0; i < SGX_MAX_EPC_SECTIONS; i++) {
          host_cpuid(0x12, i + 2, &eax, &ebx, &ecx, &edx);
@@ -92,10 +94,13 @@ static uint64_t sgx_calc_host_epc_section_size(void)
              break;
          }
- size += sgx_calc_section_metric(ecx, edx);
+        section = g_new0(SGXEPCSection, 1);
+        section->index = j++;
+        section->size = sgx_calc_section_metric(ecx, edx);
+        QAPI_LIST_APPEND(tail, section);
      }
- return size;
+    return head;
  }
SGXInfo *sgx_get_capabilities(Error **errp)
@@ -119,7 +124,7 @@ SGXInfo *sgx_get_capabilities(Error **errp)
      info->sgx1 = eax & (1U << 0) ? true : false;
      info->sgx2 = eax & (1U << 1) ? true : false;
- info->section_size = sgx_calc_host_epc_section_size();
+    info->sections = sgx_calc_host_epc_sections();
close(fd);

This too.

Paolo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]