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);
} EXPORT_SYMBOL(kvfree);} else kfree(addr);
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