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