SUPERH platform development
 help / color / mirror / Atom feed
From: Lasse Collin <lasse.collin@tukaani.org>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] lib/decompress_unxz.c: removing all memory helper functions
Date: Fri, 25 May 2012 19:35:37 +0000	[thread overview]
Message-ID: <20120525223537.3f537e26@tukaani.org> (raw)
In-Reply-To: <4FBFB3F3.1000606@hp.com>

On 2012-05-25 Thavatchai Makphaibulcboke wrote:
> Yes, I agree that having a shared file would be the best solution.
> Unfortunately with the current preboot architecture and infra
> structure, it would not be a trivial task.

I agree.

> I believe defining these functions for each arch would give a better
> code modularity compared to including them in the decompressor file.

I guess so. decompress_unxz.c certainly isn't the right place for those
functions. The arch-specific files also allow arch-specific
optimizations if someone finds them useful.

> > These already have memcpy. It can save a few bytes if one reused
> > memmove as memcpy when using XZ compression. I got a difference of
> > 48 bytes on x86_64.
> 
> We could do that.  But according to the comment in the original
> implementation, there seems to be a concern regarding its performance
> speed. If you believe all archs' memcpy would give comparable
> performance to the memmove. then I could do that.

In a generic case, you can replace memcpy with memmove but not vice
versa. memmove is generally slower than memcpy because memmove has to
support overlapping buffers.

I guess the current comment in decompress_unxz.c could be clearer. In
short, memmove and memcpy speeds don't matter much *for kernel
decompression* which is done in the single-call mode of the XZ
decompressor on archs that currently support XZ. memcpy speed could
matter if the kernel image contained a large amount of incompressible
data, but even if it did, it shouldn't matter much.

> > Adding memmove to string.c on x86 means that memmove is included in
> > the kernel image even when memmove isn't needed. With gzip
> > compression I got 128 bytes bigger image on x86_64 after adding the
> > unneeded memmove to string.c.
> > 
> > I don't know if those size increases matter in practice.
> 
> For x86, I think I could move memmove to the misc.c file and put an
> ifdef XZ_PREBOOT around it.  This way it should not impact other
> decompressor.  I could also do this for s390 and sh.  But if we decide
> to replace memmove with memcpy this would be necessart.

Or you can use #ifdef CONFIG_KERNEL_XZ in string.c. XZ_PREBOOT is kind
of internal define to the XZ code so it's not good to rely on it.

If you add a static memmove function to misc.c, compiler can omit it
when memmove isn't used. Since misc.h pulls <linux/string.h> via
<linux/elf.h> and so there's a prototype of extern memmove already, one
needs to call the static function e.g. my_memmove and #define memmove
my_memmove. This way you don't need to #ifdef it to any particular
decompressors.

If memmove is used to implement memcpy, you probably cannot avoid
decompressor-specific #ifdefs unless you use memmove for all
decompressors. The question is how clean code you want vs. how much you
care about saving 30-150 bytes in bzImage size.

-- 
Lasse Collin  |  IRC: Larhzu @ IRCnet & Freenode

  parent reply	other threads:[~2012-05-25 19:35 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-24 16:03 [PATCH] lib/decompress_unxz.c: removing all memory helper functions T Makphaibulchoke
2012-05-24 17:26 ` Joe Perches
2012-05-24 17:29   ` H. Peter Anvin
2012-05-24 17:40     ` Joe Perches
2012-05-24 17:41       ` H. Peter Anvin
2012-05-24 17:50         ` Joe Perches
2012-05-24 17:56           ` H. Peter Anvin
2012-05-25  8:34 ` Lasse Collin
2012-05-25 16:31   ` Thavatchai Makphaibulcboke
2012-05-25 17:05     ` Thavatchai Makphaibulcboke
2012-05-25 17:13       ` H. Peter Anvin
2012-05-25 19:35     ` Lasse Collin [this message]
2012-05-28  7:03 ` Jean-Christophe PLAGNIOL-VILLARD
2012-06-01  2:48   ` Thavatchai Makphaibulcboke
2012-06-01  2:54     ` Joe Perches
2012-06-01  3:38     ` H. Peter Anvin
2012-06-01 18:37       ` Thavatchai Makphaibulcboke
2012-06-01 18:46         ` H. Peter Anvin
2012-06-01 18:58           ` Thavatchai Makphaibulcboke

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=20120525223537.3f537e26@tukaani.org \
    --to=lasse.collin@tukaani.org \
    --cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox