From patchwork Mon Jan 21 08:03:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Rapoport X-Patchwork-Id: 10772887 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8E6A017FB for ; Mon, 21 Jan 2019 08:04:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7CB4028524 for ; Mon, 21 Jan 2019 08:04:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6FD2F29B02; Mon, 21 Jan 2019 08:04:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DAF4328524 for ; Mon, 21 Jan 2019 08:04:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=3pymrqCSEBKwSWxUKLRtnSDPv4kdoiVA5q1XMi2bgrk=; b=F+q ApUmsELRKfmejP9CdsV5j9KDJzTOw6csQBaVjhT8JtX2VBbVg3HrCuH3LqhPltgOM/eldGiGv4Yz3 HWLVCaNHWPLrcSUETJVhvKcbrU9iT8VBJLygLU8Qw9zJ4LIYD2d0T8Y5H0wMPhM7ZHhlILWhyXatb 2zwLGkv+SaE4MxcI64ld/Eq33GGiwlpT9DVKTY79ZEe85MiuLtYklKPl2/JFGTOJ/XP8gYVbr8964 CW87Eu8SkNZl45O5dpj6oomatZgrvtoA6akgtjYmVVX+nyUZfPr/gihElhlp+G9PPv24ENkv3Gg4W TDx9UyAGVJltPLc9kw/zB91eZJvMV2g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1glUZZ-0003wR-US; Mon, 21 Jan 2019 08:04:45 +0000 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1glUZO-0003kT-VX for linux-arm-kernel@lists.infradead.org; Mon, 21 Jan 2019 08:04:40 +0000 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x0L83ngM132193 for ; Mon, 21 Jan 2019 03:04:31 -0500 Received: from e06smtp05.uk.ibm.com (e06smtp05.uk.ibm.com [195.75.94.101]) by mx0a-001b2d01.pphosted.com with ESMTP id 2q59werw54-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 21 Jan 2019 03:04:30 -0500 Received: from localhost by e06smtp05.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 Jan 2019 08:04:27 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp05.uk.ibm.com (192.168.101.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Mon, 21 Jan 2019 08:04:16 -0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x0L84FDr5177650 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 21 Jan 2019 08:04:15 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 94DC0AE051; Mon, 21 Jan 2019 08:04:15 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A62EFAE045; Mon, 21 Jan 2019 08:04:10 +0000 (GMT) Received: from rapoport-lnx (unknown [9.148.207.125]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Mon, 21 Jan 2019 08:04:10 +0000 (GMT) Received: by rapoport-lnx (sSMTP sendmail emulation); Mon, 21 Jan 2019 10:04:09 +0200 From: Mike Rapoport To: linux-mm@kvack.org Subject: [PATCH v2 00/21] Refine memblock API Date: Mon, 21 Jan 2019 10:03:47 +0200 X-Mailer: git-send-email 2.7.4 X-TM-AS-GCONF: 00 x-cbid: 19012108-0020-0000-0000-000003092E92 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19012108-0021-0000-0000-0000215A5BD8 Message-Id: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-01-21_04:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=3 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=808 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901210066 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190121_000435_449450_A97C2B37 X-CRM114-Status: GOOD ( 22.83 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rich Felker , linux-ia64@vger.kernel.org, devicetree@vger.kernel.org, Catalin Marinas , Heiko Carstens , x86@kernel.org, linux-mips@vger.kernel.org, Max Filippov , Guo Ren , sparclinux@vger.kernel.org, Christoph Hellwig , linux-s390@vger.kernel.org, linux-c6x-dev@linux-c6x.org, Yoshinori Sato , Richard Weinberger , linux-sh@vger.kernel.org, Russell King , kasan-dev@googlegroups.com, Mike Rapoport , Geert Uytterhoeven , Mark Salter , Dennis Zhou , Matt Turner , linux-snps-arc@lists.infradead.org, uclinux-h8-devel@lists.sourceforge.jp, Petr Mladek , linux-xtensa@linux-xtensa.org, linux-alpha@vger.kernel.org, linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org, Rob Herring , Greentime Hu , xen-devel@lists.xenproject.org, Stafford Horne , Guan Xuetao , linux-arm-kernel@lists.infradead.org, Michal Simek , Tony Luck , Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Paul Burton , Vineet Gupta , Michael Ellerman , Andrew Morton , linuxppc-dev@lists.ozlabs.org, "David S. Miller" , openrisc@lists.librecores.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Hi, Current memblock API is quite extensive and, which is more annoying, duplicated. Except the low-level functions that allow searching for a free memory region and marking it as reserved, memblock provides three (well, two and a half) sets of functions to allocate memory. There are several overlapping functions that return a physical address and there are functions that return virtual address. Those that return the virtual address may also clear the allocated memory. And, on top of all that, some allocators panic and some return NULL in case of error. This set tries to reduce the mess, and trim down the amount of memblock allocation methods. Patches 1-10 consolidate the functions that return physical address of the allocated memory Patches 11-13 are some trivial cleanups Patches 14-19 add checks for the return value of memblock_alloc*() and panics in case of errors. The patches 14-18 include some minor refactoring to have better readability of the resulting code and patch 19 is a mechanical addition of if (!ptr) panic(); after memblock_alloc*() calls. And, finally, patches 20 and 21 remove panic() calls memblock and _nopanic variants from memblock. v2 changes: * replace some more %lu with %zu * remove panics where they are not needed in s390 and in printk * collect Acked-by and Reviewed-by. Christophe Leroy (1): powerpc: use memblock functions returning virtual address Mike Rapoport (20): openrisc: prefer memblock APIs returning virtual address memblock: replace memblock_alloc_base(ANYWHERE) with memblock_phys_alloc memblock: drop memblock_alloc_base_nid() memblock: emphasize that memblock_alloc_range() returns a physical address memblock: memblock_phys_alloc_try_nid(): don't panic memblock: memblock_phys_alloc(): don't panic memblock: drop __memblock_alloc_base() memblock: drop memblock_alloc_base() memblock: refactor internal allocation functions memblock: make memblock_find_in_range_node() and choose_memblock_flags() static arch: use memblock_alloc() instead of memblock_alloc_from(size, align, 0) arch: don't memset(0) memory returned by memblock_alloc() ia64: add checks for the return value of memblock_alloc*() sparc: add checks for the return value of memblock_alloc*() mm/percpu: add checks for the return value of memblock_alloc*() init/main: add checks for the return value of memblock_alloc*() swiotlb: add checks for the return value of memblock_alloc*() treewide: add checks for the return value of memblock_alloc*() memblock: memblock_alloc_try_nid: don't panic memblock: drop memblock_alloc_*_nopanic() variants arch/alpha/kernel/core_cia.c | 5 +- arch/alpha/kernel/core_marvel.c | 6 + arch/alpha/kernel/pci-noop.c | 13 +- arch/alpha/kernel/pci.c | 11 +- arch/alpha/kernel/pci_iommu.c | 16 +- arch/alpha/kernel/setup.c | 2 +- arch/arc/kernel/unwind.c | 3 +- arch/arc/mm/highmem.c | 4 + arch/arm/kernel/setup.c | 6 + arch/arm/mm/init.c | 6 +- arch/arm/mm/mmu.c | 14 +- arch/arm64/kernel/setup.c | 8 +- arch/arm64/mm/kasan_init.c | 10 ++ arch/arm64/mm/mmu.c | 2 + arch/arm64/mm/numa.c | 4 + arch/c6x/mm/dma-coherent.c | 4 + arch/c6x/mm/init.c | 4 +- arch/csky/mm/highmem.c | 5 + arch/h8300/mm/init.c | 4 +- arch/ia64/kernel/mca.c | 25 +-- arch/ia64/mm/contig.c | 8 +- arch/ia64/mm/discontig.c | 4 + arch/ia64/mm/init.c | 38 ++++- arch/ia64/mm/tlb.c | 6 + arch/ia64/sn/kernel/io_common.c | 3 + arch/ia64/sn/kernel/setup.c | 12 +- arch/m68k/atari/stram.c | 4 + arch/m68k/mm/init.c | 3 + arch/m68k/mm/mcfmmu.c | 7 +- arch/m68k/mm/motorola.c | 9 ++ arch/m68k/mm/sun3mmu.c | 6 + arch/m68k/sun3/sun3dvma.c | 3 + arch/microblaze/mm/init.c | 10 +- arch/mips/cavium-octeon/dma-octeon.c | 3 + arch/mips/kernel/setup.c | 3 + arch/mips/kernel/traps.c | 5 +- arch/mips/mm/init.c | 5 + arch/nds32/mm/init.c | 12 ++ arch/openrisc/mm/init.c | 5 +- arch/openrisc/mm/ioremap.c | 8 +- arch/powerpc/kernel/dt_cpu_ftrs.c | 8 +- arch/powerpc/kernel/irq.c | 5 - arch/powerpc/kernel/paca.c | 6 +- arch/powerpc/kernel/pci_32.c | 3 + arch/powerpc/kernel/prom.c | 5 +- arch/powerpc/kernel/rtas.c | 6 +- arch/powerpc/kernel/setup-common.c | 3 + arch/powerpc/kernel/setup_32.c | 26 ++-- arch/powerpc/kernel/setup_64.c | 4 + arch/powerpc/lib/alloc.c | 3 + arch/powerpc/mm/hash_utils_64.c | 11 +- arch/powerpc/mm/mmu_context_nohash.c | 9 ++ arch/powerpc/mm/numa.c | 4 + arch/powerpc/mm/pgtable-book3e.c | 12 +- arch/powerpc/mm/pgtable-book3s64.c | 3 + arch/powerpc/mm/pgtable-radix.c | 9 +- arch/powerpc/mm/ppc_mmu_32.c | 3 + arch/powerpc/platforms/pasemi/iommu.c | 3 + arch/powerpc/platforms/powermac/nvram.c | 3 + arch/powerpc/platforms/powernv/opal.c | 3 + arch/powerpc/platforms/powernv/pci-ioda.c | 8 + arch/powerpc/platforms/ps3/setup.c | 3 + arch/powerpc/sysdev/dart_iommu.c | 3 + arch/powerpc/sysdev/msi_bitmap.c | 3 + arch/s390/kernel/crash_dump.c | 3 + arch/s390/kernel/setup.c | 16 ++ arch/s390/kernel/smp.c | 9 +- arch/s390/kernel/topology.c | 6 + arch/s390/numa/mode_emu.c | 3 + arch/s390/numa/numa.c | 6 +- arch/sh/boards/mach-ap325rxa/setup.c | 5 +- arch/sh/boards/mach-ecovec24/setup.c | 10 +- arch/sh/boards/mach-kfr2r09/setup.c | 5 +- arch/sh/boards/mach-migor/setup.c | 5 +- arch/sh/boards/mach-se/7724/setup.c | 10 +- arch/sh/kernel/machine_kexec.c | 3 +- arch/sh/mm/init.c | 8 +- arch/sh/mm/numa.c | 4 + arch/sparc/kernel/prom_32.c | 6 +- arch/sparc/kernel/setup_64.c | 6 + arch/sparc/kernel/smp_64.c | 12 ++ arch/sparc/mm/init_32.c | 2 +- arch/sparc/mm/init_64.c | 11 ++ arch/sparc/mm/srmmu.c | 18 ++- arch/um/drivers/net_kern.c | 3 + arch/um/drivers/vector_kern.c | 3 + arch/um/kernel/initrd.c | 2 + arch/um/kernel/mem.c | 16 ++ arch/unicore32/kernel/setup.c | 4 + arch/unicore32/mm/mmu.c | 15 +- arch/x86/kernel/acpi/boot.c | 3 + arch/x86/kernel/apic/io_apic.c | 5 + arch/x86/kernel/e820.c | 5 +- arch/x86/kernel/setup_percpu.c | 10 +- arch/x86/mm/kasan_init_64.c | 14 +- arch/x86/mm/numa.c | 12 +- arch/x86/platform/olpc/olpc_dt.c | 3 + arch/x86/xen/p2m.c | 11 +- arch/xtensa/mm/kasan_init.c | 10 +- arch/xtensa/mm/mmu.c | 3 + drivers/clk/ti/clk.c | 3 + drivers/firmware/memmap.c | 2 +- drivers/macintosh/smu.c | 5 +- drivers/of/fdt.c | 8 +- drivers/of/of_reserved_mem.c | 7 +- drivers/of/unittest.c | 8 +- drivers/usb/early/xhci-dbc.c | 2 +- drivers/xen/swiotlb-xen.c | 7 +- include/linux/memblock.h | 59 +------ init/main.c | 26 +++- kernel/dma/swiotlb.c | 21 ++- kernel/power/snapshot.c | 3 + kernel/printk/printk.c | 9 +- lib/cpumask.c | 3 + mm/cma.c | 10 +- mm/kasan/init.c | 10 +- mm/memblock.c | 249 ++++++++++-------------------- mm/page_alloc.c | 10 +- mm/page_ext.c | 2 +- mm/percpu.c | 84 +++++++--- mm/sparse.c | 25 ++- 121 files changed, 860 insertions(+), 412 deletions(-)