On Thu 18-02-21 11:20:51, Muchun Song wrote: > On Thu, Feb 18, 2021 at 9:00 AM Mike Kravetz <mike.kravetz@xxxxxxxxxx> wrote: > > > > On 2/17/21 12:13 AM, Michal Hocko wrote: > > > On Tue 16-02-21 11:44:34, Mike Kravetz wrote: > > > [...] > > >> If we are not going to do the allocations under the lock, then we will need > > >> to either preallocate or take the workqueue approach. > > > > > > We can still drop the lock temporarily right? As we already do before > > > calling destroy_compound_gigantic_page... > > > > > > > Yes we can. I forgot about that. > > > > Actually, very little of what update_and_free_page does needs to be done > > under the lock. Perhaps, just decrementing the global count and clearing > > the destructor so PageHuge() is no longer true. > > Right. I have another question about using GFP flags. Michal > suggested using GFP_KERNEL instead of GFP_ATOMIC to > save reserve memory. From your last email, you suggested > using non-blocking allocation GFP flags (perhaps GFP_NOWAIT). > > Hi Mike and Michal, > > What is the consensus we finally reached? Thanks. If the lock can be dropped and you make sure the final put on page is not called from an atomic context then use (for starter) GFP_KERNEL | __GFP_NORETRY | __GFP_THISNODE. I have intentionaly dropped __GFP_NOWARN because likely want to hear about the failure so that we can evaluate how often this happens. This would be my recommendation. -- Michal Hocko SUSE Labs