From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932190AbbJMKRq (ORCPT ); Tue, 13 Oct 2015 06:17:46 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:51638 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752971AbbJMKRD (ORCPT ); Tue, 13 Oct 2015 06:17:03 -0400 From: Qais Yousef To: CC: , , , , , , Qais Yousef Subject: [RFC v2 PATCH 13/14] irqchip: mips-gic: implement the new irq_send_ipi Date: Tue, 13 Oct 2015 11:16:21 +0100 Message-ID: <1444731382-19313-14-git-send-email-qais.yousef@imgtec.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1444731382-19313-1-git-send-email-qais.yousef@imgtec.com> References: <1444731382-19313-1-git-send-email-qais.yousef@imgtec.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [192.168.154.94] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now irqchip has a irq_send_ipi() function, implement gic_send_ipi() to make use of it Signed-off-by: Qais Yousef --- drivers/irqchip/irq-mips-gic.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 9c8ece1d90f2..764470375cd0 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -266,9 +266,24 @@ static void gic_bind_eic_interrupt(int irq, int set) GIC_VPE_EIC_SS(irq), set); } -void gic_send_ipi(unsigned int intr) +static void gic_send_ipi(struct irq_data *d, const struct ipi_mask *cpumask) { - gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), GIC_SH_WEDGE_SET(intr)); + struct ipi_mapping *map = irq_data_get_irq_chip_data(d); + irq_hw_number_t intr; + int vpe; + + if (!map) + return; + + vpe = find_first_bit(cpumask->cpumask, cpumask->nbits); + while (vpe != cpumask->nbits) { + intr = map->cpumap[vpe]; + if (intr == INVALID_HWIRQ) + continue; + gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), GIC_SH_WEDGE_SET(intr)); + + vpe = find_next_bit(cpumask->cpumask, cpumask->nbits, vpe + 1); + } } int gic_get_c0_compare_int(void) @@ -476,6 +491,7 @@ static struct irq_chip gic_edge_irq_controller = { #ifdef CONFIG_SMP .irq_set_affinity = gic_set_affinity, #endif + .irq_send_ipi = gic_send_ipi, }; static void gic_handle_local_int(bool chained) -- 2.1.0