From patchwork Thu May 18 14:55:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Liam R. Howlett" X-Patchwork-Id: 13246958 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 9A9D7C77B7D for ; Thu, 18 May 2023 14:57:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3859C280010; Thu, 18 May 2023 10:57:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3356B28000B; Thu, 18 May 2023 10:57:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13AB1280010; Thu, 18 May 2023 10:57:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 01E4C280008 for ; Thu, 18 May 2023 10:57:21 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 62AE9C02B0 for ; Thu, 18 May 2023 14:57:21 +0000 (UTC) X-FDA: 80803679082.10.864AD35 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf05.hostedemail.com (Postfix) with ESMTP id D0D93100018 for ; Thu, 18 May 2023 14:57:17 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b=2TxcilNN; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=XP2UxOoG; spf=pass (imf05.hostedemail.com: domain of liam.howlett@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=liam.howlett@oracle.com; dmarc=pass (policy=none) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684421838; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=t3fMBW05C58TmvbN+ox7McplGzPRCNLchTHdzirfeJQ=; b=4mHQXPJnujW8+w1LtoAPPm7B3GrQ97ga2JvCmItfbNzX8termifNgrpncoMOBxcKLiVxsx 3QTdvf9kPmONtiE8cTZyTDn1XOsr+2i6lNPePMfHUWi4Gt0uKvx8+7x5XDtnC28f9cWtR9 +lSh4mUtpjPEsIuPWiQruPBowpAONjU= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1684421838; a=rsa-sha256; cv=pass; b=C3O94qB9qyRhqMA2wlAzYN4/lft/lmKtrJgPV1dhfdPGHrhj3Z+ilgM2Dwp6YOAlXqnufG 7c1HTxAETF0GVqwnPHJUxr5OVwt5oXQ0WGHi43TaaqsxvyC4fyqWwJpJ4uadACp8GAsDSo GyESGY6phA/1jVrude1vuuvnRz0zqlA= ARC-Authentication-Results: i=2; imf05.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b=2TxcilNN; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=XP2UxOoG; spf=pass (imf05.hostedemail.com: domain of liam.howlett@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=liam.howlett@oracle.com; dmarc=pass (policy=none) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34I6JD6v018341; Thu, 18 May 2023 14:57:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : content-transfer-encoding : mime-version; s=corp-2023-03-30; bh=t3fMBW05C58TmvbN+ox7McplGzPRCNLchTHdzirfeJQ=; b=2TxcilNNxO5FOb/4anGBBLZmGIhqjyHWC4D/quif128BapvMb+RRQRr2LCYrmkR4z6rZ Gej2xVeLL8byEAZPqjDJshpVkdDU/9Oj9WZjFF7NmocJ4ji4qy+xrl8icVLnkLXe5HZz 9Ve9w62VEUTfDBhTSPQX5ilyBh+afkHN0XG/HZfR7vKTu/bVKHtEV7VWHnD+pnk0nStG FCcKoUVu0pqhlSXa6fbqNbM0DB+/bXUbPHMeb64fwjyXs/JINslUn7gCyGNxWJ+ZAyZY aTHbZ5tR/ZyVDWGnxwzXdPytX1PZq2mOQA1VaxozPDENKM4kucNKA942v3UKbhMU8Rs+ 8Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3qmx8j2vqq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 18 May 2023 14:57:15 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 34IE0xBg004186; Thu, 18 May 2023 14:57:14 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2042.outbound.protection.outlook.com [104.47.57.42]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3qj10d68rx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 18 May 2023 14:57:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BvzBLhA/H9LUphLuIBOIHt0HHB4/Y+aaqD3Xcgy1HPznEhT9ohuTdY7xpzEL4J8Chp/MH8gXK06+Ny3k9C5FHYfy++DVZvywni1wrXN+G6k4UtIPE0/fI+V+K0z5QyvmoAVyHTEM637KGIpzDS7oPPA5MwoWhFYnYmJYvBC2vcJ7o/FuLMqwIOXP0AiP0coNvixuAXB5nuP0by0kZC3vjwPyvGz+1YFDKIoMaYiHQdWpEfainncudkcozn/HQSL1hQtFHE+1e/CP3Gflpue0/8vpHtBcTVdZn0SZQv5LQ4HcYDXpbxIYrGxpZYpNL3WfMwzvqWoKotI4bVGWWn4L2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=t3fMBW05C58TmvbN+ox7McplGzPRCNLchTHdzirfeJQ=; b=czZTgSzlG8XsTkqfOAvcjYoeOuQJUdYqHkeaIsOAcgC/TueA57C3NJOyZnOQ8Qgv/cXiXpkpLTRXK7CSYtcvSB63sOm2QgP6Nqm6s1dA1fbhyAuSmNUH5VkSxGIRVI5Cv8RtMp9Dg+uNRbteVvNAh9UBqcLOUhHmGVqkjQnLEdrIOCBihgMKowEJNVTavjCNzuUT+d9cHEx0vnJE13367A+1FqaEoh4boXt1axyil45VyF0F1GPAZdCpVyJFLmjX4irgTA+m/jM+RFVTa2Hl2TnMpSufgRU1grdHcvC73NVj4rjrlFSM1cj73hW81ukcWMwecSJM26Is/A36ikUbgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t3fMBW05C58TmvbN+ox7McplGzPRCNLchTHdzirfeJQ=; b=XP2UxOoGOhlachBBxmc5YZI8r1NJgcKugs+RUOChbNXRDw2iyUi80GemrhHlSwr3RBCpojqXLiVtt5ZjeKvlsJ8AM1ldTFp5BaosR99Cf3rzyhXo1td5MfQQDbNvnEDTZ+DwEpglVPmeJc/BuyNcD42lbOUtBYbiVVZpGnzCL2A= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by IA1PR10MB7261.namprd10.prod.outlook.com (2603:10b6:208:3f6::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.17; Thu, 18 May 2023 14:57:11 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::998f:d221:5fb6:c67d]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::998f:d221:5fb6:c67d%7]) with mapi id 15.20.6411.017; Thu, 18 May 2023 14:57:11 +0000 From: "Liam R. Howlett" To: Andrew Morton Cc: maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Liam R. Howlett" Subject: [PATCH v4 33/35] maple_tree: Update testing code for mas_{next,prev,walk} Date: Thu, 18 May 2023 10:55:42 -0400 Message-Id: <20230518145544.1722059-34-Liam.Howlett@oracle.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230518145544.1722059-1-Liam.Howlett@oracle.com> References: <20230518145544.1722059-1-Liam.Howlett@oracle.com> X-ClientProxiedBy: YT4PR01CA0144.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:d5::10) To SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR10MB3022:EE_|IA1PR10MB7261:EE_ X-MS-Office365-Filtering-Correlation-Id: a66dcb6f-8f0b-4464-68b2-08db57b028d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O6ZRT2Vn6Ncz4xwnQD7eyoDNBdveVnnDPP1MnVP/DYGpRvLhRvyPM1DqOxiEIE78qQWaKRI8nmu0+Tje53fT4cLj+2InJlNqzm+YhZPGA8DAFe29JuGrCsy+JkEq+lUqh8cp7ZV8b+eNuQ4JQ83kj5WMF/XupVyCoFiuRhgeFZvOQ+GzInFdy3pMEf7G9MQc8Nl9XXcOqQOhK1DLEcmYjvfpKZKGzy843q9MAwUfwtA3hGr5IC8PRigFljni4RXhwhXm7C/fsy3nY/w8icKdBtsqWeFPSdmLuNfqAp4NcJ5G2CGVIzPr0c19yLVP/EJbzt4GxtSVyoMo4hm3h6BMeDKy92gNKOhDWpqMLuAh+DO9AsAabtf9ioJE3hjSq62REfK5klqIn0mgE7hjH7MfzPGux5yn5MwatrMVGOl9BGrdqRYx9ZAfC5gqguS0acOFhwzFrQ6l1sIRY7XwtCJlpiavJ46Glb71lLP1U+379F/Tlu7OIwo2K/Gsw04rbwe3RgPPJrP4SxKfUc0bjsY4VZ1bXTUt1ry1gJlQzabBfdPWAgpF8X4PmPiVR/aoBzGS X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR10MB3022.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(366004)(346002)(39860400002)(376002)(396003)(451199021)(41300700001)(6666004)(316002)(66556008)(66476007)(66946007)(6916009)(4326008)(6486002)(8676002)(8936002)(478600001)(5660300002)(107886003)(86362001)(26005)(6506007)(15650500001)(6512007)(1076003)(30864003)(186003)(2906002)(38100700002)(83380400001)(36756003)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?TrE7fYWGl33wfzdvluLy0vB4VIkB?= =?utf-8?q?oyuv42/1cfN7+iAHBLQPxjw68345zbBRI1iQCfOnznKKtya90ejUO4rflyXwX3seX?= =?utf-8?q?+aogwEE21otB5kDkURBZOiWVmh/8wf79sGZN4n0gWCRQgIZ/WIImb5GaEbaNrEmsy?= =?utf-8?q?rM4dkItUo2RaXGJB9zR/M7O4LLI8KtFfGTxBhTBKri6STm8/XF6UgLLrqPdqgU1BC?= =?utf-8?q?RzIfpchoBNCHpRb/1J/PwBw06EHGxz3g7RtI8wPINYCp4QLdvbdTxWLXtQX64mSrc?= =?utf-8?q?mpiARnwGVjWVwIWhUrLBSExdR709XEbCevG6qHSpd8tB/gJ7U8SiNES+Ly+W6dMLS?= =?utf-8?q?8lVqW+w3na3JzSfMpU1QEBqVj2Im5843Jf2Z5wl1/7CeXpgsdwzMbQyvh/JB37kG7?= =?utf-8?q?Gpl8OzRopDdeNgqzsK7tta20NAugqgqCcZe+XFBeeTYJPRPgjt/Ik3gBwKJEnFHbs?= =?utf-8?q?RXhJrLTT4DXAxhP17XZ+8jZqPI/foZ64yA05fN33O0HaGsX18vtEIVU/xQ1lHD0js?= =?utf-8?q?UegVUaewhNWftEwSYGe8i1sCKDGUcsqJ0hP2LZYhYK59d1PcQ2ouJMiebhi/zyZaC?= =?utf-8?q?Y6o5EAMqPlYDyBwBt9u0iu+hcT0az8Qpbq0dqxFxIUmCBldvyGLHtmUKgMj0yMbRc?= =?utf-8?q?FaaXjBaBIKyo7P46Z72P8Os7f51T0MgMQSH9uzat32MMxt+EJr8D2DKSc6tg0KVre?= =?utf-8?q?vQ4XUqZuXJYP1a8nbb88P8wAbUEkdd7czhJt+Jz8CyIub6emi01lpvaByLfqYOYRP?= =?utf-8?q?aZCA2Si4z/eYEtvAFKglAIGe8fwlam9RR65i4Gtj3VwB79N1sa6m0fVRCAbNy0v9B?= =?utf-8?q?cO0j+DmalJzmcpnJNQZYjXBEz8BeAE40e5qbr6rugnqa/UEBHQcxFphpzp/FZ8+wy?= =?utf-8?q?E9aVANWHyA86tRevgK1VIm0+VavN8iItatxBavimSuid4kekumZdyPU+BR9ayjD2X?= =?utf-8?q?4nHRwBpe+Fl6hqcibSxIFlflUJHURD7Wymu3c8FH2m+rrlq1/kPXMT2bVd0TOtVUr?= =?utf-8?q?dI+KaYBHJcI9vP2Z9aAXabwScPz+/jt9gA5vlcN/2kPdZRVa74awMxR6Vpzh385jw?= =?utf-8?q?b/1C1ByQCgFMRgbKGDRVQeV3Ql4FHatnbxfdEkeoi4JBkxbHQpAOG8vlfbukupIjp?= =?utf-8?q?KavtuosFu0hCpaFiuPGuWbVS46fTmy8JuY3kz5qtPvVqE4KwRL+bBRJxh69IFGqWh?= =?utf-8?q?lDlUbgYbvKq2Fo3AaDthxukT4FzJPHYX6owTQM8+pjXwsNQQ/Q8Q1fwq1zQhzUXNW?= =?utf-8?q?SLWBoCasw+hgsk+TOl/cwcsnrnFZh8gGX5jQL+YiJUPigXQklzE8sm4KrZhNmb0SV?= =?utf-8?q?ixd4VbFcBIwNaGqEV12TfO8JLBXCil73CWh9U1sCPo0PFlcToECLbXWrKD618eXLN?= =?utf-8?q?Qt/IAKdSvJBOqIosiaySx2JbpbRIoe1v/VM5/7SOXPB1MDC+6ViBUdNjtAok0nZg7?= =?utf-8?q?yNFkyEQ6wkp47DxubMIquvUbdqVstxxpbwG30qIieZE3Jisd3MNdq3b2xQ3og0s5S?= =?utf-8?q?+YDFK01pIjA6xPEFPPVegnQtAAkId5niIg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0L2TgwAHgybs/Y/UFHbw1j0VIjPpr1/n4WJ5cUXH93go5Z7BOdMS+/G2kcKMQaAzj5nnTtMXs0Qq4XjZKP+2ek83l+/feuHicUFIwhoT8ngGVQfbUk/K9E7nsf3DPyhOFG8LB9d6BKfkQ9quzr5TRjJLrvLAnGe7IjIVPbgh6sAmfBD/TNWipjrXz55JHxYtdxq42qbqdghh/yDF1W4k/qwF4yD1zgXJBnXswrAnHmKeHmVz8fXbQs2QOaSGopas+cnbOvPGOssiivl5ngM4IzHn+rdS1oAw5GkXJBNmFkwlZtmFX7/b/AUgZh6dDFGBme1F9JBzCMVZNqT4kdgHS/bPYA5PFjm4EqicdM1pxeeJreVK5vEWbdc7FvA32hH+zLf1/e52IXSOTJazcJhlxW0gcC+eyFLL/9aZKgxvntcAgBLwIZ8PYBFygX3tu0gY7E0OnlsCaXX3m/Hu9BKanUEBJ65fo2zI+jvNfLDThzxfnqa1dv0Vy8NB+ayRyolcEollmrsh7Mauoxe9ShzUxBM9T/VTauT12LDBzT4utwBfDgpA4lWgJKaciP49EQZNoYyzWD49v5Zvvn6F3gmyv9riT7ZKnPnuuF8yCv8r8S1e1xSTkRgY02PEIKw3GaOiOpmGny5vP4ykVCFMacPzUfjuhmVcD/v0eTSKpRwGOVswqSCwOsMwzI6ZIy+DZbrEH8KcYwES2avm8sG+esbLGTUycsq65ieM2XhUVupuDwf1i/pYaWHqec1xQkSnot6MYtrh7LQ9r9StIZF5ndY2JbLdS1PbeRi/hDC501nD2Dwb4BXwNn7m0jGWDsUpDM7vqTS3uhZbCwYwYm/6WeO9kKeYTEK8OXUqEni9cJDML75nACDlTdIowydfvnmFvbNVfYNnNkAQXRN4xJ0uV8mrPA== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a66dcb6f-8f0b-4464-68b2-08db57b028d9 X-MS-Exchange-CrossTenant-AuthSource: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2023 14:57:11.5731 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Dzqf9NEvvBGi5iI4hfz991/BDahs+DoOgyNnlu8ZeSlIRhAlRWMvl6iVkU+ihnftA8ubIZy4uHn3V+E1vQMBDQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB7261 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-05-18_11,2023-05-17_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 bulkscore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305180120 X-Proofpoint-GUID: Rtr1LnFISVkvoALC5cIXo2bb-HdjRorr X-Proofpoint-ORIG-GUID: Rtr1LnFISVkvoALC5cIXo2bb-HdjRorr X-Stat-Signature: 7ozuq43yjhg7xbn437s9ycm4mm75s7xf X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: D0D93100018 X-HE-Tag: 1684421837-790874 X-HE-Meta: U2FsdGVkX18WrkIz6I41PvUwN9NuvpSUJJmKeS51l1plTFKeWNg9IQug7Sm9JxN82jFk5We8DlnNMAlaceHjaWjsZLraz1tjIQDPNEDgwMrh/hovhHWCW9398qZtF6iXQvBOIRLUxE5D6YREq9NVMQv3gPFQKvBfc001DstvABmdBHNq2GQ9RM03nT/UmmkJzwEoBhZko2z5VucGb16edu2b2VjA+Lq/HOcBIX6pk7IKIu4/MCZl1wYEvJDxpW4LFFHYLz7tMSyG/m74ngEyZO3PgAmsdZcGbgscWKkUZEdqQnuX/73BAg76PL/lk6vGEEFRXo63oQdf8L0tjIJHD/uEEZvcqX/fcK+rKB3cU+n2MfnCOfTMs0TCMrZP9lSK3TOpWcUUQsAJ9h0pEZAcirRoAsRHVLDfqMFsd8rjUatoyLra73QaPyd4cREmCHPU4CvXzSL6d09lM0SR0ONRAEKgqPS4sLxNCQckYejMqmUlb7pavTjQFCwWFuT+N+vesjnSfY0BZPdJI7y9T8eqcNVYS3jhKdMWpD6ai64U18hWpDDFJGxwRsk1QQXGJEssQGBpI2lO6540pdPWJ5dHCFfth5nPXybvjodAICf9JzhPv44c0QDkkYEE+ftyuT4aUkG2sh7v8nOzfmqAaHwRHYtuyFklDDoXZZwj2HCMWA8ZT6NVp4SlUTf2T99UfvjBteWdZ1JMcy6mF6Gi0AvP9CK80qQLV1d3sSLigDAn6l+RsKWrg7007hZiUUlmpPblYS3eV8NEHovk4UzUwRwU+YNZ6llhXABkXc6Iwofdf8yctXcwC/So3H6vkIoDXDOzax6w57vCeIHDMeHmHb/9VxO2yavjwYLxs3oMlCHzfMdzHWBZTaGJtYMPSmgWx5TXZXz6AXyNhx4QbZpazm1y98GEMxTBM72GihFtx7qVwrgR8nNC7F4onBGLLJ5QMvofSGW3qxqsLcu7rxRP48V h/RSReNe UdpVCBU3FvDISoiEAkSOtuG3dCNdqaAZ8ZmEmtk2cft9WGoSpumNSYkj7Z1MEW2r9BuccdOGVEnVPqsv3KhHffDCbHoQ8tNLiKNDhy7losPgC2vPvHucsiauj2skasaQkPGzI2f/RVqUZsU0+xyYdQ5GVFnPmx2vc3GrJ69Acz+whjMcHjFlk00noxWWTrSsm57/aHngKP/hVQnVVeVs4Px+48+YWhFtq03tFKO/53feGx9wqOqRqx5Dt9TzVEpZc2bfOFPz8TlJ6JICT9Aazyh33HTkAtdNn/1tmuGokoBiR3GGowc0SEhrhX13DMSzhxtjmoREmejYttguzwN7fQzT+4ytNoacqHZaACqiPKdoGmLl2SMAr+fmepV3tQ6EwzO3GIFHs/O7VR13cu40n+zE8bTdmoL3xzGpq9V2L8ygbogpo3WdqBYO8dg== 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: Now that the functions have changed the limits, update the testing of the maple tree to test these new settings. Signed-off-by: Liam R. Howlett --- lib/test_maple_tree.c | 638 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 633 insertions(+), 5 deletions(-) diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c index d295fdee2fae..9939be34e516 100644 --- a/lib/test_maple_tree.c +++ b/lib/test_maple_tree.c @@ -1322,6 +1322,7 @@ static noinline void __init check_root_expand(struct maple_tree *mt) mas_lock(&mas); mas_set(&mas, 3); ptr = mas_walk(&mas); + MT_BUG_ON(mt, mas.index != 0); MT_BUG_ON(mt, ptr != NULL); MT_BUG_ON(mt, mas.index != 0); MT_BUG_ON(mt, mas.last != ULONG_MAX); @@ -1391,7 +1392,7 @@ static noinline void __init check_root_expand(struct maple_tree *mt) mas_store_gfp(&mas, ptr, GFP_KERNEL); ptr = mas_next(&mas, ULONG_MAX); MT_BUG_ON(mt, ptr != NULL); - MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX)); + MT_BUG_ON(mt, (mas.index != ULONG_MAX) && (mas.last != ULONG_MAX)); mas_set(&mas, 1); ptr = mas_prev(&mas, 0); @@ -1800,7 +1801,6 @@ static noinline void __init check_iteration(struct maple_tree *mt) mas.index = 760; mas.last = 765; mas_store(&mas, val); - mas_next(&mas, ULONG_MAX); } i++; } @@ -2011,7 +2011,7 @@ static noinline void __init next_prev_test(struct maple_tree *mt) val = mas_next(&mas, ULONG_MAX); MT_BUG_ON(mt, val != NULL); - MT_BUG_ON(mt, mas.index != ULONG_MAX); + MT_BUG_ON(mt, mas.index != 0x7d6); MT_BUG_ON(mt, mas.last != ULONG_MAX); val = mas_prev(&mas, 0); @@ -2035,7 +2035,8 @@ static noinline void __init next_prev_test(struct maple_tree *mt) val = mas_prev(&mas, 0); MT_BUG_ON(mt, val != NULL); MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.last != 5); + MT_BUG_ON(mt, mas.node != MAS_NONE); mas.index = 0; mas.last = 5; @@ -2047,7 +2048,7 @@ static noinline void __init next_prev_test(struct maple_tree *mt) val = mas_prev(&mas, 0); MT_BUG_ON(mt, val != NULL); MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.last != 9); mas_unlock(&mas); mtree_destroy(mt); @@ -2750,6 +2751,629 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt) mt_set_non_kernel(0); } +/* + * Check MAS_START, MAS_PAUSE, active (implied), and MAS_NONE transitions. + * + * The table below shows the single entry tree (0-0 pointer) and normal tree + * with nodes. + * + * Function ENTRY Start Result index & last + * ┬ ┬ ┬ ┬ ┬ + * │ │ │ │ └─ the final range + * │ │ │ └─ The node value after execution + * │ │ └─ The node value before execution + * │ └─ If the entry exists or does not exists (DNE) + * └─ The function name + * + * Function ENTRY Start Result index & last + * mas_next() + * - after last + * Single entry tree at 0-0 + * ------------------------ + * DNE MAS_START MAS_NONE 1 - oo + * DNE MAS_PAUSE MAS_NONE 1 - oo + * DNE MAS_ROOT MAS_NONE 1 - oo + * when index = 0 + * DNE MAS_NONE MAS_ROOT 0 + * when index > 0 + * DNE MAS_NONE MAS_NONE 1 - oo + * + * Normal tree + * ----------- + * exists MAS_START active range + * DNE MAS_START active set to last range + * exists MAS_PAUSE active range + * DNE MAS_PAUSE active set to last range + * exists MAS_NONE active range + * exists active active range + * DNE active active set to last range + * + * Function ENTRY Start Result index & last + * mas_prev() + * - before index + * Single entry tree at 0-0 + * ------------------------ + * if index > 0 + * exists MAS_START MAS_ROOT 0 + * exists MAS_PAUSE MAS_ROOT 0 + * exists MAS_NONE MAS_ROOT 0 + * + * if index == 0 + * DNE MAS_START MAS_NONE 0 + * DNE MAS_PAUSE MAS_NONE 0 + * DNE MAS_NONE MAS_NONE 0 + * DNE MAS_ROOT MAS_NONE 0 + * + * Normal tree + * ----------- + * exists MAS_START active range + * DNE MAS_START active set to min + * exists MAS_PAUSE active range + * DNE MAS_PAUSE active set to min + * exists MAS_NONE active range + * DNE MAS_NONE MAS_NONE set to min + * any MAS_ROOT MAS_NONE 0 + * exists active active range + * DNE active active last range + * + * Function ENTRY Start Result index & last + * mas_find() + * - at index or next + * Single entry tree at 0-0 + * ------------------------ + * if index > 0 + * DNE MAS_START MAS_NONE 0 + * DNE MAS_PAUSE MAS_NONE 0 + * DNE MAS_ROOT MAS_NONE 0 + * DNE MAS_NONE MAS_NONE 0 + * if index == 0 + * exists MAS_START MAS_ROOT 0 + * exists MAS_PAUSE MAS_ROOT 0 + * exists MAS_NONE MAS_ROOT 0 + * + * Normal tree + * ----------- + * exists MAS_START active range + * DNE MAS_START active set to max + * exists MAS_PAUSE active range + * DNE MAS_PAUSE active set to max + * exists MAS_NONE active range + * exists active active range + * DNE active active last range (max < last) + * + * Function ENTRY Start Result index & last + * mas_find_rev() + * - at index or before + * Single entry tree at 0-0 + * ------------------------ + * if index > 0 + * exists MAS_START MAS_ROOT 0 + * exists MAS_PAUSE MAS_ROOT 0 + * exists MAS_NONE MAS_ROOT 0 + * if index == 0 + * DNE MAS_START MAS_NONE 0 + * DNE MAS_PAUSE MAS_NONE 0 + * DNE MAS_NONE MAS_NONE 0 + * DNE MAS_ROOT MAS_NONE 0 + * + * Normal tree + * ----------- + * exists MAS_START active range + * DNE MAS_START active set to min + * exists MAS_PAUSE active range + * DNE MAS_PAUSE active set to min + * exists MAS_NONE active range + * exists active active range + * DNE active active last range (min > index) + * + * Function ENTRY Start Result index & last + * mas_walk() + * - Look up index + * Single entry tree at 0-0 + * ------------------------ + * if index > 0 + * DNE MAS_START MAS_ROOT 1 - oo + * DNE MAS_PAUSE MAS_ROOT 1 - oo + * DNE MAS_NONE MAS_ROOT 1 - oo + * DNE MAS_ROOT MAS_ROOT 1 - oo + * if index == 0 + * exists MAS_START MAS_ROOT 0 + * exists MAS_PAUSE MAS_ROOT 0 + * exists MAS_NONE MAS_ROOT 0 + * exists MAS_ROOT MAS_ROOT 0 + * + * Normal tree + * ----------- + * exists MAS_START active range + * DNE MAS_START active range of NULL + * exists MAS_PAUSE active range + * DNE MAS_PAUSE active range of NULL + * exists MAS_NONE active range + * DNE MAS_NONE active range of NULL + * exists active active range + * DNE active active range of NULL + */ + +#define mas_active(x) (((x).node != MAS_ROOT) && \ + ((x).node != MAS_START) && \ + ((x).node != MAS_PAUSE) && \ + ((x).node != MAS_NONE)) +static noinline void __init check_state_handling(struct maple_tree *mt) +{ + MA_STATE(mas, mt, 0, 0); + void *entry, *ptr = (void *) 0x1234500; + void *ptr2 = &ptr; + void *ptr3 = &ptr2; + + /* Check MAS_ROOT First */ + mtree_store_range(mt, 0, 0, ptr, GFP_KERNEL); + + mas_lock(&mas); + /* prev: Start -> none */ + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* prev: Start -> root */ + mas_set(&mas, 10); + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* prev: pause -> root */ + mas_set(&mas, 10); + mas_pause(&mas); + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* next: start -> none */ + mas_set(&mas, 0); + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* next: start -> none */ + mas_set(&mas, 10); + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find: start -> root */ + mas_set(&mas, 0); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* find: root -> none */ + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find: none -> none */ + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find: start -> none */ + mas_set(&mas, 10); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find_rev: none -> root */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* find_rev: start -> root */ + mas_set(&mas, 0); + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* find_rev: root -> none */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find_rev: none -> none */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* find_rev: start -> root */ + mas_set(&mas, 10); + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* walk: start -> none */ + mas_set(&mas, 10); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* walk: pause -> none*/ + mas_set(&mas, 10); + mas_pause(&mas); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* walk: none -> none */ + mas.index = mas.last = 10; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* walk: none -> none */ + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* walk: start -> root */ + mas_set(&mas, 0); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* walk: pause -> root */ + mas_set(&mas, 0); + mas_pause(&mas); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* walk: none -> root */ + mas.node = MAS_NONE; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* walk: root -> root */ + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + /* walk: root -> none */ + mas_set(&mas, 10); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, mas.node != MAS_NONE); + + /* walk: none -> root */ + mas.index = mas.last = 0; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + MT_BUG_ON(mt, mas.node != MAS_ROOT); + + mas_unlock(&mas); + + /* Check when there is an actual node */ + mtree_store_range(mt, 0, 0, NULL, GFP_KERNEL); + mtree_store_range(mt, 0x1000, 0x1500, ptr, GFP_KERNEL); + mtree_store_range(mt, 0x2000, 0x2500, ptr2, GFP_KERNEL); + mtree_store_range(mt, 0x3000, 0x3500, ptr3, GFP_KERNEL); + + mas_lock(&mas); + + /* next: start ->active */ + mas_set(&mas, 0); + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next: pause ->active */ + mas_set(&mas, 0); + mas_pause(&mas); + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next: none ->active */ + mas.index = mas.last = 0; + mas.offset = 0; + mas.node = MAS_NONE; + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next:active ->active */ + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr2); + MT_BUG_ON(mt, mas.index != 0x2000); + MT_BUG_ON(mt, mas.last != 0x2500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next:active -> active out of range*/ + entry = mas_next(&mas, 0x2999); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x2501); + MT_BUG_ON(mt, mas.last != 0x2fff); + MT_BUG_ON(mt, !mas_active(mas)); + + /* Continue after out of range*/ + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr3); + MT_BUG_ON(mt, mas.index != 0x3000); + MT_BUG_ON(mt, mas.last != 0x3500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next:active -> active out of range*/ + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x3501); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, !mas_active(mas)); + + /* next: none -> active, skip value at location */ + mas_set(&mas, 0); + entry = mas_next(&mas, ULONG_MAX); + mas.node = MAS_NONE; + mas.offset = 0; + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr2); + MT_BUG_ON(mt, mas.index != 0x2000); + MT_BUG_ON(mt, mas.last != 0x2500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* prev:active ->active */ + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* prev:active -> active out of range*/ + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0x0FFF); + MT_BUG_ON(mt, !mas_active(mas)); + + /* prev: pause ->active */ + mas_set(&mas, 0x3600); + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr3); + mas_pause(&mas); + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr2); + MT_BUG_ON(mt, mas.index != 0x2000); + MT_BUG_ON(mt, mas.last != 0x2500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* prev:active -> active out of range*/ + entry = mas_prev(&mas, 0x1600); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x1501); + MT_BUG_ON(mt, mas.last != 0x1FFF); + MT_BUG_ON(mt, !mas_active(mas)); + + /* prev: active ->active, continue*/ + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find: start ->active */ + mas_set(&mas, 0); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find: pause ->active */ + mas_set(&mas, 0); + mas_pause(&mas); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find: start ->active on value */; + mas_set(&mas, 1200); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find:active ->active */ + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != ptr2); + MT_BUG_ON(mt, mas.index != 0x2000); + MT_BUG_ON(mt, mas.last != 0x2500); + MT_BUG_ON(mt, !mas_active(mas)); + + + /* find:active -> active (NULL)*/ + entry = mas_find(&mas, 0x2700); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x2501); + MT_BUG_ON(mt, mas.last != 0x2FFF); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find: none ->active */ + entry = mas_find(&mas, 0x5000); + MT_BUG_ON(mt, entry != ptr3); + MT_BUG_ON(mt, mas.index != 0x3000); + MT_BUG_ON(mt, mas.last != 0x3500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find:active -> active (NULL) end*/ + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x3501); + MT_BUG_ON(mt, mas.last != ULONG_MAX); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find_rev: active (END) ->active */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr3); + MT_BUG_ON(mt, mas.index != 0x3000); + MT_BUG_ON(mt, mas.last != 0x3500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find_rev:active ->active */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr2); + MT_BUG_ON(mt, mas.index != 0x2000); + MT_BUG_ON(mt, mas.last != 0x2500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find_rev: pause ->active */ + mas_pause(&mas); + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find_rev:active -> active */ + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0x0FFF); + MT_BUG_ON(mt, !mas_active(mas)); + + /* find_rev: start ->active */ + mas_set(&mas, 0x1200); + entry = mas_find_rev(&mas, 0); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk start ->active */ + mas_set(&mas, 0x1200); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk start ->active */ + mas_set(&mas, 0x1600); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x1501); + MT_BUG_ON(mt, mas.last != 0x1fff); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk pause ->active */ + mas_set(&mas, 0x1200); + mas_pause(&mas); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk pause -> active */ + mas_set(&mas, 0x1600); + mas_pause(&mas); + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x1501); + MT_BUG_ON(mt, mas.last != 0x1fff); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk none -> active */ + mas_set(&mas, 0x1200); + mas.node = MAS_NONE; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk none -> active */ + mas_set(&mas, 0x1600); + mas.node = MAS_NONE; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x1501); + MT_BUG_ON(mt, mas.last != 0x1fff); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk active -> active */ + mas.index = 0x1200; + mas.last = 0x1200; + mas.offset = 0; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != ptr); + MT_BUG_ON(mt, mas.index != 0x1000); + MT_BUG_ON(mt, mas.last != 0x1500); + MT_BUG_ON(mt, !mas_active(mas)); + + /* mas_walk active -> active */ + mas.index = 0x1600; + mas.last = 0x1600; + entry = mas_walk(&mas); + MT_BUG_ON(mt, entry != NULL); + MT_BUG_ON(mt, mas.index != 0x1501); + MT_BUG_ON(mt, mas.last != 0x1fff); + MT_BUG_ON(mt, !mas_active(mas)); + + mas_unlock(&mas); +} + static DEFINE_MTREE(tree); static int __init maple_tree_seed(void) { @@ -3011,6 +3635,10 @@ static int __init maple_tree_seed(void) mtree_destroy(&tree); + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_state_handling(&tree); + mtree_destroy(&tree); + #if defined(BENCH) skip: #endif