From patchwork Mon Dec 19 18:30:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 707187 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tj8zk70P5z9vFK for ; Tue, 20 Dec 2016 05:47:30 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uy1ixOIF"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3tj8zk5cl9zDxp4 for ; Tue, 20 Dec 2016 05:47:30 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uy1ixOIF"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tj8cR4yjnzDwPb for ; Tue, 20 Dec 2016 05:30:47 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uy1ixOIF"; dkim-atps=neutral Received: by mail-pg0-x241.google.com with SMTP id b1so9172695pgc.1 for ; Mon, 19 Dec 2016 10:30:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/kbuFMZEJa0dZalyUvAWrXvPcwsznCYrRRl8yhT5SYc=; b=uy1ixOIFUQlZgCa1lziwNvrMi36aSjWiwOQSXrkypM8xX8Y8w/X2w48pjDGraNbLst qbb8Pb19XKqOf0AxWELIeq93W/73C++FgdytVqNzksAdfL0YHIsaqno2fZvXqJ7ieY07 oVEKj3NN4hWPQNn1/HeZX9n4G1kIkPVErYbTToNr2SG0FqxIm1ShGEwEUeSlJ3RkJlT7 7SCtFNgObOR1QGZeVv8svy4BoPN5Up8/HuCFPo957sfv0RBOwGa74VekT6dQnbeXFlcH iKmd9OisaLhyUlGoJkbL6v+9Nq2RQ0dXVQDxPgyEjCU/FkQ7WgJt6VASdJkIYeSVlrRg F4Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/kbuFMZEJa0dZalyUvAWrXvPcwsznCYrRRl8yhT5SYc=; b=AHcIsJizOuedAilSWATnmHYyVKe1W/uyjTMclDDom6gp7VwgIkJNDrIkgH0Nt4Z/gS LGbjXh4HC25PPWGNyFgn2xL7ppcNNdJYWYZcaeJYXMhlj5VxYDhNzavBNz8bcE7lFnoR I2Xf5MMXdrbGfjC3ajr12ZxShWpj+NmCcfxyrO3MsSj7QrIZLgk6dB4PkwdJ43VHwlXV o4OsMBG8u5NKJyit960QDcSxH61siq5E430SbOIyh0erPzaI0iYtY1nQ9z8+PqmdcY7Y Bk22JqpYvW9Isyb+HBIbc6A4vBLfoSOCXWo39d6Ub/c1Maw20E5YUkIeYZOWPNpB/las PzJQ== X-Gm-Message-State: AKaTC02lfKfkVoziME805/3rfco3MTY78s5ABA6v4BUbymZRoxRcXXcNIb1NHGafRDKK+w== X-Received: by 10.84.206.37 with SMTP id f34mr37367333ple.127.1482172245675; Mon, 19 Dec 2016 10:30:45 -0800 (PST) Received: from roar.au.ibm.com ([61.68.124.232]) by smtp.gmail.com with ESMTPSA id g27sm33135147pfk.58.2016.12.19.10.30.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Dec 2016 10:30:45 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 09/10] powerpc/pseries: implement NMI IPI with H_SIGNAL_SYS_RESET Date: Tue, 20 Dec 2016 04:30:10 +1000 Message-Id: <20161219183011.28310-10-npiggin@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20161219183011.28310-1-npiggin@gmail.com> References: <20161219183011.28310-1-npiggin@gmail.com> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Signed-off-by: Nicholas Piggin --- arch/powerpc/platforms/pseries/ras.c | 4 ++++ arch/powerpc/platforms/pseries/smp.c | 23 ++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index 904a677208d1..bb70b26334f0 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c @@ -386,6 +386,10 @@ int pSeries_system_reset_exception(struct pt_regs *regs) } fwnmi_release_errinfo(); } + + if (smp_handle_nmi_ipi(regs)) + return 1; + return 0; /* need to perform reset */ } diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index 0f6522c6518b..fac59c212bc4 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c @@ -196,6 +196,27 @@ static void pSeries_cause_ipi_mux(int cpu, unsigned long data) xics_cause_ipi(cpu, data); } +static int pseries_cause_nmi_ipi(int cpu) +{ + int hwcpu; + + if (cpu == NMI_IPI_ALL_OTHERS) { + hwcpu = H_SIGNAL_SYS_RESET_ALL_OTHERS; + } else { + if (cpu < 0) { + WARN_ONCE(true, "incorrect cpu parameter %d", cpu); + return 0; + } + + hwcpu = get_hard_smp_processor_id(cpu); + } + + if (plapr_signal_sys_reset(hwcpu) == H_SUCCESS) + return 1; + + return 0; +} + static __init void pSeries_smp_probe(void) { xics_smp_probe(); @@ -209,7 +230,7 @@ static __init void pSeries_smp_probe(void) static struct smp_ops_t pseries_smp_ops = { .message_pass = NULL, /* Use smp_muxed_ipi_message_pass */ .cause_ipi = NULL, /* Filled at runtime by pSeries_smp_probe() */ - .cause_nmi_ipi = NULL, + .cause_nmi_ipi = pseries_cause_nmi_ipi, .probe = pSeries_smp_probe, .kick_cpu = smp_pSeries_kick_cpu, .setup_cpu = smp_setup_cpu,