瀏覽代碼

irqchip/gic: Don't unnecessarily write the IRQ configuration

If the interrupt configuration matches the current configuration, then
don't bother writing the configuration again.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Jon Hunter 9 年之前
父節點
當前提交
ec1a454d61
共有 1 個文件被更改,包括 6 次插入2 次删除
  1. 6 2
      drivers/irqchip/irq-gic-common.c

+ 6 - 2
drivers/irqchip/irq-gic-common.c

@@ -50,13 +50,17 @@ int gic_configure_irq(unsigned int irq, unsigned int type,
 	else if (type & IRQ_TYPE_EDGE_BOTH)
 	else if (type & IRQ_TYPE_EDGE_BOTH)
 		val |= confmask;
 		val |= confmask;
 
 
+	/* If the current configuration is the same, then we are done */
+	if (val == oldval)
+		return 0;
+
 	/*
 	/*
 	 * Write back the new configuration, and possibly re-enable
 	 * Write back the new configuration, and possibly re-enable
-	 * the interrupt. If we tried to write a new configuration and failed,
+	 * the interrupt. If we fail to write a new configuration,
 	 * return an error.
 	 * return an error.
 	 */
 	 */
 	writel_relaxed(val, base + GIC_DIST_CONFIG + confoff);
 	writel_relaxed(val, base + GIC_DIST_CONFIG + confoff);
-	if (readl_relaxed(base + GIC_DIST_CONFIG + confoff) != val && val != oldval)
+	if (readl_relaxed(base + GIC_DIST_CONFIG + confoff) != val)
 		ret = -EINVAL;
 		ret = -EINVAL;
 
 
 	if (sync_access)
 	if (sync_access)