[PATCH 24/37] powerpc: return early if irq_host lookup type is wrong
Grant Likely
grant.likely at secretlab.ca
Thu May 12 05:03:56 EST 2011
On Wed, May 11, 2011 at 7:29 AM, Milton Miller <miltonm at bga.com> wrote:
> If for some reason the code incrorectly calls the wrong function to
> manage the revmap, not only should we warn, we should take action.
> However, in the paths we expect to be taken every delivered interrupt
> change to WARN_ON_ONCE. Use the if (WARN_ON(x)) format to get the
> unlikely for free.
>
> Signed-off-by: Milton Miller <miltonm at bga.com>
Looks right.
Reviewed-by: Grant Likely <grant.likely at secretlab.ca>
> ---
> arch/powerpc/kernel/irq.c | 12 +++++++-----
> 1 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index f42e869..4a5aa8c 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -814,8 +814,7 @@ void irq_dispose_mapping(unsigned int virq)
> return;
>
> host = irq_map[virq].host;
> - WARN_ON (host == NULL);
> - if (host == NULL)
> + if (WARN_ON(host == NULL))
> return;
>
> /* Never unmap legacy interrupts */
> @@ -898,7 +897,8 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> struct irq_map_entry *ptr;
> unsigned int virq;
>
> - WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
> + if (WARN_ON_ONCE(host->revmap_type != IRQ_HOST_MAP_TREE))
> + return irq_find_mapping(host, hwirq);
>
> /*
> * No rcu_read_lock(ing) needed, the ptr returned can't go under us
> @@ -922,7 +922,8 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> - WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
> + if (WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE))
> + return;
>
> if (virq != NO_IRQ) {
> mutex_lock(&revmap_trees_mutex);
> @@ -937,7 +938,8 @@ unsigned int irq_linear_revmap(struct irq_host *host,
> {
> unsigned int *revmap;
>
> - WARN_ON(host->revmap_type != IRQ_HOST_MAP_LINEAR);
> + if (WARN_ON_ONCE(host->revmap_type != IRQ_HOST_MAP_LINEAR))
> + return irq_find_mapping(host, hwirq);
>
> /* Check revmap bounds */
> if (unlikely(hwirq >= host->revmap_data.linear.size))
> --
> 1.7.0.4
>
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
More information about the Linuxppc-dev
mailing list