mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 15:04:27 +08:00
powerpc: Return early if irq_host lookup type is wrong
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@bga.com> Reviewed-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
3af259d155
commit
2d441681a4
@ -814,8 +814,7 @@ void irq_dispose_mapping(unsigned int virq)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
host = irq_map[virq].host;
|
host = irq_map[virq].host;
|
||||||
WARN_ON (host == NULL);
|
if (WARN_ON(host == NULL))
|
||||||
if (host == NULL)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Never unmap legacy interrupts */
|
/* Never unmap legacy interrupts */
|
||||||
@ -898,7 +897,8 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
|
|||||||
struct irq_map_entry *ptr;
|
struct irq_map_entry *ptr;
|
||||||
unsigned int virq;
|
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
|
* 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,
|
void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
|
||||||
irq_hw_number_t hwirq)
|
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) {
|
if (virq != NO_IRQ) {
|
||||||
mutex_lock(&revmap_trees_mutex);
|
mutex_lock(&revmap_trees_mutex);
|
||||||
@ -937,7 +938,8 @@ unsigned int irq_linear_revmap(struct irq_host *host,
|
|||||||
{
|
{
|
||||||
unsigned int *revmap;
|
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 */
|
/* Check revmap bounds */
|
||||||
if (unlikely(hwirq >= host->revmap_data.linear.size))
|
if (unlikely(hwirq >= host->revmap_data.linear.size))
|
||||||
|
Loading…
Reference in New Issue
Block a user