public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: Stefano Brivio <sbrivio@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: passt-dev@passt.top
Subject: Re: [PATCH] tcp: Avoid comparison of expressions with different signedness in RTT_SET()
Date: Fri, 06 Mar 2026 08:02:26 +0100 (CET)	[thread overview]
Message-ID: <20260306080122.22ff92e4@elisabeth> (raw)
In-Reply-To: <aajrKNIz0WUuxISb@zatzit>

On Thu, 5 Mar 2026 13:32:08 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:

> On Wed, Mar 04, 2026 at 05:32:32PM +0100, Stefano Brivio wrote:
> > With gcc 14.2, building against musl 1.2.5 (slightly outdated Alpine
> > on x86_64):
> > 
> > tcp.c: In function 'tcp_update_seqack_wnd':
> > util.h:40:39: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
> >    40 | #define MIN(x, y)               (((x) < (y)) ? (x) : (y))
> >       |                                       ^
> > tcp_conn.h:63:26: note: in expansion of macro 'MIN'
> >    63 |         (conn->rtt_exp = MIN(RTT_EXP_MAX, ilog2(MAX(1, rtt / RTT_STORE_MIN))))
> >       |                          ^~~
> > tcp.c:1234:17: note: in expansion of macro 'RTT_SET'
> >  1234 |                 RTT_SET(conn, tinfo->tcpi_rtt);
> >       |                 ^~~~~~~
> > util.h:40:54: warning: operand of '?:' changes signedness from 'int' to 'unsigned int' due to unsignedness of other operand [-Wsign-compare]
> >    40 | #define MIN(x, y)               (((x) < (y)) ? (x) : (y))
> >       |                                                      ^~~
> > tcp_conn.h:63:26: note: in expansion of macro 'MIN'
> >    63 |         (conn->rtt_exp = MIN(RTT_EXP_MAX, ilog2(MAX(1, rtt / RTT_STORE_MIN))))
> >       |                          ^~~
> > tcp.c:1234:17: note: in expansion of macro 'RTT_SET'
> >  1234 |                 RTT_SET(conn, tinfo->tcpi_rtt);
> >       |                 ^~~~~~~
> > 
> > for some reason, that's not reported by gcc with glibc.
> > 
> > Cast the result of ilog2() to unsigned before using it, as it's always
> > positive the way we're using it. Should this ever break this for
> > whatever unlikely reason, RTT_EXP_MAX is the fallback value we want to
> > use anyway.
> > 
> > Fixes: 000601ba86da ("tcp: Adaptive interval based on RTT for socket-side acknowledgement checks")
> > Signed-off-by: Stefano Brivio <sbrivio@redhat.com>  
> 
> This is correct, so
> 
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> 
> It's kind of inelegant, though - ilog2() only returns a signed to
> report an error case, which we avoid with the MAX inside the argument.
> That's not a super obvious connection.  I guess we could do:
> 
> 	(unsigned)MAX(0, ilog2(rtt / RTT_STORE_MIN))
> 
> which should be equivalent and makes it slightly more obvious that the
> cast is safe.  Not sure if it's really an improvement, though.

Right, yes, at this point I guess it's clearer. Changed to that in v2.

> This is the only user of ilog2(), so we could also consider replacing
> it with a version that explicitly clamps its argument to >= 1 and
> returns unsigned.

I thought about doing that, but on the other hand we would have a
rather arithmetic function returning an obviously wrong value for some
arguments, which doesn't sound great either.

-- 
Stefano


  reply	other threads:[~2026-03-06  7:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-04 16:32 Stefano Brivio
2026-03-05  2:32 ` David Gibson
2026-03-06  7:02   ` Stefano Brivio [this message]
2026-03-06 12:05     ` David Gibson

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=20260306080122.22ff92e4@elisabeth \
    --to=sbrivio@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    /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.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

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 IMAP folder(s).