driver core: Introduce find_memory_block_hinted which utilizes kset_find_obj_hinted.
Introduce a find_memory_block_hinted() which utilizes the recently added kset_find_obj_hinted(). Signed-off-by: Robin Holt <holt@sgi.com> To: Dave Hansen <haveblue@us.ibm.com> To: Matt Tolentino <matthew.e.tolentino@intel.com> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c25d1dfbd4
commit
98383031ed
@@ -468,6 +468,32 @@ static int add_memory_block(int nid, struct mem_section *section,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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_hinted(&memory_sysdev_class.kset, name, kobj);
|
||||||
|
if (!kobj)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
sysdev = container_of(kobj, struct sys_device, kobj);
|
||||||
|
mem = container_of(sysdev, struct memory_block, sysdev);
|
||||||
|
|
||||||
|
return mem;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For now, we have a linear search to go find the appropriate
|
* For now, we have a linear search to go find the appropriate
|
||||||
* memory_block corresponding to a particular phys_index. If
|
* memory_block corresponding to a particular phys_index. If
|
||||||
@@ -478,25 +504,7 @@ static int add_memory_block(int nid, struct mem_section *section,
|
|||||||
*/
|
*/
|
||||||
struct memory_block *find_memory_block(struct mem_section *section)
|
struct memory_block *find_memory_block(struct mem_section *section)
|
||||||
{
|
{
|
||||||
struct kobject *kobj;
|
return find_memory_block_hinted(section, NULL);
|
||||||
struct sys_device *sysdev;
|
|
||||||
struct memory_block *mem;
|
|
||||||
char name[sizeof(MEMORY_CLASS_NAME) + 9 + 1];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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);
|
|
||||||
if (!kobj)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
sysdev = container_of(kobj, struct sys_device, kobj);
|
|
||||||
mem = container_of(sysdev, struct memory_block, sysdev);
|
|
||||||
|
|
||||||
return mem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
||||||
|
@@ -113,6 +113,8 @@ extern int memory_dev_init(void);
|
|||||||
extern int remove_memory_block(unsigned long, struct mem_section *, int);
|
extern int remove_memory_block(unsigned long, struct mem_section *, int);
|
||||||
extern int memory_notify(unsigned long val, void *v);
|
extern int memory_notify(unsigned long val, void *v);
|
||||||
extern int memory_isolate_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 *);
|
extern struct memory_block *find_memory_block(struct mem_section *);
|
||||||
#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT)
|
#define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT)
|
||||||
enum mem_add_context { BOOT, HOTPLUG };
|
enum mem_add_context { BOOT, HOTPLUG };
|
||||||
|
Reference in New Issue
Block a user