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