Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4334790imm; Mon, 11 Jun 2018 10:31:58 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKPHSm4LdzQ/kw3q+9OQvc4ZV+LZ/Mvg1/UKJaItn8CMnVQzlAmmrI+b49IxPbN38IYmx2v X-Received: by 2002:a17:902:5501:: with SMTP id f1-v6mr144130pli.108.1528738318517; Mon, 11 Jun 2018 10:31:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528738318; cv=none; d=google.com; s=arc-20160816; b=ZqB1vossd+f6Eq05AxMEfi8paUQsAFwvB67Mm0JYTVBBRB144Zq6Uv2Y+erpcbe+tc ZS0O/VBVCKPMMbkPpqs8WvsSXn7JL+b/MG77UqT0JTVrpTnchWkCyCbTzCY8eIfV7Se6 sxvqVdZNfGdJlTEUUM0vui3qnsJslwcnAaTc6Ew8x/aGf4W87aXPFq6FPccEwWqkIxTI 04a2fdZbzjNUstoNsRP8n01xSja6Tcc+tTLhMqHjCDHzbRPrzAMGqutvw5VxTNMsz6vp rd8PsQ/GL8EmcPCgn4UiHX2CAM1tTi9NnNQ7SfS6VUmeSmC9wJ2uEIP00f9mxSURn3lB YBSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=qGj7eK+r6VEZH4IUMwxKTi7tXRJBPo0kBY1uv6NlpTk=; b=elptJBIdYvTYE9XOdKtCIOHnkA8Mq3St8qG9Ei7ylhY0W139DXURC388K11l1IjDnS bupRivbDVQI0iVGARDPzsin/O2obTBOGQI4CiOTyvFWSNp2BS5rgzQGkreKbyo8OUYUV iz5eEEuadApYNw+b91yFiHFrjd0oQlo/EPhJO6t0LIxn+0NnJtMXUYFIN7Bkiq7RME1g zMKnyuLQd83EN9FNP4BkoXW0o8fydakF0P0XIMPdNyPbuVhdwRRi3buyiL1tt1G+bt0W zJuWMwwIYyzphXNgUXHVHWDP+dRb3pW9Tuj2o24+rdXwrUenINwmt+r8zBPFjw8CtO2p RrMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=y+z1IOsn; 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=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x11-v6si6063961pgp.4.2018.06.11.10.31.14; Mon, 11 Jun 2018 10:31:58 -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=@kernel.org header.s=default header.b=y+z1IOsn; 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=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933892AbeFKQvT (ORCPT + 99 others); Mon, 11 Jun 2018 12:51:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:39848 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933132AbeFKQvS (ORCPT ); Mon, 11 Jun 2018 12:51:18 -0400 Received: from sstabellini-thinkpad-x260.xlnx.xilinx.com (unknown [149.199.62.254]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 882B6208BA; Mon, 11 Jun 2018 16:51:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1528735877; bh=0dDIinIl6hUOug5XyDgYLAMb3+wKf+NLbRvD5YfJD4U=; h=Date:From:To:cc:Subject:In-Reply-To:References:From; b=y+z1IOsn6iUOe6GlF+6ByxdZ279pk2wJx7rAMQ2a8ZhwUz4gP5go8gTjfD0GlTQZx uB+bLJon3bu2+eWV+jXFnVI001V4BwMe7xpkUauajukMT2gFRVHXZaduAhMjrN4Wwj qYIBZ1ZWhOWRuA7ltYI/MmBwwBRUdHOeMBJQHypE= Date: Mon, 11 Jun 2018 09:51:13 -0700 (PDT) From: Stefano Stabellini X-X-Sender: sstabellini@sstabellini-ThinkPad-X260 To: Oleksandr Andrushchenko cc: Boris Ostrovsky , Stefano Stabellini , "Oleksandr_Andrushchenko@epam.com" , 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, daniel.vetter@intel.com, matthew.d.roper@intel.com, dongwon.kim@intel.com, julien.grall@arm.com Subject: Re: [Xen-devel] [PATCH v2 5/9] xen/gntdev: Allow mappings for DMA buffers In-Reply-To: <06eff3fe-3ffc-47f6-6bd6-d8f2f823b382@gmail.com> Message-ID: References: <20180601114132.22596-1-andr2000@gmail.com> <20180601114132.22596-6-andr2000@gmail.com> <64facf05-0a51-c3d9-9d3b-780893248628@oracle.com> <84217eac-b83b-710f-39ab-c93cad65bf9a@gmail.com> <30fa03c0-1b75-c0b1-b14f-8b52ea584e20@gmail.com> <78dc2fc4-cdac-05b7-2c34-22b69e7e009c@oracle.com> <4be24882-185d-01e3-6aa1-751e341433c7@gmail.com> <06eff3fe-3ffc-47f6-6bd6-d8f2f823b382@gmail.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-656447964-1528735873=:14695" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-656447964-1528735873=:14695 Content-Type: TEXT/PLAIN; charset=UTF-8 Content-Transfer-Encoding: 8BIT On Mon, 11 Jun 2018, Oleksandr Andrushchenko wrote: > On 06/08/2018 10:21 PM, Boris Ostrovsky wrote: > > On 06/08/2018 01:59 PM, Stefano Stabellini wrote: > > > > > > > > > >    @@ -325,6 +401,14 @@ static int map_grant_pages(struct > > > > > > > > > > grant_map > > > > > > > > > > *map) > > > > > > > > > >            map->unmap_ops[i].handle = > > > > > > > > > > map->map_ops[i].handle; > > > > > > > > > >            if (use_ptemod) > > > > > > > > > >                map->kunmap_ops[i].handle = > > > > > > > > > > map->kmap_ops[i].handle; > > > > > > > > > > +#ifdef CONFIG_XEN_GRANT_DMA_ALLOC > > > > > > > > > > +        else if (map->dma_vaddr) { > > > > > > > > > > +            unsigned long mfn; > > > > > > > > > > + > > > > > > > > > > +            mfn = __pfn_to_mfn(page_to_pfn(map->pages[i])); > > > > > > > > > Not pfn_to_mfn()? > > > > > > > > I'd love to, but pfn_to_mfn is only defined for x86, not ARM: > > > > > > > > [1] > > > > > > > > and [2] > > > > > > > > Thus, > > > > > > > > > > > > > > > > drivers/xen/gntdev.c:408:10: error: implicit declaration of > > > > > > > > function > > > > > > > > ‘pfn_to_mfn’ [-Werror=implicit-function-declaration] > > > > > > > >      mfn = pfn_to_mfn(page_to_pfn(map->pages[i])); > > > > > > > > > > > > > > > > So, I'll keep __pfn_to_mfn > > > > > > > How will this work on non-PV x86? > > > > > > So, you mean I need: > > > > > > #ifdef CONFIG_X86 > > > > > > mfn = pfn_to_mfn(page_to_pfn(map->pages[i])); > > > > > > #else > > > > > > mfn = __pfn_to_mfn(page_to_pfn(map->pages[i])); > > > > > > #endif > > > > > > > > > > > I'd rather fix it in ARM code. Stefano, why does ARM uses the > > > > > underscored version? > > > > Do you want me to add one more patch for ARM to wrap __pfn_to_mfn > > > > with static inline for ARM? e.g. > > > > static inline ...pfn_to_mfn(...) > > > > { > > > >     __pfn_to_mfn(); > > > > } > > > A Xen on ARM guest doesn't actually know the mfns behind its own > > > pseudo-physical pages. This is why we stopped using pfn_to_mfn and > > > started using pfn_to_bfn instead, which will generally return "pfn", > > > unless the page is a foreign grant. See include/xen/arm/page.h. > > > pfn_to_bfn was also introduced on x86. For example, see the usage of > > > pfn_to_bfn in drivers/xen/swiotlb-xen.c. Otherwise, if you don't care > > > about other mapped grants, you can just use pfn_to_gfn, that always > > > returns pfn. > > > > I think then this code needs to use pfn_to_bfn(). > Ok > > > > > > > Also, for your information, we support different page granularities in > > > Linux as a Xen guest, see the comment at include/xen/arm/page.h: > > > > > > /* > > > * The pseudo-physical frame (pfn) used in all the helpers is always > > > based > > > * on Xen page granularity (i.e 4KB). > > > * > > > * A Linux page may be split across multiple non-contiguous Xen page so > > > we > > > * have to keep track with frame based on 4KB page granularity. > > > * > > > * PV drivers should never make a direct usage of those helpers > > > (particularly > > > * pfn_to_gfn and gfn_to_pfn). > > > */ > > > > > > A Linux page could be 64K, but a Xen page is always 4K. A granted page > > > is also 4K. We have helpers to take into account the offsets to map > > > multiple Xen grants in a single Linux page, see for example > > > drivers/xen/grant-table.c:gnttab_foreach_grant. Most PV drivers have > > > been converted to be able to work with 64K pages correctly, but if I > > > remember correctly gntdev.c is the only remaining driver that doesn't > > > support 64K pages yet, so you don't have to deal with it if you don't > > > want to. > > > > I believe somewhere in this series there is a test for PAGE_SIZE vs. > > XEN_PAGE_SIZE. Right, Oleksandr? > Not in gntdev. You might have seen this in xen-drmfront/xen-sndfront, > but I didn't touch gntdev for that. Do you want me to add yet another patch > in the series to check for that? gntdev.c is already not capable of handling PAGE_SIZE != XEN_PAGE_SIZE, so you are not going to break anything that is not already broken :-) If your new gntdev.c code relies on PAGE_SIZE == XEN_PAGE_SIZE, it might be good to add an in-code comment about it, just to make it easier to fix the whole of gntdev.c in the future. > > Thanks for the explanation. --8323329-656447964-1528735873=:14695--