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

[-- Attachment #1: Type: text/plain, Size: 3346 bytes --]

On Fri, Mar 06, 2026 at 08:02:26AM +0100, Stefano Brivio wrote:
> 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.

Ok.

> > 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.

Yeah, fair point.

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

      reply	other threads:[~2026-03-06 12:08 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
2026-03-06 12:05     ` David Gibson [this message]

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=aarDEtDUnzOO_HnJ@zatzit \
    --to=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.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.
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).