From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Rapoport Date: Mon, 21 Jan 2019 08:04:01 +0000 Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Message-Id: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> List-Id: References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-mm@kvack.org 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 Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD36FC282DB for ; Mon, 21 Jan 2019 08:07:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AEBC220823 for ; Mon, 21 Jan 2019 08:07:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729261AbfAUIHR (ORCPT ); Mon, 21 Jan 2019 03:07:17 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:56478 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729892AbfAUIFy (ORCPT ); Mon, 21 Jan 2019 03:05:54 -0500 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x0L84vT7131641 for ; Mon, 21 Jan 2019 03:05:53 -0500 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0b-001b2d01.pphosted.com with ESMTP id 2q590xu3bs-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 21 Jan 2019 03:05:53 -0500 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 Jan 2019 08:05:50 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp07.uk.ibm.com (192.168.101.137) 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:05:39 -0000 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x0L85caw29032612 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 21 Jan 2019 08:05:38 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4571C4203F; Mon, 21 Jan 2019 08:05:38 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 55F6142047; Mon, 21 Jan 2019 08:05:33 +0000 (GMT) Received: from rapoport-lnx (unknown [9.148.207.125]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Mon, 21 Jan 2019 08:05:33 +0000 (GMT) Received: by rapoport-lnx (sSMTP sendmail emulation); Mon, 21 Jan 2019 10:05:32 +0200 From: Mike Rapoport To: linux-mm@kvack.org Cc: Andrew Morton , Catalin Marinas , Christoph Hellwig , "David S. Miller" , Dennis Zhou , Geert Uytterhoeven , Greentime Hu , Greg Kroah-Hartman , Guan Xuetao , Guo Ren , Heiko Carstens , Mark Salter , Matt Turner , Max Filippov , Michael Ellerman , Michal Simek , Paul Burton , Petr Mladek , Rich Felker , Richard Weinberger , Rob Herring , Russell King , Stafford Horne , Tony Luck , Vineet Gupta , Yoshinori Sato , devicetree@vger.kernel.org, kasan-dev@googlegroups.com, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-c6x-dev@linux-c6x.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-um@lists.infradead.org, linux-usb@vger.kernel.org, linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org, openrisc@lists.librecores.org, sparclinux@vger.kernel.org, uclinux-h8-devel@lists.sourceforge.jp, x86@kernel.org, xen-devel@lists.xenproject.org, Mike Rapoport Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Date: Mon, 21 Jan 2019 10:04:01 +0200 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 19012108-0028-0000-0000-0000033BE18C X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19012108-0029-0000-0000-000023F915A0 Message-Id: <1548057848-15136-15-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=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901210066 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mike Rapoport Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Date: Mon, 21 Jan 2019 10:04:01 +0200 In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> Message-Id: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org List-Archive: To: linux-mm@kvack.org 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 List-ID: Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Rapoport Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Date: Mon, 21 Jan 2019 10:04:01 +0200 Message-ID: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-mm@kvack.org 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-xten List-Id: devicetree@vger.kernel.org QWRkIHBhbmljKCkgY2FsbHMgaWYgbWVtYmxvY2tfYWxsb2MqKCkgcmV0dXJucyBOVUxMLgoKTW9z dCBvZiB0aGUgY2hhbmdlcyBhcmUgc2ltcGx5IGFkZGl0aW9uIG9mCgoJaWYoIXB0cikKCQlwYW5p YygpOwoKc3RhdGVtZW50cyBhZnRlciB0aGUgY2FsbHMgdG8gbWVtYmxvY2tfYWxsb2MqKCkgdmFy aWFudHMuCgpFeGNlcHRpb25zIGFyZSBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlKCkgYW5kIGlh NjRfbG9nX2luaXQoKSB0aGF0IHdlcmUKc2xpZ2h0bHkgcmVmYWN0b3JlZCB0byBhY2NvbW1vZGF0 ZSB0aGUgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogTWlrZSBSYXBvcG9ydCA8cnBwdEBsaW51eC5p Ym0uY29tPgotLS0KIGFyY2gvaWE2NC9rZXJuZWwvbWNhLmMgICAgICAgICAgfCAyMCArKysrKysr KysrKysrKy0tLS0tLQogYXJjaC9pYTY0L21tL2NvbnRpZy5jICAgICAgICAgICB8ICA4ICsrKysr Ky0tCiBhcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgICAgICAgIHwgIDQgKysrKwogYXJjaC9pYTY0 L21tL2luaXQuYyAgICAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tCiBhcmNoL2lhNjQvbW0vdGxiLmMgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBh cmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jIHwgIDMgKysrCiBhcmNoL2lhNjQvc24va2Vy bmVsL3NldHVwLmMgICAgIHwgMTIgKysrKysrKysrKystCiA3IGZpbGVzIGNoYW5nZWQsIDc0IGlu c2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJu ZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDM3MGJjMzQuLjVjYWJiM2Yg MTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5l bC9tY2EuYwpAQCAtMzU5LDExICszNTksNiBAQCB0eXBlZGVmIHN0cnVjdCBpYTY0X3N0YXRlX2xv Z19zCiAKIHN0YXRpYyBpYTY0X3N0YXRlX2xvZ190IGlhNjRfc3RhdGVfbG9nW0lBNjRfTUFYX0xP R19UWVBFU107CiAKLSNkZWZpbmUgSUE2NF9MT0dfQUxMT0NBVEUoaXQsIHNpemUpIFwKLQl7aWE2 NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2dbSUE2NF9MT0dfQ1VSUl9JTkRFWChpdCldID0gXAotCQko aWE2NF9lcnJfcmVjX3QgKiltZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpOyBc Ci0JaWE2NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2dbSUE2NF9MT0dfTkVYVF9JTkRFWChpdCldID0g XAotCQkoaWE2NF9lcnJfcmVjX3QgKiltZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllU RVMpO30KICNkZWZpbmUgSUE2NF9MT0dfTE9DS19JTklUKGl0KSBzcGluX2xvY2tfaW5pdCgmaWE2 NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2NrKQogI2RlZmluZSBJQTY0X0xPR19MT0NLKGl0KSAgICAg IHNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvY2ssIHMpCiAjZGVm aW5lIElBNjRfTE9HX1VOTE9DSyhpdCkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9z dGF0ZV9sb2dbaXRdLmlzbF9sb2NrLHMpCkBAIC0zNzgsNiArMzczLDE5IEBAIHN0YXRpYyBpYTY0 X3N0YXRlX2xvZ190IGlhNjRfc3RhdGVfbG9nW0lBNjRfTUFYX0xPR19UWVBFU107CiAjZGVmaW5l IElBNjRfTE9HX0NVUlJfQlVGRkVSKGl0KSAgICh2b2lkICopKChpYTY0X3N0YXRlX2xvZ1tpdF0u aXNsX2xvZ1tJQTY0X0xPR19DVVJSX0lOREVYKGl0KV0pKQogI2RlZmluZSBJQTY0X0xPR19DT1VO VChpdCkgICAgICAgICBpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2NvdW50CiAKK3N0YXRpYyBpbmxp bmUgdm9pZCBpYTY0X2xvZ19hbGxvY2F0ZShpbnQgaXQsIHU2NCBzaXplKQoreworCWlhNjRfc3Rh dGVfbG9nW2l0XS5pc2xfbG9nW0lBNjRfTE9HX0NVUlJfSU5ERVgoaXQpXSA9CisJCShpYTY0X2Vy cl9yZWNfdCAqKW1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFp YTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvZ1tJQTY0X0xPR19DVVJSX0lOREVYKGl0KV0pCisJCXBh bmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICVsbHUgYnl0ZXNcbiIsIF9fZnVuY19fLCBzaXpl KTsKKworCWlhNjRfc3RhdGVfbG9nW2l0XS5pc2xfbG9nW0lBNjRfTE9HX05FWFRfSU5ERVgoaXQp XSA9CisJCShpYTY0X2Vycl9yZWNfdCAqKW1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9C WVRFUyk7CisJaWYgKCFpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvZ1tJQTY0X0xPR19ORVhUX0lO REVYKGl0KV0pCisJCXBhbmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICVsbHUgYnl0ZXNcbiIs IF9fZnVuY19fLCBzaXplKTsKK30KKwogLyoKICAqIGlhNjRfbG9nX2luaXQKICAqCVJlc2V0IHRo ZSBPUyBpYTY0IGxvZyBidWZmZXIKQEAgLTM5OSw3ICs0MDcsNyBAQCBpYTY0X2xvZ19pbml0KGlu dCBzYWxfaW5mb190eXBlKQogCQlyZXR1cm47CiAKIAkvLyBzZXQgdXAgT1MgZGF0YSBzdHJ1Y3R1 cmVzIHRvIGhvbGQgZXJyb3IgaW5mbwotCUlBNjRfTE9HX0FMTE9DQVRFKHNhbF9pbmZvX3R5cGUs IG1heF9zaXplKTsKKwlpYTY0X2xvZ19hbGxvY2F0ZShzYWxfaW5mb190eXBlLCBtYXhfc2l6ZSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQv bW0vY29udGlnLmMKaW5kZXggNmU0NDcyMy4uZDI5ZmI2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0 L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtODQsOSArODQsMTMg QEAgdm9pZCAqcGVyX2NwdV9pbml0KHZvaWQpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGFsbG9jX3Bl cl9jcHVfZGF0YSh2b2lkKQogewotCWNwdV9kYXRhID0gbWVtYmxvY2tfYWxsb2NfZnJvbShQRVJD UFVfUEFHRV9TSVpFICogbnVtX3Bvc3NpYmxlX2NwdXMoKSwKLQkJCQkgICAgICAgUEVSQ1BVX1BB R0VfU0laRSwKKwlzaXplX3Qgc2l6ZSA9IFBFUkNQVV9QQUdFX1NJWkUgKiBudW1fcG9zc2libGVf Y3B1cygpOworCisJY3B1X2RhdGEgPSBtZW1ibG9ja19hbGxvY19mcm9tKHNpemUsIFBFUkNQVV9Q QUdFX1NJWkUsCiAJCQkJICAgICAgIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFjcHVf ZGF0YSkKKwkJcGFuaWMoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPSVs eCBmcm9tPSVseFxuIiwKKwkJICAgICAgX19mdW5jX18sIHNpemUsIFBFUkNQVV9QQUdFX1NJWkUs IF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0 L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IGY5YzM2NzUu LjA1NDkwZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNo L2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTQ1NCw2ICs0NTQsMTAgQEAgc3RhdGljIHZvaWQgX19p bml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9k ZXNpemUpCiAJCQkJICAgICBfX3BhKE1BWF9ETUFfQUREUkVTUyksCiAJCQkJICAgICBNRU1CTE9D S19BTExPQ19BQ0NFU1NJQkxFLAogCQkJCSAgICAgYmVzdG5vZGUpOworCWlmICghcHRyKQorCQlw YW5pYygiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMgYWxpZ249MHglbHggbmlkPSVk IGZyb209JWx4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcGVybm9kZXNpemUsIFBFUkNQVV9QQUdF X1NJWkUsIGJlc3Rub2RlLAorCQkgICAgICBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCiAJcmV0 dXJuIHB0cjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQv bW0vaW5pdC5jCmluZGV4IDI5ZDg0MTUuLmU0OTIwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9t bS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNDQ0LDIzICs0NDQsNDUgQEAg aW50IF9faW5pdCBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlKHU2NCBzdGFydCwgdTY0IGVuZCwg dm9pZCAqYXJnKQogCiAJZm9yIChhZGRyZXNzID0gc3RhcnRfcGFnZTsgYWRkcmVzcyA8IGVuZF9w YWdlOyBhZGRyZXNzICs9IFBBR0VfU0laRSkgewogCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVz cyk7Ci0JCWlmIChwZ2Rfbm9uZSgqcGdkKSkKLQkJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdk LCBtZW1ibG9ja19hbGxvY19ub2RlKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBub2RlKSk7CisJCWlm IChwZ2Rfbm9uZSgqcGdkKSkgeworCQkJcHVkID0gbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJ WkUsIFBBR0VfU0laRSwgbm9kZSk7CisJCQlpZiAoIXB1ZCkKKwkJCQlnb3RvIGVycl9hbGxvYzsK KwkJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBwdWQpOworCQl9CiAJCXB1ZCA9IHB1ZF9v ZmZzZXQocGdkLCBhZGRyZXNzKTsKIAotCQlpZiAocHVkX25vbmUoKnB1ZCkpCi0JCQlwdWRfcG9w dWxhdGUoJmluaXRfbW0sIHB1ZCwgbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0Vf U0laRSwgbm9kZSkpOworCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKKwkJCXBtZCA9IG1lbWJsb2Nr X2FsbG9jX25vZGUoUEFHRV9TSVpFLCBQQUdFX1NJWkUsIG5vZGUpOworCQkJaWYgKCFwbWQpCisJ CQkJZ290byBlcnJfYWxsb2M7CisJCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgcG1kKTsK KwkJfQogCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAKLQkJaWYgKHBtZF9ub25l KCpwbWQpKQotCQkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBtZW1ibG9ja19h bGxvY19ub2RlKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBub2RlKSk7CisJCWlmIChwbWRfbm9uZSgq cG1kKSkgeworCQkJcHRlID0gbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0VfU0la RSwgbm9kZSk7CisJCQlpZiAoIXB0ZSkKKwkJCQlnb3RvIGVycl9hbGxvYzsKKwkJCXBtZF9wb3B1 bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlKTsKKwkJfQogCQlwdGUgPSBwdGVfb2Zmc2V0 X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogCi0JCWlmIChwdGVfbm9uZSgqcHRlKSkKLQkJCXNldF9w dGUocHRlLCBwZm5fcHRlKF9fcGEobWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0Vf U0laRSwgbm9kZSkpID4+IFBBR0VfU0hJRlQsCisJCWlmIChwdGVfbm9uZSgqcHRlKSkgeworCQkJ dm9pZCAqcGFnZSA9IG1lbWJsb2NrX2FsbG9jX25vZGUoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJ CQkJCQkJIG5vZGUpOworCQkJaWYgKCFwYWdlKQorCQkJCWdvdG8gZXJyX2FsbG9jOworCQkJc2V0 X3B0ZShwdGUsIHBmbl9wdGUoX19wYShwYWdlKSA+PiBQQUdFX1NISUZULAogCQkJCQkgICAgIFBB R0VfS0VSTkVMKSk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CisKK2Vycl9hbGxvYzoKKwlwYW5pYygi JXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMgYWxpZ249MHglbHggbmlkPSVkXG4iLAor CSAgICAgIF9fZnVuY19fLCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgbm9kZSk7CisJcmV0dXJuIC1F Tk9NRU07CiB9CiAKIHN0cnVjdCBtZW1tYXBfaW5pdF9jYWxsYmFja19kYXRhIHsKZGlmZiAtLWdp dCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCA5MzQwYmNi Li41ZmM4OWFhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0 L21tL3RsYi5jCkBAIC02MSw4ICs2MSwxNCBAQCBtbXVfY29udGV4dF9pbml0ICh2b2lkKQogewog CWlhNjRfY3R4LmJpdG1hcCA9IG1lbWJsb2NrX2FsbG9jKChpYTY0X2N0eC5tYXhfY3R4ICsgMSkg Pj4gMywKIAkJCQkJIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFpYTY0X2N0eC5iaXRtYXApCisJ CXBhbmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzXG4iLCBfX2Z1bmNfXywKKwkJ ICAgICAgKGlhNjRfY3R4Lm1heF9jdHggKyAxKSA+PiAzKTsKIAlpYTY0X2N0eC5mbHVzaG1hcCA9 IG1lbWJsb2NrX2FsbG9jKChpYTY0X2N0eC5tYXhfY3R4ICsgMSkgPj4gMywKIAkJCQkJICAgU01Q X0NBQ0hFX0JZVEVTKTsKKwlpZiAoIWlhNjRfY3R4LmZsdXNobWFwKQorCQlwYW5pYygiJXM6IEZh aWxlZCB0byBhbGxvY2F0ZSAldSBieXRlc1xuIiwgX19mdW5jX18sCisJCSAgICAgIChpYTY0X2N0 eC5tYXhfY3R4ICsgMSkgPj4gMyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24v a2VybmVsL2lvX2NvbW1vbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwppbmRl eCA4ZGYxM2QwLi5kNDY4NDczIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2Nv bW1vbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKQEAgLTM5NCw2ICsz OTQsOSBAQCB2b2lkIF9faW5pdCBodWJkZXZfaW5pdF9ub2RlKG5vZGVwZGFfdCAqIG5wZGEsIGNu b2RlaWRfdCBub2RlKQogCWh1YmRldl9pbmZvID0gKHN0cnVjdCBodWJkZXZfaW5mbyAqKW1lbWJs b2NrX2FsbG9jX25vZGUoc2l6ZSwKIAkJCQkJCQkJU01QX0NBQ0hFX0JZVEVTLAogCQkJCQkJCQlu b2RlKTsKKwlpZiAoIWh1YmRldl9pbmZvKQorCQlwYW5pYygiJXM6IEZhaWxlZCB0byBhbGxvY2F0 ZSAlZCBieXRlcyBhbGlnbj0weCV4IG5pZD0lZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHNpemUs IFNNUF9DQUNIRV9CWVRFUywgbm9kZSk7CiAKIAlucGRhLT5wZGluZm8gPSAodm9pZCAqKWh1YmRl dl9pbmZvOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJj aC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IGE2ZDQwYTIuLmU2YTUwNDkgMTAwNjQ0Ci0t LSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVs L3NldHVwLmMKQEAgLTUxMyw2ICs1MTMsMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHNuX2luaXRf cGRhcyhjaGFyICoqY21kbGluZV9wKQogCQlub2RlcGRhaW5kcltjbm9kZV0gPQogCQkgICAgbWVt YmxvY2tfYWxsb2Nfbm9kZShzaXplb2Yobm9kZXBkYV90KSwgU01QX0NBQ0hFX0JZVEVTLAogCQkJ CQljbm9kZSk7CisJCWlmICghbm9kZXBkYWluZHJbY25vZGVdKQorCQkJcGFuaWMoIiVzOiBGYWls ZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPTB4JXggbmlkPSVkXG4iLAorCQkJICAgICAg X19mdW5jX18sIHNpemVvZihub2RlcGRhX3QpLCBTTVBfQ0FDSEVfQllURVMsCisJCQkgICAgICBj bm9kZSk7CiAJCW1lbXNldChub2RlcGRhaW5kcltjbm9kZV0tPnBoeXNfY3B1aWQsIC0xLAogCQkg ICAgc2l6ZW9mKG5vZGVwZGFpbmRyW2Nub2RlXS0+cGh5c19jcHVpZCkpOwogCQlzcGluX2xvY2tf aW5pdCgmbm9kZXBkYWluZHJbY25vZGVdLT5wdGNfbG9jayk7CkBAIC01MjEsOSArNTI1LDE1IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBzbl9pbml0X3BkYXMoY2hhciAqKmNtZGxpbmVfcCkKIAkvKgog CSAqIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSBub2RlcGRhIGZvciBUSU9zLiAgRm9yIG5vdywgcHV0 IHRoZW0gb24gbm9kZSAwLgogCSAqLwotCWZvciAoY25vZGUgPSBudW1fb25saW5lX25vZGVzKCk7 IGNub2RlIDwgbnVtX2Nub2RlczsgY25vZGUrKykKKwlmb3IgKGNub2RlID0gbnVtX29ubGluZV9u b2RlcygpOyBjbm9kZSA8IG51bV9jbm9kZXM7IGNub2RlKyspIHsKIAkJbm9kZXBkYWluZHJbY25v ZGVdID0KIAkJICAgIG1lbWJsb2NrX2FsbG9jX25vZGUoc2l6ZW9mKG5vZGVwZGFfdCksIFNNUF9D QUNIRV9CWVRFUywgMCk7CisJCWlmICghbm9kZXBkYWluZHJbY25vZGVdKQorCQkJcGFuaWMoIiVz OiBGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPTB4JXggbmlkPSVkXG4iLAorCQkJ ICAgICAgX19mdW5jX18sIHNpemVvZihub2RlcGRhX3QpLCBTTVBfQ0FDSEVfQllURVMsCisJCQkg ICAgICBjbm9kZSk7CisJfQorCiAKIAkvKgogCSAqIE5vdyBjb3B5IHRoZSBhcnJheSBvZiBub2Rl cGRhIHBvaW50ZXJzIHRvIGVhY2ggbm9kZXBkYS4KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y Zy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,14/21] ia64: add checks for the return value of memblock_alloc*() From: Mike Rapoport Message-Id: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> Date: Mon, 21 Jan 2019 10:04:01 +0200 To: linux-mm@kvack.org Cc: Andrew Morton , Catalin Marinas , Christoph Hellwig , "David S. Miller" , Dennis Zhou , Geert Uytterhoeven , Greentime Hu , Greg Kroah-Hartman , Guan Xuetao , Guo Ren , Heiko Carstens , Mark Salter , Matt Turner , Max Filippov , Michael Ellerman , Michal Simek , Paul Burton , Petr Mladek , Rich Felker , Richard Weinberger , Rob Herring , Russell King , Stafford Horne , Tony Luck , Vineet Gupta , Yoshinori Sato , devicetree@vger.kernel.org, kasan-dev@googlegroups.com, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-c6x-dev@linux-c6x.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-um@lists.infradead.org, linux-usb@vger.kernel.org, linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org, openrisc@lists.librecores.org, sparclinux@vger.kernel.org, uclinux-h8-devel@lists.sourceforge.jp, x86@kernel.org, xen-devel@lists.xenproject.org, Mike Rapoport List-ID: QWRkIHBhbmljKCkgY2FsbHMgaWYgbWVtYmxvY2tfYWxsb2MqKCkgcmV0dXJucyBOVUxMLgoKTW9z dCBvZiB0aGUgY2hhbmdlcyBhcmUgc2ltcGx5IGFkZGl0aW9uIG9mCgoJaWYoIXB0cikKCQlwYW5p YygpOwoKc3RhdGVtZW50cyBhZnRlciB0aGUgY2FsbHMgdG8gbWVtYmxvY2tfYWxsb2MqKCkgdmFy aWFudHMuCgpFeGNlcHRpb25zIGFyZSBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlKCkgYW5kIGlh NjRfbG9nX2luaXQoKSB0aGF0IHdlcmUKc2xpZ2h0bHkgcmVmYWN0b3JlZCB0byBhY2NvbW1vZGF0 ZSB0aGUgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogTWlrZSBSYXBvcG9ydCA8cnBwdEBsaW51eC5p Ym0uY29tPgotLS0KIGFyY2gvaWE2NC9rZXJuZWwvbWNhLmMgICAgICAgICAgfCAyMCArKysrKysr KysrKysrKy0tLS0tLQogYXJjaC9pYTY0L21tL2NvbnRpZy5jICAgICAgICAgICB8ICA4ICsrKysr Ky0tCiBhcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgICAgICAgIHwgIDQgKysrKwogYXJjaC9pYTY0 L21tL2luaXQuYyAgICAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tCiBhcmNoL2lhNjQvbW0vdGxiLmMgICAgICAgICAgICAgIHwgIDYgKysrKysrCiBh cmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jIHwgIDMgKysrCiBhcmNoL2lhNjQvc24va2Vy bmVsL3NldHVwLmMgICAgIHwgMTIgKysrKysrKysrKystCiA3IGZpbGVzIGNoYW5nZWQsIDc0IGlu c2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJu ZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDM3MGJjMzQuLjVjYWJiM2Yg MTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5l bC9tY2EuYwpAQCAtMzU5LDExICszNTksNiBAQCB0eXBlZGVmIHN0cnVjdCBpYTY0X3N0YXRlX2xv Z19zCiAKIHN0YXRpYyBpYTY0X3N0YXRlX2xvZ190IGlhNjRfc3RhdGVfbG9nW0lBNjRfTUFYX0xP R19UWVBFU107CiAKLSNkZWZpbmUgSUE2NF9MT0dfQUxMT0NBVEUoaXQsIHNpemUpIFwKLQl7aWE2 NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2dbSUE2NF9MT0dfQ1VSUl9JTkRFWChpdCldID0gXAotCQko aWE2NF9lcnJfcmVjX3QgKiltZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpOyBc Ci0JaWE2NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2dbSUE2NF9MT0dfTkVYVF9JTkRFWChpdCldID0g XAotCQkoaWE2NF9lcnJfcmVjX3QgKiltZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllU RVMpO30KICNkZWZpbmUgSUE2NF9MT0dfTE9DS19JTklUKGl0KSBzcGluX2xvY2tfaW5pdCgmaWE2 NF9zdGF0ZV9sb2dbaXRdLmlzbF9sb2NrKQogI2RlZmluZSBJQTY0X0xPR19MT0NLKGl0KSAgICAg IHNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvY2ssIHMpCiAjZGVm aW5lIElBNjRfTE9HX1VOTE9DSyhpdCkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9z dGF0ZV9sb2dbaXRdLmlzbF9sb2NrLHMpCkBAIC0zNzgsNiArMzczLDE5IEBAIHN0YXRpYyBpYTY0 X3N0YXRlX2xvZ190IGlhNjRfc3RhdGVfbG9nW0lBNjRfTUFYX0xPR19UWVBFU107CiAjZGVmaW5l IElBNjRfTE9HX0NVUlJfQlVGRkVSKGl0KSAgICh2b2lkICopKChpYTY0X3N0YXRlX2xvZ1tpdF0u aXNsX2xvZ1tJQTY0X0xPR19DVVJSX0lOREVYKGl0KV0pKQogI2RlZmluZSBJQTY0X0xPR19DT1VO VChpdCkgICAgICAgICBpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2NvdW50CiAKK3N0YXRpYyBpbmxp bmUgdm9pZCBpYTY0X2xvZ19hbGxvY2F0ZShpbnQgaXQsIHU2NCBzaXplKQoreworCWlhNjRfc3Rh dGVfbG9nW2l0XS5pc2xfbG9nW0lBNjRfTE9HX0NVUlJfSU5ERVgoaXQpXSA9CisJCShpYTY0X2Vy cl9yZWNfdCAqKW1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFp YTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvZ1tJQTY0X0xPR19DVVJSX0lOREVYKGl0KV0pCisJCXBh bmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICVsbHUgYnl0ZXNcbiIsIF9fZnVuY19fLCBzaXpl KTsKKworCWlhNjRfc3RhdGVfbG9nW2l0XS5pc2xfbG9nW0lBNjRfTE9HX05FWFRfSU5ERVgoaXQp XSA9CisJCShpYTY0X2Vycl9yZWNfdCAqKW1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9C WVRFUyk7CisJaWYgKCFpYTY0X3N0YXRlX2xvZ1tpdF0uaXNsX2xvZ1tJQTY0X0xPR19ORVhUX0lO REVYKGl0KV0pCisJCXBhbmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICVsbHUgYnl0ZXNcbiIs IF9fZnVuY19fLCBzaXplKTsKK30KKwogLyoKICAqIGlhNjRfbG9nX2luaXQKICAqCVJlc2V0IHRo ZSBPUyBpYTY0IGxvZyBidWZmZXIKQEAgLTM5OSw3ICs0MDcsNyBAQCBpYTY0X2xvZ19pbml0KGlu dCBzYWxfaW5mb190eXBlKQogCQlyZXR1cm47CiAKIAkvLyBzZXQgdXAgT1MgZGF0YSBzdHJ1Y3R1 cmVzIHRvIGhvbGQgZXJyb3IgaW5mbwotCUlBNjRfTE9HX0FMTE9DQVRFKHNhbF9pbmZvX3R5cGUs IG1heF9zaXplKTsKKwlpYTY0X2xvZ19hbGxvY2F0ZShzYWxfaW5mb190eXBlLCBtYXhfc2l6ZSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQv bW0vY29udGlnLmMKaW5kZXggNmU0NDcyMy4uZDI5ZmI2YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0 L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtODQsOSArODQsMTMg QEAgdm9pZCAqcGVyX2NwdV9pbml0KHZvaWQpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGFsbG9jX3Bl cl9jcHVfZGF0YSh2b2lkKQogewotCWNwdV9kYXRhID0gbWVtYmxvY2tfYWxsb2NfZnJvbShQRVJD UFVfUEFHRV9TSVpFICogbnVtX3Bvc3NpYmxlX2NwdXMoKSwKLQkJCQkgICAgICAgUEVSQ1BVX1BB R0VfU0laRSwKKwlzaXplX3Qgc2l6ZSA9IFBFUkNQVV9QQUdFX1NJWkUgKiBudW1fcG9zc2libGVf Y3B1cygpOworCisJY3B1X2RhdGEgPSBtZW1ibG9ja19hbGxvY19mcm9tKHNpemUsIFBFUkNQVV9Q QUdFX1NJWkUsCiAJCQkJICAgICAgIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFjcHVf ZGF0YSkKKwkJcGFuaWMoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPSVs eCBmcm9tPSVseFxuIiwKKwkJICAgICAgX19mdW5jX18sIHNpemUsIFBFUkNQVV9QQUdFX1NJWkUs IF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0 L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IGY5YzM2NzUu LjA1NDkwZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNo L2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTQ1NCw2ICs0NTQsMTAgQEAgc3RhdGljIHZvaWQgX19p bml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9k ZXNpemUpCiAJCQkJICAgICBfX3BhKE1BWF9ETUFfQUREUkVTUyksCiAJCQkJICAgICBNRU1CTE9D S19BTExPQ19BQ0NFU1NJQkxFLAogCQkJCSAgICAgYmVzdG5vZGUpOworCWlmICghcHRyKQorCQlw YW5pYygiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMgYWxpZ249MHglbHggbmlkPSVk IGZyb209JWx4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcGVybm9kZXNpemUsIFBFUkNQVV9QQUdF X1NJWkUsIGJlc3Rub2RlLAorCQkgICAgICBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCiAJcmV0 dXJuIHB0cjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQv bW0vaW5pdC5jCmluZGV4IDI5ZDg0MTUuLmU0OTIwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9t bS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNDQ0LDIzICs0NDQsNDUgQEAg aW50IF9faW5pdCBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlKHU2NCBzdGFydCwgdTY0IGVuZCwg dm9pZCAqYXJnKQogCiAJZm9yIChhZGRyZXNzID0gc3RhcnRfcGFnZTsgYWRkcmVzcyA8IGVuZF9w YWdlOyBhZGRyZXNzICs9IFBBR0VfU0laRSkgewogCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVz cyk7Ci0JCWlmIChwZ2Rfbm9uZSgqcGdkKSkKLQkJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdk LCBtZW1ibG9ja19hbGxvY19ub2RlKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBub2RlKSk7CisJCWlm IChwZ2Rfbm9uZSgqcGdkKSkgeworCQkJcHVkID0gbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJ WkUsIFBBR0VfU0laRSwgbm9kZSk7CisJCQlpZiAoIXB1ZCkKKwkJCQlnb3RvIGVycl9hbGxvYzsK KwkJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkLCBwdWQpOworCQl9CiAJCXB1ZCA9IHB1ZF9v ZmZzZXQocGdkLCBhZGRyZXNzKTsKIAotCQlpZiAocHVkX25vbmUoKnB1ZCkpCi0JCQlwdWRfcG9w dWxhdGUoJmluaXRfbW0sIHB1ZCwgbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0Vf U0laRSwgbm9kZSkpOworCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKKwkJCXBtZCA9IG1lbWJsb2Nr X2FsbG9jX25vZGUoUEFHRV9TSVpFLCBQQUdFX1NJWkUsIG5vZGUpOworCQkJaWYgKCFwbWQpCisJ CQkJZ290byBlcnJfYWxsb2M7CisJCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgcG1kKTsK KwkJfQogCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAKLQkJaWYgKHBtZF9ub25l KCpwbWQpKQotCQkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBtZW1ibG9ja19h bGxvY19ub2RlKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBub2RlKSk7CisJCWlmIChwbWRfbm9uZSgq cG1kKSkgeworCQkJcHRlID0gbWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0VfU0la RSwgbm9kZSk7CisJCQlpZiAoIXB0ZSkKKwkJCQlnb3RvIGVycl9hbGxvYzsKKwkJCXBtZF9wb3B1 bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlKTsKKwkJfQogCQlwdGUgPSBwdGVfb2Zmc2V0 X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogCi0JCWlmIChwdGVfbm9uZSgqcHRlKSkKLQkJCXNldF9w dGUocHRlLCBwZm5fcHRlKF9fcGEobWVtYmxvY2tfYWxsb2Nfbm9kZShQQUdFX1NJWkUsIFBBR0Vf U0laRSwgbm9kZSkpID4+IFBBR0VfU0hJRlQsCisJCWlmIChwdGVfbm9uZSgqcHRlKSkgeworCQkJ dm9pZCAqcGFnZSA9IG1lbWJsb2NrX2FsbG9jX25vZGUoUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJ CQkJCQkJIG5vZGUpOworCQkJaWYgKCFwYWdlKQorCQkJCWdvdG8gZXJyX2FsbG9jOworCQkJc2V0 X3B0ZShwdGUsIHBmbl9wdGUoX19wYShwYWdlKSA+PiBQQUdFX1NISUZULAogCQkJCQkgICAgIFBB R0VfS0VSTkVMKSk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CisKK2Vycl9hbGxvYzoKKwlwYW5pYygi JXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMgYWxpZ249MHglbHggbmlkPSVkXG4iLAor CSAgICAgIF9fZnVuY19fLCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgbm9kZSk7CisJcmV0dXJuIC1F Tk9NRU07CiB9CiAKIHN0cnVjdCBtZW1tYXBfaW5pdF9jYWxsYmFja19kYXRhIHsKZGlmZiAtLWdp dCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCA5MzQwYmNi Li41ZmM4OWFhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0 L21tL3RsYi5jCkBAIC02MSw4ICs2MSwxNCBAQCBtbXVfY29udGV4dF9pbml0ICh2b2lkKQogewog CWlhNjRfY3R4LmJpdG1hcCA9IG1lbWJsb2NrX2FsbG9jKChpYTY0X2N0eC5tYXhfY3R4ICsgMSkg Pj4gMywKIAkJCQkJIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFpYTY0X2N0eC5iaXRtYXApCisJ CXBhbmljKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzXG4iLCBfX2Z1bmNfXywKKwkJ ICAgICAgKGlhNjRfY3R4Lm1heF9jdHggKyAxKSA+PiAzKTsKIAlpYTY0X2N0eC5mbHVzaG1hcCA9 IG1lbWJsb2NrX2FsbG9jKChpYTY0X2N0eC5tYXhfY3R4ICsgMSkgPj4gMywKIAkJCQkJICAgU01Q X0NBQ0hFX0JZVEVTKTsKKwlpZiAoIWlhNjRfY3R4LmZsdXNobWFwKQorCQlwYW5pYygiJXM6IEZh aWxlZCB0byBhbGxvY2F0ZSAldSBieXRlc1xuIiwgX19mdW5jX18sCisJCSAgICAgIChpYTY0X2N0 eC5tYXhfY3R4ICsgMSkgPj4gMyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24v a2VybmVsL2lvX2NvbW1vbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwppbmRl eCA4ZGYxM2QwLi5kNDY4NDczIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2Nv bW1vbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKQEAgLTM5NCw2ICsz OTQsOSBAQCB2b2lkIF9faW5pdCBodWJkZXZfaW5pdF9ub2RlKG5vZGVwZGFfdCAqIG5wZGEsIGNu b2RlaWRfdCBub2RlKQogCWh1YmRldl9pbmZvID0gKHN0cnVjdCBodWJkZXZfaW5mbyAqKW1lbWJs b2NrX2FsbG9jX25vZGUoc2l6ZSwKIAkJCQkJCQkJU01QX0NBQ0hFX0JZVEVTLAogCQkJCQkJCQlu b2RlKTsKKwlpZiAoIWh1YmRldl9pbmZvKQorCQlwYW5pYygiJXM6IEZhaWxlZCB0byBhbGxvY2F0 ZSAlZCBieXRlcyBhbGlnbj0weCV4IG5pZD0lZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHNpemUs IFNNUF9DQUNIRV9CWVRFUywgbm9kZSk7CiAKIAlucGRhLT5wZGluZm8gPSAodm9pZCAqKWh1YmRl dl9pbmZvOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJj aC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IGE2ZDQwYTIuLmU2YTUwNDkgMTAwNjQ0Ci0t LSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVs L3NldHVwLmMKQEAgLTUxMyw2ICs1MTMsMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IHNuX2luaXRf cGRhcyhjaGFyICoqY21kbGluZV9wKQogCQlub2RlcGRhaW5kcltjbm9kZV0gPQogCQkgICAgbWVt YmxvY2tfYWxsb2Nfbm9kZShzaXplb2Yobm9kZXBkYV90KSwgU01QX0NBQ0hFX0JZVEVTLAogCQkJ CQljbm9kZSk7CisJCWlmICghbm9kZXBkYWluZHJbY25vZGVdKQorCQkJcGFuaWMoIiVzOiBGYWls ZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPTB4JXggbmlkPSVkXG4iLAorCQkJICAgICAg X19mdW5jX18sIHNpemVvZihub2RlcGRhX3QpLCBTTVBfQ0FDSEVfQllURVMsCisJCQkgICAgICBj bm9kZSk7CiAJCW1lbXNldChub2RlcGRhaW5kcltjbm9kZV0tPnBoeXNfY3B1aWQsIC0xLAogCQkg ICAgc2l6ZW9mKG5vZGVwZGFpbmRyW2Nub2RlXS0+cGh5c19jcHVpZCkpOwogCQlzcGluX2xvY2tf aW5pdCgmbm9kZXBkYWluZHJbY25vZGVdLT5wdGNfbG9jayk7CkBAIC01MjEsOSArNTI1LDE1IEBA IHN0YXRpYyB2b2lkIF9faW5pdCBzbl9pbml0X3BkYXMoY2hhciAqKmNtZGxpbmVfcCkKIAkvKgog CSAqIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSBub2RlcGRhIGZvciBUSU9zLiAgRm9yIG5vdywgcHV0 IHRoZW0gb24gbm9kZSAwLgogCSAqLwotCWZvciAoY25vZGUgPSBudW1fb25saW5lX25vZGVzKCk7 IGNub2RlIDwgbnVtX2Nub2RlczsgY25vZGUrKykKKwlmb3IgKGNub2RlID0gbnVtX29ubGluZV9u b2RlcygpOyBjbm9kZSA8IG51bV9jbm9kZXM7IGNub2RlKyspIHsKIAkJbm9kZXBkYWluZHJbY25v ZGVdID0KIAkJICAgIG1lbWJsb2NrX2FsbG9jX25vZGUoc2l6ZW9mKG5vZGVwZGFfdCksIFNNUF9D QUNIRV9CWVRFUywgMCk7CisJCWlmICghbm9kZXBkYWluZHJbY25vZGVdKQorCQkJcGFuaWMoIiVz OiBGYWlsZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzIGFsaWduPTB4JXggbmlkPSVkXG4iLAorCQkJ ICAgICAgX19mdW5jX18sIHNpemVvZihub2RlcGRhX3QpLCBTTVBfQ0FDSEVfQllURVMsCisJCQkg ICAgICBjbm9kZSk7CisJfQorCiAKIAkvKgogCSAqIE5vdyBjb3B5IHRoZSBhcnJheSBvZiBub2Rl cGRhIHBvaW50ZXJzIHRvIGVhY2ggbm9kZXBkYS4K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7812FC282DB for ; Mon, 21 Jan 2019 08:34:37 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EF4B02084A for ; Mon, 21 Jan 2019 08:34:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF4B02084A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.ibm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 43jlGL6TJYzDqWH for ; Mon, 21 Jan 2019 19:34:34 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=linux.ibm.com (client-ip=148.163.158.5; helo=mx0a-001b2d01.pphosted.com; envelope-from=rppt@linux.ibm.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 43jkdJ0hqrzDqSM for ; Mon, 21 Jan 2019 19:05:55 +1100 (AEDT) Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x0L83ouc028421 for ; Mon, 21 Jan 2019 03:05:54 -0500 Received: from e06smtp07.uk.ibm.com (e06smtp07.uk.ibm.com [195.75.94.103]) by mx0b-001b2d01.pphosted.com with ESMTP id 2q59wfrwue-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 21 Jan 2019 03:05:53 -0500 Received: from localhost by e06smtp07.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 Jan 2019 08:05:50 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp07.uk.ibm.com (192.168.101.137) 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:05:39 -0000 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x0L85caw29032612 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 21 Jan 2019 08:05:38 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4571C4203F; Mon, 21 Jan 2019 08:05:38 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 55F6142047; Mon, 21 Jan 2019 08:05:33 +0000 (GMT) Received: from rapoport-lnx (unknown [9.148.207.125]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Mon, 21 Jan 2019 08:05:33 +0000 (GMT) Received: by rapoport-lnx (sSMTP sendmail emulation); Mon, 21 Jan 2019 10:05:32 +0200 From: Mike Rapoport To: linux-mm@kvack.org Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Date: Mon, 21 Jan 2019 10:04:01 +0200 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 19012108-0028-0000-0000-0000033BE18C X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19012108-0029-0000-0000-000023F915A0 Message-Id: <1548057848-15136-15-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=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901210066 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List 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 , Andrew Morton , linuxppc-dev@lists.ozlabs.org, "David S. Miller" , openrisc@lists.librecores.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: rppt@linux.ibm.com (Mike Rapoport) Date: Mon, 21 Jan 2019 10:04:01 +0200 Subject: [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> List-ID: Message-ID: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> To: linux-snps-arc@lists.infradead.org Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Rapoport Date: Mon, 21 Jan 2019 10:04:01 +0200 Subject: [OpenRISC] [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> References: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com> Message-ID: <1548057848-15136-15-git-send-email-rppt@linux.ibm.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: openrisc@lists.librecores.org Add panic() calls if memblock_alloc*() returns NULL. Most of the changes are simply addition of if(!ptr) panic(); statements after the calls to memblock_alloc*() variants. Exceptions are create_mem_map_page_table() and ia64_log_init() that were slightly refactored to accommodate the change. Signed-off-by: Mike Rapoport --- arch/ia64/kernel/mca.c | 20 ++++++++++++++------ 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 +++++++++++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 370bc34..5cabb3f 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c @@ -359,11 +359,6 @@ typedef struct ia64_state_log_s static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; -#define IA64_LOG_ALLOCATE(it, size) \ - {ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); \ - ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = \ - (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES);} #define IA64_LOG_LOCK_INIT(it) spin_lock_init(&ia64_state_log[it].isl_lock) #define IA64_LOG_LOCK(it) spin_lock_irqsave(&ia64_state_log[it].isl_lock, s) #define IA64_LOG_UNLOCK(it) spin_unlock_irqrestore(&ia64_state_log[it].isl_lock,s) @@ -378,6 +373,19 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES]; #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) #define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count +static inline void ia64_log_allocate(int it, u64 size) +{ + ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); + + ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)] = + (ia64_err_rec_t *)memblock_alloc(size, SMP_CACHE_BYTES); + if (!ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)]) + panic("%s: Failed to allocate %llu bytes\n", __func__, size); +} + /* * ia64_log_init * Reset the OS ia64 log buffer @@ -399,7 +407,7 @@ ia64_log_init(int sal_info_type) return; // set up OS data structures to hold error info - IA64_LOG_ALLOCATE(sal_info_type, max_size); + ia64_log_allocate(sal_info_type, max_size); } /* diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index 6e44723..d29fb6b 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -84,9 +84,13 @@ void *per_cpu_init(void) static inline void alloc_per_cpu_data(void) { - cpu_data = memblock_alloc_from(PERCPU_PAGE_SIZE * num_possible_cpus(), - PERCPU_PAGE_SIZE, + size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); + + cpu_data = memblock_alloc_from(size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); + if (!cpu_data) + panic("%s: Failed to allocate %lu bytes align=%lx from=%lx\n", + __func__, size, PERCPU_PAGE_SIZE, __pa(MAX_DMA_ADDRESS)); } /** diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index f9c3675..05490dd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -454,6 +454,10 @@ static void __init *memory_less_node_alloc(int nid, unsigned long pernodesize) __pa(MAX_DMA_ADDRESS), MEMBLOCK_ALLOC_ACCESSIBLE, bestnode); + if (!ptr) + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d from=%lx\n", + __func__, pernodesize, PERCPU_PAGE_SIZE, bestnode, + __pa(MAX_DMA_ADDRESS)); return ptr; } diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 29d8415..e49200e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -444,23 +444,45 @@ int __init create_mem_map_page_table(u64 start, u64 end, void *arg) for (address = start_page; address < end_page; address += PAGE_SIZE) { pgd = pgd_offset_k(address); - if (pgd_none(*pgd)) - pgd_populate(&init_mm, pgd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pgd_none(*pgd)) { + pud = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pud) + goto err_alloc; + pgd_populate(&init_mm, pgd, pud); + } pud = pud_offset(pgd, address); - if (pud_none(*pud)) - pud_populate(&init_mm, pud, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pud_none(*pud)) { + pmd = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pmd) + goto err_alloc; + pud_populate(&init_mm, pud, pmd); + } pmd = pmd_offset(pud, address); - if (pmd_none(*pmd)) - pmd_populate_kernel(&init_mm, pmd, memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)); + if (pmd_none(*pmd)) { + pte = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node); + if (!pte) + goto err_alloc; + pmd_populate_kernel(&init_mm, pmd, pte); + } pte = pte_offset_kernel(pmd, address); - if (pte_none(*pte)) - set_pte(pte, pfn_pte(__pa(memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, node)) >> PAGE_SHIFT, + if (pte_none(*pte)) { + void *page = memblock_alloc_node(PAGE_SIZE, PAGE_SIZE, + node); + if (!page) + goto err_alloc; + set_pte(pte, pfn_pte(__pa(page) >> PAGE_SHIFT, PAGE_KERNEL)); + } } return 0; + +err_alloc: + panic("%s: Failed to allocate %lu bytes align=0x%lx nid=%d\n", + __func__, PAGE_SIZE, PAGE_SIZE, node); + return -ENOMEM; } struct memmap_init_callback_data { diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 9340bcb..5fc89aa 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c @@ -61,8 +61,14 @@ mmu_context_init (void) { ia64_ctx.bitmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.bitmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); ia64_ctx.flushmap = memblock_alloc((ia64_ctx.max_ctx + 1) >> 3, SMP_CACHE_BYTES); + if (!ia64_ctx.flushmap) + panic("%s: Failed to allocate %u bytes\n", __func__, + (ia64_ctx.max_ctx + 1) >> 3); } /* diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 8df13d0..d468473 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c @@ -394,6 +394,9 @@ void __init hubdev_init_node(nodepda_t * npda, cnodeid_t node) hubdev_info = (struct hubdev_info *)memblock_alloc_node(size, SMP_CACHE_BYTES, node); + if (!hubdev_info) + panic("%s: Failed to allocate %d bytes align=0x%x nid=%d\n", + __func__, size, SMP_CACHE_BYTES, node); npda->pdinfo = (void *)hubdev_info; } diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index a6d40a2..e6a5049 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c @@ -513,6 +513,10 @@ static void __init sn_init_pdas(char **cmdline_p) nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, cnode); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); memset(nodepdaindr[cnode]->phys_cpuid, -1, sizeof(nodepdaindr[cnode]->phys_cpuid)); spin_lock_init(&nodepdaindr[cnode]->ptc_lock); @@ -521,9 +525,15 @@ static void __init sn_init_pdas(char **cmdline_p) /* * Allocate & initialize nodepda for TIOs. For now, put them on node 0. */ - for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) + for (cnode = num_online_nodes(); cnode < num_cnodes; cnode++) { nodepdaindr[cnode] = memblock_alloc_node(sizeof(nodepda_t), SMP_CACHE_BYTES, 0); + if (!nodepdaindr[cnode]) + panic("%s: Failed to allocate %lu bytes align=0x%x nid=%d\n", + __func__, sizeof(nodepda_t), SMP_CACHE_BYTES, + cnode); + } + /* * Now copy the array of nodepda pointers to each nodepda. -- 2.7.4