[ovs-git] [openvswitch/ovs] 55cf55: pvector: Use acquire-release semantics for size.

Ilya Maximets noreply at github.com
Sun Mar 15 12:47:08 UTC 2020


  Branch: refs/heads/branch-2.10
  Home:   https://github.com/openvswitch/ovs
  Commit: 55cf55b9cf46145ffd33a9fd35ea1f092e4246cb
      https://github.com/openvswitch/ovs/commit/55cf55b9cf46145ffd33a9fd35ea1f092e4246cb
  Author: Yanqin Wei <Yanqin.Wei at arm.com>
  Date:   2020-03-13 (Fri, 13 Mar 2020)

  Changed paths:
    M lib/pvector.c
    M lib/pvector.h

  Log Message:
  -----------
  pvector: Use acquire-release semantics for size.

Read/write concurrency of pvector library is implemented by a temp vector
and RCU protection. Considering performance reason, insertion does not
follow this scheme.
In insertion function, a thread fence ensures size increment is done
after new entry is stored. But there is no barrier in the iteration
fuction(pvector_cursor_init). Entry point access may be reordered before
loading vector size, so the invalid entry point may be loaded when vector
iteration.
This patch fixes it by acquire-release pair. It can guarantee new size is
observed by reader after new entry stored by writer. And this is
implemented by one-way barrier instead of two-way memory fence.

Fixes: fe7cfa5c3f19 ("lib/pvector: Non-intrusive RCU priority vector.")
Reviewed-by: Gavin Hu <Gavin.Hu at arm.com>
Reviewed-by: Lijian Zhang <Lijian.Zhang at arm.com>
Signed-off-by: Yanqin Wei <Yanqin.Wei at arm.com>
Signed-off-by: Ilya Maximets <i.maximets at ovn.org>


  Commit: 98b5f55ed78fc4969956dfa8defddabca3555143
      https://github.com/openvswitch/ovs/commit/98b5f55ed78fc4969956dfa8defddabca3555143
  Author: Ilya Maximets <i.maximets at ovn.org>
  Date:   2020-03-13 (Fri, 13 Mar 2020)

  Changed paths:
    M lib/dpif-netdev.c

  Log Message:
  -----------
  dpif-netdev: Enter quiescent state after each offloading operation.

If the offloading queue is big and filled continuously, offloading
thread may have no chance to quiesce blocking rcu callbacks and
other threads waiting for synchronization.

Fix that by entering momentary quiescent state after each operation
since we're not holding any rcu-protected memory here.

Fixes: 02bb2824e51d ("dpif-netdev: do hw flow offload in a thread")
Reported-by: Eli Britstein <elibr at mellanox.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2020-February/049768.html
Acked-by: Eli Britstein <elibr at mellanox.com>
Signed-off-by: Ilya Maximets <i.maximets at ovn.org>


Compare: https://github.com/openvswitch/ovs/compare/b2ccc307f11e...98b5f55ed78f


More information about the git mailing list