From patchwork Wed Jun 26 14:03:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Uladzislau Rezki (Sony)" X-Patchwork-Id: 13713011 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 34E1CC30658 for ; Wed, 26 Jun 2024 14:03:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A4BAD6B0085; Wed, 26 Jun 2024 10:03:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9FBB76B0088; Wed, 26 Jun 2024 10:03:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A6526B008A; Wed, 26 Jun 2024 10:03:39 -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 6A9346B0085 for ; Wed, 26 Jun 2024 10:03:39 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 52B4181330 for ; Wed, 26 Jun 2024 14:03:38 +0000 (UTC) X-FDA: 82273207716.20.D946816 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by imf29.hostedemail.com (Postfix) with ESMTP id DE39812001D for ; Wed, 26 Jun 2024 14:03:34 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="k/1BVLq8"; spf=pass (imf29.hostedemail.com: domain of urezki@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719410598; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=a8J/0rbvyVLHrEXRHvUI44ewOQgj0kI0R2lTjROyuIg=; b=5GBEgzriBJGpnSSKOVePj6wA5+bHD1sO/o5Nd+vfMvSythnsGxkpamMDMatU+y5uW9nO9+ VmLUwgvK1K5iuybkXpdt/rR7qovpOHqHHoC+vXTqyfeCgEwVQI3GTubyqOTy/OWEue/7ba hu1z+3aiiTDWRtFEKqHxXdq9lCaExAs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719410598; a=rsa-sha256; cv=none; b=v8QeYOqhuhR9OpiT5s+YKIt2ZL78Z0pnMsPUnkipJYLjkRqq+hU/vfxinNmjprmAWQmK8Q 39FuGVh2qXyiNzr61glIuwa3cr3nzbUHmdrY7Kf+ldPKVjKK6KoTX24p4GPsHh0lL96x28 fYwQYrW10BShlLKzJl/Dvnhl/C98rhI= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="k/1BVLq8"; spf=pass (imf29.hostedemail.com: domain of urezki@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-a72459d8d6aso466912266b.0 for ; Wed, 26 Jun 2024 07:03:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719410613; x=1720015413; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=a8J/0rbvyVLHrEXRHvUI44ewOQgj0kI0R2lTjROyuIg=; b=k/1BVLq8RidhuwKf8BVoU4/1Dslrt6PYZFkNXB9+gXDndAlaufwf9FBKHDLaMhI9ai A1V4CClu3jTCUnWjZKxzPJtPv4OV4ky6TApj502m4DBMSQ7yfmF8tjNlScIbiVwrg3EK JSH27jIbAU07Dt0FmvPIUWeVnyMJib+IPqw77AUaHRvpvrGqYA0XAYzIR7v0ZcaStmuK UUYA2ybaVsyNkVsdFWm/jkYLyCuzm5AoeZVhFf+J6TINyfXpHG+nQKqFTroXZ2E7WcJk HVBjHSqMjAm2D6HPJ9XcG4J+asi+0mUtyU5nvasvMmOWXgdolNFSOD2WBSrIfcNMHDQd /+LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719410613; x=1720015413; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=a8J/0rbvyVLHrEXRHvUI44ewOQgj0kI0R2lTjROyuIg=; b=N5FnnDnx+7oAhznqrr8w99iDje18xa/+x2bYbPZ0QN6kG033XSCRsgN312AMGPPaIr s5ZRA6gQe23fPOfmza99hEXLwYObVgLLrXYmvDPj0saZLoUFWqRDWMivaG1tykvJdfV5 BZe16BpSJawPNWiBYq+epV50Syb9C5xoSTBcxijx5jBXi+93gdZxg6SJQBDGDKPlaxEI 75aSSScXOXG+Hvg4IcqCieUEzvOTgHYP+VSLHQUPBhvRkEDkJMaYgb2GBBEWHF+9gplZ n0ixtOBjktOOk3SOXvLap+Va82IOUWhiOWY1fHFQdgRaoZnmlEB82WVPTbU6P1jKphKy iFTw== X-Gm-Message-State: AOJu0Yxgh3uq0M6yd8CquHGL9tSqjXz7+h0oZKiZGuyIL+0DXVdFZGY7 an6f3DlLHO9/RHytV7HaBtLo2d8vmWZqNdg1fWU125JDPPCtGhZJUJljjw== X-Google-Smtp-Source: AGHT+IGwnJigcVlekJc4wuhQ5CyFPJkiRM/TvW9TOjWhYvxkbyUS/ofbTHF/oNZGwslIbIrTilh92g== X-Received: by 2002:a17:906:2690:b0:a6f:586b:6c1 with SMTP id a640c23a62f3a-a7245c2db6cmr683232866b.56.1719410612919; Wed, 26 Jun 2024 07:03:32 -0700 (PDT) Received: from pc638.lan (host-185-121-47-193.sydskane.nu. [185.121.47.193]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a725bc1b3e1sm270143766b.8.2024.06.26.07.03.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jun 2024 07:03:32 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: linux-mm@kvack.org, Andrew Morton Cc: LKML , Baoquan He , Hailong Liu , Christoph Hellwig , Nick Bowler , Uladzislau Rezki , Oleksiy Avramchenko Subject: [PATCH v2] mm: vmalloc: Check if a hash-index is in cpu_possible_mask Date: Wed, 26 Jun 2024 16:03:30 +0200 Message-Id: <20240626140330.89836-1-urezki@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Stat-Signature: hkbxazd9o5ognmnmciyugi7zowrezjym X-Rspamd-Queue-Id: DE39812001D X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1719410614-803824 X-HE-Meta: U2FsdGVkX18FBV//BVVgRiP2xGW+JB+0Awt6ByVomO3PUIUWXvR/i5Cf3Ys5rH/DHLuYwKjPuN0m4xVjZrAyhGyapOWUt4PSnv9vyjqDHFRMVpYhtMu/1AAR1gkPmWtpPmqExTA5Equ23Zv6S/HvlEswKVaBCRgTog+95OnPvtneuqCugn4Ln1Blf0eiTTleDFSM63AnZkqtBhZEYF9+emxOEMuWVbl0vdbm/rm9g224Hy/MO5T+LmlUuBJc4WlK1wQaWcqzUReJCxGDAmVmtWdhcnscSMwbXC/M9HOk4co4uXuWVs1O+Hzr/+Naz2eSj0O2w95StjcqK5EphoTxdSdSYqA32X3//R1NrllfneGMP33t8AmqzCJBIP+cwgzSVAn1O4xovM9rEBD41trxabruqZ2yDFoLqYVTJLyYMJXMTsNidOUOq710NqYSjQ0zChFNiJS7mOiW+e1xq4vYLmyOTYZhwvYA0JpiIy4bSxTriFhL0WKndFQlZi4Op9ULE9Egh53zQfO3MXgnVtTd65vNOXpFr6/v0Yiy81f5QtrvmCY+3bcYhIY+0qV+jmoSm2l5DTrs1f++plJIoUcNOemf0YDB/DuYgLezXARpy4sZ528Mbypot1SNsx4u0KHqa76FP75/9mKf9nCXteFwecfkBp30karu9rgQmZTogQeFm867vLRefKViSA0rhmPuVVtKpO02dzdC11qX2kqVwVQwhSJavyxz/QOO9/rX8ZdulvdtXNvDnnPSrypGwFf65HZ9sdhi3PCLdDCKjEcfRjqijx67aCYd263SfCael4ZwyOygixOSYsnPsqIGG6uWhDrI/B2o8mwMQfKmnZv9iDTjLKb4arn2xC62vQkIUngpxGyuMIV0I/4MjMyU93NWoXRByVGFgcItvGhOGA9dUenpoqCdsnHUcMbSBpeeCVm+eBEZ5zkaFL7MIA+06waCPTdMLafAbNjseOGJWEp lFgJ4OXP 9SwdVq4pvPQId05NiEEtBIXY/iYutnvPySAlevuIRzUgR7TtN7FuxAl0FNtPTwN+Y2FX/yqU8a6kwiBydKu0Ca0YYVdCCoMt5Y6ytWmXJkYctmsgB6OtnY0/XgIvjS+ICuSW4Mo0AsDiy1c1beOcaKH79EL/aJjDonYeevgcq+t+qqpFq1UPAiY0QUJX5aiY3kJDU3db/5TkK6KM4CurSTnn9UZEoHfA736wfk7Tr+ZIJ6lNiw5W1NYtMp71u+tHl8tki0vPqH+VONSkcVbq2n2hsf2VIo2LoxsdeIHb2EbwsnRzXdG9cZaYs0fcY6FBOc2I/r4iFxO2cWtUw4Fc3rFhnfuOyfrRfKqqayavvXZE+MUcb58W2Q5YYHgwvZXB3z1YzYsniXecHqwdcHpsf0kuvV/nN3xTc7VasK3zW6NYp1R+Y+XwbLYOMabPh/XOMYzBKHOilg8kT0+zz0qclj8dhF+DieXn9HaB71whLVW448ahFXOpZqvZ6T5ueyXjbT/6f0jFIkBK+E/U= 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: The problem is that there are systems where cpu_possible_mask has gaps between set CPUs, for example SPARC. In this scenario addr_to_vb_xa() hash function can return an index which accesses to not-possible and not setup CPU area using per_cpu() macro. A per-cpu vmap_block_queue is also used as hash table, incorrectly assuming the cpu_possible_mask has no gaps. Fix it by adjusting an index to a next possible CPU. v1 -> v2: - update a commit message. Fixes: 062eacf57ad9 ("mm: vmalloc: remove a global vmap_blocks xarray") Reported-by: Nick Bowler Closes: https://lore.kernel.org/linux-kernel/ZntjIE6msJbF8zTa@MiWiFi-R3L-srv/T/ Signed-off-by: Uladzislau Rezki (Sony) Reviewed-by: Baoquan He --- mm/vmalloc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index b4c42da9f3901..6b783baf12a14 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2544,7 +2544,15 @@ static DEFINE_PER_CPU(struct vmap_block_queue, vmap_block_queue); static struct xarray * addr_to_vb_xa(unsigned long addr) { - int index = (addr / VMAP_BLOCK_SIZE) % num_possible_cpus(); + int index = (addr / VMAP_BLOCK_SIZE) % nr_cpu_ids; + + /* + * Please note, nr_cpu_ids points on a highest set + * possible bit, i.e. we never invoke cpumask_next() + * if an index points on it which is nr_cpu_ids - 1. + */ + if (!cpu_possible(index)) + index = cpumask_next(index, cpu_possible_mask); return &per_cpu(vmap_block_queue, index).vmap_blocks; }