static int memory_block_change_state(struct memory_block *mem, unsigned long to_state, unsigned long from_state_req) { int ret = 0; mutex_lock(&mem->state_mutex); if (mem->state != from_state_req) { ret = -EINVAL; goto out; } if (to_state == MEM_OFFLINE) mem->state = MEM_GOING_OFFLINE; ret = memory_block_action(mem->start_section_nr, to_state); if (ret) mem->state = from_state_req; else mem->state = to_state; out: mutex_unlock(&mem->state_mutex); return ret; }
static int memory_block_change_state(struct memory_block *mem, unsigned long to_state, unsigned long from_state_req) { int ret = 0; if (mem->state != from_state_req) return -EINVAL; if (to_state == MEM_OFFLINE) mem->state = MEM_GOING_OFFLINE; ret = memory_block_action(mem->start_section_nr, to_state, mem->online_type); mem->state = ret ? from_state_req : to_state; return ret; }
static int memory_block_change_state(struct memory_block *mem, unsigned long to_state, unsigned long from_state_req) { int ret = 0; mutex_lock(&mem->state_mutex); if (mem->state != from_state_req) { ret = -EINVAL; goto out; } ret = memory_block_action(mem, to_state); if (!ret) mem->state = to_state; out: mutex_unlock(&mem->state_mutex); return ret; }
static int memory_block_change_state(struct memory_block *mem, unsigned long to_state, unsigned long from_state_req) { int ret = 0; mutex_lock(&mem->state_mutex); if (mem->state != from_state_req) { ret = -EINVAL; goto out; } if (to_state == MEM_OFFLINE) mem->state = MEM_GOING_OFFLINE; ret = memory_block_action(mem->start_section_nr, to_state); if (ret) { mem->state = from_state_req; goto out; } mem->state = to_state; switch (mem->state) { case MEM_OFFLINE: kobject_uevent(&mem->dev.kobj, KOBJ_OFFLINE); break; case MEM_ONLINE: kobject_uevent(&mem->dev.kobj, KOBJ_ONLINE); break; default: break; } out: mutex_unlock(&mem->state_mutex); return ret; }