From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E138130F7EB; Tue, 28 Jul 2026 09:00:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.92.199 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785229246; cv=none; b=vGKKGsOnsmKvyV1es/VHKVK73Ezk1zU7fhlY3Ywom3x0ray9sXRjmZ8gao0lRvSXdzD2n+5nnatXTTcJoOydhT/FO1GdAlzN3dugqvlAE2+qh9QguaExNvAjWbKkhYj5kv1jDjDUTdIeGYEy8CN6qAmlItWs7J7IcUWgjIyx4hA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785229246; c=relaxed/simple; bh=1E+WiIhxfCF+BmpeT99+thjLM7UpiuUs6zvYms+2ZJs=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=nYd/AKIReccXmF051Z0qZiDoc1ggMCMQI9ARMxjghdvZFDf6FDVYoLbsSIjqPNvfOyz8ih01slBmltULqcLf/XvF9YCHHaTVj23GOtDZrFgMvpJzAtSxQN4pSZp9AQQL28gVpTBTXiYDma8QwAL4161vTtqE5ok2hqkaR9EON8k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org; spf=pass smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=kjmOHnWZ; arc=none smtp.client-ip=90.155.92.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="kjmOHnWZ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=CFhvyPp5gmtgnWdR74C0fdTPz/7b6ziQzg1anV3vHgk=; b=kjmOHnWZLIcgKxUEJESBBLp45P zeCmGgeTYYhgB6eXIeKRZOHBWQHCBvF4u6jNy02CMNtqTfyLifniTNiK5vqSNiZD76jBm9H98+CoL oAmY4SKaZBk4hbE//IVa4Asm317cjf8G/xVZ1JcT7r6aOyFIODAVQhnUl5VhEA+13VZxaY1dBs7hJ YG3DC/rIMbrV6Jt+D66zqw4LV/AuDWEs2CSLt4yPQ3mkel+VaqzqF0ZHP6plTYt8HEQPEHGHGdPrc RbMsx4TVxajFbU5vfzxQIr0uKFLSO6ParTeV8s1egQsko6bPMNOhmzOYk3bQV1Rpb3fYY2p6HCv4R pkoXoiHg==; Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.99.2 #2 (Red Hat Linux)) id 1wodfy-00000004muI-39Hz; Tue, 28 Jul 2026 09:00:39 +0000 Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000) id 12BAF300E8B; Tue, 28 Jul 2026 11:00:37 +0200 (CEST) Date: Tue, 28 Jul 2026 11:00:37 +0200 From: Peter Zijlstra To: linux-kernel@vger.kernel.org Cc: linux-tip-commits@vger.kernel.org, "Denis V. Lunev" , Dave Hansen , "Kiryl Shutsemau (Meta)" , x86@kernel.org Subject: Re: [tip: x86/mm] x86/mm/pat: Take cpa_lock around large-page collapse Message-ID: <20260728090037.GF49951@noisy.programming.kicks-ass.net> References: <20260715183453.2381141-1-den@openvz.org> <178418886773.1844600.15146928511649606123.tip-bot2@tip-bot2> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <178418886773.1844600.15146928511649606123.tip-bot2@tip-bot2> On Thu, Jul 16, 2026 at 08:01:07AM -0000, tip-bot2 for Denis V. Lunev wrote: > diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c > index e9b4083..b1e780a 100644 > --- a/arch/x86/mm/pat/set_memory.c > +++ b/arch/x86/mm/pat/set_memory.c > @@ -417,6 +417,8 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) > int collapsed = 0; > int i; > > + spin_lock(&cpa_lock); > + > if (cpa->flags & (CPA_PAGES_ARRAY | CPA_ARRAY)) { > for (i = 0; i < cpa->numpages; i++) > collapsed += collapse_large_pages(__cpa_addr(cpa, i), > @@ -430,8 +432,10 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) > collapsed += collapse_large_pages(addr, &pgtables); > } > > - if (!collapsed) > + if (!collapsed) { > + spin_unlock(&cpa_lock); > return; > + } > > flush_tlb_all(); > > @@ -439,6 +443,8 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) > list_del(&ptdesc->pt_list); > pagetable_free(ptdesc); > } > + > + spin_unlock(&cpa_lock); > } > > static void cpa_flush(struct cpa_data *cpa, int cache) *groan* Can we pretty please write it like so? diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 1f2a2ba9ce57..f90f90bd879f 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -417,7 +417,7 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) int collapsed = 0; int i; - spin_lock(&cpa_lock); + guard(spinlock)(&cpa_lock); if (cpa->flags & (CPA_PAGES_ARRAY | CPA_ARRAY)) { for (i = 0; i < cpa->numpages; i++) @@ -432,10 +432,8 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) collapsed += collapse_large_pages(addr, &pgtables); } - if (!collapsed) { - spin_unlock(&cpa_lock); + if (!collapsed) return; - } flush_tlb_all(); @@ -443,8 +441,6 @@ static void cpa_collapse_large_pages(struct cpa_data *cpa) list_del(&ptdesc->pt_list); pagetable_free(ptdesc); } - - spin_unlock(&cpa_lock); } static void cpa_flush(struct cpa_data *cpa, int cache)