dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net
Subject: [PATCH v2 0/3] Improve lock annotations
Date: Thu, 12 Dec 2024 17:00:45 +0100	[thread overview]
Message-ID: <20241212160049.1258449-1-david.marchand@redhat.com> (raw)
In-Reply-To: <20241202125316.3732529-1-david.marchand@redhat.com>

A recent bug (see 22aa9a9c7099 ("vhost: fix deadlock in Rx async path"))
made more visible a gap in the clang thread safety annotations that
DPDK uses: no distinction is made between releasing a read lock and
releasing a write lock.

Clang 3.6 and later offers improved thread safety checks.

Marking objects as "lockable" has evolved into flagging some named
"capability". clang reports the capability name when an error is
reported (making this report a bit easier to understand).

For example, a spinlock is now flagged as:
typedef struct __rte_capability("spinlock") {
  volatile RTE_ATOMIC(int) locked;
} rte_spinlock_t;


For "exclusive" locking (spinlocks / write locks), the conversion is:
- exclusive_lock_function -> acquire_capability
- exclusive_trylock_function -> try_acquire_capability
- unlock_function -> release_capability
...

For "shared" locking (read locks):
- shared_lock_function -> acquire_shared_capability
- shared_trylock_function -> try_acquire_shared_capability
- unlock_function -> release_shared_capability
...


This series proposes to use those annotations (sticking to the
convention of simply prefixing the compiler attributes with __rte_).
The existing "old" annotations macros are left in place in case users
started to rely on them.

Note: DPDK requirements state that clang version must be >= 3.6
(following use of C11 standard).

Comments welcome.


-- 
David Marchand

David Marchand (3):
  eal: add enhanced lock annotations
  eal: enhance lock annotations for spinlock and seqlock
  eal: enhance lock annotations for rwlock

 doc/api/doxy-api.conf.in               |  12 ++
 drivers/bus/dpaa/base/qbman/qman.c     |   4 +-
 drivers/net/fm10k/fm10k_ethdev.c       |   4 +-
 lib/eal/common/eal_memalloc.h          |   2 +-
 lib/eal/common/eal_private.h           |   2 +-
 lib/eal/include/generic/rte_rwlock.h   |  23 ++--
 lib/eal/include/generic/rte_spinlock.h |  14 +-
 lib/eal/include/rte_eal_memconfig.h    |  28 ++--
 lib/eal/include/rte_lock_annotations.h |  53 ++++++++
 lib/eal/include/rte_seqlock.h          |   4 +-
 lib/ethdev/ethdev_driver.c             |   4 +-
 lib/ethdev/ethdev_private.h            |   4 +-
 lib/ethdev/rte_ethdev.c                |   4 +-
 lib/graph/graph_private.h              |   4 +-
 lib/hash/rte_cuckoo_hash.c             |   8 +-
 lib/vhost/iotlb.h                      |   8 +-
 lib/vhost/vdpa.c                       |   2 +-
 lib/vhost/vhost.c                      |  10 +-
 lib/vhost/vhost.h                      |  24 ++--
 lib/vhost/vhost_crypto.c               |  14 +-
 lib/vhost/virtio_net.c                 | 170 ++++++++++++-------------
 lib/vhost/virtio_net_ctrl.c            |   2 +-
 22 files changed, 233 insertions(+), 167 deletions(-)

-- 
2.47.0


  parent reply	other threads:[~2024-12-12 16:01 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-02 12:53 [RFC 0/3] Improve lock annotations David Marchand
2024-12-02 12:53 ` [RFC 1/3] eal: add enhanced " David Marchand
2024-12-02 16:13   ` Stephen Hemminger
2024-12-02 12:53 ` [RFC 2/3] eal: enhance lock annotations for spinlock and seqlock David Marchand
2024-12-05  6:18   ` Mattias Rönnblom
2024-12-02 12:53 ` [RFC 3/3] eal: enhance lock annotations for rwlock David Marchand
2024-12-12 16:00 ` David Marchand [this message]
2024-12-12 16:00   ` [PATCH v2 1/3] eal: add enhanced lock annotations David Marchand
2024-12-12 16:00   ` [PATCH v2 2/3] eal: enhance lock annotations for spinlock and seqlock David Marchand
2024-12-12 16:00   ` [PATCH v2 3/3] eal: enhance lock annotations for rwlock David Marchand
2024-12-13 10:47   ` [PATCH v2 0/3] Improve lock annotations David Marchand
2025-02-07 10:45   ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241212160049.1258449-1-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).