<div>
                    <br>
                </div>
                <div><div><br></div><div>-- </div><div>Eli Qiao</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig">Sparrow</a></div><div><br></div></div>
                  
                <p style="color: #A0A0A8;">On Tuesday, 7 February 2017 at 12:02 AM, Daniel P. Berrange wrote:</p><blockquote type="cite"><div>
                    <span><div><div><div>On Mon, Feb 06, 2017 at 10:23:37AM +0800, Eli Qiao wrote:</div><blockquote type="cite"><div><div>This patch expose cache information to host's capabilites xml.</div><div><br></div><div>For l3 cache allocation</div><div><cache></div><div>  <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3'/></div><div>  </bank></div><div>  <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3'/></div><div>  </bank></div><div></cache></div><div><br></div><div>For l3 cache allocation supported cdp(seperate data/code):</div><div><cache></div><div>  <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3DATA'/></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3CODE'/></div><div>  </bank></div><div>  <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3DATA'/></div><div>    <control min='2816' reserved='2816' unit='KiB' scope='L3CODE'/></div><div>  </bank></div><div></cache></div><div><br></div><div>RFC on mailing list.</div><div><a href="https://www.redhat.com/archives/libvir-list/2017-January/msg00644.html">https://www.redhat.com/archives/libvir-list/2017-January/msg00644.html</a></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> src/conf/capabilities.c      | 56 ++++++++++++++++++++++++++++++++++++</div><div> src/conf/capabilities.h      | 23 +++++++++++++++</div><div> src/libvirt_private.syms     |  1 +</div><div> src/qemu/qemu_capabilities.c | 68 ++++++++++++++++++++++++++++++++++++++++++++</div><div> src/qemu/qemu_driver.c       |  4 +++</div><div> 5 files changed, 152 insertions(+)</div></div></blockquote><div><br></div><div><br></div><blockquote type="cite"><div><div>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c</div><div>index 3247d25..23f416d 100644</div><div>--- a/src/qemu/qemu_capabilities.c</div><div>+++ b/src/qemu/qemu_capabilities.c</div><div>@@ -45,6 +45,7 @@</div><div> #include "qemu_domain.h"</div><div> #define __QEMU_CAPSRIV_H_ALLOW__</div><div> #include "qemu_capspriv.h"</div><div>+#include "virresctrl.h"</div><div> </div><div> #include <fcntl.h></div><div> #include <sys/stat.h></div><div>@@ -1098,7 +1099,71 @@ virQEMUCapsInitCPU(virCapsPtr caps,</div><div>     goto cleanup;</div><div> }</div><div> </div><div>+static int</div><div>+virQEMUCapsInitCache(virCapsPtr caps)</div><div>+{</div><div>+    int i, j;</div><div>+    virResCtrlPtr resctrl;</div><div>+    virCapsHostCacheBankPtr bank;</div><div>+</div><div>+    for (i = 0; i < RDT_NUM_RESOURCES; i ++)</div><div>+    {</div><div>+        /* L3DATA and L3CODE share L3 resources */</div><div>+        if ( i == RDT_RESOURCE_L3CODE )</div><div>+            continue;</div><div> </div><div>+        resctrl = virResCtrlGet(i);</div><div>+</div><div>+        if(resctrl->enabled) {</div><div>+            for( j = 0; j < resctrl->num_banks; j++)</div><div>+            {</div><div>+                if(VIR_RESIZE_N(caps->host.cachebank, caps->host.ncachebank_max,</div><div>+                                caps->host.ncachebank, 1) < 0)</div><div>+                    return -1;</div><div>+</div><div>+                if(VIR_ALLOC(bank) < 0)</div><div>+                    return -1;</div><div>+</div><div>+                bank->id = resctrl->cache_banks[j].host_id;</div><div>+                if(VIR_STRDUP(bank->type, resctrl->cache_level) < 0)</div><div>+                    goto err;</div><div>+                if(VIR_STRDUP(bank->cpus, virBitmapFormat(resctrl->cache_banks[j].cpu_mask)) < 0)</div><div>+                    goto err;</div><div>+                bank->size = resctrl->cache_banks[j].cache_size;</div><div>+                /*L3DATA and L3CODE shares L3 cache resources, so fill them to the control element*/</div><div>+                if ( i == RDT_RESOURCE_L3DATA ) {</div><div>+                    if(VIR_EXPAND_N(bank->control, bank->ncontrol, 2) < 0)</div><div>+                        goto err;</div><div>+</div><div>+                    bank->control[0].min = virResCtrlGet(RDT_RESOURCE_L3DATA)->cache_banks[j].cache_min;</div><div>+                    bank->control[0].reserved = bank->control[0].min * (virResCtrlGet(RDT_RESOURCE_L3DATA)->min_cbm_bits);</div><div>+                    if(VIR_STRDUP(bank->control[0].scope,</div><div>+                                  virResCtrlGet(RDT_RESOURCE_L3DATA)->name) < 0)</div><div>+                        goto err;</div><div>+</div><div>+                    bank->control[1].min = virResCtrlGet(RDT_RESOURCE_L3CODE)->cache_banks[j].cache_min;</div><div>+                    bank->control[1].reserved = bank->control[1].min * (virResCtrlGet(RDT_RESOURCE_L3CODE)->min_cbm_bits);</div><div>+                    if(VIR_STRDUP(bank->control[1].scope,</div><div>+                                  virResCtrlGet(RDT_RESOURCE_L3CODE)->name) < 0)</div><div>+                        goto err;</div><div>+                }</div><div>+                else {</div><div>+                    if(VIR_EXPAND_N(bank->control, bank->ncontrol, 1) < 0)</div><div>+                        goto err;</div><div>+                    bank->control[0].min = resctrl->cache_banks[j].cache_min;</div><div>+                    bank->control[0].reserved = bank->control[0].min * resctrl->min_cbm_bits;</div><div>+                    if(VIR_STRDUP(bank->control[0].scope, resctrl->name) < 0)</div><div>+                        goto err;</div><div>+                }</div><div>+                caps->host.cachebank[caps->host.ncachebank++] = bank;</div><div>+            }</div><div>+        }</div><div>+    }</div><div>+    return 0;</div><div>+err:</div><div>+    VIR_FREE(bank);</div><div>+    return -1;</div><div>+}</div></div></blockquote><div><br></div><div>I don't think this code should be in the QEMU driver - better to have</div><div>it in nodeinfo.c so it is common to all drivers.</div><div><br></div></div></div></span></div></blockquote><div>Sure, I will move it to nodeinfo.c </div><blockquote type="cite"><div><span><div><div><div><br></div><div>Regards,</div><div>Daniel</div><div>-- </div><div>|: <a href="http://berrange.com">http://berrange.com</a>      -o-    <a href="http://www.flickr.com/photos/dberrange/">http://www.flickr.com/photos/dberrange/</a> :|</div><div>|: <a href="http://libvirt.org">http://libvirt.org</a>              -o-             <a href="http://virt-manager.org">http://virt-manager.org</a> :|</div><div>|: <a href="http://entangle-photo.org">http://entangle-photo.org</a>       -o-    <a href="http://search.cpan.org/~danberr/">http://search.cpan.org/~danberr/</a> :|</div></div></div></span>
                  
                  
                  
                  
                </div></blockquote><div>
                    <br>
                </div>