From mboxrd@z Thu Jan 1 00:00:00 1970 From: marc.zyngier@arm.com (Marc Zyngier) Date: Mon, 07 Sep 2015 15:56:37 +0100 Subject: [RFC PATCH v1 2/4] irqchip: GICv3: set non-percpu irqs status with _IRQ_MOVE_PCNTXT In-Reply-To: References: <1441513421-8092-1-git-send-email-yangyingliang@huawei.com> <1441513421-8092-3-git-send-email-yangyingliang@huawei.com> <55EBD59B.4030405@linux.intel.com> <55ED83D2.90809@arm.com> Message-ID: <55EDA5A5.9070805@arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Thomas, On 07/09/15 14:24, Thomas Gleixner wrote: > On Mon, 7 Sep 2015, Marc Zyngier wrote: >> On 06/09/15 06:56, Jiang Liu wrote: >>> On 2015/9/6 12:23, Yang Yingliang wrote: >>>> Use irq_settings_set_move_pcntxt() helper irqs status with >>>> _IRQ_MOVE_PCNTXT. So that it can do set affinity when calling >>>> irq_set_affinity_locked(). >>> Hi Yingliang, >>> We could only set _IRQ_MOVE_PCNTCT flag to enable migrating >>> IRQ in process context if your hardware platform supports atomically >>> change IRQ configuration. Not sure whether that's true for GICv3. >>> If GICv3 doesn't support atomically change irq configuration, this >>> change may cause trouble. >> >> I think it boils down to what exactly "process context" means here. If >> this means "we do not need to mask the interrupt" while moving it, then >> it should be fine (the GIC architecture guarantees that a pending >> interrupt will be migrated). >> >> Is there any other requirement for this flag? > > The history of this flag is as follows: > > On x86 interrupts can only be safely migrated while the interrupt is > handled. Woa! That's creative! :-) I suppose this doesn't work very well with CPU hotplug though... > With the introduction of IRQ remapping this requirement > changed. Remapped interrupts can be migrated in any context. > > If you look at irq_set_affinity_locked() > > if (irq_can_move_pcntxt(data) { > irq_do_set_affinity(data,...) > chip->irq_set_affinity(data,...); > } else { > irqd_set_move_pending(data); > } > > So if IRQ_MOVE_PCNTXT is not set, we handle the migration of the > interrupt from next the interrupt. If it's set set_affinity() is > called right away. OK, that is now starting to make more sense. > All architectures which do not select GENERIC_PENDING_IRQ are using > the direct method. Right. On ARM, only the direct method makes sense so far (we have no constraint such as the one you describe above). So I wonder why we bother introducing the IRQ_MOVE_PCNTXT flag on ARM at all. Is that just because migration.c is only compiled when GENERIC_PENDING_IRQ is set? Thanks, M. -- Jazz is not dead. It just smells funny... From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753217AbbIGO4m (ORCPT ); Mon, 7 Sep 2015 10:56:42 -0400 Received: from foss.arm.com ([217.140.101.70]:51240 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753083AbbIGO4k (ORCPT ); Mon, 7 Sep 2015 10:56:40 -0400 Message-ID: <55EDA5A5.9070805@arm.com> Date: Mon, 07 Sep 2015 15:56:37 +0100 From: Marc Zyngier Organization: ARM Ltd User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-Version: 1.0 To: Thomas Gleixner , Yang Yingliang CC: Jiang Liu , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mark Rutland , Will Deacon , Russell King - ARM Linux , Hanjun Guo Subject: Re: [RFC PATCH v1 2/4] irqchip: GICv3: set non-percpu irqs status with _IRQ_MOVE_PCNTXT References: <1441513421-8092-1-git-send-email-yangyingliang@huawei.com> <1441513421-8092-3-git-send-email-yangyingliang@huawei.com> <55EBD59B.4030405@linux.intel.com> <55ED83D2.90809@arm.com> In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Thomas, On 07/09/15 14:24, Thomas Gleixner wrote: > On Mon, 7 Sep 2015, Marc Zyngier wrote: >> On 06/09/15 06:56, Jiang Liu wrote: >>> On 2015/9/6 12:23, Yang Yingliang wrote: >>>> Use irq_settings_set_move_pcntxt() helper irqs status with >>>> _IRQ_MOVE_PCNTXT. So that it can do set affinity when calling >>>> irq_set_affinity_locked(). >>> Hi Yingliang, >>> We could only set _IRQ_MOVE_PCNTCT flag to enable migrating >>> IRQ in process context if your hardware platform supports atomically >>> change IRQ configuration. Not sure whether that's true for GICv3. >>> If GICv3 doesn't support atomically change irq configuration, this >>> change may cause trouble. >> >> I think it boils down to what exactly "process context" means here. If >> this means "we do not need to mask the interrupt" while moving it, then >> it should be fine (the GIC architecture guarantees that a pending >> interrupt will be migrated). >> >> Is there any other requirement for this flag? > > The history of this flag is as follows: > > On x86 interrupts can only be safely migrated while the interrupt is > handled. Woa! That's creative! :-) I suppose this doesn't work very well with CPU hotplug though... > With the introduction of IRQ remapping this requirement > changed. Remapped interrupts can be migrated in any context. > > If you look at irq_set_affinity_locked() > > if (irq_can_move_pcntxt(data) { > irq_do_set_affinity(data,...) > chip->irq_set_affinity(data,...); > } else { > irqd_set_move_pending(data); > } > > So if IRQ_MOVE_PCNTXT is not set, we handle the migration of the > interrupt from next the interrupt. If it's set set_affinity() is > called right away. OK, that is now starting to make more sense. > All architectures which do not select GENERIC_PENDING_IRQ are using > the direct method. Right. On ARM, only the direct method makes sense so far (we have no constraint such as the one you describe above). So I wonder why we bother introducing the IRQ_MOVE_PCNTXT flag on ARM at all. Is that just because migration.c is only compiled when GENERIC_PENDING_IRQ is set? Thanks, M. -- Jazz is not dead. It just smells funny...