From patchwork Mon May 5 20:48:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Larry Bassel X-Patchwork-Id: 29678 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-oa0-f72.google.com (mail-oa0-f72.google.com [209.85.219.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 2130C202E6 for ; Mon, 5 May 2014 20:49:01 +0000 (UTC) Received: by mail-oa0-f72.google.com with SMTP id l6sf8259500oag.11 for ; Mon, 05 May 2014 13:49:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:sender:precedence:list-id:x-original-sender :x-original-authentication-results:mailing-list:list-post:list-help :list-archive:list-unsubscribe; bh=gLfeKxEeD3pL/T4DzEsTLfL4aNrHOpWif+8FoFmP6zY=; b=PnjR1Kl6AcUyQ0rs4/ehzmNB1FMzEUlkdhaHD3HgkQSCbUk/TWm5PvS4xzpFnB927s +q0MWbUhfIspSZQ20/V2kW4bowDn9vI9Cx5K1KCJwsnOCJakdwiOiSLwUdNvcXOyQrNE SiFDzoVQmZmBYR76BQty2WOfFp1La/mrYWP6UeZUdamHe+MMMzNYhx40GLbktyjJ7sh5 iB6M2q6ljasN6LVblrszzoaLKRv7MFPVmw7NHQiVzvTANG2Wt4sdom6G5fl2dcFgsbre xhQBQPamWCMYOQPAPXL0gRAGvD1uf9jGJ415g4GXW9UGlui5JxlKSwEnNhCVNCnVDZwL E5qg== X-Gm-Message-State: ALoCoQn0k+4CwNQdvzButg7yYWdwL2F0+yyKgF+sV1fOtHW7jS+rQDq15uz1VMunHlFswv32Sp8B X-Received: by 10.182.24.5 with SMTP id q5mr18276031obf.23.1399322940729; Mon, 05 May 2014 13:49:00 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.88.134 with SMTP id t6ls2576919qgd.20.gmail; Mon, 05 May 2014 13:49:00 -0700 (PDT) X-Received: by 10.220.83.4 with SMTP id d4mr1737967vcl.39.1399322940624; Mon, 05 May 2014 13:49:00 -0700 (PDT) Received: from mail-ve0-f180.google.com (mail-ve0-f180.google.com [209.85.128.180]) by mx.google.com with ESMTPS id ui2si1845218vdc.100.2014.05.05.13.49.00 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 05 May 2014 13:49:00 -0700 (PDT) Received-SPF: none (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) client-ip=209.85.128.180; Received: by mail-ve0-f180.google.com with SMTP id db12so5785479veb.25 for ; Mon, 05 May 2014 13:49:00 -0700 (PDT) X-Received: by 10.58.38.40 with SMTP id d8mr1563451vek.61.1399322940546; Mon, 05 May 2014 13:49:00 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp171073vcb; Mon, 5 May 2014 13:49:00 -0700 (PDT) X-Received: by 10.66.136.103 with SMTP id pz7mr76436755pab.140.1399322939126; Mon, 05 May 2014 13:48:59 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id pc9si9711658pac.148.2014.05.05.13.48.58; Mon, 05 May 2014 13:48:58 -0700 (PDT) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756619AbaEEUsu (ORCPT + 27 others); Mon, 5 May 2014 16:48:50 -0400 Received: from mail-qa0-f54.google.com ([209.85.216.54]:46267 "EHLO mail-qa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755132AbaEEUss (ORCPT ); Mon, 5 May 2014 16:48:48 -0400 Received: by mail-qa0-f54.google.com with SMTP id j15so2383460qaq.41 for ; Mon, 05 May 2014 13:48:47 -0700 (PDT) X-Received: by 10.224.115.3 with SMTP id g3mr48638134qaq.19.1399322927582; Mon, 05 May 2014 13:48:47 -0700 (PDT) Received: from localhost.localdomain (adsl-71-136-229-99.dsl.sndg02.pacbell.net. [71.136.229.99]) by mx.google.com with ESMTPSA id h90sm7063877qge.0.2014.05.05.13.48.46 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 05 May 2014 13:48:47 -0700 (PDT) From: Larry Bassel To: catalin.marinas@arm.com, will.deacon@arm.com Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linaro-kernel@lists.linaro.org, khilman@linaro.org, Larry Bassel Subject: [PATCH] arm64: Support arch_irq_work_raise() via self IPIs Date: Mon, 5 May 2014 13:48:27 -0700 Message-Id: <1399322907-21280-1-git-send-email-larry.bassel@linaro.org> X-Mailer: git-send-email 1.8.3.2 Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: larry.bassel@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: patch+caf_=patchwork-forward=linaro.org@linaro.org does not designate permitted sender hosts) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Support for arch_irq_work_raise() was missing from arm64 (a prerequisite for FULL_NOHZ). This patch is based on the arm32 patch ARM 7872/1 which ports cleanly. commit bf18525fd793101df42a1344ecc48b49b62e48c9 Author: Stephen Boyd Date: Tue Oct 29 20:32:56 2013 +0100 ARM: 7872/1: Support arch_irq_work_raise() via self IPIs By default, IRQ work is run from the tick interrupt (see irq_work_run() in update_process_times()). When we're in full NOHZ mode, restarting the tick requires the use of IRQ work and if the only place we run IRQ work is in the tick interrupt we have an unbreakable cycle. Implement arch_irq_work_raise() via self IPIs to break this cycle and get the tick started again. Note that we implement this via IPIs which are only available on SMP builds. This shouldn't be a problem because full NOHZ is only supported on SMP builds anyway. Signed-off-by: Stephen Boyd Reviewed-by: Kevin Hilman Cc: Frederic Weisbecker Signed-off-by: Russell King Signed-off-by: Larry Bassel Reviewed-by: Kevin Hilman --- arch/arm64/include/asm/hardirq.h | 2 +- arch/arm64/kernel/smp.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h index ae4801d..0be6782 100644 --- a/arch/arm64/include/asm/hardirq.h +++ b/arch/arm64/include/asm/hardirq.h @@ -20,7 +20,7 @@ #include #include -#define NR_IPI 5 +#define NR_IPI 6 typedef struct { unsigned int __softirq_pending; diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index f0a141d..20fd074 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,7 @@ enum ipi_msg_type { IPI_CALL_FUNC_SINGLE, IPI_CPU_STOP, IPI_TIMER, + IPI_IRQ_WORK, }; /* @@ -455,6 +457,13 @@ void arch_send_call_function_single_ipi(int cpu) smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); } +#ifdef CONFIG_IRQ_WORK +void arch_irq_work_raise(void) +{ + smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK); +} +#endif + static const char *ipi_types[NR_IPI] = { #define S(x,s) [x - IPI_RESCHEDULE] = s S(IPI_RESCHEDULE, "Rescheduling interrupts"), @@ -462,6 +471,7 @@ static const char *ipi_types[NR_IPI] = { S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"), S(IPI_CPU_STOP, "CPU stop interrupts"), S(IPI_TIMER, "Timer broadcast interrupts"), + S(IPI_IRQ_WORK, "IRQ work interrupts"), }; void show_ipi_list(struct seq_file *p, int prec) @@ -554,6 +564,14 @@ void handle_IPI(int ipinr, struct pt_regs *regs) break; #endif +#ifdef CONFIG_IRQ_WORK + case IPI_IRQ_WORK: + irq_enter(); + irq_work_run(); + irq_exit(); + break; +#endif + default: pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr); break;