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

Ilya Maximets noreply at github.com
Sun Mar 15 12:45:17 UTC 2020


  Branch: refs/heads/master
  Home:   https://github.com/openvswitch/ovs
  Commit: 4e1ce6f66e0a97781284e3ea41a3ad3e9a0f83a3
      https://github.com/openvswitch/ovs/commit/4e1ce6f66e0a97781284e3ea41a3ad3e9a0f83a3
  Author: Yanqin Wei <Yanqin.Wei at arm.com>
  Date:   2020-03-15 (Sun, 15 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: ef32a1a334b14b20f7ad7abc5ea13bb59e9d1ac4
      https://github.com/openvswitch/ovs/commit/ef32a1a334b14b20f7ad7abc5ea13bb59e9d1ac4
  Author: Ilya Maximets <i.maximets at ovn.org>
  Date:   2020-03-15 (Sun, 15 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/6f37078481bc...ef32a1a334b1


More information about the git mailing list