Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccd05d08 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras
Browse files

[POWERPC] Fix cell IOMMU null pointer explosion on old firmwares



The cell IOMMU fixed mapping support has a null pointer bug if you run
it on older firmwares that don't contain the "dma-ranges" properties.
Fix it and convert to using of_get_next_parent() while we're there.

Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 85687ff2
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/notifier.h>
#include <linux/of.h>
#include <linux/of_platform.h>

#include <asm/prom.h>
@@ -789,18 +790,16 @@ static int __init cell_iommu_init_disabled(void)
static u64 cell_iommu_get_fixed_address(struct device *dev)
{
	u64 cpu_addr, size, best_size, pci_addr = OF_BAD_ADDR;
	struct device_node *tmp, *np;
	struct device_node *np;
	const u32 *ranges = NULL;
	int i, len, best;

	np = dev->archdata.of_node;
	of_node_get(np);
	ranges = of_get_property(np, "dma-ranges", &len);
	while (!ranges && np) {
		tmp = of_get_parent(np);
		of_node_put(np);
		np = tmp;
	np = of_node_get(dev->archdata.of_node);
	while (np) {
		ranges = of_get_property(np, "dma-ranges", &len);
		if (ranges)
			break;
		np = of_get_next_parent(np);
	}

	if (!ranges) {