On Thu, Mar 27, 2014 at 7:05 AM, Flavio Leitner <f...@redhat.com> wrote: > There are two problematic situations. > > A deadlock can happen when is_percpu is false because it can get > interrupted while holding the spinlock. Then it executes > ovs_flow_stats_update() in softirq context which tries to get > the same lock. > > The second sitation is that when is_percpu is true, the code > correctly disables BH but only for the local CPU, so the > following can happen when locking the remote CPU without > disabling BH: > > CPU#0 CPU#1 > ovs_flow_stats_get() > stats_read() > +->spin_lock remote CPU#1 ovs_flow_stats_get() > | <interrupted> stats_read() > | ... +--> spin_lock remote CPU#0 > | | <interrupted> > | ovs_flow_stats_update() | ... > | spin_lock local CPU#0 <--+ ovs_flow_stats_update() > +---------------------------------- spin_lock local CPU#1 > > This patch disables BH for both cases fixing the deadlocks.
This bug is already fixed in OVS. Jesse, Can you send the fix upstream or you waiting for other patches? _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev