All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Zapolskiy <vz@mleia.com>
To: rtc-linux@googlegroups.com,
	Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [rtc-linux] Re: [PATCH 05/11] rtc: ds1511: clean up ds1511_nvram_read()/ds1511_nvram_write()
Date: Wed, 05 Aug 2015 19:22:04 +0300	[thread overview]
Message-ID: <55C2382C.7010606@mleia.com> (raw)
In-Reply-To: <20150805082402.GA3486@piout.net>

Hi Alexandre,

On 05.08.2015 11:24, Alexandre Belloni wrote:
> Hi,
> 
> On 27/07/2015 at 00:48:30 +0300, Vladimir Zapolskiy wrote :
>> The change removes redundant sysfs binary file boundary checks, since
>> this task is already done on caller side in fs/sysfs/file.c
>>
>> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
>> ---
>>  drivers/rtc/rtc-ds1511.c | 38 ++++++++------------------------------
>>  1 file changed, 8 insertions(+), 30 deletions(-)
>>
>> diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c
>> index 7415c2b..2213fab 100644
>> --- a/drivers/rtc/rtc-ds1511.c
>> +++ b/drivers/rtc/rtc-ds1511.c
>> @@ -407,25 +407,14 @@ ds1511_nvram_read(struct file *filp, struct kobject *kobj,
>>  {
>>  	ssize_t count;
>>  
>> -	/*
>> -	 * if count is more than one, turn on "burst" mode
>> -	 * turn it off when you're done
>> -	 */
>> -	if (size > 1)
>> -		rtc_write((rtc_read(RTC_CMD) | DS1511_BME), RTC_CMD);
>> -
>> -	if (pos > DS1511_RAM_MAX)
>> -		pos = DS1511_RAM_MAX;
>> -
>> -	if (size + pos > DS1511_RAM_MAX + 1)
>> -		size = DS1511_RAM_MAX - pos + 1;
>> +	/* turn on "burst" mode, turn it off when you're done */
>> +	rtc_write((rtc_read(RTC_CMD) | DS1511_BME), RTC_CMD);
> 
> That one feels wrong, you are now unconditionally using burst mode, this
> was not the case before. If this has been tested and works, I'd ay that
> this at least require a mention in the commit message.
> 

I believe this is a correct fix, burst mode should be always enabled,
probably it might be better even to move its configuration to probe().

>From the spec:

  The burst-mode enable bit allows the extended user RAM address
  registers to automatically increment for consecutive reads and writes.

  When BME is set to 1, the automatic incrementing is enabled; when BME
  is set to 0, the automatic incrementing is disabled.

Prior to the change the sequence of

  read(fd, buf, 1);
  read(fd, buf, 1);
  read(fd, buf, 1);
  ...

won't sequentially read NVRAM byte by byte as it should be IMO, at least
it contradicts to common and expected usage of read().

If there is no objections, I'll keep this part of the proposed change
unmodified, but thanks for attracting my attention to the potential
problem, I've managed to notice that DS1511_RAM_MAX value is invalid, it
must be 256 --- the current value of 0xff *and* "no-burst" mode for
1-byte reading probably is done as a clumsy attempt to avoid overflow.

I'll resend the change with DS1511_RAM_MAX update and improved commit
message.

With best wishes,
Vladimir

>>  
>>  	rtc_write(pos, DS1511_RAMADDR_LSB);
>> -	for (count = 0; size > 0; count++, size--)
>> +	for (count = 0; count < size; count++)
>>  		*buf++ = rtc_read(DS1511_RAMDATA);
>>  
>> -	if (count > 1)
>> -		rtc_write((rtc_read(RTC_CMD) & ~DS1511_BME), RTC_CMD);
>> +	rtc_write((rtc_read(RTC_CMD) & ~DS1511_BME), RTC_CMD);
>>  
>>  	return count;
>>  }
>> @@ -437,25 +426,14 @@ ds1511_nvram_write(struct file *filp, struct kobject *kobj,
>>  {
>>  	ssize_t count;
>>  
>> -	/*
>> -	 * if count is more than one, turn on "burst" mode
>> -	 * turn it off when you're done
>> -	 */
>> -	if (size > 1)
>> -		rtc_write((rtc_read(RTC_CMD) | DS1511_BME), RTC_CMD);
>> -
>> -	if (pos > DS1511_RAM_MAX)
>> -		pos = DS1511_RAM_MAX;
>> -
>> -	if (size + pos > DS1511_RAM_MAX + 1)
>> -		size = DS1511_RAM_MAX - pos + 1;
>> +	/* turn on "burst" mode, turn it off when you're done */
>> +	rtc_write((rtc_read(RTC_CMD) | DS1511_BME), RTC_CMD);
>>  
>>  	rtc_write(pos, DS1511_RAMADDR_LSB);
>> -	for (count = 0; size > 0; count++, size--)
>> +	for (count = 0; count < size; count++)
>>  		rtc_write(*buf++, DS1511_RAMDATA);
>>  
>> -	if (count > 1)
>> -		rtc_write((rtc_read(RTC_CMD) & ~DS1511_BME), RTC_CMD);
>> +	rtc_write((rtc_read(RTC_CMD) & ~DS1511_BME), RTC_CMD);
>>  
>>  	return count;
>>  }
>> -- 
>> 2.1.4
>>
> 

-- 
-- 
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
--- 
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  reply	other threads:[~2015-08-05 16:22 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-26 21:48 [rtc-linux] [PATCH 00/11] rtc: clean up bin attribute read/write functions Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 01/11] rtc: cmos: clean up cmos_nvram_read()/cmos_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 02/11] rtc: ds1305: clean up ds1305_nvram_read()/ds1305_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 03/11] rtc: ds1307: clean up ds1307_nvram_read()/ds1307_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 04/11] rtc: ds1343: clean up ds1343_nvram_read()/ds1343_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 05/11] rtc: ds1511: clean up ds1511_nvram_read()/ds1511_nvram_write() Vladimir Zapolskiy
2015-08-05  8:24   ` [rtc-linux] " Alexandre Belloni
2015-08-05 16:22     ` Vladimir Zapolskiy [this message]
2015-08-05 18:12   ` [rtc-linux] [PATCH v2 " Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 06/11] rtc: ds1553: clean up ds1553_nvram_read()/ds1553_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 07/11] rtc: ds1742: clean up ds1742_nvram_read()/ds1742_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 08/11] rtc: m48t59: clean up m48t59_nvram_read()/m48t59_nvram_write() Vladimir Zapolskiy
2015-08-05  8:27   ` [rtc-linux] " Alexandre Belloni
2015-08-05 16:04     ` Vladimir Zapolskiy
2015-08-05 18:13   ` [rtc-linux] [PATCH v2 " Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 09/11] rtc: rp5c01: clean up rp5c01_nvram_read()/rp5c01_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 10/11] rtc: stk17ta8: clean up stk17ta8_nvram_read()/stk17ta8_nvram_write() Vladimir Zapolskiy
2015-07-26 21:48 ` [rtc-linux] [PATCH 11/11] rtc: tx4939: clean up tx4939_rtc_nvram_read()/tx4939_rtc_nvram_write() Vladimir Zapolskiy
2015-08-14 22:21 ` [rtc-linux] [PATCH 00/11] rtc: clean up bin attribute read/write functions Alexandre Belloni

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=55C2382C.7010606@mleia.com \
    --to=vz@mleia.com \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=rtc-linux@googlegroups.com \
    /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.