On Mon, Apr 06, 2015 at 03:28:37PM -0700, Andy Zhou wrote: > On Tue, Mar 31, 2015 at 9:52 PM, Ben Pfaff <b...@nicira.com> wrote: > > To be first used in upcoming commits. > > > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > > +/* Consider the two value/mask pairs 'a_value/a_mask' and 'b_value/b_mask' > > as > > + * restrictions on a field's value. Then, this function initializes > > + * 'dst_value/dst_mask' such that it combines the restrictions of both > > pairs. > > + * This is not always possible, i.e. if one pair insists on a value of 0 in > > + * some bit and the other pair insists on a value of 1 in that bit. This > > + * function returns false in a case where the combined restriction is > > + * impossible (in which case 'dst_value/dst_mask' is not fully > > initialized), > > + * true otherwise. */ > > +bool > > +mf_subvalue_intersect(const union mf_subvalue *a_value, > > + const union mf_subvalue *a_mask, > > + const union mf_subvalue *b_value, > > + const union mf_subvalue *b_mask, > > + union mf_subvalue *dst_value, > > + union mf_subvalue *dst_mask) > > +{ > > + for (int i = 0; i < ARRAY_SIZE(a_value->be64); i++) { > > + ovs_be64 av = a_value->be64[i]; > > + ovs_be64 am = a_mask->be64[i]; > > + ovs_be64 bv = b_value->be64[i]; > > + ovs_be64 bm = b_mask->be64[i]; > > + ovs_be64 *dv = &dst_value->be64[i]; > > + ovs_be64 *dm = &dst_mask->be64[i]; > > + > > + if ((av ^ bv) & (am & bm)) { > > + return false; > > + } > > + *dv = av | bv; > > + *dm = am | bm; > Should this be *dv = (av & am) | (bv & bm)? I have not read the following > patch > to check the actual usage, so my interpretation of 'intersect' may be > different than > what's intended here.
I think that in the cases where the expression you suggest would have a different value, the "if" statement just before would have bailed out. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev