All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: Jonathan Cameron <jic23@cam.ac.uk>,
	linux-iio@vger.kernel.org, drivers@analog.com
Subject: Re: [PATCH 03/10] staging:iio:ad7476: Avoid alloc/free for each sample in buffered mode
Date: Sat, 08 Sep 2012 10:40:56 +0100	[thread overview]
Message-ID: <504B12A8.6010909@kernel.org> (raw)
In-Reply-To: <504A22AD.2050403@metafoo.de>

On 09/07/2012 05:37 PM, Lars-Peter Clausen wrote:
> On 09/07/2012 02:44 PM, Lars-Peter Clausen wrote:
>> The ad7476 driver has only support for 1 channel ADCs. So the upper limit for
>> the buffer size is the size of one sample plus the size of the timestamp.
>> Preallocate a buffer large enough to hold this to avoid having to allocate and
>> free a new buffer for each sample being captured.
Sensible move...
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
>> ---
>>  drivers/staging/iio/adc/ad7476.h      |    5 ++++-
>>  drivers/staging/iio/adc/ad7476_ring.c |   13 +++----------
>>  2 files changed, 7 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/staging/iio/adc/ad7476.h b/drivers/staging/iio/adc/ad7476.h
>> index 6085fad..c4f1150 100644
>> --- a/drivers/staging/iio/adc/ad7476.h
>> +++ b/drivers/staging/iio/adc/ad7476.h
>> @@ -33,8 +33,11 @@ struct ad7476_state {
>>  	/*
>>  	 * DMA (thus cache coherency maintenance) requires the
>>  	 * transfer buffers to live in their own cache lines.
>> +	 * Make the buffer large enough for one 16 bit sample and one 64 bit
>> +	 * aligned 64 bit timestamp.
>>  	 */
>> -	unsigned char			data[2] ____cacheline_aligned;
>> +	unsigned char data[ALIGN(2, sizeof(s64)) + sizeof(s64)]
>> +			____cacheline_aligned;
>>  };
>>  
>>  enum ad7476_supported_device_ids {
>> diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
>> index 940681f..185cfde 100644
>> --- a/drivers/staging/iio/adc/ad7476_ring.c
>> +++ b/drivers/staging/iio/adc/ad7476_ring.c
>> @@ -26,14 +26,9 @@ static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
>>  	struct iio_dev *indio_dev = pf->indio_dev;
>>  	struct ad7476_state *st = iio_priv(indio_dev);
>>  	s64 time_ns;
>> -	__u8 *rxbuf;
>>  	int b_sent;
>>  
>> -	rxbuf = kzalloc(indio_dev->scan_bytes, GFP_KERNEL);
>> -	if (rxbuf == NULL)
>> -		goto done;
>> -
>> -	b_sent = spi_read(st->spi, rxbuf,
>> +	b_sent = spi_read(st->spi, st->data,
>>  			  st->chip_info->channel[0].scan_type.storagebits / 8);
> 
> I just noticed this can even more be simplified by using the prepared SPI
> message. Unfortunately this will require regeneration of a few more patches.
> I'll resend the whole series next week, after it had some exposure to review.

Hmm. Guess that would be a marginal improvement.  Actually from code
readability I'd be tempted to drop the prepared SPI message and
just do the spi_read as you have it here where that message is currently used.

Obviously it'll have some overhead though so up to you which way you go.
> 
>>  	if (b_sent < 0)
>>  		goto done;
>> @@ -41,13 +36,11 @@ static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
>>  	time_ns = iio_get_time_ns();
>>  
>>  	if (indio_dev->scan_timestamp)
>> -		memcpy(rxbuf + indio_dev->scan_bytes - sizeof(s64),
>> -			&time_ns, sizeof(time_ns));
>> +		((s64 *)st->data)[1] = time_ns;
>>  
>> -	iio_push_to_buffer(indio_dev->buffer, rxbuf);
>> +	iio_push_to_buffer(indio_dev->buffer, st->data);
>>  done:
>>  	iio_trigger_notify_done(indio_dev->trig);
>> -	kfree(rxbuf);
>>  
>>  	return IRQ_HANDLED;
>>  }
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  reply	other threads:[~2012-09-08  9:40 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-07 12:44 [PATCH 01/10] staging:iio:ad7476: Fix off by one error for channel shift Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 02/10] staging:iio:ad7476: Remove duplicated chip info entries Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 03/10] staging:iio:ad7476: Avoid alloc/free for each sample in buffered mode Lars-Peter Clausen
2012-09-07 16:37   ` Lars-Peter Clausen
2012-09-08  9:40     ` Jonathan Cameron [this message]
2012-09-08 17:20       ` Lars-Peter Clausen
2012-09-08 19:50         ` Jonathan Cameron
2012-09-07 12:44 ` [PATCH 04/10] staging:iio:ad7476: Rework reference voltage handling Lars-Peter Clausen
2012-09-07 14:31   ` [PATCH v2 " Lars-Peter Clausen
2012-09-08  9:45   ` [PATCH " Jonathan Cameron
2012-09-07 12:44 ` [PATCH 05/10] staging:iio:ad7476: Squash driver into a single file Lars-Peter Clausen
2012-09-08  9:47   ` Jonathan Cameron
2012-09-08  9:50   ` Jonathan Cameron
2012-09-07 12:44 ` [PATCH 06/10] staging:iio:ad7476: Use be16_to_cpup instead of open-coding it Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 07/10] iio: Move ad7476 driver out of staging Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 08/10] iio:ad7476: Add ad7910/ad7920 device table entries Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 09/10] iio:ad7476: Add ad7940 support Lars-Peter Clausen
2012-09-07 12:44 ` [PATCH 10/10] iio:ad7476: Add support for ad7274/ad7275/ad7276/ad7277/ad7278 Lars-Peter Clausen
2012-09-08  9:57   ` Jonathan Cameron
2012-09-08  9:36 ` [PATCH 01/10] staging:iio:ad7476: Fix off by one error for channel shift Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=504B12A8.6010909@kernel.org \
    --to=jic23@kernel.org \
    --cc=drivers@analog.com \
    --cc=jic23@cam.ac.uk \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.