Hi Bruce, Actually IMHO it is good to leave the freedom to user to decide how to interpret the tag value, i.e. remove the OR 1 bit. If the tag value is zero, then we assume the programmer know what he is doing. Of course this shall be clearly documented in the comment/doxgen.
thx & rgds, -qinglai On Thu, Nov 6, 2014 at 8:01 PM, jigsaw <jigsaw at gmail.com> wrote: > Hi Bruce, > > In my use case, unfortunately the tag is not hash. And the tag can be on > either low or high bits, depending on configuration. > I wonder if it is possible to let the user to decide which bit to mask, > i.e. to add another param to rte_distributor_create to define the mask. > > thx & > rgds, > -qinglai > > On Thu, Nov 6, 2014 at 3:59 PM, Bruce Richardson < > bruce.richardson at intel.com> wrote: > >> On Thu, Nov 06, 2014 at 02:36:09PM +0200, Qinglai Xiao wrote: >> > Hi Bruce, >> > >> > There is a subtle case in which tag values are 2 and 3, respectively. >> Then these two tags cannot be distinguished. There should be a better way >> so as to handle this situation. >> >> It's not just in that, case, it's in any case where a pair of tags differ >> by >> only a single bit. I've been assuming that the tag is likely to be a hash >> value in most cases - given that it's only 32-bit - in which case it just >> doesn't >> matter which bit we chose to permanently set to 1, but if there are >> scenarios >> where it's likely that the low bits are used but the high ones not so, we >> can >> look to change which bit is set to 1. Either way, the distributor just >> uses a >> 31-bit tag rather than a 32-bit one. >> >> /Bruce >> >> > >> > thx & >> > rgds >> > -qinglai >> > >> > -----????----- >> > ???: "Thomas Monjalon" <thomas.monjalon at 6wind.com> >> > ????: ?2014/?11/?6 12:36 >> > ???: "Bruce Richardson" <bruce.richardson at intel.com> >> > ??: "dev at dpdk.org" <dev at dpdk.org>; "jigsaw" <jigsaw at gmail.com> >> > ??: Re: [dpdk-dev] [PATCH] Add user defined tag calculation callback >> tolibrte_distributor. >> > >> > 2014-11-06 09:22, Bruce Richardson: >> > > On Wed, Nov 05, 2014 at 07:24:13PM +0200, jigsaw wrote: >> > > > >> http://dpdk.org/browse/dpdk/tree/lib/librte_distributor/rte_distributor.c#n285 >> > > > >> > > > new_tag = (next_mb->hash.rss | 1); >> > > > >> > > > Why the logical OR is needed? >> > > >> > > That's needed to ensure that we never track a tag with an actual >> value of zero. >> > > We instead always force the low bit to be 1, so that we can use zero >> as an >> > > "empty" value. >> > >> > Bruce, could you check how this code may be better commented please? >> > This discussion shows that the distributor library probably needs more >> > explanations in the code or doxygen. >> > >> > Thanks >> > -- >> > Thomas >> > >