Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp2281533imb; Mon, 4 Mar 2019 00:40:54 -0800 (PST) X-Google-Smtp-Source: APXvYqw4tYgijO/YRhTCE+d/rCksDjmBidsqm2sGELdiIb5BNxPVkw6M68B45gPOm1KXvz3R6MWS X-Received: by 2002:a17:902:8217:: with SMTP id x23mr19632561pln.332.1551688854169; Mon, 04 Mar 2019 00:40:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551688854; cv=none; d=google.com; s=arc-20160816; b=N8Z6Kq98Aqbege7MDs18GqlYIEw8KYzIvr5WboHBhhlsE9AS/bPIIgcwAQistyV5IY 4GcvxsbSsgTg9k5GDUxtZUA+wtWf7yeynjgWU3NPMXJktPpxLzjDE0ryOpd/SJNaFg3q YNYlonu4pcCtSkZhDWm7jLz3fiAr2BbQSd6Df6Scsy3Jcec3i5CQ8PZ6U68ZEImv57zh KihV704vhVkPw3QXFeUYuyW+XFJvJ6DWb6NJ5GnWoGeY0XSp8k9k0GfcP5tvXdEQiKD0 wmoAW1y1GT8p67d5wHmQ8mB8YV2Zf6Zu51dCgsiMF+250RrxqnYs4DcYXiup7kCdHMTj QALA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=WdEFkHLQV8gVxSdLAwmI2E3xFRanQpT2mjhgowuVXwk=; b=IxD3/mNKVt6655nuAhSiT1IGimr0HiEC9IDSxliY5A0Tddj2NzSA1Y9VzGm76TwIb/ YX4x/glFcOkBKFC8GElpfe/o9tCL97MraQyxgsiNf/olvT4XFFPR0DAuycJ2fDpYaUBS vBQdoNwb3yxkGn2QAVkcdJhGuA5yr7dRmpuzDCXw7Eb5dyodXHOmFgA+8FeaqBwdDkra zQ7+4gspXPDpGEUK+9FHCB4MqfPzRJmQqddYL7ScRRXRs2o/0eJu1LAzXk9mySm1rByL ZMksiSdJBxt5aQXwfc5C6Uh4ib5djaBD+sKyJo3EtzSpmAHTJ3ba5PA1+sHlMOZSlRe/ Hrbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=XOy9FUvS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l68si5317733plb.90.2019.03.04.00.40.36; Mon, 04 Mar 2019 00:40:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=XOy9FUvS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726095AbfCDIdU (ORCPT + 99 others); Mon, 4 Mar 2019 03:33:20 -0500 Received: from mail.kernel.org ([198.145.29.99]:37694 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727105AbfCDIdR (ORCPT ); Mon, 4 Mar 2019 03:33:17 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0C59B20823; Mon, 4 Mar 2019 08:33:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551688395; bh=G7OLDbRbN2Dgbc6y9SsgXqXL0PgvgidTjN/TGYJD5ik=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XOy9FUvS89wORN12qqgPu9VZ7hoUuzlCGuPKQbxFpu6Z8tFDgSrof3V+gP/84aCjH nORaSd7CoQbO8gja8nTvS3DjyhVbH8wJn2iPkKN3vX8cNfFSWS+yhqB/0lejSH1YsF XHFSM3lY8TT9+5qj60K3Po1silLAeI1apAgX8bB4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, William Kucharski , Vineet Gupta , Sasha Levin Subject: [PATCH 4.20 31/88] ARC: show_regs: lockdep: avoid page allocator... Date: Mon, 4 Mar 2019 09:22:14 +0100 Message-Id: <20190304081631.830535059@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190304081630.610632175@linuxfoundation.org> References: <20190304081630.610632175@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit ab6c03676cb190156603cf4c5ecf97aa406c9c53 ] and use smaller/on-stack buffer instead The motivation for this change was lockdep splat like below. | potentially unexpected fatal signal 11. | BUG: sleeping function called from invalid context at ../mm/page_alloc.c:4317 | in_atomic(): 1, irqs_disabled(): 0, pid: 57, name: segv | no locks held by segv/57. | Preemption disabled at: | [<8182f17e>] get_signal+0x4a6/0x7c4 | CPU: 0 PID: 57 Comm: segv Not tainted 4.17.0+ #23 | | Stack Trace: | arc_unwind_core.constprop.1+0xd0/0xf4 | __might_sleep+0x1f6/0x234 | __get_free_pages+0x174/0xca0 | show_regs+0x22/0x330 | get_signal+0x4ac/0x7c4 # print_fatal_signals() -> preempt_disable() | do_signal+0x30/0x224 | resume_user_mode_begin+0x90/0xd8 So signal handling core calls show_regs() with preemption disabled but an ensuing GFP_KERNEL page allocator call is flagged by lockdep. We could have switched to GFP_NOWAIT, but turns out that is not enough anways and eliding page allocator call leads to less code and instruction traces to sift thru when debugging pesky crashes. FWIW, this patch doesn't cure the lockdep splat (which next patch does). Reviewed-by: William Kucharski Signed-off-by: Vineet Gupta Signed-off-by: Sasha Levin --- arch/arc/kernel/troubleshoot.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c index e8d9fb4523462..5c6663321e873 100644 --- a/arch/arc/kernel/troubleshoot.c +++ b/arch/arc/kernel/troubleshoot.c @@ -18,6 +18,8 @@ #include #include +#define ARC_PATH_MAX 256 + /* * Common routine to print scratch regs (r0-r12) or callee regs (r13-r25) * -Prints 3 regs per line and a CR. @@ -58,11 +60,12 @@ static void show_callee_regs(struct callee_regs *cregs) print_reg_file(&(cregs->r13), 13); } -static void print_task_path_n_nm(struct task_struct *tsk, char *buf) +static void print_task_path_n_nm(struct task_struct *tsk) { char *path_nm = NULL; struct mm_struct *mm; struct file *exe_file; + char buf[ARC_PATH_MAX]; mm = get_task_mm(tsk); if (!mm) @@ -72,7 +75,7 @@ static void print_task_path_n_nm(struct task_struct *tsk, char *buf) mmput(mm); if (exe_file) { - path_nm = file_path(exe_file, buf, 255); + path_nm = file_path(exe_file, buf, ARC_PATH_MAX-1); fput(exe_file); } @@ -80,10 +83,9 @@ static void print_task_path_n_nm(struct task_struct *tsk, char *buf) pr_info("Path: %s\n", !IS_ERR(path_nm) ? path_nm : "?"); } -static void show_faulting_vma(unsigned long address, char *buf) +static void show_faulting_vma(unsigned long address) { struct vm_area_struct *vma; - char *nm = buf; struct mm_struct *active_mm = current->active_mm; /* can't use print_vma_addr() yet as it doesn't check for @@ -96,8 +98,11 @@ static void show_faulting_vma(unsigned long address, char *buf) * if the container VMA is not found */ if (vma && (vma->vm_start <= address)) { + char buf[ARC_PATH_MAX]; + char *nm = "?"; + if (vma->vm_file) { - nm = file_path(vma->vm_file, buf, PAGE_SIZE - 1); + nm = file_path(vma->vm_file, buf, ARC_PATH_MAX-1); if (IS_ERR(nm)) nm = "?"; } @@ -173,13 +178,8 @@ void show_regs(struct pt_regs *regs) { struct task_struct *tsk = current; struct callee_regs *cregs; - char *buf; - buf = (char *)__get_free_page(GFP_KERNEL); - if (!buf) - return; - - print_task_path_n_nm(tsk, buf); + print_task_path_n_nm(tsk); show_regs_print_info(KERN_INFO); show_ecr_verbose(regs); @@ -189,7 +189,7 @@ void show_regs(struct pt_regs *regs) (void *)regs->blink, (void *)regs->ret); if (user_mode(regs)) - show_faulting_vma(regs->ret, buf); /* faulting code, not data */ + show_faulting_vma(regs->ret); /* faulting code, not data */ pr_info("[STAT32]: 0x%08lx", regs->status32); @@ -221,8 +221,6 @@ void show_regs(struct pt_regs *regs) cregs = (struct callee_regs *)current->thread.callee_reg; if (cregs) show_callee_regs(cregs); - - free_page((unsigned long)buf); } void show_kernel_fault_diag(const char *str, struct pt_regs *regs, -- 2.19.1