123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * NUMA support for s390
- *
- * A tree structure used for machine topology mangling
- *
- * Copyright IBM Corp. 2015
- */
- #ifndef S390_TOPTREE_H
- #define S390_TOPTREE_H
- #include <linux/cpumask.h>
- #include <linux/list.h>
- struct toptree {
- int level;
- int id;
- cpumask_t mask;
- struct toptree *parent;
- struct list_head sibling;
- struct list_head children;
- };
- struct toptree *toptree_alloc(int level, int id);
- void toptree_free(struct toptree *cand);
- void toptree_update_mask(struct toptree *cand);
- void toptree_unify(struct toptree *cand);
- struct toptree *toptree_get_child(struct toptree *cand, int id);
- void toptree_move(struct toptree *cand, struct toptree *target);
- int toptree_count(struct toptree *context, int level);
- struct toptree *toptree_first(struct toptree *context, int level);
- struct toptree *toptree_next(struct toptree *cur, struct toptree *context,
- int level);
- #define toptree_for_each_child(child, ptree) \
- list_for_each_entry(child, &ptree->children, sibling)
- #define toptree_for_each_child_safe(child, ptmp, ptree) \
- list_for_each_entry_safe(child, ptmp, &ptree->children, sibling)
- #define toptree_is_last(ptree) \
- ((ptree->parent == NULL) || \
- (ptree->parent->children.prev == &ptree->sibling))
- #define toptree_for_each(ptree, cont, ttype) \
- for (ptree = toptree_first(cont, ttype); \
- ptree != NULL; \
- ptree = toptree_next(ptree, cont, ttype))
- #define toptree_for_each_safe(ptree, tmp, cont, ttype) \
- for (ptree = toptree_first(cont, ttype), \
- tmp = toptree_next(ptree, cont, ttype); \
- ptree != NULL; \
- ptree = tmp, \
- tmp = toptree_next(ptree, cont, ttype))
- #define toptree_for_each_sibling(ptree, start) \
- toptree_for_each(ptree, start->parent, start->level)
- #endif /* S390_TOPTREE_H */
|