summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/irqchip/irq-gic-common.h2
-rw-r--r--drivers/irqchip/irq-gic-v3.c3
-rw-r--r--kernel/cpu_pm.c4
3 files changed, 9 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-gic-common.h b/drivers/irqchip/irq-gic-common.h
index fff697db8e22..a6fceec46ba7 100644
--- a/drivers/irqchip/irq-gic-common.h
+++ b/drivers/irqchip/irq-gic-common.h
@@ -26,6 +26,8 @@ struct gic_quirk {
u32 iidr;
u32 mask;
};
+extern bool from_suspend;
+extern struct irq_chip gic_arch_extn;
int gic_configure_irq(unsigned int irq, unsigned int type,
void __iomem *base, void (*sync_access)(void));
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index d7be6ddc34f6..0ebd9b00db04 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -645,6 +645,9 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
static int gic_cpu_pm_notifier(struct notifier_block *self,
unsigned long cmd, void *v)
{
+ if (from_suspend)
+ return NOTIFY_OK;
+
if (cmd == CPU_PM_EXIT) {
gic_enable_redist(true);
gic_cpu_sys_reg_init();
diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c
index 6c3523f83776..774bfe7a2893 100644
--- a/kernel/cpu_pm.c
+++ b/kernel/cpu_pm.c
@@ -22,6 +22,8 @@
#include <linux/spinlock.h>
#include <linux/syscore_ops.h>
+bool from_suspend = false;
+
static DEFINE_RWLOCK(cpu_pm_notifier_lock);
static RAW_NOTIFIER_HEAD(cpu_pm_notifier_chain);
@@ -208,6 +210,7 @@ static int cpu_pm_suspend(void)
{
int ret;
+ from_suspend = true;
ret = cpu_pm_enter();
if (ret)
return ret;
@@ -218,6 +221,7 @@ static int cpu_pm_suspend(void)
static void cpu_pm_resume(void)
{
+ from_suspend = false;
cpu_cluster_pm_exit(0);
cpu_pm_exit();
}