From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.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 5DE1A33A9FE for ; Thu, 21 May 2026 23:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779406626; cv=none; b=sh4ROjVlpCC8DCuqXdBPx5d+a7yDfpRiQJUBCSoD3cHKF1LeZaCddSNUD0kvIvUmq54UMkDgPmbHNrMpTFznVSKYSnYv2SX777pPQu0rkpHAtcv06ixXOFYafCvIziX/H1YIzaoNyyFd9CBFsa1IuqGM9SoRlW8UWGaK4MCGWoU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779406626; c=relaxed/simple; bh=Pr1SwX6xIyt5V/Kk+R1ouJlkgxbgppYGo4C0/u2bC8s=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=jHeiIgfCYzPPGG+gBRobf21NSU5c0e44qLnqPM7Yz4LkN8hPCGK5ecv0ak95iTgLXnva6yinTy0gnxsdBi4alsFdq+xW+EVOfufC1BImKep1BgBGQY8akcaYhkE/9/uMnVm5ZKVFgVEvtjMCNnYJbJZFzqHJD+xVEwcf8Uy1Y9U= 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=R3Tj6147; arc=none smtp.client-ip=209.85.219.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="R3Tj6147" Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-8bb4e8a5240so84932746d6.1 for ; Thu, 21 May 2026 16:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; t=1779406624; x=1780011424; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=vARGoD5RNG/Ecz0OD6Sd5EbHpdRmJLMUv9Hfoq7eURQ=; b=R3Tj61474LOYdikObkSbGNGd6Ge9xm3GWrSjmXDcj2CyLhmVxf5HBBPu+DbeOBEbZL sughAXsfxSe1DWiMCPdNtKjkHJ9hdtJ2Qo/Myq/4FxGklh/ty5s2MDIOJ940mLzRKxl5 RmwI3Y3ZcyOz4o8y19roDMqX8eFel5VpWAwv5bJqYCxpwyvIYtPqeDPhAsWqRKLGsc0p l1t2wUHyBt4NmRaY7iJlBeUkvmAo2pLWanQdSkWdgSpmF3Ry7lLaa9cFRnEJye0dUORc wmVDiVeBs6/LRvwMo4bAWCmUfUtCe+/dGhHKbC0GfqfDcfwXygP3H/xtRRpqEw0fOoQ1 iZag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779406624; x=1780011424; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vARGoD5RNG/Ecz0OD6Sd5EbHpdRmJLMUv9Hfoq7eURQ=; b=ZLI1kGpbPnlaz66QyLnUt/x0H0xqyXkTOEE6BDJI0HthpexNR7Cm62qUnVzD2bgSKj Ss0vczXWmaDBJ+5rE/zaWAr4Cw9doNKqvcOFwGzcv0GnOCdi8f52mYXhPXIi6Ypzy4QP WzSasV2y3jzpqKawkwViYX+B2yS5nKVdctOXMSNxor5sA3SUpie7Nlq2lbCvSaeKQKf9 YwiAauksEhqgRo5f7ZclyhzjVe4zWdqHLBt+hfu9GNp5ImDGSlsPOdOnZ1jiy7hqQAMZ yVjPfd27DVWPnrvxRz8X3KCnCoI8TaINRFhYNuIj/Ea3lr6Sa2dvDL6FGnyWMResqh5q WMuw== X-Forwarded-Encrypted: i=1; AFNElJ9GpuoBU/L1L8zwbYFpPsmN+FNKOVro07b97Z0OVJdCU0aR5+EOLY1Lp9y0sKUSpjuOlzAUtEcuicdoCjA=@vger.kernel.org X-Gm-Message-State: AOJu0YxB9l6qZFjfk3m5RHi8sR1/gfOF0bVPVvxTGZt8Mm3i+cNTVSOi MojyExmb4oMlN3B95iw3noCm7VRf6d1nsNSeKPc0vAx9csz5ULpG7PaKD+vhFBATQiI= X-Gm-Gg: Acq92OHguawm7wEj/EUdhTLbN9zfYRDzgLLXuIc1Ex17JwahX5bTwJqdGYWCo4Q5SYg pLPzyUevhLeIT/e8xiKJ87RA0WVyGSSg06C+pk4jisoKdY7NCGgRAhS7zxfmo6c/cC2TPv/X74b 2AXNJ2IvzxaNYKNYQmomHbx/JRKAILU3S/XbFZNtjmrALrpfIs9DuCs6zKtNhMmq5bny3SprbvW vI+ese7eQJEHyksT8NTRJes5M4w6inczSjgzhqd/mKw5fzSrjh2N8Z0Nrw1mSIoCgIxAv4oZP5T 3T0jv7aTPRVGzMfBf9x+IWn048m2ylvLf2Z9u0ZRZVXwqyt2nXA7oasHY4TgCCQUMPba0zaAEAA qMjosYRsQlOhm8b84UJJTaCJGdabVo2hzI0TqFdPPI6d6jSyVo/upVgbE/dPILxL4vaKaQlcuVp 44UPEXe9UXfFIH7hhU+gKmh3Ht7qk6CwGVktDzMm9HUuNnoKGW94ZFukZzD6MRMw== X-Received: by 2002:ad4:5dc6:0:b0:8ca:1f6b:a27d with SMTP id 6a1803df08f44-8cc7b61a17fmr24930256d6.20.1779406624423; Thu, 21 May 2026 16:37:04 -0700 (PDT) Received: from plex ([71.181.43.54]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8cc812e657csm1873266d6.24.2026.05.21.16.37.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 16:37:04 -0700 (PDT) Date: Thu, 21 May 2026 23:37:03 +0000 From: Pasha Tatashin To: Pratyush Yadav Cc: Mike Rapoport , Pasha Tatashin , Alexander Graf , Muchun Song , Oscar Salvador , David Hildenbrand , Andrew Morton , Jason Miu , kexec@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 06/12] kho: allow early-boot usage of the KHO radix tree Message-ID: References: <20260429133928.850721-1-pratyush@kernel.org> <20260429133928.850721-7-pratyush@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260429133928.850721-7-pratyush@kernel.org> On 04-29 15:39, Pratyush Yadav wrote: > From: "Pratyush Yadav (Google)" > > The KHO radix tree allocates memory for table pages from the buddy > allocator using get_zeroed_page(). This is not available in early boot > when memblock is still active. > > Using the radix tree in early boot is useful for KHO to track metadata > about its memory. One such example is for tracking free blocks for > memory allocation when scratch runs out of space. This feature will be > added in the following commits. > > Add kho_radix_{alloc,free}_node() which allocate and free the table > pages. They use slab_is_available() to decide which allocator to use. > While slab_is_available() indicates availability of the slab allocator, > it gets initialized right before buddy so it serves the same practical > purpose. > > Signed-off-by: Pratyush Yadav (Google) Reviewed-by: Pasha Tatashin > --- > kernel/liveupdate/kexec_handover.c | 24 ++++++++++++++++++++++-- > 1 file changed, 22 insertions(+), 2 deletions(-) > > diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c > index d0a4f78eccfe..47f7c4a2865e 100644 > --- a/kernel/liveupdate/kexec_handover.c > +++ b/kernel/liveupdate/kexec_handover.c > @@ -143,6 +143,26 @@ static unsigned long kho_radix_get_table_index(unsigned long key, > return (key >> s) % (1 << KHO_TABLE_SIZE_LOG2); > } > > +static void __ref *kho_radix_alloc_node(void) > +{ > + struct kho_radix_node *node; > + > + if (slab_is_available()) > + node = (struct kho_radix_node *)get_zeroed_page(GFP_KERNEL); > + else > + node = memblock_alloc(PAGE_SIZE, PAGE_SIZE); > + > + return node; > +} > + > +static void __ref kho_radix_free_node(struct kho_radix_node *node) > +{ > + if (slab_is_available()) > + free_page((unsigned long)node); > + else > + memblock_free(node, PAGE_SIZE); > +} > + > /** > * kho_radix_add_key - Add a key to the radix tree. > * @tree: The KHO radix tree. > @@ -183,7 +203,7 @@ int kho_radix_add_key(struct kho_radix_tree *tree, unsigned long key) > } > > /* Next node is empty, create a new node for it */ > - new_node = (struct kho_radix_node *)get_zeroed_page(GFP_KERNEL); > + new_node = kho_radix_alloc_node(); > if (!new_node) { > err = -ENOMEM; > goto err_free_nodes; > @@ -214,7 +234,7 @@ int kho_radix_add_key(struct kho_radix_tree *tree, unsigned long key) > err_free_nodes: > for (i = KHO_TREE_MAX_DEPTH - 1; i > 0; i--) { > if (intermediate_nodes[i]) > - free_page((unsigned long)intermediate_nodes[i]); > + kho_radix_free_node(intermediate_nodes[i]); > } > if (anchor_node) > anchor_node->table[anchor_idx] = 0; > -- > 2.54.0.545.g6539524ca2-goog >