for_each_cpu_andnot(9)
π for_each_cpu_andnot(9) β Kernel API Manual, but make it make sense π
okay so bestie, welcome to the <pink>Kernel API Manual</pink> β¨ β this one's a macro, it's iconic, and it's about to save you so much temporary-mask drama. Let's get into it π¦
β¨ NAME β¨
for_each_cpu_andnot β loop over every cpu that's chillin' in one mask but not in the other. it's giving "you're invited but she's not" π
πΈ SYNOPSIS πΈ
for_each_cpu_andnot (cpu , mask1 , mask2 );
π ARGUMENTS π
cpuβ the iterator, an (optionally unsigned) integer. it's the little counter that goes brrr through your cpus π₯mask1β pointer to the first cpumask. the "yes bestie" list πmask2β pointer to the second cpumask. the "nope, excluded" list π
π¦ DESCRIPTION π¦
so here's the tea β: this macro literally saves you from declaring a temporary CPU mask in, like, a million different places. no cap. it is equivalent to:
struct cpumask tmp; cpumask_andnot(tmp, mask1, mask2); for_each_cpu(cpu, tmp) ...
like, same energy, less clutter. obsessed π
lowkey important: after the loop finishes,cpuis>= nr_cpu_ids. fr fr, don't be surprised by that, it's by design β¨
π SEE ALSO π
Kernel file ./include/linux/cpumask.h β and honestly, the whole cpumask friend group showed up. main character energy all around π
cpumask_pr_args(9),cpumask_first(9),cpumask_first_zero(9),cpumask_first_and(9),cpumask_first_andnot(9),cpumask_first_and_and(9),cpumask_last(9)cpumask_next(9),cpumask_next_zero(9),cpumask_next_and(9),cpumask_next_andnot(9),cpumask_next_and_wrap(9),cpumask_next_wrap(9),cpumask_random(9)for_each_cpu(9),for_each_cpu_wrap(9),for_each_cpu_and(9),for_each_cpu_or(9),for_each_cpu_from(9)cpumask_any_but(9),cpumask_any_and_but(9),cpumask_any_andnot_but(9)cpumask_nth(9),cpumask_nth_and(9),cpumask_nth_and_andnot(9)cpumask_set_cpu(9),cpumask_clear_cpus(9),cpumask_clear_cpu(9)cpumask_test_cpu(9),cpumask_test_and_set_cpu(9),cpumask_test_and_clear_cpu(9)cpumask_setall(9),cpumask_clear(9)cpumask_and(9),cpumask_or(9),cpumask_weighted_or(9),cpumask_xor(9),cpumask_andnot(9)cpumask_equal(9),cpumask_or_equal(9),cpumask_intersects(9),cpumask_subset(9)cpumask_empty(9),cpumask_full(9)cpumask_weight(9),cpumask_weight_and(9),cpumask_weight_andnot(9)cpumask_shift_right(9),cpumask_shift_left(9)cpumask_copy(9),cpumask_any(9),cpumask_any_and(9),cpumask_of(9)cpumask_parse_user(9),cpumask_parselist_user(9),cpumask_parse(9),cpulist_parse(9),cpumask_size(9)alloc_cpumask_var(9),to_cpumask(9),num_online_cpus(9)cpumap_print_bitmask_to_buf(9),cpumap_print_list_to_buf(9)
and that's the whole page, bestie π«Ά this lil macro came from ./include/linux and it's dated October 2026 β go forth and iterate responsibly, mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms