<div>hi Martin
</div><div>Thanks for you reviewing and I am okay with the diff as you suggested.</div><div><br></div><div>Please help to push this patch.</div><div><br></div><div>Eli.</div>
<div></div>
<p style="color: #A0A0A8;">On Sunday, 4 June 2017 at 5:39 PM, Martin Kletzander wrote:</p>
<blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
<span><div><div><div>On Wed, May 17, 2017 at 05:08:33PM +0800, taget wrote:</div><blockquote type="cite"><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></blockquote><div><br></div><div>This should be 'type', as discussed before.</div><div><br></div><blockquote type="cite"><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></blockquote><div><br></div><div>And hence this could be its own new definition, since it is already used</div><div>in the bank definition.</div><div><br></div><blockquote type="cite"><div>+ <attribute name='max_allocation'></div></blockquote><div><br></div><div>Since we are trying to prefer camelCase, even in the XML, and this</div><div>should be plural, I would suggest 'maxAllocs'.</div><div><br></div><blockquote type="cite"><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><br></div><div>#define SYSFS_SYSTEM_PATH "/sys/devices/system"</div><div>+#define SYSFS_RESCTRL_PATH "/sys/fs/resctrl"</div><div><br></div><div>VIR_LOG_INIT("conf.capabilities")</div><div><br></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><br></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><br></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></blockquote><div><br></div><div>Spurious line.</div><div><br></div><blockquote type="cite"><div><div>+ } else {</div><div>+ virBufferAddLit(buf, "/>\n");</div><div>+ }</div><div>+</div><div>+ virBufferFreeAndReset(&controlBuf);</div></div></blockquote><div><br></div><div>No need for this, it is already done by virBufferAddBuffer.</div><div><br></div><blockquote type="cite"><div><div> VIR_FREE(cpus_str);</div><div> }</div><div><br></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><br></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><br></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></blockquote><div><br></div><div>I would slightly reword this comment.</div><div><br></div><blockquote type="cite"><div><div>+static int</div><div>+virCapabilitiesGetCacheControlType(virCapsHostCacheBankPtr bank)</div><div>+{</div><div>+ int ret = -1;</div><div>+ char *path = NULL;</div></div></blockquote><div><br></div><div>Empty line here</div><div><br></div><blockquote type="cite"><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></blockquote><div><br></div><div>"If CDP is enabled, there will be both CODE and DATA, but it's enough to</div><div>check one of those only."</div><div><br></div><blockquote type="cite"><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></blockquote><div><br></div><div>Order comparison on enum values should be done only in rare cases,</div><div>and there should then be some explanation why the order must be kept and</div><div>where to add what new values. I would just do != here instead.</div><div><br></div><div>Also the indentation is wrong, the && belongs to the previous line and</div><div>there's too much parentheses.</div><div><br></div><blockquote type="cite"><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></blockquote><div><br></div><div>I believe this should be multiplied by min_cbm_bits.</div><div><br></div><blockquote type="cite"><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><br></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></blockquote><div><br></div><div>Again, wrong indentation and unnecessary parentheses.</div><div><br></div><div>Otherwise it looks good, so ACK with those differences and reworded</div><div>commit message. Let me know if you agree and I can push it immediately.</div><div>The suggested diff follows:</div><div><br></div><div>diff --git i/docs/schemas/capability.rng w/docs/schemas/capability.rng</div><div>index 927fc184de41..e5cbfa362ec0 100644</div><div>--- i/docs/schemas/capability.rng</div><div>+++ w/docs/schemas/capability.rng</div><div>@@ -261,13 +261,7 @@</div><div> <attribute name='level'></div><div> <ref name='unsignedInt'/></div><div> </attribute></div><div>- <attribute name='type'></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>+ <ref name='cacheType'/></div><div> <attribute name='size'></div><div> <ref name='unsignedInt'/></div><div> </attribute></div><div>@@ -285,14 +279,8 @@</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='cacheType'/></div><div>+ <attribute name='maxAllocs'></div><div> <ref name='unsignedInt'/></div><div> </attribute></div><div> </element></div><div>@@ -302,6 +290,16 @@</div><div> </element></div><div> </define></div><div><br></div><div>+ <define name='cacheType'></div><div>+ <attribute name='type'></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>+ </define></div><div>+</div><div> <define name='guestcaps'></div><div> <element name='guest'></div><div> <ref name='ostype'/></div><div>diff --git i/src/conf/capabilities.c w/src/conf/capabilities.c</div><div>index 8cd2957e9c88..3becc7e18c62 100644</div><div>--- i/src/conf/capabilities.c</div><div>+++ w/src/conf/capabilities.c</div><div>@@ -909,7 +909,7 @@ virCapabilitiesFormatCaches(virBufferPtr buf,</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>+ "type='%s' maxAllocs='%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>@@ -920,12 +920,10 @@ virCapabilitiesFormatCaches(virBufferPtr buf,</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><br></div><div>- virBufferFreeAndReset(&controlBuf);</div><div> VIR_FREE(cpus_str);</div><div> }</div><div><br></div><div>@@ -1557,16 +1555,19 @@ virCapsHostCacheBankFree(virCapsHostCacheBankPtr ptr)</div><div> VIR_FREE(ptr);</div><div> }</div><div><br></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>+ * This function tests which TYPE of cache control is supported</div><div>+ * Return values are:</div><div>+ * -1: not supported</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>+</div><div> if (virAsprintf(&path,</div><div> SYSFS_RESCTRL_PATH "/info/L%u",</div><div> bank->level) < 0)</div><div>@@ -1576,7 +1577,10 @@ virCapabilitiesGetCacheControlType(virCapsHostCacheBankPtr bank)</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>+ /*</div><div>+ * If CDP is enabled, there will be both CODE and DATA, but it's enough</div><div>+ * to check one of those only.</div><div>+ */</div><div> if (virAsprintf(&path,</div><div> SYSFS_RESCTRL_PATH "/info/L%uCODE",</div><div> bank->level) < 0)</div><div>@@ -1597,13 +1601,14 @@ virCapabilitiesGetCacheControl(virCapsHostCacheBankPtr bank,</div><div> char *path = NULL;</div><div> char *cbm_mask = NULL;</div><div> char *type_upper = NULL;</div><div>+ unsigned int min_cbm_bits = 0;</div><div> virCapsHostCacheControlPtr control;</div><div><br></div><div> if (VIR_ALLOC(control) < 0)</div><div> goto cleanup;</div><div><br></div><div>- if ((scope > VIR_CACHE_TYPE_BOTH)</div><div>- && (virStringToUpper(&type_upper, virCacheTypeToString(scope)) < 0))</div><div>+ if (scope != VIR_CACHE_TYPE_BOTH &&</div><div>+ virStringToUpper(&type_upper, virCacheTypeToString(scope)) < 0)</div><div> goto cleanup;</div><div><br></div><div> if (virFileReadValueUint(&control->max_allocation,</div><div>@@ -1619,10 +1624,16 @@ virCapabilitiesGetCacheControl(virCapsHostCacheBankPtr bank,</div><div> type_upper ? type_upper: "") < 0)</div><div> goto cleanup;</div><div><br></div><div>+ if (virFileReadValueUint(&min_cbm_bits,</div><div>+ SYSFS_RESCTRL_PATH "/info/L%u%s/min_cbm_bits",</div><div>+ bank->level,</div><div>+ type_upper ? type_upper : "") < 0)</div><div>+ goto cleanup;</div><div>+</div><div> virStringTrimOptionalNewline(cbm_mask);</div><div><br></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>+ control->min = min_cbm_bits * bank->size / (strlen(cbm_mask) * 4);</div><div><br></div><div> control->scope = scope;</div><div><br></div><div>@@ -1732,10 +1743,10 @@ virCapabilitiesInitCaches(virCapsPtr caps)</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>+ 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><br></div><div>diff --git i/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml w/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div>index c9f460d8a227..49aa0b98ca88 100644</div><div>--- i/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div>+++ w/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml</div><div>@@ -42,12 +42,12 @@</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>+ <control min='768' unit='KiB' type='code' maxAllocs='8'/></div><div>+ <control min='768' unit='KiB' type='data' maxAllocs='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>+ <control min='768' unit='KiB' type='code' maxAllocs='8'/></div><div>+ <control min='768' unit='KiB' type='data' maxAllocs='8'/></div><div> </bank></div><div> </cache></div><div> </host></div><div>diff --git i/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml w/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>index 04a5eb895727..cb78b4ab788d 100644</div><div>--- i/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>+++ w/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml</div><div>@@ -42,10 +42,10 @@</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='both' max_allocation='4'/></div><div>+ <control min='1536' unit='KiB' type='both' maxAllocs='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>+ <control min='1536' unit='KiB' type='both' maxAllocs='4'/></div><div> </bank></div><div> </cache></div><div> </host></div><div>--</div><div>Martin</div></div></div></span>
</blockquote>
<div>
<br>
</div>