From patchwork Thu Apr 10 03:57:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14045853 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 C1083C369A4 for ; Thu, 10 Apr 2025 03:57:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4DA1A2800C7; Wed, 9 Apr 2025 23:57:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3C0142800C4; Wed, 9 Apr 2025 23:57:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 175732800C7; Wed, 9 Apr 2025 23:57:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E76412800C4 for ; Wed, 9 Apr 2025 23:57:34 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4F2835C34F for ; Thu, 10 Apr 2025 03:57:36 +0000 (UTC) X-FDA: 83316774912.24.067FEFE Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf06.hostedemail.com (Postfix) with ESMTP id 7C92F18000C for ; Thu, 10 Apr 2025 03:57:34 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=VZ4728NX; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf06.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744257454; a=rsa-sha256; cv=none; b=BlfGvqXlmQPe5t94k8DcMMwUz5hibAjX3SqU3ZhHhIeS8YGAY/BMpQ+or5nyoJ65ufCUTz OKRnlQFYo3MunjmJvib4089ZLqTR32fC6vpdhSA0aV2l02el0rjyljWC7Uv/CZsllbcy81 8dr2lLOfKj9IYZWnQ1ELjo7R3kv1dZc= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=VZ4728NX; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf06.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744257454; 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=lMkbdXy2zeXmVG+XN8Oyl1Hd6P5dnLAMb7gAr8RumIQ=; b=iI0voFt8VEhBt8NhaWgBypHCzB1PRsqQKErdp0dfI73jLE5bA7uXAgeg72cvnkvaYinWbn 8Z4MLPYo8Am4cI9VOYcVCfDHuD6OpXg7FoA/wMruYl3BhaHjDph2sSN1MHXs4dtS28yJ/Z QDsxjPrtV4nroR+UK5wWlMFAgE3UFmk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744257453; 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=lMkbdXy2zeXmVG+XN8Oyl1Hd6P5dnLAMb7gAr8RumIQ=; b=VZ4728NX9lwAJ0Ja61DY4yK+r0Hua6Xycyy16Soj5/4pAfHkDmFIjseEGq/6FQnCkndf3I C0oS+cchkdMnQ7PDMlaTTJccRLn56iqhQLngz03eLUsA4q7vKUfiLYWj1j8SZzzmjPHKUf AN+LJH1MSiiVHZYjBg27hHKVo6rQFOk= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-38-9bda-oNtP0ed2q9iAoQTIA-1; Wed, 09 Apr 2025 23:57:32 -0400 X-MC-Unique: 9bda-oNtP0ed2q9iAoQTIA-1 X-Mimecast-MFC-AGG-ID: 9bda-oNtP0ed2q9iAoQTIA_1744257451 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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AF77519560B0; Thu, 10 Apr 2025 03:57:30 +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 A03EF19560AD; Thu, 10 Apr 2025 03:57:26 +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 1/4] mm/gup: fix wrongly calculated returned value in fault_in_safe_writeable() Date: Thu, 10 Apr 2025 11:57:14 +0800 Message-ID: <20250410035717.473207-2-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-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 7C92F18000C X-Stat-Signature: ynw3p7z8yea3yzrig94etwbqzmbj6azs X-Rspam-User: X-HE-Tag: 1744257454-233024 X-HE-Meta: U2FsdGVkX191+/1mtkj21pyqnBGH1VeT+J+oEgo6RwqwZVW03zFz8OaLwHRhuDBDzS6idWaoYod+Iu9E9/Zog4AuF1cDO0AL/mBmAz2SODoHmU77GgIazaL2Q0jPpGVb7I6EadKPyFYPP1Xl5OcBWg0iml7FE/hbhMMwn9CJMwX98XG+tmsQc2rjFnjQ5TX8VrxM77k778MpzQysO0HckWS0r9qUMd9HBZnAUKMsclbf6y7IqjzdbeG4p2t5LuGRoHKoByMcVaN+jVuE4aMMIgPtoGtNrVQcMo9CuG6KozKQLiwEjoCfTUa+cyiPe8cJ17+bpeRFEzzUc8lUFys7rm3hDIICuYJqcCS2bpNo6+4bnoD9LcGjt2InsAlDrdFV5yJT75wmNAHhbrFfxV995TigryVJJGkcoecg4k8r4EpWc/1eVsKLlXGpGCS5504sOZR2oZgdGgN/dynnG3u80HS1kBfSGxsrs3QsKjuZEl01iAT7+VVkEYSjPMpMsK7lPw5TtzYmhwABbSzcOLoLGRgVxEIzb3C8e2sSUY6aInAoAH7OEZVscwjFvnoZ0hdCzFhu+MalUhTA3tKv/Bc+MNp+KH2KUtROvsYCHWFDgwLcWNYKkKhcWnd0p/X+ZWqgjmheyCKoGIgo/U7Eo9sdekVaWSn17GURA1Trh1u6LEXzNqypikPusNfJabJSU0jMefmKjTrPDguDGJGMOyIJ9DPfE/GEMw45iFoJpd7J665cLFZfwsHHTpuQaZAMBBAA0W2JfmDLldXW0qp/UnQYOodFZFbbaVKwNvUd8rAn+HBWKk6O+CkRoC6735eOsJYV3O1FH79R5nAhh72cF45RsIXGXFmc1g/OYztaTnPUe1YZsG4YUzjzChQPXgMkyaKJmezFN8xw7I9HFYjwQ4U5zOLhCs4WfmnqOVY3zKkEKt+jnwqxr9Va0b1+Qe4TsgWCJnzd+cmwnI+mOzDIz4U OiYQ18lp hjBFNb1YGSB9xSYA++n0Oc5XPouAqSjxbHQXD4lEYdnBJsu39xAmp1lbCDfaE2lsQ+OtoiftWCermikJJdLpDr70VK9wBdUx5Cm8I4p3cJrpwQ/ByovKwNVNN+ZgQfM7pLzF747oHVpucEEkjcvObY5+WAuk0N/2RjafqflGcbxD5BU81GvwOs7ucbNkZsYDG3J01inGAmlZWOpq9YNzl336cMfaCuAIBeXQ7rZwesGHjYhBFSYIrk9fygOzzHcoWrPs3lLiBUqzvi7g1hhoyOnyN6JvkujjLx4IIDrLJomj8enhiQmzD4nePLXkE5QaPgkI/po7GsqG0CWVPxub7xCQQ5Lo8PyNzXXcJ5S0J/TQWXiTlfX7zcKgiLWoHuECEE4QJ 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: Not like fault_in_readable() or fault_in_writeable(), in fault_in_safe_writeable() local variable 'start' is increased page by page to loop till the whole address range is handled. However, it mistakenly calcalates the size of handled range with 'uaddr - start'. Fix it here. Signed-off-by: Baoquan He Fixes: fe673d3f5bf1 ("mm: gup: make fault_in_safe_writeable() use fixup_user_fault()") Reviewed-by: Oscar Salvador Acked-by: David Hildenbrand --- mm/gup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 92351e2fa876..84461d384ae2 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2207,8 +2207,8 @@ size_t fault_in_safe_writeable(const char __user *uaddr, size_t size) } while (start != end); mmap_read_unlock(mm); - if (size > (unsigned long)uaddr - start) - return size - ((unsigned long)uaddr - start); + if (size > start - (unsigned long)uaddr) + return size - (start - (unsigned long)uaddr); return 0; } EXPORT_SYMBOL(fault_in_safe_writeable); From patchwork Thu Apr 10 03:57:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14045854 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 EE37BC369A2 for ; Thu, 10 Apr 2025 03:57:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B4D4D2800C9; Wed, 9 Apr 2025 23:57:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AFCE22800C8; Wed, 9 Apr 2025 23:57:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 99E7B2800C9; Wed, 9 Apr 2025 23:57:41 -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 76DE62800C8 for ; Wed, 9 Apr 2025 23:57:41 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id B5D86161A58 for ; Thu, 10 Apr 2025 03:57:42 +0000 (UTC) X-FDA: 83316775164.26.2FB5358 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf19.hostedemail.com (Postfix) with ESMTP id 2CB8D1A0004 for ; Thu, 10 Apr 2025 03:57:41 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SvYQ6EBx; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf19.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744257461; a=rsa-sha256; cv=none; b=iLPg3En4bte6hfIcn0ILhT+qZ3cDGuTK969H+aEuzJ0HAgDE98mcRT7p/V9uzKkvIo6UyO qHQyGw5zpf6Br4aPU8I+2qwf735Qd5a5TCrL0EEWhM2iQFTtFzw6cZOioInysBRx+2ESPg 5dpbbHaQ+zBVfLdF4CEaIlEXHg2kMNs= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SvYQ6EBx; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf19.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744257461; 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=3pd14nYhYMgdjkQtwmpN+tA62d+FdLUKaQa7vusgjMQ=; b=eLplJK2Ud85rVFvSntfxc3q8j/OZHr41O6O+kxZorSQqnFDZrHieAbVmQzvWrKqhTQq52I NBIIXLVY7GPieGyds4fIE3KkSysuJcKKuTmctW8mCHDCzo/dZPGwMSu4vIbG0hIcdbOavX Z2td/++eXL1lD22Lz3ZJ+MZpnCxHOHo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744257460; 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=3pd14nYhYMgdjkQtwmpN+tA62d+FdLUKaQa7vusgjMQ=; b=SvYQ6EBxPbjUynpoL2JTCJPoEaC+0jB5NzcZK1TPiaYQaOn+Sc09vZU1UWfSmfZlJLqTPh w2Qwi355t3FQe2Ezq3CfFfTlgkUmw+EdJEcPKg4YA7BMYvsB6gsTDFi6VrM1EWFR5gRrPp O3Vi2ahClDTr4j551ig/stnJCXaNkNA= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-616-BPQvouKcNg2_QR0P7W8Big-1; Wed, 09 Apr 2025 23:57:36 -0400 X-MC-Unique: BPQvouKcNg2_QR0P7W8Big-1 X-Mimecast-MFC-AGG-ID: BPQvouKcNg2_QR0P7W8Big_1744257455 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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8E72B1956050; Thu, 10 Apr 2025 03:57:35 +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 A99A419560AD; Thu, 10 Apr 2025 03:57:31 +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 2/4] mm/gup: remove unneeded checking in follow_page_pte() Date: Thu, 10 Apr 2025 11:57:15 +0800 Message-ID: <20250410035717.473207-3-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-Rspamd-Queue-Id: 2CB8D1A0004 X-Stat-Signature: oei7wuottxt93n1u67ikbkis1pntxkmi X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1744257460-673342 X-HE-Meta: U2FsdGVkX1++IbkSgfyeU4bykcFIOHLCaNprkAClpoK5qNuRXVAqJUEHU8WAzbVKL7QKHvhU5hHaUdG/efITORKgLb5nxAixJf+s+alBiBxHn4OYa9duTu+uLu2k8ki1g0Y0cm/kv7gYkryyPmjeUfh3aChOPgbN4O+meHUvVTcMFkwKqbbqcRhqpy+Vco25vCoe2QcwKpfUHGFKC0srosfBS8v1qiVYvd4LvWrQCfS1w4Iup61y9NYvQj3jn3iETNz/8eucJmEkZxV7+m4tywXKykuwvHVpcP0tWdc1G09kBiAHuFVXphB2R8tqKZxtqdfaF0N01nrHrzjc6ca7tED3vgxw3iMc2sN/iAEezCwbWAMK5gZfVS7HXMBi56wW+HO4hO4q3TQIGefkSAvVxitrbvH6sCFcXa6HeSGhI4S2zHYo/oy7ugNnhwg1fekTnzhkKvTW8E8iWJ2Lg4zgopfKdSn8QIoDcoiuE8466iG3jHps5ZDoR/KQLiaUHOe/A2BPC0kIxA7gMW9VH/4vVOXYDR6aowQEgl1CjkDXeeK0kaCEtZg8oXt9CwEiY5lsd1zVtFV7SiGBNXQol+rMnZG/hpHSli3DpFJB9iMI2ghzfKAXEqk/1MQEjI2NHVDCBJyAFgfJwrXHhG1WYkG7qL29Y6cv905lqSwzMJ3Muyb+U8UqQPbBcllU9yCwaL0tfeb8QebvKy3el6zcpfRwLxPIWJdNsv+jMQsoRQ2Y6N/EkeSBqv9dr3bO8zDz3ugYo5z3bJ1xIUGajdGqh0EqqxHtIypOOqJd4h6ljD09gatKaN8tR2H2pdp1I5h23cEyNr42oj1g/ua3Rrmaec+NIPSLUPTHvXm23zWUqmfuT6YtivIJKwmR7mjp98M27c77nugA5xgrTBjAVcGX77Q6hvGlHfSIH0tx1cK3Z4+BPqG7DF/22JRiV5SjsnadgEoELCEMX8IuTQJLq0cD2aG zRZqg0z6 81wWSKoTRG4Ej4iqXT8CtiJko5nJx76Sz79ni3i8nHylJhGkDNLWA4mJG8uOyfQ7FU27BxuhGIj+CmXjehiBJABb+goxS0RS6/x+NemjUm5dErFY= 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: In __get_user_pages(), it will traverse page table and take a reference to the page the given user address corresponds to if GUP_GET or GUP_PIN is set. However, it's not supported both GUP_GET and GUP_PIN are set. Even though this check need be done, it should be done earlier, but not doing it till entering into follow_page_pte() and failed. Furthermore, this checking has been done in is_valid_gup_args() and all external users of __get_user_pages() will call is_valid_gup_args() to catch the illegal setting. We don't need to worry about internal users of __get_user_pages() because the gup_flags are set by MM code correctly. Here remove the checking in follow_page_pte(), and add VM_WARN_ON_ONCE() to catch the possible exceptional setting just in case. And also change the VM_BUG_ON to VM_WARN_ON_ONCE() for checking (!!pages != !!(gup_flags & (FOLL_GET | FOLL_PIN))) because the checking has been done in is_valid_gup_args() for external users of __get_user_pages(). Signed-off-by: Baoquan He Reviewed-by: Oscar Salvador Acked-by: David Hildenbrand --- mm/gup.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 84461d384ae2..eb668da933e1 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -844,11 +844,6 @@ static struct page *follow_page_pte(struct vm_area_struct *vma, pte_t *ptep, pte; int ret; - /* FOLL_GET and FOLL_PIN are mutually exclusive. */ - if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == - (FOLL_PIN | FOLL_GET))) - return ERR_PTR(-EINVAL); - ptep = pte_offset_map_lock(mm, pmd, address, &ptl); if (!ptep) return no_page_table(vma, flags, address); @@ -1432,7 +1427,11 @@ static long __get_user_pages(struct mm_struct *mm, start = untagged_addr_remote(mm, start); - VM_BUG_ON(!!pages != !!(gup_flags & (FOLL_GET | FOLL_PIN))); + VM_WARN_ON_ONCE(!!pages != !!(gup_flags & (FOLL_GET | FOLL_PIN))); + + /* FOLL_GET and FOLL_PIN are mutually exclusive. */ + VM_WARN_ON_ONCE((gup_flags & (FOLL_PIN | FOLL_GET)) == + (FOLL_PIN | FOLL_GET)); do { struct page *page; From patchwork Thu Apr 10 03:57:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 14045855 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 A284FC3601E for ; Thu, 10 Apr 2025 03:57:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 569762800A6; Wed, 9 Apr 2025 23:57:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4EF9728009B; Wed, 9 Apr 2025 23:57:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 367A12800A6; Wed, 9 Apr 2025 23:57:46 -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 0C4EE28009B for ; Wed, 9 Apr 2025 23:57:46 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7BBEF1CE27F for ; Thu, 10 Apr 2025 03:57:47 +0000 (UTC) X-FDA: 83316775374.16.ED1CFC9 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf05.hostedemail.com (Postfix) with ESMTP id BF847100003 for ; Thu, 10 Apr 2025 03:57:45 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Cipe7Qtl; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf05.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744257465; 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=f1N+YcIuKzs7QdLEHyEwZZ+GVIPuduBxUV08naMugGA=; b=T/gBKvb6AtdL3a9GnSUo30HDUVzpfc4js0kQno47AUUsgUAe6SGQ8MehKtI2D55jtLzyRW sQMk+Ix2MhFhPu4juf5Dj7jIzQs3fIeQH9GfNwjYh0tCOFw24zgLKI3nhv96+rVN+aZusY ltkeLPrEcJj2kBs/7bKwxixjFbx+RWo= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Cipe7Qtl; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf05.hostedemail.com: domain of bhe@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744257465; a=rsa-sha256; cv=none; b=2uazIH0+a3m7KcPe19FxbzXOCgThx9XOb9w2MuVPjh07jNYdgCWsost21p/c579MNG9oiJ uJNFi2ZEQfhFgk9ZWagYn4Eyjh/m2DTlizdl1X7ihcL75ZXomgckbkpHr+3REZcn3NVz0Z 4vGsFZRFxsXtgRfwgeOj3qoZYX1Eivo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744257465; 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=f1N+YcIuKzs7QdLEHyEwZZ+GVIPuduBxUV08naMugGA=; b=Cipe7QtllYSJ2oHJFP6dX84AW1RpJ3q6/QxMo68ddXzh1ottmeDLOZm7fYQhuW8A9csr1G YFmoEV/4OWb08uza/EBrOxex1pVyxpSPiexcntBihx4gMk3KGSUIJHZhM4DVGmop8FykMQ V+QoBp/tOhIqEwxQ3GFcUvqWZcq1RgQ= 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-122-lqz1GyQENkqkExtdQptSDQ-1; Wed, 09 Apr 2025 23:57:41 -0400 X-MC-Unique: lqz1GyQENkqkExtdQptSDQ-1 X-Mimecast-MFC-AGG-ID: lqz1GyQENkqkExtdQptSDQ_1744257460 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 5455218004A9; Thu, 10 Apr 2025 03:57:40 +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 7808219560AD; Thu, 10 Apr 2025 03:57:35 +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 3/4] mm/gup: remove gup_fast_pgd_leaf() and clean up the relevant codes Date: Thu, 10 Apr 2025 11:57:16 +0800 Message-ID: <20250410035717.473207-4-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-Rspamd-Server: rspam01 X-Stat-Signature: rfbguqncjjygtpk1xorokcuqy7t9z7bx X-Rspam-User: X-Rspamd-Queue-Id: BF847100003 X-HE-Tag: 1744257465-693298 X-HE-Meta: U2FsdGVkX1+ib4xBCA1KK1nZUDSd8fP1bQPsM2ymYP48mhlmz1VVNsBOax0LYHD7U8oWT2b6aDoZ/cFUUhV8gXiNRQcgznKlT7Ka0xirOWK+jtDEH98Mr2TFKpAxuDYOGSPTAo5ftghB7/YfJr6NHS32e1rUju9PHq3vzRgyZpm1knRams8SV4I3VlL2cgPamMDEhgBYEAAhVAsgfItHZ+CsCYz7XGAyb8ka0t/J6BWo0i1YljPJxmJWproN34OJZ45nyfnGzNcefTXA4PaNPEFuDXOYEeCWoTtqswKfuPseZsNgZE/NLFoQ70aWTfF8YBN9qoL9CbqHG4fORHQOjf79XzRxMLfK2VLMG5DA7IXYBHdF//rXRymY2CpMo2S/3arAl5EfmhWPFAmEwE6x2r5b50Yj41009R2l7nCRB6q3izijLuSRT6Dyws1V6Djf9Br63Q8j2F8VXzYvrdkGAVvkEgjaLstxJLQC0h/9j9EbOXaowjx8LYKS/bBJC+2sRYta+xD/PfVv+KrIVVl5ogES/d+Spz4a6Sf8kIyMEu+S0YmJIxiMdcw+twFcK+6Bt3ft59ylvmJ+ORgcU6ZlbsHNr8lTSj70dzMfqTOFKpJ+R23xEPqgS/s5qQWDabk0YSN3iQxSEqSs8cPF45A4SeDvua0TK6LuECXUN5cyQOFfoZftqMNurpIdYK8JsMdhCwiMLEfUMI2pQ8LsiH9HEH2jlOOQrDjmBqfQd1fPe5x+/BSKbK+3OK9VNPNHPYkqyNgWIe4d4sFgvQC+ZfXq6+Tt14Ke96sgDfP7PThbB7zMZ2rdACbtHWzQHU3DpaX0XATeBgQTlPg0DhM49VsKQPA1bOzUmqNiB9DV6XZbUHNbaLWLtqFqX6QEJKfVXDMOkTdwmxG2R6/piD3MiW3669o0KtzK54pIYvpFr96M7HSZhuVXcKbzL8p+gwkPMo6av8uFK4jpZ6Xe3pAVokx 0mCpmu0z D9RsT7s5ndRAV9pbwqDjjgQS7pnEZqV2PSpFINE/0wQcoJCS69Lh3vNlvCAYAkor9W3s8d4DsDjVsYkkCMuUJplmP9lrop+r69EvD5j32WHtJSuGwj/dXniNQCUC5DmEWQ+LalDdhUuOhQgD9RhAJwflI4HSveBLvXmSfC0zZD438wNxMFF0dkfvvrOLh+KuIN63hR2ea1GnYBC3TnoGExuaZ3gJUjpShPRiQ2c6qFG40X1wL9AZSG9SQ+UeiDULcvwQtFtMOPpx19pv8EOilZY9qM+hDNxdLa0FXWDaXTpZMnQS/jFocSj2NJ2DYSGH5GMHygth9drY2hNYdksU8e6ZMm/ca2xe0Ppg3xgU4EptJZM+r2H16kgn9zKktjA+P/CYf 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: In the current kernel, only pud huge page is supported in some architectures. P4d and pgd huge pages haven't been supported yet. And in mm/gup.c, there's no pgd huge page handling in the follow_page_mask() code path. Hence it doesn't make sense to only have gup_fast_pgd_leaf() in gup_fast code path. Here remove gup_fast_pgd_leaf() and clean up the relevant codes. Signed-off-by: Baoquan He Reviewed-by: Oscar Salvador Acked-by: David Hildenbrand --- mm/gup.c | 49 +++---------------------------------------------- 1 file changed, 3 insertions(+), 46 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index eb668da933e1..77a5bc622567 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -3172,46 +3172,6 @@ static int gup_fast_pud_leaf(pud_t orig, pud_t *pudp, unsigned long addr, return 1; } -static int gup_fast_pgd_leaf(pgd_t orig, pgd_t *pgdp, unsigned long addr, - unsigned long end, unsigned int flags, struct page **pages, - int *nr) -{ - int refs; - struct page *page; - struct folio *folio; - - if (!pgd_access_permitted(orig, flags & FOLL_WRITE)) - return 0; - - BUILD_BUG_ON(pgd_devmap(orig)); - - page = pgd_page(orig); - refs = record_subpages(page, PGDIR_SIZE, addr, end, pages + *nr); - - folio = try_grab_folio_fast(page, refs, flags); - if (!folio) - return 0; - - if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) { - gup_put_folio(folio, refs, flags); - return 0; - } - - if (!pgd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { - gup_put_folio(folio, refs, flags); - return 0; - } - - if (!gup_fast_folio_allowed(folio, flags)) { - gup_put_folio(folio, refs, flags); - return 0; - } - - *nr += refs; - folio_set_referenced(folio); - return 1; -} - static int gup_fast_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) @@ -3306,12 +3266,9 @@ static void gup_fast_pgd_range(unsigned long addr, unsigned long end, next = pgd_addr_end(addr, end); if (pgd_none(pgd)) return; - if (unlikely(pgd_leaf(pgd))) { - if (!gup_fast_pgd_leaf(pgd, pgdp, addr, next, flags, - pages, nr)) - return; - } else if (!gup_fast_p4d_range(pgdp, pgd, addr, next, flags, - pages, nr)) + BUILD_BUG_ON(pgd_leaf(pgd)); + if (!gup_fast_p4d_range(pgdp, pgd, addr, next, flags, + pages, nr)) return; } while (pgdp++, addr = next, addr != end); } 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);