From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (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 82DA046D2A5 for ; Wed, 29 Jul 2026 11:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785323590; cv=none; b=PtvLDL+/QA5ne8qQFAaelJB8AK+PnKRU10e62T8v5mQq5aHGdgCARsYDl8IykZ5Uubp872NlKK4oLlpBp8o4ow4j4sd9mI/AcHV8nGlbHH2It6Ey40rkKEhEaNL95GqFq4O8DVKxo/u2GZpTeovdWEhU/tGQkxHqOO4lYhO6qnM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785323590; c=relaxed/simple; bh=WnmcIE447MRrPYrQN5mshinZdu9lG45sGnGLePAzEjQ=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=UPrNppfBPZrEoAvPQFNrFlEEiuSK+FpL0tSd9nDJ4cQIR08SIbN05h4y/h65DxS4Hc0VXrEX0IFrREWTtrO1Ydj5TbnzU7UBWMPTa9SEWoPACi4LW6reMFlFgmASpV35wp47myLnUm1alFSceM/1o1a/jLLTP6gsvHrbWAwK7KE= 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=Ir/iBewO; arc=none smtp.client-ip=90.155.50.34 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="Ir/iBewO" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=nTyZ9PRJp3TwjvvPuCfZvXx+PS2jKEDPXYVBjSEwgD8=; b=Ir/iBewOL5tE27E5VqmhfuOTiC BkQytvIaHJzDLW2RbnI/uuYTj/DsPq5UXSpvV9l3OZ8qUnvJNAOkzphrsl+LBXp5531Fl19SOn/M3 KbEVhkjuY528qmdv7vKzGVvrw8mAfq93xoKkLdt9LNLvs+Iy5SCBHNJRF8oUbbYHKAPXRSZR1rtBU H6qOFjZEMjIpN9FyMxxp0MqxlnqJfy2ULcvqSXmFTKVNpIE1BaupC7svMZcUONzfc8IOgs8eltzs9 y3jbCoQv8DT2/4mgtwOg5URfgzK7BpJMp1hiTh7xo3vydTP4G7Wd1Q2vNBlSO+PtIUh4NAtGM48ZY DvcU6WNA==; Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.99.1 #2 (Red Hat Linux)) id 1wp2CU-00000001xXw-3ea2; Wed, 29 Jul 2026 11:11:54 +0000 Received: by noisy.programming.kicks-ass.net (Postfix, from userid 0) id B75E930114F; Wed, 29 Jul 2026 13:11:40 +0200 (CEST) Message-ID: <20260729111119.488154104@infradead.org> User-Agent: quilt/0.68 Date: Wed, 29 Jul 2026 13:08:09 +0200 From: Peter Zijlstra To: Dave Hansen Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, Andy Lutomirski , Borislav Petkov , David Hildenbrand , Ingo Molnar , Jason Gunthorpe , Juergen Gross , Kevin Tian , Kiryl Shutsemau , "Liam R. Howlett" , Lorenzo Stoakes , Lu Baolu , Mike Rapoport , "H. Peter Anvin" , Shakeel Butt , Suren Baghdasaryan , Thomas Gleixner , Toshi Kani , Vlastimil Babka , Will Deacon , linux-mm@kvack.org, x86@kernel.org Subject: [PATCH 2/3] x86/mm: Use guard() for pgd_lock References: <20260729110807.797920433@infradead.org> 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=UTF-8 Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/mm/pat/set_memory.c | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -85,9 +85,8 @@ static unsigned long direct_pages_count[ void update_page_count(int level, unsigned long pages) { /* Protect against CPA */ - spin_lock(&pgd_lock); + guard(spinlock)(&pgd_lock); direct_pages_count[level] += pages; - spin_unlock(&pgd_lock); } static void split_page_count(int level) @@ -1075,16 +1074,11 @@ static int __should_split_large_page(pte static int should_split_large_page(pte_t *kpte, unsigned long address, struct cpa_data *cpa) { - int do_split; - if (cpa->force_split) return 1; - spin_lock(&pgd_lock); - do_split = __should_split_large_page(kpte, address, cpa); - spin_unlock(&pgd_lock); - - return do_split; + guard(spinlock)(&pgd_lock); + return __should_split_large_page(kpte, address, cpa); } static void split_set_pte(struct cpa_data *cpa, pte_t *pte, unsigned long pfn, @@ -1135,16 +1129,14 @@ __split_large_page(struct cpa_data *cpa, bool nx, rw; pte_t *tmp; - spin_lock(&pgd_lock); + guard(spinlock)(&pgd_lock); /* * Check for races, another CPU might have split this page * up for us already: */ tmp = _lookup_address_cpa(cpa, address, &level, &nx, &rw); - if (tmp != kpte) { - spin_unlock(&pgd_lock); + if (tmp != kpte) return 1; - } paravirt_alloc_pte(&init_mm, page_to_pfn(base)); @@ -1177,7 +1169,6 @@ __split_large_page(struct cpa_data *cpa, break; default: - spin_unlock(&pgd_lock); return 1; } @@ -1225,7 +1216,6 @@ __split_large_page(struct cpa_data *cpa, * just split large page entry. */ flush_tlb_all(); - spin_unlock(&pgd_lock); return 0; } @@ -1373,7 +1363,7 @@ static int collapse_pud_page(pud_t *pud, */ static int collapse_large_pages(unsigned long addr, struct list_head *pgtables) { - int collapsed = 0; + int collapsed; pgd_t *pgd; p4d_t *p4d; pud_t *pud; @@ -1381,26 +1371,24 @@ static int collapse_large_pages(unsigned addr &= PMD_MASK; - spin_lock(&pgd_lock); + guard(spinlock)(&pgd_lock); pgd = pgd_offset_k(addr); if (pgd_none(*pgd)) - goto out; + return 0; p4d = p4d_offset(pgd, addr); if (p4d_none(*p4d)) - goto out; + return 0; pud = pud_offset(p4d, addr); if (!pud_present(*pud) || pud_leaf(*pud)) - goto out; + return 0; pmd = pmd_offset(pud, addr); if (!pmd_present(*pmd) || pmd_leaf(*pmd)) - goto out; + return 0; collapsed = collapse_pmd_page(pmd, addr, pgtables); if (collapsed) collapsed += collapse_pud_page(pud, addr, pgtables); -out: - spin_unlock(&pgd_lock); return collapsed; }