[PATCH 37/37] powerpc: make IRQ_NOREQUEST last to clear, first to set
Grant Likely
grant.likely at secretlab.ca
Thu May 12 05:18:11 EST 2011
On Wed, May 11, 2011 at 7:30 AM, Milton Miller <miltonm at bga.com> wrote:
> When allocating irqs, wait to clear the IRQ_NOREQUEST flag until the
> host map hook has been called.
>
> When freeing irqs, set the IRQ_NOREQUEST flag before calling the host
> unmap hook.
A description describing why this change is being made would be
appreciated here.
g.
>
> Signed-off-by: Milton Miller <miltonm at bga.com>
> ---
> arch/powerpc/kernel/irq.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index 4368b5e..a24d37d 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -586,14 +586,14 @@ struct irq_host *irq_alloc_host(struct device_node *of_node,
> irq_map[i].host = host;
> smp_wmb();
>
> - /* Clear norequest flags */
> - irq_clear_status_flags(i, IRQ_NOREQUEST);
> -
> /* Legacy flags are left to default at this point,
> * one can then use irq_create_mapping() to
> * explicitly change them
> */
> ops->map(host, i, i);
> +
> + /* Clear norequest flags */
> + irq_clear_status_flags(i, IRQ_NOREQUEST);
> }
> break;
> case IRQ_HOST_MAP_LINEAR:
> @@ -664,8 +664,6 @@ static int irq_setup_virq(struct irq_host *host, unsigned int virq,
> goto error;
> }
>
> - irq_clear_status_flags(virq, IRQ_NOREQUEST);
> -
> /* map it */
> smp_wmb();
> irq_map[virq].hwirq = hwirq;
> @@ -676,6 +674,8 @@ static int irq_setup_virq(struct irq_host *host, unsigned int virq,
> goto errdesc;
> }
>
> + irq_clear_status_flags(virq, IRQ_NOREQUEST);
> +
> return 0;
>
> errdesc:
> @@ -819,6 +819,8 @@ void irq_dispose_mapping(unsigned int virq)
> if (host->revmap_type == IRQ_HOST_MAP_LEGACY)
> return;
>
> + irq_set_status_flags(virq, IRQ_NOREQUEST);
> +
> /* remove chip and handler */
> irq_set_chip_and_handler(virq, NULL, NULL);
>
> @@ -848,8 +850,6 @@ void irq_dispose_mapping(unsigned int virq)
> smp_mb();
> irq_map[virq].hwirq = host->inval_irq;
>
> - irq_set_status_flags(virq, IRQ_NOREQUEST);
> -
> irq_free_descs(virq, 1);
> /* Free it */
> irq_free_virt(virq, 1);
> --
> 1.7.0.4
>
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
More information about the Linuxppc-dev
mailing list