From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C144C77B7C for ; Sat, 27 May 2023 18:27:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C4E84900002; Sat, 27 May 2023 14:27:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BFE316B0072; Sat, 27 May 2023 14:27:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A9F66900002; Sat, 27 May 2023 14:27:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 99CAE6B0071 for ; Sat, 27 May 2023 14:27:49 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 511AC1202A6 for ; Sat, 27 May 2023 18:27:49 +0000 (UTC) X-FDA: 80836868658.18.17E68F8 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by imf11.hostedemail.com (Postfix) with ESMTP id 6A58B40012 for ; Sat, 27 May 2023 18:27:46 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=DswV36xU; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=lstoakes@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685212066; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=APHi34BuXLge2sVi4kjwDtEz7aJJydEOoaOdMshR/RM=; b=0eYVF6gybW/FKFlhieXV9Spy0K0cQlnM7jOMYSE/aQt5pdPfFJIEiD1cv3L5Z61Oxr4fiZ Kn5Z2DvrNaVak/WviIahAUAaGApXaph2tnqab6Jk0eQXl1R9RjPRStTt/9cz7KWG/yl/v0 zLMSFKjGBugcg0FUfcWOg73WdCNoC9U= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=DswV36xU; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=lstoakes@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685212066; a=rsa-sha256; cv=none; b=mVEazOOKMPTE6VhYSRyGxF/+GVgyfyhhUQVUixAI2n0SXSeRi2jybFbxQaijlde9rorW0h /NEDpFeRiTWcHvcdMeeljji+rpoJOyXhfNySw7nb4hCaKQ9LWjr7gZScfXPmfDXVGGL+hB uOk/wXmsA8TpUtPo6nd3yVuMzk0BKmU= Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-30ae5f2ac94so228257f8f.1 for ; Sat, 27 May 2023 11:27:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685212065; x=1687804065; 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=APHi34BuXLge2sVi4kjwDtEz7aJJydEOoaOdMshR/RM=; b=DswV36xUBtj8RK59eklAuuMiKCesj5vTalfauQYuS83uOKdIHwgJqPypKF68owzk+G f7CfCt7r6kNKnxVLcUTIWlt5XHH3J9UkqAoF0iGZbi1ADEVcCsSqynMTXDw0dGyYENaq +LZfTDjwohjASq8yVcc6R2gPhWqWn3kQd5BGoyZYUQ5ALLL82HYjb/yKJ1YquilhQIhP 4nUqJvSD/0/cFWANZbHOmleKY/tYlyoGNStXeJvbIWmpDPThr8JALOMIwHLxnCaOOe9y gmuQjK/FPpt9T6vAeEnJ9jPvWqGV3vr1vBpPliITVRVKMFO4tLYIvllB14OLCixVt/5K pujQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685212065; x=1687804065; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=APHi34BuXLge2sVi4kjwDtEz7aJJydEOoaOdMshR/RM=; b=AwzDQ2aS6w2pnc1/hecAfhqa883ngAl2Xv0N/78YHCr1ooh2yoTPnhlqVqdyOLdKE2 Jt1nsP3fcRP6/a1uJ29OxuIlxyQr+jIQy4qFzSkcppQ8YvXI6THM3PBrnT98cubgEOri 6eittEswoCEf0sckg/8B5imRT+CkP1m709Epwt00Ac399x3uOjj4EARMNhttZujk6J6b Id9iA8NIkDl+JVt0vi5SLJikAAmhmlBFNxu2b5yQjXEnAFo7/CFYf1c8iAZQaZQ+GM5p TFoD2t+kzWyO4j1Hti7b04aF64CLMXBAyJ2QVigiuW4QE5+qdnzZznicEu+EFAWAjOen Mt4A== X-Gm-Message-State: AC+VfDwdsBtHqS3Mo1Xrn+vAI5BJaAmLXM5rdkYAKNPJrKEU+ZwH7jC/ dS2tDPHXBvWxFO40KEImTsA= X-Google-Smtp-Source: ACHHUZ6BwToKj3zN/f/ylzbdTRBXweBVOBDmqN8rGmrAE9I6XjtoTvHDrPH7MjBkGLCVibN8vrNN7w== X-Received: by 2002:a5d:4402:0:b0:309:3aa0:a170 with SMTP id z2-20020a5d4402000000b003093aa0a170mr4468269wrq.41.1685212064548; Sat, 27 May 2023 11:27:44 -0700 (PDT) Received: from localhost (host81-154-179-160.range81-154.btcentralplus.com. [81.154.179.160]) by smtp.gmail.com with ESMTPSA id q27-20020a056000137b00b0030ae6432504sm604788wrz.38.2023.05.27.11.27.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 May 2023 11:27:43 -0700 (PDT) Date: Sat, 27 May 2023 19:27:42 +0100 From: Lorenzo Stoakes To: Thomas Gleixner Cc: linux-mm@kvack.org, Andrew Morton , Christoph Hellwig , Uladzislau Rezki , Peter Zijlstra , Baoquan He Subject: Re: [V2 patch 4/6] mm/vmalloc: Check free space in vmap_block lockless Message-ID: <13df5b15-f04f-4bee-8b44-c57375078b8e@lucifer.local> References: <20230525122342.109672430@linutronix.de> <20230525124504.750481992@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230525124504.750481992@linutronix.de> X-Rspamd-Queue-Id: 6A58B40012 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: qn9o593jj7natk83bjkjkkjo9fu7k3f7 X-HE-Tag: 1685212066-945953 X-HE-Meta: U2FsdGVkX1/LZ3sl8bJ0uR0Th37ZME09eu8ruG8K/cbzjZeiUM/1UYeE25SrLtDTwECRrw88SZXwIeC39BigrDbkbrniDl5uDhMSfutlbwzEqq9PWNWrVxemEalugJ+kyNWwm1f+/59SpBA7yhWHGesr94xWSljflUPDOekQohUR7Z87tRJUWRA2KOu4uNUhHWGPbexUNJhSxtEDM5csQjGyyzerYibgBSVeINm6ZZ4KekROJkKHFvZOyxUHxSKv3WnB2AgSgJGVkUIo5dXwHkul3UE/LtOkcofvn6EdN5gOP3Rg/TgC63f4mewwOF7/Yff8rlmI6wzbTIYEQH217mlOVxjyxC61x7il/I9YdZT3CLbpMoMsjr/6qKT3rBMi9fGLqBY5TwKrZn2EKNCLYgNZaqE2uI5XbhruKwoTic5O1LmJpbX6OM6ozo8a/FxnNoge785oWYgkkBoplajSxTVGVCT6JLIYpGJkhU5I4XqreJW2M/QvmPn25ThMltOJu9V+LO90grO2F1DP7EeNmBpcayfx4kua4LITSfyMGmY+vpHeRk6A82WhOl4exNZ5Sa7TLV2ic7CIXACDu//wUNp2LRQ3nL5GV0H4Rd71Ohg10M7ketgaXY+djZgQvLP83pHv5KYpse/PRCscUkwun4RSBs5vCYuiBiMVSWkJQKCNGs2KYV4beXG9gOPkW8SgvtKAETx+XjMCpks7WDh5huSRbKA11pEZ2Kd9HqAnboWGTAsFRNdz5M7bOVkcURWtNzd6Inq95j72GKoIBScN1uQ3z6JCIk1hu5RaDo1+GAKC9WOBZ4PUjWQ34Ym20hJiiIpi5YLF9LROerYogn/8NR277zypFxtZL+veZlH89xCBygazMaIX1B/lV6Mm8FdgCNvKT727/FB5ib7CrDmOW3QA21RxguGhoN7PCr9AbIMWMYF6OcNeezF7JbYWpztSREZJ9pKZJIqQJCUGdr4 Po7ibAC0 W3U5l1VGY2hlXasw53KlyFHS+9vTRaR6skHUw621YJaCk/m5BDbNoWK+mMVuXLlOEMJ1+628sWBtqADYwy/hFk7FJbNLPXLxaR56jKvcQNY0JxNCM5SXINt84rhOHBp7ZFkcnqbxgPo0/XiZLzNfErimlKFQbuNCxLj7duwbdK2fxWMBBYqrtpeJfn+TjHFFrvu+bjbVCcQiAofc/8NYvOcOLja8t0FSRcZR61fHHeJ4aYFtyPY8SF0Mt8/fW38910LAoM8Xq15eXJlBUlQ7t3O4D5pXe3CrtPLp/wSQ+dWdjMCdhopD/UrwJOhcTkDKdL2omVd1+UZaV2sksuMZdR0g1evMyRV8+ndAXexldAGnj1+iHeZssKxNpgGdNuz/XXNRmnzV45w/ikoPGx/EeRs4ER0Dk1mEeeuNVvke4Uvl3lSzKtiTG2m7Xig== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, May 25, 2023 at 02:57:07PM +0200, Thomas Gleixner wrote: > vb_alloc() unconditionally locks a vmap_block on the free list to check the > free space. > > This can be done locklessly because vmap_block::free never increases, it's > only decreased on allocations. > > Check the free space lockless and only if that succeeds, recheck under the > lock. > > Signed-off-by: Thomas Gleixner > Reviewed-by: Uladzislau Rezki (Sony) > --- > mm/vmalloc.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2168,6 +2168,9 @@ static void *vb_alloc(unsigned long size > list_for_each_entry_rcu(vb, &vbq->free, free_list) { > unsigned long pages_off; > > + if (READ_ONCE(vb->free) < (1UL << order)) > + continue; > + > spin_lock(&vb->lock); > if (vb->free < (1UL << order)) { > spin_unlock(&vb->lock); > @@ -2176,7 +2179,7 @@ static void *vb_alloc(unsigned long size > > pages_off = VMAP_BBMAP_BITS - vb->free; > vaddr = vmap_block_vaddr(vb->va->va_start, pages_off); > - vb->free -= 1UL << order; > + WRITE_ONCE(vb->free, vb->free - (1UL << order)); > bitmap_set(vb->used_map, pages_off, (1UL << order)); > if (vb->free == 0) { > spin_lock(&vbq->lock); > > Looks good to me, Reviewed-by: Lorenzo Stoakes