aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/dgl.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/litmus/dgl.h')
-rw-r--r--include/litmus/dgl.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/litmus/dgl.h b/include/litmus/dgl.h
new file mode 100644
index 000000000000..acd58f80b58b
--- /dev/null
+++ b/include/litmus/dgl.h
@@ -0,0 +1,65 @@
1#ifndef __DGL_H_
2#define __DGL_H_
3
4#include <litmus/color.h>
5#include <linux/list.h>
6
7/*
8 * A request for @replica amount of a single resource.
9 */
10struct dgl_req {
11 unsigned short replicas;
12 struct list_head list;
13 struct dgl_group_req *greq;
14};
15
16/*
17 * Simultaneous @requests for multiple resources.
18 */
19struct dgl_group_req {
20 int cpu;
21 unsigned long *requested;
22 unsigned long *waiting;
23
24 struct dgl_req *requests;
25
26 unsigned long long ts;
27};
28
29/*
30 * A single resource.
31 */
32struct dgl_resource {
33 unsigned long free_replicas;
34 struct list_head waiting;
35};
36
37/*
38 * A group of resources.
39 */
40struct dgl {
41 struct dgl_resource *resources;
42 struct dgl_group_req* *acquired;
43
44 char requests;
45 char running;
46 unsigned long long ts;
47
48 unsigned long num_resources;
49 unsigned long num_replicas;
50};
51
52void dgl_init(struct dgl *dgl, unsigned long num_resources,
53 unsigned long num_replicas);
54void dgl_free(struct dgl *dgl);
55
56void dgl_group_req_init(struct dgl *dgl, struct dgl_group_req *greq);
57void dgl_group_req_free(struct dgl_group_req *greq);
58
59void set_req(struct dgl *dgl, struct dgl_group_req *greq,
60 int resource, int replicas);
61
62void add_group_req(struct dgl *dgl, struct dgl_group_req *greq, int cpu);
63void remove_group_req(struct dgl *dgl, struct dgl_group_req *greq);
64
65#endif