From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) (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 3162E32ED31 for ; Fri, 14 Nov 2025 15:54:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135646; cv=none; b=VkRmez6Z3bHSnB9MBb2YehtFop5Y5KpfBjoJbMdXIJlBYHzqHqTcL1F+O5MjvvJePN0h5eKJjZpWcPwsU7AhlgHJC+gMO3I+LVNgdKJqvU+2vEmxDvGdzuJNri5ueormkaVtACy62T4S1R6IiigXXhfuZsgZcMhaFBAE1rqMu/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135646; c=relaxed/simple; bh=DYqdNYg+PkA5Qbkowzot70UU4EWmNNf7y1nWX7aY2Mc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C8FhOndeVOIQE8gqVe70z2rQ2FZvQNZ5S0+kYw+Jp3RF7AkhI1wWG1PGRXE0u8giCp3IeA9vd1EuqQiZiy8kI3kU5HCAFZWMnjmvtO6lCjHHLNlQ8E2vWcFeh6IIlHgX14VHLYykzlDW1pjHuzncFoba7Mox3UwNzevDuhbyDMQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=fmSn++o5; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="fmSn++o5" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-7866aca9ff4so22227857b3.3 for ; Fri, 14 Nov 2025 07:54:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135644; x=1763740444; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=nbmkCSy3WV97Khy2XyctXrcV9Slv19pvozAVxgLjLY0=; b=fmSn++o5oILd8K3pFlsuUxwAO5pGHfKp+3n1j6xyvfNWgp+GuXT/RugKV+xw6jogw4 ELIPqN8c6q1mUECA84teBWtkemjW1FTos9OqRzUHcBCiKvZdt/MfopPKkr7W0HXCOi9n mtQg2Cd0/TNcyWNJFPZSDiUbDOw9HzGMmIJ5E8nfpQRJjkkBeRt0Oif1XhrUg9IHskUv BL5QyrCBRbL8uYhDzow6QNcEhD31VsRRoMAO6jv54LtwbUcB9SfN4zUzutQET8vdmARY a7jXrAThEiQXfGARZ5XNdvWVQBuAWk7hwdQxr679aqj9OeLmEynfWat8P/jr+MPp5zOA b0vQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135644; x=1763740444; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=nbmkCSy3WV97Khy2XyctXrcV9Slv19pvozAVxgLjLY0=; b=qZjIG+X5DnEO9w6bJO0ye/VtuK2d0TMCCKMZMxm2wjVEPp5bbabCfsSdfud81rc+ZH H+FUYe67fOW9E6TGTYmPamJv0YjBSOOt6jcAw6uv0NHRKWEmQ7UmOSIOnB7WzdAUxNrq CAMgd6KmvZuOYulTbm2t81igx8Vw0dIoomaRuOdzZ8v7NWKfJoxuEdU+b4bv5+RKD5y5 9cTf1fYxWQl/6RxMlvSxY+W8qIg4Io3JI1TLJ/PPM4iP2w7gXjAqvfcWT3C3ePjnJXjK biohPRQKUZnTSyU5HYro5F1GjEAgpfDLeG4mwoW7Jz9ULgUaxV+7VwzI51HzbfdMb86J Ehcw== X-Forwarded-Encrypted: i=1; AJvYcCWr17hR7Lz95uqTHUt1jTz+dImNlT64nuBHAwnkfreERw03NdPmOqPmTDXIMxdBI+Qc3/wVN59hRkxFJZY=@vger.kernel.org X-Gm-Message-State: AOJu0YwJ5P13oCpC3RvlXYBnVTedcHe4UJyNi70W6np10DqLycd587BD Ivj5AfLzwXDaGZJK3aqTYjZJry3XNnHyX9AIRKK7QwRIKU9KooABcdIoiNQ6sAemCFU= X-Gm-Gg: ASbGncvtaMA+GqKZa7C13AZAJSa30e/1DV+Q1kou0UICkosIT3VZ6BwJ9MCKNNzEnTo 3S2WSW2m9N4DJI171jn4Ebd7qf5tVzUeDaQFgET3+GieAvgY/zTIXlZnraK1pUD4Aen8x5FYqAr wOWe/BjiIb0fb9r/WtaXcvp7sfiLqjaMsRoeBa1PbB1DOQYF7ltKIQ9G5INy+D2JO/Sgj3FkFFK /KkkLbOhZ9UMVbmyWEV9M/Lpqe5Vs5vuaE4hvLHawPmaiqVWMHCR6IfklNm/A+aaNYpqKDNsPWz EJhv6NizlkZPtHiO6Hzg+GFIFSi5HGrvwRJnYJ1MeWd/+Av7gHV7vsprGyeyri/rfnX9C5r4fRE 6liqdMCUePMwB22qe/lck42bVM2YJJC8KPbUyXl9kwH/mRx21WOLITnl+wK3zExF0trIVluOV9O d8kMJB4Yf75v1k9WhC4aYTxpfutSHV/AQBlGcpCr6BNee8Xx2vyYNorV2YAgB/b7yttGWp X-Google-Smtp-Source: AGHT+IGXdgJBU9rOthXQn3qIN5f0W9bnIxb8QN9M+K/3J2nID5vEHLVPpJIeqX35ivPrktOa6aleug== X-Received: by 2002:a05:690c:380e:b0:787:b5ac:68e4 with SMTP id 00721157ae682-78929ef765amr35233197b3.48.1763135643981; Fri, 14 Nov 2025 07:54:03 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:03 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 01/13] kho: Fix misleading log message in kho_populate() Date: Fri, 14 Nov 2025 10:53:46 -0500 Message-ID: <20251114155358.2884014-2-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" The log message in kho_populate() currently states "Will skip init for some devices". This implies that Kexec Handover always involves skipping device initialization. However, KHO is a generic mechanism used to preserve kernel memory across reboot for various purposes, such as memfd, telemetry, or reserve_mem. Skipping device initialization is a specific property of live update drivers using KHO, not a property of the mechanism itself. Remove the misleading suffix to accurately reflect the generic nature of KHO discovery. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 9f0913e101be..6ad45e12f53b 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1470,7 +1470,7 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 fd= t_len, kho_in.fdt_phys =3D fdt_phys; kho_in.scratch_phys =3D scratch_phys; kho_scratch_cnt =3D scratch_cnt; - pr_info("found kexec handover data. Will skip init for some devices\n"); + pr_info("found kexec handover data.\n"); =20 out: if (fdt) --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 3089332ED40 for ; Fri, 14 Nov 2025 15:54:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135647; cv=none; b=AEjsvcbS56VZEY5kVHqgpXjXpHu4073FuKIMAMjoyWCVnq8czYJtcpmMnAP8kJ/8i5YJIDMcBRru4QjRago9TR36j9Fi9/WohD1YBkl4CHtc1efrXv6Y7ho0KM4Nrw81TZKjqVu9Qm6fEg8Qc0VGJw+5vw67AAKaL8o2x6wFcRs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135647; c=relaxed/simple; bh=QZeToK7uJzwr+SfPrdmC2p/kcAgutF0lLhSzdXoA26w=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eJMLOpD9KUQHb6dtosy+7kfitT38Tbows3purEeHX8QQk88TRhwYd/+iVrSxiqoXmErBEUHw+1DBSx0GPcFMXI3yvqyEBIdZtttx+23N/qywlGqikTSdldwaGXkmr4KJSJ1u4ekDTZf6IVAMwmEvuZHVqhPpR/WC6za0q+ZhIfE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=kzS0dcOL; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="kzS0dcOL" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-63e16fbdd50so1968256d50.2 for ; Fri, 14 Nov 2025 07:54:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135645; x=1763740445; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Fcc2P38UXx+hVgmb+4SxxQNGh2d5KmsLcTOMGNeKk/s=; b=kzS0dcOL/d8734tqT7YrgGu0d+qG7Kj9utzurPPc5surjWS0j44tjGeDW9ynMaCcap md8ImahQEaJslKSGjp/8blBKysTYq+Y8SpdqudWxzzMzhHuad7nkRJyK5al0VdM62ReI DEVUc3CP4tuEJME+Ik9/SQPC7Vjqnhidi0LJ5SbO5OwGG0loHAlKRwMyKXbQmcBlY9Ab 3T62w0RW1ml/t4R9TISxnG5xwCfEsMSx5S3K7ZM52rWMr3H6N/62tOZ9ECppTQIQ/P+d Tjl8N4zI1tbpSwpCiKVOordzl5KX0ypNsI66krzlD9ulTajNCzJljt1Py+mILtBqKJpO NJtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135645; x=1763740445; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Fcc2P38UXx+hVgmb+4SxxQNGh2d5KmsLcTOMGNeKk/s=; b=gWD+HwrX1+FVjk/LDs1tDuqZJu8OpCdat3ergLWf0ae7g9X7RGh8uaqCG70B5mFBMs u2byqGwWNStpIYwpimp8TVuxvHPfSBH9RPKdBWHIY5qSMO+02f0/1kxSKVkHCNqLZIB9 qz9WhGbXanjZrm3K+6v38AB0e/o0FaY+u3jqKYamFk4UUx/CZN+foVSwNaOh6KmESipL OCq7Y6eFg8JNd1i2QMSFg5vmJNsl6RgROmSxrIM/eZfJeKb2pyT2mXc4XkCYI2UwL6tp pKZWDDR2+aUrtauTIkm7x9Jr64SYz+KdISX7vTmWT09CLlkj94tIuOy2/nJiWckh7wIM Mr5g== X-Forwarded-Encrypted: i=1; AJvYcCVrX++mTUQf/SPOQeEpZXksOmhZ3iuCAunZHGlA+Kh2NYJMsWE2vTJVUluGnfQpgt5Mr6E9yI+Ezq6oc2o=@vger.kernel.org X-Gm-Message-State: AOJu0YyQih68TUL8hTaZUG4EE4GdJqXOqdCx2JBRCMYa/s1+P+ILL5AS +v3r+OOXAMp6PAaDP6nF85JOFIF3wsiqfUCXJXV7+hv2uEJCwh7NQCkk4ZWFRRo0aPY= X-Gm-Gg: ASbGnctrUbBUmfpfehOLx+Gkm0Z/tbR3Xl0VkcDEFtp+hGOHsYI/ibihf1SMYN7IEuY mQtJ81ljr9en8P17T6p1XL05+ztMewEH7pi+DW13dZHJuW63QTYzQTbMZ0NLML5k8vZ1q+Y763c RuTdF+LcYxj6Vi24tDp3QWttC5b69bLpuadXkIIwvP9btDTBFf6zRwB1iVz+XtUG83jeLhOQ0hf jV/SzHgPWtHaKLPCSpO7Yadypa7PPIpyRvaed0Tu2EjB5CAsl6/qs7TQkpQzD6FmzOWHrqgaIDC iwDezgZb+NxDT5NT/LA/omgNBsRm72nx7+Xa36RTVOJlAjyScuAjFCtQwN42HhiXQaCS6wihpfH Yp6ZaS0Mdhm+S13Y9UHKmKotBB0FAoRqYWkQa4CMB631w8yJa1sE0T4HBgca/LwGfzO9yjEcVhw NP46A2YJ3g8eOYOgme+HapvDr40pWxMNaFdmaz+chsYOsOyFRdZQxAPNjaXOWE83fHAQ6MZquvd 0r6RKNOkgKFVJo7Ag== X-Google-Smtp-Source: AGHT+IEryNh271MCJ4rrcCUSvX2q1hEPoAUfB2GLhMC00ZkHNbgwj+jY1D/l0YSpdPxZL/e++/fAwQ== X-Received: by 2002:a05:690e:2516:b0:640:dda6:e957 with SMTP id 956f58d0204a3-641e7605cd0mr2400614d50.36.1763135645015; Fri, 14 Nov 2025 07:54:05 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:04 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 02/13] kho: Convert __kho_abort() to return void Date: Fri, 14 Nov 2025 10:53:47 -0500 Message-ID: <20251114155358.2884014-3-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" The internal helper __kho_abort() always returns 0 and has no failure paths. Its return value is ignored by __kho_finalize and checked needlessly by kho_abort. Change the return type to void to reflect that this function cannot fail, and simplify kho_abort by removing dead error handling code. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 6ad45e12f53b..bc7f046a1313 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1117,20 +1117,16 @@ void *kho_restore_vmalloc(const struct kho_vmalloc = *preservation) } EXPORT_SYMBOL_GPL(kho_restore_vmalloc); =20 -static int __kho_abort(void) +static void __kho_abort(void) { if (kho_out.preserved_mem_map) { kho_mem_ser_free(kho_out.preserved_mem_map); kho_out.preserved_mem_map =3D NULL; } - - return 0; } =20 int kho_abort(void) { - int ret =3D 0; - if (!kho_enable) return -EOPNOTSUPP; =20 @@ -1138,10 +1134,7 @@ int kho_abort(void) if (!kho_out.finalized) return -ENOENT; =20 - ret =3D __kho_abort(); - if (ret) - return ret; - + __kho_abort(); kho_out.finalized =3D false; =20 kho_debugfs_fdt_remove(&kho_out.dbg, kho_out.fdt); --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f41.google.com (mail-yx1-f41.google.com [74.125.224.41]) (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 0CC0432ED56 for ; Fri, 14 Nov 2025 15:54:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135648; cv=none; b=GoNWJd+rMwzl41iOG2mvG6/56iMxp/6zbuymRbc6aozItAMNzZdE5WwCAW8bzSi1EbiTkaen8x725EBlrx9jVr193uBzcT8xKQXSSd6Neh6KuicGWDMWTKpgAdHouDpFvAshW+c4jV1+RE8I1iFVnszYCUZoNgynYxazkQvbCCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135648; c=relaxed/simple; bh=bZyUs+PK+rvHnpZOxQKGl6TLnFzqA8gbt0HI7yQrRVw=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EGe4wY6yIm6vi+Ni59s/5CV2Y/1MHkezHrvsrq66/hsn/dOm31X3lbq4neNSVzi+hGhdNdD95+yxuTr8bwzxz3ZyjEczGGap5G+f9h0sYfZP2IYct3p/G4jUKDiqJ8x2O+DveoSo5BSHHBEOZM2EvgMAyko9FF+O5hOtiGvRI8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=gw/AAg17; arc=none smtp.client-ip=74.125.224.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="gw/AAg17" Received: by mail-yx1-f41.google.com with SMTP id 956f58d0204a3-640d0895d7cso2705362d50.1 for ; Fri, 14 Nov 2025 07:54:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135646; x=1763740446; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=BNA42wzRtY6tumJLzcBMrDKp0mvbCSdRF1f9tLE+ESU=; b=gw/AAg17z8gQ/94TQ71Q0MlyWUzglvLeOtmpeXHUVh9fo3bC3uAwOGVp7JE4RxXzav J0uaQ/dq1W2UddRfZSyNldPxvtgNOso2Hz4te8nmTN/sYLA9PSmQ+8WbFB6PWh/kqMqG WM77XEh5EWSal4jGt+6nX07KopZI6QvZULjtYs+bq5g1ievAXDiOS4GyOY4Z/I7k3gI+ GwxsDH13HvLrNwEPCmpJzyLLw2UwH2Qlv3dKEHtX40tLOZQ5Z1q0UfuLinpcBOrmJSHL WdclMFefNDeMCTNLBCIXTLXMoKCVCEzeo1APGPXTT/ILPi4Z9gYFNS2czxCnJAlbJWxS dpBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135646; x=1763740446; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=BNA42wzRtY6tumJLzcBMrDKp0mvbCSdRF1f9tLE+ESU=; b=azIn5rbjL9gXlpbes7+qK3cx8kK0qwFmXAlRxVbCvfsThbK6NKtOQngfCskaDZpQC+ q4Agz87JWPTGGddTDcbmFl1vB+SSrR6gj1G4hWbglWSERg6L/05kLUeF1VynuAYueU6S aCi0W5XUB6ltj8rnN/YavMhS4f6V6hwyMMHcV0SBi8/ps2p9LtAdlfRiebekISZZi6OW d2uY/OkpGHdG2diMuxyn60g3WLKhUjWo8U8vqUlDPiAjUpdp8iPefOr2Sw1aJnwqgZYb Nh2nYbDGlfzZEt66tLF/EepOQI/Phrl9dSYPKqdnkt8hHbTcTWclKkh743CmsWHmeIYu 0hWw== X-Forwarded-Encrypted: i=1; AJvYcCUfkJ2WCfd6Zrxhmanv3uP2f4a1nvKa2ahp+3De/tEOfzqUPuxtKIcqAsRhE3mCc/+tgRFIsPMXhz7aUag=@vger.kernel.org X-Gm-Message-State: AOJu0YytZULZyyN7kaw46NtTVBF8YygnOssaekHcVjeNAMK2Wpvs3OEO jt8H0mAx+h20JthXmy5tCT8f/ZJtHRFmD9OAkDFnkEsfGA4zqTLJ9MEWBCscQ87phd4= X-Gm-Gg: ASbGnctSjrsPD/u+eXq0Y4SQEZhogwjOSFHllZjV0Of4zAVRaw5cwm+/C946qASjWUy C+AbYMLWGVnLYIv5Vcb/H78Dhz5sVEMee5fg/7VkzhAWOIwKT/4+AoY8WZ2UDvgq3Y/N4XMgG5l 92/p/iTjGPUxDYXGXYok4tXxA3iJjrYofr/QcNbOxdUykp03meeqrIbn0HbREnCSm5XJxLgTz2O 80s4WLhHb8nyeVIpFHrrxQb9gh0TPhxfQxyDGYkET4oX5kWS6xrTkOcT0ES3U0wWdGCpBDkOEAc co4mhtx77M276UA+/incy5V1YWretAEsBQw/8a9V2woOZ7S8wYL4Ua9uQddxh+I2AMLQijRoH+T mhYLGN2FVZqh5jHP8Dw2tikjK0CANTHtMgujL4j8wT/zQWm+lw8EjLnQTdgQjdoA/xiZhiTdFFR UfN8Ol/vcZfNicXA8fPyRfeuyNyGtkxM5C2XCRqPTX5KO8+G1d293NZarshTb16D9tQ8eU X-Google-Smtp-Source: AGHT+IFexeZ69gOmsixo4URTVxxOjfKW66ZjvkgEzVhORcXdny0LfmoMUzobq4DDg3SxMb7wc7hsuQ== X-Received: by 2002:a05:690e:4008:b0:640:d864:6e64 with SMTP id 956f58d0204a3-6410d0acb20mr6556525d50.14.1763135645970; Fri, 14 Nov 2025 07:54:05 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:05 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 03/13] kho: Preserve FDT folio only once during initialization Date: Fri, 14 Nov 2025 10:53:48 -0500 Message-ID: <20251114155358.2884014-4-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, the FDT folio is preserved inside __kho_finalize(). If the user performs multiple finalize/abort cycles, kho_preserve_folio() is called repeatedly for the same FDT folio. Since the FDT folio is allocated once during kho_init(), it should be marked for preservation at the same time. Move the preservation call to kho_init() to align the preservation state with the object's lifecycle and simplify the finalize path. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index bc7f046a1313..a4b33ca79246 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1164,10 +1164,6 @@ static int __kho_finalize(void) if (err) goto abort; =20 - err =3D kho_preserve_folio(virt_to_folio(kho_out.fdt)); - if (err) - goto abort; - err =3D kho_mem_serialize(&kho_out); if (err) goto abort; @@ -1319,6 +1315,10 @@ static __init int kho_init(void) if (err) goto err_free_fdt; =20 + err =3D kho_preserve_folio(virt_to_folio(kho_out.fdt)); + if (err) + goto err_free_fdt; + if (fdt) { kho_in_debugfs_init(&kho_in.dbg, fdt); return 0; --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f47.google.com (mail-yx1-f47.google.com [74.125.224.47]) (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 1ADC6331200 for ; Fri, 14 Nov 2025 15:54:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135649; cv=none; b=c6yvDzAwjC0nDa+jKBoO9+25GPF6SEkdGGR+wvbbT/WjelbLUrBOV2bccYer4Ikf2aogRTyCqgVH0U+JBEkoq7s3jlvo/suizm0+Nlz7w2nxBpqXEi4iPIDD2RaK5sYlxUCQRarNuNRjWRrLgo3wxo4Wd1UxnsxzUnV/gWMEV+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135649; c=relaxed/simple; bh=9957cpb0s8i9qCfo4c3G/1yMuiNgkzklJH9rqoPOv5w=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E7cd8V++zj3u71/eyKOf/2MpoETh40BFiVxHPPfH3x0mM5CGTrPRrW8rS8tKt9hhSwRolt0W17UENT4voXITAuAVeo8LxTRjAtZkMgtYLRBJSfhJV81oxsy6chIqh3DBx5zmZEPc1AYILWvLJ+ZLl/gQfGby1sb/Z48880Ow/jM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=IxF5IM7/; arc=none smtp.client-ip=74.125.224.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="IxF5IM7/" Received: by mail-yx1-f47.google.com with SMTP id 956f58d0204a3-63e16fbdd50so1968309d50.2 for ; Fri, 14 Nov 2025 07:54:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135647; x=1763740447; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=mhKTIQNEYkcaFtj/KVfNXsYw1sfQy1wKIwy75vaOKnA=; b=IxF5IM7/YQNTgc46iqcr8a8zODjUzaTtTYe35QHMqseD0rjAnUKKh10QVwWolfUpf+ JzTuUYOHQ6SxLtnvQVuZSWc/sA3jCLS8rhj4xSTLNrWfiDonsY09p2D6P5PH2YR8AvHI qEkQZardgwZEfc6VxUgUcYVdxBiDgupJMYwg867i2UKH+tpApo3ERiytuBDzahjqRdT0 4Lfj55xJ/L7MxHLx0xtd9YFBzgpPIrE0WIitki+ux7Ozrb9/LY2Hrn5UPSkXzCQfQJbc r9UvfVr0snMqZMar79MPbapO+fn0EXWhqY44vJxXUMQDjOtvM3UraBildyqwb+Qc4m4t EkHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135647; x=1763740447; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mhKTIQNEYkcaFtj/KVfNXsYw1sfQy1wKIwy75vaOKnA=; b=cTNBTbsg2z5Yffxyxp/WSR4cPRSGH/4LdxOBpz1yIUD/gwFckUHthNJICo2lj/M27p CoSRRF50Is4zJL3b5Yw1m9IhrRoWV9PDRlyBIHNBGKKuko1VDIKcwaCn3tMgmC6EBP2A zr/SkiUgOkltesZenQBTs0t8fe1CjdN+VMn9X0XL8t/fipjFE43D8TT+xGCZtvKke9ml Vuov91vYF1SH7MpnIGqGK4O4XxcZpqUBEqi6xKEWKpQu+vWGfiVLk9L60WiCsn2IaPcy 0QbNjx2h1WUHy92CFtfS1zqx3cBeFVXK05YdLmLo/hLGKNCF/kXSQlpU5ntLwdO3gAMr cHtQ== X-Forwarded-Encrypted: i=1; AJvYcCWtEKk/rKtoM9gmK9iTxZv/D4Xum49eGPvUjXXEswTFL8H9kdcVnwyGnlTMqJufw4kFw+Cvpw+msF2LT1g=@vger.kernel.org X-Gm-Message-State: AOJu0YxMoiUG+C9pbO5XSMz83Xv7cPQI8CCh03IZv0UjiYxFBh6v/xay URYp7PMjohUc94+dWkw0TX0vVitQjjE/HIlehGWwxReQyBDwbpnBV3zwOiiNJ39VPvU= X-Gm-Gg: ASbGncv21s48u5Jx0eDDrFfh7FSVh2E7fIoFdlf23pzLjuCVUY5l5Y34CdEsPZ84ZET d0TMtbDDRl1BUCjrbrbmWeJVaILbIahui3TXc9iqjuTonTyqfFhaXV2V72XeGBbHapaIkrB4Y5j s9cNqTULyblBnWsGiX3kfehUaW93nd8/lYZJaAS+Zvx48eMkEvCxNKES4cxlPyNqZogpbZINOqD eLsFpzpk2lAeBEBlHwkWbDiYdlRAnD1Tq4qrmpHVcVN+0IijOiaG55Q3tZCoO4bgZ9ZlAXrpwIw /4Act8M/cEkgQ/rIG06750SnK5VPhQUF9z5u4vmbMAx16ly8Iy7amp4fJYkU9IaCAcY81rsq5Qs cwFzMAugd1xM36FgLfK84p3SwtwF+6yZSsxOlcfCCVTEJCIXL5agfWDD6FmgyKss9JNcMBfE3ws eqpAzFe1GrERRhzADbUMPCXmqwbpAm5If/ePoFIVJHyyMGBuYwbHdma52MFX2JbvN1pkzYAVOIZ 9NiPy4= X-Google-Smtp-Source: AGHT+IEJQtu/Dz82I0FeERgoL2lysnBiw3v4C+//1rJhBKK/+KWOlrhz3FcpRzXmN9PhDx5QWGdAiA== X-Received: by 2002:a05:690e:259a:b0:63f:aa5b:bce1 with SMTP id 956f58d0204a3-641e760a530mr2430273d50.39.1763135646933; Fri, 14 Nov 2025 07:54:06 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:06 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 04/13] kho: Verify deserialization status and fix FDT alignment access Date: Fri, 14 Nov 2025 10:53:49 -0500 Message-ID: <20251114155358.2884014-5-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" During boot, kho_restore_folio() relies on the memory map having been successfully deserialized. If deserialization fails or no map is present, attempting to restore the FDT folio is unsafe. Update kho_mem_deserialize() to return a boolean indicating success. Use this return value in kho_memory_init() to disable KHO if deserialization fails. Also, the incoming FDT folio is never used, there is no reason to restore it. Additionally, use memcpy() to retrieve the memory map pointer from the FDT. FDT properties are not guaranteed to be naturally aligned, and accessing a 64-bit value via a pointer that is only 32-bit aligned can cause faults. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) --- kernel/liveupdate/kexec_handover.c | 32 ++++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index a4b33ca79246..83aca3b4af15 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -450,20 +450,28 @@ static void __init deserialize_bitmap(unsigned int or= der, } } =20 -static void __init kho_mem_deserialize(const void *fdt) +/* Return true if memory was deserizlied */ +static bool __init kho_mem_deserialize(const void *fdt) { struct khoser_mem_chunk *chunk; - const phys_addr_t *mem; + const void *mem_ptr; + u64 mem; int len; =20 - mem =3D fdt_getprop(fdt, 0, PROP_PRESERVED_MEMORY_MAP, &len); - - if (!mem || len !=3D sizeof(*mem)) { + mem_ptr =3D fdt_getprop(fdt, 0, PROP_PRESERVED_MEMORY_MAP, &len); + if (!mem_ptr || len !=3D sizeof(u64)) { pr_err("failed to get preserved memory bitmaps\n"); - return; + return false; } + /* FDT guarantees 32-bit alignment, have to use memcpy */ + memcpy(&mem, mem_ptr, len); + + chunk =3D mem ? phys_to_virt(mem) : NULL; + + /* No preserved physical pages were passed, no deserialization */ + if (!chunk) + return false; =20 - chunk =3D *mem ? phys_to_virt(*mem) : NULL; while (chunk) { unsigned int i; =20 @@ -472,6 +480,8 @@ static void __init kho_mem_deserialize(const void *fdt) &chunk->bitmaps[i]); chunk =3D KHOSER_LOAD_PTR(chunk->hdr.next); } + + return true; } =20 /* @@ -1377,16 +1387,12 @@ static void __init kho_release_scratch(void) =20 void __init kho_memory_init(void) { - struct folio *folio; - if (kho_in.scratch_phys) { kho_scratch =3D phys_to_virt(kho_in.scratch_phys); kho_release_scratch(); =20 - kho_mem_deserialize(kho_get_fdt()); - folio =3D kho_restore_folio(kho_in.fdt_phys); - if (!folio) - pr_warn("failed to restore folio for KHO fdt\n"); + if (!kho_mem_deserialize(kho_get_fdt())) + kho_in.fdt_phys =3D 0; } else { kho_reserve_scratch(); } --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f42.google.com (mail-yx1-f42.google.com [74.125.224.42]) (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 DEA1F3314C1 for ; Fri, 14 Nov 2025 15:54:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135650; cv=none; b=R8+LyZVgdQJ8Oy1XlPIQ5Q5emfHazfMCQjAi9dCA8s85ME2OtAcoV/RPwTPPVwaPxY9aFB1EDl9FDFZuHt2oWgvCRMMYKi3L8l6VM/4HCnIk08zduLBb1K/S2zoCZZR5v5VIvJXjA859y025adW2c3KtCui6vfc/cZ9F8L0xv+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135650; c=relaxed/simple; bh=dHcQRirvZc4v/FszV+blACwHPgfiw+q9u6nQDkJHVso=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f3NiO4z6FGQnQ1HDuk94XMQUFx3dnhFoKvMLdeTjXTKQx+45tCyB1Mo/6wGTJsHstzccz+02IcJbwDuQ3SPfn5mTI81eqQVdqL1PhXctmaaybtmIyYZFJpy7EjPUWOPPlpo21o5VjstMOOK86DtQ0ZLdzBOHFioiZVyZnRqjYNg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=gX+OqE7g; arc=none smtp.client-ip=74.125.224.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="gX+OqE7g" Received: by mail-yx1-f42.google.com with SMTP id 956f58d0204a3-640daf41b19so2702698d50.0 for ; Fri, 14 Nov 2025 07:54:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135648; x=1763740448; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=nCJEgobzRYn/tItBVhI3XMcNL4Ytkb3Xbpl8L0K4v8I=; b=gX+OqE7gHfTUmsZaWcAqxJv3ClfdUGxEy74j/a7PXoHrqPivruptrXQOVZkDbS9NO7 iKBQitPIMbrkRm4CcsLK0bjRHP5D8+Pt2lJFqScjoJsz7NTTqE3NLUL5GrmXq+41ekU3 3eeP0OCFQDyw1yXPhOA9eHc2kKOSvydcz9ZH3znjPCwYHkKFuhIC7ruvzYrakXw2vivQ rCuXIR/BEyWIUW4ISDQ7qx4rrTdOCoTEDb3F68shDk9LTpHc4m9w6rUf3G1cHfaM3yuT 8gkfSNcd7Huln3idejfN1J1cnb2XfZWAlnoKApX5rwR99fM7rIUXnlzuU9cONy+JMOrl TE9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135648; x=1763740448; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=nCJEgobzRYn/tItBVhI3XMcNL4Ytkb3Xbpl8L0K4v8I=; b=ejKj1mwhE4XSPAKcrd4mtgO371+yeC2soCjZ8cJ0xcq3uYBQv+UGe8kF5MwhM6hB3q 6U/ij8ZCq7vFbmzX+urypYiLTNijWl6BCtL88ATglQdC+6CxC5Leuz7DqNaTfyNt/JEa iGdUw8NHqxEswbhsFL81At8hjMTPZ8Qo2CvnkvC5SC/zYjbpUyul8Qw8o6hLKBebiFaz U9mju751T9eopXJh+0KF/JLJpAH47N5wLBaM4U18L1zZroFQxckeQIXky7e9O+OPoeRH 4UjdFhvGPUmJu68+sHw7dSdgPWd2UdVDeEqatMA3/GgzRDNTU9z40TJVzcVNFbQY3SEh lANA== X-Forwarded-Encrypted: i=1; AJvYcCXHg6rTM6aeFZrmsyus/iY1Gly+t3WSpWN1btgsKn+bd/7Ak8mp3Nr1Go3dD+Xuwt2yzA+oiHZumXKCSBY=@vger.kernel.org X-Gm-Message-State: AOJu0YzPxtLF/l42eNhHYXDdNyejkyDw3BzOG/RFCwpzeMJouBrntuwt wdNrce4ji3UN7DqrVfkCxKqDvNRbYWZoPvlHqneFYJ/463jJDywToU8FoNQS551wf+o= X-Gm-Gg: ASbGncszuOvLmMWBbyoGO6tV1/JvGsupOnjGFVHv+VHHmsBk8Q2X2GoEU8pDBMg8NYy 7DaJkh473540Yw1MgZ4RDjvT7r9N/sRLexIGn2fUw89f0HQv86O94cVZM7PguEItOBOiyBQirJC T+6s+rQfCDgcicp0t8ODt9cRaXz2BSGof1YV8wZC5TqUBsAoEsgKhVYnnF/lRNhwjKOExNi00wv An8wy+e3G3prgQ91jsICfPdZREu+oYQyKaNeDqKZCFfhHm1+7sHN0RjN9zFtwubKZw3b1xrxQ38 eznrtELqWO6ciUyvL7drpLpB2iWiD+MP/ZQgo8LDIBVW/uMy2HkwJECYEWretBo0H4vmR6KYyIM LaNTyPPj+MCVEMNSHINduidxL7IjHtZn6h/QVFyXH4MK1EQvv4++OKeZdHfYqPnW8Zg9xfVwfjb SmuEP26Z9PMV5LTfkGqdBapPKXHInza226JeDZFcDFZq8i86LSrDXsS6MjlI4jfNMwYRLN X-Google-Smtp-Source: AGHT+IGqvP0vwg6guTwhcdsa6bT4+I6iFV9vusGDhb+GF/sTNONxEyRk8zCeLELCWn/eYnZOTmVaMg== X-Received: by 2002:a05:690e:1544:20b0:63e:3546:6fc5 with SMTP id 956f58d0204a3-6410d194f9fmr5217183d50.32.1763135647923; Fri, 14 Nov 2025 07:54:07 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:07 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 05/13] kho: Always expose output FDT in debugfs Date: Fri, 14 Nov 2025 10:53:50 -0500 Message-ID: <20251114155358.2884014-6-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, the output FDT is added to debugfs only when KHO is finalized and removed when aborted. There is no need to hide the FDT based on the state. Always expose it starting from initialization. This aids the transition toward removing the explicit abort functionality and converting KHO to be fully stateless. Also, pre-zero the FDT tree so we do not expose random bits to the user and to the next kernel. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 83aca3b4af15..cd8641725343 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1147,8 +1147,6 @@ int kho_abort(void) __kho_abort(); kho_out.finalized =3D false; =20 - kho_debugfs_fdt_remove(&kho_out.dbg, kho_out.fdt); - return 0; } =20 @@ -1219,9 +1217,6 @@ int kho_finalize(void) =20 kho_out.finalized =3D true; =20 - WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, "fdt", - kho_out.fdt, true)); - return 0; } =20 @@ -1310,7 +1305,7 @@ static __init int kho_init(void) if (!kho_enable) return 0; =20 - fdt_page =3D alloc_page(GFP_KERNEL); + fdt_page =3D alloc_page(GFP_KERNEL | __GFP_ZERO); if (!fdt_page) { err =3D -ENOMEM; goto err_free_scratch; @@ -1344,6 +1339,9 @@ static __init int kho_init(void) init_cma_reserved_pageblock(pfn_to_page(pfn)); } =20 + WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, "fdt", + kho_out.fdt, true)); + return 0; =20 err_free_fdt: --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) (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 196443321C2 for ; Fri, 14 Nov 2025 15:54:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135651; cv=none; b=Jbl+hYYQK9B1qOsqBNvZvhTmx/w4VMGA4pBAFDxrp4cPjzvx04yTf+w6C6vjQ8Qpd2+Ax4kVhjXLduIo6oTZruKTjav89o0uBwQS5lwJFoLBuiZeOe69uHGWCyrwJsU7Aj0pllZavgwi/eEgPA426ZSLmo14XtQiEFKvLHlCaco= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135651; c=relaxed/simple; bh=DDUH3x6Ce6VLplr60iOYnnADTYwlSaQLzEpKSLWNz3M=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p9MZhXlPWL7l27fE/mTU249JbPp5Ej7mjpap9g3C5RRdYPrXdx1n0y9OW/7x31ZR581MWI2d1Y5uZwAhFfobQCLX+IYA4bfTRJsVIRCZ7OQ8vnvCBTaimoOX8e9nRigRFfxVjO5C0mt4MquXmUMZQ7NQwbQEZYTrOsIInbAY7Jg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=A9MiKCTw; arc=none smtp.client-ip=209.85.128.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="A9MiKCTw" Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-7866aca9ff4so22228617b3.3 for ; Fri, 14 Nov 2025 07:54:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135649; x=1763740449; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=qzmFAH3xmZJhmT0Rkc3uU+e9AsoR0HG7wEejoVF1lJ4=; b=A9MiKCTwprv0sSkup7KYbQ6pW76JjMI/Pogaq/OsT2+VMRD4XEOdoFvhMgIEhtiwae VK2jetGLLLC3YGG1Vcszl0nHnQsZDcpu9XA/WSG2IiQ348OKUiIw3+g5YVOAfg/P0SIR 5zg2nhSR58zui52MxMcm1hBlsXWl0B3pGERIJScDW8qEMWRg2XilFBTDjGhmlKWyHrgW ++q8P5Mzuj2pLXCduPXPkXlM/yfmxu6YjYrnFkcCAkGlxjjv43uqf58asJeTpZk9Cetq /nAAVC9BxiRfZu5Pd6r1OnfM9BBclwd4mYSmIjjfOpyC/58+0FnxNKQBNsjrixUWkSwk ddDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135649; x=1763740449; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=qzmFAH3xmZJhmT0Rkc3uU+e9AsoR0HG7wEejoVF1lJ4=; b=tMGhFAwpmRF5yWelzR1Ixwt7voOvUB55Q2Y6S5ebZ2pr5ByzHszblj4apTi3Rqc7uU CBuhaJeAWrvripOTLe5bclpAmDgSyeuwESEQs1AtzII4JPVyRzrubBUBkWmHC7v8Nhf0 RdVcv4dIPUiQNZVvdkts2IAhS6V7gv0rKjikLWsHHI3ZdKdijWMzUtD/xfYT+ftQDWNK IH2QNYqR4OShgZjQ1ze5MZYDg3WneIgxLPigN7NhPI8tFQV+5EskKEuorWQ4II6xrxwM bIuxh/tqvs8NZd9t1Z0LANa3khx1OWkWrt3lcxXoSNxDUwywCQ0vcFveLsjVRKBmQcxp Uz6g== X-Forwarded-Encrypted: i=1; AJvYcCWx4AYYpRm45sCY8g42hPDJEEYKz0MwiEnlyv5ZC+zoncZhjzRXDWz/RE7PFqNKvU3KCB6tUUC8VrEQw1E=@vger.kernel.org X-Gm-Message-State: AOJu0YzISDKDeu+JLCCtAawbKdDNGcVPReLa56K8OOVgblS7N1Z1hAx3 UbJvcNwuVib9/MKmTRUW3EYBc5S49ikI2bt3woC08mzbupaq20+pSrHiqgpV5x+VOEc= X-Gm-Gg: ASbGncvjrFNaG525CGoklZ+MJ3E/fLY/W5IrEsEnsCAH5ZU5OdtsWslwtNBLQnuofR3 VKO69IgL3XhLleSF3FGdubssct1z2s4tyuxBQvizJgo4sqZewu9uoo6kYVOdP/PrccTtdaUnCa5 l8uHvwsblk7f8eJXpbicG6g7mTSUoM5do2dTFJuQNB640TpLY2k+sOkAGtqnSpzqx9OQ4mE8d73 jEugnHw2f6wS5sa9NqhjCLhVqKD+ARWx/dmwqLGr3FG6IjRVsqp0m2RCqjrf4qWjsT7Gxt0vYrz 4OMXT1HZjBJjrY8NgpibzAEFB+6l618mlqAarXBTsYob1A8pDrZSFmDWjWmN1asQ76fptfVMagN ts004tp+Ktnli2mNiLFJ/rD3IzbliHiMnOrhqV/WJcj7ECdOdzxz1FA5wroEx/5utgkbtsVTL0p qaNh/XSedF0W80kbrSzZl/tAtJ2NbxJtm+85q9nzhrIpwMMTKAzotLWXn/cFkBjfsYU5Rz X-Google-Smtp-Source: AGHT+IHTzr8yE3ggcwxtjOMXBuZ+AkCCbUZfzA+E1WP5d8Pf6HPSzrjQ6c3qDriXPIifvjJMeL/d/w== X-Received: by 2002:a05:690c:5885:b0:787:f5c5:c630 with SMTP id 00721157ae682-78929ed6f0bmr24916857b3.41.1763135648927; Fri, 14 Nov 2025 07:54:08 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:08 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 06/13] kho: Simplify serialization and remove __kho_abort Date: Fri, 14 Nov 2025 10:53:51 -0500 Message-ID: <20251114155358.2884014-7-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, __kho_finalize() performs memory serialization in the middle of FDT construction. If FDT construction fails later, the function must manually clean up the serialized memory via __kho_abort(). Refactor __kho_finalize() to perform kho_mem_serialize() only after the FDT has been successfully constructed and finished. This reordering has two benefits: 1. It avoids expensive serialization work if FDT generation fails. 2. It removes the need for cleanup in the FDT error path. As a result, the internal helper __kho_abort() is no longer needed for internal error handling. Inline its remaining logic (cleanup of the preserved memory map) directly into kho_abort() and remove the helper. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 41 +++++++++++++----------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index cd8641725343..aea58e5a6b49 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1127,14 +1127,6 @@ void *kho_restore_vmalloc(const struct kho_vmalloc *= preservation) } EXPORT_SYMBOL_GPL(kho_restore_vmalloc); =20 -static void __kho_abort(void) -{ - if (kho_out.preserved_mem_map) { - kho_mem_ser_free(kho_out.preserved_mem_map); - kho_out.preserved_mem_map =3D NULL; - } -} - int kho_abort(void) { if (!kho_enable) @@ -1144,7 +1136,8 @@ int kho_abort(void) if (!kho_out.finalized) return -ENOENT; =20 - __kho_abort(); + kho_mem_ser_free(kho_out.preserved_mem_map); + kho_out.preserved_mem_map =3D NULL; kho_out.finalized =3D false; =20 return 0; @@ -1152,12 +1145,12 @@ int kho_abort(void) =20 static int __kho_finalize(void) { - int err =3D 0; - u64 *preserved_mem_map; void *root =3D kho_out.fdt; struct kho_sub_fdt *fdt; + u64 *preserved_mem_map; + int err; =20 - err |=3D fdt_create(root, PAGE_SIZE); + err =3D fdt_create(root, PAGE_SIZE); err |=3D fdt_finish_reservemap(root); err |=3D fdt_begin_node(root, ""); err |=3D fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); @@ -1170,13 +1163,7 @@ static int __kho_finalize(void) sizeof(*preserved_mem_map), (void **)&preserved_mem_map); if (err) - goto abort; - - err =3D kho_mem_serialize(&kho_out); - if (err) - goto abort; - - *preserved_mem_map =3D (u64)virt_to_phys(kho_out.preserved_mem_map); + goto err_exit; =20 mutex_lock(&kho_out.fdts_lock); list_for_each_entry(fdt, &kho_out.sub_fdts, l) { @@ -1190,13 +1177,19 @@ static int __kho_finalize(void) =20 err |=3D fdt_end_node(root); err |=3D fdt_finish(root); + if (err) + goto err_exit; =20 -abort: - if (err) { - pr_err("Failed to convert KHO state tree: %d\n", err); - __kho_abort(); - } + err =3D kho_mem_serialize(&kho_out); + if (err) + goto err_exit; + + *preserved_mem_map =3D (u64)virt_to_phys(kho_out.preserved_mem_map); + + return 0; =20 +err_exit: + pr_err("Failed to convert KHO state tree: %d\n", err); return err; } =20 --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f53.google.com (mail-yx1-f53.google.com [74.125.224.53]) (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 29EDC33123B for ; Fri, 14 Nov 2025 15:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135653; cv=none; b=M/TbES6CWzN1ffhB9mNbieO3EY6WoC+b3q8CnqVaH1wDn/g/VIrgmwU0JqFAp2bILhA0sFm+SWYLoPqPrftzlDdnID2ZRyT4+FiDo/pZf4tpholUTFwqvQeyyBqRIFVN+eqYVmiIE1J2RyVTIISHFX8OO49k4CnlP2Cj1XlzXsk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135653; c=relaxed/simple; bh=22LgyaZTeTtI1BAKIarZsbPf7uRe+PU+jq30vOouW6M=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tIN+9w3u90uw+SbaGd13luppvLLho1koOlkqZiB+Y08HiYQjUS3p1+L3nKVH7GlRpBMnhe3a/8gE4pHHnM1ZDgiiqkpuhEC/P6IyvPOiaB9n4A3CkGCNehcmi77QS+Nf/dOHUJZsfz0VMbpJ88BmSOr7iMtQIAR4E0kl+kZbZZg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=Zy3NnJ/r; arc=none smtp.client-ip=74.125.224.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="Zy3NnJ/r" Received: by mail-yx1-f53.google.com with SMTP id 956f58d0204a3-640c857ce02so2009105d50.0 for ; Fri, 14 Nov 2025 07:54:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135650; x=1763740450; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=igCLvLEtUCW/UbsBfP3ZrnZSCO09iCMGfzuHZKMcaqM=; b=Zy3NnJ/rozHhiBH8JwC8bsb3ukJ78NZR3+/zNaUJG+F64CiM5zZuTtcHFTbvpVVCUS 5m9xvf9N3/rwIpCSljZyx9raBeDpgWxx2IVk7geXMT5qodvfTjf4QB4xcS1oEMy7DU5q 7m1Pmzl+xtvfhL5RCl39aImbX/O+dgaoGuM0iX+BQFIjg+ldKt5MVDbkYgostnHmDZsE RCHwgnXo7EtMeHVWr9eyllIVfZfEgQSXPTrNk14VXhSH4QZFzd/PBR4MTQnCE0T9JO3t ffutytyN0wlQ8cyNMoBMp1lGz87wCYFvpwTHRI/QX+hagltf2Cy58uxeybO7elPIg69M e5JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135650; x=1763740450; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=igCLvLEtUCW/UbsBfP3ZrnZSCO09iCMGfzuHZKMcaqM=; b=XIGgxuoyb4UePTo/t3Xs/Kp/SWtmgDCIQcRPuo2Ie6b1YJHDh2dp+obQ+cbOSpb3MV YcN9AcThqdqvMbFHaViehpJJ4s+JFLEJzWb3qfeahV7mHIxqYCIedNyVTv2zJhxB+//f 4nJ8n+AnVa6WSB1ss3wNdAP5O6VfCmDNNYQ35kqlsu+w1V55kdNuYwxKBipMEGFli07S vqVHaoP8iyxhT2zPGdWXWrbQRmfJ0uXCocUOKJTAzPRF6nXo6Dlv0DHcm0tTh1nrYBBj t3UpldDM7IjUtpoQTPN6Cnp/M3gPOb5x9tCm+2LbfKGgXFLCaAk3q6HMVOoNe8OVRkzE 8weA== X-Forwarded-Encrypted: i=1; AJvYcCUeFC7BFNEKvIL8kEj+Gh3NCrQ8QjwUFvBPiLIJcUqWhpzbTEbqAX3Lx+cxNp9i8IkUnF0GiNGNVYsXM3A=@vger.kernel.org X-Gm-Message-State: AOJu0YwlHz+eWiQjeqQbEI8QeVJLDBL896VJOyTD8Z/RF2fTKSevJeb6 3UEH/cKhP0LdLi4rnHa2cl7HsksHCo+Gd3OQvLY+e6cywFiEzegEOu9N9CeJq4VEZ0o= X-Gm-Gg: ASbGncs4uwj4h7GI1mD/GbWHV+wwrIoMhnlVyoKy9PqOy7UxBg8C9wEON85x+JeNRaA Ft+YRGD3jP+zlBqk3Jlje9b5hLbcJu+3cn2FUgCjTF2Qoyul6pXcgwXH9mh70UjiZ/Bnw/1x1e+ P/kV8WBhWqjMTYJmjG4zqzuyeQUodauBUYbqPbrWr0JliOCAcdSKJL70G2NoBYzl8XaaQMmuoYz KA4LUChNWAfmuggKvrtftl60H1Gfa8xk/SGyd4xMWpd4EaTn5ytZWxtysAP3/BvzWi/pWAujqRx oDjVtTJ+Rm1Xm0YTMaSa4TI6sPHmZOWoY0q97d55i38gJOinmFOfOP1hysviMsNPDlGofP4kLn7 /fhJT29sjcDjllSyC9iIRR8ArfzDzBPvgiRLpPCV0ryCsyHai9MVrJWLKvqzJ+vxNo+xZ07FdZC hBtE/yGpjWjRRPyVXVQRwxoHik/hJet5nApnImepz+Pf6kKpewuznpg217tM5Q4X19ex36NO5w7 FZpXsg= X-Google-Smtp-Source: AGHT+IHbg7qHrmk7KLr97k4oOuXP3IULJ1XbsWmcMpEHUeh0oxpcL5aioIi8mM1kv7CPvyvvy//CpA== X-Received: by 2002:a05:690e:d8a:b0:629:acb6:d8a with SMTP id 956f58d0204a3-641e7562fd0mr2830828d50.26.1763135649967; Fri, 14 Nov 2025 07:54:09 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:09 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 07/13] kho: Remove global preserved_mem_map and store state in FDT Date: Fri, 14 Nov 2025 10:53:52 -0500 Message-ID: <20251114155358.2884014-8-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, the serialized memory map is tracked via kho_out.preserved_mem_map and copied to the FDT during finalization. This double tracking is redundant. Remove preserved_mem_map from kho_out. Instead, maintain the physical address of the head chunk directly in the preserved-memory-map FDT property. Introduce kho_update_memory_map() to manage this property. This function handles: 1. Retrieving and freeing any existing serialized map (handling the abort/retry case). 2. Updating the FDT property with the new chunk address. This establishes the FDT as the single source of truth for the handover state. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 43 ++++++++++++++++++------------ 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index aea58e5a6b49..f1c3dd1ef680 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -117,9 +117,6 @@ struct kho_out { struct mutex fdts_lock; =20 struct kho_mem_track track; - /* First chunk of serialized preserved memory map */ - struct khoser_mem_chunk *preserved_mem_map; - struct kho_debugfs dbg; }; =20 @@ -380,6 +377,27 @@ static void kho_mem_ser_free(struct khoser_mem_chunk *= first_chunk) } } =20 +/* + * Update memory map property, if old one is found discard it via + * kho_mem_ser_free(). + */ +static void kho_update_memory_map(struct khoser_mem_chunk *first_chunk) +{ + void *ptr; + u64 phys; + + ptr =3D fdt_getprop_w(kho_out.fdt, 0, PROP_PRESERVED_MEMORY_MAP, NULL); + + /* Check and discard previous memory map */ + memcpy(&phys, ptr, sizeof(u64)); + if (phys) + kho_mem_ser_free((struct khoser_mem_chunk *)phys_to_virt(phys)); + + /* Update with the new value */ + phys =3D first_chunk ? (u64)virt_to_phys(first_chunk) : 0; + memcpy(ptr, &phys, sizeof(u64)); +} + static int kho_mem_serialize(struct kho_out *kho_out) { struct khoser_mem_chunk *first_chunk =3D NULL; @@ -420,7 +438,7 @@ static int kho_mem_serialize(struct kho_out *kho_out) } } =20 - kho_out->preserved_mem_map =3D first_chunk; + kho_update_memory_map(first_chunk); =20 return 0; =20 @@ -1136,8 +1154,7 @@ int kho_abort(void) if (!kho_out.finalized) return -ENOENT; =20 - kho_mem_ser_free(kho_out.preserved_mem_map); - kho_out.preserved_mem_map =3D NULL; + kho_update_memory_map(NULL); kho_out.finalized =3D false; =20 return 0; @@ -1147,21 +1164,15 @@ static int __kho_finalize(void) { void *root =3D kho_out.fdt; struct kho_sub_fdt *fdt; - u64 *preserved_mem_map; + u64 empty_mem_map =3D 0; int err; =20 err =3D fdt_create(root, PAGE_SIZE); err |=3D fdt_finish_reservemap(root); err |=3D fdt_begin_node(root, ""); err |=3D fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); - /** - * Reserve the preserved-memory-map property in the root FDT, so - * that all property definitions will precede subnodes created by - * KHO callers. - */ - err |=3D fdt_property_placeholder(root, PROP_PRESERVED_MEMORY_MAP, - sizeof(*preserved_mem_map), - (void **)&preserved_mem_map); + err |=3D fdt_property(root, PROP_PRESERVED_MEMORY_MAP, &empty_mem_map, + sizeof(empty_mem_map)); if (err) goto err_exit; =20 @@ -1184,8 +1195,6 @@ static int __kho_finalize(void) if (err) goto err_exit; =20 - *preserved_mem_map =3D (u64)virt_to_phys(kho_out.preserved_mem_map); - return 0; =20 err_exit: --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 7A35833436D for ; Fri, 14 Nov 2025 15:54:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135654; cv=none; b=OkIg1mVE8BhmxUhpR+vniVPZniDEvbBXgXzFhvWaZRX9MxFgg4/PjHcSyQWqBRupzU7hFcGwBaBInFrUp+qDv7/kyFhm3yOfdMZmhqkL00G1UXB3oxkBNYKDBklkH9S9bp1JhurfnnG6bk7Duc9RQfX/TqBp8woqG1XgXf1sMzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135654; c=relaxed/simple; bh=cq7IzzF8tpHIaPBKDmpjd17BayBAy0OBGUhdhDTAtSs=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OCP0yNEcp20eajX7xicXgPfBv4BiaoW+KSZ8eNfnIhneCylQUOFMp8OnbTaAYyBK6hCe7k4tSJfcaEtlXp08qNFkcTWbjeHXCfNovJfCakXY5oKLlku6rvNxJSzIRaZbLgMro5ztuhq1ZML8hlKRlail0DPa5wlGmUpu3vO7e2Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=OypAr+lg; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="OypAr+lg" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-63fca769163so2009497d50.2 for ; Fri, 14 Nov 2025 07:54:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135651; x=1763740451; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=oAQesQhs6e+PTptufLvrkGE1DQZP/NgJYpEOzUVqdGc=; b=OypAr+lgCs5epDXrH/AagqJFxEiWk6QELxX19O+QslzeFQR+xQWDjfHROs8WRhAzYZ WpY5IwvA/77Bz/Rv73RyGGN64v217peFx/w6iqL+O3F8kbqBat+Zv9YG6dSjbt3hecy4 Vlh+tQMmznw4ZEccPnMS+MS+eqdsa6rMiuTi7ZUfPY5FlxDkvaNyi3n1Fg8CQNaUWijE a/SLhGRnEFJjoWuay0EUDEoXPaN3WVZlDiONYAgKP8WJMnz+VsqPXuF0CMNjjboXi1HO nljejLEKMoRHUKmWyVx1Ze3TW7ZvbOZ58WdB4rVKaliKp2ikKfXB6HAHv3LNGybtxWP7 PziQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135651; x=1763740451; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=oAQesQhs6e+PTptufLvrkGE1DQZP/NgJYpEOzUVqdGc=; b=Feyi63Ap3ARs7nkGpwForScpjFxdnv+hn7oovdzeVBnzcLyE3AJciu/wJnKFzB5Vcg jyu3Lh08CyABCc+/FhyPgr4StSE/I/y98pGY5lVikfPN37iLmnbl6rXEw9Z/SsSsee9b ryq9TbiWDZMYaEIVR6yqlIeHKGYp/ZfJ6PcPMkW5ZrfWIG76roLl2dytGbWvjtN7K1YJ QGEq4YX0ePk35/abXbcCuQcxUssGrqWw939NQAJLv9jsrQK7OI8WdWixw1TdapPsQ9EY 1iQaBs11hmvq3PsYnfjkezbLQPJ+wuLg9Ybt1rE2/A4RZIWXaksmwmpgjdpMW2ebh7oG yQtw== X-Forwarded-Encrypted: i=1; AJvYcCU3C6nSQ1Rqz315RLZcrQODrZzH0F1l5mmu3PPtCyeDnB1kfkYi8xS0PJW4HO1+LMe417krB5JnEtNGD30=@vger.kernel.org X-Gm-Message-State: AOJu0YzP2JfhTbFLwbg0R9qyPSTAoISu58cBXAOsuupmylpo/G3MiBaU HBmVuYIZlRO6hfdkq4/5S6RR6CExYPDMKzTMWWjOHJA6lATjSJTXJ7b3ULJbeqJkPq8= X-Gm-Gg: ASbGncu79plWkyGiqq+CSroXTUthsbVZU1OqMckAD/4c7lRi9nMy20o1sTpH52i8xPM TgysC4PtkvxN6nM9lbiAA17B4RtrXgrcTM18nrUSlhGarX0ubKp8Tkmi8ki4l3JIqz96rWPXoNe EcL9d2YTPRMOhF7xfBjdKbNEloNtT0doxZY/n9A+SQW6kCCzkIAnZNLd1Mmfe2cI/35mOgjAvpm qRp4sRtyRKKggQXIWjAGVxazYUFroSPjb7w+2pU41p9VDE8jLTuy9AxzX62lqN8KZdIvuEt85MX Pzizs+bkU4AjUVkSKSn7zs0DRw1swAFXf9au0PMoZ6yYZQOPFkoNrDx0xGkWX3RdYQobREcQoEv OsbRTWDmTOPQgkO83Kw8RjSBdI75maLjE2ki57UFRfnyTFGuMBvUNMvW+5EaZR2b1kZfmoIrmA7 pRMFuzccLoxMCFLDEgaFbGw+0rCbedEvoQi/FW/uOBo9kknVCx5WKxZpSOfK+MF8aUVYkSdWLLs a7p5/Y= X-Google-Smtp-Source: AGHT+IGlvukkElqwWxXv7Gpk1y3f7JDTm4WbhlGwLIf1Tn2iiPc/ZeTFQ6+QGmg6hTPSZZWz9TZhAg== X-Received: by 2002:a53:d013:0:b0:63f:b952:dfef with SMTP id 956f58d0204a3-641e7280bb1mr3380829d50.0.1763135650981; Fri, 14 Nov 2025 07:54:10 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:10 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 08/13] kho: Remove abort functionality and support state refresh Date: Fri, 14 Nov 2025 10:53:53 -0500 Message-ID: <20251114155358.2884014-9-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Previously, KHO required a dedicated kho_abort() function to clean up state before kho_finalize() could be called again. This was necessary to handle complex unwind paths when using notifiers. With the shift to direct memory preservation, the explicit abort step is no longer strictly necessary. Remove kho_abort() and refactor kho_finalize() to handle re-entry. If kho_finalize() is called while KHO is already finalized, it will now automatically clean up the previous memory map and state before generating a new one. This allows the KHO state to be updated/refreshed simply by triggering finalize again. Update debugfs to return -EINVAL if userspace attempts to write 0 to the finalize attribute, as explicit abort is no longer supported. Suggested-by: Mike Rapoport (Microsoft) Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 21 ++++----------------- kernel/liveupdate/kexec_handover_debugfs.c | 2 +- kernel/liveupdate/kexec_handover_internal.h | 1 - 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index f1c3dd1ef680..8ab77cb85ca9 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1145,21 +1145,6 @@ void *kho_restore_vmalloc(const struct kho_vmalloc *= preservation) } EXPORT_SYMBOL_GPL(kho_restore_vmalloc); =20 -int kho_abort(void) -{ - if (!kho_enable) - return -EOPNOTSUPP; - - guard(mutex)(&kho_out.lock); - if (!kho_out.finalized) - return -ENOENT; - - kho_update_memory_map(NULL); - kho_out.finalized =3D false; - - return 0; -} - static int __kho_finalize(void) { void *root =3D kho_out.fdt; @@ -1210,8 +1195,10 @@ int kho_finalize(void) return -EOPNOTSUPP; =20 guard(mutex)(&kho_out.lock); - if (kho_out.finalized) - return -EEXIST; + if (kho_out.finalized) { + kho_update_memory_map(NULL); + kho_out.finalized =3D false; + } =20 ret =3D __kho_finalize(); if (ret) diff --git a/kernel/liveupdate/kexec_handover_debugfs.c b/kernel/liveupdate= /kexec_handover_debugfs.c index ac739d25094d..2abbf62ba942 100644 --- a/kernel/liveupdate/kexec_handover_debugfs.c +++ b/kernel/liveupdate/kexec_handover_debugfs.c @@ -87,7 +87,7 @@ static int kho_out_finalize_set(void *data, u64 val) if (val) return kho_finalize(); else - return kho_abort(); + return -EINVAL; } =20 DEFINE_DEBUGFS_ATTRIBUTE(kho_out_finalize_fops, kho_out_finalize_get, diff --git a/kernel/liveupdate/kexec_handover_internal.h b/kernel/liveupdat= e/kexec_handover_internal.h index 52ed73659fe6..0202c85ad14f 100644 --- a/kernel/liveupdate/kexec_handover_internal.h +++ b/kernel/liveupdate/kexec_handover_internal.h @@ -24,7 +24,6 @@ extern unsigned int kho_scratch_cnt; =20 bool kho_finalized(void); int kho_finalize(void); -int kho_abort(void); =20 #ifdef CONFIG_KEXEC_HANDOVER_DEBUGFS int kho_debugfs_init(void); --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) (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 ECE6033439B for ; Fri, 14 Nov 2025 15:54:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135655; cv=none; b=Ejq6ziOdHLJlKq3ytN+mJ4n6bQSc7qjnAtX6ZuMTfIgb0pl2p/5Od+m+IJGXyMwda/xdOApJt4omceGiMV0tpEKhKZARX3/W6ODLOFujvRqSKbOSRFmXV756iroVODJEIG5YwJskY0EpvRpQ/cLgrcveShAidRdimofqn+Roh+o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135655; c=relaxed/simple; bh=xIKLkB74NWG9TM/lh856Jm89e5nwl/nrxXH28JXPXY8=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z3H5+4VcRtxISGdnqX3Yof8sFtNDbfdZnC9Fm7c6WjWC4k4R7VZJZ/h/H4QV2TNcq160tJJdQVcFxE4ec+EEVeIRbK+FrATvlRVBMtJXD/BEEJgXOvYoM1iPzGWiEo2fxEPQOnHMGI9ruVnxL39i3bBX7PEgBAHujlxaX8RmpJ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=RAK58qbm; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="RAK58qbm" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-787e35ab178so22990867b3.2 for ; Fri, 14 Nov 2025 07:54:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135652; x=1763740452; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8tk/MJG6ETPbjL9I+STB4rCENdOaFkmH/bVv9/0YHmw=; b=RAK58qbmhNCR/Kkb7yDpTYb8lyWtLQ+gjg372Fe2qamFUKToZeJkgLyxzRLZwn+2+s ClGiN6cHTTVY+osyuAeRAMKx0trmJuqq3q37LS8MSPeSYlm5r+nZQCCJDzjOHrgSD58r roI+ZASHGz9ntD9h9GGFeN5bnx+h/Uy8oyKk3T26wkReclLR2dbuv98cLCiq3EQpzgjM 4cbNrxN3/UYy9X4s4HpYQrSRFUxAuQoQEJO49JttI9nGg/zbsUru7Habjsz60h5iku55 MVICdBVN76H4cVFffSdWWO2DhaHKaB1nLpbRKGII8pU/1tF6bIZSrBawyu7OtIxBvgLr 2yTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135652; x=1763740452; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8tk/MJG6ETPbjL9I+STB4rCENdOaFkmH/bVv9/0YHmw=; b=S1O+caCDNSXS0WE7AebpwCTGQiKfbpXPUkGiS3vXwxH38LKXcadDSrl/JZ+CpyOOig KnwL0pX/4wMOSJNSjLUMoU1XUlPBZmDrRdahsnjWJ91s3lY5PfNBMJQVWhOM72wy/Mqs SDLIvIZuB5FzQ7jkYdPjoYEgJSf5THlp8lxji18hWWbeinGBF/Jw8Ls+oEBVMD/vwcKM kHUOJ6wnVPT3hVB7NkY7Ij8AYehspHXdE6HUsnbuR1B1IBAZP9EZ6o0DrKxZLS4byFQP XD6HKFzgoHIHKY39yWKDxrUipvVMnRMkU7i6klweznJN7sVWFnRNyKLgcHpMG+O3csaA G3rg== X-Forwarded-Encrypted: i=1; AJvYcCUtdWPnu23p0/XT2rIqBPXcgRNJVqOEy56Nb78avI9WjD/aF5W+ju4HESYi/CN0ElWdiVvbMuq2AYNIW8Y=@vger.kernel.org X-Gm-Message-State: AOJu0YxUfLLLaJ5UgX6iS382FeXiWHAhjQqeNlRKOLzmsNDq7ahfcZNY b86Mp3Ih9WFYSAvSl1+sEKLT/UICIAmVQlw2b5SFlrAh+jlPvUOBC5FTzRsBg8Hbb+I= X-Gm-Gg: ASbGnct5//OmsYsvCnpoSplkMfKzuanvbydZ7CSa8xquU6Ms+SeAQNvefAEeO79PbPq WQSEGDcSwQ3eRbNc4ALdfitCz46cvyeWH+QJDx5ZSzNLOmvx4Iag2K8EvY+AZGo7CTnj61jfOtk XkRIMrkRaErBEgoTQUdjhyuLv8hNwgybY/T4K9/OGv+ZSHX1/FLcbx/Rrl6X0cuDtmdAmlRjriI Jf+oJvs+whDPrpYRKobDeCt2MAS4VjLrly4/EoNPRFI6fgkjni5/rQvL4iuXScDs16HekTDwjUy TslZAlA6VJ58Gf66VkWSa/+qmotRL/lDhuLJQl33xI9YJkNDpaf4EzUMlTMUHw4+8uE1U0imdZu n14ICGq3sYIRzhiFZ0X5Of5mZjyoSe1pep2b+iKDbZGejPPZ2ZHsanv+lhQduODHNn/u3gdzQav 0WMjtbTOM6wP+rmkpcdTLeOrXetKgVbZAFTTq7XHjIEjcQpxSUBoVXLjHLtyLEJk9X/DEX X-Google-Smtp-Source: AGHT+IEKPjFYyY+rBQyyxkjYTOGTZ+qMZUOunITIXFEjHuqgVlVgfx0m5Asn01m13RGlg6YW8Khzhw== X-Received: by 2002:a05:690c:338b:b0:787:d13f:4b49 with SMTP id 00721157ae682-78929dfe0e1mr36529017b3.12.1763135652005; Fri, 14 Nov 2025 07:54:12 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:11 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 09/13] kho: Update FDT dynamically for subtree addition/removal Date: Fri, 14 Nov 2025 10:53:54 -0500 Message-ID: <20251114155358.2884014-10-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, sub-FDTs were tracked in a list (kho_out.sub_fdts) and the final FDT is constructed entirely from scratch during kho_finalize(). We can maintain the FDT dynamically: 1. Initialize a valid, empty FDT in kho_init(). 2. Use fdt_add_subnode and fdt_setprop in kho_add_subtree to update the FDT immediately when a subsystem registers. 3. Use fdt_del_node in kho_remove_subtree to remove entries. This removes the need for the intermediate sub_fdts list and the reconstruction logic in kho_finalize(). kho_finalize() now only needs to trigger memory map serialization. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 144 ++++++++++++++--------------- 1 file changed, 68 insertions(+), 76 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 8ab77cb85ca9..822da961d4c9 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -102,20 +102,11 @@ struct kho_mem_track { =20 struct khoser_mem_chunk; =20 -struct kho_sub_fdt { - struct list_head l; - const char *name; - void *fdt; -}; - struct kho_out { void *fdt; bool finalized; struct mutex lock; /* protects KHO FDT finalization */ =20 - struct list_head sub_fdts; - struct mutex fdts_lock; - struct kho_mem_track track; struct kho_debugfs dbg; }; @@ -125,8 +116,6 @@ static struct kho_out kho_out =3D { .track =3D { .orders =3D XARRAY_INIT(kho_out.track.orders, 0), }, - .sub_fdts =3D LIST_HEAD_INIT(kho_out.sub_fdts), - .fdts_lock =3D __MUTEX_INITIALIZER(kho_out.fdts_lock), .finalized =3D false, }; =20 @@ -724,37 +713,67 @@ static void __init kho_reserve_scratch(void) */ int kho_add_subtree(const char *name, void *fdt) { - struct kho_sub_fdt *sub_fdt; + phys_addr_t phys =3D virt_to_phys(fdt); + void *root_fdt =3D kho_out.fdt; + int err =3D -ENOMEM; + int off, fdt_err; =20 - sub_fdt =3D kmalloc(sizeof(*sub_fdt), GFP_KERNEL); - if (!sub_fdt) - return -ENOMEM; + guard(mutex)(&kho_out.lock); + + fdt_err =3D fdt_open_into(root_fdt, root_fdt, PAGE_SIZE); + if (fdt_err < 0) + return err; =20 - INIT_LIST_HEAD(&sub_fdt->l); - sub_fdt->name =3D name; - sub_fdt->fdt =3D fdt; + off =3D fdt_add_subnode(root_fdt, 0, name); + if (off < 0) { + if (off =3D=3D -FDT_ERR_EXISTS) + err =3D -EEXIST; + goto out_pack; + } + + err =3D fdt_setprop(root_fdt, off, PROP_SUB_FDT, &phys, sizeof(phys)); + if (err < 0) + goto out_pack; =20 - guard(mutex)(&kho_out.fdts_lock); - list_add_tail(&sub_fdt->l, &kho_out.sub_fdts); WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, name, fdt, false)); =20 - return 0; +out_pack: + fdt_pack(root_fdt); + + return err; } EXPORT_SYMBOL_GPL(kho_add_subtree); =20 void kho_remove_subtree(void *fdt) { - struct kho_sub_fdt *sub_fdt; + phys_addr_t target_phys =3D virt_to_phys(fdt); + void *root_fdt =3D kho_out.fdt; + int off; + int err; + + guard(mutex)(&kho_out.lock); =20 - guard(mutex)(&kho_out.fdts_lock); - list_for_each_entry(sub_fdt, &kho_out.sub_fdts, l) { - if (sub_fdt->fdt =3D=3D fdt) { - list_del(&sub_fdt->l); - kfree(sub_fdt); + err =3D fdt_open_into(root_fdt, root_fdt, PAGE_SIZE); + if (err < 0) + return; + + for (off =3D fdt_first_subnode(root_fdt, 0); off >=3D 0; + off =3D fdt_next_subnode(root_fdt, off)) { + const u64 *val; + int len; + + val =3D fdt_getprop(root_fdt, off, PROP_SUB_FDT, &len); + if (!val || len !=3D sizeof(phys_addr_t)) + continue; + + if ((phys_addr_t)*val =3D=3D target_phys) { + fdt_del_node(root_fdt, off); kho_debugfs_fdt_remove(&kho_out.dbg, fdt); break; } } + + fdt_pack(root_fdt); } EXPORT_SYMBOL_GPL(kho_remove_subtree); =20 @@ -1145,48 +1164,6 @@ void *kho_restore_vmalloc(const struct kho_vmalloc *= preservation) } EXPORT_SYMBOL_GPL(kho_restore_vmalloc); =20 -static int __kho_finalize(void) -{ - void *root =3D kho_out.fdt; - struct kho_sub_fdt *fdt; - u64 empty_mem_map =3D 0; - int err; - - err =3D fdt_create(root, PAGE_SIZE); - err |=3D fdt_finish_reservemap(root); - err |=3D fdt_begin_node(root, ""); - err |=3D fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); - err |=3D fdt_property(root, PROP_PRESERVED_MEMORY_MAP, &empty_mem_map, - sizeof(empty_mem_map)); - if (err) - goto err_exit; - - mutex_lock(&kho_out.fdts_lock); - list_for_each_entry(fdt, &kho_out.sub_fdts, l) { - phys_addr_t phys =3D virt_to_phys(fdt->fdt); - - err |=3D fdt_begin_node(root, fdt->name); - err |=3D fdt_property(root, PROP_SUB_FDT, &phys, sizeof(phys)); - err |=3D fdt_end_node(root); - } - mutex_unlock(&kho_out.fdts_lock); - - err |=3D fdt_end_node(root); - err |=3D fdt_finish(root); - if (err) - goto err_exit; - - err =3D kho_mem_serialize(&kho_out); - if (err) - goto err_exit; - - return 0; - -err_exit: - pr_err("Failed to convert KHO state tree: %d\n", err); - return err; -} - int kho_finalize(void) { int ret; @@ -1195,12 +1172,7 @@ int kho_finalize(void) return -EOPNOTSUPP; =20 guard(mutex)(&kho_out.lock); - if (kho_out.finalized) { - kho_update_memory_map(NULL); - kho_out.finalized =3D false; - } - - ret =3D __kho_finalize(); + ret =3D kho_mem_serialize(&kho_out); if (ret) return ret; =20 @@ -1285,6 +1257,26 @@ int kho_retrieve_subtree(const char *name, phys_addr= _t *phys) } EXPORT_SYMBOL_GPL(kho_retrieve_subtree); =20 +static __init int kho_out_fdt_setup(void) +{ + void *root =3D kho_out.fdt; + u64 empty_mem_map =3D 0; + int err; + + err =3D fdt_create(root, PAGE_SIZE); + err |=3D fdt_finish_reservemap(root); + err |=3D fdt_begin_node(root, ""); + err |=3D fdt_property_string(root, "compatible", KHO_FDT_COMPATIBLE); + err |=3D fdt_property(root, PROP_PRESERVED_MEMORY_MAP, &empty_mem_map, + sizeof(empty_mem_map)); + err |=3D fdt_end_node(root); + err |=3D fdt_finish(root); + if (err) + return err; + + return kho_preserve_folio(virt_to_folio(kho_out.fdt)); +} + static __init int kho_init(void) { int err =3D 0; @@ -1309,7 +1301,7 @@ static __init int kho_init(void) if (err) goto err_free_fdt; =20 - err =3D kho_preserve_folio(virt_to_folio(kho_out.fdt)); + err =3D kho_out_fdt_setup(); if (err) goto err_free_fdt; =20 --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (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 224E133E361 for ; Fri, 14 Nov 2025 15:54:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135655; cv=none; b=IHnB6ZzeyN2ZffP+QBEPNgMV9ZtPpw/9fuIHqBjwT4S21gxkGWXSnCrDcAozroSOJIJ3fazlhocVvsWd0iNcwX3DC6jeTRCrUo1LF3n4EWPedyZqlRFlPXOi+xgvZh7ezp1mXNt3nef1LngciQZQdGpi+ST22lfOvv6Pt1+TlOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135655; c=relaxed/simple; bh=08XpEG1Z1yZnpPGQkHDn9IqKAaN39aqRJTCdn+HQoAQ=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UE6QGAGBjngyJ7b/SwvpNf5QwPRmxMXqGMrC+aITChyL48uqJz/Nbqqvc8lV9FggJpzH7Bh4rVcHoHjzXAOnuSwRfiUgPuQQiZvdkLIkSOd4iyM3N2dyzrxTwxJoqiicyvvFtAOnDQqiLdRjR1Ziyr8Yk0EmAyoiocrZehlmerM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=WjK/KBQS; arc=none smtp.client-ip=209.85.128.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="WjK/KBQS" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-78802ac22abso22154017b3.3 for ; Fri, 14 Nov 2025 07:54:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135653; x=1763740453; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jWYmoe6n/rjfMRyVwGOHWBt0L0ANxnxo2HoEY+1LNsc=; b=WjK/KBQSuSn3GE6VHshzLNpCh1z3DYeOoCDjZ2yj2HImKVlKQbrLYalOo9+jt38IJJ ZmUZ2xJVxYNg3yyf92IjFwxG3GTUi1IFtyGUHlaWEgKWHthGJpE5NNOhDq1U9vCDRv6O SdBlA0hDBYX7K8Grekm+uLENinZUFx9AqetJpg80eVreTA2hnVPWJ4ftDxKomwZGIc9f E9RXpXPruNb5HPpnYUagW53k9zrcECDC+EVq0fphcHffV32K5r/FKff7bqXG8PikywSH l52A28d5Yy9LkBKySx2GtXzpKV5LFpZjBwsaduAgL8gS6IEQkACc+rqafcW7qtuNG1e6 I6Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135653; x=1763740453; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=jWYmoe6n/rjfMRyVwGOHWBt0L0ANxnxo2HoEY+1LNsc=; b=T6UBan5YbcUZRbi18C8hTs/yW5Kdk+dpBbbAN6Q0rOh2WzJLViSCbUcboWQbWcC1cg JIyezOhN/xbxqlRjof6hSkbaRgOxPwYTpAzHyGUbqj+IDrtGehyMyV096iP2MnJYMlRw OxipqZLdg8VCfHAhpRg5whOugDlIk24ihfV2W3hgyYXqtjTF5H0DxGEXjvAEySr6Zx0k HB50Y6bt2xu6qoBZe2wPN3fllKctgPLIJBRTq3D1C57uSTTD2ivfY1XjXHz3BXSVZOHf WQod1TjPxHtUTNALNrvX8gq0kcq2AoOU0s1L5C0Vt5fVUG+Nj4cbmtRge8oYQ2QUWuE+ qNTg== X-Forwarded-Encrypted: i=1; AJvYcCXmbzBVyYuJmy1MeM5vuH/cD3LQ2nxLVL9CIni635xummuSiIDOldUBXgaj3jYjp++dT/CehrAZHd5ta+A=@vger.kernel.org X-Gm-Message-State: AOJu0Yyn8q8X7MBoHuzbTb8PJ1Ne7lIoObX5lO/cRLILwGJjTmnGwohS IFVKJ6Sg02sY+gxs4bTd+VyXH6MERfMmZp6KZPKwBOMVv7ASX6werlxgX3hN9tDgTPM= X-Gm-Gg: ASbGncvVmsQmasjPKBBKEbvPhai4Ik96Wa21qhjzJ1HSuivV/jwjOKzK8Yzxv+WkSgq ztQhLA24zFhHU3nCP9gjrXH7CrKdbuszk/mdYbub8ZTSq/uX/P8QPvximLW2UUC/NpXA8/gIiLG OE196mVpxAEoqQdwxfAXx3sdgaEj4t2yHvsy3N6n29K2LXoYNZnac4zCskA/9gx/hjnS0RE9ez1 4UUk65BEU54NgTTMxFTabbnHxFqDIFlC1mgpZAmWDie9lLMBqTQ7Hj4wA5V5xBxKzxv+KYULRVs iwbDJc1fiEBMc/SOM+cc5DsvN/xyer9op7UL0O9W+evX8mm+DVTLzq7mdPEU58WVCn48DKjsiaD OaU4xCSz0R6D2jUs4TAaoENNZCQ+iSvAAqk/KKQmRYuaihWjZOC9H+LaQSUXAY7uSbux1DsgmLU vvTqKx9XJFPVxbrSOVsPfFyjM6Ja5OIkveH838XN/K2FqaDqmiFdMKlGTBQTq73Z4D1Pec X-Google-Smtp-Source: AGHT+IGJaOAJGksp5OzW6VIWGJ2oj2MfQScBcshD9izy6AP7xHUYC50lOdqdoRgMNZveVGy2Y0wOug== X-Received: by 2002:a05:690c:c047:b0:784:8994:297c with SMTP id 00721157ae682-78929e49844mr28762387b3.24.1763135653040; Fri, 14 Nov 2025 07:54:13 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:12 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 10/13] kho: Allow kexec load before KHO finalization Date: Fri, 14 Nov 2025 10:53:55 -0500 Message-ID: <20251114155358.2884014-11-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, kho_fill_kimage() checks kho_out.finalized and returns early if KHO is not yet finalized. This enforces a strict ordering where userspace must finalize KHO *before* loading the kexec image. This is restrictive, as standard workflows often involve loading the target kernel early in the lifecycle and finalizing the state (FDT) only immediately before the reboot. Since the KHO FDT resides at a physical address allocated during boot (kho_init), its location is stable. We can attach this stable address to the kimage regardless of whether the content has been finalized yet. Relax the check to only require kho_enable, allowing kexec_file_load to proceed at any time. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/kexec_handover.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 822da961d4c9..27ef20565a5f 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -1467,7 +1467,7 @@ int kho_fill_kimage(struct kimage *image) int err =3D 0; struct kexec_buf scratch; =20 - if (!kho_out.finalized) + if (!kho_enable) return 0; =20 image->kho.fdt =3D virt_to_phys(kho_out.fdt); --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 254EE33F369 for ; Fri, 14 Nov 2025 15:54:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135657; cv=none; b=hHeSJa9Ix4B/eeyCu78VV8M1SimCk5P+hRu3147JzZ9v3RxTBc3mbSBd/Uc/BUPiJxbT+O5a39QoFOnmjoY5XjTQqO10rSeZ/d6/Kwuzs20ZhdMGcoNTqp8WhkG+mEiYIg2rSdT5QyVNWDHIjJfmlL522O6Wqm6DqvH+86KcPcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135657; c=relaxed/simple; bh=ABmu8pFYniLm7A0yQvX2RzE3jLyfoKROQuQDsi638f0=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NjJKNR2Qb8z7j2eppG+A2FfRL40rF5+98+4MGf/lZ/E3Ym9D3ZLdnwJke7Yqz/1Jvj6yR4OfgR9FPzo4BN91xBWRKYOuFBn6Nc2CnNBoU2+8Wk4Vs5BHymPnFlBIeUNc/Y7h+ZB8PKaTxGUgvVCufki+//aUeMmtlozwm5a7ITk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=GvpzPS4O; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="GvpzPS4O" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-63bc1aeb427so1898363d50.3 for ; Fri, 14 Nov 2025 07:54:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135654; x=1763740454; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=kKhHd1KgPWmocj3LIkR2PSOdJapJ90TJO0FtGZ1fNlc=; b=GvpzPS4OllvpUazWYsYBYXKz1GFwIlxObqDh/HpRKVH8rfNalRj/q6KAQ6IXovbJIj 6lPWpAA0tgHNyoRnGErrbmLkoe0uZXEBaFTTD2mLQjPvkXHA2sVJpU1Bfn9WJuyT3QCM Ur6duXvvck9NXEiNM5x3ICktdshCebtoR2t3XtXm9KlU8YHE3VckbDXwn9+HYwIgvQRw CCVl+4P4A5uXPfUVFOdXk9VER7RpuQF0ZVVm/hUOzE75UAsDX2C4bML7MUFY3g1lRkrg 01jgKbx3VqlgZy0X5ROWN1EUHp4OYR6U6lBHMAjR+Tvdr4UQ3RQoirQBm3A97iJJgXoY ZOmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135654; x=1763740454; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kKhHd1KgPWmocj3LIkR2PSOdJapJ90TJO0FtGZ1fNlc=; b=LRTxCr34IqppiWTMWvg/ZVnxgHyooj+BcNVBrK8TYMuPKBzRJcdBVNeSgTaxzb2k5d ihUQgC/Pys3VQHNBqtk135B0Mqtij7yjfyajsmc4Fpky/8jxw2IiG6SBaLVIp+bXE6kb mUmEoozRFceSqTDlU+xzHZ+ptzOSAJiSwzD6XdWBrX9Q59sUPVfro4yzSt0CEB2BrBGx 7vZkn/M7nV66/8ebaD38xtUk8iztevHGWEMP+LrJEevqOKSda9fvlQSDQGDQ78dZvRkE floJI4fajE4wKNk2IwJDJgdi4gs4BS6FgXsiLhClKKJY3sQGUiaX+NRDE73HGgXG9Fu7 kxYg== X-Forwarded-Encrypted: i=1; AJvYcCUxieu6okKwJFfG+74ZLfFkch2keejb4Bb6sxerWlnwWkCkUfvOvp/QoywfUZrvkK2ObhyYICFshswEu9w=@vger.kernel.org X-Gm-Message-State: AOJu0YxM4BT//+UTtqfG9OIIM8sopdXlxXzE+9OdBLW0jH28l+GScZ3Q 3YDmmljO9+3SeiTjuuB3U8vpKDRe3nSTvvISP5MUD4SPxdP2iXGTbTMQIJ7jb1HpoRU= X-Gm-Gg: ASbGncuVQ/KHzqHbSPmpVQkUTuVxU568cXAdBcRvOcw3TmyuR2mUpwtPJWTXtUKSIZy EG4rdrPsxjKiqoaUC2AsoEBUXQjPVg2Ah8lzHXk1Oio/p+M6VsQnzmsBVR1sE1UlfkC8exK/GlI H0hB6U4DKrd9IIGIIYjJFsqajelkwIcsOT1KEnBxHVDefc8rFi5ZttSZqGyZ/pp+LIyB6LTxGCS G4CwjpAK0aV8hXHSQ9oDo/HymYPDhr6EOW2GyK+Bvs8lo26HuUkt0Er+kQEhyP/+V8V6K8881B5 Y/v6wfZOSzK4Kt22IhD6mh6sT/KojQfGGRNpJ5jJDSw8EZZEByAjEHoOA3lTSi8MtMGvclxpI/2 xb5+0aae/IYmZPyLn7ov288WrVTpVCp25hLkFNi9GexqjrwJZ2Cnb4SNg/Ibbl/EPni6NoYr8Pm jIk8VV4XOo8yvd3kzDtg/iVcu8DdrAO/yQhepQDVLDjOhj8YpPicRZ3bkzriYHCb1Bo4tX X-Google-Smtp-Source: AGHT+IGiDMpoF1/OziCNFf3dCo0jW3YOO3Yc+5BO/O7YGqjVq/L6uWOIGV+2HHGmACM7asKY55998g== X-Received: by 2002:a05:690e:1508:b0:636:d4ab:a507 with SMTP id 956f58d0204a3-641e74d6eaemr2931309d50.16.1763135654039; Fri, 14 Nov 2025 07:54:14 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:13 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 11/13] kho: Allow memory preservation state updates after finalization Date: Fri, 14 Nov 2025 10:53:56 -0500 Message-ID: <20251114155358.2884014-12-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, kho_preserve_* and kho_unpreserve_* return -EBUSY if KHO is finalized. This enforces a rigid "freeze" on the KHO memory state. With the introduction of re-entrant finalization, this restriction is no longer necessary. Users should be allowed to modify the preservation set (e.g., adding new pages or freeing old ones) even after an initial finalization. The intended workflow for updates is now: 1. Modify state (preserve/unpreserve). 2. Call kho_finalize() again to refresh the serialized metadata. Remove the kho_out.finalized checks to enable this dynamic behavior. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) --- kernel/liveupdate/kexec_handover.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 27ef20565a5f..87e9b488237d 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -183,10 +183,6 @@ static int __kho_preserve_order(struct kho_mem_track *= track, unsigned long pfn, const unsigned long pfn_high =3D pfn >> order; =20 might_sleep(); - - if (kho_out.finalized) - return -EBUSY; - physxa =3D xa_load(&track->orders, order); if (!physxa) { int err; @@ -815,9 +811,6 @@ int kho_unpreserve_folio(struct folio *folio) const unsigned int order =3D folio_order(folio); struct kho_mem_track *track =3D &kho_out.track; =20 - if (kho_out.finalized) - return -EBUSY; - __kho_unpreserve_order(track, pfn, order); return 0; } @@ -885,9 +878,6 @@ int kho_unpreserve_pages(struct page *page, unsigned in= t nr_pages) const unsigned long start_pfn =3D page_to_pfn(page); const unsigned long end_pfn =3D start_pfn + nr_pages; =20 - if (kho_out.finalized) - return -EBUSY; - __kho_unpreserve(track, start_pfn, end_pfn); =20 return 0; @@ -1066,9 +1056,6 @@ EXPORT_SYMBOL_GPL(kho_preserve_vmalloc); */ int kho_unpreserve_vmalloc(struct kho_vmalloc *preservation) { - if (kho_out.finalized) - return -EBUSY; - kho_vmalloc_free_chunks(preservation); =20 return 0; --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yx1-f47.google.com (mail-yx1-f47.google.com [74.125.224.47]) (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 1810933FE04 for ; Fri, 14 Nov 2025 15:54:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135657; cv=none; b=ewbxaWLWZYRxHnZ8pjRmr3igXUe7RxG+pU9tZQxfq7QhvC9uumkDGqpa9O6qAF+Sx2n0ffEB8vFNEs3EeOeXiXLQirFDWbV1DLp5LvIEQAby7yOR4q2TUHkCYyL9f4Ukb0RCK51EKj4uWe1B/0yvWsknCTr2XCCv/mrnKEC35Jk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135657; c=relaxed/simple; bh=irEd8dNRzXTz3ItIhrktkMYklah6PA9Xwqom90lqlW4=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RCfTs7+viI5vjqPDE278n5rF9/+lBKOMYox3qbjr61xKiJ95+T/miIv8v8myAYhxgiYFnPO65hIVMt/uFTqGyJHQLUYCaxWGjmQD6oBWk4rFdfBXaBFToceTutaHmlDfaIrrP8EzEsQPNmb/2v+yJfGPiW0TIpgcYSEZ8DEDza0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=er6V7C9R; arc=none smtp.client-ip=74.125.224.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="er6V7C9R" Received: by mail-yx1-f47.google.com with SMTP id 956f58d0204a3-640c857ce02so2009307d50.0 for ; Fri, 14 Nov 2025 07:54:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135655; x=1763740455; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=iTGqBwhVIw9stl5AxN+42Iq44gONjHHbYM4Z4BBnC/g=; b=er6V7C9RWq+YO9u8XS5UHkphGCT9MjG9RLID+7AV6kMn5FEVbXR7OOYvOHRx8T30nq peNx5BJ9bYwB9VSiBYvf4sx5e5bK5n3cp4ExYmQ+jhzQN8RqAx8G6YwcHDyrRp3BChS3 ijPLTQf3XTVKaAbmkbn9982ZH+3S0xmjwLqawOsa5F9LBwQvr1mkPuJB56AdLcOFWdJS jT5+nS95dZ2w58acGwxRmdhx1QiiLcIFQPLCmADQRoOgye97DN1yqxEsrMa7CjF7nPAA 09nEWADQfPKgg31MUfSwuuKM+ucVXdAGDM+JeYB8HHQW+g7XiUFPovEhUFu0uFZ8w2sq V6lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135655; x=1763740455; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iTGqBwhVIw9stl5AxN+42Iq44gONjHHbYM4Z4BBnC/g=; b=AGnH/Mz7PyZqi2cfasNeKiiJmxallbgj6ZjySKbJfZjE8a3b7/2j62UmrPzUvd5hqV vhksLshVd99NSLIDRTSZLWAxfis2RGPRkhFoGwso0jODzGafNNECROEKoPh6qVMhNkuo HDn7coUKq5XcbkVQDvNbLeZkfEENIa/+39zUKZOHv3tTtmQzN5zT00hL42p7iXTM5xff L/iFppQbzPftxIOWTPuKVuMDLZ0tBV+/pXdfFjN0ul0ntZEG5ay526DpWgALm7wYaH+O YmBB4cM9th2Dw+5j9jVvjZBgIN8jG/KMs79Qed01M1hZhIrI5P/TI+ymIDzGlt76GXDq O4fg== X-Forwarded-Encrypted: i=1; AJvYcCXavTwo4FDhHL6WVQKLTDoGfag9yaz4mQAU0M9D68qzlnztr9KxDqCRd657IRT1Hj8dzU9ovY6GhGmXAEA=@vger.kernel.org X-Gm-Message-State: AOJu0YwdlFv0nutJAdjhTofcx5maq702J5iuUa0Qsd5icB19JfM2bXnm hfFt9tKmyBSyunzOsGa3H2DRC4rZu0UNbn3LGeoFNn1Agn+iJcSnrGYcaPG079FEhbQ= X-Gm-Gg: ASbGnctJW9wb+Di4E4ekcn3cWY/rFVTeeiENnoFeE874jhyVEngAZWufg90TfEGoU/q KIju/ydAHxKgC4CqLEJz299mFQK0/OmgfB3FTa5Qtl2xi8DW7MFbrMr25NL/7UW9FWiIv7wOkOk XUbKIqNzjPeBnnXrl8XZ3lHxahJc51Yf+cWg/cwFgNGnxMz51FJns1klc0X5SUkNFKUz0xwhPJ6 7A48JMcdDAaBnBT0uSNx1ZFJ3wiuLTmV7FA7dIi2EvjqMVA0a0zpsl6xZJQdLC3bDI0mt4bS6+7 6sPfIoTA1LCsSK6j4Yoi1dujEIirmcCYwlGHbrEf5icFXQhpGqnw5nmLj5XD/6DYttz7ICpEKKH c8dmR27MFcg4M1xZ68ISoTYmLkyMVniWa+I/jstdduv48Fj4/70pBFVyFGZCfscV3JXQmUyLRxF hImSzJfN03Yxibe/dICTFnB/Phphjy/n2tW1eSfLvWwGFfBhylfcQgVWHpcN3JVqkpKzCwwdPpZ K0/8f8= X-Google-Smtp-Source: AGHT+IG4mQw8nEL1m3idlNaAXf7Kc5783jAJw1K5t9cvJ10mUhr5v9D0Cg51BzHrwu9IlD9mh5aUEA== X-Received: by 2002:a53:d058:0:20b0:640:db91:33d6 with SMTP id 956f58d0204a3-641e74dc5d1mr2579255d50.8.1763135655068; Fri, 14 Nov 2025 07:54:15 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:14 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 12/13] kho: Add Kconfig option to enable KHO by default Date: Fri, 14 Nov 2025 10:53:57 -0500 Message-ID: <20251114155358.2884014-13-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, Kexec Handover must be explicitly enabled via the kernel command line parameter `kho=3Don`. For workloads that rely on KHO as a foundational requirement (such as the upcoming Live Update Orchestrator), requiring an explicit boot parameter adds redundant configuration steps. Introduce CONFIG_KEXEC_HANDOVER_ENABLE_DEFAULT. When selected, KHO defaults to enabled. This is equivalent to passing kho=3Don at boot. The behavior can still be disabled at runtime by passing kho=3Doff. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Pratyush Yadav --- kernel/liveupdate/Kconfig | 14 ++++++++++++++ kernel/liveupdate/kexec_handover.c | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/kernel/liveupdate/Kconfig b/kernel/liveupdate/Kconfig index eae428309332..a973a54447de 100644 --- a/kernel/liveupdate/Kconfig +++ b/kernel/liveupdate/Kconfig @@ -37,4 +37,18 @@ config KEXEC_HANDOVER_DEBUGFS Also, enables inspecting the KHO fdt trees with the debugfs binary blobs. =20 +config KEXEC_HANDOVER_ENABLE_DEFAULT + bool "Enable kexec handover by default" + depends on KEXEC_HANDOVER + help + Enable Kexec Handover by default. This avoids the need to + explicitly pass 'kho=3Don' on the kernel command line. + + This is useful for systems where KHO is a prerequisite for other + features, such as Live Update, ensuring the mechanism is always + active. + + The default behavior can still be overridden at boot time by + passing 'kho=3Doff'. + endmenu diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index 87e9b488237d..a905bccf5f65 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -50,7 +50,7 @@ union kho_page_info { =20 static_assert(sizeof(union kho_page_info) =3D=3D sizeof(((struct page *)0)= ->private)); =20 -static bool kho_enable __ro_after_init; +static bool kho_enable __ro_after_init =3D IS_ENABLED(CONFIG_KEXEC_HANDOVE= R_ENABLE_DEFAULT); =20 bool kho_is_enabled(void) { --=20 2.52.0.rc1.455.g30608eb744-goog From nobody Sun Feb 8 19:48:53 2026 Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (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 1F3BD334385 for ; Fri, 14 Nov 2025 15:54:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135659; cv=none; b=DNXjLlqB/33WuESoNtFUicsMU+yjMkvK/RjbPpe0rxKP9LjbIRuPjhPEWjTc8QD10j9s9/fijS9PeWSKyzzSUPwjbwXbnPAl026GnyvmUYzKCLIoXkzeg8FOfXFwepWu1iCwnzCwNTFoFr6ybQupuGI//HBY+9rCPYUJPFZha9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763135659; c=relaxed/simple; bh=fg5k+LKLRXDW7XEYyXsvNA/tr1YPcIo/8GWFo+u8ZmM=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dyZOc8XIO5y8gnoJ3iMhi6676q33po4kLmlXJIkxWSf0MIwd1i37gwnmuLwaJehj7ThXaPjY4jjVAPsps3acftTz0CmqKnBfN0ZWC5ldKbg4NQVk7uZBx8gSZpgWE62yxHE4Ji43aJWRnxQOrKr5ViySuqR7Ad18M9d0XUEnazU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com; spf=pass smtp.mailfrom=soleen.com; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b=ZYmI3TiA; arc=none smtp.client-ip=209.85.128.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=soleen.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=soleen.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="ZYmI3TiA" Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-78665368a5cso21084917b3.3 for ; Fri, 14 Nov 2025 07:54:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1763135656; x=1763740456; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0Uap8NJrH5Pb6CWLHsw3prb3WSqz01SCPOCj0nxF8f0=; b=ZYmI3TiAOCEO6doF80l52OO1qBjoDWVhnLchElnkDH7Luz6bAB6XAEOt4br5lbXpO5 LIByxGyURrUPNr0XEcDlaDRUWXYeZXqKPqEFvZGc9CIswxZgn/ZlZq5oFKOJGHjPJzno MbeznULBolG+CPwOObjAQvMMgLOQCdCn3f9SvUv214F48mHSq9eKySQOCxtZw9p8Y8cB 4R2kgiIPB0u9YPMDTK9pGXVlo43BXiZQJgEOHoLbFhrVl5UMV6jmcIdtKw4xZwnZPdKK XHd45INv2A1U1SD9/ZrmjHZlG1D6MskPlWGYQNBW4xVImsKPe8p0q+xiI6bFtLkVADJM hsAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763135656; x=1763740456; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0Uap8NJrH5Pb6CWLHsw3prb3WSqz01SCPOCj0nxF8f0=; b=OMkE7grg/DV6yEjpIyRqQ8kvj1r0awc+DC7CIhUSGH1asAn19iCFwL94ov1jn3SOq/ NZbe6cT431n1LhAQwUx+TIyziCNVT+6yIak2kFxMRu659lZeXRSsAB96kvkD3fPQSb65 LEMEXT4mjzsyHGGFBSEl+1/0WmFWdtai8gB/edxMWchCRvIzYOEEK5cjKDCQo7y7hkO6 hyW48M8g/EypsXdB18ENSDN8ZOzBZ3arQaf39ujIzYhfB0YZfp5ymV1H13mA5wqH9+6g ab71WU0uyQj4lGvMnJ/gPwZilUehpqEDdGW6LB8vtlv9+CzPLJMJgBnitsi4/CEd8Lx8 5iXQ== X-Forwarded-Encrypted: i=1; AJvYcCVxgNrHWWDtM5XhWm+dXwNqoTaDQchRyMeexzdKIYJ+z7h/jIkX5DFx6ZSpnwEKbWs5103GG+2KWn9xx8k=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4lAt8mnW8laVAFpqgD25+z3pfG5ZJxx7lkATjB9JYnk05KQDX UXE1yqHXPpY6BlLyFJePZWaCSIyi5B5BwNJIM8YJKpLURDHyqoDLkjiXDSHMyt417i8= X-Gm-Gg: ASbGncsUey0V9dQoG4/+YmL/r8QHp2sAC6x05uZiYjRT/DZNiXVCatnK/Lbzf9Iqn89 dzXCpXuM4lDWiah79qsjBktghgW6rj0eyhHoMOe8WpTo3EkHTvRLir+Quy+0TfKByRB2+277Vyi nqKqbYIbDUUqgNpAY8jT90mUH1BLnyrX9X4tHFtVE0hKjeSUHt/mCczRWQ7jl5szycG3XEBufkf A75UnddFX72VkC2ioO7G4G5eSo79GC+dgfrCVjk3A7QXC5utWFyq+N3APk5qCKS6gOzIAhKroEr S45yzb/cScZjyZOKUTPqswY8KK15PimQb5mof1gB8XWaDg4iQy7VLDLIxrylzdsRo+uJ+RMNvOx uyy1fDIUcVNT7e5ChDhR9FnBK1urgC0OiE4lTvVewAof9OjRjBaFLBxImM0mxgqynKq2HRz3J87 1X7yB1G4ujisqnSOhiEgR31jOunxSNJv8q1SA5bBAWhRuRWM8qe9fESYXe43ZM3WU3N/dw X-Google-Smtp-Source: AGHT+IHNxNYIjWa6M85ng5fm7KdMGmaCp0p2DckarVLQ1uVdBIpVIya/6LO6pSDb2OyOlRX9dHvrhw== X-Received: by 2002:a05:690c:5a14:b0:787:deea:1baf with SMTP id 00721157ae682-78929f16b28mr27160997b3.52.1763135656118; Fri, 14 Nov 2025 07:54:16 -0800 (PST) Received: from soleen.c.googlers.com.com (182.221.85.34.bc.googleusercontent.com. [34.85.221.182]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78822125317sm16468577b3.37.2025.11.14.07.54.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Nov 2025 07:54:15 -0800 (PST) From: Pasha Tatashin To: akpm@linux-foundation.org, bhe@redhat.com, pasha.tatashin@soleen.com, rppt@kernel.org, jasonmiu@google.com, arnd@arndb.de, coxu@redhat.com, dave@vasilevsky.ca, ebiggers@google.com, graf@amazon.com, kees@kernel.org, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v1 13/13] kho: Introduce high-level memory allocation API Date: Fri, 14 Nov 2025 10:53:58 -0500 Message-ID: <20251114155358.2884014-14-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251114155358.2884014-1-pasha.tatashin@soleen.com> References: <20251114155358.2884014-1-pasha.tatashin@soleen.com> 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 Content-Type: text/plain; charset="utf-8" Currently, clients of KHO must manually allocate memory (e.g., via alloc_pages), calculate the page order, and explicitly call kho_preserve_folio(). Similarly, cleanup requires separate calls to unpreserve and free the memory. Introduce a high-level API to streamline this common pattern: - kho_alloc_preserve(size): Allocates physically contiguous, zeroed memory and immediately marks it for preservation. - kho_free_unpreserve(ptr, size): Unpreserves and frees the memory in the current kernel. - kho_free_restore(ptr, size): Restores the struct page state of preserved memory in the new kernel and immediately frees it to the page allocator. Signed-off-by: Pasha Tatashin Reviewed-by: Mike Rapoport (Microsoft) --- include/linux/kexec_handover.h | 22 +++++-- kernel/liveupdate/kexec_handover.c | 101 +++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 7 deletions(-) diff --git a/include/linux/kexec_handover.h b/include/linux/kexec_handover.h index 80ece4232617..76c496e01877 100644 --- a/include/linux/kexec_handover.h +++ b/include/linux/kexec_handover.h @@ -2,8 +2,9 @@ #ifndef LINUX_KEXEC_HANDOVER_H #define LINUX_KEXEC_HANDOVER_H =20 -#include +#include #include +#include =20 struct kho_scratch { phys_addr_t addr; @@ -48,6 +49,9 @@ int kho_preserve_pages(struct page *page, unsigned int nr= _pages); int kho_unpreserve_pages(struct page *page, unsigned int nr_pages); int kho_preserve_vmalloc(void *ptr, struct kho_vmalloc *preservation); int kho_unpreserve_vmalloc(struct kho_vmalloc *preservation); +void *kho_alloc_preserve(size_t size); +void kho_free_unpreserve(void *mem, size_t size); +void kho_free_restore(void *mem, size_t size); struct folio *kho_restore_folio(phys_addr_t phys); struct page *kho_restore_pages(phys_addr_t phys, unsigned int nr_pages); void *kho_restore_vmalloc(const struct kho_vmalloc *preservation); @@ -101,6 +105,14 @@ static inline int kho_unpreserve_vmalloc(struct kho_vm= alloc *preservation) return -EOPNOTSUPP; } =20 +void *kho_alloc_preserve(size_t size) +{ + return ERR_PTR(-EOPNOTSUPP); +} + +void kho_free_unpreserve(void *mem, size_t size) { } +void kho_free_restore(void *mem, size_t size) { } + static inline struct folio *kho_restore_folio(phys_addr_t phys) { return NULL; @@ -122,18 +134,14 @@ static inline int kho_add_subtree(const char *name, v= oid *fdt) return -EOPNOTSUPP; } =20 -static inline void kho_remove_subtree(void *fdt) -{ -} +static inline void kho_remove_subtree(void *fdt) { } =20 static inline int kho_retrieve_subtree(const char *name, phys_addr_t *phys) { return -EOPNOTSUPP; } =20 -static inline void kho_memory_init(void) -{ -} +static inline void kho_memory_init(void) { } =20 static inline void kho_populate(phys_addr_t fdt_phys, u64 fdt_len, phys_addr_t scratch_phys, u64 scratch_len) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_h= andover.c index a905bccf5f65..9f05849fd68e 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -4,6 +4,7 @@ * Copyright (C) 2023 Alexander Graf * Copyright (C) 2025 Microsoft Corporation, Mike Rapoport * Copyright (C) 2025 Google LLC, Changyuan Lyu + * Copyright (C) 2025 Pasha Tatashin */ =20 #define pr_fmt(fmt) "KHO: " fmt @@ -1151,6 +1152,106 @@ void *kho_restore_vmalloc(const struct kho_vmalloc = *preservation) } EXPORT_SYMBOL_GPL(kho_restore_vmalloc); =20 +/** + * kho_alloc_preserve - Allocate, zero, and preserve memory. + * @size: The number of bytes to allocate. + * + * Allocates a physically contiguous block of zeroed pages that is large + * enough to hold @size bytes. The allocated memory is then registered with + * KHO for preservation across a kexec. + * + * Note: The actual allocated size will be rounded up to the nearest + * power-of-two page boundary. + * + * @return A virtual pointer to the allocated and preserved memory on succ= ess, + * or an ERR_PTR() encoded error on failure. + */ +void *kho_alloc_preserve(size_t size) +{ + struct folio *folio; + int order, ret; + + if (!size) + return ERR_PTR(-EINVAL); + + order =3D get_order(size); + if (order > MAX_PAGE_ORDER) + return ERR_PTR(-E2BIG); + + folio =3D folio_alloc(GFP_KERNEL | __GFP_ZERO, order); + if (!folio) + return ERR_PTR(-ENOMEM); + + ret =3D kho_preserve_folio(folio); + if (ret) { + folio_put(folio); + return ERR_PTR(ret); + } + + return folio_address(folio); +} +EXPORT_SYMBOL_GPL(kho_alloc_preserve); + +/** + * kho_free_unpreserve - Unpreserve and free memory. + * @mem: Pointer to the memory allocated by kho_alloc_preserve(). + * @size: The original size requested during allocation. This is used to + * recalculate the correct order for freeing the pages. + * + * Unregisters the memory from KHO preservation and frees the underlying + * pages back to the system. This function should be called to clean up + * memory allocated with kho_alloc_preserve(). + */ +void kho_free_unpreserve(void *mem, size_t size) +{ + struct folio *folio; + unsigned int order; + + if (!mem || !size) + return; + + order =3D get_order(size); + if (WARN_ON_ONCE(order > MAX_PAGE_ORDER)) + return; + + folio =3D virt_to_folio(mem); + WARN_ON_ONCE(kho_unpreserve_folio(folio)); + folio_put(folio); +} +EXPORT_SYMBOL_GPL(kho_free_unpreserve); + +/** + * kho_free_restore - Restore and free memory after kexec. + * @mem: Pointer to the memory (in the new kernel's address space) + * that was allocated by the old kernel. + * @size: The original size requested during allocation. This is used to + * recalculate the correct order for freeing the pages. + * + * This function is intended to be called in the new kernel (post-kexec) + * to take ownership of and free a memory region that was preserved by the + * old kernel using kho_alloc_preserve(). + * + * It first restores the pages from KHO (using their physical address) + * and then frees the pages back to the new kernel's page allocator. + */ +void kho_free_restore(void *mem, size_t size) +{ + struct folio *folio; + unsigned int order; + + if (!mem || !size) + return; + + order =3D get_order(size); + if (WARN_ON_ONCE(order > MAX_PAGE_ORDER)) + return; + + folio =3D kho_restore_folio(__pa(mem)); + if (!WARN_ON(!folio)) + free_pages((unsigned long)mem, order); +} +EXPORT_SYMBOL_GPL(kho_free_restore); + int kho_finalize(void) { int ret; --=20 2.52.0.rc1.455.g30608eb744-goog