/ duct-tape / xnu / osfmk / kern / affinity.h
affinity.h
 1  /*
 2   * Copyright (c) 2007-2008 Apple Inc. All rights reserved.
 3   *
 4   * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
 5   *
 6   * This file contains Original Code and/or Modifications of Original Code
 7   * as defined in and that are subject to the Apple Public Source License
 8   * Version 2.0 (the 'License'). You may not use this file except in
 9   * compliance with the License. The rights granted to you under the License
10   * may not be used to create, or enable the creation or redistribution of,
11   * unlawful or unlicensed copies of an Apple operating system, or to
12   * circumvent, violate, or enable the circumvention or violation of, any
13   * terms of an Apple operating system software license agreement.
14   *
15   * Please obtain a copy of the License at
16   * http://www.opensource.apple.com/apsl/ and read it before using this file.
17   *
18   * The Original Code and all software distributed under the License are
19   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20   * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21   * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22   * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23   * Please see the License for the specific language governing rights and
24   * limitations under the License.
25   *
26   * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27   */
28  
29  #ifdef  XNU_KERNEL_PRIVATE
30  
31  #ifndef _KERN_AFFINITY_H_
32  #define _KERN_AFFINITY_H_
33  
34  #ifdef  MACH_KERNEL_PRIVATE
35  
36  #include <kern/queue.h>
37  #include <kern/processor.h>
38  
39  /*
40   * An affinity set object represents a set of threads identified by the user
41   * to be sharing (cache) affinity. A task may have multiple affinity sets
42   * defined. Each set has dis-affinity other sets. Tasks related by inheritance
43   * may share the same affinity set namespace.
44   * Affinity sets are used to advise (hint) thread placement.
45   */
46  struct affinity_set {
47  	struct affinity_space *aset_space;      /* namespace */
48  	queue_chain_t   aset_affinities;        /* links affinities in group */
49  	queue_head_t    aset_threads;           /* threads in affinity set */
50  	uint32_t        aset_thread_count;      /* num threads in set */
51  	uint32_t        aset_tag;               /* user-assigned tag */
52  	uint32_t        aset_num;               /* kernel-assigned affinity */
53  	processor_set_t aset_pset;              /* processor set */
54  };
55  
56  extern boolean_t        thread_affinity_is_supported(void);
57  extern void             thread_affinity_dup(thread_t parent, thread_t child);
58  extern void             thread_affinity_terminate(thread_t thread);
59  extern void             task_affinity_create(
60  	task_t,
61  	task_t);
62  extern void             task_affinity_deallocate(
63  	task_t);
64  extern kern_return_t    task_affinity_info(
65  	task_t,
66  	task_info_t,
67  	mach_msg_type_number_t  *);
68  
69  #endif  /* MACH_KERNEL_PRIVATE */
70  
71  extern kern_return_t    thread_affinity_set(thread_t thread, uint32_t tag);
72  extern uint32_t         thread_affinity_get(thread_t thread);
73  extern void             thread_affinity_exec(thread_t thread);
74  
75  #endif  /* _KERN_AFFINITY_H_ */
76  
77  #endif  /* XNU_KERNEL_PRIVATE */