From patchwork Thu Mar 28 22:58:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13609727 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 13D5FCD11DF for ; Thu, 28 Mar 2024 22:58:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 437786B0087; Thu, 28 Mar 2024 18:58:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3E7916B0088; Thu, 28 Mar 2024 18:58:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B1866B0089; Thu, 28 Mar 2024 18:58:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0E4CD6B0087 for ; Thu, 28 Mar 2024 18:58:47 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B685A12103B for ; Thu, 28 Mar 2024 22:58:46 +0000 (UTC) X-FDA: 81947964252.26.210AD94 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf29.hostedemail.com (Postfix) with ESMTP id 276C312000B for ; Thu, 28 Mar 2024 22:58:44 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="jdDSs/hz"; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711666725; 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:in-reply-to:references:references:dkim-signature; bh=ieduGj/M1Dn1/rUPQVc/wVFmakvjaD+ZGlY2ZfmDEW8=; b=8dHe4EMjhmiaLqZAFF/t6vCcLSZEFhM0pXbpnob43RNH0JCHrgB1+dc3pEb0dn9hzbmZ0l j7HcBUlvSqmWEx6+wG3tpwfc8FTyhvnLOVWOwiUWlUpR01KNQbTq6WIRQvfHhZ7Ul+PpZT XtP8rggFYZW01+5VwxEQeU7ka01j7q8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711666725; a=rsa-sha256; cv=none; b=NGkNf4kuT3POV207urVC1wmWutLQdpRoBjDgBcgV+4TfrA1/o5BbIvPdp82rZ1fbMTLllj YWHkQYn/BJ8ORrap5GHYtVZO1cMEagBVFBzgogmBILKdJUxK5fLlnObJgcaYgAd46PXf5P GmTesLzYN1d0j9xTwFD4FkfGzUjNQWw= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="jdDSs/hz"; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=ieduGj/M1Dn1/rUPQVc/wVFmakvjaD+ZGlY2ZfmDEW8=; b=jdDSs/hzFgxKSGv+KT0BHI7OQz fbILRKYXtrRVSVxzZedwcesrrM+2dM0tPonIlQRN0tXT8fJupagssToy06xpG/paSmzDvOFDOZRHQ 6diYGXRWeCsWgPr5ZY7ePTvFi+r/MR49Ma8HwtVIebSH13QYT2Xsp8n2LYC8zE1+G1uOrUfSgkCZ+ MHupNjCGJCvgZWuMec/DiggdyuYFSBivLVjO1l6kDM/4PT2j8/tOZLBu6YGKPhWr3CcbViYI1KDjs kgExOBjDN6yoLN1eBkNBrHodzxacN6D/MEAb5MAsOegiW50Qe/7WK9jr2FKTtkjPNIitAyqedXw+5 Pu98lZgg==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rpyhd-00000007PFU-3HEm; Thu, 28 Mar 2024 22:58:33 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org Subject: [PATCH 2/3] mm: Remove vma_address() Date: Thu, 28 Mar 2024 22:58:28 +0000 Message-ID: <20240328225831.1765286-3-willy@infradead.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240328225831.1765286-1-willy@infradead.org> References: <20240328225831.1765286-1-willy@infradead.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: 276C312000B X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: rmdt7gmd35usbsbcha6pxfwp7ptpgtyq X-HE-Tag: 1711666724-504820 X-HE-Meta: U2FsdGVkX1/SyRlrc0jEhHQ7It8J93hQk1GSp8AfIsTPM2fcXR+n1l1cEWNtoxhraI6e8Jm93ZuIsBrvTI9udDj01H5En4Jz89OZ7jKIEQNEQMUe0BUFRSupZSG9k9US6XyTILbhkUZAb9WWI62eNCtXCLwtI4a8A0E+NN2Ny9gcpft+r1fxOsZ4JJjGoBjYDjWcDIiGxIxP2JzhKquHA8IUOyPblX+EdGyS3b/tSRyDlwFOqxWkNx+LNbiINSogjHxcWh9XZyCQOQ3jBrAHzKOd7koPdGluVApGe3vb7BTcXLQZO6fgE199yDeXJSH5rkdcUtCRFvh1VMAK8xYS/KTSd5T9eWhxNekHn07IKN6IW+5OgJEzJNeiHVpg3OlDOJOUT18vBnUKEdXtXh5ttZzANIiI2JcVaF7udD/g/qoF2d5IfzFRfCTPwxaKxenvvryxK+QAa/3JJuhIVKmosVBWJQ7LTLWshkakTtWjPDaHeozRD8MZPugxrNxAhfhEUhL7ivzrmmsKQp+D++P6IDCWufIqUAguiJcEYfQv36ZNb08SkTF/3GVbj3xhHQsRJdpKEFQqYDw/5gcsOg8g288BhrsoRS7rw6W9KROnwYxjPy4RlKJ7wLvw8elFVfA4yGUL0NDg685UCxC9eFo/PVT8u63e1n8xWyWMr6F+DEum9qP0TZkifhZakqW793VVcRIpUDuvOwS9XtU7O0W4ZgRfFHrW9mzn6cCf15iFxIOdnM0xIPJLQryhDLRdQ4pjhi9i3jvE912aW7m44Ol9mE/Ah1GvEmYbv2yUXSpIKTEx4uhnsigd0O5ga1bhcHDX8sDme69OKkg2k2QRCyTiTAvhj7l8khxGkF5zpOxqNVhRQl6SWW5dkR9Kjgv7ekcNmZMtKTGp/22vCYI6vUhdM8UVUscPLEYzCfNkzcFSIZ/Ombudzzju204uAjO3RH9DGGTu9Zp8GkdSQCSMF5A XgjV7oi/ 0c5M1soEjV3SJyprRxxoM3yCrGQxymEoKZceaVz5xj73bW93y8ReGy+RTes48u68iSokC8AhNblWdGUk6hEGuD8LZ4bQtibZ0QwJci9IoG3UPLbWGy7BTIv+Omqbzmk/ucXnlJas982vkj/Csab8AC7O8QxzELwljpjlYes97hrHXjc8Mx+e2r0OlTTplcaW7DP7BbGBWqiMNizI0IL3V5KyJcTqISk20Cb4z 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: Convert the three remaining callers to call vma_pgoff_address() directly. This removes an ambiguity where we'd check just one page if passed a tail page and all N pages if passed a head page. Also add better kernel-doc for vma_pgoff_address(). Signed-off-by: Matthew Wilcox (Oracle) --- mm/internal.h | 23 ++++++++--------------- mm/rmap.c | 12 +++++++++--- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 8e11f7b2da21..e312cb9f7368 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -803,9 +803,14 @@ void mlock_drain_remote(int cpu); extern pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma); -/* - * Return the start of user virtual address at the specific offset within - * a vma. +/** + * vma_pgoff_address - Find the virtual address a page range is mapped at + * @pgoff: The page offset within its object. + * @nr_pages: The number of pages to consider. + * @vma: The vma which maps this object. + * + * If any page in this range is mapped by this VMA, return the first address + * where any of these pages appear. Otherwise, return -EFAULT. */ static inline unsigned long vma_pgoff_address(pgoff_t pgoff, unsigned long nr_pages, @@ -828,18 +833,6 @@ vma_pgoff_address(pgoff_t pgoff, unsigned long nr_pages, return address; } -/* - * Return the start of user virtual address of a page within a vma. - * Returns -EFAULT if all of the page is outside the range of vma. - * If page is a compound head, the entire compound page is considered. - */ -static inline unsigned long -vma_address(struct page *page, struct vm_area_struct *vma) -{ - VM_BUG_ON_PAGE(PageKsm(page), page); /* KSM page->index unusable */ - return vma_pgoff_address(page_to_pgoff(page), compound_nr(page), vma); -} - /* * Then at what user virtual address will none of the range be found in vma? * Assumes that vma_address() already returned a good starting address. diff --git a/mm/rmap.c b/mm/rmap.c index 5ee9e338d09b..4b08b1a06688 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -775,6 +775,8 @@ static bool should_defer_flush(struct mm_struct *mm, enum ttu_flags flags) unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma) { struct folio *folio = page_folio(page); + pgoff_t pgoff; + if (folio_test_anon(folio)) { struct anon_vma *page__anon_vma = folio_anon_vma(folio); /* @@ -790,7 +792,9 @@ unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma) return -EFAULT; } - return vma_address(page, vma); + /* The !page__anon_vma above handles KSM folios */ + pgoff = folio->index + folio_page_idx(folio, page); + return vma_pgoff_address(pgoff, 1, vma); } /* @@ -2588,7 +2592,8 @@ static void rmap_walk_anon(struct folio *folio, anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root, pgoff_start, pgoff_end) { struct vm_area_struct *vma = avc->vma; - unsigned long address = vma_address(&folio->page, vma); + unsigned long address = vma_pgoff_address(pgoff_start, + folio_nr_pages(folio), vma); VM_BUG_ON_VMA(address == -EFAULT, vma); cond_resched(); @@ -2649,7 +2654,8 @@ static void rmap_walk_file(struct folio *folio, lookup: vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff_start, pgoff_end) { - unsigned long address = vma_address(&folio->page, vma); + unsigned long address = vma_pgoff_address(pgoff_start, + folio_nr_pages(folio), vma); VM_BUG_ON_VMA(address == -EFAULT, vma); cond_resched();