Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.2.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * NUMA support for s390
 4 *
 5 * A tree structure used for machine topology mangling
 6 *
 7 * Copyright IBM Corp. 2015
 8 */
 9#ifndef S390_TOPTREE_H
10#define S390_TOPTREE_H
11
12#include <linux/cpumask.h>
13#include <linux/list.h>
14
15struct toptree {
16	int level;
17	int id;
18	cpumask_t mask;
19	struct toptree *parent;
20	struct list_head sibling;
21	struct list_head children;
22};
23
24struct toptree *toptree_alloc(int level, int id);
25void toptree_free(struct toptree *cand);
26void toptree_update_mask(struct toptree *cand);
27void toptree_unify(struct toptree *cand);
28struct toptree *toptree_get_child(struct toptree *cand, int id);
29void toptree_move(struct toptree *cand, struct toptree *target);
30int toptree_count(struct toptree *context, int level);
31
32struct toptree *toptree_first(struct toptree *context, int level);
33struct toptree *toptree_next(struct toptree *cur, struct toptree *context,
34			     int level);
35
36#define toptree_for_each_child(child, ptree)				\
37	list_for_each_entry(child,  &ptree->children, sibling)
38
39#define toptree_for_each_child_safe(child, ptmp, ptree)			\
40	list_for_each_entry_safe(child, ptmp, &ptree->children, sibling)
41
42#define toptree_is_last(ptree)					\
43	((ptree->parent == NULL) ||				\
44	 (ptree->parent->children.prev == &ptree->sibling))
45
46#define toptree_for_each(ptree, cont, ttype)		\
47	for (ptree = toptree_first(cont, ttype);	\
48	     ptree != NULL;				\
49	     ptree = toptree_next(ptree, cont, ttype))
50
51#define toptree_for_each_safe(ptree, tmp, cont, ttype)		\
52	for (ptree = toptree_first(cont, ttype),		\
53		     tmp = toptree_next(ptree, cont, ttype);	\
54	     ptree != NULL;					\
55	     ptree = tmp,					\
56		     tmp = toptree_next(ptree, cont, ttype))
57
58#define toptree_for_each_sibling(ptree, start)			\
59	toptree_for_each(ptree, start->parent, start->level)
60
61#endif /* S390_TOPTREE_H */