Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp5996145ybe; Tue, 10 Sep 2019 11:55:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqzrHcLW00KlRiWI6uoe4Tnw/yh3OyBtHCx0gL9J5HGLtc2anuqjaq6hCP6MOlLkEmjXHTSp X-Received: by 2002:a17:906:349b:: with SMTP id g27mr26280578ejb.130.1568141707877; Tue, 10 Sep 2019 11:55:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568141707; cv=none; d=google.com; s=arc-20160816; b=vbSAwLD7MfDI9Tb5d+Q6seTnpgEy33VsBMjDYGqBq98KkWm7+YT5bC6trjDwis7MAS m8Q7usC8MKsPmDGWrNQp7U86npCCR6PPVjYXyDzFpLS4rnbdOHfd6NeAlJc0i9l0yumn uqeGvGo7U3zAR7opb/1+z1UINzLmpIaS4RJE945267s2NwJ5vgQ7BlDvSKQEGL8qWKHD Le2Y1VGcJkNjHYcnwLp6bRHxFnJ9HNLTdnh7c2vqlXJDRCHLCQptfsin8UaVCSCLxGQX CtqzeKDt/+i72E7YUakNRF4npEHpJAq+Ba3HrzBlpQl5LRzXzP/ICVhtY5KC+4TFwtdC MYiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-transfer-encoding :mime-version:references:in-reply-to:date:subject:cc:to:from; bh=tNIhVTvxUtTNwivVmlKwpnxie9hwcpeo2NaXL9wcKmg=; b=rH8AmO2gYyZJ4yN5f26WyuQdOIQQiFNjFrCYVX57jU8wUHXsyyYJ9OCc12uYEq5Gke B11jlQBOYycxmu+/SfhK/wQbbWoI1oHIu0jNNfnTftycXlk2jihLSdi0DoThW2pKa4O+ gZ7DTHeC9gl/SfWsxwB0xYpLQNCr0UKygYSDjgOePjnt7/QdhOIejqMiekoikddN0ui1 hUCiUm3zKSOsnVKYis9D9IZXTuzem9BqrJb46ZP0DwN0hv8iK+vYEMyZCcXyEwa6hE+I 6m3Dhi1gpfSj3xg1iEl3Bv9dEJnpqkxQrm3vFkFHXO/i1BzA1/DfubUq+sIAIyvQWwpc b9Hw== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i19si10012708ejz.364.2019.09.10.11.54.43; Tue, 10 Sep 2019 11:55:07 -0700 (PDT) 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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390094AbfIJKZR (ORCPT + 99 others); Tue, 10 Sep 2019 06:25:17 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:28524 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2392136AbfIJKZQ (ORCPT ); Tue, 10 Sep 2019 06:25:16 -0400 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 x8AAIIq4136569 for ; Tue, 10 Sep 2019 06:25:14 -0400 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0b-001b2d01.pphosted.com with ESMTP id 2ux8jeu7md-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 10 Sep 2019 06:25:14 -0400 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 10 Sep 2019 11:25:12 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 10 Sep 2019 11:25:10 +0100 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x8AAP9Bo45875212 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 10 Sep 2019 10:25:09 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9B95252051; Tue, 10 Sep 2019 10:25:09 +0000 (GMT) Received: from bangoria.ibmuc.com (unknown [9.199.54.190]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id D35F152050; Tue, 10 Sep 2019 10:24:55 +0000 (GMT) From: Ravi Bangoria To: mpe@ellerman.id.au, mikey@neuling.org Cc: benh@kernel.crashing.org, paulus@samba.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, christophe.leroy@c-s.fr, Ravi Bangoria Subject: [PATCH 1/2] powerpc/hw_breakpoint: move instruction stepping out of hw_breakpoint_handler() Date: Tue, 10 Sep 2019 15:54:21 +0530 X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190910102422.23233-1-ravi.bangoria@linux.ibm.com> References: <20190910102422.23233-1-ravi.bangoria@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 x-cbid: 19091010-4275-0000-0000-00000363E6E7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19091010-4276-0000-0000-000038763A85 Message-Id: <20190910102422.23233-2-ravi.bangoria@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-09-10_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 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-1906280000 definitions=main-1909100105 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Christophe Leroy On 8xx, breakpoints stop after executing the instruction, so stepping/emulation is not needed. Move it into a sub-function and remove the #ifdefs. Signed-off-by: Christophe Leroy Reviewed-by: Ravi Bangoria --- arch/powerpc/kernel/hw_breakpoint.c | 60 ++++++++++++++++------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c index c8d1fa2e9d53..28ad3171bb82 100644 --- a/arch/powerpc/kernel/hw_breakpoint.c +++ b/arch/powerpc/kernel/hw_breakpoint.c @@ -198,15 +198,43 @@ void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs) /* * Handle debug exception notifications. */ +static bool stepping_handler(struct pt_regs *regs, struct perf_event *bp, + unsigned long addr) +{ + int stepped; + unsigned int instr; + + /* Do not emulate user-space instructions, instead single-step them */ + if (user_mode(regs)) { + current->thread.last_hit_ubp = bp; + regs->msr |= MSR_SE; + return false; + } + + stepped = 0; + instr = 0; + if (!__get_user_inatomic(instr, (unsigned int *)regs->nip)) + stepped = emulate_step(regs, instr); + + /* + * emulate_step() could not execute it. We've failed in reliably + * handling the hw-breakpoint. Unregister it and throw a warning + * message to let the user know about it. + */ + if (!stepped) { + WARN(1, "Unable to handle hardware breakpoint. Breakpoint at " + "0x%lx will be disabled.", addr); + perf_event_disable_inatomic(bp); + return false; + } + return true; +} + int hw_breakpoint_handler(struct die_args *args) { int rc = NOTIFY_STOP; struct perf_event *bp; struct pt_regs *regs = args->regs; -#ifndef CONFIG_PPC_8xx - int stepped = 1; - unsigned int instr; -#endif struct arch_hw_breakpoint *info; unsigned long dar = regs->dar; @@ -251,31 +279,9 @@ int hw_breakpoint_handler(struct die_args *args) (dar - bp->attr.bp_addr < bp->attr.bp_len))) info->type |= HW_BRK_TYPE_EXTRANEOUS_IRQ; -#ifndef CONFIG_PPC_8xx - /* Do not emulate user-space instructions, instead single-step them */ - if (user_mode(regs)) { - current->thread.last_hit_ubp = bp; - regs->msr |= MSR_SE; + if (!IS_ENABLED(CONFIG_PPC_8xx) && !stepping_handler(regs, bp, info->address)) goto out; - } - - stepped = 0; - instr = 0; - if (!__get_user_inatomic(instr, (unsigned int *) regs->nip)) - stepped = emulate_step(regs, instr); - /* - * emulate_step() could not execute it. We've failed in reliably - * handling the hw-breakpoint. Unregister it and throw a warning - * message to let the user know about it. - */ - if (!stepped) { - WARN(1, "Unable to handle hardware breakpoint. Breakpoint at " - "0x%lx will be disabled.", info->address); - perf_event_disable_inatomic(bp); - goto out; - } -#endif /* * As a policy, the callback is invoked in a 'trigger-after-execute' * fashion -- 2.21.0