Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 213471
b: refs/heads/master
c: 9838303
h: refs/heads/master
i:
  213469: f15d6d3
  213467: dacc793
  213463: 03498f9
  213455: 079bfbe
  213439: 5ef7ec3
v: v3
  • Loading branch information
Robin Holt authored and Greg Kroah-Hartman committed Oct 22, 2010
1 parent 1f43c9b commit 2cc1d4d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c25d1dfbd403209025df41a737f82ce8f43d93f5
refs/heads/master: 98383031ed77c6eb49ab612166fef9c0efe1604a
28 changes: 18 additions & 10 deletions trunk/drivers/base/memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -468,28 +468,23 @@ static int add_memory_block(int nid, struct mem_section *section,
return ret;
}

/*
* For now, we have a linear search to go find the appropriate
* memory_block corresponding to a particular phys_index. If
* this gets to be a real problem, we can always use a radix
* tree or something here.
*
* This could be made generic for all sysdev classes.
*/
struct memory_block *find_memory_block(struct mem_section *section)
struct memory_block *find_memory_block_hinted(struct mem_section *section,
struct memory_block *hint)
{
struct kobject *kobj;
struct sys_device *sysdev;
struct memory_block *mem;
char name[sizeof(MEMORY_CLASS_NAME) + 9 + 1];

kobj = hint ? &hint->sysdev.kobj : NULL;

/*
* This only works because we know that section == sysdev->id
* slightly redundant with sysdev_register()
*/
sprintf(&name[0], "%s%d", MEMORY_CLASS_NAME, __section_nr(section));

kobj = kset_find_obj(&memory_sysdev_class.kset, name);
kobj = kset_find_obj_hinted(&memory_sysdev_class.kset, name, kobj);
if (!kobj)
return NULL;

Expand All @@ -499,6 +494,19 @@ struct memory_block *find_memory_block(struct mem_section *section)
return mem;
}

/*
* For now, we have a linear search to go find the appropriate
* memory_block corresponding to a particular phys_index. If
* this gets to be a real problem, we can always use a radix
* tree or something here.
*
* This could be made generic for all sysdev classes.
*/
struct memory_block *find_memory_block(struct mem_section *section)
{
return find_memory_block_hinted(section, NULL);
}

int remove_memory_block(unsigned long node_id, struct mem_section *section,
int phys_device)
{
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ extern int memory_dev_init(void);
extern int remove_memory_block(unsigned long, struct mem_section *, int);
extern int memory_notify(unsigned long val, void *v);
extern int memory_isolate_notify(unsigned long val, void *v);
extern struct memory_block *find_memory_block_hinted(struct mem_section *,
struct memory_block *);
extern struct memory_block *find_memory_block(struct mem_section *);
#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT)
enum mem_add_context { BOOT, HOTPLUG };
Expand Down

0 comments on commit 2cc1d4d

Please sign in to comment.