Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1696393imm; Tue, 22 May 2018 08:01:15 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrz9haG66Au07KFt8w1sdGiOYtGUT8xW76Dz2b8douscrdUAJ25QaqmF7qoE9urEw1HqZkH X-Received: by 2002:a17:902:57c7:: with SMTP id g7-v6mr24961924plj.222.1527001275539; Tue, 22 May 2018 08:01:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527001275; cv=none; d=google.com; s=arc-20160816; b=nQ6BAfS82BNZImcIFB6/e+3JG4zkL7ozLxfPgaTN5v6WeEXHE55hDd2VcgPI2DFuuD CMUJc4+UUG78sNP4zFczQDEtj9j9djydNEoN14ox70RS6IGVo83Luf2ZFuX/Tlq7/yFO omiV7juTqWD7uWG7ap5TJI/cnE+qDVSXvZWTw/vvvAIbmlyeRc2qnBFuiEYPSpb8flM+ VSj7VlV7lb9yM2xFGfMDCvrwDlQzDSsGMr8PDfKLquzRN2LwQ4NhxXkZhuvM1gU1ADoU dDXEZSZw0/iXQDDlqR2QYaGuvZACnhOpqc+s5fQzQrjEXn1foDQuCd/rusfBu4X7uo/i o1ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=HBTlOmmuuyFIQA3gW09biYzN3wB8lCl/oNDaOBt5q9o=; b=ozhxC9Do07C2Neba8mokw35t5eIkroa/5j8kVmqDbkGQ/HdDq1SUtiY4YQKi1vwBF/ KcUEeqeuT2h+gBEE82GAGkZ1VHbLL+DZlbLkZxAMmto2mdakqd3I9Vsh2T12VJiGlfJC 7Cp612rS3Ym1JSgY3WuIHTywJiFIT6DYF5riRGrGCLwOTzIfC7UZFZV5/zOZe44htGIf I9f3qA+7+vEAfs0quUPA1s6Lv68xacLtDSYbcyY0KSLi8xbMip/nELYXS7sJCD3E8IOi WWKfmKzZdqIoqxH3vab1N6Mf0hAS6+AVSr5xTb1RwVmf461a1Pd7uKLrxa4ort4jx0au IFMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cbLVJ2z4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k18-v6si16647520pfe.13.2018.05.22.08.00.59; Tue, 22 May 2018 08:01:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cbLVJ2z4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751561AbeEVPAp (ORCPT + 99 others); Tue, 22 May 2018 11:00:45 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:36693 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751236AbeEVPAj (ORCPT ); Tue, 22 May 2018 11:00:39 -0400 Received: by mail-wm0-f68.google.com with SMTP id n10-v6so677376wmc.1; Tue, 22 May 2018 08:00:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=HBTlOmmuuyFIQA3gW09biYzN3wB8lCl/oNDaOBt5q9o=; b=cbLVJ2z4EQiOCZXZ+Yk+pmLGGIkD0i1YiSpNoR9rzEH6M6KKYXPPusz4469VaEDjsn kGKo3C7fNs/x4qKTkUA1YddNqQfwc7suxOl3tmd8E1xjcKHj+yclrxzS1r+MDvIfTdXw KrXri6YxX7xC5D1hd12r7d2XPh6ErkaJjdzyVeL+7fzqEsibuKd4LJeqD2oVPs0zYSXp lCvGbl6HbIzZYT8w6bukNPPKSg4gRxyKQ+xEpnQO/FpyNttYb0gzvYSoUgj4lbRNAVvO XLg0LF+VDEmZwIeOoIMKxyo1gaqwUzGNaxdGvEWR87goQ8RmnfMkF3EFaW5nEiEt9bH/ OSVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=HBTlOmmuuyFIQA3gW09biYzN3wB8lCl/oNDaOBt5q9o=; b=Vel3VHi96ZUvdoA77bFDVMSnpV4DKaOGfvx3FaI0ipqVYhREAkKz2F2qd2JFrdQcuY 9YUuXije4KiKzG0blIDLHuBn2KO0v57S2wHIu0FdPgNsh6YXpMs4GJ+AKc6FgNpP3G4r 6P+FnJobHWcmly3fzzG/PY2ZD9LDJhF1ROUCpPKbGQRPZbu9jzO/T9kI5lewChekN5TC OQ89zki8MOjzHFcxSOHAXl4W59e7nuBfk3R5YUdVRFptIZDrbROQB3EmuHp8Xg06MFj8 AK27JoNi6pBarvUZioCU76lQCQf2LNS9G6hhrDmFnige49tN/v0ajqtO3NnvTRR6E4OV 6y+Q== X-Gm-Message-State: ALKqPwctum9KGKQ8Hgkl9nz6u3t+TJsZ5hRB7a54K6SOH7/R2Uf+HxuD L7ptG3GLrz8OE8jixaYZTDY= X-Received: by 2002:a2e:2e17:: with SMTP id u23-v6mr14849733lju.77.1527001236581; Tue, 22 May 2018 08:00:36 -0700 (PDT) Received: from [10.17.182.9] (ll-54.209.223.85.sovam.net.ua. [85.223.209.54]) by smtp.gmail.com with ESMTPSA id j1-v6sm3017851ljg.48.2018.05.22.08.00.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 May 2018 08:00:35 -0700 (PDT) Subject: Re: [Xen-devel] [RFC 1/3] xen/balloon: Allow allocating DMA buffers To: Boris Ostrovsky , Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, jgross@suse.com, konrad.wilk@oracle.com Cc: daniel.vetter@intel.com, matthew.d.roper@intel.com, dongwon.kim@intel.com References: <20180517082604.14828-1-andr2000@gmail.com> <20180517082604.14828-2-andr2000@gmail.com> <6a108876-19b7-49d0-3de2-9e10f984736c@oracle.com> <9541926e-001a-e41e-317c-dbff6d687761@gmail.com> <218e2bf7-490d-f89e-9866-27b7e3dbc835@oracle.com> <77c20852-b9b8-c35a-26b0-b0317e6aba09@gmail.com> From: Oleksandr Andrushchenko Message-ID: <2a88de28-27ef-8fe4-ddc1-35eb9e698567@gmail.com> Date: Tue, 22 May 2018 18:00:33 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/22/2018 05:33 PM, Boris Ostrovsky wrote: > On 05/22/2018 01:55 AM, Oleksandr Andrushchenko wrote: >> On 05/21/2018 11:36 PM, Boris Ostrovsky wrote: >>> On 05/21/2018 03:13 PM, Oleksandr Andrushchenko wrote: >>>> On 05/21/2018 09:53 PM, Boris Ostrovsky wrote: >>>>> On 05/21/2018 01:32 PM, Oleksandr Andrushchenko wrote: >>>>>> On 05/21/2018 07:35 PM, Boris Ostrovsky wrote: >>>>>>> On 05/21/2018 01:40 AM, Oleksandr Andrushchenko wrote: >>>>>>>> On 05/19/2018 01:04 AM, Boris Ostrovsky wrote: >>>>>>>>> On 05/17/2018 04:26 AM, Oleksandr Andrushchenko wrote: >>>>>>>>>> From: Oleksandr Andrushchenko >>>>>>>>> A commit message would be useful. >>>>>>>> Sure, v1 will have it >>>>>>>>>> Signed-off-by: Oleksandr Andrushchenko >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>          for (i = 0; i < nr_pages; i++) { >>>>>>>>>> -        page = alloc_page(gfp); >>>>>>>>>> -        if (page == NULL) { >>>>>>>>>> -            nr_pages = i; >>>>>>>>>> -            state = BP_EAGAIN; >>>>>>>>>> -            break; >>>>>>>>>> +        if (ext_pages) { >>>>>>>>>> +            page = ext_pages[i]; >>>>>>>>>> +        } else { >>>>>>>>>> +            page = alloc_page(gfp); >>>>>>>>>> +            if (page == NULL) { >>>>>>>>>> +                nr_pages = i; >>>>>>>>>> +                state = BP_EAGAIN; >>>>>>>>>> +                break; >>>>>>>>>> +            } >>>>>>>>>>              } >>>>>>>>>>              scrub_page(page); >>>>>>>>>>              list_add(&page->lru, &pages); >>>>>>>>>> @@ -529,7 +565,7 @@ static enum bp_state >>>>>>>>>> decrease_reservation(unsigned long nr_pages, gfp_t gfp) >>>>>>>>>>          i = 0; >>>>>>>>>>          list_for_each_entry_safe(page, tmp, &pages, lru) { >>>>>>>>>>              /* XENMEM_decrease_reservation requires a GFN */ >>>>>>>>>> -        frame_list[i++] = xen_page_to_gfn(page); >>>>>>>>>> +        frames[i++] = xen_page_to_gfn(page); >>>>>>>>>>        #ifdef CONFIG_XEN_HAVE_PVMMU >>>>>>>>>>              /* >>>>>>>>>> @@ -552,18 +588,22 @@ static enum bp_state >>>>>>>>>> decrease_reservation(unsigned long nr_pages, gfp_t gfp) >>>>>>>>>>      #endif >>>>>>>>>>              list_del(&page->lru); >>>>>>>>>>      -        balloon_append(page); >>>>>>>>>> +        if (!ext_pages) >>>>>>>>>> +            balloon_append(page); >>>>>>>>> So what you are proposing is not really ballooning. You are just >>>>>>>>> piggybacking on existing interfaces, aren't you? >>>>>>>> Sort of. Basically I need to {increase|decrease}_reservation, not >>>>>>>> actually >>>>>>>> allocating ballooned pages. >>>>>>>> Do you think I can simply EXPORT_SYMBOL for >>>>>>>> {increase|decrease}_reservation? >>>>>>>> Any other suggestion? >>>>>>> I am actually wondering how much of that code you end up reusing. >>>>>>> You >>>>>>> pretty much create new code paths in both routines and common code >>>>>>> ends >>>>>>> up being essentially the hypercall. >>>>>> Well, I hoped that it would be easier to maintain if I modify >>>>>> existing >>>>>> code >>>>>> to support both use-cases, but I am also ok to create new routines if >>>>>> this >>>>>> seems to be reasonable - please let me know >>>>>>>     So the question is --- would it make >>>>>>> sense to do all of this separately from the balloon driver? >>>>>> This can be done, but which driver will host this code then? If we >>>>>> move from >>>>>> the balloon driver, then this could go to either gntdev or >>>>>> grant-table. >>>>>> What's your preference? >>>>> A separate module? >>>>> Is there any use for this feature outside of your zero-copy DRM >>>>> driver? >>>> Intel's hyper dma-buf (Dongwon/Matt CC'ed), V4L/GPU at least. >>>> >>>> At the time I tried to upstream zcopy driver it was discussed and >>>> decided that >>>> it would be better if I remove all DRM specific code and move it to >>>> Xen drivers. >>>> Thus, this RFC. >>>> >>>> But it can also be implemented as a dedicated Xen dma-buf driver which >>>> will have all the >>>> code from this RFC + a bit more (char/misc device handling at least). >>>> This will also require a dedicated user-space library, just like >>>> libxengnttab.so >>>> for gntdev (now I have all new IOCTLs covered there). >>>> >>>> If the idea of a dedicated Xen dma-buf driver seems to be more >>>> attractive we >>>> can work toward this solution. BTW, I do support this idea, but was not >>>> sure if Xen community accepts yet another driver which duplicates >>>> quite some code >>>> of the existing gntdev/balloon/grant-table. And now after this RFC I >>>> hope that all cons >>>> and pros of both dedicated driver and gntdev/balloon/grant-table >>>> extension are >>>> clearly seen and we can make a decision. >>> IIRC the objection for a separate module was in the context of gntdev >>> was discussion, because (among other things) people didn't want to have >>> yet another file in /dev/xen/ >>> >>> Here we are talking about (a new) balloon-like module which doesn't >>> create any new user-visible interfaces. And as for duplicating code --- >>> as I said, I am not convinced there is much of duplication. >>> >>> I might even argue that we should add a new config option for this >>> module. >> I am not quite sure I am fully following you here: so, you suggest >> that we have balloon.c unchanged, but instead create a new >> module (namely a file under the same folder as balloon.c, e.g. >> dma-buf-reservation.c) and move those {increase|decrease}_reservation >> routines (specific to dma-buf) to that new file? And make it selectable >> via Kconfig? If so, then how about the changes to grant-table and gntdev? >> Those will look inconsistent then. > Inconsistent with what? The changes to grant code will also be under the > new config option. Ah, ok. Option 1. We will have Kconfig option which will cover dma-buf changes in balloon, grant-table and gntdev. And for that we will create dedicated routines in balloon and grant-table (copy of the existing ones, but modified to fit dma-buf use-case) and those under something like "#if CONFIG_XEN_DMABUF"? This is relatively easy to do for balloon/grant-table, but not that easy for gntdev: there still seems to be lots of code which can be reused, so I'll have to put lots of "#if CONFIG_XEN_DMABUF" there. Even more, I change interfaces of the existing gntdev routines which won't look cute with #if's, IMO. Option 2. Try moving dma-buf related changes from balloon and grant-table to a new file. Then gntdev's Kconfig concerns from above will still be there, but balloon/grant-table functionality will be localized in a new module. I am still missing your point here? > >> If you suggest a new kernel driver module: >> IMO, there is nothing bad if we create a dedicated kernel module >> (driver) for Xen dma-buf handling selectable under Kconfig option. >> Yes, this will create a yet another device under /dev/xen, >> but most people will never see it if we set Kconfig to default to "n". >> And then we'll need user-space support for that, so Xen tools will >> be extended with libxendmabuf.so or so. >> This way all Xen dma-buf support can be localized at one place which >> might be easier to maintain. What is more it could be totally transparent >> to most of us as Kconfig option won't be set by default (both kernel >> and Xen). > > The downside is that we will end up having another device for doing > things that are not that different from what we are already doing with > existing gnttab device. Or are they? Agree, but Kconfig option, IMO, won't make it look nice because of gntdev changes and code reuse. > -boris Thank you, Oleksandr