Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2424106imj; Mon, 18 Feb 2019 05:52:22 -0800 (PST) X-Google-Smtp-Source: AHgI3IZAHoX8QYU0Xpb8x2/MNaU0ap9pKQWjiY40waFtFcc/9pe0KaVoBdshAaR+Dmp1Kh2Ex2EF X-Received: by 2002:a63:1e12:: with SMTP id e18mr19017697pge.76.1550497941996; Mon, 18 Feb 2019 05:52:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550497941; cv=none; d=google.com; s=arc-20160816; b=Mj9/B+3UB83nH7mJsa1wJKV1nEJDUItmpQDVErH0eDCP/QGdIhbgnxcj8PGERUM3qx 1OWCtsWEjrU1bFKJkekLZSkNSoLCNNPJ3IPXQQX430HPSZIj5BUC4wU2hOaMtmEDAQes ccubR+1Ut1l4s1lRAiSWmazVD6COp0wFbvDBiqba5gzzZ9ZQvvQbsgDo+S1m+MEsmbci bKlj5/8iGmABCl1Wa+Kc7Ok1vUcYIFG6+AvjUXFTn/b8PeQ5fJZSgy5i8UN33MZVMKui +UKG7gkOBsJvYVzyiiCWFgH0GhieNkUZT4XywpCRJCVCYIhjVabpoDsEjKwX8XdONHr0 0w8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:cms-type:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:cc:to:subject:dkim-signature:dkim-filter; bh=er1pPMaGUu+8A5IAKmzhmjQZ7rLZcUzbNITov52MThs=; b=e35uKQ5veLt+XsP/OLp1isIaAvtXN2ZXHkN7BV7uLxnrO8R6ZXGXef9rXE1RPuaBci EPxEjTokdf+zjcRPXTFAYjynpoFCcSottoxAevE4WeLFjz1rfbRz9oSAqtM+PwWEi9OD x714hiaa8hCyPK6fve2COe/VxIKv09K17GYGKUt6n7UH8q9HkwfZEeoFXO4ywzV82u6y Pbzbh+J/CrWxWzaS4RaFKKc/Wr4cPJM2hSu1/Wt9IPzRzBpZ33CN16km2CMu/YrXkPZl Ubv5EgATMYvj7Vk0UZIu5HiuOXBedBmRQa4hrWdCVvtk1FHDdNLijYBtMXoEh9oHz6WG P8jw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b="V2K4q+/g"; 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=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h11si11928376pgq.405.2019.02.18.05.52.05; Mon, 18 Feb 2019 05:52:21 -0800 (PST) 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=@samsung.com header.s=mail20170921 header.b="V2K4q+/g"; 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=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732552AbfBRNwA (ORCPT + 99 others); Mon, 18 Feb 2019 08:52:00 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:39188 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732538AbfBRNv6 (ORCPT ); Mon, 18 Feb 2019 08:51:58 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20190218135157euoutp0190b21eb0c1515cb30b5da3a7e03d38dc~EeaQA4SCi2182321823euoutp01f for ; Mon, 18 Feb 2019 13:51:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190218135157euoutp0190b21eb0c1515cb30b5da3a7e03d38dc~EeaQA4SCi2182321823euoutp01f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1550497917; bh=er1pPMaGUu+8A5IAKmzhmjQZ7rLZcUzbNITov52MThs=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=V2K4q+/gsdcTPmOWrB0rAKm0eWJvYF4+CJ2MA+R9OEiCuFWP6uiEAlNzVl1LuluHN pdOoPSb/3jlTN8fNj0DE1Pv/iGXzZqYUk2TzLzghzp5EgjlBicQ6SV9INbC3QPfoVm nz9xBeieNhXpJOB+GSsN1Sqd9kjpBmssX2OfhcPg= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190218135156eucas1p14aeae02aab847b38206df634b0d586a4~EeaPsNtzX3104931049eucas1p1y; Mon, 18 Feb 2019 13:51:56 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 5E.34.04441.C78BA6C5; Mon, 18 Feb 2019 13:51:56 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190218135155eucas1p157d73c8e779f2b4687d00def5acafa03~EeaO5D2y_2884728847eucas1p1-; Mon, 18 Feb 2019 13:51:55 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190218135155eusmtrp1bc661fe781bbcfcaf037c3a3d114a8a4~EeaOq1B9G0543705437eusmtrp1Q; Mon, 18 Feb 2019 13:51:55 +0000 (GMT) X-AuditID: cbfec7f2-5c9ff70000001159-72-5c6ab87ccc96 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id D0.25.04284.B78BA6C5; Mon, 18 Feb 2019 13:51:55 +0000 (GMT) Received: from [106.116.147.30] (unknown [106.116.147.30]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190218135155eusmtip17fe86d9f3ede33183c96c2bf2af101b5~EeaOUnQkd0431104311eusmtip1n; Mon, 18 Feb 2019 13:51:55 +0000 (GMT) Subject: Re: [PATCH] dma-contiguous: do not allocate a single page from CMA area To: Nicolin Chen , robin.murphy@arm.com, hch@lst.de Cc: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org From: Marek Szyprowski Message-ID: <5dc1865b-ab20-aa45-1d00-b8d95655226f@samsung.com> Date: Mon, 18 Feb 2019 14:51:54 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 MIME-Version: 1.0 In-Reply-To: <20190215200635.20733-1-nicoleotsuka@gmail.com> Content-Transfer-Encoding: 7bit Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrAKsWRmVeSWpSXmKPExsWy7djPc7o1O7JiDP52SVqsXH2UyWLBfmuL y7vmsFm86r3BbnHwwxNWB1aPNfPWMHrsnHWX3WPyjeWMHrtvNrB5fN4kF8AaxWWTkpqTWZZa pG+XwJXxaO5qxoKNohULLnE0MP4V6GLk5JAQMJFoWXiLrYuRi0NIYAWjRN+BhcwQzhdGicXz jkA5nxklVp/cxQzTMnPiL3aIxHJGiVXf97JAOO8ZJd4dWs4OUiUsECSx90cjI4gtIuAtseDs Z1YQm1nASeJV51SwOJuAoUTX2y42EJtXwE7i/McLYHEWAVWJaVfXgtmiAjESU84dYYeoEZQ4 OfMJC4jNKWAjMe39OhaImfIS29/OYYawxSVuPZnPBHKQhMAidok7//9Dne0i8WHnFjYIW1ji 1fEt7BC2jMTpyT0sEA3NjBLtM2axQzg9jBJb5+yA6rCWOHz8ItALHEArNCXW79KHCDtKbGvd zAYSlhDgk7jxVhDiCD6JSdumM0OEeSU62oQgqtUkZh1fB7f24IVLzBMYlWYheW0WkndmIXln FsLeBYwsqxjFU0uLc9NTiw3zUsv1ihNzi0vz0vWS83M3MQLTzel/xz/tYPx6KekQowAHoxIP 74LlWTFCrIllxZW5hxglOJiVRHj71gOFeFMSK6tSi/Lji0pzUosPMUpzsCiJ81YzPIgWEkhP LEnNTk0tSC2CyTJxcEo1MGqtbLtTHHJrYlXJsgvG2w7bL4z+3Ml1+c6O6/v717gXF9yb2ffO 4K3MnImvxF/UxNZ1cohPfn9y/d94bWer80e0lt74P9n/o1rmoq03+jqWLfz/et7xW1323t/8 a4NLzmRskrv/quvl+Qn/mB9JbeEs3zPJ8lLZ5nANrprsLYVayl6e4lxH5yxVYinOSDTUYi4q TgQAAcm5qzMDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrAIsWRmVeSWpSXmKPExsVy+t/xu7rVO7JiDI6eULRYufook8WC/dYW l3fNYbN41XuD3eLghyesDqwea+atYfTYOesuu8fkG8sZPXbfbGDz+LxJLoA1Ss+mKL+0JFUh I7+4xFYp2tDCSM/Q0kLPyMRSz9DYPNbKyFRJ384mJTUnsyy1SN8uQS/j0dzVjAUbRSsWXOJo YPwr0MXIySEhYCIxc+IvdhBbSGApo8SendkQcRmJk9MaWCFsYYk/17rYuhi5gGreMkosvb6B BSQhLBAksfdHIyOILSLgLbHg7GewBmYBJ4lXnVMZIRr6GSW27l/FBJJgEzCU6HoLMomTg1fA TuL8xwtgzSwCqhLTrq4Fsjk4RAViJK6eY4QoEZQ4OfMJ2C5OARuJae/XsUDMV5f4M+8SM4Qt L7H97RwoW1zi1pP5TBMYhWYhaZ+FpGUWkpZZSFoWMLKsYhRJLS3OTc8tNtQrTswtLs1L10vO z93ECIytbcd+bt7BeGlj8CFGAQ5GJR7eBcuzYoRYE8uKK3MPMUpwMCuJ8PatBwrxpiRWVqUW 5ccXleakFh9iNAX6bSKzlGhyPjDu80riDU0NzS0sDc2NzY3NLJTEec8bVEYJCaQnlqRmp6YW pBbB9DFxcEo1MJp03tmxbF7b65vnXWXKLi+dsYPjrDT7naxLR2QuxGwJPRl0QmPnP3Ohvf5p fSIXVs07ssNxn5vtvROayn5hp7h2PdBceO7JjchPN5/c8L2q2mw5s4dLW5Wnvjp4Y5+83+rK Mu07my2Vft6vUllW7THPddn8x7ItkzqWym0x7s41cfx5akndcwklluKMREMt5qLiRABxwgIQ wwIAAA== X-CMS-MailID: 20190218135155eucas1p157d73c8e779f2b4687d00def5acafa03 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20190215200726epcas2p1f3da0044c08c5dae90eec3d73656c135 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190215200726epcas2p1f3da0044c08c5dae90eec3d73656c135 References: <20190215200635.20733-1-nicoleotsuka@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Nicolin, On 2019-02-15 21:06, Nicolin Chen wrote: > The addresses within a single page are always contiguous, so it's > not so necessary to always allocate one single page from CMA area. > Since the CMA area has a limited predefined size of space, it may > run out of space in heavy use cases, where there might be quite a > lot CMA pages being allocated for single pages. > > However, there is also a concern that a device might care where a > page comes from -- it might expect the page from CMA area and act > differently if the page doesn't. > > This patch tries to skip of one-page size allocations and returns > NULL so as to let callers allocate normal pages unless the device > has its own CMA area. This would save resources from the CMA area > for more CMA allocations. And it'd also reduce CMA fragmentations > resulted from trivial allocations. > > Signed-off-by: Nicolin Chen Acked-by: Marek Szyprowski > --- > kernel/dma/contiguous.c | 22 +++++++++++++++++++--- > 1 file changed, 19 insertions(+), 3 deletions(-) > > diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c > index b2a87905846d..09074bd04793 100644 > --- a/kernel/dma/contiguous.c > +++ b/kernel/dma/contiguous.c > @@ -186,16 +186,32 @@ int __init dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base, > * > * This function allocates memory buffer for specified device. It uses > * device specific contiguous memory area if available or the default > - * global one. Requires architecture specific dev_get_cma_area() helper > - * function. > + * global one. > + * > + * However, it skips one-page size of allocations from the global area. > + * As the addresses within one page are always contiguous, so there is > + * no need to waste CMA pages for that kind; it also helps reduce the > + * fragmentations in the CMA area. So a caller should be the rebounder > + * in such case to allocate a normal page upon NULL return value. > + * > + * Requires architecture specific dev_get_cma_area() helper function. > */ > struct page *dma_alloc_from_contiguous(struct device *dev, size_t count, > unsigned int align, bool no_warn) > { > + struct cma *cma; > + > if (align > CONFIG_CMA_ALIGNMENT) > align = CONFIG_CMA_ALIGNMENT; > > - return cma_alloc(dev_get_cma_area(dev), count, align, no_warn); > + if (dev && dev->cma_area) > + cma = dev->cma_area; > + else if (count > 1) > + cma = dma_contiguous_default_area; > + else > + return NULL; > + > + return cma_alloc(cma, count, align, no_warn); > } > > /** Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland