From patchwork Wed Jun 26 11:43:24 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: 13712767 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 9197FC27C4F for ; Wed, 26 Jun 2024 11:43:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AFC586B008C; Wed, 26 Jun 2024 07:43:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AAB536B0092; Wed, 26 Jun 2024 07:43:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 94BC76B0093; Wed, 26 Jun 2024 07:43:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 773936B008C for ; Wed, 26 Jun 2024 07:43:31 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D37ED160EAF for ; Wed, 26 Jun 2024 11:43:30 +0000 (UTC) X-FDA: 82272854580.24.2FFB0C5 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by imf30.hostedemail.com (Postfix) with ESMTP id 23E3680002 for ; Wed, 26 Jun 2024 11:43:28 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NmfK056h; spf=pass (imf30.hostedemail.com: domain of urezki@gmail.com designates 209.85.208.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=1719402188; 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=u0vlM+qZ0aOaH69nP4epFVl6In7rL2hoACpDR7WfzP8=; b=PBp/HDzcjHQPEHLMlMA4Q/AYRDj07SJtLzSBAuUoAXSUSxTm0fHNFE0KnSAV9PR5fGOLdp 6m8BTAHvbck8M8ZjZSnIkrLcAgoAejzuxCdGpOmvYhWWpCB9VHPA9G7ON2zDEzI5BUfG5c CKnDcwmiBYhhUTRVw/gUMwXqdANsSnU= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NmfK056h; spf=pass (imf30.hostedemail.com: domain of urezki@gmail.com designates 209.85.208.46 as permitted sender) smtp.mailfrom=urezki@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719402188; a=rsa-sha256; cv=none; b=HVJx4f35lI2hNcAwQuU65g8k91nYnPHqaz/gmBV45E5b1BMhQht2txfyTVdv+OHOj+7YnH JVEb+B1wgNyUDFZmmkFZFoUiZmnWrWOB4N/cQ3kSt8h8q16OMBt6aw2HilyZqMGxRSfcB9 MGnwtTo1MbV61H+9NzGwmrhUd0aXVDU= Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-57ccd1111aeso167024a12.0 for ; Wed, 26 Jun 2024 04:43:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719402207; x=1720007007; 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=u0vlM+qZ0aOaH69nP4epFVl6In7rL2hoACpDR7WfzP8=; b=NmfK056hEmN9PJTnkT45T8OW/dFp36XUtFzjByIg0bC0nKE4LAJi1AHsO+0fNwqu5z Dkp4Q1zxLnfPeGRxvmS5EQHq5o/9UOUBOIImQRbyinRvqEPXEY9C9viJF0CjsN/p39XD Azb+WlEi3L+jHafjNeqaZVGt8GcB2Z0Ieujdx4NJshK38vKbOWbqeGqOAY3XGt7ju8wY 4BBgZiqqWOWLkjAYqyCLOULdljDiLiJAxDeweFd4wn+uC/be28XgSDc8QHP0KRCMM5l0 CGYgH+84j8OeRl1z+yLb4mz3Zp1wHhn2BWChh/O4/NnT/N/J9yn+dGpL1EEQzNEicUQH d+xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719402207; x=1720007007; 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=u0vlM+qZ0aOaH69nP4epFVl6In7rL2hoACpDR7WfzP8=; b=nNoODivnW+P5ahcOc9gc0BYrT3pX+UBduOWZHfc90eedFhenuM7+LfpcBOq6KJV/yG c2QyR5nbEm3mPriPfYvA/daDHBVPNCPWfXN2SqTSiKphW2j6bFp2qsokXbZIGT8YZ6Rr eXrs7q7OnTQxnge2JZ4h3swZE3Na0VKnwHvqH+yOD5yNR8QjLl6a3OwTR8vVvRKKO+9O FIPwyEQjN1d4LZMm2w4FKALLhWOTj4rTop8i/kMX3BSXanrZWGplKDl1CzVldFTrjp0L rHgEUbrGDBnaPi33cKpTy1phlnx1aD9YZGsXct8gP5klUPsQJwvA6dyOc/2bEmG7M4qM BgUg== X-Gm-Message-State: AOJu0Yzq/RVKz2/uZ/uiAd2BgVQfITVfUtAwCcR0gPtYELDEKjuD2Df/ +u6aAhPNre87UOtmGQSqAPDg121ptakzj5P0yz5ngeVGhG3WP1O7xZ6CwQ== X-Google-Smtp-Source: AGHT+IH0zTf3PRIs+wLpFlt0dnNP1JgTx6WSdgmDhpVsQcy/yQ+0DmXy8dcDqf7xJ4EdVZoGHDqZYQ== X-Received: by 2002:a17:906:c1d0:b0:a6f:5922:54e7 with SMTP id a640c23a62f3a-a7242d29bfemr815358266b.65.1719402207101; Wed, 26 Jun 2024 04:43:27 -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-a72452140e0sm409649266b.217.2024.06.26.04.43.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jun 2024 04:43:26 -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] mm: vmalloc: Check if a hash-index is in cpu_possible_mask Date: Wed, 26 Jun 2024 13:43:24 +0200 Message-Id: <20240626114324.87334-1-urezki@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 23E3680002 X-Stat-Signature: gdtehidmj7jk1nrbh38h8pj1i744ir6z X-Rspam-User: X-HE-Tag: 1719402208-48502 X-HE-Meta: U2FsdGVkX1/BCowUkMrzwn8WLffJoF0GEtdNb2Z7GBRkA5MJh1HF2aEB+kHp88SKXREFpQtNuF7WyOtJQYzD3v7BA7UulPj/taa2clbc+ACWBx0JevepZNnb3YiCCaIybXA28Bc99GHAVPfQ2BZF3lEyrem+PMftByTmSQPZcoTPIxW/zSx0iwHZtpb+9vlpO6h6tuyPvXL0s7fX8a/NSHRRs2Z44ErvICXEE2DSBRbl66vCA+5UZrtWg98NQqAThH6MdcQvpct1IVhJfGBHx2dPmmHwNXxywWoBvabnRlVlnSC3i98MG/jUuXUbBCbOaiyMeA/X8W4/TDCCs0T3Knzm7dCfX2ZWGMgl7UKFX90R5XPAP7TCwftr6ztRYB/4qeik39CjR2X6vTvWuFCATHv9ON70Lv+8REmgd+OVznKIcRl8Z2WSb/6/naOl6LJTrvZGB+tIYtiKwobyuJ25Z8H80ygn2tAtclwn45tPId4F/RB8XcL+phvzR83MEUHN4EFXcbBWNAbxRs/v+nmbwVRrKw+UIx1lLPXPfUGv5hkdkin0JxWKhomudm8pPSUw8alwnrXO6ib0kxs0LQ1EJ03ru+2n3UqSXetmaL3TtU5eNaT1iJg4VWRYi1i9GA/J9io7JuSXwAMo/sFUrI0b1KEjzZXcGGYfjQvBgZkNM+SUVcWG2TTNo4FDJSe1xeaJKzy2W8jOSRijMwdNOX4upV2qdImjbJJb045muvx+uBLQqqKehxuIAyKGnhz0brMan1gE4bOHp5BgT/yFiGln5HJo2N8inO2g5+hQnrb7ImuUynX+YrCComdBD/domq8UXFMiWKkrqPHr4+VZr70AABJNHJlpLAKxFAaT3CVHNxdTVxSnoUoa1r5aohr4IQ0D7zOqgRdQJggsU7+f/j5bBtdd9/3emGVkfCtqqFI2mWo0xYWaV3TnV8bhidkA+A5iy+iZSIJeBnjQbaNSBvX tOYVATKU Ad4Hv3DTYigAY87E0GqwYmy5ZWVx+jm+u0hk94qUcCTXPpM/qRQT20NRDjm7khVQd0H0Xc7hBnaqurvT5x+njLM5mjnMrpUDcM0/3zmSy5d85wVLS5pQkevC4QOLg49aG5BK7HyDFTOWuIQj+DF9LpyJsmKl/irSJ3AngHNWW3YVeWJ+K9qu35NP/hlANcLtzJJ06oamiA9HVll6ox576goNPuONAbd4/eO0+caXmvpua7/NhKfoA/1KC7WKVkEcxoN5IzCR8gBddQIEPq9iCWGRe62A1kUUsNd8BOtHDVKeuKOs0Mr+nDWtR2imUMo+eA1BFFT8Oys8h+k91+OFmDpX3DW6YvWP5tS9x3I2cH6lWiLkBDxpui/9kP1pC/+lzoho3kbKdM/fqvatnazwxMTNfLPSP8HySN/vCvGke+RKnHeHmayXfoRm3LzI8EaQdEj3lLvl0rvqGPZVJpRBA60LZtrphI42eNIe79we44kxT7MPk84yt29nkVvG11gzAnTr/hV7kHEGyqzE= 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 assuming that incorrectly assumes the cpu_possible_mask has not gaps. Fix it by adjusting an index to a next possible CPU. 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; }