All of lore.kernel.org
 help / color / mirror / Atom feed
From: Huacai Chen <chenhuacai@loongson.cn>
To: Thomas Gleixner <tglx@linutronix.de>, Marc Zyngier <maz@kernel.org>
Cc: loongarch@lists.linux.dev, linux-kernel@vger.kernel.org,
	Xuefeng Li <lixuefeng@loongson.cn>,
	Huacai Chen <chenhuacai@gmail.com>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	Huacai Chen <chenhuacai@loongson.cn>
Subject: [PATCH V2] irqchip: Make irqchip_init() usable on pure ACPI systems
Date: Tue, 27 Sep 2022 20:45:57 +0800	[thread overview]
Message-ID: <20220927124557.3246737-1-chenhuacai@loongson.cn> (raw)

Pure ACPI system (e.g., LoongArch) doesn't select OF and OF_IRQ, but it
still need a non-empty irqchip_init(). So, change the IRQCHIP dependency
from OF_IRQ to (OF_IRQ || ACPI_GENERIC_GSI), and then define an empty
inline of_irq_init() in the !CONFIG_OF_IRQ case, so as to make the non-
empty irqchip_init() be usable on pure ACPI systems.

Without this patch we get such errors:

[    0.000000] NR_IRQS: 576, nr_irqs: 576, preallocated irqs: 16
[    0.000000] Kernel panic - not syncing: IPI IRQ mapping failed
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.0.0-rc6+ #2189
[    0.000000] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.pre-beta8 08/18/2022
[    0.000000] Stack : 0000000000000000 9000000000fa4388 900000000140c000 900000000140fb70
[    0.000000]         0000000000000000 900000000140fb70 90000000012f4aa0 900000000140fa98
[    0.000000]         900000000140fa0c 900000008140f9ff 0000000000000030 0000000000000005
[    0.000000]         900000000578f708 0000000004750000 0000000000000000 00000000ffffdfff
[    0.000000]         0000000000000000 0000000000000000 0000000000000030 000000000000002f
[    0.000000]         900000000141f000 0000000004750000 9000000001427348 00000000000000b0
[    0.000000]         90000000012f4aa0 0000000000000004 0000000000000000 9000000001020000
[    0.000000]         9000000005781b80 9000000005781ba9 0000000000000000 9000000001315e30
[    0.000000]         900000000129a3b0 9000000000222b64 0000000000000000 00000000000000b0
[    0.000000]         0000000000000004 0000000000000000 0000000000070000 0000000000000800
[    0.000000]         ...
[    0.000000] Call Trace:
[    0.000000] [<9000000000222b64>] show_stack+0x24/0x124
[    0.000000] [<9000000000fa4388>] dump_stack_lvl+0x60/0x88
[    0.000000] [<9000000000f9965c>] panic+0x130/0x2f8
[    0.000000] [<9000000000fd4324>] init_IRQ+0xa8/0x240
[    0.000000] [<9000000000fd0b38>] start_kernel+0x488/0x5f0
[    0.000000] [<9000000000fb10c4>] kernel_entry+0xc4/0xc8
[    0.000000]
[    0.000000] ---[ end Kernel panic - not syncing: IPI IRQ mapping failed ]---

Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
 drivers/irqchip/Kconfig   | 2 +-
 include/linux/of_irq.h    | 6 ++++--
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 66b9fa408bf2..93ad04d58f17 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -3,7 +3,7 @@ menu "IRQ chip support"
 
 config IRQCHIP
 	def_bool y
-	depends on OF_IRQ
+	depends on (OF_IRQ || ACPI_GENERIC_GSI)
 
 config ARM_GIC
 	bool
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h
index 83fccd0c9bba..d6d3eae2f145 100644
--- a/include/linux/of_irq.h
+++ b/include/linux/of_irq.h
@@ -37,9 +37,8 @@ extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data);
 extern int of_irq_to_resource(struct device_node *dev, int index,
 			      struct resource *r);
 
-extern void of_irq_init(const struct of_device_id *matches);
-
 #ifdef CONFIG_OF_IRQ
+extern void of_irq_init(const struct of_device_id *matches);
 extern int of_irq_parse_one(struct device_node *device, int index,
 			  struct of_phandle_args *out_irq);
 extern int of_irq_count(struct device_node *dev);
@@ -57,6 +56,9 @@ extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev,
 extern void of_msi_configure(struct device *dev, struct device_node *np);
 u32 of_msi_map_id(struct device *dev, struct device_node *msi_np, u32 id_in);
 #else
+static inline void of_irq_init(const struct of_device_id *matches)
+{
+}
 static inline int of_irq_parse_one(struct device_node *device, int index,
 				   struct of_phandle_args *out_irq)
 {
-- 
2.31.1


             reply	other threads:[~2022-09-27 12:47 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 12:45 Huacai Chen [this message]
2022-09-28  0:20 ` [PATCH V2] irqchip: Make irqchip_init() usable on pure ACPI systems Tiezhu Yang
2022-09-28 13:37 ` [irqchip: irq/irqchip-next] " irqchip-bot for Huacai Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220927124557.3246737-1-chenhuacai@loongson.cn \
    --to=chenhuacai@loongson.cn \
    --cc=chenhuacai@gmail.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lixuefeng@loongson.cn \
    --cc=loongarch@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.