Open geofft opened 4 years ago
Hm, where would we stash the GFP flags? I'm not sure the kernel has a general thread-local mechanism. I think the usual play is to add a field to struct task_struct
, but I can imagine pushback for doing that just to support Rust ergonomics. per-cpu variables are widely supported, but those only work if we can ensure we're pinned to a core.
@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
and C doesn't quite have comparable syntax - you'd need to manually put things back when you're out of the critical section.