From patchwork Wed Jan 31 22:51:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13540083 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 E874FC47258 for ; Wed, 31 Jan 2024 22:51:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 69D606B0087; Wed, 31 Jan 2024 17:51:33 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 64E0F6B0088; Wed, 31 Jan 2024 17:51:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 53C696B0089; Wed, 31 Jan 2024 17:51:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 4107E6B0087 for ; Wed, 31 Jan 2024 17:51:33 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id E61E440D8D for ; Wed, 31 Jan 2024 22:51:32 +0000 (UTC) X-FDA: 81741104424.24.546614B Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf03.hostedemail.com (Postfix) with ESMTP id DAD8020015 for ; Wed, 31 Jan 2024 22:51:30 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=NmXI91H0; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=none); spf=none (imf03.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706741491; a=rsa-sha256; cv=none; b=hPnj2LrRJK2Off8ElK84urQu2+lXD0WkvP4CBqiqj80cGdFftF9fdX+iH6bm1dL/KDygLr 3LcZ3m4QFskSPvtLUuYh7qqmEn66pZiKNl9FVH4SJby+p5k0unY3OirQScxnUXIUOw6sOG q8HOGuhtzryhvGRK8gy4k+zMZuXlfd4= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=NmXI91H0; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=none); spf=none (imf03.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706741491; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=VZT786wUdytPkTuVNcY7ycnwPOjLKqn3LYNeNzmf2tQ=; b=01TxklyBDz5coxIblVg5pA95nRIAWogJiN7Ba0GHvccyVTzINE/2aTN/p1Pj3Mbq84Cpbz btHQSurv81/3auavfefP8J8bTcNcJkjTBbVQNXjQ/way1I7+6LZ3lSTivqSo9OrcsMOCy1 lkKfoxnitOCK0+c251SwGedvp0Uz2oU= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=VZT786wUdytPkTuVNcY7ycnwPOjLKqn3LYNeNzmf2tQ=; b=NmXI91H0BewXk5PAb2p7VcWRBJ Er4y9xuUWXKmfOmg1A5hRZJL/GmdGaqZyt+Wy3JEmc6Ch65MSW365/US2qyMPeCVsjyvaDwsKYuqY ALhJ4zco7qdbHL+dfbdDyuw/njFd0vBGVNfwNTpuv6PUhBfHEfiE3g/2Qym5nt3q98RU0UgMdXLPQ /n37ZsZkxZbqI1Z9aLclAYD9pPeE7nUg6d7Q8YXokCInsbtdBWK8dl4HsEkWMqkjiXiMVrEbL8Uie z4QSZ66rSqzh9k5Jz84Qn3nBy45BSnHkxfqsyn5XzHO/YyWMd3FQN4S1X8WBB4alKipfR8xlhC2uK Sf7w58ZA==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rVJQW-00000005kZE-49GO; Wed, 31 Jan 2024 22:51:28 +0000 From: Luis Chamberlain To: willy@infradead.org, akpm@linux-foundation.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, hare@suse.com, p.raghav@samsung.com, da.gomez@samsung.com, djwong@kernel.org, david@fromorbit.com, mcgrof@kernel.org Subject: [PATCH v2 2/2] XArray: add cmpxchg order test Date: Wed, 31 Jan 2024 14:51:25 -0800 Message-ID: <20240131225125.1370598-3-mcgrof@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240131225125.1370598-1-mcgrof@kernel.org> References: <20240131225125.1370598-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: DAD8020015 X-Stat-Signature: xe361e4xex39dy3ja5jojhr4cwn9okuu X-HE-Tag: 1706741490-600771 X-HE-Meta: U2FsdGVkX19MmuSbi3kg3uHUtABt6BpXvfkl3UUvr6nwQ8aI8nE6+77OhYxKWaWGqA84J/U+6jAvjpnvM6JmF03hnHEbniw/HDmB8qsPYoPbcP2DeZWamqvcq2e9kvQKrr/4rLlwP0vzMVF7s4lDzqVbFGfQ9OA338u6g4yoyrLnEs92O1j5+tDe4HqgwgpbZ4WIzcmh+o3Wbm+leab9BkjwzPHd2gO0h+Aw+gpNQZmhPHk60h7CSv1HapAhJExC35EDVnmt2p7nKNALK1DG72cLcs+feGuQXLEwNVR/48RheTYutKUqObowaeBlzLLqE4BtAm6Qk5tjGJCFSdxiSF3AW6SrZduE4xKALlvbqeO24dptQgLnaggV6nHJAKQDoHAwPRHINespqGxafQBv5zgu9TPvOShSFNUL69jQ3qxyVhdSw7ebyjJqcOc0PfkXbOiNYyUTUbgFrLiDbmX8617u5D7+X2qA+mkHRqga5J6Ec8+BgebVZCtuiDljJcLRZrcWOs2vYskG802myn9CJ7beHaYHm4s9f0syhKo0njJylcuYMZLW4S+7vXH50KZwk0rdCoXCGPx4KDxw99ckYguEOuqb5AfZY9wSaBzAPk3pkx2baC3h1Lmv/jONz/EpccK2MsGYQNuk7ef+SVyCYsdkNqN26j3CNlEuuJhbMUaQFXkrqSUGSnCWhs5FeRXcf43/oPpu5TE/VYncMhlWQpNHRNc3FK4DIDzEUtju1j5Su+tTXr4FPdrGKwlQEWLTGjeKOepb/LJG1T+2E+n5JGav3yMOQRJj/ZbSz+TZqFhzVQ6ibJkf6lmETdzAp8pKolAz9smIiuqk8cpPNIQXtOsrDZGc3V3zSkoYul/dtBCjVqFu6LvcQ3ImhBfxfL91LS5Kki9g7WmpYyY5scQOCWuwAurXswcwp2zs8zzPaflxMcsSBLY/t8YJPCNwPLKSTSPqKIJh0vLVFNVIpRA hEp7P8WV YK8l5rts8iaEE4U1jdSIkhBElj3NQCeVFzFC2pvfM9Mce8ddm8HC6FIFwGcbXLnsH59/bug0D4wnTZ79WxUp4MaagJivYadjkpOP7yCkYrJKASF6BSyAB6aADoQ== 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: List-Subscribe: List-Unsubscribe: From: Daniel Gomez XArray multi-index entries do not keep track of the order stored once the entry is being marked as used with cmpxchg (conditionally replaced with NULL). Add a test to check the order is actually lost. The test also verifies the order and entries for all the tied indexes before and after the NULL replacement with xa_cmpxchg. Add another entry at 1 << order that keeps the node around and the order information for the NULL-entry after xa_cmpxchg. Signed-off-by: Daniel Gomez Signed-off-by: Luis Chamberlain --- lib/test_xarray.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/lib/test_xarray.c b/lib/test_xarray.c index 8b23481f0e8f..d4e55b4867dc 100644 --- a/lib/test_xarray.c +++ b/lib/test_xarray.c @@ -423,6 +423,59 @@ static noinline void check_cmpxchg(struct xarray *xa) XA_BUG_ON(xa, !xa_empty(xa)); } +static noinline void check_cmpxchg_order(struct xarray *xa) +{ +#ifdef CONFIG_XARRAY_MULTI + void *FIVE = xa_mk_value(5); + unsigned int i, order = 3; + + XA_BUG_ON(xa, xa_store_order(xa, 0, order, FIVE, GFP_KERNEL)); + + /* Check entry FIVE has the order saved */ + XA_BUG_ON(xa, xa_get_order(xa, xa_to_value(FIVE)) != order); + + /* Check all the tied indexes have the same entry and order */ + for (i = 0; i < (1 << order); i++) { + XA_BUG_ON(xa, xa_load(xa, i) != FIVE); + XA_BUG_ON(xa, xa_get_order(xa, i) != order); + } + + /* Ensure that nothing is stored at index '1 << order' */ + XA_BUG_ON(xa, xa_load(xa, 1 << order) != NULL); + + /* + * Additionally, keep the node information and the order at + * '1 << order' + */ + XA_BUG_ON(xa, xa_store_order(xa, 1 << order, order, FIVE, GFP_KERNEL)); + for (i = (1 << order); i < (1 << order) + (1 << order) - 1; i++) { + XA_BUG_ON(xa, xa_load(xa, i) != FIVE); + XA_BUG_ON(xa, xa_get_order(xa, i) != order); + } + + /* Conditionally replace FIVE entry at index '0' with NULL */ + XA_BUG_ON(xa, xa_cmpxchg(xa, 0, FIVE, NULL, GFP_KERNEL) != FIVE); + + /* Verify the order is lost at FIVE (and old) entries */ + XA_BUG_ON(xa, xa_get_order(xa, xa_to_value(FIVE)) != 0); + + /* Verify the order and entries are lost in all the tied indexes */ + for (i = 0; i < (1 << order); i++) { + XA_BUG_ON(xa, xa_load(xa, i) != NULL); + XA_BUG_ON(xa, xa_get_order(xa, i) != 0); + } + + /* Verify node and order are kept at '1 << order' */ + for (i = (1 << order); i < (1 << order) + (1 << order) - 1; i++) { + XA_BUG_ON(xa, xa_load(xa, i) != FIVE); + XA_BUG_ON(xa, xa_get_order(xa, i) != order); + } + + xa_store_order(xa, 0, BITS_PER_LONG - 1, NULL, GFP_KERNEL); + XA_BUG_ON(xa, !xa_empty(xa)); +#endif +} + static noinline void check_reserve(struct xarray *xa) { void *entry; @@ -1964,6 +2017,7 @@ static int xarray_checks(void) check_xas_erase(&array); check_insert(&array); check_cmpxchg(&array); + check_cmpxchg_order(&array); check_reserve(&array); check_reserve(&xa0); check_multi_store(&array);