From: Nicholas Mc Guire <der.herr@hofr.at>
To: Edward Cree <ecree@solarflare.com>
Cc: Nicholas Mc Guire <hofrat@osadl.org>,
Santosh Shilimkar <santosh.shilimkar@oracle.com>,
"David S. Miller" <davem@davemloft.net>,
netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
rds-devel@oss.oracle.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rds: ib: force endiannes annotation
Date: Mon, 29 Apr 2019 13:18:36 +0200 [thread overview]
Message-ID: <20190429111836.GA17830@osadl.at> (raw)
In-Reply-To: <20443fd3-bd1e-9472-8ca3-e3014e59f249@solarflare.com>
On Mon, Apr 29, 2019 at 12:00:06PM +0100, Edward Cree wrote:
> On 29/04/2019 07:09, Nicholas Mc Guire wrote:
> > diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
> > index 7055985..a070a2d 100644
> > --- a/net/rds/ib_recv.c
> > +++ b/net/rds/ib_recv.c
> > @@ -824,7 +824,7 @@ static void rds_ib_cong_recv(struct rds_connection *conn,
> > }
> >
> > /* the congestion map is in little endian order */
> > - uncongested = le64_to_cpu(uncongested);
> > + uncongested = le64_to_cpu((__force __le64)uncongested);
> >
> > rds_cong_map_updated(map, uncongested);
> > }
> Again, a __force cast doesn't seem necessary here. It looks like the
> code is just using the wrong types; if all of src, dst and uncongested
> were __le64 instead of uint64_t, and the last two lines replaced with
> rds_cong_map_updated(map, le64_to_cpu(uncongested)); then the semantics
> would be kept with neither sparse errors nor __force.
>
> __force is almost never necessary and mostly just masks other bugs or
> endianness confusion in the surrounding code. Instead of adding a
> __force, either fix the code to be sparse-clean or leave the sparse
> warning in place so that future developers know there's something not
> right.
>
changing uncongested to __le64 is not an option here - it would only move
the sparse warnings to those other locatoins where the ports that
became uncongested are being or'ed into uncongested.
I'm not using __force as the prime way to silence sparse - I try to find
an alternative first - the problem is in line 805
for (k = 0; k < to_copy; k += 8) {
/* Record ports that became uncongested, ie
* bits that changed from 0 to 1. */
uncongested |= ~(*src) & *dst;
*dst++ = *src++;
}
And in this case the endianness handling does seem right.
But ok with me to leave it in as it is - if you think that the __force
here is not justified.
thanks for your comments and notably the explainations !
thx!
hofrat
alternative
next prev parent reply other threads:[~2019-04-29 11:18 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-29 6:09 [PATCH] rds: ib: force endiannes annotation Nicholas Mc Guire
2019-04-29 11:00 ` Edward Cree
2019-04-29 11:00 ` Edward Cree
2019-04-29 11:18 ` Nicholas Mc Guire [this message]
2019-04-29 12:02 ` Edward Cree
2019-04-29 12:02 ` Edward Cree
2019-04-29 12:22 ` Christoph Hellwig
2019-04-29 12:21 ` Christoph Hellwig
2019-04-29 12:37 ` Nicholas Mc Guire
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=20190429111836.GA17830@osadl.at \
--to=der.herr@hofr.at \
--cc=davem@davemloft.net \
--cc=ecree@solarflare.com \
--cc=hofrat@osadl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rds-devel@oss.oracle.com \
--cc=santosh.shilimkar@oracle.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.