Skip to content

Commit

Permalink
hwmon: (max1111) Avoid extra memory allocations
Browse files Browse the repository at this point in the history
We can allocate the tx and rx buffers as part of our data structure.
Doing so is faster and spares memory.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Tested-by: Stanislav Brabec <utx@penguin.cz>
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Jul 25, 2011
1 parent 3d30f9e commit d737c09
Showing 1 changed file with 6 additions and 21 deletions.
27 changes: 6 additions & 21 deletions drivers/hwmon/max1111.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ struct max1111_data {
struct device *hwmon_dev;
struct spi_message msg;
struct spi_transfer xfer[2];
uint8_t *tx_buf;
uint8_t *rx_buf;
uint8_t tx_buf[MAX1111_TX_BUF_SIZE];
uint8_t rx_buf[MAX1111_RX_BUF_SIZE];
struct mutex drvdata_lock;
/* protect msg, xfer and buffers from multiple access */
};
Expand Down Expand Up @@ -131,33 +131,23 @@ static const struct attribute_group max1111_attr_group = {
.attrs = max1111_attributes,
};

static int setup_transfer(struct max1111_data *data)
static int __devinit setup_transfer(struct max1111_data *data)
{
struct spi_message *m;
struct spi_transfer *x;

data->tx_buf = kmalloc(MAX1111_TX_BUF_SIZE, GFP_KERNEL);
if (!data->tx_buf)
return -ENOMEM;

data->rx_buf = kmalloc(MAX1111_RX_BUF_SIZE, GFP_KERNEL);
if (!data->rx_buf) {
kfree(data->tx_buf);
return -ENOMEM;
}

m = &data->msg;
x = &data->xfer[0];

spi_message_init(m);

x->tx_buf = &data->tx_buf[0];
x->len = 1;
x->len = MAX1111_TX_BUF_SIZE;
spi_message_add_tail(x, m);

x++;
x->rx_buf = &data->rx_buf[0];
x->len = 2;
x->len = MAX1111_RX_BUF_SIZE;
spi_message_add_tail(x, m);

return 0;
Expand Down Expand Up @@ -192,7 +182,7 @@ static int __devinit max1111_probe(struct spi_device *spi)
err = sysfs_create_group(&spi->dev.kobj, &max1111_attr_group);
if (err) {
dev_err(&spi->dev, "failed to create attribute group\n");
goto err_free_all;
goto err_free_data;
}

data->hwmon_dev = hwmon_device_register(&spi->dev);
Expand All @@ -209,9 +199,6 @@ static int __devinit max1111_probe(struct spi_device *spi)

err_remove:
sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);
err_free_all:
kfree(data->rx_buf);
kfree(data->tx_buf);
err_free_data:
kfree(data);
return err;
Expand All @@ -224,8 +211,6 @@ static int __devexit max1111_remove(struct spi_device *spi)
hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);
mutex_destroy(&data->drvdata_lock);
kfree(data->rx_buf);
kfree(data->tx_buf);
kfree(data);
return 0;
}
Expand Down

0 comments on commit d737c09

Please sign in to comment.