From: Mike Rapoport <r...@linux.ibm.com>

[ Upstream commit a0bf842e89a3842162aa8514b9bf4611c86fee10 ]

Add panic() calls if memblock_alloc() returns NULL.

The panic() format duplicates the one used by memblock itself and in
order to avoid explosion with long parameters list replace open coded
allocation size calculations with a local variable.

Link: 
http://lkml.kernel.org/r/1548057848-15136-19-git-send-email-r...@linux.ibm.com
Signed-off-by: Mike Rapoport <r...@linux.ibm.com>
Cc: Catalin Marinas <catalin.mari...@arm.com>
Cc: Christophe Leroy <christophe.le...@c-s.fr>
Cc: Christoph Hellwig <h...@lst.de>
Cc: "David S. Miller" <da...@davemloft.net>
Cc: Dennis Zhou <den...@kernel.org>
Cc: Geert Uytterhoeven <ge...@linux-m68k.org>
Cc: Greentime Hu <green...@gmail.com>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Cc: Guan Xuetao <g...@pku.edu.cn>
Cc: Guo Ren <guo...@kernel.org>
Cc: Guo Ren <ren_...@c-sky.com>                         [c-sky]
Cc: Heiko Carstens <heiko.carst...@de.ibm.com>
Cc: Juergen Gross <jgr...@suse.com>                     [Xen]
Cc: Mark Salter <msal...@redhat.com>
Cc: Matt Turner <matts...@gmail.com>
Cc: Max Filippov <jcmvb...@gmail.com>
Cc: Michael Ellerman <m...@ellerman.id.au>
Cc: Michal Simek <mon...@monstr.eu>
Cc: Paul Burton <paul.bur...@mips.com>
Cc: Petr Mladek <pmla...@suse.com>
Cc: Richard Weinberger <rich...@nod.at>
Cc: Rich Felker <dal...@libc.org>
Cc: Rob Herring <robh...@kernel.org>
Cc: Rob Herring <r...@kernel.org>
Cc: Russell King <li...@armlinux.org.uk>
Cc: Stafford Horne <sho...@gmail.com>
Cc: Tony Luck <tony.l...@intel.com>
Cc: Vineet Gupta <vgu...@synopsys.com>
Cc: Yoshinori Sato <ys...@users.sourceforge.jp>
Signed-off-by: Andrew Morton <a...@linux-foundation.org>
Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 kernel/dma/swiotlb.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index c873f9cc2146..41224f0ec40e 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -191,6 +191,7 @@ void __init swiotlb_update_mem_attributes(void)
 int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
 {
        unsigned long i, bytes;
+       size_t alloc_size;
 
        bytes = nslabs << IO_TLB_SHIFT;
 
@@ -203,12 +204,18 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long 
nslabs, int verbose)
         * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
         * between io_tlb_start and io_tlb_end.
         */
-       io_tlb_list = memblock_alloc(
-                               PAGE_ALIGN(io_tlb_nslabs * sizeof(int)),
-                               PAGE_SIZE);
-       io_tlb_orig_addr = memblock_alloc(
-                               PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t)),
-                               PAGE_SIZE);
+       alloc_size = PAGE_ALIGN(io_tlb_nslabs * sizeof(int));
+       io_tlb_list = memblock_alloc(alloc_size, PAGE_SIZE);
+       if (!io_tlb_list)
+               panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
+                     __func__, alloc_size, PAGE_SIZE);
+
+       alloc_size = PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t));
+       io_tlb_orig_addr = memblock_alloc(alloc_size, PAGE_SIZE);
+       if (!io_tlb_orig_addr)
+               panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
+                     __func__, alloc_size, PAGE_SIZE);
+
        for (i = 0; i < io_tlb_nslabs; i++) {
                io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE);
                io_tlb_orig_addr[i] = INVALID_PHYS_ADDR;
-- 
2.19.1

Reply via email to