All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Bird <tim.bird@am.sony.com>
To: Dima Zavin <dima@android.com>
Cc: Greg KH <gregkh@linuxfoundation.org>,
	linux-embedded <linux-embedded@vger.kernel.org>,
	linux kernel <linux-kernel@vger.kernel.org>,
	Brian Swetland <swetland@google.com>,
	Andrew Morton <akpm@osdl.org>
Subject: Re: [PATCH 2/5 v2] logger: simplify and optimize get_entry_len
Date: Wed, 8 Feb 2012 21:58:28 -0800	[thread overview]
Message-ID: <4F336084.5050704@am.sony.com> (raw)
In-Reply-To: <CAPz4a6CFd_L=hDw9uG56ZnhiqqnsPCLTR_3G=Zo5KDnTP=MwiA@mail.gmail.com>

On 2/8/2012 9:15 PM, Dima Zavin wrote:
> On Wed, Feb 8, 2012 at 10:37 AM, Tim Bird<tim.bird@am.sony.com>  wrote:
>> Make this code slightly easier to read, and eliminate calls
>> to sub-routines.  Some of these were previously optimized away
>> by the compiler, but one memcpy was not.
>>
>> In my testing, this makes the code about 20% smaller, and
>> has no sub-routine calls and no branches (on ARM).
>>
>> v2 of this patch is, IMHO, easier to read than v1. Compared to
>> that patch it uses __u8 instead of unsigned char, for
>> consistency with the __u16 val data type, simplifies the
>> conditional expression, adds a another comment, and
>> moves a common statement out of the if.
>>
>> Signed-off-by: Tim Bird<tim.bird@am.sony.com>
>> ---
>>   drivers/staging/android/logger.c |   20 ++++++++++++--------
>>   1 files changed, 12 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/staging/android/logger.c b/drivers/staging/android/logger.c
>> index 92456d7..3475cb7 100644
>> --- a/drivers/staging/android/logger.c
>> +++ b/drivers/staging/android/logger.c
>> @@ -93,20 +93,24 @@ static inline struct logger_log *file_get_log(struct file *file)
>>   * get_entry_len - Grabs the length of the payload of the next entry starting
>>   * from 'off'.
>>   *
>> + * An entry length is 2 bytes (16 bits) in host endian order.
>> + * In the log, the length does not include the size of the log entry structure.
>> + * This function returns the size including the log entry structure.
>> + *
>>   * Caller needs to hold log->mutex.
>>   */
>>   static __u32 get_entry_len(struct logger_log *log, size_t off)
>>   {
>>         __u16 val;
> Could using a union here make things look a little cleaner in the meat
> of the function? Something like
>
> union {
>      __u16 s;
>      __u8 b[2];
> } val;
>
That's a good idea.  I was looking for a way to use a byte array that
wouldn't get misaligned if the function declaration changed.  I'll
test this out and see what it looks like.
>> -       switch (log->size - off) {
>> -       case 1:
>> -               memcpy(&val, log->buffer + off, 1);
>> -               memcpy(((char *)&val) + 1, log->buffer, 1);
>> -               break;
>> -       default:
>> -               memcpy(&val, log->buffer + off, 2);
>> -       }
>> +       /* copy 2 bytes from buffer, in memcpy order, */
>> +       /* handling possible wrap at end of buffer */
>> +
>> +       ((__u8 *)&val)[0] = log->buffer[off];
>> +       if (likely(off+1<  log->size))
>> +               ((__u8 *)&val)[1] = log->buffer[off+1];
> spaces around the + in 'off+1' in the above two lines.
Yeah.  I keep omitting spaces.  I'll fix this, and the ones
mentioned on patch 1/5.
  -- Tim

  reply	other threads:[~2012-02-09  5:58 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-08  2:21 [PATCH 1/5] logger: Change logger_offset() from macro to function Tim Bird
2012-02-08  2:28 ` [PATCH 2/5] logger: simplify and optimize get_entry_len Tim Bird
2012-02-08 18:37   ` [PATCH 2/5 v2] " Tim Bird
2012-02-09  5:15     ` Dima Zavin
2012-02-09  5:58       ` Tim Bird [this message]
2012-02-08  2:30 ` [PATCH 3/5] logger: reorder prepare_to_wait and mutex_lock Tim Bird
2012-02-09  5:56   ` Dima Zavin
2012-02-08  2:32 ` [PATCH 4/5] logger: clarify code in clock_interval Tim Bird
2012-02-09  6:09   ` Dima Zavin
2012-02-08  2:34 ` [PATCH 5/5] logger: clarify non-update of w_off in do_write_log_from_user Tim Bird
2012-02-09  6:10   ` Dima Zavin
2012-02-08  3:22 ` [PATCH 1/5] logger: Change logger_offset() from macro to function Frank Rowand
2012-02-09  4:54 ` Dima Zavin

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=4F336084.5050704@am.sony.com \
    --to=tim.bird@am.sony.com \
    --cc=akpm@osdl.org \
    --cc=dima@android.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-embedded@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=swetland@google.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.