diff options
Diffstat (limited to 'drivers/base/memory.c')
-rw-r--r-- | drivers/base/memory.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/base/memory.c b/drivers/base/memory.c index f17e3ea041c0..ed5de58c340f 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c | |||
@@ -295,11 +295,22 @@ static int memory_block_change_state(struct memory_block *mem, | |||
295 | 295 | ||
296 | ret = memory_block_action(mem->start_section_nr, to_state); | 296 | ret = memory_block_action(mem->start_section_nr, to_state); |
297 | 297 | ||
298 | if (ret) | 298 | if (ret) { |
299 | mem->state = from_state_req; | 299 | mem->state = from_state_req; |
300 | else | 300 | goto out; |
301 | mem->state = to_state; | 301 | } |
302 | 302 | ||
303 | mem->state = to_state; | ||
304 | switch (mem->state) { | ||
305 | case MEM_OFFLINE: | ||
306 | kobject_uevent(&mem->dev.kobj, KOBJ_OFFLINE); | ||
307 | break; | ||
308 | case MEM_ONLINE: | ||
309 | kobject_uevent(&mem->dev.kobj, KOBJ_ONLINE); | ||
310 | break; | ||
311 | default: | ||
312 | break; | ||
313 | } | ||
303 | out: | 314 | out: |
304 | mutex_unlock(&mem->state_mutex); | 315 | mutex_unlock(&mem->state_mutex); |
305 | return ret; | 316 | return ret; |