4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
19 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
20 * Copyright (c) 2012, Intel Corporation.
23 * This file is part of Lustre, http://www.lustre.org/
24 * Lustre is a trademark of Sun Microsystems, Inc.
26 * Please see comments in libcfs/include/libcfs/libcfs_cpu.h for introduction
28 * Author: liang@whamcloud.com
31 #define DEBUG_SUBSYSTEM S_LNET
33 #include <linux/libcfs/libcfs.h>
35 /** Global CPU partition table */
36 struct cfs_cpt_table *cfs_cpt_table __read_mostly;
37 EXPORT_SYMBOL(cfs_cpt_table);
39 #ifndef HAVE_LIBCFS_CPT
41 #define CFS_CPU_VERSION_MAGIC 0xbabecafe
43 struct cfs_cpt_table *
44 cfs_cpt_table_alloc(unsigned int ncpt)
46 struct cfs_cpt_table *cptab;
49 CERROR("Can't support cpu partition number %d\n", ncpt);
53 LIBCFS_ALLOC(cptab, sizeof(*cptab));
55 cptab->ctb_version = CFS_CPU_VERSION_MAGIC;
56 node_set(0, cptab->ctb_nodemask);
57 cptab->ctb_nparts = ncpt;
62 EXPORT_SYMBOL(cfs_cpt_table_alloc);
65 cfs_cpt_table_free(struct cfs_cpt_table *cptab)
67 LASSERT(cptab->ctb_version == CFS_CPU_VERSION_MAGIC);
69 LIBCFS_FREE(cptab, sizeof(*cptab));
71 EXPORT_SYMBOL(cfs_cpt_table_free);
75 cfs_cpt_table_print(struct cfs_cpt_table *cptab, char *buf, int len)
79 rc = snprintf(buf, len, "%d\t: %d\n", 0, 0);
86 EXPORT_SYMBOL(cfs_cpt_table_print);
87 #endif /* CONFIG_SMP */
90 cfs_cpt_number(struct cfs_cpt_table *cptab)
94 EXPORT_SYMBOL(cfs_cpt_number);
97 cfs_cpt_weight(struct cfs_cpt_table *cptab, int cpt)
101 EXPORT_SYMBOL(cfs_cpt_weight);
104 cfs_cpt_online(struct cfs_cpt_table *cptab, int cpt)
108 EXPORT_SYMBOL(cfs_cpt_online);
111 cfs_cpt_nodemask(struct cfs_cpt_table *cptab, int cpt)
113 return &cptab->ctb_nodemask;
115 EXPORT_SYMBOL(cfs_cpt_cpumask);
118 cfs_cpt_set_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu)
122 EXPORT_SYMBOL(cfs_cpt_set_cpu);
125 cfs_cpt_unset_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu)
128 EXPORT_SYMBOL(cfs_cpt_unset_cpu);
131 cfs_cpt_set_cpumask(struct cfs_cpt_table *cptab, int cpt, cpumask_t *mask)
135 EXPORT_SYMBOL(cfs_cpt_set_cpumask);
138 cfs_cpt_unset_cpumask(struct cfs_cpt_table *cptab, int cpt, cpumask_t *mask)
141 EXPORT_SYMBOL(cfs_cpt_unset_cpumask);
144 cfs_cpt_set_node(struct cfs_cpt_table *cptab, int cpt, int node)
148 EXPORT_SYMBOL(cfs_cpt_set_node);
151 cfs_cpt_unset_node(struct cfs_cpt_table *cptab, int cpt, int node)
154 EXPORT_SYMBOL(cfs_cpt_unset_node);
157 cfs_cpt_set_nodemask(struct cfs_cpt_table *cptab, int cpt, nodemask_t *mask)
161 EXPORT_SYMBOL(cfs_cpt_set_nodemask);
164 cfs_cpt_unset_nodemask(struct cfs_cpt_table *cptab, int cpt, nodemask_t *mask)
167 EXPORT_SYMBOL(cfs_cpt_unset_nodemask);
170 cfs_cpt_clear(struct cfs_cpt_table *cptab, int cpt)
173 EXPORT_SYMBOL(cfs_cpt_clear);
176 cfs_cpt_spread_node(struct cfs_cpt_table *cptab, int cpt)
180 EXPORT_SYMBOL(cfs_cpt_spread_node);
183 cfs_cpu_ht_nsiblings(int cpu)
187 EXPORT_SYMBOL(cfs_cpu_ht_nsiblings);
190 cfs_cpt_current(struct cfs_cpt_table *cptab, int remap)
194 EXPORT_SYMBOL(cfs_cpt_current);
197 cfs_cpt_of_cpu(struct cfs_cpt_table *cptab, int cpu)
201 EXPORT_SYMBOL(cfs_cpt_of_cpu);
204 cfs_cpt_bind(struct cfs_cpt_table *cptab, int cpt)
208 EXPORT_SYMBOL(cfs_cpt_bind);
214 cfs_cpt_table_free(cfs_cpt_table);
215 cfs_cpt_table = NULL;
222 cfs_cpt_table = cfs_cpt_table_alloc(1);
224 return cfs_cpt_table ? 0 : -1;
227 #endif /* HAVE_LIBCFS_CPT */