Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 273581
b: refs/heads/master
c: da8ebe4
h: refs/heads/master
i:
  273579: fc08c67
v: v3
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Nov 4, 2011
1 parent 670c17a commit e5e619b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 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: 9d84c9e8b5b0386ee1d7769de0ff8a2546a2d054
refs/heads/master: da8ebe4e09ee5661f125a8401ade58baf226aa57
28 changes: 20 additions & 8 deletions trunk/drivers/hwmon/ibmaem.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,9 @@ struct aem_data {
int id;
struct aem_ipmi_data ipmi;

/* Function to update sensors */
/* Function and buffer to update sensors */
void (*update)(struct aem_data *data);
struct aem_read_sensor_resp *rs_resp;

/*
* AEM 1.x sensors:
Expand Down Expand Up @@ -355,13 +356,14 @@ static void aem_msg_handler(struct ipmi_recv_msg *msg, void *user_msg_data)

/* Sensor support functions */

/* Read a sensor value */
/* Read a sensor value; must be called with data->lock held */
static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
void *buf, size_t size)
{
int rs_size, res;
struct aem_read_sensor_req rs_req;
struct aem_read_sensor_resp *rs_resp;
/* Use preallocated rx buffer */
struct aem_read_sensor_resp *rs_resp = data->rs_resp;
struct aem_ipmi_data *ipmi = &data->ipmi;

/* AEM registers are 1, 2, 4 or 8 bytes */
Expand All @@ -387,10 +389,6 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
ipmi->tx_message.data_len = sizeof(rs_req);

rs_size = sizeof(*rs_resp) + size;
rs_resp = kzalloc(rs_size, GFP_KERNEL);
if (!rs_resp)
return -ENOMEM;

ipmi->rx_msg_data = rs_resp;
ipmi->rx_msg_len = rs_size;

Expand Down Expand Up @@ -433,7 +431,6 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
res = 0;

out:
kfree(rs_resp);
return res;
}

Expand Down Expand Up @@ -491,6 +488,7 @@ static void aem_delete(struct aem_data *data)
{
list_del(&data->list);
aem_remove_sensors(data);
kfree(data->rs_resp);
hwmon_device_unregister(data->hwmon_dev);
ipmi_destroy_user(data->ipmi.user);
platform_set_drvdata(data->pdev, NULL);
Expand Down Expand Up @@ -584,6 +582,11 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
}

data->update = update_aem1_sensors;
data->rs_resp = kzalloc(sizeof(*(data->rs_resp)) + 8, GFP_KERNEL);
if (!data->rs_resp) {
res = -ENOMEM;
goto alloc_resp_err;
}

/* Find sensors */
res = aem1_find_sensors(data);
Expand All @@ -599,6 +602,8 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
return 0;

sensor_err:
kfree(data->rs_resp);
alloc_resp_err:
hwmon_device_unregister(data->hwmon_dev);
hwmon_reg_err:
ipmi_destroy_user(data->ipmi.user);
Expand Down Expand Up @@ -717,6 +722,11 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
}

data->update = update_aem2_sensors;
data->rs_resp = kzalloc(sizeof(*(data->rs_resp)) + 8, GFP_KERNEL);
if (!data->rs_resp) {
res = -ENOMEM;
goto alloc_resp_err;
}

/* Find sensors */
res = aem2_find_sensors(data);
Expand All @@ -732,6 +742,8 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
return 0;

sensor_err:
kfree(data->rs_resp);
alloc_resp_err:
hwmon_device_unregister(data->hwmon_dev);
hwmon_reg_err:
ipmi_destroy_user(data->ipmi.user);
Expand Down

0 comments on commit e5e619b

Please sign in to comment.