Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp7315859pxb; Thu, 18 Feb 2021 07:05:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJzyqt9VI5Rp/OTAYOCCuGOBGzbQ7l61A6pKaZFhrQ/gGCL3bsCzEJIBi+l5Fx4wLajo3ToF X-Received: by 2002:a17:906:1389:: with SMTP id f9mr4459967ejc.442.1613660746273; Thu, 18 Feb 2021 07:05:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613660746; cv=none; d=google.com; s=arc-20160816; b=yENCw/Vk7+4ccMbDwT54Y/Zu15XvdyNBJ59kC41G49GESQMuRKYdUD/9AGAwYq91Mj nLlQWZ7jKFXDf/Itk0U8TVCl0drKcqSF00iXxbJOparwsCC+E0USTXy6fqjlHl8aCzIW 5GlGsqomKpP1hZUps8aOuxVxEzyfeiG7kfBAmGTAm7KhGwOxpisI2C7v0fy2UcRD5g7W 1Hnvf1iZUgdrZCVXWEoWg8l7Mzcn7ted/BDta5R2KjJljXLhg5ax82dvzwlqU+3hyBiT KIbPoQ2RPTHA86NZmyO7LIzCdofpEJgrQxd6XpXyJrVs3+WZJgup3CHdaBKTBCC2nxRP BsZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=my7Llvrq4fVu5U4ytT0HWufvyvA3sg6mSRU0ZcpXfMk=; b=HSfWBUIRvh/l36ewePXLNEVWYwYK/2dhGyUcIbr8OYp5UCURbFvmINEyV0NFHx6ZCu aNYJWIGxggfWzd3LFvCMO7hFySgPLl3+xyKsF51vT6d4ghC6KbDtUiEWCYzuQbTcSCEX LKqXHCMJL6fIPPgQtV0cyAlcM4lWjjYOf9Wtikcg5HtmQ+YuRuPGPYzE5kr1OealR7M7 f6RSRI+Orf+qUe/TLTrig3yCoSn8vlspVtLrOQKHcTA7vUnZeDBaCt++XDXoh3572D5v 0YNgmqK2lJt3ffISpYQ4mZ1dwy8Ip/QgeX6gUhVDoEcFebGUmquAZBqBdCXhSA96fpSi XcVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.com header.s=susede1 header.b=lq1e6Glx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=suse.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a11si3771870edn.318.2021.02.18.07.05.20; Thu, 18 Feb 2021 07:05:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=susede1 header.b=lq1e6Glx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=suse.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230423AbhBRPCe (ORCPT + 99 others); Thu, 18 Feb 2021 10:02:34 -0500 Received: from mx2.suse.de ([195.135.220.15]:35714 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232119AbhBRMxq (ORCPT ); Thu, 18 Feb 2021 07:53:46 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1613652765; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=my7Llvrq4fVu5U4ytT0HWufvyvA3sg6mSRU0ZcpXfMk=; b=lq1e6GlxqqQOwkGrgILpNZyyk4ZcCqyTqKsUuqrd4A7/PG+rF9zLpt2c8n2jE7yWA1TytV AnygHSvglydRiAV+fxNpBPVo5NcY8gqlbtUzLLu3CbgwTuLyn1mZLne0+1JkfWH4lLCpS4 Qemt6aycGuU9agUx4tklwXWiUrqpU5I= Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 26511AD78; Thu, 18 Feb 2021 12:52:45 +0000 (UTC) Date: Thu, 18 Feb 2021 13:52:38 +0100 From: Michal Hocko To: Oscar Salvador Cc: Andrew Morton , Mike Kravetz , David Hildenbrand , Muchun Song , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] mm: Make alloc_contig_range handle free hugetlb pages Message-ID: References: <20210217100816.28860-1-osalvador@suse.de> <20210217100816.28860-2-osalvador@suse.de> <20210218100917.GA4842@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210218100917.GA4842@localhost.localdomain> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu 18-02-21 11:09:17, Oscar Salvador wrote: > On Wed, Feb 17, 2021 at 04:00:11PM +0100, Michal Hocko wrote: > > Is this really necessary? dissolve_free_huge_page will take care of this > > and the race windown you are covering is really tiny. > > Probably not, I was trying to shrink to race window as much as possible > but the call to dissolve_free_huge_page might be enough. > > > > + nid = page_to_nid(page); > > > + spin_unlock(&hugetlb_lock); > > > + > > > + /* > > > + * Before dissolving the page, we need to allocate a new one, > > > + * so the pool remains stable. > > > + */ > > > + new_page = alloc_fresh_huge_page(h, gfp_mask, nid, nmask, NULL); > > > > wrt. fallback to other zones, I haven't realized that the primary > > usecase is a form of memory offlining (from virt-mem). I am not yet sure > > what the proper behavior is in that case but if breaking hugetlb pools, > > similar to the normal hotplug operation, is viable then this needs a > > special mode. We do not want a random alloc_contig_range user to do the > > same. So for starter I would go with __GFP_THISNODE here. > > Ok, makes sense. > __GFP_THISNODE will not allow fallback to other node's zones. > Since we only allow the nid the page belongs to, nodemask should be > NULL, right? I would have to double check because hugetlb has a slightly different expectations from nodemask than the page allocator. The later translates that to all possible nodes but hugetlb API tries to dereference nodes. Maybe THIS node special cases it somewhere. > > > + if (!h) > > > + /* > > > + * The page might have been dissolved from under our feet. > > > + * If that is the case, return success as if we dissolved it > > > + * ourselves. > > > + */ > > > + return true; > > > > nit I would put the comment above the conditin for both cases. It reads > > more easily that way. At least without { }. > > Yes, makes sense. > > > Other than that I haven't noticed any surprises. > > I did. The 'put_page' call should be placed above, right after getting > the page. Otherwise, refcount == 1 and we will fail to dissolve the > new page if we need to (in case old page fails to be dissolved). > I already fixed that locally. I am not sure I follow. newly allocated pages is unreferenced unconditionally and the old page is not referenced by this path. -- Michal Hocko SUSE Labs