<div>
                    ping
                </div><div><br></div>
                <div></div>
                 
                <p style="color: #A0A0A8;">On Wednesday, 17 May 2017 at 5:08 PM, taget wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div><div>From: Eli Qiao <<a href="mailto:liyong.qiao@intel.com">liyong.qiao@intel.com</a>></div><div><br></div><div>* This patch amends the cache bank capability as follow:</div><div><br></div><div><cache></div><div>  <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'></div><div>    <control min='768' unit='KiB' scope='both' max_allocation='4'/></div><div>  </bank></div><div>  <bank id='1' level='3' type='unified' size='15360' unit='KiB' cpus='6-11'></div><div>    <control min='768' unit='KiB' scope='both' max_allocation='4'/></div><div>  </bank></div><div></cache></div><div><br></div><div>For CDP enabled on x86 arch, we will have:</div><div><cache></div><div>  <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'></div><div>    <control min='768' unit='KiB' scope='code' max_allocation='4'/></div><div>    <control min='768' unit='KiB' scope='data' max_allocation='4'/></div><div>  </bank></div><div>...</div><div><br></div><div>* Added a new testdata directory `linux-resctrl-cdp` to test CDP enabled</div><div>case.</div><div><br></div><div>* Along with vircaps2xmltest case updated.</div><div><br></div><div>P.S. here the scope is from /sys/fs/resctrl/info/L3{"" "code" "data"}, I</div><div>keep it capital upper as I need to use a macro to convert from enum to</div><div>string easily.</div><div><br></div><div>Signed-off-by: Eli Qiao <<a href="mailto:liyong.qiao@intel.com">liyong.qiao@intel.com</a>></div><div>---</div><div> docs/schemas/capability.rng                        |  20 ++++</div><div> src/conf/capabilities.c                            | 133 ++++++++++++++++++++-</div><div> src/conf/capabilities.h                            |  10 ++</div><div> .../vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus |   1 +</div><div> .../linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask |   1 +</div><div> .../resctrl/info/L3CODE/min_cbm_bits               |   1 +</div><div> .../resctrl/info/L3CODE/num_closids                |   1 +</div><div> .../linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask |   1 +</div><div> .../resctrl/info/L3DATA/min_cbm_bits               |   1 +</div><div> .../resctrl/info/L3DATA/num_closids                |   1 +</div><div> .../linux-resctrl-cdp/resctrl/manualres/cpus       |   1 +</div><div> .../linux-resctrl-cdp/resctrl/manualres/schemata   |   2 +</div><div> .../linux-resctrl-cdp/resctrl/manualres/tasks      |   0</div><div> .../linux-resctrl-cdp/resctrl/schemata             |   2 +</div><div> .../linux-resctrl-cdp/resctrl/tasks                |   0</div><div> tests/vircaps2xmldata/linux-resctrl-cdp/system     |   1 +</div><div> .../vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml |  55 +++++++++</div><div> tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml   |   8 +-</div><div> tests/vircaps2xmltest.c                            |   8 ++</div><div> 19 files changed, 244 insertions(+), 3 deletions(-)</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits</div><div> create mode 100755 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata</div><div> create mode 100644 tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks</div><div> create mode 120000 tests/vircaps2xmldata/linux-resctrl-cdp/system</div><div> create mode 100644 tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div><br></div><div>diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng</div><div>index 26f0aa2..927fc18 100644</div><div>--- a/docs/schemas/capability.rng</div><div>+++ b/docs/schemas/capability.rng</div><div>@@ -277,6 +277,26 @@</div><div>           <attribute name='cpus'></div><div>             <ref name='cpuset'/></div><div>           </attribute></div><div>+          <zeroOrMore></div><div>+            <element name='control'></div><div>+              <attribute name='min'></div><div>+                <ref name='unsignedInt'/></div><div>+              </attribute></div><div>+              <attribute name='unit'></div><div>+                <ref name='unit'/></div><div>+              </attribute></div><div>+              <attribute name='scope'></div><div>+                <choice></div><div>+                  <value>both</value></div><div>+                  <value>code</value></div><div>+                  <value>data</value></div><div>+                </choice></div><div>+              </attribute></div><div>+              <attribute name='max_allocation'></div><div>+                <ref name='unsignedInt'/></div><div>+              </attribute></div><div>+            </element></div><div>+          </zeroOrMore></div><div>         </element></div><div>       </oneOrMore></div><div>     </element></div><div>diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c</div><div>index d699b08..c4a1fdf 100644</div><div>--- a/src/conf/capabilities.c</div><div>+++ b/src/conf/capabilities.c</div><div>@@ -51,6 +51,7 @@</div><div> #define VIR_FROM_THIS VIR_FROM_CAPABILITIES</div><div> </div><div> #define SYSFS_SYSTEM_PATH "/sys/devices/system"</div><div>+#define SYSFS_RESCTRL_PATH "/sys/fs/resctrl"</div><div> </div><div> VIR_LOG_INIT("conf.capabilities")</div><div> </div><div>@@ -872,6 +873,9 @@ virCapabilitiesFormatCaches(virBufferPtr buf,</div><div>                             virCapsHostCacheBankPtr *caches)</div><div> {</div><div>     size_t i = 0;</div><div>+    size_t j = 0;</div><div>+    int indent = virBufferGetIndent(buf, false);</div><div>+    virBuffer controlBuf = VIR_BUFFER_INITIALIZER;</div><div> </div><div>     if (!ncaches)</div><div>         return 0;</div><div>@@ -893,13 +897,35 @@ virCapabilitiesFormatCaches(virBufferPtr buf,</div><div>          */</div><div>         virBufferAsprintf(buf,</div><div>                           "<bank id='%u' level='%u' type='%s' "</div><div>-                          "size='%llu' unit='%s' cpus='%s'/>\n",</div><div>+                          "size='%llu' unit='%s' cpus='%s'",</div><div>                           bank->id, bank->level,</div><div>                           virCacheTypeToString(bank->type),</div><div>                           bank->size >> (kilos * 10),</div><div>                           kilos ? "KiB" : "B",</div><div>                           cpus_str);</div><div> </div><div>+        virBufferAdjustIndent(&controlBuf, indent + 4);</div><div>+        for (j = 0; j < bank->ncontrols; j++) {</div><div>+            bool min_kilos = !(bank->controls[j]->min % 1024);</div><div>+            virBufferAsprintf(&controlBuf,</div><div>+                              "<control min='%llu' unit='%s' "</div><div>+                              "scope='%s' max_allocation='%u'/>\n",</div><div>+                              bank->controls[j]->min >> (min_kilos * 10),</div><div>+                              min_kilos ? "KiB" : "B",</div><div>+                              virCacheTypeToString(bank->controls[j]->scope),</div><div>+                              bank->controls[j]->max_allocation);</div><div>+        }</div><div>+</div><div>+        if (virBufferUse(&controlBuf)) {</div><div>+            virBufferAddLit(buf, ">\n");</div><div>+            virBufferAddBuffer(buf, &controlBuf);</div><div>+            virBufferAddLit(buf, "</bank>\n");</div><div>+</div><div>+        } else {</div><div>+            virBufferAddLit(buf, "/>\n");</div><div>+        }</div><div>+</div><div>+        virBufferFreeAndReset(&controlBuf);</div><div>         VIR_FREE(cpus_str);</div><div>     }</div><div> </div><div>@@ -1519,13 +1545,102 @@ virCapsHostCacheBankEquals(virCapsHostCacheBankPtr a,</div><div> void</div><div> virCapsHostCacheBankFree(virCapsHostCacheBankPtr ptr)</div><div> {</div><div>+    size_t i;</div><div>+</div><div>     if (!ptr)</div><div>         return;</div><div> </div><div>     virBitmapFree(ptr->cpus);</div><div>+    for (i = 0; i < ptr->ncontrols; i++)</div><div>+        VIR_FREE(ptr->controls[i]);</div><div>+    VIR_FREE(ptr->controls);</div><div>     VIR_FREE(ptr);</div><div> }</div><div> </div><div>+/* test which TYPE of cache control supported</div><div>+ * -1: don't support</div><div>+ *  0: cat</div><div>+ *  1: cdp</div><div>+ */</div><div>+static int</div><div>+virCapabilitiesGetCacheControlType(virCapsHostCacheBankPtr bank)</div><div>+{</div><div>+    int ret = -1;</div><div>+    char *path = NULL;</div><div>+    if (virAsprintf(&path,</div><div>+                    SYSFS_RESCTRL_PATH "/info/L%u",</div><div>+                    bank->level) < 0)</div><div>+        return -1;</div><div>+</div><div>+    if (virFileExists(path)) {</div><div>+        ret = 0;</div><div>+    } else {</div><div>+        VIR_FREE(path);</div><div>+        /* for CDP enabled case, CODE and DATA will show together */</div><div>+        if (virAsprintf(&path,</div><div>+                        SYSFS_RESCTRL_PATH "/info/L%uCODE",</div><div>+                        bank->level) < 0)</div><div>+            return -1;</div><div>+        if (virFileExists(path))</div><div>+            ret = 1;</div><div>+    }</div><div>+</div><div>+    VIR_FREE(path);</div><div>+    return ret;</div><div>+}</div><div>+</div><div>+static int</div><div>+virCapabilitiesGetCacheControl(virCapsHostCacheBankPtr bank,</div><div>+                               virCacheType scope)</div><div>+{</div><div>+    int ret = -1;</div><div>+    char *path = NULL;</div><div>+    char *cbm_mask = NULL;</div><div>+    char *type_upper = NULL;</div><div>+    virCapsHostCacheControlPtr control;</div><div>+</div><div>+    if (VIR_ALLOC(control) < 0)</div><div>+        goto cleanup;</div><div>+</div><div>+    if ((scope > VIR_CACHE_TYPE_BOTH)</div><div>+            && (virStringToUpper(&type_upper, virCacheTypeToString(scope)) < 0))</div><div>+        goto cleanup;</div><div>+</div><div>+    if (virFileReadValueUint(&control->max_allocation,</div><div>+                             SYSFS_RESCTRL_PATH "/info/L%u%s/num_closids",</div><div>+                             bank->level,</div><div>+                             type_upper ? type_upper : "") < 0)</div><div>+        goto cleanup;</div><div>+</div><div>+    if (virFileReadValueString(&cbm_mask,</div><div>+                               SYSFS_RESCTRL_PATH</div><div>+                               "/info/L%u%s/cbm_mask",</div><div>+                               bank->level,</div><div>+                               type_upper ? type_upper: "") < 0)</div><div>+        goto cleanup;</div><div>+</div><div>+    virStringTrimOptionalNewline(cbm_mask);</div><div>+</div><div>+    /* cbm_mask: cache bit mask, it's in hex, eg: fffff */</div><div>+    control->min = bank->size / (strlen(cbm_mask) * 4);</div><div>+</div><div>+    control->scope = scope;</div><div>+</div><div>+    if (VIR_APPEND_ELEMENT(bank->controls,</div><div>+                           bank->ncontrols,</div><div>+                           control) < 0)</div><div>+        goto cleanup;</div><div>+</div><div>+    ret = 0;</div><div>+</div><div>+ cleanup:</div><div>+    VIR_FREE(path);</div><div>+    VIR_FREE(cbm_mask);</div><div>+    VIR_FREE(type_upper);</div><div>+    VIR_FREE(control);</div><div>+    return ret;</div><div>+}</div><div>+</div><div> int</div><div> virCapabilitiesInitCaches(virCapsPtr caps)</div><div> {</div><div>@@ -1534,6 +1649,7 @@ virCapabilitiesInitCaches(virCapsPtr caps)</div><div>     ssize_t pos = -1;</div><div>     DIR *dirp = NULL;</div><div>     int ret = -1;</div><div>+    int typeret;</div><div>     char *path = NULL;</div><div>     char *type = NULL;</div><div>     struct dirent *ent = NULL;</div><div>@@ -1607,12 +1723,27 @@ virCapabilitiesInitCaches(virCapsPtr caps)</div><div>                                        SYSFS_SYSTEM_PATH, pos, ent->d_name) < 0)</div><div>                 goto cleanup;</div><div> </div><div>+            typeret = virCapabilitiesGetCacheControlType(bank);</div><div>+</div><div>+            if (typeret == 0) {</div><div>+                if (virCapabilitiesGetCacheControl(bank,</div><div>+                                                   VIR_CACHE_TYPE_BOTH) < 0)</div><div>+                    goto cleanup;</div><div>+            } else if (typeret == 1) {</div><div>+                if ((virCapabilitiesGetCacheControl(bank,</div><div>+                                                    VIR_CACHE_TYPE_CODE) < 0) ||</div><div>+                        (virCapabilitiesGetCacheControl(bank,</div><div>+                                                        VIR_CACHE_TYPE_DATA) < 0))</div><div>+                    goto cleanup;</div><div>+            }</div><div>+</div><div>             kernel_type = virCacheKernelTypeFromString(type);</div><div>             if (kernel_type < 0) {</div><div>                 virReportError(VIR_ERR_INTERNAL_ERROR,</div><div>                                _("Unknown cache type '%s'"), type);</div><div>                 goto cleanup;</div><div>             }</div><div>+</div><div>             bank->type = kernel_type;</div><div>             VIR_FREE(type);</div><div> </div><div>diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h</div><div>index a8cccf7..ee87d59 100644</div><div>--- a/src/conf/capabilities.h</div><div>+++ b/src/conf/capabilities.h</div><div>@@ -148,6 +148,14 @@ typedef enum {</div><div> </div><div> VIR_ENUM_DECL(virCache);</div><div> </div><div>+typedef struct _virCapsHostCacheControl virCapsHostCacheControl;</div><div>+typedef virCapsHostCacheControl *virCapsHostCacheControlPtr;</div><div>+struct _virCapsHostCacheControl {</div><div>+    unsigned long long min; /* minimum cache control size in B */</div><div>+    virCacheType scope;  /* data, code or both */</div><div>+    unsigned int max_allocation; /* max number of supported allocations */</div><div>+};</div><div>+</div><div> typedef struct _virCapsHostCacheBank virCapsHostCacheBank;</div><div> typedef virCapsHostCacheBank *virCapsHostCacheBankPtr;</div><div> struct _virCapsHostCacheBank {</div><div>@@ -156,6 +164,8 @@ struct _virCapsHostCacheBank {</div><div>     unsigned long long size; /* B */</div><div>     virCacheType type;  /* Data, Instruction or Unified */</div><div>     virBitmapPtr cpus;  /* All CPUs that share this bank */</div><div>+    size_t ncontrols;</div><div>+    virCapsHostCacheControlPtr *controls;</div><div> };</div><div> </div><div> typedef struct _virCapsHost virCapsHost;</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus</div><div>new file mode 100644</div><div>index 0000000..b3a79aa</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/cpus</div><div>@@ -0,0 +1 @@</div><div>+ffffff,ffffffff,ffffffff</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask</div><div>new file mode 100755</div><div>index 0000000..78031da</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/cbm_mask</div><div>@@ -0,0 +1 @@</div><div>+fffff</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits</div><div>new file mode 100755</div><div>index 0000000..d00491f</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/min_cbm_bits</div><div>@@ -0,0 +1 @@</div><div>+1</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids</div><div>new file mode 100755</div><div>index 0000000..45a4fb7</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3CODE/num_closids</div><div>@@ -0,0 +1 @@</div><div>+8</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask</div><div>new file mode 100755</div><div>index 0000000..78031da</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/cbm_mask</div><div>@@ -0,0 +1 @@</div><div>+fffff</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits</div><div>new file mode 100755</div><div>index 0000000..d00491f</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/min_cbm_bits</div><div>@@ -0,0 +1 @@</div><div>+1</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids</div><div>new file mode 100755</div><div>index 0000000..45a4fb7</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/info/L3DATA/num_closids</div><div>@@ -0,0 +1 @@</div><div>+8</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus</div><div>new file mode 100644</div><div>index 0000000..ede4cc2</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/cpus</div><div>@@ -0,0 +1 @@</div><div>+000000,00000000,00000000</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata</div><div>new file mode 100644</div><div>index 0000000..a0ef381</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/schemata</div><div>@@ -0,0 +1,2 @@</div><div>+L3DATA:0=c0000;1=c0000</div><div>+L3CODE:0=30000;1=30000</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/manualres/tasks</div><div>new file mode 100644</div><div>index 0000000..e69de29</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata</div><div>new file mode 100644</div><div>index 0000000..89dc76b</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/schemata</div><div>@@ -0,0 +1,2 @@</div><div>+L3DATA:0=fffff;1=fffff</div><div>+L3CODE:0=fffff;1=fffff</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks b/tests/vircaps2xmldata/linux-resctrl-cdp/resctrl/tasks</div><div>new file mode 100644</div><div>index 0000000..e69de29</div><div>diff --git a/tests/vircaps2xmldata/linux-resctrl-cdp/system b/tests/vircaps2xmldata/linux-resctrl-cdp/system</div><div>new file mode 120000</div><div>index 0000000..2f3a1d9</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/linux-resctrl-cdp/system</div><div>@@ -0,0 +1 @@</div><div>+../linux-resctrl/system/</div><div>\ No newline at end of file</div><div>diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div>new file mode 100644</div><div>index 0000000..c9f460d</div><div>--- /dev/null</div><div>+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div>@@ -0,0 +1,55 @@</div><div>+<capabilities></div><div>+</div><div>+  <host></div><div>+    <cpu></div><div>+      <arch>x86_64</arch></div><div>+    </cpu></div><div>+    <power_management/></div><div>+    <migration_features></div><div>+      <live/></div><div>+    </migration_features></div><div>+    <topology></div><div>+      <cells num='2'></div><div>+        <cell id='0'></div><div>+          <memory unit='KiB'>1048576</memory></div><div>+          <pages unit='KiB' size='4'>2048</pages></div><div>+          <pages unit='KiB' size='2048'>4096</pages></div><div>+          <pages unit='KiB' size='1048576'>6144</pages></div><div>+          <cpus num='6'></div><div>+            <cpu id='0' socket_id='0' core_id='0' siblings='0'/></div><div>+            <cpu id='1' socket_id='0' core_id='1' siblings='1'/></div><div>+            <cpu id='2' socket_id='0' core_id='2' siblings='2'/></div><div>+            <cpu id='3' socket_id='0' core_id='3' siblings='3'/></div><div>+            <cpu id='4' socket_id='0' core_id='4' siblings='4'/></div><div>+            <cpu id='5' socket_id='0' core_id='5' siblings='5'/></div><div>+          </cpus></div><div>+        </cell></div><div>+        <cell id='1'></div><div>+          <memory unit='KiB'>2097152</memory></div><div>+          <pages unit='KiB' size='4'>4096</pages></div><div>+          <pages unit='KiB' size='2048'>6144</pages></div><div>+          <pages unit='KiB' size='1048576'>8192</pages></div><div>+          <cpus num='6'></div><div>+            <cpu id='6' socket_id='1' core_id='0' siblings='6'/></div><div>+            <cpu id='7' socket_id='1' core_id='1' siblings='7'/></div><div>+            <cpu id='8' socket_id='1' core_id='2' siblings='8'/></div><div>+            <cpu id='9' socket_id='1' core_id='3' siblings='9'/></div><div>+            <cpu id='10' socket_id='1' core_id='4' siblings='10'/></div><div>+            <cpu id='11' socket_id='1' core_id='5' siblings='11'/></div><div>+          </cpus></div><div>+        </cell></div><div>+      </cells></div><div>+    </topology></div><div>+    <cache></div><div>+      <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'></div><div>+        <control min='768' unit='KiB' scope='code' max_allocation='8'/></div><div>+        <control min='768' unit='KiB' scope='data' max_allocation='8'/></div><div>+      </bank></div><div>+      <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'></div><div>+        <control min='768' unit='KiB' scope='code' max_allocation='8'/></div><div>+        <control min='768' unit='KiB' scope='data' max_allocation='8'/></div><div>+      </bank></div><div>+    </cache></div><div>+  </host></div><div>+</div><div>+</capabilities></div><div>diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>index 6677791..04a5eb8 100644</div><div>--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>@@ -41,8 +41,12 @@</div><div>       </cells></div><div>     </topology></div><div>     <cache></div><div>-      <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'/></div><div>-      <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'/></div><div>+      <bank id='0' level='3' type='both' size='15360' unit='KiB' cpus='0-5'></div><div>+        <control min='768' unit='KiB' scope='both' max_allocation='4'/></div><div>+      </bank></div><div>+      <bank id='1' level='3' type='both' size='15360' unit='KiB' cpus='6-11'></div><div>+        <control min='768' unit='KiB' scope='both' max_allocation='4'/></div><div>+      </bank></div><div>     </cache></div><div>   </host></div><div> </div><div>diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c</div><div>index 137598e..ae1cd52 100644</div><div>--- a/tests/vircaps2xmltest.c</div><div>+++ b/tests/vircaps2xmltest.c</div><div>@@ -47,6 +47,7 @@ test_virCapabilities(const void *opaque)</div><div>     char *capsXML = NULL;</div><div>     char *path = NULL;</div><div>     char *dir = NULL;</div><div>+    char *resctrl = NULL;</div><div>     int ret = -1;</div><div> </div><div>     /*</div><div>@@ -58,7 +59,12 @@ test_virCapabilities(const void *opaque)</div><div>                     data->resctrl ? "/system" : "") < 0)</div><div>         goto cleanup;</div><div> </div><div>+    if (virAsprintf(&resctrl, "%s/vircaps2xmldata/linux-%s/resctrl",</div><div>+                    abs_srcdir, data->filename) < 0)</div><div>+        goto cleanup;</div><div>+</div><div>     virFileWrapperAddPrefix("/sys/devices/system", dir);</div><div>+    virFileWrapperAddPrefix("/sys/fs/resctrl", resctrl);</div><div>     caps = virCapabilitiesNew(data->arch, data->offlineMigrate, data->liveMigrate);</div><div> </div><div>     if (!caps)</div><div>@@ -84,6 +90,7 @@ test_virCapabilities(const void *opaque)</div><div> </div><div>  cleanup:</div><div>     VIR_FREE(dir);</div><div>+    VIR_FREE(resctrl);</div><div>     VIR_FREE(path);</div><div>     VIR_FREE(capsXML);</div><div>     virObjectUnref(caps);</div><div>@@ -112,6 +119,7 @@ mymain(void)</div><div>     DO_TEST("caches", VIR_ARCH_X86_64);</div><div> </div><div>     DO_TEST_FULL("resctrl", VIR_ARCH_X86_64, true, true, true);</div><div>+    DO_TEST_FULL("resctrl-cdp", VIR_ARCH_X86_64, true, true, true);</div><div> </div><div>     return ret;</div><div> }</div><div>-- </div><div>1.9.1</div><div><br></div><div>--</div><div>libvir-list mailing list</div><div><a href="mailto:libvir-list@redhat.com">libvir-list@redhat.com</a></div><div><a href="https://www.redhat.com/mailman/listinfo/libvir-list">https://www.redhat.com/mailman/listinfo/libvir-list</a></div></div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>