All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Arnaldo Carvalho de Melo" <acme@redhat.com>
To: dccp@vger.kernel.org
Subject: Re: [PATCH 14/25] Basic implementation for ccid-4 dropped packet
Date: Thu, 01 Nov 2007 11:05:07 +0000	[thread overview]
Message-ID: <20071101110507.GC4928@ghostprotocols.net> (raw)
In-Reply-To: <200710312131.40317.leandroal@gmail.com>

Em Wed, Oct 31, 2007 at 09:31:40PM -0300, Leandro escreveu:
> [CCID-4] Basic implementation for ccid-4 dropped packet option as per ccid-4 draft
> 
> Signed-off-by: Leandro Melo de Sales <leandro@embedded.ufcg.edu.br>
> 
> Index: leandro.new/net/dccp/ccids/lib/tfrc_ccids.h
> =================================> --- leandro.new.orig/net/dccp/ccids/lib/tfrc_ccids.h
> +++ leandro.new/net/dccp/ccids/lib/tfrc_ccids.h
> @@ -36,12 +36,15 @@ enum tfrc_options {
>  	TFRC_OPT_LOSS_EVENT_RATE = 192,
>  	TFRC_OPT_LOSS_INTERVALS	 = 193,
>  	TFRC_OPT_RECEIVE_RATE	 = 194,
> +	TFRC_OPT_DROPPED_PACKETS = 195, /* as per ccid-4 draft, section 8 */
>  };
>  
>  struct tfrc_options_received {
>  	u64 tfrcor_seqno:48,
> -	    tfrcor_loss_intervals_idx:16;
> -	u16 tfrcor_loss_intervals_len;
> +	    tfrcor_loss_intervals_idx:16,
> +	    tfrcor_dropped_packets_idx:16;

Just make tfrcor_dropped_packets_idx a plain u16.
tfrcor_loss_intervals_idx is part of a bitfield together with
tfrcor_seqno because it is 48 bits and we want to use what is left in a
u64.

Making tfrcor_dropped_packets_idx a 16 bits entry in a 16 bits bitfield
doesn't helps us here and likely produces bad code.


> +	u16 tfrcor_loss_intervals_len,
> +            tfrcor_dropped_packets_len;
>  	u32 tfrcor_loss_event_rate;
>  	u32 tfrcor_receive_rate;
>  };

And even leads to some confusion, one would think that the second,
single entry bitfield would use 64 bits, as it is declared u64, but the
rule is:

[acme@doppio ~]$ pahole bitfield
struct tfrc_options_received {
        u64  tfrcor_seqno:48;               /*   0 8 */
        u64  tfrcor_loss_intervals_idx:16;  /*   0 8 */
        u64  tfrcor_dropped_packets_idx:16; /*   8 8 */

        /* Bitfield WARNING: DWARF size=8, real size=2 */

        u16  tfrcor_loss_intervals_len;     /*  10 2 */
        u16  tfrcor_dropped_packets_len;    /*  12 2 */

        /* XXX 2 bytes hole, try to pack */

        u32  tfrcor_loss_event_rate;        /*  16 4 */
        u32  tfrcor_receive_rate;           /*  20 4 */

        /* size: 24, cachelines: 1 */
        /* sum members: 22, holes: 1, sum holes: 2 */
        /* last cacheline: 24 bytes */
};      /* definitions: 1 */

[acme@doppio ~]$

The rule is so confusing that even gcc gets lost and emits debugging
information where it says the type of the bitfield is u64, thus 8 bytes
wide, but the offset of the next field is 2 bytes after the bitfield :-)

So just make it u16 and we'll get this:

[acme@doppio ~]$ pahole bitfield

[acme@doppio ~]$ pahole bitfield
struct tfrc_options_received {
        u64  tfrcor_seqno:48;		   /*   0 8 */
        u64  tfrcor_loss_intervals_idx:16; /*   0 8 */
        u16  tfrcor_dropped_packets_idx;   /*   8 2 */
        u16  tfrcor_loss_intervals_len;	   /*  10 2 */
        u16  tfrcor_dropped_packets_len;   /*  12 2 */

        /* XXX 2 bytes hole, try to pack */

        u32  tfrcor_loss_event_rate;       /*  16 4 */
        u32  tfrcor_receive_rate;          /*  20 4 */

        /* size: 24, cachelines: 1 */
        /* sum members: 22, holes: 1, sum holes: 2 */
        /* last cacheline: 24 bytes */
};      /* definitions: 1 */

[acme@doppio ~]$

And now we have a 2 bytes hole, so we may as well just stop
making the first two fields a bitfield.

- Arnaldo

      reply	other threads:[~2007-11-01 11:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-01  0:31 [PATCH 14/25] Basic implementation for ccid-4 dropped packet option Leandro
2007-11-01 11:05 ` Arnaldo Carvalho de Melo [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=20071101110507.GC4928@ghostprotocols.net \
    --to=acme@redhat.com \
    --cc=dccp@vger.kernel.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 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.