From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759886AbcAMMhB (ORCPT ); Wed, 13 Jan 2016 07:37:01 -0500 Received: from foss.arm.com ([217.140.101.70]:40373 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757004AbcAMMhA (ORCPT ); Wed, 13 Jan 2016 07:37:00 -0500 Subject: Re: [PATCH v6 2/5] common: DMA-mapping: add DMA_ATTR_ALLOC_SINGLE_PAGES attribute To: Douglas Anderson , linux@arm.linux.org.uk, mchehab@osg.samsung.com, tfiga@chromium.org, m.szyprowski@samsung.com References: <1452533428-12762-1-git-send-email-dianders@chromium.org> <1452533428-12762-3-git-send-email-dianders@chromium.org> Cc: pawel@osciak.com, Dmitry Torokhov , hch@infradead.org, corbet@lwn.net, akpm@linux-foundation.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org From: Robin Murphy Message-ID: <569644E8.2020600@arm.com> Date: Wed, 13 Jan 2016 12:36:56 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <1452533428-12762-3-git-send-email-dianders@chromium.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/01/16 17:30, Douglas Anderson wrote: > This patch adds the DMA_ATTR_ALLOC_SINGLE_PAGES attribute to the > DMA-mapping subsystem. > > This attribute can be used as a hint to the DMA-mapping subsystem that > it's likely not worth it to try to allocate large pages behind the > scenes. Large pages are likely to make an IOMMU TLB work more > efficiently but may not be worth it. See the Documentation contained in > this patch for more details about this attribute and when to use it. > > Note that the name of the hint (DMA_ATTR_ALLOC_SINGLE_PAGES) is loosely > based on the name MADV_NOHUGEPAGE. Just as there is MADV_NOHUGEPAGE > vs. MADV_HUGEPAGE we could also add an "opposite" attribute to > DMA_ATTR_ALLOC_SINGLE_PAGES. Without having the "opposite" attribute > the lack of DMA_ATTR_ALLOC_SINGLE_PAGES means "use your best judgement > about whether to use small pages or large pages". I did ponder the discussion on v4 over the weekend and arrived at DMA_ATTR_LOW_ORDER_ALLOC and a shorter, more generalised description, but ALLOC_SINGLE_PAGES seems just as good to me. Reviewed-by: Robin Murphy Thanks, Robin. > Signed-off-by: Douglas Anderson > Acked-by: Marek Szyprowski > --- > Changes in v6: > - renamed DMA_ATTR_NO_HUGE_PAGE to DMA_ATTR_ALLOC_SINGLE_PAGES > > Changes in v5: > - renamed DMA_ATTR_NOHUGEPAGE to DMA_ATTR_NO_HUGE_PAGE > - s/ping ping/ping pong/ > > Changes in v4: > - renamed DMA_ATTR_SEQUENTIAL to DMA_ATTR_NOHUGEPAGE > - added Marek's ack > > Changes in v3: > - add DMA_ATTR_SEQUENTIAL attribute new for v3 > > Changes in v2: None > > Documentation/DMA-attributes.txt | 23 +++++++++++++++++++++++ > include/linux/dma-attrs.h | 1 + > 2 files changed, 24 insertions(+) > > diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt > index 18dc52c4f2a0..69b7b65ab516 100644 > --- a/Documentation/DMA-attributes.txt > +++ b/Documentation/DMA-attributes.txt > @@ -100,3 +100,26 @@ allocated by dma_alloc_attrs() function from individual pages if it can > be mapped as contiguous chunk into device dma address space. By > specifying this attribute the allocated buffer is forced to be contiguous > also in physical memory. > + > +DMA_ATTR_ALLOC_SINGLE_PAGES > +------------------------ > + > +This is a hint to the DMA-mapping subsystem that it's probably not worth > +the time to try to allocate memory to in a way that gives better TLB > +efficiency (AKA it's not worth trying to build the mapping out of larger > +pages). You might want to specify this if: > +- You know that the accesses to this memory won't thrash the TLB. > + You might know that the accesses are likely to be sequential or > + that they aren't sequential but it's unlikely you'll ping-pong > + between many addresses that are likely to be in different physical > + pages. > +- You know that the penalty of TLB misses while accessing the > + memory will be small enough to be inconsequential. If you are > + doing a heavy operation like decryption or decompression this > + might be the case. > +- You know that the DMA mapping is fairly transitory. If you expect > + the mapping to have a short lifetime then it may be worth it to > + optimize allocation (avoid coming up with large pages) instead of > + getting the slight performance win of larger pages. > +Setting this hint doesn't guarantee that you won't get huge pages, but it > +means that we won't try quite as hard to get them. > diff --git a/include/linux/dma-attrs.h b/include/linux/dma-attrs.h > index 99c0be00b47c..5246239a4953 100644 > --- a/include/linux/dma-attrs.h > +++ b/include/linux/dma-attrs.h > @@ -18,6 +18,7 @@ enum dma_attr { > DMA_ATTR_NO_KERNEL_MAPPING, > DMA_ATTR_SKIP_CPU_SYNC, > DMA_ATTR_FORCE_CONTIGUOUS, > + DMA_ATTR_ALLOC_SINGLE_PAGES, > DMA_ATTR_MAX, > }; > >