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 ...