Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 272175
b: refs/heads/master
c: 6580704
h: refs/heads/master
i:
  272173: fe8913a
  272171: ffca8b8
  272167: 076aa0a
  272159: 0cc1f87
v: v3
  • Loading branch information
Jonathan Cameron authored and Linus Torvalds committed Nov 1, 2011
1 parent 04be738 commit ca209cd
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 40 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: 4ca5f468cc2a0be1cba585f335dcbe56b40944f2
refs/heads/master: 65807044760e03ebf766973c5e94a2ea1d57937b
47 changes: 8 additions & 39 deletions trunk/drivers/hwmon/ibmaem.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@
#define AEM_MIN_POWER_INTERVAL 200
#define UJ_PER_MJ 1000L

static DEFINE_IDR(aem_idr);
static DEFINE_SPINLOCK(aem_idr_lock);
static DEFINE_IDA(aem_ida);

static struct platform_driver aem_driver = {
.driver = {
Expand Down Expand Up @@ -356,38 +355,6 @@ static void aem_msg_handler(struct ipmi_recv_msg *msg, void *user_msg_data)
complete(&data->read_complete);
}

/* ID functions */

/* Obtain an id */
static int aem_idr_get(int *id)
{
int i, err;

again:
if (unlikely(!idr_pre_get(&aem_idr, GFP_KERNEL)))
return -ENOMEM;

spin_lock(&aem_idr_lock);
err = idr_get_new(&aem_idr, NULL, &i);
spin_unlock(&aem_idr_lock);

if (unlikely(err == -EAGAIN))
goto again;
else if (unlikely(err))
return err;

*id = i & MAX_ID_MASK;
return 0;
}

/* Release an object ID */
static void aem_idr_put(int id)
{
spin_lock(&aem_idr_lock);
idr_remove(&aem_idr, id);
spin_unlock(&aem_idr_lock);
}

/* Sensor support functions */

/* Read a sensor value */
Expand Down Expand Up @@ -530,7 +497,7 @@ static void aem_delete(struct aem_data *data)
ipmi_destroy_user(data->ipmi.user);
platform_set_drvdata(data->pdev, NULL);
platform_device_unregister(data->pdev);
aem_idr_put(data->id);
ida_simple_remove(&aem_ida, data->id);
kfree(data);
}

Expand Down Expand Up @@ -587,7 +554,8 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;

/* Create sub-device for this fw instance */
if (aem_idr_get(&data->id))
data->id = ida_simple_get(&aem_ida, 0, 0, GFP_KERNEL);
if (data->id < 0)
goto id_err;

data->pdev = platform_device_alloc(DRVNAME, data->id);
Expand Down Expand Up @@ -638,7 +606,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
platform_set_drvdata(data->pdev, NULL);
platform_device_unregister(data->pdev);
dev_err:
aem_idr_put(data->id);
ida_simple_remove(&aem_ida, data->id);
id_err:
kfree(data);

Expand Down Expand Up @@ -720,7 +688,8 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
data->power_period[i] = AEM_DEFAULT_POWER_INTERVAL;

/* Create sub-device for this fw instance */
if (aem_idr_get(&data->id))
data->id = ida_simple_get(&aem_ida, 0, 0, GFP_KERNEL);
if (data->id < 0)
goto id_err;

data->pdev = platform_device_alloc(DRVNAME, data->id);
Expand Down Expand Up @@ -771,7 +740,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
platform_set_drvdata(data->pdev, NULL);
platform_device_unregister(data->pdev);
dev_err:
aem_idr_put(data->id);
ida_simple_remove(&aem_ida, data->id);
id_err:
kfree(data);

Expand Down

0 comments on commit ca209cd

Please sign in to comment.