Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752888AbbH2PMs (ORCPT ); Sat, 29 Aug 2015 11:12:48 -0400 Received: from mga02.intel.com ([134.134.136.20]:41773 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752596AbbH2PMr (ORCPT ); Sat, 29 Aug 2015 11:12:47 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,429,1437462000"; d="scan'208";a="634567904" Subject: Re: [PATCH] arm64: fix a migrating irq bug when hotplug cpu To: Yang Yingliang , linux-arm-kernel@lists.infradead.org References: <55E1AD09.7020701@huawei.com> Cc: Thomas Gleixner , Marc Zyngier , Mark Rutland , Will Deacon , linux-kernel@vger.kernel.org From: Jiang Liu Organization: Intel Message-ID: <55E1CBE9.6080705@linux.intel.com> Date: Sat, 29 Aug 2015 23:12:41 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <55E1AD09.7020701@huawei.com> Content-Type: text/plain; charset=gbk Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2135 Lines: 53 On 2015/8/29 21:00, Yang Yingliang wrote: > From: Yang Yingliang > > When cpu is disabled, all irqs will be migratged to another cpu. > In some cases, a new affinity is different, it needed to be coppied > to irq's affinity. But if the type of irq is LPI, it's affinity will > not be coppied because of irq_set_affinity's return value. > So copy the affinity, when the return value is IRQ_SET_MASK_OK_DONE. Hi Yingliang, If irq_set_affinity callback returns IRQ_SET_MASK_OK_DONE, it means that irq_set_affinity has copied the new CPU mask to irq affinity mask. It would be better to change irq_set_affinity for LPI to follow this rule. Thanks! Gerry > > Cc: Jiang Liu > Cc: Thomas Gleixner > Cc: Marc Zyngier > Cc: Mark Rutland > Cc: Will Deacon > --- > arch/arm64/kernel/irq.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kernel/irq.c b/arch/arm64/kernel/irq.c > index 463fa2e..2acc8ec 100644 > --- a/arch/arm64/kernel/irq.c > +++ b/arch/arm64/kernel/irq.c > @@ -78,10 +78,13 @@ static bool migrate_one_irq(struct irq_desc *desc) > } > > c = irq_data_get_irq_chip(d); > - if (!c->irq_set_affinity) > + if (!c->irq_set_affinity) { > pr_debug("IRQ%u: unable to set affinity\n", d->irq); > - else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK > && ret) > - cpumask_copy(irq_data_get_affinity_mask(d), affinity); > + } else if (c->irq_set_affinity(d, affinity, false) == > IRQ_SET_MASK_OK && ret) { > + int r = c->irq_set_affinity(d, affinity, false); > + if ((r == IRQ_SET_MASK_OK || r == IRQ_SET_MASK_OK_DONE) && ret) > + cpumask_copy(irq_data_get_affinity_mask(d), affinity); > + } > > return ret; > } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/