Operation interfaces:

Wait/wound mutexes are represented through struct ww_mutex defined in the header <linux/ww_mutex.h>:

struct ww_mutex {
       struct mutex base;
       struct ww_acquire_ctx *ctx;
# ifdef CONFIG_DEBUG_MUTEXES
       struct ww_class *ww_class;
#endif
};

The first step to use wait/wound mutex is to define a class, which is a mechanism to represent a group of locks. When concurrent tasks contend for the same locks, they must do so by specifying this class.

A class can be defined using a macro:

static DEFINE_WW_CLASS(bufclass);

Each class declared is an instance of type struct ww_class and contains an atomic counter stamp, which is used to hold a sequence number that records which one of the contending tasks got there first. Other fields are ...

Get Mastering Linux Kernel Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.