static DEFINE_MUTEX(add_spumem_mutex);
 
 struct spu_pdata {
-       int nid;
        struct device_node *devnode;
        struct spu_priv1 __iomem *priv1;
 };
 
 EXPORT_SYMBOL_GPL(spu_devnode);
 
-static int __init find_spu_node_id(struct device_node *spe)
-{
-       const unsigned int *id;
-       struct device_node *cpu;
-       cpu = spe->parent->parent;
-       id = get_property(cpu, "node-id", NULL);
-       return id ? *id : 0;
-}
-
 static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe,
                const char *prop)
 {
        start_pfn = p->address >> PAGE_SHIFT;
        nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT;
 
-       pgdata = NODE_DATA(spu_get_pdata(spu)->nid);
+       pgdata = NODE_DATA(spu->node);
        zone = pgdata->node_zones;
 
        /* XXX rethink locking here */
 {
        unsigned int isrc;
        const u32 *tmp;
+       int nid;
 
        /* Get the interrupt source unit from the device-tree */
        tmp = get_property(np, "isrc", NULL);
                return -ENODEV;
        isrc = tmp[0];
 
+       tmp = get_property(np->parent->parent, "node-id", NULL);
+       if (!tmp) {
+               printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__);
+               nid = spu->node;
+       } else
+               nid = tmp[0];
+
        /* Add the node number */
-       isrc |= spu->node << IIC_IRQ_NODE_SHIFT;
+       isrc |= nid << IIC_IRQ_NODE_SHIFT;
 
        /* Now map interrupts of all 3 classes */
        spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc);
        start_pfn = resource.start >> PAGE_SHIFT;
        nr_pages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
 
-       pgdata = NODE_DATA(spu_get_pdata(spu)->nid);
+       pgdata = NODE_DATA(spu->node);
        zone = pgdata->node_zones;
 
        /* XXX rethink locking here */
        }
        spu_get_pdata(spu)->devnode = of_node_get(spe);
 
-       spu->node = find_spu_node_id(spe);
+       spu->node = of_node_to_nid(spe);
        if (spu->node >= MAX_NUMNODES) {
                printk(KERN_WARNING "SPE %s on node %d ignored,"
                       " node number too big\n", spe->full_name, spu->node);
                goto out_free;
        }
 
-       spu_get_pdata(spu)->nid = of_node_to_nid(spe);
-       if (spu_get_pdata(spu)->nid == -1)
-               spu_get_pdata(spu)->nid = 0;
-
        ret = spu_map_device(spu);
        /* try old method */
        if (ret)