Commit 094fa59d authored by Jianmin Lv's avatar Jianmin Lv Committed by Hongchen Zhang
Browse files

LoongArch: Remove generic irq migration

LoongArch inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7362E



--------------------------------

Signed-off-by: default avatarJianmin Lv <lvjianmin@loongson.cn>
Signed-off-by: default avatarJuxin Gao <gaojuxin@loongson.cn>
parent c93eb125
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -428,7 +428,6 @@ config SMP
config HOTPLUG_CPU
	bool "Support for hot-pluggable CPUs"
	depends on SMP
	select GENERIC_IRQ_MIGRATION
	help
	  Say Y here to allow turning CPUs off and on. CPUs can be
	  controlled through /sys/devices/system/cpu.
+1 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ extern struct fwnode_handle *pch_lpc_handle;
extern struct fwnode_handle *pch_pic_handle[MAX_IO_PICS];

extern irqreturn_t loongson_ipi_interrupt(int irq, void *dev);
extern void fixup_irqs(void);

#include <asm-generic/irq.h>

+36 −0
Original line number Diff line number Diff line
@@ -96,6 +96,42 @@ static int __init get_ipi_irq(void)
	return -EINVAL;
}

#ifdef CONFIG_HOTPLUG_CPU
static void handle_irq_affinity(void)
{
	struct irq_desc *desc;
	struct irq_chip *chip;
	unsigned int irq;
	unsigned long flags;
	struct cpumask *affinity;

	for_each_active_irq(irq) {
		desc = irq_to_desc(irq);
		if (!desc)
			continue;

		raw_spin_lock_irqsave(&desc->lock, flags);

		affinity = desc->irq_data.common->affinity;
		if (!cpumask_intersects(affinity, cpu_online_mask))
			cpumask_copy(affinity, cpu_online_mask);

		chip = irq_data_get_irq_chip(&desc->irq_data);
		if (chip && chip->irq_set_affinity)
			chip->irq_set_affinity(&desc->irq_data,
					desc->irq_data.common->affinity, true);
		raw_spin_unlock_irqrestore(&desc->lock, flags);
	}
}

void fixup_irqs(void)
{
	handle_irq_affinity();
	irq_cpu_offline();
	clear_csr_ecfg(ECFG0_IM);
}
#endif

void __init init_IRQ(void)
{
	int i, ret;
+1 −2
Original line number Diff line number Diff line
@@ -304,8 +304,7 @@ int loongson_cpu_disable(void)
	set_cpu_online(cpu, false);
	calculate_cpu_foreign_map();
	local_irq_save(flags);
	irq_migrate_all_off_this_cpu();
	clear_csr_ecfg(ECFG0_IM);
	fixup_irqs();
	local_irq_restore(flags);
	local_flush_tlb_all();

+2 −2
Original line number Diff line number Diff line
@@ -148,5 +148,5 @@ config GENERIC_IRQ_MULTI_HANDLER
# Do not even think of enabling this on any new platform
config DEPRECATED_IRQ_CPU_ONOFFLINE
	bool
	depends on CAVIUM_OCTEON_SOC
	default CAVIUM_OCTEON_SOC
	depends on CAVIUM_OCTEON_SOC || LOONGARCH
	default CAVIUM_OCTEON_SOC || LOONGARCH