All of lore.kernel.org
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Arnd Bergmann <arnd@kernel.org>
Cc: Linux-Arch <linux-arch@vger.kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Vineet Gupta <vgupta@synopsys.com>, Arnd Bergmann <arnd@arndb.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [RFC 12/12] asm-generic: simplify asm/unaligned.h
Date: Mon, 10 May 2021 08:39:35 +0200	[thread overview]
Message-ID: <CAMuHMdUuFPy8F8xwuZys7zdH_nRGQcrjgTSC0UTdcGMv+wEwRg@mail.gmail.com> (raw)
In-Reply-To: <20210507220813.365382-13-arnd@kernel.org>

Hi Arnd,

On Sat, May 8, 2021 at 12:12 AM Arnd Bergmann <arnd@kernel.org> wrote:
> The get_unaligned()/put_unaligned() implementations are much more complex
> than necessary, now that all architectures use the same code.
>
> Move everything into one file and use a much more compact way to express
> the same logic.
>
> I've compared the binary output using gcc-11 across defconfig builds for
> all architectures and found this patch to make no difference, except for
> a single function on powerpc that needs two additional register moves
> because of random differences in register allocation.
>
> There are a handful of callers of the low-level __get_unaligned_cpu32,
> so leave that in place for the time being even though the common code
> no longer uses it.
>
> This adds a warning for any caller of get_unaligned()/put_unaligned()
> that passes in a single-byte pointer, but I've sent patches for all
> instances that show up in x86 and randconfig builds. It would be nice
> to change the arguments of the endian-specific accessors to take the
> matching __be16/__be32/__be64/__le16/__le32/__le64 arguments instead of
> a void pointer, but that requires more changes to the rest of the kernel.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Thanks for your patch!

> @@ -6,20 +6,132 @@
>   * This is the most generic implementation of unaligned accesses
>   * and should work almost anywhere.
>   */
> +#include <linux/unaligned/packed_struct.h>
>  #include <asm/byteorder.h>
>
> -#if defined(__LITTLE_ENDIAN)
> -# include <linux/unaligned/le_struct.h>
> -# include <linux/unaligned/generic.h>
> -# define get_unaligned __get_unaligned_le
> -# define put_unaligned __put_unaligned_le
> -#elif defined(__BIG_ENDIAN)
> -# include <linux/unaligned/be_struct.h>
> -# include <linux/unaligned/generic.h>
> -# define get_unaligned __get_unaligned_be
> -# define put_unaligned __put_unaligned_be
> -#else
> -# error need to define endianess
> -#endif
> +#define __get_unaligned_t(type, ptr) ({                                                \
> +       const struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr);      \
> +       __pptr->x;                                                              \

Space before tab (cfr. checkpatch).

> +})
> +
> +#define get_unaligned(ptr) ({                                                  \
> +       __auto_type __ptr = (ptr);                                              \
> +       __get_unaligned_t(typeof(*__ptr), __ptr);                               \
> +})
> +
> +#define __put_unaligned_t(type, val, ptr) ({                                   \
> +       struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr);            \
> +       __pptr->x = (val);                                                      \

Likewise

> +})
>
Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

  parent reply	other threads:[~2021-05-10  6:39 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-07 22:07 [RFC 0/12] Unify asm/unaligned.h around struct helper Arnd Bergmann
2021-05-07 22:07 ` [OpenRISC] " Arnd Bergmann
2021-05-07 22:07 ` Arnd Bergmann
2021-05-07 22:07 ` Arnd Bergmann
2021-05-07 22:07 ` [RFC 01/12] asm-generic: use asm-generic/unaligned.h for most architectures Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-07 23:02   ` Thomas Gleixner
2021-05-07 23:02     ` Thomas Gleixner
2021-05-07 23:02     ` Thomas Gleixner
2021-05-10 10:16   ` Geert Uytterhoeven
2021-05-10 10:16     ` Geert Uytterhoeven
2021-05-10 10:16     ` Geert Uytterhoeven
2021-05-10 13:12     ` Arnd Bergmann
2021-05-10 13:12       ` Arnd Bergmann
2021-05-10 13:12       ` Arnd Bergmann
2021-05-07 22:07 ` [RFC 02/12] openrisc: always use unaligned-struct header Arnd Bergmann
2021-05-07 22:07   ` [OpenRISC] " Arnd Bergmann
2021-05-07 23:02   ` Stafford Horne
2021-05-07 23:02     ` [OpenRISC] " Stafford Horne
2021-05-08 11:42   ` David Laight
2021-05-08 11:42     ` [OpenRISC] " David Laight
2021-05-07 22:07 ` [RFC 03/12] sh: remove unaligned access for sh4a Arnd Bergmann
2021-05-10 21:11   ` Rob Landley
2021-05-07 22:07 ` [RFC 04/12] m68k: select CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS Arnd Bergmann
2021-05-10 10:18   ` Geert Uytterhoeven
2021-05-07 22:07 ` [RFC 05/12] powerpc: use linux/unaligned/le_struct.h on LE power7 Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-07 22:07 ` [RFC 06/12] asm-generic: unaligned: remove byteshift helpers Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-08 11:38   ` Arnd Bergmann
2021-05-08 11:38     ` Arnd Bergmann
2021-05-07 22:07 ` [RFC 07/12] asm-generic: unaligned always use struct helpers Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-07 22:07 ` [RFC 08/12] partitions: msdos: fix one-byte get_unaligned() Arnd Bergmann
2021-05-07 22:07 ` [RFC 09/12] apparmor: use get_unaligned() only for multi-byte words Arnd Bergmann
2021-05-10  8:17   ` John Johansen
2021-05-07 22:07 ` [RFC 10/12] mwifiex: re-fix for unaligned accesses Arnd Bergmann
2021-05-07 22:07 ` [RFC 11/12] netpoll: avoid put_unaligned() on single character Arnd Bergmann
2021-05-07 22:07 ` [RFC 12/12] asm-generic: simplify asm/unaligned.h Arnd Bergmann
2021-05-07 23:54   ` Linus Torvalds
2021-05-08  9:28     ` Arnd Bergmann
2021-05-08 15:23       ` Linus Torvalds
2021-05-08 11:03   ` David Laight
2021-05-08 14:18     ` David Laight
2021-05-10  6:39   ` Geert Uytterhoeven [this message]
2021-05-07 22:07 ` [RFC 0/12] Unify asm/unaligned.h around struct helper Arnd Bergmann
2021-05-07 22:07   ` [OpenRISC] " Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann
2021-05-07 22:07   ` Arnd Bergmann

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=CAMuHMdUuFPy8F8xwuZys7zdH_nRGQcrjgTSC0UTdcGMv+wEwRg@mail.gmail.com \
    --to=geert@linux-m68k.org \
    --cc=arnd@arndb.de \
    --cc=arnd@kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=vgupta@synopsys.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.