<div dir="auto">Hello Libvirt community,</div><div dir="auto"><br></div><div dir="auto">I want to apologize for my attempts to send the same patches multiple times, but for some reason I am not able to send Patch 1-2 along with cover letter with this patch set through git send-email.</div><div dir="auto">I even tried sending them separately but it didn’t help.</div><div dir="auto"><br></div><div dir="auto">When I’m trying sending Patch set(0-9), only Patches 3-9 are being successfully sent to mailing list and I’m getting the message on my gmail account that your message to <a href="mailto:libvir-list@redhat.com">libvir-list@redhat.com</a> has been blocked.</div><div dir="auto">I’m still trying to solve this issue but I would appreciate any suggestion on this matter.</div><div dir="auto"><br></div><div dir="auto">Thanks,</div><div dir="auto">Prakhar Bansal</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Sep 5, 2020 at 2:31 PM <<a href="mailto:libvir-list-request@redhat.com">libvir-list-request@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send libvir-list mailing list submissions to<br><br>        <a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br><br><br><br>To subscribe or unsubscribe via the World Wide Web, visit<br><br>        <a href="https://www.redhat.com/mailman/listinfo/libvir-list" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/libvir-list</a><br><br>or, via email, send a message with subject or body 'help' to<br><br>        <a href="mailto:libvir-list-request@redhat.com" target="_blank">libvir-list-request@redhat.com</a><br><br><br><br>You can reach the person managing the list at<br><br>        <a href="mailto:libvir-list-owner@redhat.com" target="_blank">libvir-list-owner@redhat.com</a><br><br><br><br>When replying, please edit your Subject line so it is more specific<br><br>than "Re: Contents of libvir-list digest..."<br><br><br><br><br><br>Today's Topics:<br><br><br><br>   1. [GSoC PATCH 6/9] Jailhouse driver: Implementation of<br><br>      DomainLookup*     callbacks (Prakhar Bansal)<br><br>   2. [GSoC PATCH 5/9] Jailhouse driver: Implementation of<br><br>      DomainInfo/State/List (Prakhar Bansal)<br><br>   3. [GSoC PATCH 7/9] Jailhouse driver: Implementation of<br><br>      DomainShutdown/Destroy callbacks (Prakhar Bansal)<br><br><br><br><br><br>----------------------------------------------------------------------<br><br><br><br>Message: 1<br><br>Date: Sat,  5 Sep 2020 16:30:00 -0500<br><br>From: Prakhar Bansal <<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>To: <a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br><br>Subject: [GSoC PATCH 6/9] Jailhouse driver: Implementation of<br><br>        DomainLookup*   callbacks<br><br>Message-ID: <<a href="mailto:20200905213003.10682-7-prakharbansal0910@gmail.com" target="_blank">20200905213003.10682-7-prakharbansal0910@gmail.com</a>><br><br>Content-Type: text/plain; charset=US-ASCII<br><br><br><br>Signed-off-by:Prakhar Bansal<<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>---<br><br> src/jailhouse/jailhouse_driver.c | 70 ++++++++++++++++++++++++++++----<br><br> 1 file changed, 61 insertions(+), 9 deletions(-)<br><br><br><br>diff --git a/src/jailhouse/jailhouse_driver.c b/src/jailhouse/jailhouse_driver.c<br><br>index 2bb249f996..8c84a23388 100644<br><br>--- a/src/jailhouse/jailhouse_driver.c<br><br>+++ b/src/jailhouse/jailhouse_driver.c<br><br>@@ -292,25 +292,77 @@ jailhouseConnectListAllDomains(virConnectPtr conn,<br><br> static virDomainPtr<br><br> jailhouseDomainLookupByID(virConnectPtr conn, int id)<br><br> {<br><br>-    UNUSED(conn);<br><br>-    UNUSED(id);<br><br>-    return NULL;<br><br>+virJailhouseDriverPtr driver = conn->privateData;<br><br>+    virDomainObjPtr cell;<br><br>+    virDomainPtr dom = NULL;<br><br>+<br><br>+    cell = virDomainObjListFindByID(driver->domains, id);<br><br>+<br><br>+    if (!cell) {<br><br>+        virReportError(VIR_ERR_NO_DOMAIN,<br><br>+                       _("No domain with matching ID '%d'"), id);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    if (virDomainLookupByIDEnsureACL(conn, cell->def) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    dom = virGetDomain(conn, cell->def->name, cell->def->uuid, cell->def->id);<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return dom;<br><br> }<br><br><br><br> static virDomainPtr<br><br> jailhouseDomainLookupByName(virConnectPtr conn, const char *name)<br><br> {<br><br>-    UNUSED(conn);<br><br>-    UNUSED(name);<br><br>-    return NULL;<br><br>+    virJailhouseDriverPtr driver = conn->privateData;<br><br>+    virDomainObjPtr cell;<br><br>+    virDomainPtr dom = NULL;<br><br>+<br><br>+    cell = virDomainObjListFindByName(driver->domains, name);<br><br>+<br><br>+    if (!cell) {<br><br>+        virReportError(VIR_ERR_NO_DOMAIN,<br><br>+                       _("No domain with matching name '%s'"), name);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    if (virDomainLookupByNameEnsureACL(conn, cell->def) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    dom = virGetDomain(conn, cell->def->name, cell->def->uuid, cell->def->id);<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return dom;<br><br> }<br><br><br><br> static virDomainPtr<br><br> jailhouseDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)<br><br> {<br><br>-    UNUSED(conn);<br><br>-    UNUSED(uuid);<br><br>-    return NULL;<br><br>+    virJailhouseDriverPtr driver = conn->privateData;<br><br>+    virDomainObjPtr cell;<br><br>+    virDomainPtr dom = NULL;<br><br>+<br><br>+    cell = virDomainObjListFindByUUID(driver->domains, uuid);<br><br>+<br><br>+    if (!cell) {<br><br>+        char uuidstr[VIR_UUID_STRING_BUFLEN];<br><br>+        virUUIDFormat(uuid, uuidstr);<br><br>+        virReportError(VIR_ERR_NO_DOMAIN,<br><br>+                       _("No domain with matching UUID '%s'"), uuidstr);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    if (virDomainLookupByUUIDEnsureACL(conn, cell->def) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    dom = virGetDomain(conn, cell->def->name, cell->def->uuid, cell->def->id);<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return dom;<br><br> }<br><br><br><br> static virDomainObjPtr<br><br>-- <br><br>2.17.1<br><br><br><br><br><br><br><br>------------------------------<br><br><br><br>Message: 2<br><br>Date: Sat,  5 Sep 2020 16:29:59 -0500<br><br>From: Prakhar Bansal <<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>To: <a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br><br>Subject: [GSoC PATCH 5/9] Jailhouse driver: Implementation of<br><br>        DomainInfo/State/List<br><br>Message-ID: <<a href="mailto:20200905213003.10682-6-prakharbansal0910@gmail.com" target="_blank">20200905213003.10682-6-prakharbansal0910@gmail.com</a>><br><br>Content-Type: text/plain; charset=US-ASCII<br><br><br><br>Signed-off-by:Prakhar Bansal<<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>---<br><br> src/jailhouse/jailhouse_driver.c | 102 +++++++++++++++++++++++++------<br><br> 1 file changed, 83 insertions(+), 19 deletions(-)<br><br><br><br>diff --git a/src/jailhouse/jailhouse_driver.c b/src/jailhouse/jailhouse_driver.c<br><br>index 5b7bdc92d8..2bb249f996 100644<br><br>--- a/src/jailhouse/jailhouse_driver.c<br><br>+++ b/src/jailhouse/jailhouse_driver.c<br><br>@@ -267,19 +267,26 @@ static int<br><br> jailhouseNodeGetInfo(virConnectPtr conn,<br><br>                      virNodeInfoPtr nodeinfo)<br><br> {<br><br>-    UNUSED(conn);<br><br>-    UNUSED(nodeinfo);<br><br>-    return -1;<br><br>+    if (virNodeGetInfoEnsureACL(conn) < 0)<br><br>+        return -1;<br><br>+<br><br>+    return virCapabilitiesGetNodeInfo(nodeinfo);<br><br> }<br><br><br><br> static int<br><br> jailhouseConnectListAllDomains(virConnectPtr conn,<br><br>-                               virDomainPtr **domain, unsigned int flags)<br><br>+                               virDomainPtr **domains,<br><br>+                               unsigned int flags)<br><br> {<br><br>-    UNUSED(conn);<br><br>-    UNUSED(domain);<br><br>-    UNUSED(flags);<br><br>-    return -1;<br><br>+    virJailhouseDriverPtr driver = conn->privateData;<br><br>+<br><br>+    virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL, -1);<br><br>+<br><br>+    if (virConnectListAllDomainsEnsureACL(conn) < 0)<br><br>+        return -1;<br><br>+<br><br>+    return virDomainObjListExport(driver->domains, conn, domains,<br><br>+                                  virConnectListAllDomainsCheckACL, flags);<br><br> }<br><br><br><br> static virDomainPtr<br><br>@@ -522,30 +529,87 @@ jailhouseDomainDestroy(virDomainPtr domain)<br><br> }<br><br><br><br> static int<br><br>-jailhouseDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)<br><br>+virjailhouseGetDomainTotalCpuStats(virDomainObjPtr cell,<br><br>+                               unsigned long long *cpustats)<br><br> {<br><br>-    UNUSED(domain);<br><br>-    UNUSED(info);<br><br>+    // TODO(Prakhar): Not implemented yet.<br><br>+    UNUSED(cell);<br><br>+    UNUSED(cpustats);<br><br>     return -1;<br><br> }<br><br><br><br>+static int<br><br>+jailhouseDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)<br><br>+{<br><br>+    virDomainObjPtr cell;<br><br>+    int ret = -1;<br><br>+<br><br>+    if (!(cell = virJailhouseDomObjFromDomain(domain)))<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainGetInfoEnsureACL(domain->conn, cell->def) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainObjIsActive(cell)) {<br><br>+        if (virjailhouseGetDomainTotalCpuStats(cell, &(info->cpuTime)) < 0)<br><br>+            goto cleanup;<br><br>+    } else {<br><br>+        info->cpuTime = 0;<br><br>+    }<br><br>+<br><br>+    info->state = virDomainObjGetState(cell, NULL);<br><br>+    info->maxMem = virDomainDefGetMemoryTotal(cell->def);<br><br>+    info->nrVirtCpu = virDomainDefGetVcpus(cell->def);<br><br>+    ret = 0;<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return ret;<br><br>+}<br><br>+<br><br> static int<br><br> jailhouseDomainGetState(virDomainPtr domain,<br><br>                         int *state, int *reason, unsigned int flags)<br><br> {<br><br>-    UNUSED(domain);<br><br>-    UNUSED(state);<br><br>-    UNUSED(reason);<br><br>-    UNUSED(flags);<br><br>-    return -1;<br><br>+    virDomainObjPtr cell;<br><br>+    int ret = -1;<br><br>+<br><br>+    virCheckFlags(0, -1);<br><br>+<br><br>+    if (!(cell = virJailhouseDomObjFromDomain(domain)))<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainGetStateEnsureACL(domain->conn, cell->def) < 0)<br><br>+       goto cleanup;<br><br>+<br><br>+    *state = virDomainObjGetState(cell, reason);<br><br>+    ret = 0;<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return ret;<br><br> }<br><br><br><br> static char *<br><br> jailhouseDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)<br><br> {<br><br>-    UNUSED(domain);<br><br>-    UNUSED(flags);<br><br>-    return NULL;<br><br>+    virDomainObjPtr cell;<br><br>+    char *ret = NULL;<br><br>+<br><br>+    virCheckFlags(VIR_DOMAIN_XML_COMMON_FLAGS, NULL);<br><br>+<br><br>+    if (!(cell = virJailhouseDomObjFromDomain(domain)))<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainGetXMLDescEnsureACL(domain->conn, cell->def, flags) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    ret = virDomainDefFormat(cell->def, NULL /* xmlopt */,<br><br>+                             virDomainDefFormatConvertXMLFlags(flags));<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return ret;<br><br> }<br><br><br><br> static virHypervisorDriver jailhouseHypervisorDriver = {<br><br>-- <br><br>2.17.1<br><br><br><br><br><br><br><br>------------------------------<br><br><br><br>Message: 3<br><br>Date: Sat,  5 Sep 2020 16:30:01 -0500<br><br>From: Prakhar Bansal <<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>To: <a href="mailto:libvir-list@redhat.com" target="_blank">libvir-list@redhat.com</a><br><br>Subject: [GSoC PATCH 7/9] Jailhouse driver: Implementation of<br><br>        DomainShutdown/Destroy callbacks<br><br>Message-ID: <<a href="mailto:20200905213003.10682-8-prakharbansal0910@gmail.com" target="_blank">20200905213003.10682-8-prakharbansal0910@gmail.com</a>><br><br>Content-Type: text/plain; charset=US-ASCII<br><br><br><br>Signed-off-by:Prakhar Bansal<<a href="mailto:prakharbansal0910@gmail.com" target="_blank">prakharbansal0910@gmail.com</a>><br><br>---<br><br> src/jailhouse/jailhouse_api.c    |   8 +++<br><br> src/jailhouse/jailhouse_driver.c | 101 +++++++++++++++++++++++++++++--<br><br> 2 files changed, 104 insertions(+), 5 deletions(-)<br><br><br><br>diff --git a/src/jailhouse/jailhouse_api.c b/src/jailhouse/jailhouse_api.c<br><br>index 783903e939..510e2f5f66 100644<br><br>--- a/src/jailhouse/jailhouse_api.c<br><br>+++ b/src/jailhouse/jailhouse_api.c<br><br>@@ -71,6 +71,14 @@ int cell_match(const struct dirent *dirent);<br><br><br><br> int createCell(const char *conf_file);<br><br><br><br>+int loadImagesInCell(virJailhouseCellId cell_id, char *images, int num_images);<br><br>+<br><br>+int shutdownCell(virJailhouseCellId cell_id);<br><br>+<br><br>+int startCell(virJailhouseCellId cell_id);<br><br>+<br><br>+int destroyCell(virJailhouseCellId cell_id);<br><br>+<br><br> int getCellInfo(const unsigned int id,<br><br>                 virJailhouseCellInfoPtr * cell_info);<br><br><br><br>diff --git a/src/jailhouse/jailhouse_driver.c b/src/jailhouse/jailhouse_driver.c<br><br>index 8c84a23388..46c7759cb8 100644<br><br>--- a/src/jailhouse/jailhouse_driver.c<br><br>+++ b/src/jailhouse/jailhouse_driver.c<br><br>@@ -406,8 +406,8 @@ jailhouseDomainCreateWithFlags(virDomainPtr domain,<br><br>                                unsigned int flags)<br><br> {<br><br>     virJailhouseDriverPtr driver = domain->conn->privateData;<br><br>-    virDomainObjPtr cell;<br><br>     virJailhouseCellInfoPtr cell_info;<br><br>+    virDomainObjPtr cell;<br><br>     int ret = -1;<br><br><br><br>     virCheckFlags(VIR_DOMAIN_NONE, -1);<br><br>@@ -566,18 +566,107 @@ jailhouseDomainCreateXML(virConnectPtr conn,<br><br>     return dom;<br><br> }<br><br><br><br>+static int<br><br>+jailhouseDomainShutdownFlags(virDomainPtr domain, unsigned int flags)<br><br>+{<br><br>+    virJailhouseDriverPtr driver = domain->conn->privateData;<br><br>+    virJailhouseCellInfoPtr cell_info;<br><br>+    virDomainObjPtr cell;<br><br>+    virJailhouseCellId cell_id;<br><br>+    int ret = -1;<br><br>+<br><br>+    virCheckFlags(0, -1);<br><br>+<br><br>+    if (!(cell = virJailhouseDomObjFromDomain(domain)))<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainShutdownFlagsEnsureACL(domain->conn, cell->def, flags) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainObjGetState(cell, NULL) != VIR_DOMAIN_RUNNING)<br><br>+        goto cleanup;<br><br>+<br><br>+    if (!(cell_info = virJailhouseFindCellByName(driver, cell->def->name))) {<br><br>+        virReportError(VIR_ERR_NO_DOMAIN,<br><br>+                       _("no domain with matching name %s and ID %d)"),<br><br>+                       cell->def->name, cell->def->id);<br><br>+        virDomainObjListRemove(driver->domains, cell);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    // Initialize the cell_id.<br><br>+    <a href="http://cell_id.id" rel="noreferrer" target="_blank">cell_id.id</a> = cell->def->id;<br><br>+    cell_id.padding = 0;<br><br>+    if (virStrcpy(<a href="http://cell_id.name" rel="noreferrer" target="_blank">cell_id.name</a>, cell->def->name, JAILHOUSE_CELL_ID_NAMELEN) < 0) {<br><br>+        virReportError(VIR_ERR_INTERNAL_ERROR,<br><br>+                       _("Cell name %s length exceeded the limit"),<br><br>+                       cell->def->name);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    if (shutdownCell(cell_id) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    virDomainObjSetState(cell, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_SHUTDOWN);<br><br>+<br><br>+    ret = 0;<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return ret;<br><br>+}<br><br>+<br><br> static int<br><br> jailhouseDomainShutdown(virDomainPtr domain)<br><br> {<br><br>-    UNUSED(domain);<br><br>-    return -1;<br><br>+    return jailhouseDomainShutdownFlags(domain, 0);<br><br>+}<br><br>+<br><br>+static int<br><br>+jailhouseDomainDestroyFlags(virDomainPtr domain, unsigned int flags)<br><br>+{<br><br>+    virJailhouseDriverPtr driver = domain->conn->privateData;<br><br>+    virJailhouseCellInfoPtr cell_info;<br><br>+    virDomainObjPtr cell;<br><br>+    int ret = -1;<br><br>+<br><br>+    virCheckFlags(0, -1);<br><br>+<br><br>+    if (!(cell = virJailhouseDomObjFromDomain(domain)))<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainDestroyFlagsEnsureACL(domain->conn, cell->def) < 0)<br><br>+        goto cleanup;<br><br>+<br><br>+    if (virDomainObjGetState(cell, NULL) != VIR_DOMAIN_SHUTOFF) {<br><br>+        virReportError(VIR_ERR_OPERATION_INVALID,<br><br>+                       _("Domain %s is still running."),<br><br>+                       cell->def->name);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    if (!(cell_info = virJailhouseFindCellByName(driver, cell->def->name))) {<br><br>+        virReportError(VIR_ERR_NO_DOMAIN,<br><br>+                       _("no domain with matching name %s and ID %d)"),<br><br>+                       cell->def->name, cell->def->id);<br><br>+        virDomainObjListRemove(driver->domains, cell);<br><br>+        goto cleanup;<br><br>+    }<br><br>+<br><br>+    // Remove the cell from the domain list.<br><br>+    virDomainObjListRemove(driver->domains, cell);<br><br>+<br><br>+    ret = 0;<br><br>+<br><br>+ cleanup:<br><br>+    virDomainObjEndAPI(&cell);<br><br>+    return ret;<br><br> }<br><br><br><br> static int<br><br> jailhouseDomainDestroy(virDomainPtr domain)<br><br> {<br><br>-    UNUSED(domain);<br><br>-    return -1;<br><br>+    return jailhouseDomainDestroyFlags(domain, 0);<br><br> }<br><br><br><br> static int<br><br>@@ -675,7 +764,9 @@ static virHypervisorDriver jailhouseHypervisorDriver = {<br><br>     .domainCreateWithFlags = jailhouseDomainCreateWithFlags,    /* 6.3.0 */<br><br>     .domainCreateXML = jailhouseDomainCreateXML, /* 6.3.0 */<br><br>     .domainShutdown = jailhouseDomainShutdown,  /* 6.3.0 */<br><br>+    .domainShutdownFlags = jailhouseDomainShutdownFlags,  /* 6.3.0 */<br><br>     .domainDestroy = jailhouseDomainDestroy,    /* 6.3.0 */<br><br>+    .domainDestroyFlags = jailhouseDomainDestroyFlags,    /* 6.3.0 */<br><br>     .domainGetInfo = jailhouseDomainGetInfo,    /* 6.3.0 */<br><br>     .domainGetState = jailhouseDomainGetState,  /* 6.3.0 */<br><br>     .domainLookupByID = jailhouseDomainLookupByID,      /* 6.3.0 */<br><br>-- <br><br>2.17.1<br><br><br><br><br><br><br><br>End of libvir-list Digest, Vol 178, Issue 70<br><br>********************************************<br><br><br><br></blockquote></div></div>