On Wed, 30 Jan 2019 09:42:06 +0900 Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> wrote: > > > > > > If we want to allow vfree() to sleep, at least we need to test with > > > kvmalloc() == vmalloc() (i.e. force kvmalloc()/kvfree() users to use > > > vmalloc()/vfree() path). For now, reverting the > > > "Context: Either preemptible task context or not-NMI interrupt." change > > > will be needed for stable kernels. > > > > So, the comment for vfree "May sleep if called *not* from interrupt > > context." is wrong? > > Commit bf22e37a641327e3 ("mm: add vfree_atomic()") says > > We are going to use sleeping lock for freeing vmap. However some > vfree() users want to free memory from atomic (but not from interrupt) > context. For this we add vfree_atomic() - deferred variation of vfree() > which can be used in any atomic context (except NMIs). > > and commit 52414d3302577bb6 ("kvfree(): fix misleading comment") made > > - * Context: Any context except NMI. > + * Context: Either preemptible task context or not-NMI interrupt. > > change. But I think that we converted kmalloc() to kvmalloc() without checking > context of kvfree() callers. Therefore, I think that kvfree() needs to use > vfree_atomic() rather than just saying "vfree() might sleep if called not in > interrupt context."... Whereabouts in the vfree() path can the kernel sleep?