From patchwork Fri Feb 28 18:29:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank van der Linden X-Patchwork-Id: 13996902 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 C7920C282D1 for ; Fri, 28 Feb 2025 18:29:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA7FD280004; Fri, 28 Feb 2025 13:29:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9B7EF280001; Fri, 28 Feb 2025 13:29:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 80AE5280004; Fri, 28 Feb 2025 13:29:57 -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 5148F280001 for ; Fri, 28 Feb 2025 13:29:57 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 07F6A1A110E for ; Fri, 28 Feb 2025 18:29:57 +0000 (UTC) X-FDA: 83170192434.16.4AE1328 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by imf20.hostedemail.com (Postfix) with ESMTP id 37D221C0011 for ; Fri, 28 Feb 2025 18:29:55 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=i1SjNWel; spf=pass (imf20.hostedemail.com: domain of 3ogDCZwQKCO8WmUcXffXcV.TfdcZelo-ddbmRTb.fiX@flex--fvdl.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=3ogDCZwQKCO8WmUcXffXcV.TfdcZelo-ddbmRTb.fiX@flex--fvdl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740767395; 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=cv0B4/uThibyDXPGrCU6CzEy8xZoS0FJOJ+cAKPL8G4=; b=3TbjZaID/hUlqXtFfK/8OqxRZl7e8hGHCu/pomKa43UR1gAm4k5rNGohha8ED3wjKrUe20 4kC6311X//oIsHaFBFTTiT0LFqe4KH14TQSPnr6N/OgGsvNukj+tZSElXeKr3zL+w4v5T3 F3PP01BDscEbFM6/2Wz84bIz1ZNDBBU= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=i1SjNWel; spf=pass (imf20.hostedemail.com: domain of 3ogDCZwQKCO8WmUcXffXcV.TfdcZelo-ddbmRTb.fiX@flex--fvdl.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=3ogDCZwQKCO8WmUcXffXcV.TfdcZelo-ddbmRTb.fiX@flex--fvdl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740767395; a=rsa-sha256; cv=none; b=JiX+zqtHd3PYGUtDji13y5YNqNMj0VAmyEek9Feujg6elCjSLzt/l3hOAQX45ADYjcXsYn y0qbpwyQ7MHW+j3YQKSmOYW2oxnbfs7PmQSfzpUACNxPUX1C8rx5lFOsX/wD1Bb+0sD06e vsByNEVyxrK25uJGs2MtKvqw7RsU5wk= Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-22326da4c8eso46077475ad.3 for ; Fri, 28 Feb 2025 10:29:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740767394; x=1741372194; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=cv0B4/uThibyDXPGrCU6CzEy8xZoS0FJOJ+cAKPL8G4=; b=i1SjNWelnak/JOxrF4fLc+20TtJ8bVA738C+CE8QAl4ejiCJLAsiydkArRBG8tOF8D 2MFokTpjZIcJENHyTbzpfDWX5aS3NTAtFhRbLfUlaOTe4GUaASdrcgVcuaXVhsQZEwjv 8gMbkhPhXSPgsfvXmb1iMB+51F6kt8MpgBuzL7ePgDoJwUvKoL8PL5RGwijbibSQfknv GWi9ldgqWZvKejv8Fx7zNxcd8Ox4xE8/getPhDgFhmJaIgSyk1Am3B+kLXWDhLmH9ceu cecAFwHcv/+0+ShUwV0wPhre04GX9VlrYIFjXqClFyhpPuJlreDsqiENxI2zMs67WcNo P4dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740767394; x=1741372194; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cv0B4/uThibyDXPGrCU6CzEy8xZoS0FJOJ+cAKPL8G4=; b=Qzmy3dbQHZ0pTw9Q1c6B48ud4vVQwRqpoRryN5qk/uSjdw9hNPVGvXVcwETJiP3NhU hLKGzlT6JfMLB3kcT5wk5Toxk0nWhE9IUjvnGuUbbGIvp3RwqS4ol63LFUMKp/zrHVat 4v6g4qa/yw5Xa6R9BfvXS6tfpOjPe7NaGfewzwQCuy1uDC8oFWftjvuFoOGAmTI+XUhj 7cAc/BWxU7tOY18b9rRAOod6utZT2pEyF/wV5V3H5rKCOB9TrKklQDRYvxGGGSC4SPqj SdXZXdu+opALdSPpiNCW/TCGYg2dau6iyQA+sbLYWQcwa0lMoz4w7spQWpx+DWFBDc0m M7qA== X-Forwarded-Encrypted: i=1; AJvYcCUPVHXlJIhi2s99mzOTQtth6JVIjkcCrxciA6tTsKqxNC0KrrYOH9vpjBvG2qRcTQaliI7QplixuA==@kvack.org X-Gm-Message-State: AOJu0YzlyidsMNKloRLd3ftbiPv8XZpscNYjgzIN5luZ57hWOUAIztHf j0q2oq2w9UiJk99DUNGeSCZKTzaXfUTl2mSCU18eS6EOMYF6gRnwlz5AC4YW7YoPytpYlg== X-Google-Smtp-Source: AGHT+IGsUKkAmT8g+s3WZ9uk+Wed7lmB9nB51UlYclAmGf34PovRshjaGeeXtqu2JnyLABvgZzxxfd3d X-Received: from pljc15.prod.google.com ([2002:a17:903:3b8f:b0:220:bf5f:1984]) (user=fvdl job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f693:b0:21f:9c48:254b with SMTP id d9443c01a7336-22368fa8f86mr82559765ad.24.1740767394131; Fri, 28 Feb 2025 10:29:54 -0800 (PST) Date: Fri, 28 Feb 2025 18:29:04 +0000 In-Reply-To: <20250228182928.2645936-1-fvdl@google.com> Mime-Version: 1.0 References: <20250228182928.2645936-1-fvdl@google.com> X-Mailer: git-send-email 2.48.1.711.g2feabab25a-goog Message-ID: <20250228182928.2645936-4-fvdl@google.com> Subject: [PATCH v5 03/27] mm/cma: introduce cma_intersects function From: Frank van der Linden To: akpm@linux-foundation.org, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: yuzhao@google.com, usamaarif642@gmail.com, joao.m.martins@oracle.com, roman.gushchin@linux.dev, ziy@nvidia.com, david@redhat.com, Frank van der Linden , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , linux-s390@vger.kernel.org X-Rspam-User: X-Rspamd-Queue-Id: 37D221C0011 X-Rspamd-Server: rspam09 X-Stat-Signature: qnpzamsb77k3qpwotnyw5553qqztrn9a X-HE-Tag: 1740767395-104150 X-HE-Meta: U2FsdGVkX1/0sfoceUzy5lXWJScLkZf4jOYQ0WwB43opEpTRZyj1bHuJXHU/Tmn6+AUqFqXGFYTQv21lcIiWXIcAUyk2ePWNcNS9lzCfpxS80CriiH46R57ucyTIdWGhwK7xfnI/6qD3y4zKaCGCdTYDmPg31duDRAgTeCgtSYnI9fU6gz96rH/5O8M1WfllG0Rgl5E3c+Yc4vxkLtiGrKiH6dttqFFmjXu8XhG/HNJJKDj49s7P6BfzU1D0eG8AXnrKI608QNHwYwLwcKbkD4GqsFssyB2T/cOzBmHFZaIMKCiZ7ntmSVwBGK2gC6liORvbQIke4fcwbXtuOfnRhKH3WWMze85K9M7LK07nUNEizjgTgTcxSZYht2DUv6ZT0fhsXltaXdPCSPzhoRQPyT36S3S05aQxVGVKqYBQAeFVPVYhQc3UzyXgvjgd8SP4Hty3Vngxe9sU4vFPZYU6JMdKA1pBD9zOdKg2NAeMDZQAenWm4WU8UFCPUwWDQcbG2tN8Te2sB5JAKlX/QJf08CHYofLNqmiCa64DRU/0cDlHUF6EvKHBeeihMkaT6u8Af4AVIkgck660fVBj20vHJ6U1GScFlTjmmsengZ5XCTVg2uXWe++rDhrsott8Qkn/NuCTTLVnq7GPGNApJ7+taJeWIan4xE6VakNUdOxqCqrusNjYWdeR9vvenByJcVD3eK3/ehOePh5pDJrR9ApjM7gUgZPmiC8O84xEkR93G4zlH9P2cxSQJbmSz7k/+RoX2v14pAcogfe3V0dUDRSO/GIIBVZWD3Vu+FfyI6X4TEc/c0CcKSTFJLbqFIwa4ejVFkyqiri5cBN1003dnYnKTucRQ178D+RD5ebxpjuKew5cNHYbiDL38DTKushfKrZC3ORef++3xBgAIfz+R/4AY1Ozmbiw4Pjjgm+uPrblQrWoDUpQ+bQ424LYbSStsctfgqP/52TcIWRwTLFR3/Y nWXI8uH3 Bxh53c6Cib0UWj7NNe6wc8ZphdEj/kqdDiLqZYvLENmriFZxi3r/xCtzSBH2t+sSVW+FGWx6sJ3efFl9IM0B5ecb9c2fTBEPXg6ftZjz1yXcTPL+1wFge1H1PKziZtbkL1rPlT97aHgq6AtzVh+4IIe58pBP4NdchjoJsj/53mBkJJbfXy4mCFSxDC4QqMxSSLIJjmpPoy6plOoKVU/6DXL5Jqj42VKdofMnTniWADoIsPrB8QBrMyd8D3ZKBnEjTCjrSrqDj0uDidhh0ckoeqoXA+an/2e9vGQy4RKsMnlvMMVo7eFrC56oSyj1eF7CziDsMzwGEVgzDyCG7HE677bysLq2uNnQdqX1dfiGP5UAR8WvKzzlsTElN7QuzM9VTm5BBLVLE//sMbh0cYOhWwP0SRjigNyWu0afmVg910ubRx2EP/tAQ4OkXCFsO42EJk5Q0ZKcQHu5cRyqem5cKPOk2nluNV9+F6wZtV0pqKCsZvQK6iTTPrdu2AE9hbjWRoCWJpc3VkLoMbxGRnTMAPzb+X9d4CKbESsrLOY8Q7vJElXkKwY89YZ12BcZimHeIsP9zkaKO3DSxGXiP91pbQY93xcoCHOLwnvId6YwkVUi29MlitOisTBny+Q== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000035, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Now that CMA areas can have multiple physical ranges, code can't assume a CMA struct represents a base_pfn plus a size, as returned from cma_get_base. Most cases are ok though, since they all explicitly refer to CMA areas that were created using existing interfaces (cma_declare_contiguous_nid or cma_init_reserved_mem), which guarantees they have just one physical range. An exception is the s390 code, which walks all CMA ranges to see if they intersect with a range of memory that is about to be hotremoved. So, in the future, it might run in to multi-range areas. To keep this check working, define a cma_intersects function. This just checks if a physaddr range intersects any of the ranges. Use it in the s390 check. Cc: Heiko Carstens Cc: Vasily Gorbik Cc: Alexander Gordeev Cc: linux-s390@vger.kernel.org Acked-by: Alexander Gordeev Signed-off-by: Frank van der Linden --- arch/s390/mm/init.c | 13 +++++-------- include/linux/cma.h | 1 + mm/cma.c | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index f2298f7a3f21..d88cb1c13f7d 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c @@ -239,16 +239,13 @@ struct s390_cma_mem_data { static int s390_cma_check_range(struct cma *cma, void *data) { struct s390_cma_mem_data *mem_data; - unsigned long start, end; mem_data = data; - start = cma_get_base(cma); - end = start + cma_get_size(cma); - if (end < mem_data->start) - return 0; - if (start >= mem_data->end) - return 0; - return -EBUSY; + + if (cma_intersects(cma, mem_data->start, mem_data->end)) + return -EBUSY; + + return 0; } static int s390_cma_mem_notifier(struct notifier_block *nb, diff --git a/include/linux/cma.h b/include/linux/cma.h index 863427c27dc2..03d85c100dcc 100644 --- a/include/linux/cma.h +++ b/include/linux/cma.h @@ -53,6 +53,7 @@ extern bool cma_pages_valid(struct cma *cma, const struct page *pages, unsigned extern bool cma_release(struct cma *cma, const struct page *pages, unsigned long count); extern int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data); +extern bool cma_intersects(struct cma *cma, unsigned long start, unsigned long end); extern void cma_reserve_pages_on_error(struct cma *cma); diff --git a/mm/cma.c b/mm/cma.c index 34caa6b29c99..8dc46bfa3819 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -978,3 +978,24 @@ int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data) return 0; } + +bool cma_intersects(struct cma *cma, unsigned long start, unsigned long end) +{ + int r; + struct cma_memrange *cmr; + unsigned long rstart, rend; + + for (r = 0; r < cma->nranges; r++) { + cmr = &cma->ranges[r]; + + rstart = PFN_PHYS(cmr->base_pfn); + rend = PFN_PHYS(cmr->base_pfn + cmr->count); + if (end < rstart) + continue; + if (start >= rend) + continue; + return true; + } + + return false; +}