Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
2
#define __ASM_GENERIC_CPUMASK_ARRAY_H
3
 
4
/*
5
 * Array-based cpu bitmaps. An array of unsigned longs is used to contain
6
 * the bitmap, and then contained in a structure so it may be passed by
7
 * value.
8
 */
9
 
10
#define CPU_ARRAY_SIZE          BITS_TO_LONGS(NR_CPUS)
11
 
12
#define cpu_set(cpu, map)               set_bit(cpu, (map).mask)
13
#define cpu_clear(cpu, map)             clear_bit(cpu, (map).mask)
14
#define cpu_isset(cpu, map)             test_bit(cpu, (map).mask)
15
#define cpu_test_and_set(cpu, map)      test_and_set_bit(cpu, (map).mask)
16
 
17
#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
18
#define cpus_or(dst,src1,src2)  bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
19
#define cpus_clear(map)         bitmap_clear((map).mask, NR_CPUS)
20
#define cpus_complement(map)    bitmap_complement((map).mask, NR_CPUS)
21
#define cpus_equal(map1, map2)  bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
22
#define cpus_empty(map)         bitmap_empty(map.mask, NR_CPUS)
23
#define cpus_weight(map)                bitmap_weight((map).mask, NR_CPUS)
24
#define cpus_shift_right(d, s, n)       bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
25
#define cpus_shift_left(d, s, n)        bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
26
#define first_cpu(map)          find_first_bit((map).mask, NR_CPUS)
27
#define next_cpu(cpu, map)      find_next_bit((map).mask, NR_CPUS, cpu + 1)
28
 
29
/* only ever use this for things that are _never_ used on large boxen */
30
#define cpus_coerce(map)        ((map).mask[0])
31
#define cpus_promote(map)       ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
32
                                        __cpu_mask.mask[0] = map;       \
33
                                        __cpu_mask;                     \
34
                                })
35
#define cpumask_of_cpu(cpu)     ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
36
                                        cpu_set(cpu, __cpu_mask);       \
37
                                        __cpu_mask;                     \
38
                                })
39
#define any_online_cpu(map)                     \
40
({                                              \
41
        cpumask_t __tmp__;                      \
42
        cpus_and(__tmp__, map, cpu_online_map); \
43
        find_first_bit(__tmp__.mask, NR_CPUS);  \
44
})
45
 
46
 
47
/*
48
 * um, these need to be usable as static initializers
49
 */
50
#define CPU_MASK_ALL    { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
51
#define CPU_MASK_NONE   { {[0 ... CPU_ARRAY_SIZE-1] =  0UL} }
52
 
53
#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */