[{"id":1771999,"web_url":"http://patchwork.ozlabs.org/comment/1771999/","msgid":"<20170920150006.GB1859@perard.uk.xensource.com>","list_archive_url":null,"date":"2017-09-20T15:00:06","subject":"Re: [Qemu-devel] [PATCH 2/2] xen: dont try setting max grants\n\tmultiple times","submitter":{"id":4759,"url":"http://patchwork.ozlabs.org/api/people/4759/","name":"Anthony PERARD","email":"anthony.perard@citrix.com"},"content":"On Tue, Sep 19, 2017 at 01:50:55PM +0200, Juergen Gross wrote:\n> Trying to call xengnttab_set_max_grants() with the same file handle\n> might fail on some kernels, as this operation is allowed only once.\n> \n> This is a problem for the qdisk backend as blk_connect() can be\n> called multiple times for a domain, e.g. in case grub-xen is being\n> used to boot it.\n> \n> So instead of letting the generic backend code open the gnttab device\n> do it in blk_connect() and close it again in blk_disconnect.\n> \n> Signed-off-by: Juergen Gross <jgross@suse.com>\n> ---\n>  hw/block/xen_disk.c | 12 +++++++++++-\n>  1 file changed, 11 insertions(+), 1 deletion(-)\n> \n> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c\n> index 6632746250..7cff8863cb 100644\n> --- a/hw/block/xen_disk.c\n> +++ b/hw/block/xen_disk.c\n> @@ -1220,6 +1220,12 @@ static int blk_connect(struct XenDevice *xendev)\n>      /* Add on the number needed for the ring pages */\n>      max_grants += blkdev->nr_ring_ref;\n>  \n> +    blkdev->xendev.gnttabdev = xengnttab_open(NULL, 0);\n> +    if (blkdev->xendev.gnttabdev == NULL) {\n> +        xen_pv_printf(xendev, 0, \"xengnttab_open failed: %s\\n\",\n> +                      strerror(errno));\n> +        return -1;\n> +    }\n>      if (xengnttab_set_max_grants(blkdev->xendev.gnttabdev, max_grants)) {\n>          xen_pv_printf(xendev, 0, \"xengnttab_set_max_grants failed: %s\\n\",\n>                        strerror(errno));\n> @@ -1327,6 +1333,11 @@ static void blk_disconnect(struct XenDevice *xendev)\n>          }\n>          blkdev->feature_persistent = false;\n>      }\n> +\n> +    if (blkdev->xendev.gnttabdev) {\n> +        xengnttab_close(blkdev->xendev.gnttabdev);\n> +        blkdev->xendev.gnttabdev = NULL;\n> +    }\n\nI think blk_disconnect needs to be called from blk_free in case where\nthe gnttabdev is not closed (like it is done when blk or the sring are\nnot cleared, in blk_free).\n\n>  }\n\n>  static int blk_free(struct XenDevice *xendev)\n> @@ -1363,7 +1374,6 @@ static void blk_event(struct XenDevice *xendev)\n>  \n>  struct XenDevOps xen_blkdev_ops = {\n>      .size       = sizeof(struct XenBlkDev),\n> -    .flags      = DEVOPS_FLAG_NEED_GNTDEV,\n>      .alloc      = blk_alloc,\n>      .init       = blk_init,\n>      .initialise    = blk_connect,\n> -- \n> 2.12.3\n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xy3vl2P3Sz9s8J\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 21 Sep 2017 01:44:35 +1000 (AEST)","from localhost ([::1]:49024 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1duhAv-0002WY-C5\n\tfor incoming@patchwork.ozlabs.org; Wed, 20 Sep 2017 11:44:33 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:39360)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <prvs=4297b1e9d=anthony.perard@citrix.com>)\n\tid 1dugUO-0006Jw-Fl\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 11:00:41 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <prvs=4297b1e9d=anthony.perard@citrix.com>)\n\tid 1dugUI-0006dr-Hw\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 11:00:36 -0400","from smtp02.citrix.com ([66.165.176.63]:36508)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71)\n\t(envelope-from <prvs=4297b1e9d=anthony.perard@citrix.com>)\n\tid 1dugUI-0006cX-AX\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 11:00:30 -0400"],"X-IronPort-AV":"E=Sophos;i=\"5.42,421,1500940800\"; d=\"scan'208\";a=\"448549563\"","Date":"Wed, 20 Sep 2017 16:00:06 +0100","From":"Anthony PERARD <anthony.perard@citrix.com>","To":"Juergen Gross <jgross@suse.com>","Message-ID":"<20170920150006.GB1859@perard.uk.xensource.com>","References":"<20170919115055.19278-1-jgross@suse.com>\n\t<20170919115055.19278-3-jgross@suse.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Disposition":"inline","In-Reply-To":"<20170919115055.19278-3-jgross@suse.com>","User-Agent":"Mutt/1.9.0 (2017-09-02)","X-detected-operating-system":"by eggs.gnu.org: Genre and OS details not\n\trecognized.","X-Received-From":"66.165.176.63","Subject":"Re: [Qemu-devel] [PATCH 2/2] xen: dont try setting max grants\n\tmultiple times","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"xen-devel@lists.xenproject.org, sstabellini@kernel.org,\n\tqemu-devel@nongnu.org, kraxel@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1773528,"web_url":"http://patchwork.ozlabs.org/comment/1773528/","msgid":"<912fbfb9-59b9-fceb-237f-3b201f6eaa38@suse.com>","list_archive_url":null,"date":"2017-09-22T12:03:47","subject":"Re: [Qemu-devel] [Xen-devel] [PATCH 2/2] xen: dont try setting max\n\tgrants multiple times","submitter":{"id":64874,"url":"http://patchwork.ozlabs.org/api/people/64874/","name":"Jürgen Groß","email":"jgross@suse.com"},"content":"On 20/09/17 17:00, Anthony PERARD wrote:\n> On Tue, Sep 19, 2017 at 01:50:55PM +0200, Juergen Gross wrote:\n>> Trying to call xengnttab_set_max_grants() with the same file handle\n>> might fail on some kernels, as this operation is allowed only once.\n>>\n>> This is a problem for the qdisk backend as blk_connect() can be\n>> called multiple times for a domain, e.g. in case grub-xen is being\n>> used to boot it.\n>>\n>> So instead of letting the generic backend code open the gnttab device\n>> do it in blk_connect() and close it again in blk_disconnect.\n>>\n>> Signed-off-by: Juergen Gross <jgross@suse.com>\n>> ---\n>>  hw/block/xen_disk.c | 12 +++++++++++-\n>>  1 file changed, 11 insertions(+), 1 deletion(-)\n>>\n>> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c\n>> index 6632746250..7cff8863cb 100644\n>> --- a/hw/block/xen_disk.c\n>> +++ b/hw/block/xen_disk.c\n>> @@ -1220,6 +1220,12 @@ static int blk_connect(struct XenDevice *xendev)\n>>      /* Add on the number needed for the ring pages */\n>>      max_grants += blkdev->nr_ring_ref;\n>>  \n>> +    blkdev->xendev.gnttabdev = xengnttab_open(NULL, 0);\n>> +    if (blkdev->xendev.gnttabdev == NULL) {\n>> +        xen_pv_printf(xendev, 0, \"xengnttab_open failed: %s\\n\",\n>> +                      strerror(errno));\n>> +        return -1;\n>> +    }\n>>      if (xengnttab_set_max_grants(blkdev->xendev.gnttabdev, max_grants)) {\n>>          xen_pv_printf(xendev, 0, \"xengnttab_set_max_grants failed: %s\\n\",\n>>                        strerror(errno));\n>> @@ -1327,6 +1333,11 @@ static void blk_disconnect(struct XenDevice *xendev)\n>>          }\n>>          blkdev->feature_persistent = false;\n>>      }\n>> +\n>> +    if (blkdev->xendev.gnttabdev) {\n>> +        xengnttab_close(blkdev->xendev.gnttabdev);\n>> +        blkdev->xendev.gnttabdev = NULL;\n>> +    }\n> \n> I think blk_disconnect needs to be called from blk_free in case where\n> the gnttabdev is not closed (like it is done when blk or the sring are\n> not cleared, in blk_free).\n\nRight. Just calling it always from blk_free() should do the job.\n\nBTW: in practice this wouldn't be necessary as xen_pv_del_xendev()\nalready does the close, but this is just good luck. Better closing it\nvia blk_free() in case xen_pv_del_xendev() adds a test for\nDEVOPS_FLAG_NEED_GNTDEV.\n\n\nThanks,\n\nJuergen","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xzBwt5ytCz9sPk\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 22 Sep 2017 22:04:24 +1000 (AEST)","from localhost ([::1]:58475 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dvMgv-0006AT-Rv\n\tfor incoming@patchwork.ozlabs.org; Fri, 22 Sep 2017 08:04:21 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:46647)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <jgross@suse.com>) id 1dvMgW-0006AE-Fm\n\tfor qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:00 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <jgross@suse.com>) id 1dvMgQ-0004dn-O1\n\tfor qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:03:56 -0400","from mx2.suse.de ([195.135.220.15]:60804 helo=mx1.suse.de)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <jgross@suse.com>) id 1dvMgQ-0004c2-Hb\n\tfor qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:03:50 -0400","from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254])\n\tby mx1.suse.de (Postfix) with ESMTP id 18F6EABF4;\n\tFri, 22 Sep 2017 12:03:48 +0000 (UTC)"],"X-Virus-Scanned":"by amavisd-new at test-mx.suse.de","To":"Anthony PERARD <anthony.perard@citrix.com>","References":"<20170919115055.19278-1-jgross@suse.com>\n\t<20170919115055.19278-3-jgross@suse.com>\n\t<20170920150006.GB1859@perard.uk.xensource.com>","From":"Juergen Gross <jgross@suse.com>","Message-ID":"<912fbfb9-59b9-fceb-237f-3b201f6eaa38@suse.com>","Date":"Fri, 22 Sep 2017 14:03:47 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<20170920150006.GB1859@perard.uk.xensource.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","Content-Transfer-Encoding":"7bit","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no\n\ttimestamps) [generic] [fuzzy]","X-Received-From":"195.135.220.15","Subject":"Re: [Qemu-devel] [Xen-devel] [PATCH 2/2] xen: dont try setting max\n\tgrants multiple times","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"xen-devel@lists.xenproject.org, sstabellini@kernel.org,\n\tqemu-devel@nongnu.org, kraxel@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]