From: Kim Phillips <kim.phillips@freescale.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: u-boot@lists.denx.de, jdl@jdl.com, devicetree-discuss@lists.ozlabs.org
Subject: Re: [PATCH v3 3/4] dtc/libfdt: introduce fdt types for annotation by endian checkers
Date: Wed, 14 Nov 2012 23:12:04 -0600 [thread overview]
Message-ID: <20121114231204.8f19082c7acc1cea2a2d794f@freescale.com> (raw)
In-Reply-To: <20121115044340.GI32290@truffula.fritz.box>
On Thu, 15 Nov 2012 15:43:40 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:
> On Wed, Nov 14, 2012 at 06:59:58PM -0600, Kim Phillips wrote:
> > +#define EXTRACT_BYTE(x, n) ((unsigned long long)((uint8_t *)&x)[n])
> > +#define __SWAB16(x) ((EXTRACT_BYTE(x, 0) << 8) | EXTRACT_BYTE(x, 1))
> > +#define __SWAB32(x) ((EXTRACT_BYTE(x, 0) << 24) | (EXTRACT_BYTE(x, 1) << 16) | \
> > + (EXTRACT_BYTE(x, 2) << 8) | EXTRACT_BYTE(x, 3))
> > +#define __SWAB64(x) ((EXTRACT_BYTE(x, 0) << 56) | (EXTRACT_BYTE(x, 1) << 48) | \
> > + (EXTRACT_BYTE(x, 2) << 40) | (EXTRACT_BYTE(x, 3) << 32) | \
> > + (EXTRACT_BYTE(x, 4) << 24) | (EXTRACT_BYTE(x, 5) << 16) | \
> > + (EXTRACT_BYTE(x, 6) << 8) | EXTRACT_BYTE(x, 7))
>
> This is not right, or at least very misleading. "swab" usually refers
> to an unconditional byteswap. But the macros above are nops on a
> big-endian machine.
but they don't get called on a big endian system. This is the name
linux uses. If you want them renamed, please suggest names - I
can't read your mind.
> > -static inline uint32_t fdt32_to_cpu(uint32_t x)
> > -{
> > - return (EXTRACT_BYTE(0) << 24) | (EXTRACT_BYTE(1) << 16) | (EXTRACT_BYTE(2) << 8) | EXTRACT_BYTE(3);
> > +/*
> > + * determine host endianness:
> > + * *__first_byte is 0x11 on big endian systems
> > + * *__first_byte is 0x44 on little endian systems
> > + */
> > +static const uint32_t __native = 0x11223344u;
> > +static const uint8_t *__first_byte = (const uint8_t *)&__native;
> > +
> > +#define DEF_FDT_TO_CPU(bits) \
> > +static inline uint##bits##_t fdt##bits##_to_cpu(fdt##bits##_t x) \
> > +{ \
> > + if (*__first_byte == 0x11) \
> > + return (__force uint##bits##_t)x; \
> > + else \
> > + return (__force uint##bits##_t)__SWAB##bits(x); \
> > }
> > -#define cpu_to_fdt32(x) fdt32_to_cpu(x)
> > +DEF_FDT_TO_CPU(16)
> > +DEF_FDT_TO_CPU(32)
> > +DEF_FDT_TO_CPU(64)
>
> In fact, I really don't see why you're rewriting the byteswapper
> functions as part of this patch. The existing versions aren't very
> nice, but if you want to rewrite those, please do it in a separate
> patch.
This patchseries is about silencing sparse warnings in linux,
u-boot, and libfdt. Sparse is intelligent in that if you mismatch a
native type of value 0 to a bitwise restricted type, it won't call a
warning. The existing short-circuiting of the byteswapper
functions, i.e., defining cpu_to_fdt32(x) to fdt32_to_cpu(x) and
vice versa doesn't allow for correct attribution propagation.
Therefore I chose to allow sparse to see the actual conversion. If
you have any other ideas on how to silence sparse in libfdt, let me
know.
Kim
next prev parent reply other threads:[~2012-11-15 5:12 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1350433728-24120-1-git-send-email-kim.phillips@freescale.com>
[not found] ` <507F4B0B.1020401@gmail.com>
[not found] ` <20121018121112.GI23523@truffula.fritz.box>
[not found] ` <20121018173022.32f1745249d162d1aa453694@freescale.com>
[not found] ` <20121019004324.GN23523@truffula.fritz.box>
2012-10-30 21:57 ` [PATCH] libfdt: introduce fdt type annotation for use by endian checkers Kim Phillips
2012-10-30 22:24 ` Stephen Warren
2012-10-30 22:27 ` Kim Phillips
[not found] ` <20121030165754.65b34c78cd0d3a0d6ab7d34e-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2012-11-06 7:48 ` David Gibson
2012-11-14 0:34 ` [PATCH 3/4 v2] dtc/libfdt: introduce fdt types for annotation " Kim Phillips
[not found] ` <20121113183417.7706e5c6044eb273309ef46e-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2012-11-14 14:42 ` Jon Loeliger
2012-11-15 0:59 ` [PATCH v2 1/4] dtc/tests: don't include fdt.h prior to libfdt.h Kim Phillips
[not found] ` <1352941199-19393-1-git-send-email-kim.phillips-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2012-11-15 0:59 ` [PATCH v2 2/4] dtc/fdtdump: include libfdt_env.h prior to fdt.h Kim Phillips
2012-11-15 0:59 ` [PATCH v3 3/4] dtc/libfdt: introduce fdt types for annotation by endian checkers Kim Phillips
[not found] ` <1352941199-19393-3-git-send-email-kim.phillips-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2012-11-15 4:43 ` David Gibson
2012-11-15 5:12 ` Kim Phillips [this message]
[not found] ` <20121114231204.8f19082c7acc1cea2a2d794f-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2012-11-19 2:30 ` David Gibson
2012-11-28 23:33 ` [PATCH v4 " Kim Phillips
2012-12-03 4:05 ` David Gibson
[not found] ` <20121128173301.2b52b22a39fe6c3ce5a088fb-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-01-06 21:52 ` Jon Loeliger
2012-11-15 0:59 ` [PATCH v2 4/4] dtc/libfdt: uintXX_t to fdtXX_t conversion Kim Phillips
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=20121114231204.8f19082c7acc1cea2a2d794f@freescale.com \
--to=kim.phillips@freescale.com \
--cc=david@gibson.dropbear.id.au \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=jdl@jdl.com \
--cc=u-boot@lists.denx.de \
/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;
as well as URLs for NNTP newsgroup(s).