[{"id":1774773,"web_url":"http://patchwork.ozlabs.org/comment/1774773/","msgid":"<20170925144134.GF1859@perard.uk.xensource.com>","list_archive_url":null,"date":"2017-09-25T14:41:34","subject":"Re: [Qemu-devel] [PATCH v2 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 Fri, Sep 22, 2017 at 02:07:25PM +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\nAcked-by: Anthony PERARD <anthony.perard@citrix.com>\n\nThanks.\n\n> ---\n> V2:\n> - always call blk_disconnect() from blk_free() in order to have the\n>   gnttab device node closed (Anthony Perard)\n> ---\n>  hw/block/xen_disk.c | 16 ++++++++++++----\n>  1 file changed, 12 insertions(+), 4 deletions(-)\n> \n> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c\n> index 62506e3167..e431bd89e8 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>  \n>  static int blk_free(struct XenDevice *xendev)\n> @@ -1334,9 +1345,7 @@ static int blk_free(struct XenDevice *xendev)\n>      struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);\n>      struct ioreq *ioreq;\n>  \n> -    if (blkdev->blk || blkdev->sring) {\n> -        blk_disconnect(xendev);\n> -    }\n> +    blk_disconnect(xendev);\n>  \n>      while (!QLIST_EMPTY(&blkdev->freelist)) {\n>          ioreq = QLIST_FIRST(&blkdev->freelist);\n> @@ -1363,7 +1372,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 3y16Hr6d6vz9t4Z\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 26 Sep 2017 00:42:32 +1000 (AEST)","from localhost ([::1]:42790 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 1dwUac-0002Kq-Vm\n\tfor incoming@patchwork.ozlabs.org; Mon, 25 Sep 2017 10:42:31 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:50338)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <prvs=434883a06=anthony.perard@citrix.com>)\n\tid 1dwUaJ-0002Kj-Tb\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 10:42:13 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <prvs=434883a06=anthony.perard@citrix.com>)\n\tid 1dwUaF-0004FL-LZ\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 10:42:11 -0400","from smtp02.citrix.com ([66.165.176.63]:30576)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71)\n\t(envelope-from <prvs=434883a06=anthony.perard@citrix.com>)\n\tid 1dwUaF-0004Ee-Do\n\tfor qemu-devel@nongnu.org; Mon, 25 Sep 2017 10:42:07 -0400"],"X-IronPort-AV":"E=Sophos;i=\"5.42,436,1500940800\"; d=\"scan'208\";a=\"449108611\"","Date":"Mon, 25 Sep 2017 15:41:34 +0100","From":"Anthony PERARD <anthony.perard@citrix.com>","To":"Juergen Gross <jgross@suse.com>","Message-ID":"<20170925144134.GF1859@perard.uk.xensource.com>","References":"<20170922120725.10910-1-jgross@suse.com>\n\t<20170922120725.10910-3-jgross@suse.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Disposition":"inline","In-Reply-To":"<20170922120725.10910-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 v2 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>"}}]