From patchwork Thu Apr 10 03:57:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14045856 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 8B5B0C3601E for ; Thu, 10 Apr 2025 03:57:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4157A2800CB; Wed, 9 Apr 2025 23:57:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3C4162800CA; Wed, 9 Apr 2025 23:57:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 28B102800CB; Wed, 9 Apr 2025 23:57:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 058672800CA for ; Wed, 9 Apr 2025 23:57:51 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 77DD9121AE7 for ; Thu, 10 Apr 2025 03:57:53 +0000 (UTC) X-FDA: 83316775626.08.DA1C10E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf07.hostedemail.com (Postfix) with ESMTP id AFEF840005 for ; Thu, 10 Apr 2025 03:57:51 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MPDRGxCw; spf=pass (imf07.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744257471; 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=6pFd+u5mCoqhmCfr93K2zek+trGS6VlClORLBIf/qW0=; b=5ezTm73s3EaKqjSs3B9KXHNeiwJJrx82vGQVQHUaYxhurO/MDzdURai4DrLfDBRCJwn33X Rw4c0DZEf1+3OxzL5VocjhOxIUiefYOG/t5Y6e9E/d3zsM0qUMouzCQTmT82mz6NsY+Kt3 GHHUJ/ZahHouj26yCGv6wiDkTn3svjA= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MPDRGxCw; spf=pass (imf07.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744257471; a=rsa-sha256; cv=none; b=3QQALm755QHSUHBJ+KoXvb3pkERnUhOIjL4CZq9C5UuVNbY/2r2ebeK1IU77fX28DzcfhB QvoS5abYlZf/OlG0pcOQ80EF/BG9CpTbbUEKenA8mGUq7TS3ldWAwZq0SbTwcOLy5Q5uSC AJZgwltQVUxa4rP95rGEuZRWFRaKlYg= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744257471; h=from:from: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; bh=6pFd+u5mCoqhmCfr93K2zek+trGS6VlClORLBIf/qW0=; b=MPDRGxCwr+WQa64nmvjTlgwfRJqUC/bcaga1dNZqCi94C3673U8fsgSXEG6GivzDdgUTrI En+keZHLT7U1k1VpEFFUp6Qfe8v1itTnUbl/qIjumlpaYcwSmV4h/ELBFs8l6ZDV7CpwE8 RHXuWJd2OkVBcijIJZhJ4CoYgGrM5Fw= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-346-6oLAsj_QORK9FKjEnBq8rw-1; Wed, 09 Apr 2025 23:57:47 -0400 X-MC-Unique: 6oLAsj_QORK9FKjEnBq8rw-1 X-Mimecast-MFC-AGG-ID: 6oLAsj_QORK9FKjEnBq8rw_1744257465 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 65330180AF4E; Thu, 10 Apr 2025 03:57:45 +0000 (UTC) Received: from MiWiFi-R3L-srv.redhat.com (unknown [10.72.112.38]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5620119560AD; Thu, 10 Apr 2025 03:57:40 +0000 (UTC) From: Baoquan He To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, david@redhat.com, osalvador@suse.de, yanjun.zhu@linux.dev, linux-kernel@vger.kernel.org, Baoquan He Subject: [PATCH v4 4/4] mm/gup: clean up codes in fault_in_xxx() functions Date: Thu, 10 Apr 2025 11:57:17 +0800 Message-ID: <20250410035717.473207-5-bhe@redhat.com> In-Reply-To: <20250410035717.473207-1-bhe@redhat.com> References: <20250410035717.473207-1-bhe@redhat.com> MIME-Version: 1.0 Content-type: text/plain X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: AFEF840005 X-Stat-Signature: mbwxyw53i48ss6qgxgu5kesyqznt8bt3 X-HE-Tag: 1744257471-36480 X-HE-Meta: U2FsdGVkX1+GbgC8LvHecGovAhCJCHJl4eZGXU9HFIY02UTfPLNgLc6B6xDnIHVaUbmpIWQoB3G1yEdv/PcYxMM6mxXHZTbzectpIc/npva7kFJ9tQXCG1W7xJt03TYYQ53Vj/mPfG378KMX7Xps8uFQlgPGMqazW/tu/UymVmK1GV1rPaqP93Gs5OnCZwSL6fWu2XzvdpH/XAfcTTkva9+WmNg9lwAwNfRJOTxb5gEuAbHqpthrjj6+HXJHIfg4QR4MH6fI+fhuzQBYtxFXDE8iaExxOQ4D3IWUDCqgmOuY/bA73jHDjVc972JQKf6HcHXc3He9IHWFO9PctY2KzGvEJprRATtd4eu64oFePH1SJMnO34nHKEXGrp0s+5L0kMJb7AvPsDaKetoqBLHCieid/7FgvlH5xaKehdUOiRVQEbhcKHG2Hb9v6sdoXaA0I1g9iXM5i4j3M8u8Zwa98q4rKhvshM9pxgPpzFZD6ebucoM4dR7MeNt3F3EjG2huXU2MzZkBB4bnwf+sbo+2Lm0gUo0e0Ipn3hLbu4Hks/mBvpNO4RT+9bwBmlfaYV2Ni7vHnLs1NxfcJFD0NA4kYcYPd9nraH7T6Yv6xweHFHotuzJ/h6nmcWZFUjFy5dttSdsFxGuzfpH04oiZtH0P1z0GwTEAMgrrUno1/+LrJyo47r6INoelDExhfkSYBmFjSvMAOZZKlWUxN/7E3ki3xyJHiaJxONZt+W2wXt9Vbj/s2KTuzxmAOuCDsxXpcdUfS3Qs2Prneid6FSm/VdEBkOSYBsHUtVKgi46kNqYfvLRa/tCrBHYg2hgnk94X9CP2U+es42DNKq8f7FAGe/7JmaMyrmzX/Xr+d4daroyuGX/ZmXD8EYLgwawdyK0/I2Qlbqv+MRbHNAhsHKI2/XdbXC1sh2QGp03OF6FihaQFaMZ/4C32vS31BUaM81z5ywpjR/pdqif+PGjvD0NcZMw czAn7jz8 FkxjrOFCZrPKUiQ2yzfyUFiGnSo5BeacNWjEjz0XXzClxhXt7njWXlxCkYntWF+uew72eirzgV3XdOy7QfiDOuPk8QFbZIhwUrYdP3sUEuAjnPgYsRBW2lkmfgnbasYXazJAtfZsG2OitZkjg6hUW7a221xX51ieGMiVq6tkLCG0cZ9uiPMBtT01lkcWpIHnO6+gPkXiKEnI9syKEG9HdRyuVl8TFk3c1y8BXuIkm5WR3ys48ntICy4Ho4wxkcsPrgPrkwo1PQ690o/THFTnx/t42OU11N+7YwfiW5VuSEOZcqXFlEIciLeZ4XcFuMzC1fijTLIkdr7AeBaVIZ4sGxHAn86ex5kDA5+yjI9OmUbpYtXcmK5afBce0sn13ZruDiXQS 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 code style in fault_in_readable() and fault_in_writable() is a little inconsistent with fault_in_safe_writeable(). In fault_in_readable() and fault_in_writable(), it uses 'uaddr' passed in as loop cursor. While in fault_in_safe_writeable(), local variable 'start' is used as loop cursor. This may mislead people when reading code or making change in these codes. Here define explicit loop cursor and use for loop to simplify codes in these three functions. These cleanup can make them be consistent in code style and improve readability. Signed-off-by: Baoquan He --- mm/gup.c | 65 +++++++++++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 77a5bc622567..a76bd7e90a71 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2113,28 +2113,24 @@ static long __get_user_pages_locked(struct mm_struct *mm, unsigned long start, */ size_t fault_in_writeable(char __user *uaddr, size_t size) { - char __user *start = uaddr, *end; + const unsigned long start = (unsigned long)uaddr; + const unsigned long end = start + size; + unsigned long cur = start; if (unlikely(size == 0)) return 0; + if (!user_write_access_begin(uaddr, size)) return size; - if (!PAGE_ALIGNED(uaddr)) { - unsafe_put_user(0, uaddr, out); - uaddr = (char __user *)PAGE_ALIGN((unsigned long)uaddr); - } - end = (char __user *)PAGE_ALIGN((unsigned long)start + size); - if (unlikely(end < start)) - end = NULL; - while (uaddr != end) { - unsafe_put_user(0, uaddr, out); - uaddr += PAGE_SIZE; - } + + /* Stop once we overflow to 0. */ + for (; cur && cur < end; cur = PAGE_ALIGN_DOWN(cur + PAGE_SIZE)) + unsafe_put_user(0, (char __user *)cur, out); out: user_write_access_end(); - if (size > uaddr - start) - return size - (uaddr - start); + if (size > cur - start) + return size - (cur - start); return 0; } EXPORT_SYMBOL(fault_in_writeable); @@ -2188,26 +2184,24 @@ EXPORT_SYMBOL(fault_in_subpage_writeable); */ size_t fault_in_safe_writeable(const char __user *uaddr, size_t size) { - unsigned long start = (unsigned long)uaddr, end; + const unsigned long start = (unsigned long)uaddr; + const unsigned long end = start + size; + unsigned long cur = start; struct mm_struct *mm = current->mm; bool unlocked = false; if (unlikely(size == 0)) return 0; - end = PAGE_ALIGN(start + size); - if (end < start) - end = 0; mmap_read_lock(mm); - do { - if (fixup_user_fault(mm, start, FAULT_FLAG_WRITE, &unlocked)) + /* Stop once we overflow to 0. */ + for (; cur && cur < end; cur = PAGE_ALIGN_DOWN(cur + PAGE_SIZE)) + if (fixup_user_fault(mm, cur, FAULT_FLAG_WRITE, &unlocked)) break; - start = (start + PAGE_SIZE) & PAGE_MASK; - } while (start != end); mmap_read_unlock(mm); - if (size > start - (unsigned long)uaddr) - return size - (start - (unsigned long)uaddr); + if (size > cur - start) + return size - (cur - start); return 0; } EXPORT_SYMBOL(fault_in_safe_writeable); @@ -2222,30 +2216,23 @@ EXPORT_SYMBOL(fault_in_safe_writeable); */ size_t fault_in_readable(const char __user *uaddr, size_t size) { - const char __user *start = uaddr, *end; + const unsigned long start = (unsigned long)uaddr; + const unsigned long end = start + size; + unsigned long cur = start; volatile char c; if (unlikely(size == 0)) return 0; if (!user_read_access_begin(uaddr, size)) return size; - if (!PAGE_ALIGNED(uaddr)) { - unsafe_get_user(c, uaddr, out); - uaddr = (const char __user *)PAGE_ALIGN((unsigned long)uaddr); - } - end = (const char __user *)PAGE_ALIGN((unsigned long)start + size); - if (unlikely(end < start)) - end = NULL; - while (uaddr != end) { - unsafe_get_user(c, uaddr, out); - uaddr += PAGE_SIZE; - } - + /* Stop once we overflow to 0. */ + for (; cur && cur < end; cur = PAGE_ALIGN_DOWN(cur + PAGE_SIZE)) + unsafe_get_user(c, (const char __user *)cur, out); out: user_read_access_end(); (void)c; - if (size > uaddr - start) - return size - (uaddr - start); + if (size > cur - start) + return size - (cur - start); return 0; } EXPORT_SYMBOL(fault_in_readable);