On Wed, May 28, 2014 at 04:48:41PM -0700, Jarno Rajahalme wrote:
> 
> On May 28, 2014, at 4:14 PM, Jarno Rajahalme <jrajaha...@nicira.com> wrote:
> 
> > 
> > On May 23, 2014, at 10:23 AM, Ben Pfaff <b...@nicira.com> wrote:
> > 
> >> On Thu, May 22, 2014 at 05:37:41PM -0700, Jarno Rajahalme wrote:
> >>> Add cmap_replace() and cmap_first(), as well as CMAP_FOR_EACH_SAFE and
> >>> CMAP_FOR_EACH_CONTINUE to make porting existing hmap using code a bit
> >>> easier.
> >>> 
> >>> CMAP_FOR_EACH_SAFE is useful in RCU postponed destructors, when it is
> >>> known that additional postponing is not needed.
> >>> 
> >>> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
> >> 
> >> I am not sure that ovsrcu_init() may be used in cmap_replace__() here.
> >> I believe that we need to make sure that the store to replacement->next
> >> becomes visible before the store to b->nodes[slot].  I am not sure that
> >> a single release fence is sufficient, because I believe that the write
> >> to replacement->next could still get reordered after the write to
> >> b->nodes[slot].  After all, both are on the same side of the release
> >> fence:
> >> 
> >>   /* The pointer to 'node' is changed to point to 'replacement',
> >>    * which is the next node if no replacement node is given. */
> >>   if (!replacement) {
> >>       replacement = cmap_node_next_protected(node);
> >>   } else {
> >>       /* 'replacement' takes the position of 'node' in the list. */
> >>       ovsrcu_init(&replacement->next, cmap_node_next_protected(node));
> >>   }
> >> 
> >>   if (b->nodes[slot] == node) {
> >>       b->nodes[slot] = replacement;
> >>       atomic_thread_fence(memory_order_release);
> >> 
> > 
> > It seems to me that moving the fence up one line would solve the problem, 
> > no?
> 
> I just re-realized that this will go way with the patch 5/5
> anyway. Do you want me to merge patches 4 and 5, instead?

I'd rather not mix these two patches up.  Each one is confusing enough
on its own.

I think you're right that moving up the fence solves the issue.

Thanks,

Ben.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to