From patchwork Thu Apr 6 13:52:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96984 Delivered-To: patch@linaro.org Received: by 10.182.246.10 with SMTP id xs10csp740912obc; Thu, 6 Apr 2017 06:52:45 -0700 (PDT) X-Received: by 10.99.114.25 with SMTP id n25mr36042191pgc.206.1491486765812; Thu, 06 Apr 2017 06:52:45 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 64si1933861plk.173.2017.04.06.06.52.45; Thu, 06 Apr 2017 06:52:45 -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; dkim=pass header.i=@linaro.org; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934821AbdDFNwe (ORCPT + 14 others); Thu, 6 Apr 2017 09:52:34 -0400 Received: from mail-pg0-f41.google.com ([74.125.83.41]:35278 "EHLO mail-pg0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753945AbdDFNwZ (ORCPT ); Thu, 6 Apr 2017 09:52:25 -0400 Received: by mail-pg0-f41.google.com with SMTP id 81so37116184pgh.2 for ; Thu, 06 Apr 2017 06:52:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vZLt+ReFG5HwK4e9WTrqh1RqYyoWLQmxPCWzJYVbEOM=; b=IpLzlIZulsnPRRwpipgednd/0SJLfou9wjvanQRI7iljShdsXXpxvqJKVYZH9eXAH7 dbYaF3dccatTrHAyWP/39GVUwyfmX9thh/Ktc5F6zS7fcz87tfidi+QRNNjaHJ7Womr0 bF/4aL05QEIGEW8HKJjwbcf29tXg/voA2Uato= 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=vZLt+ReFG5HwK4e9WTrqh1RqYyoWLQmxPCWzJYVbEOM=; b=KVev2u6tFqIKi881/3TU8Hu8BQ7CA0tTXurNgSgzayMUyM/g/BDS2NQZMf188yMLoA RneEoEcurIvfN5vqU/gecxFz9Op/AxFfxcyHwRuVNtrLcnJKIsL1twT6m98N0nSo7mge rQhkSyQ0SbZXyXBH/9ImQrBk0kFtEPgA+cqqK3m5H7cEVKFKPs76+mmi2vRrDNKxkVUp 7B3mNzwium6+MxTbpvPAyEvssRQLSPp0MhDJko0HgIIbx9+JXtgIn/iqm4aw0awMFnMp J1woOXcldjXWcfVpb/mOekQAXbESrFZpikCneZZuUdR/MUsqxyfH76UVypA/rbU/LY03 KOuA== X-Gm-Message-State: AFeK/H0pBKNqGZEGBby5jUI3DDC1L+RzO7j7OVY5eOzf0wH+B7J9urMefcwYs9Wg52alDLpv X-Received: by 10.99.47.67 with SMTP id v64mr17086028pgv.32.1491486744695; Thu, 06 Apr 2017 06:52:24 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id v11sm4187210pfi.50.2017.04.06.06.52.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 06 Apr 2017 06:52:24 -0700 (PDT) From: Amit Pundir To: gregkh@linuxfoundation.org Cc: stable@vger.kernel.org, james.hogan@imgtec.com, Matt Redfearn , Thomas Gleixner , Paolo Bonzini , Chris Metcalf , Petr Mladek , Paul Burton , Aaron Tomlin , Andrew Morton , linux-kernel@vger.kernel.org, linux-mips@linux-mips.org, Ralf Baechle Subject: [PATCH for-4.10 1/6] MIPS: Introduce irq_stack Date: Thu, 6 Apr 2017 19:22:09 +0530 Message-Id: <1491486734-15668-2-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491486734-15668-1-git-send-email-amit.pundir@linaro.org> References: <1491486734-15668-1-git-send-email-amit.pundir@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Matt Redfearn Allocate a per-cpu irq stack for use within interrupt handlers. Also add a utility function on_irq_stack to determine if a given stack pointer is within the irq stack for that cpu. Signed-off-by: Matt Redfearn Acked-by: Jason A. Donenfeld Cc: Thomas Gleixner Cc: Paolo Bonzini Cc: Chris Metcalf Cc: Petr Mladek Cc: James Hogan Cc: Paul Burton Cc: Aaron Tomlin Cc: Andrew Morton Cc: linux-kernel@vger.kernel.org Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14740/ Signed-off-by: Ralf Baechle (cherry picked from commit fe8bd18ffea5327344d4ec2bf11f47951212abd0) Signed-off-by: Amit Pundir --- arch/mips/include/asm/irq.h | 12 ++++++++++++ arch/mips/kernel/asm-offsets.c | 1 + arch/mips/kernel/irq.c | 11 +++++++++++ 3 files changed, 24 insertions(+) -- 2.7.4 diff --git a/arch/mips/include/asm/irq.h b/arch/mips/include/asm/irq.h index 6bf10e7..956db6e 100644 --- a/arch/mips/include/asm/irq.h +++ b/arch/mips/include/asm/irq.h @@ -17,6 +17,18 @@ #include +#define IRQ_STACK_SIZE THREAD_SIZE + +extern void *irq_stack[NR_CPUS]; + +static inline bool on_irq_stack(int cpu, unsigned long sp) +{ + unsigned long low = (unsigned long)irq_stack[cpu]; + unsigned long high = low + IRQ_STACK_SIZE; + + return (low <= sp && sp <= high); +} + #ifdef CONFIG_I8259 static inline int irq_canonicalize(int irq) { diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index 6080582..a727769 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c @@ -102,6 +102,7 @@ void output_thread_info_defines(void) OFFSET(TI_REGS, thread_info, regs); DEFINE(_THREAD_SIZE, THREAD_SIZE); DEFINE(_THREAD_MASK, THREAD_MASK); + DEFINE(_IRQ_STACK_SIZE, IRQ_STACK_SIZE); BLANK(); } diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index f8f5836..ba150c7 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -25,6 +25,8 @@ #include #include +void *irq_stack[NR_CPUS]; + /* * 'what should we do if we get a hw irq event on an illegal vector'. * each architecture has to answer this themselves. @@ -58,6 +60,15 @@ void __init init_IRQ(void) clear_c0_status(ST0_IM); arch_init_irq(); + + for_each_possible_cpu(i) { + int irq_pages = IRQ_STACK_SIZE / PAGE_SIZE; + void *s = (void *)__get_free_pages(GFP_KERNEL, irq_pages); + + irq_stack[i] = s; + pr_debug("CPU%d IRQ stack at 0x%p - 0x%p\n", i, + irq_stack[i], irq_stack[i] + IRQ_STACK_SIZE); + } } #ifdef CONFIG_DEBUG_STACKOVERFLOW