Hello Vasily, On 12/23/21 08:21, Vasily Averin wrote:
I would prefer to release memory ASAP if it's possible. What do you think about this change? --- a/mm/util.c +++ b/mm/util.c @@ -614,9 +614,12 @@ EXPORT_SYMBOL(kvmalloc_node); */ void kvfree(const void *addr) { - if (is_vmalloc_addr(addr)) - vfree(addr); - else + if (is_vmalloc_addr(addr)) { + if (in_atomic()) + vfree_atomic(); + else + vfree(addr); + } else kfree(addr); } EXPORT_SYMBOL(kvfree);
Unfortunately this cannot work:
/* * Are we running in atomic context? WARNING: this macro cannot * always detect atomic context; in particular, it cannot know about * held spinlocks in non-preemptible kernels. Thus it should not be * used in the general case to determine whether sleeping is possible. * Do not use in_atomic() in driver code. */ #define in_atomic() (preempt_count() != 0)
-- Manfred