From nobody Thu Apr 2 23:53:36 2026 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3C11225775 for ; Sat, 14 Feb 2026 13:50:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771077047; cv=none; b=ZEiegdVcXOPhaSQE+3V9SQNfgGc2QGS9H0rKCdFdwizbBQyaPC8oqY1xyIJaOLxzuJ0PkVhTSomUy5Uaw/DwTYZsnPzvqWO3a/jHbzTptu2MLL3ulE7w8MnzQk/CtrZgl7yaV8wdDRcoYLafwRtq8qv1wl2b3ElSnkRcOvUt9c8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771077047; c=relaxed/simple; bh=cc+OGKhsMX5wOhojM8hgOCNbe6VAKaXuEdXzlSYSPn4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=NzCVwZaB/fN3Qm051gIXi7xOJO80Z1R+9jLt0C0Ffdl8F6p1uOvuC3IBiykSvzXz7iUUFTN4UPzxxaSQKG9VAD6qseNuL2zekxucU7hVwK2bttQtiGwRqsk8k97h/k++YtXrFVEX0mTDpcT12bNoYqdbQHbOVx4siQWpqb6yI/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=DGQroTb0; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b=DGQroTb0; arc=none smtp.client-ip=195.135.223.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="DGQroTb0"; dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com header.b="DGQroTb0" Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 01C2D3E709; Sat, 14 Feb 2026 13:50:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1771077039; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Z0cRDnf2xIim2ayIB2oo0SVZPe7OdXmYlbPhOOSQXXY=; b=DGQroTb054iOgVi3KLxm/9aV0BCseIbARI2Fc7mJJ1jPpvavlyt7CKb0CMAvHh/mEaG0Nl 6ypy1p05Kqi1TIMFzWLgrWUdHI+og5KK8dCOmSs94BLSmjEMUszidYyLkD3ATBCLSUPBBb UK8bNBjJEeH/jPWznl/Aez9y6gfRsPU= Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.com header.s=susede1 header.b=DGQroTb0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1771077039; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Z0cRDnf2xIim2ayIB2oo0SVZPe7OdXmYlbPhOOSQXXY=; b=DGQroTb054iOgVi3KLxm/9aV0BCseIbARI2Fc7mJJ1jPpvavlyt7CKb0CMAvHh/mEaG0Nl 6ypy1p05Kqi1TIMFzWLgrWUdHI+og5KK8dCOmSs94BLSmjEMUszidYyLkD3ATBCLSUPBBb UK8bNBjJEeH/jPWznl/Aez9y6gfRsPU= Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id A6E853EA62; Sat, 14 Feb 2026 13:50:38 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id Ge0DJ659kGlnEAAAD6G6ig (envelope-from ); Sat, 14 Feb 2026 13:50:38 +0000 From: Juergen Gross To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Juergen Gross , Boris Ostrovsky , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , xen-devel@lists.xenproject.org Subject: [PATCH] x86/xen: Fix Xen PV guest boot Date: Sat, 14 Feb 2026 14:50:35 +0100 Message-ID: <20260214135035.119357-1-jgross@suse.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -3.01 X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.com:s=susede1]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.com:s=susede1]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.com:+]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_SEVEN(0.00)[10]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:rdns,imap1.dmz-prg2.suse.org:helo,suse.com:dkim,suse.com:mid,suse.com:email] X-Spam-Level: X-Rspamd-Action: no action X-Rspamd-Queue-Id: 01C2D3E709 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Spam-Flag: NO Content-Type: text/plain; charset="utf-8" A recent patch moving the call of sparse_init() to common mm code broke booting as a Xen PV guest. Reason is that the Xen PV specific boot code relied on struct page area being accessible rather early, but this changed by the move of the call of sparse_init(). Fortunately the fix is rather easy: there is a static branch available indicating whether struct page contents are usable by Xen. This static branch just needs to be tested in some places for avoiding the access of struct page. Fixes: 4267739cabb8 ("arch, mm: consolidate initialization of SPARSE memory= model") Signed-off-by: Juergen Gross --- arch/x86/xen/mmu_pv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 963154feae06..3254eaa88471 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -509,6 +509,9 @@ static pgd_t *xen_get_user_pgd(pgd_t *pgd) unsigned offset =3D pgd - pgd_page; pgd_t *user_ptr =3D NULL; =20 + if (!static_branch_likely(&xen_struct_pages_ready)) + return NULL; + if (offset < pgd_index(USER_LIMIT)) { struct page *page =3D virt_to_page(pgd_page); user_ptr =3D (pgd_t *)page->private; @@ -1098,7 +1101,8 @@ static void __init xen_cleanmfnmap_free_pgtbl(void *p= gtbl, bool unpin) =20 if (unpin) pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(pa)); - ClearPagePinned(virt_to_page(__va(pa))); + if (static_branch_likely(&xen_struct_pages_ready)) + ClearPagePinned(virt_to_page(__va(pa))); xen_free_ro_pages(pa, PAGE_SIZE); } =20 --=20 2.53.0