diff options
Diffstat (limited to 'include/linux/cpumask.h')
| -rw-r--r-- | include/linux/cpumask.h | 98 |
1 files changed, 64 insertions, 34 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 21e1dd43e52a..d4bf52603e6b 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -339,36 +339,6 @@ extern cpumask_t cpu_mask_all; | |||
| 339 | #endif | 339 | #endif |
| 340 | #define CPUMASK_PTR(v, m) cpumask_t *v = &(m->v) | 340 | #define CPUMASK_PTR(v, m) cpumask_t *v = &(m->v) |
| 341 | 341 | ||
| 342 | #define cpumask_scnprintf(buf, len, src) \ | ||
| 343 | __cpumask_scnprintf((buf), (len), &(src), NR_CPUS) | ||
| 344 | static inline int __cpumask_scnprintf(char *buf, int len, | ||
| 345 | const cpumask_t *srcp, int nbits) | ||
| 346 | { | ||
| 347 | return bitmap_scnprintf(buf, len, srcp->bits, nbits); | ||
| 348 | } | ||
| 349 | |||
| 350 | #define cpumask_parse_user(ubuf, ulen, dst) \ | ||
| 351 | __cpumask_parse_user((ubuf), (ulen), &(dst), NR_CPUS) | ||
| 352 | static inline int __cpumask_parse_user(const char __user *buf, int len, | ||
| 353 | cpumask_t *dstp, int nbits) | ||
| 354 | { | ||
| 355 | return bitmap_parse_user(buf, len, dstp->bits, nbits); | ||
| 356 | } | ||
| 357 | |||
| 358 | #define cpulist_scnprintf(buf, len, src) \ | ||
| 359 | __cpulist_scnprintf((buf), (len), &(src), NR_CPUS) | ||
| 360 | static inline int __cpulist_scnprintf(char *buf, int len, | ||
| 361 | const cpumask_t *srcp, int nbits) | ||
| 362 | { | ||
| 363 | return bitmap_scnlistprintf(buf, len, srcp->bits, nbits); | ||
| 364 | } | ||
| 365 | |||
| 366 | #define cpulist_parse(buf, dst) __cpulist_parse((buf), &(dst), NR_CPUS) | ||
| 367 | static inline int __cpulist_parse(const char *buf, cpumask_t *dstp, int nbits) | ||
| 368 | { | ||
| 369 | return bitmap_parselist(buf, dstp->bits, nbits); | ||
| 370 | } | ||
| 371 | |||
| 372 | #define cpu_remap(oldbit, old, new) \ | 342 | #define cpu_remap(oldbit, old, new) \ |
| 373 | __cpu_remap((oldbit), &(old), &(new), NR_CPUS) | 343 | __cpu_remap((oldbit), &(old), &(new), NR_CPUS) |
| 374 | static inline int __cpu_remap(int oldbit, | 344 | static inline int __cpu_remap(int oldbit, |
| @@ -540,9 +510,6 @@ extern cpumask_t cpu_active_map; | |||
| 540 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | 510 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ |
| 541 | } | 511 | } |
| 542 | 512 | ||
| 543 | /* This produces more efficient code. */ | ||
| 544 | #define nr_cpumask_bits NR_CPUS | ||
| 545 | |||
| 546 | #else /* NR_CPUS > BITS_PER_LONG */ | 513 | #else /* NR_CPUS > BITS_PER_LONG */ |
| 547 | 514 | ||
| 548 | #define CPU_BITS_ALL \ | 515 | #define CPU_BITS_ALL \ |
| @@ -550,9 +517,15 @@ extern cpumask_t cpu_active_map; | |||
| 550 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | 517 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ |
| 551 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | 518 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ |
| 552 | } | 519 | } |
| 520 | #endif /* NR_CPUS > BITS_PER_LONG */ | ||
| 553 | 521 | ||
| 522 | #ifdef CONFIG_CPUMASK_OFFSTACK | ||
| 523 | /* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, | ||
| 524 | * not all bits may be allocated. */ | ||
| 554 | #define nr_cpumask_bits nr_cpu_ids | 525 | #define nr_cpumask_bits nr_cpu_ids |
| 555 | #endif /* NR_CPUS > BITS_PER_LONG */ | 526 | #else |
| 527 | #define nr_cpumask_bits NR_CPUS | ||
| 528 | #endif | ||
| 556 | 529 | ||
| 557 | /* verify cpu argument to cpumask_* operators */ | 530 | /* verify cpu argument to cpumask_* operators */ |
| 558 | static inline unsigned int cpumask_check(unsigned int cpu) | 531 | static inline unsigned int cpumask_check(unsigned int cpu) |
| @@ -946,6 +919,63 @@ static inline void cpumask_copy(struct cpumask *dstp, | |||
| 946 | #define cpumask_of(cpu) (get_cpu_mask(cpu)) | 919 | #define cpumask_of(cpu) (get_cpu_mask(cpu)) |
| 947 | 920 | ||
| 948 | /** | 921 | /** |
| 922 | * cpumask_scnprintf - print a cpumask into a string as comma-separated hex | ||
| 923 | * @buf: the buffer to sprintf into | ||
| 924 | * @len: the length of the buffer | ||
| 925 | * @srcp: the cpumask to print | ||
| 926 | * | ||
| 927 | * If len is zero, returns zero. Otherwise returns the length of the | ||
| 928 | * (nul-terminated) @buf string. | ||
| 929 | */ | ||
| 930 | static inline int cpumask_scnprintf(char *buf, int len, | ||
| 931 | const struct cpumask *srcp) | ||
| 932 | { | ||
| 933 | return bitmap_scnprintf(buf, len, srcp->bits, nr_cpumask_bits); | ||
| 934 | } | ||
| 935 | |||
| 936 | /** | ||
| 937 | * cpumask_parse_user - extract a cpumask from a user string | ||
| 938 | * @buf: the buffer to extract from | ||
| 939 | * @len: the length of the buffer | ||
| 940 | * @dstp: the cpumask to set. | ||
| 941 | * | ||
| 942 | * Returns -errno, or 0 for success. | ||
| 943 | */ | ||
| 944 | static inline int cpumask_parse_user(const char __user *buf, int len, | ||
| 945 | struct cpumask *dstp) | ||
| 946 | { | ||
| 947 | return bitmap_parse_user(buf, len, dstp->bits, nr_cpumask_bits); | ||
| 948 | } | ||
| 949 | |||
| 950 | /** | ||
| 951 | * cpulist_scnprintf - print a cpumask into a string as comma-separated list | ||
| 952 | * @buf: the buffer to sprintf into | ||
| 953 | * @len: the length of the buffer | ||
| 954 | * @srcp: the cpumask to print | ||
| 955 | * | ||
| 956 | * If len is zero, returns zero. Otherwise returns the length of the | ||
| 957 | * (nul-terminated) @buf string. | ||
| 958 | */ | ||
| 959 | static inline int cpulist_scnprintf(char *buf, int len, | ||
| 960 | const struct cpumask *srcp) | ||
| 961 | { | ||
| 962 | return bitmap_scnlistprintf(buf, len, srcp->bits, nr_cpumask_bits); | ||
| 963 | } | ||
| 964 | |||
| 965 | /** | ||
| 966 | * cpulist_parse_user - extract a cpumask from a user string of ranges | ||
| 967 | * @buf: the buffer to extract from | ||
| 968 | * @len: the length of the buffer | ||
| 969 | * @dstp: the cpumask to set. | ||
| 970 | * | ||
| 971 | * Returns -errno, or 0 for success. | ||
| 972 | */ | ||
| 973 | static inline int cpulist_parse(const char *buf, struct cpumask *dstp) | ||
| 974 | { | ||
| 975 | return bitmap_parselist(buf, dstp->bits, nr_cpumask_bits); | ||
| 976 | } | ||
| 977 | |||
| 978 | /** | ||
| 949 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | 979 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * |
| 950 | * @bitmap: the bitmap | 980 | * @bitmap: the bitmap |
| 951 | * | 981 | * |
