|
@@ -27,6 +27,8 @@
|
|
|
#include <asm/atomic.h>
|
|
|
#include <asm/uaccess.h>
|
|
|
|
|
|
+static DEFINE_MUTEX(mem_sysfs_mutex);
|
|
|
+
|
|
|
#define MEMORY_CLASS_NAME "memory"
|
|
|
|
|
|
static struct sysdev_class memory_sysdev_class = {
|
|
@@ -484,6 +486,8 @@ static int add_memory_block(int nid, struct mem_section *section,
|
|
|
if (!mem)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ mutex_lock(&mem_sysfs_mutex);
|
|
|
+
|
|
|
mem->phys_index = __section_nr(section);
|
|
|
mem->state = state;
|
|
|
mutex_init(&mem->state_mutex);
|
|
@@ -504,6 +508,7 @@ static int add_memory_block(int nid, struct mem_section *section,
|
|
|
ret = register_mem_sect_under_node(mem, nid);
|
|
|
}
|
|
|
|
|
|
+ mutex_unlock(&mem_sysfs_mutex);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -512,6 +517,7 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
|
|
{
|
|
|
struct memory_block *mem;
|
|
|
|
|
|
+ mutex_lock(&mem_sysfs_mutex);
|
|
|
mem = find_memory_block(section);
|
|
|
unregister_mem_sect_under_nodes(mem);
|
|
|
mem_remove_simple_file(mem, phys_index);
|
|
@@ -520,6 +526,7 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
|
|
mem_remove_simple_file(mem, removable);
|
|
|
unregister_memory(mem, section);
|
|
|
|
|
|
+ mutex_unlock(&mem_sysfs_mutex);
|
|
|
return 0;
|
|
|
}
|
|
|
|