On Tue, Mar 29, 2011 at 02:32:25PM +0800, Osier Yang wrote:
Not sure if it's the correct way to add cputune xml for xend
driver,
and besides, seems "xm driver" and "xen hypervisor" also support
vcpu affinity, do we need to add support for them too?
---
src/xen/xend_internal.c | 30 ++++++++++++++++++++++++++----
1 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index bfaed65..8859373 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -2233,11 +2233,12 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int
vcpus,
*/
int
xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
- unsigned char *cpumap, int maplen)
+ unsigned char *cpumap, int maplen)
{
char buf[VIR_UUID_BUFLEN], mapstr[sizeof(cpumap_t) * 64];
- int i, j;
+ int i, j, ret;
xenUnifiedPrivatePtr priv;
+ virDomainDefPtr def = NULL;
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|| (cpumap == NULL) || (maplen < 1) || (maplen > (int)sizeof(cpumap_t))) {
@@ -2265,8 +2266,29 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
mapstr[strlen(mapstr) - 1] = 0;
snprintf(buf, sizeof(buf), "%d", vcpu);
- return(xend_op(domain->conn, domain->name, "op", "pincpu",
"vcpu", buf,
- "cpumap", mapstr, NULL));
+
+ ret = xend_op(domain->conn, domain->name, "op", "pincpu",
"vcpu", buf,
+ "cpumap", mapstr, NULL);
+
+ if (!(def = xenDaemonDomainFetch(domain->conn,
+ domain->id,
+ domain->name,
+ NULL)))
+ goto cleanup;
+
+ if (ret == 0) {
+ if (virDomainVcpupinAdd(def, cpumap, maplen, vcpu) < 0) {
+ virXendError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("failed to add vcpupin xml
entry"));
+ return (-1);
+ }
+ }
+
+ return ret;
+
+cleanup:
+ virDomainDefFree(def);
+ return -1;
}
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/