XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Functions
drm_exec.h File Reference
#include <linux/compiler.h>
#include <linux/ww_mutex.h>
Include dependency graph for drm_exec.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  drm_exec
 

Macros

#define DRM_EXEC_INTERRUPTIBLE_WAIT   BIT(0)
 
#define DRM_EXEC_IGNORE_DUPLICATES   BIT(1)
 
#define DRM_EXEC_DUMMY   ((void *)~0)
 
#define __drm_exec_for_each_locked_object(exec, obj, __index)    for (unsigned long __index = 0; ((obj) = drm_exec_obj(exec, __index)); ++__index)
 
#define drm_exec_for_each_locked_object(exec, obj)    __drm_exec_for_each_locked_object(exec, obj, __UNIQUE_ID(drm_exec))
 
#define __drm_exec_for_each_locked_object_reverse(exec, obj, __index)
 
#define drm_exec_for_each_locked_object_reverse(exec, obj)    __drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))
 
#define drm_exec_until_all_locked(exec)
 
#define drm_exec_retry_on_contention(exec)
 
#define drm_exec_retry(_exec)
 

Functions

void drm_exec_init (struct drm_exec *exec, u32 flags, unsigned nr)
 
void drm_exec_fini (struct drm_exec *exec)
 
bool drm_exec_cleanup (struct drm_exec *exec)
 
int drm_exec_lock_obj (struct drm_exec *exec, struct drm_gem_object *obj)
 
void drm_exec_unlock_obj (struct drm_exec *exec, struct drm_gem_object *obj)
 
int drm_exec_prepare_obj (struct drm_exec *exec, struct drm_gem_object *obj, unsigned int num_fences)
 
int drm_exec_prepare_array (struct drm_exec *exec, struct drm_gem_object **objects, unsigned int num_objects, unsigned int num_fences)
 

Macro Definition Documentation

◆ __drm_exec_for_each_locked_object

#define __drm_exec_for_each_locked_object (   exec,
  obj,
  __index 
)     for (unsigned long __index = 0; ((obj) = drm_exec_obj(exec, __index)); ++__index)

◆ __drm_exec_for_each_locked_object_reverse

#define __drm_exec_for_each_locked_object_reverse (   exec,
  obj,
  __index 
)
Value:
for (unsigned long __index = (exec)->num_objects - 1; \
((obj) = drm_exec_obj(exec, __index)); --__index)

◆ DRM_EXEC_DUMMY

#define DRM_EXEC_DUMMY   ((void *)~0)

◆ drm_exec_for_each_locked_object

#define drm_exec_for_each_locked_object (   exec,
  obj 
)     __drm_exec_for_each_locked_object(exec, obj, __UNIQUE_ID(drm_exec))

drm_exec_for_each_locked_object - iterate over all the locked objects @exec: drm_exec object @obj: the current GEM object

Iterate over all the locked GEM objects inside the drm_exec object.

◆ drm_exec_for_each_locked_object_reverse

#define drm_exec_for_each_locked_object_reverse (   exec,
  obj 
)     __drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))

drm_exec_for_each_locked_object_reverse - iterate over all the locked objects in reverse locking order @exec: drm_exec object @obj: the current GEM object

Iterate over all the locked GEM objects inside the drm_exec object in reverse locking order. Note that the internal index may wrap around, but that will be caught by drm_exec_obj(), returning a NULL object.

◆ DRM_EXEC_IGNORE_DUPLICATES

#define DRM_EXEC_IGNORE_DUPLICATES   BIT(1)

◆ DRM_EXEC_INTERRUPTIBLE_WAIT

#define DRM_EXEC_INTERRUPTIBLE_WAIT   BIT(0)

◆ drm_exec_retry

#define drm_exec_retry (   _exec)
Value:
do { \
WARN_ON((_exec)->contended != DRM_EXEC_DUMMY); \
} while (__drm_exec_loop)
#define DRM_EXEC_DUMMY
Definition drm_exec.h:16
#define drm_exec_retry(_exec)
Definition drm_exec.h:160

drm_exec_retry() - Unconditionally restart the loop to grab all locks. @exec: drm_exec object

Unconditionally retry the loop to lock all objects. For consistency, the exec object needs to be newly initialized. The __drm_exec_loop check exists to prevent usage outside of an drm_exec_until_all_locked() loop.

◆ drm_exec_retry_on_contention

#define drm_exec_retry_on_contention (   exec)
Value:
do { \
if (unlikely(drm_exec_is_contended(exec))) \
} while (__drm_exec_loop)
#define unlikely(x)
Definition compiler.h:30

drm_exec_retry_on_contention - restart the loop to grap all locks @exec: drm_exec object

Control flow helper to continue when a contention was detected and we need to clean up and re-start the loop to prepare all GEM objects. The __drm_exec_loop check exists to prevent usage outside of an drm_exec_until_all_locked() loop.

◆ drm_exec_until_all_locked

#define drm_exec_until_all_locked (   exec)
Value:
for (bool const __maybe_unused __drm_exec_loop = false; \
drm_exec_cleanup(exec);) \
if (false) { \
continue; \
} else
#define __maybe_unused
Definition compiler_attributes.h:352

drm_exec_until_all_locked - loop until all GEM objects are locked @exec: drm_exec object

Core functionality of the drm_exec object. Loops until all GEM objects are locked and no more contention exists. At the beginning of the loop it is guaranteed that no GEM object is locked.

A global label name drm_exec_retry is used, if you need to use more than one instance of this macro in the same function the label needs to be made local to the block with the label keyword.

Function Documentation

◆ drm_exec_cleanup()

bool drm_exec_cleanup ( struct drm_exec *  exec)

◆ drm_exec_fini()

void drm_exec_fini ( struct drm_exec *  exec)

◆ drm_exec_init()

void drm_exec_init ( struct drm_exec *  exec,
u32  flags,
unsigned  nr 
)

◆ drm_exec_lock_obj()

int drm_exec_lock_obj ( struct drm_exec *  exec,
struct drm_gem_object *  obj 
)

◆ drm_exec_prepare_array()

int drm_exec_prepare_array ( struct drm_exec *  exec,
struct drm_gem_object **  objects,
unsigned int  num_objects,
unsigned int  num_fences 
)

◆ drm_exec_prepare_obj()

int drm_exec_prepare_obj ( struct drm_exec *  exec,
struct drm_gem_object *  obj,
unsigned int  num_fences 
)

◆ drm_exec_unlock_obj()

void drm_exec_unlock_obj ( struct drm_exec *  exec,
struct drm_gem_object *  obj 
)