From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755207AbdAAV7t (ORCPT ); Sun, 1 Jan 2017 16:59:49 -0500 Received: from mail-lf0-f53.google.com ([209.85.215.53]:35965 "EHLO mail-lf0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754636AbdAAV7r (ORCPT ); Sun, 1 Jan 2017 16:59:47 -0500 From: Michal Nazarewicz To: Michal Hocko , Jaewon Kim Cc: gregkh@linuxfoundation.org, akpm@linux-foundation.org, labbott@redhat.com, m.szyprowski@samsung.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, jaewon31.kim@gmail.com Subject: Re: [PATCH] mm: cma: print allocation failure reason and bitmap status In-Reply-To: <20161230094411.GD13301@dhcp22.suse.cz> Organization: http://mina86.com/ References: <1482978482-14007-1-git-send-email-jaewon31.kim@samsung.com> <20161229091449.GG29208@dhcp22.suse.cz> <58660BBE.1040807@samsung.com> <20161230094411.GD13301@dhcp22.suse.cz> User-Agent: Notmuch/0.19+53~g2e63a09 (http://notmuchmail.org) Emacs/26.0.50.2 (x86_64-unknown-linux-gnu) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAJFBMVEWbfGlUPDDHgE57V0jUupKjgIObY0PLrom9mH4dFRK4gmjPs41MxjOgAAACP0lEQVQ4T23Sv2vbQBQHcBk1xE6WyALX107VUEgmn6+ouUwpEQQ6uRjttkWP4CkBg2M0BQLBdPFZYPsyFYo7qEtKDQ7on+t7+nF2Ux8ahD587717OmNYrOvycHsZ+o2r051wHTHysAvGb8ygvgu4QWT0sCmkgZCIEnlV2X8BtyraazFGDuxhmKSQJMlwHQ7v5MHSNxmz78rfElwAa3ieVD9e+hBhjaPDDG6NgFo2f4wBMNIo5YmRtF0RyDgFjJjlMIWbnuM4x9MMfABGTlN4qgIQB4A1DEyA1BHWtfeWNUMwiVJKoqh97KrkOO+qzgluVYLvFCUKAX73nONeBr7BGMdM6Sg0kuep03VywLaIzRiVr+GAzKlpQIsAFnWAG2e6DT5WmWDiudZMIc6hYrMOmeMQK9WX0B+/RfjzL9DI7Y9/Iayn29Ci0r2i4f9gMimMSZLCDMalgQGU5hnUtqAN0OGvEmO1Wnl0C0wWSCEHnuHBqmygxdxA8oWXwbipoc1EoNR9DqOpBpOJrnr0criQab9ZT4LL+wI+K7GBQH30CrhUruilgP9DRTrhVWZCiAyILP+wiuLeCKGTD6r/nc8LOJcAwR6IBTUs+7CASw3QFZ0MdA2PI3zNziH4ZKVhXCRMBjeZ1DWMekKwDCASwExy+NQ86TaykaDAFHO4aP48y4fIcDM5yOG8GcTLbOyp8A8azjJI93JFd1EA6yN8sSxMQJWoABqniRZVykYgRXErzrdqExAoUrRb0xfRp8p2A/4XmfilTtkDZ4cAAAAASUVORK5CYII= X-Face: -TR8(rDTHy/(xl?SfWd1|3:TTgDIatE^t'vop%*gVg[kn$t{EpK(P"VQ=~T2#ysNmJKN$"yTRLB4YQs$4{[.]Fc1)*O]3+XO^oXM>Q#b^ix,O)Zbn)q[y06$`e3?C)`CwR9y5riE=fv^X@x$y?D:XO6L&x4f-}}I4=VRNwiA^t1-ZrVK^07.Pi/57c_du'& X-PGP: 50751FF4 X-PGP-FP: AC1F 5F5C D418 88F8 CC84 5858 2060 4012 5075 1FF4 X-Hashcash: 1:20:170101:linux-kernel@vger.kernel.org::RgA4GvNdMW7kIhmu:0000000000000000000000000000000000Gw5 X-Hashcash: 1:20:170101:akpm@linux-foundation.org::ZZcun/LKCJ/epiVP:00000000000000000000000000000000000007vW X-Hashcash: 1:20:170101:m.szyprowski@samsung.com::pE+23aBK3oexcVbb:00000000000000000000000000000000000002RFI X-Hashcash: 1:20:170101:jaewon31.kim@gmail.com::n0ZY9pQhqjXPgFHk:0000000000000000000000000000000000000003MJ7 X-Hashcash: 1:20:170101:labbott@redhat.com::IhFLk0GlV1kyFygn:00000000000000000000000000000000000000000004TOp X-Hashcash: 1:20:170101:jaewon31.kim@samsung.com::Jkf/2NlsM+77EwQT:00000000000000000000000000000000000003pRS X-Hashcash: 1:20:170101:gregkh@linuxfoundation.org::McukSP4Wb6+fz+eT:000000000000000000000000000000000004whP X-Hashcash: 1:20:170101:linux-mm@kvack.org::DLjYq4EeakYSE24m:00000000000000000000000000000000000000000004UJI X-Hashcash: 1:20:170101:mhocko@kernel.org::7nX5ZctXOppxtMKl:0000000000000000000000000000000000000000000060RT Date: Sun, 01 Jan 2017 22:59:40 +0100 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v01Lxtip031595 On Fri, Dec 30 2016, Michal Hocko wrote: > On Fri 30-12-16 16:24:46, Jaewon Kim wrote: > [...] >> >From 7577cc94da3af27907aa6eec590d2ef51e4b9d80 Mon Sep 17 00:00:00 2001 >> From: Jaewon Kim >> Date: Thu, 29 Dec 2016 11:00:16 +0900 >> Subject: [PATCH] mm: cma: print allocation failure reason and bitmap status >> >> There are many reasons of CMA allocation failure such as EBUSY, ENOMEM, EINTR. >> But we did not know error reason so far. This patch prints the error value. >> >> Additionally if CONFIG_CMA_DEBUG is enabled, this patch shows bitmap status to >> know available pages. Actually CMA internally try all available regions because >> some regions can be failed because of EBUSY. Bitmap status is useful to know in >> detail on both ENONEM and EBUSY; >> ENOMEM: not tried at all because of no available region >> it could be too small total region or could be fragmentation issue >> EBUSY: tried some region but all failed >> >> This is an ENOMEM example with this patch. >> [ 13.250961] [1: Binder:715_1: 846] cma: cma_alloc: alloc failed, req-size: 256 pages, ret: -12 >> Avabile pages also will be shown if CONFIG_CMA_DEBUG is enabled >> [ 13.251052] [1: Binder:715_1: 846] cma: number of available pages: 4@572+7@585+7@601+8@632+38@730+166@1114+127@1921=>357 pages, total: 2048 pages > > please mention how to interpret this information. > > some more style suggestions below >> >> Signed-off-by: Jaewon Kim Acked-by: Michal Nazarewicz >> --- >> mm/cma.c | 29 ++++++++++++++++++++++++++++- >> 1 file changed, 28 insertions(+), 1 deletion(-) >> >> diff --git a/mm/cma.c b/mm/cma.c >> index c960459..1bcd9db 100644 >> --- a/mm/cma.c >> +++ b/mm/cma.c >> @@ -369,7 +369,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) >> unsigned long start = 0; >> unsigned long bitmap_maxno, bitmap_no, bitmap_count; >> struct page *page = NULL; >> - int ret; >> + int ret = -ENOMEM; >> >> if (!cma || !cma->count) >> return NULL; >> @@ -427,6 +427,33 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) >> trace_cma_alloc(pfn, page, count, align); >> >> pr_debug("%s(): returned %p\n", __func__, page); This line should be moved after the ‘if (ret != 0)’ block, i.e. just before return. >> + >> + if (ret != 0) > > you can simply do > if (!ret) { > > pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", > __func__, count, ret); > debug_show_cma_areas(); > } > > return page; > > static void debug_show_cma_areas(void) > { > #ifdef CONFIG_CMA_DEBUG > unsigned int nr, nr_total = 0; > unsigned long next_set_bit; > > mutex_lock(&cma->lock); > pr_info("number of available pages: "); > start = 0; > for (;;) { > bitmap_no = find_next_zero_bit(cma->bitmap, cma->count, start); > if (bitmap_no >= cma->count) > break; > next_set_bit = find_next_bit(cma->bitmap, cma->count, bitmap_no); > nr = next_set_bit - bitmap_no; > pr_cont("%s%u@%lu", nr_total ? "+" : "", nr, bitmap_no); > nr_total += nr; > start = bitmap_no + nr; > } > pr_cont("=>%u pages, total: %lu pages\n", nr_total, cma->count); Perhaps: pr_cont("=> %u free of %lu total pages\n", nr_total, cma->count); or shorter (but more cryptic): pr_cont("=> %u/%lu pages\n", nr_total, cma->count); > mutex_unlock(&cma->lock); > #endif > } Actually, Linux style is more like: #ifdef CONFIG_CMA_DEBUG static void cma_debug_show_areas() { … } #else static inline void cma_debug_show_areas() { } #endif > > -- > Michal Hocko > SUSE Labs -- Best regards ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ «If at first you don’t succeed, give up skydiving»