From: Vladimir Oltean <olteanv@gmail.com>
To: Alex Elder <elder@linaro.org>
Cc: subashab@codeaurora.org, stranche@codeaurora.org,
davem@davemloft.net, kuba@kernel.org, sharathv@codeaurora.org,
bjorn.andersson@linaro.org, evgreen@chromium.org,
cpratapa@codeaurora.org, David.Laight@ACULAB.COM,
elder@kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v3 0/6] net: qualcomm: rmnet: stop using C bit-fields
Date: Wed, 10 Mar 2021 02:27:31 +0200 [thread overview]
Message-ID: <20210310002731.adinf2sgzeshkjqd@skbuf> (raw)
In-Reply-To: <bb7608cc-4a83-0e1d-0124-656246ec4a1f@linaro.org>
Hi Alex,
On Tue, Mar 09, 2021 at 05:39:20PM -0600, Alex Elder wrote:
> On 3/9/21 6:48 AM, Alex Elder wrote:
> > Version 3 of this series uses BIT() rather than GENMASK() to define
> > single-bit masks. It then uses a simple AND (&) operation rather
> > than (e.g.) u8_get_bits() to access such flags. This was suggested
> > by David Laight and really prefer the result. With Bjorn's
> > permission I have preserved his Reviewed-by tags on the first five
> > patches.
>
> Nice as all this looks, it doesn't *work*. I did some very basic
> testing before sending out version 3, but not enough. (More on
> the problem, below).
>
> --> I retract this series <--
>
> I will send out an update (version 4). But I won't be doing it
> for a few more days.
>
> The problem is that the BIT() flags are defined in host byte
> order. But the values they're compared against are not always
> (or perhaps, never) in host byte order.
>
> I regret the error, and will do a complete set of testing on
> version 4 before sending it out for review.
I think I understand some of your pain. I had a similar situation trying
to write a driver for hardware with very strange bitfield organization,
and my top priority was actually maintaining a set of bitfield definitions
that could be taken directly from the user manual of said piece of
hardware (and similar to you, I dislike C bitfields). What I came up
with was an entirely new API called packing() which is described here:
https://www.kernel.org/doc/html/latest/core-api/packing.html
It doesn't have any users except code added by me (some in Ethernet fast
paths), and it has some limitations (mainly that it only has support for
u64 CPU words), but on the other hand, it's easy to understand, easy to
use, supports any bit/byte layout under the sun, doesn't suffer from
unaligned memory access issues due to its byte-by-byte approach, and is
completely independent of host endianness.
That said, I'm not completely happy with it because it has slightly
higher overhead compared to typical bitfield accessors. I've been on the
fence about even deleting it, considering that it's been two years since
it's in mainline and it hasn't gained much of a traction. So I would
rather try to work my way around a different API in the sja1105 driver.
Have you noticed this API and decided to not use it for whatever reason?
Could you let me know what that was? Even better, in your quest to fix
the rmnet driver, have you seen any API that is capable of extracting a
bitfield that spans two 64-bit halves of an 128 bit word in a custom bit
layout?
next prev parent reply other threads:[~2021-03-10 0:28 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-09 12:48 [PATCH net-next v3 0/6] net: qualcomm: rmnet: stop using C bit-fields Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 1/6] net: qualcomm: rmnet: mark trailer field endianness Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 2/6] net: qualcomm: rmnet: simplify some byte order logic Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 3/6] net: qualcomm: rmnet: kill RMNET_MAP_GET_*() accessor macros Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 4/6] net: qualcomm: rmnet: use field masks instead of C bit-fields Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 5/6] net: qualcomm: rmnet: don't use C bit-fields in rmnet checksum trailer Alex Elder
2021-03-10 0:13 ` Alex Elder
2021-03-09 12:48 ` [PATCH net-next v3 6/6] net: qualcomm: rmnet: don't use C bit-fields in rmnet checksum header Alex Elder
2021-03-09 23:39 ` [PATCH net-next v3 0/6] net: qualcomm: rmnet: stop using C bit-fields Alex Elder
2021-03-10 0:27 ` Vladimir Oltean [this message]
2021-03-11 17:26 ` Alex Elder
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=20210310002731.adinf2sgzeshkjqd@skbuf \
--to=olteanv@gmail.com \
--cc=David.Laight@ACULAB.COM \
--cc=bjorn.andersson@linaro.org \
--cc=cpratapa@codeaurora.org \
--cc=davem@davemloft.net \
--cc=elder@kernel.org \
--cc=elder@linaro.org \
--cc=evgreen@chromium.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sharathv@codeaurora.org \
--cc=stranche@codeaurora.org \
--cc=subashab@codeaurora.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