Skip to content

Commit

Permalink
[PATCH] powerpc: cell: Add numa id to struct spu
Browse files Browse the repository at this point in the history
Add an nid member to the spu structure, and store the numa id of the spu there
on creation.

Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Jeremy Kerr authored and Linus Torvalds committed May 2, 2006
1 parent 953039c commit 8261aa6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
43 changes: 20 additions & 23 deletions arch/powerpc/platforms/cell/spu_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,8 +529,8 @@ static int __init find_spu_node_id(struct device_node *spe)
return id ? *id : 0;
}

static int __init cell_spuprop_present(struct device_node *spe,
const char *prop)
static int __init cell_spuprop_present(struct spu *spu, struct device_node *spe,
const char *prop)
{
static DEFINE_MUTEX(add_spumem_mutex);

Expand All @@ -541,7 +541,6 @@ static int __init cell_spuprop_present(struct device_node *spe,
int proplen;

unsigned long start_pfn, nr_pages;
int node_id;
struct pglist_data *pgdata;
struct zone *zone;
int ret;
Expand All @@ -552,14 +551,7 @@ static int __init cell_spuprop_present(struct device_node *spe,
start_pfn = p->address >> PAGE_SHIFT;
nr_pages = ((unsigned long)p->len + PAGE_SIZE - 1) >> PAGE_SHIFT;

/*
* XXX need to get the correct NUMA node in here. This may
* be different from the spe::node_id property, e.g. when
* the host firmware is not NUMA aware.
*/
node_id = 0;

pgdata = NODE_DATA(node_id);
pgdata = NODE_DATA(spu->nid);
zone = pgdata->node_zones;

/* XXX rethink locking here */
Expand All @@ -570,8 +562,8 @@ static int __init cell_spuprop_present(struct device_node *spe,
return ret;
}

static void __iomem * __init map_spe_prop(struct device_node *n,
const char *name)
static void __iomem * __init map_spe_prop(struct spu *spu,
struct device_node *n, const char *name)
{
struct address_prop {
unsigned long address;
Expand All @@ -589,7 +581,7 @@ static void __iomem * __init map_spe_prop(struct device_node *n,

prop = p;

err = cell_spuprop_present(n, name);
err = cell_spuprop_present(spu, n, name);
if (err && (err != -EEXIST))
goto out;

Expand All @@ -607,44 +599,45 @@ static void spu_unmap(struct spu *spu)
iounmap((u8 __iomem *)spu->local_store);
}

static int __init spu_map_device(struct spu *spu, struct device_node *spe)
static int __init spu_map_device(struct spu *spu, struct device_node *node)
{
char *prop;
int ret;

ret = -ENODEV;
prop = get_property(spe, "isrc", NULL);
prop = get_property(node, "isrc", NULL);
if (!prop)
goto out;
spu->isrc = *(unsigned int *)prop;

spu->name = get_property(spe, "name", NULL);
spu->name = get_property(node, "name", NULL);
if (!spu->name)
goto out;

prop = get_property(spe, "local-store", NULL);
prop = get_property(node, "local-store", NULL);
if (!prop)
goto out;
spu->local_store_phys = *(unsigned long *)prop;

/* we use local store as ram, not io memory */
spu->local_store = (void __force *)map_spe_prop(spe, "local-store");
spu->local_store = (void __force *)
map_spe_prop(spu, node, "local-store");
if (!spu->local_store)
goto out;

prop = get_property(spe, "problem", NULL);
prop = get_property(node, "problem", NULL);
if (!prop)
goto out_unmap;
spu->problem_phys = *(unsigned long *)prop;

spu->problem= map_spe_prop(spe, "problem");
spu->problem= map_spe_prop(spu, node, "problem");
if (!spu->problem)
goto out_unmap;

spu->priv1= map_spe_prop(spe, "priv1");
spu->priv1= map_spe_prop(spu, node, "priv1");
/* priv1 is not available on a hypervisor */

spu->priv2= map_spe_prop(spe, "priv2");
spu->priv2= map_spe_prop(spu, node, "priv2");
if (!spu->priv2)
goto out_unmap;
ret = 0;
Expand Down Expand Up @@ -672,6 +665,10 @@ static int __init create_spu(struct device_node *spe)
goto out_free;

spu->node = find_spu_node_id(spe);
spu->nid = of_node_to_nid(spe);
if (spu->nid == -1)
spu->nid = 0;

spu->stop_code = 0;
spu->slb_replace = 0;
spu->mm = NULL;
Expand Down
1 change: 1 addition & 0 deletions include/asm-powerpc/spu.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ struct spu {
struct list_head list;
struct list_head sched_list;
int number;
int nid;
u32 isrc;
u32 node;
u64 flags;
Expand Down

0 comments on commit 8261aa6

Please sign in to comment.