This repository was archived by the owner on Mar 7, 2021. It is now read-only.

Description
@joshtriplett proposed a more ambitious but easier-to-use way to solve the GFP_ flag problem (see also #258): have something like a thread-local variable that tracks what GFP flags you're allowed to use. Then you can just call kmalloc(GFP_AUTO) and have it figure things out for you.
This would be worthwhile in the upstream C code, ultimately, but it seems to make sense to start by implementing it just for Rust, because we can do things like
with_gfp(GFP_ATOMIC, || {
let g = CriticalSectionGuard();
let something = Box::new(...);
})
and C doesn't quite have comparable syntax - you'd need to manually put things back when you're out of the critical section.