Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8823578ybl; Fri, 17 Jan 2020 01:37:32 -0800 (PST) X-Google-Smtp-Source: APXvYqxFX6KFc+qd36CM0g0QF3Nkkudxm7MKO5K0qVD89ofSb+aP6x4XcvB2jFm78sY+ZUxMycmd X-Received: by 2002:aca:481:: with SMTP id 123mr2816160oie.110.1579253852419; Fri, 17 Jan 2020 01:37:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579253852; cv=none; d=google.com; s=arc-20160816; b=odRSfdWDWFjlZuU2Y59TpgDnXahIwicy/2GptRRT9Ke/osNeCf9CGiszqCSHVMYhzv 77Ke/do36+T6dFnC7A5GID7yxmFx62oh7JXNk0y6WtlpGjG5VmluYwf3cr+Tj4RtQE6F byuywvb8VnyfhspBOl+a8BNH9D8mTgwQOEJ96M8M4Hl4ygilcCUjFrTecH3eQSDWHFQ6 ciXC1LJOlthPqLLX6HOkGvjfJkHLrsGflF1Hph1EOfFLUqTn1wJLo8NfYRnDykdRRqvP qTAZDWHTcMisQVyzvVVLPAIN2X3Wkor9Ro2q77ACTtE4/DD+Vw4I7YinPdXoOuFCVQyS w74A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=7gwrvz7ruAHA3SFXBx/tLBPi8mLd0GYtPIPaLfycq9U=; b=VXeHNjsVtfDHnVy45GaQ45w8BqS/kwRQ1wOEdbuIBoeFjUgJET49TF1o9bBk8GsEML Esk/qdrGR2iSFXpaqbUqNNSqMe21su2kdBKJeZRxhkzFsnzPJPi5d4snbfk9z64DD4qi BgQ1uTqS/VC6t1HroDUkQy3cRFQojXqln9L45v4Oys93xvOh5EvaK9Qax2YKQWIVqEvZ xy3jGjHVgNkewkduaE4Zs5gleviF5X8iKB7AkxZhUAkLvU0O3LTR/tLOkeCJLjR78nH4 S3/zkG03IwB1qswMFRrlqTcRi9KbvlfIw5UFY0cDiFjLXxjYjlxTDA45hjR9ZupdAiZ7 3QaA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j24si16172568otk.76.2020.01.17.01.37.20; Fri, 17 Jan 2020 01:37:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729043AbgAQJfT (ORCPT + 99 others); Fri, 17 Jan 2020 04:35:19 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:44253 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728988AbgAQJfS (ORCPT ); Fri, 17 Jan 2020 04:35:18 -0500 Received: by mail-wr1-f65.google.com with SMTP id q10so21970198wrm.11 for ; Fri, 17 Jan 2020 01:35:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=7gwrvz7ruAHA3SFXBx/tLBPi8mLd0GYtPIPaLfycq9U=; b=bADdxA3vql8xQNRTXGin7fYGei40Pn/ItHd93V9lDoc4uiHXpkkk2FTr/LN/beubG5 32to6Ek2L1aZ1JHRatsl9sLiGlyve+y4Yrz61MwxJtqupVIGGJ0Pck4BZl/ltfksBbxT ZRRDKLRG75t928T+3VUfDwG5BZs3VKepxiPrSMqSCUIYVvtFTIFkJmUu1jK9jM+NvzeI D+blAxLapqQZY9U7BYZRlOycrcHjvpHC9DopWZaKBn0cNSdCcSVKNUVXrJEO/CQKt0HB HErjv2tgyt/Ix8cwo1DCEoMBq0aBQTARco6bW/4IlhHVaRnky0j1iPqmhwmzd00Y4LM7 FFkA== X-Gm-Message-State: APjAAAVA4JjglDfTOLjCGd5kEdZOcJ33Bh2hgr41HSrdKcLiK7AmWVOI kl+tSGEapcWwA8H1SMf4u6o= X-Received: by 2002:adf:e550:: with SMTP id z16mr2013469wrm.315.1579253716736; Fri, 17 Jan 2020 01:35:16 -0800 (PST) Received: from localhost (prg-ext-pat.suse.com. [213.151.95.130]) by smtp.gmail.com with ESMTPSA id d8sm32437954wrx.71.2020.01.17.01.35.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jan 2020 01:35:15 -0800 (PST) Date: Fri, 17 Jan 2020 10:35:14 +0100 From: Michal Hocko To: David Hildenbrand Cc: Scott Cheloha , linux-kernel@vger.kernel.org, "Rafael J. Wysocki" , Greg Kroah-Hartman , Andrew Morton , nathanl@linux.ibm.com, ricklind@linux.vnet.ibm.com, Scott Cheloha , Donald Dutile Subject: Re: [PATCH v4] drivers/base/memory.c: cache blocks in radix tree to accelerate lookup Message-ID: <20200117093514.GO19428@dhcp22.suse.cz> References: <20191217193238-1-cheloha@linux.vnet.ibm.com> <20200109212516.17849-1-cheloha@linux.vnet.ibm.com> <181caae3-ffb8-c745-a4c9-1aef93ea6dd5@redhat.com> <20200116152214.GX19428@dhcp22.suse.cz> <765a07fe-47e9-fe3d-716a-44d9ee4a5e99@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.12.2 (2019-09-21) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu 16-01-20 17:17:54, David Hildenbrand wrote: [...] > diff --git a/drivers/base/memory.c b/drivers/base/memory.c > index c6d288fad493..c75dec35de43 100644 > --- a/drivers/base/memory.c > +++ b/drivers/base/memory.c > @@ -19,7 +19,7 @@ > #include > #include > #include > -#include > +#include > #include > #include > > @@ -58,11 +58,11 @@ static struct bus_type memory_subsys = { > }; > > /* > - * Memory blocks are cached in a local radix tree to avoid > + * Memory blocks are cached in a local xarray to avoid > * a costly linear search for the corresponding device on > * the subsystem bus. > */ > -static RADIX_TREE(memory_blocks, GFP_KERNEL); > +static DEFINE_XARRAY(memory_blocks); > > static BLOCKING_NOTIFIER_HEAD(memory_chain); > > @@ -566,7 +566,7 @@ static struct memory_block *find_memory_block_by_id(unsigned long block_id) > { > struct memory_block *mem; > > - mem = radix_tree_lookup(&memory_blocks, block_id); > + mem = xa_load(&memory_blocks, block_id); > if (mem) > get_device(&mem->dev); > return mem; > @@ -621,7 +621,8 @@ int register_memory(struct memory_block *memory) > put_device(&memory->dev); > return ret; > } > - ret = radix_tree_insert(&memory_blocks, memory->dev.id, memory); > + ret = xa_err(xa_store(&memory_blocks, memory->dev.id, memory, > + GFP_KERNEL)); > if (ret) { > put_device(&memory->dev); > device_unregister(&memory->dev); > @@ -683,7 +684,7 @@ static void unregister_memory(struct memory_block *memory) > if (WARN_ON_ONCE(memory->dev.bus != &memory_subsys)) > return; > > - WARN_ON(radix_tree_delete(&memory_blocks, memory->dev.id) == NULL); > + WARN_ON(xa_erase(&memory_blocks, memory->dev.id) == NULL); > > /* drop the ref. we got via find_memory_block() */ > put_device(&memory->dev); OK, this looks sensible. xa_store shouldn't ever return an existing device as we do the lookpup beforehand so good. We might need to reorganize the code if we want to drop the loopup though. Thanks! -- Michal Hocko SUSE Labs