RTEMS CPU Kit with SuperCore
Data Structures | Typedefs | Functions
Resource Handler

Support for resource dependency management. More...

Collaboration diagram for Resource Handler:

Data Structures

struct  Resource_Node
 Resource node to reflect ownership of resources and a dependency on a resource. More...
 
struct  Resource_Control
 Resource control to manage ownership and rival nodes depending on a resource. More...
 

Typedefs

typedef struct Resource_Node Resource_Node
 
typedef struct Resource_Control Resource_Control
 
typedef bool(* Resource_Node_visitor) (Resource_Node *node, void *arg)
 Visitor function for resource node iteration. More...
 

Functions

void _Resource_Iterate (Resource_Node *top, Resource_Node_visitor visitor, void *arg)
 Iterates over all nodes of a resource dependency tree. More...
 
RTEMS_INLINE_ROUTINE void _Resource_Node_initialize (Resource_Node *node)
 
RTEMS_INLINE_ROUTINE void _Resource_Node_set_dependency (Resource_Node *node, Resource_Control *dependency)
 
RTEMS_INLINE_ROUTINE Resource_Node_Resource_Node_get_root (const Resource_Node *node)
 
RTEMS_INLINE_ROUTINE void _Resource_Node_set_root (Resource_Node *node, Resource_Node *root)
 
RTEMS_INLINE_ROUTINE bool _Resource_Node_owns_resources (const Resource_Node *node)
 
RTEMS_INLINE_ROUTINE void _Resource_Node_add_resource (Resource_Node *node, Resource_Control *resource)
 
RTEMS_INLINE_ROUTINE void _Resource_Node_extract (Resource_Node *node)
 
RTEMS_INLINE_ROUTINE void _Resource_Initialize (Resource_Control *resource)
 
RTEMS_INLINE_ROUTINE void _Resource_Add_rival (Resource_Control *resource, Resource_Node *node)
 
RTEMS_INLINE_ROUTINE void _Resource_Extract (Resource_Control *resource)
 
RTEMS_INLINE_ROUTINE Resource_Node_Resource_Get_owner (const Resource_Control *resource)
 
RTEMS_INLINE_ROUTINE void _Resource_Set_owner (Resource_Control *resource, Resource_Node *owner)
 
RTEMS_INLINE_ROUTINE bool _Resource_Is_most_recently_obtained (const Resource_Control *resource, const Resource_Node *node)
 Returns true if this is the most recently obtained resource of the node, and false otherwise. More...
 

Detailed Description

Support for resource dependency management.

A resource is something that has at most one owner at a time and may have multiple rivals in case an owner is present. The owner and rivals are impersonated via resource nodes. A resource is represented via the resource control structure. The resource controls and nodes are organized as trees. It is possible to detect deadlocks via such a resource tree. The _Resource_Iterate() function can be used to iterate through such a resource tree starting at a top node.

The following diagram shows an example resource tree with sixteen resource nodes n0 up to n15 and sixteen resources r0 up to r15. The root of this tree is n0. As a use case threads can be associated with resource nodes. In this case a thread represented by node n0 owns resources r0, r1, r2, r3, r6, r11 and r12 and is in the ready state. The threads represented by nodes n1 up to n15 wait directly or indirectly via resources owned by n0 and are in a blocked state.

dot_inline_dotgraph_6.png

The following example illustrates a deadlock situation. The root of the tree tries to get ownership of a resource owned by one of its children.

dot_inline_dotgraph_7.png

Typedef Documentation

◆ Resource_Node_visitor

typedef bool(* Resource_Node_visitor) (Resource_Node *node, void *arg)

Visitor function for resource node iteration.

The visitor is allowed to extract the node.

Parameters
[in]nodeThe current resource node.
[in]argThe argument passed to _Resource_Iterate().
Return values
trueStop the iteration.
falseContinue the iteration.

Function Documentation

◆ _Resource_Is_most_recently_obtained()

RTEMS_INLINE_ROUTINE bool _Resource_Is_most_recently_obtained ( const Resource_Control resource,
const Resource_Node node 
)

Returns true if this is the most recently obtained resource of the node, and false otherwise.

Resources are organized in last in first out order (LIFO).

Parameters
[in]resourceThe resource in question.
[in]nodeThe node that obtained the resource.

References _Chain_Immutable_first(), Resource_Control::Node, and Resource_Node::Resources.

◆ _Resource_Iterate()

void _Resource_Iterate ( Resource_Node top,
Resource_Node_visitor  visitor,
void *  arg 
)

Iterates over all nodes of a resource dependency tree.

Parameters
[in]topThe top node to start the iteration. The visitor function is not invoked for the top node.
[in]visitorThe visitor function.
[in]argThe argument for the visitor function.