Skip to content

Commit

Permalink
of/irq: Fix endian issues in parsing interrupt specifiers
Browse files Browse the repository at this point in the history
This patch fixes some instances where interrupt specifiers are
dereferenced directly instead of doing a be32_to_cpu() conversion first.

Signed-off-by: Grant Likely <[email protected]>
  • Loading branch information
glikely committed Jul 24, 2010
1 parent 9a6b2e5 commit d2f7183
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions drivers/of/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,17 @@ static struct device_node *of_irq_find_parent(struct device_node *child)
* properties, for example when resolving PCI interrupts when no device
* node exist for the parent.
*/
int of_irq_map_raw(struct device_node *parent, const u32 *intspec, u32 ointsize,
const u32 *addr, struct of_irq *out_irq)
int of_irq_map_raw(struct device_node *parent, const __be32 *intspec,
u32 ointsize, const __be32 *addr, struct of_irq *out_irq)
{
struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL;
const __be32 *tmp, *imap, *imask;
u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0;
int imaplen, match, i;

pr_debug("of_irq_map_raw: par=%s,intspec=[0x%08x 0x%08x...],ointsize=%d\n",
parent->full_name, intspec[0], intspec[1], ointsize);
parent->full_name, be32_to_cpup(intspec),
be32_to_cpup(intspec + 1), ointsize);

ipar = of_node_get(parent);

Expand Down Expand Up @@ -278,7 +279,7 @@ EXPORT_SYMBOL_GPL(of_irq_map_raw);
int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq)
{
struct device_node *p;
const u32 *intspec, *tmp, *addr;
const __be32 *intspec, *tmp, *addr;
u32 intsize, intlen;
int res = -EINVAL;

Expand All @@ -292,9 +293,9 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
intspec = of_get_property(device, "interrupts", &intlen);
if (intspec == NULL)
return -EINVAL;
intlen /= sizeof(u32);
intlen /= sizeof(*intspec);

pr_debug(" intspec=%d intlen=%d\n", *intspec, intlen);
pr_debug(" intspec=%d intlen=%d\n", be32_to_cpup(intspec), intlen);

/* Get the reg property (if any) */
addr = of_get_property(device, "reg", NULL);
Expand Down

0 comments on commit d2f7183

Please sign in to comment.