<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">On 5/30/22, 6:09 AM, "Michal Prívozník" <mprivozn@redhat.com> wrote:<o:p></o:p></p>
<p class="MsoNormal"><br>
> On 5/18/22 09:59, Haibin Huang wrote:<o:p></o:p></p>
<p class="MsoNormal">> > From: Lin Yang <lin.a.yang@intel.com><o:p></o:p></p>
<p class="MsoNormal">> > <o:p></o:p></p>
<p class="MsoNormal">> > According to the result parsing from xml, add the argument of<o:p></o:p></p>
<p class="MsoNormal">> > SGX EPC memory backend into QEMU command line:<o:p></o:p></p>
<p class="MsoNormal">> > <o:p></o:p></p>
<p class="MsoNormal">> >     #qemu-system-x86_64 \<o:p></o:p></p>
<p class="MsoNormal">> >         ...... \<o:p></o:p></p>
<p class="MsoNormal">> >         -object memory-backend-epc,id=memepc0,size=64M,prealloc=on \<o:p></o:p></p>
<p class="MsoNormal">> >         -object memory-backend-epc,id=memepc1,size=28M \<o:p></o:p></p>
<p class="MsoNormal">> >         -machine sgx-epc.0.memdev=memepc0,sgx-epc.1.memdev=memepc1<o:p></o:p></p>
<p class="MsoNormal">> > <o:p></o:p></p>
<p class="MsoNormal">> > Signed-off-by: Lin Yang <lin.a.yang@intel.com><o:p></o:p></p>
<p class="MsoNormal">> > Signed-off-by: Haibin Huang <haibin.huang@intel.com><o:p></o:p></p>
<p class="MsoNormal">> > ---<o:p></o:p></p>
<p class="MsoNormal">> >  src/qemu/qemu_alias.c                         |  3 +-<o:p></o:p></p>
<p class="MsoNormal">> >  src/qemu/qemu_command.c                       | 53 +++++++++++++++++--<o:p></o:p></p>
<p class="MsoNormal">> >  .../sgx-epc.x86_64-6.2.0.args                 | 37 +++++++++++++<o:p></o:p></p>
<p class="MsoNormal">> >  tests/qemuxml2argvtest.c                      |  2 +<o:p></o:p></p>
<p class="MsoNormal">> >  4 files changed, 90 insertions(+), 5 deletions(-)<o:p></o:p></p>
<p class="MsoNormal">> >  create mode 100644 tests/qemuxml2argvdata/sgx-epc.x86_64-6.2.0.args<o:p></o:p></p>
<p class="MsoNormal">> > <o:p></o:p></p>
<p class="MsoNormal">> > diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c<o:p></o:p></p>
<p class="MsoNormal">> > index e5a946cbed..03c79bcf0e 100644<o:p></o:p></p>
<p class="MsoNormal">> > --- a/src/qemu/qemu_alias.c<o:p></o:p></p>
<p class="MsoNormal">> > +++ b/src/qemu/qemu_alias.c<o:p></o:p></p>
<p class="MsoNormal">> > @@ -467,7 +467,8 @@ qemuDeviceMemoryGetAliasID(virDomainDef *def,<o:p></o:p></p>
<p class="MsoNormal">> >       * valid */<o:p></o:p></p>
<p class="MsoNormal">> >      if (!oldAlias &&<o:p></o:p></p>
<p class="MsoNormal">> >          mem->model != VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM &&<o:p></o:p></p>
<p class="MsoNormal">> > -        mem->model != VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM)<o:p></o:p></p>
<p class="MsoNormal">> > +        mem->model != VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM &&<o:p></o:p></p>
<p class="MsoNormal">> > +        mem->model != VIR_DOMAIN_MEMORY_MODEL_SGX_EPC)<o:p></o:p></p>
<p class="MsoNormal">> >          return mem->info.addr.dimm.slot;<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> >      for (i = 0; i < def->nmems; i++) {<o:p></o:p></p>
<p class="MsoNormal">> > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c<o:p></o:p></p>
<p class="MsoNormal">> > index 4807b137b6..9c83f0e168 100644<o:p></o:p></p>
<p class="MsoNormal">> > --- a/src/qemu/qemu_command.c<o:p></o:p></p>
<p class="MsoNormal">> > +++ b/src/qemu/qemu_command.c<o:p></o:p></p>
<p class="MsoNormal">> > @@ -3774,6 +3774,10 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,<o:p></o:p></p>
<p class="MsoNormal">> >          if (systemMemory)<o:p></o:p></p>
<p class="MsoNormal">> >              disableCanonicalPath = true;<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> > +    } else if (mem->model == VIR_DOMAIN_MEMORY_MODEL_SGX_EPC) {<o:p></o:p></p>
<p class="MsoNormal">> > +        backendType = "memory-backend-epc";<o:p></o:p></p>
<p class="MsoNormal">> > +        if (!priv->memPrealloc)<o:p></o:p></p>
<p class="MsoNormal">> > +            prealloc = true;<o:p></o:p></p>
<p class="MsoNormal">> >      } else if (useHugepage || mem->nvdimmPath || memAccess ||<o:p></o:p></p>
<p class="MsoNormal">> >          def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE) {<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> > @@ -3934,6 +3938,11 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,<o:p></o:p></p>
<p class="MsoNormal">> >                             _("this qemu doesn't support the "<o:p></o:p></p>
<p class="MsoNormal">> >                               "memory-backend-memfd object"));<o:p></o:p></p>
<p class="MsoNormal">> >              return -1;<o:p></o:p></p>
<p class="MsoNormal">> > +        } else if (STREQ(backendType, "memory-backend-epc") &&<o:p></o:p></p>
<p class="MsoNormal">> > +                   !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SGX_EPC)) {<o:p></o:p></p>
<p class="MsoNormal">> > +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",<o:p></o:p></p>
<p class="MsoNormal">> > +                           _("this qemu doesn't support the memory-backend-epc object"));<o:p></o:p></p>
<p class="MsoNormal">> > +            return -1;<o:p></o:p></p>
<p class="MsoNormal">> >          }<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> >          rc = 0;<o:p></o:p></p>
<p class="MsoNormal">> > @@ -6979,6 +6988,7 @@ qemuBuildMachineCommandLine(virCommand *cmd,<o:p></o:p></p>
<p class="MsoNormal">> >      virCPUDef *cpu = def->cpu;<o:p></o:p></p>
<p class="MsoNormal">> >      g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;<o:p></o:p></p>
<p class="MsoNormal">> >      size_t i;<o:p></o:p></p>
<p class="MsoNormal">> > +    int epcNum = 0;<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> >      virCommandAddArg(cmd, "-machine");<o:p></o:p></p>
<p class="MsoNormal">> >      virBufferAdd(&buf, def->os.machine, -1);<o:p></o:p></p>
<p class="MsoNormal">> > @@ -7199,6 +7209,25 @@ qemuBuildMachineCommandLine(virCommand *cmd,<o:p></o:p></p>
<p class="MsoNormal">> >          virBufferAddLit(&buf, ",graphics=off");<o:p></o:p></p>
<p class="MsoNormal">> >      }<o:p></o:p></p>
<p class="MsoNormal">> >  <o:p></o:p></p>
<p class="MsoNormal">> > +    /* add sgx epc memory to -machine parameter */<o:p></o:p></p>
<p class="MsoNormal">> > +    for (i = 0; i < def->nmems; i++) {<o:p></o:p></p>
<p class="MsoNormal">> > +        switch ((virDomainMemoryModel) def->mems[i]->model) {<o:p></o:p></p>
<p class="MsoNormal">> > +        case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC:<o:p></o:p></p>
<p class="MsoNormal">> > +            virBufferAsprintf(&buf, ",sgx-epc.%d.memdev=mem%s", epcNum++,<o:p></o:p></p>
<p class="MsoNormal">> > +                              def->mems[i]->info.alias);<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> So there really isn't any better way to specify sgx-epc than through -M?<o:p></o:p></p>
<p class="MsoNormal">> This way libvirt loses capability to set th device @id attribute which<o:p></o:p></p>
<p class="MsoNormal">> means we have to jump through hoops (like in your patch 2/6) when the<o:p></o:p></p>
<p class="MsoNormal">> @id value is expected.<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> I vaguely pointing this out earlier (but maybe I just thought about<o:p></o:p></p>
<p class="MsoNormal">> pointing it out and never did - it's been a while since I've reviewed<o:p></o:p></p>
<p class="MsoNormal">> these patches), but I don't know what the consensus was.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I was not involved in the QEMU SGX patches review process and don’t<o:p></o:p></p>
<p class="MsoNormal">know the reason why it use -machine instead of -device. The initial<o:p></o:p></p>
<p class="MsoNormal">patch introduce separate QEMU argument -sgx-epc, but finally was<o:p></o:p></p>
<p class="MsoNormal">updated to -machine according to the comments.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://lists.nongnu.org/archive/html/qemu-devel/2021-05/msg00644.html">https://lists.nongnu.org/archive/html/qemu-devel/2021-05/msg00644.html</a>
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Lin. <o:p></o:p></p>
</div>
</body>
</html>