Message ID | 20231008052101.144422-2-akihiko.odaki@daynix.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | tun: Introduce virtio-net hashing feature | expand |
On Sun, Oct 8, 2023 at 7:22 AM Akihiko Odaki <akihiko.odaki@daynix.com> wrote: > > tun_vnet_hash can use this flag to indicate it stored virtio-net hash > cache to cb. > > Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> > --- > include/linux/skbuff.h | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > index 4174c4b82d13..e638f157c13c 100644 > --- a/include/linux/skbuff.h > +++ b/include/linux/skbuff.h > @@ -837,6 +837,7 @@ typedef unsigned char *sk_buff_data_t; > * @truesize: Buffer size > * @users: User count - see {datagram,tcp}.c > * @extensions: allocated extensions, valid if active_extensions is nonzero > + * @tun_vnet_hash: tun stored virtio-net hash cache to cb > */ > > struct sk_buff { > @@ -989,6 +990,7 @@ struct sk_buff { > #if IS_ENABLED(CONFIG_IP_SCTP) > __u8 csum_not_inet:1; > #endif > + __u8 tun_vnet_hash:1; sk_buff space is very limited. No need to extend it, especially for code that stays within a single subsystem (tun). To a lesser extent the same point applies to the qdisc_skb_cb.
On 2023/10/09 3:39, Willem de Bruijn wrote: > On Sun, Oct 8, 2023 at 7:22 AM Akihiko Odaki <akihiko.odaki@daynix.com> wrote: >> >> tun_vnet_hash can use this flag to indicate it stored virtio-net hash >> cache to cb. >> >> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> >> --- >> include/linux/skbuff.h | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h >> index 4174c4b82d13..e638f157c13c 100644 >> --- a/include/linux/skbuff.h >> +++ b/include/linux/skbuff.h >> @@ -837,6 +837,7 @@ typedef unsigned char *sk_buff_data_t; >> * @truesize: Buffer size >> * @users: User count - see {datagram,tcp}.c >> * @extensions: allocated extensions, valid if active_extensions is nonzero >> + * @tun_vnet_hash: tun stored virtio-net hash cache to cb >> */ >> >> struct sk_buff { >> @@ -989,6 +990,7 @@ struct sk_buff { >> #if IS_ENABLED(CONFIG_IP_SCTP) >> __u8 csum_not_inet:1; >> #endif >> + __u8 tun_vnet_hash:1; > > sk_buff space is very limited. > > No need to extend it, especially for code that stays within a single > subsystem (tun). > > To a lesser extent the same point applies to the qdisc_skb_cb. I had to extend sk_buff because it does not stay in tun but moves back and forth between qdisc and tun. The new members of sk_buff and qdisc_skb_cb are stored by tun's ndo_select_queue(). The control will go back to qdisc after ndo_select_queue() function finishes. Eventually tun's ndo_start_xmit() will be called by qdisc and consumes the stored members. qdisc is required to keep the stored members intact. tun_vnet_hash is a bit special. It is put into sk_buff because ndo_select_queue() is not always called and it may be left uninitialized. ndo_start_xmit() may read some garbage from cb's old user if it is put into cb.
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 4174c4b82d13..e638f157c13c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -837,6 +837,7 @@ typedef unsigned char *sk_buff_data_t; * @truesize: Buffer size * @users: User count - see {datagram,tcp}.c * @extensions: allocated extensions, valid if active_extensions is nonzero + * @tun_vnet_hash: tun stored virtio-net hash cache to cb */ struct sk_buff { @@ -989,6 +990,7 @@ struct sk_buff { #if IS_ENABLED(CONFIG_IP_SCTP) __u8 csum_not_inet:1; #endif + __u8 tun_vnet_hash:1; #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS) __u16 tc_index; /* traffic control index */
tun_vnet_hash can use this flag to indicate it stored virtio-net hash cache to cb. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> --- include/linux/skbuff.h | 2 ++ 1 file changed, 2 insertions(+)