From patchwork Wed Jul 10 10:50:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oscar Salvador X-Patchwork-Id: 13729177 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 9F16CC3DA42 for ; Wed, 10 Jul 2024 10:51:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ECA366B00A5; Wed, 10 Jul 2024 06:51:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E79A96B00A6; Wed, 10 Jul 2024 06:51:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF0FE6B00A7; Wed, 10 Jul 2024 06:51:36 -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 AF1196B00A5 for ; Wed, 10 Jul 2024 06:51:36 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6D6C81C325A for ; Wed, 10 Jul 2024 10:51:36 +0000 (UTC) X-FDA: 82323526992.21.31E33C3 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf14.hostedemail.com (Postfix) with ESMTP id 47D0E10001B for ; Wed, 10 Jul 2024 10:51:33 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=A98K2eBm; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="j/VNTJ8g"; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=rs4IeFFz; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=t6BWMfnr; spf=pass (imf14.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de; dmarc=pass (policy=none) header.from=suse.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720608662; 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=m7b0FFfloSBNSR2ZzezMp+fU3t5dKSCqfMIY6cE3U0k=; b=n3vRJqsA4JA3KQz0hQ9HkNmRvmZuj5Yp0oa3oj1FfvxBcZ62CTGmVPwbZ8alQbhzf0MTmh YvheKDCuS61J/xiq6wVnJUEDwCxC9l3iHmEE4a6dlc0zLth/7UhOUyR96BeSfp03rvLORX 6gTvs4i/0MIkVKm7oeIOsyCmDk+qL/s= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720608662; a=rsa-sha256; cv=none; b=eLQTqyQKQKT6OP+Jqt+Pt/Yuf/k/MSKMKhoGWERJpYGGLuc/G27WVrdUNUb42MWQ178X9d qd4mzswI0IuzJ+XDdTAJv8FWzeElquGnr+P3Vlpojg+OSyV01DQfRtjpGbq0defiWtNu8O qZPJzM6KoxylfQp54Wem/URTUSya+4Y= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=A98K2eBm; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="j/VNTJ8g"; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=rs4IeFFz; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=t6BWMfnr; spf=pass (imf14.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de; dmarc=pass (policy=none) header.from=suse.de Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E21F121A3D; Wed, 10 Jul 2024 10:51:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1720608693; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7b0FFfloSBNSR2ZzezMp+fU3t5dKSCqfMIY6cE3U0k=; b=A98K2eBm6Gsqbion+I8upTty0hFnnNSEoZJDzP8V3Ba7Zd8avnjBnknSIEblzvcgRWO3f9 7xTFJhTCQjH2Hq6tGHv4juQDJiWHP/5vdUjuLKqRFfQi7Im1E9JCcrwRa5A09W2oFetiIB 11iXdwkRurVljAjqGqpWXIeVyeS4PtE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1720608693; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7b0FFfloSBNSR2ZzezMp+fU3t5dKSCqfMIY6cE3U0k=; b=j/VNTJ8gVG5iHz8ywTjWTHn20BAe7Zgu3aD9+u+Ei2+8RVyx0Hfk6rgbHq0UxO64HONWBC p5bNzdbCwc84EBAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1720608692; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7b0FFfloSBNSR2ZzezMp+fU3t5dKSCqfMIY6cE3U0k=; b=rs4IeFFzhz69FMWvI0QKY00JQtl778j3n78qia0/IsoPc0P6GNP6iBmn8UOFrweyMGe4Md Xy87v1OVVvjvvuz/nc7EKHWWeRkgAa2kustip+8z2BPVKzM/SHL5ubgqlYQKI9dcWh9rYW PQcxbkGSx8kMqhv9vEUcDHH4184Qnno= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1720608692; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7b0FFfloSBNSR2ZzezMp+fU3t5dKSCqfMIY6cE3U0k=; b=t6BWMfnrG2VPsHdWL347hUkhoiFuG1SE0aSsXFmtmrBxY0QA0RyX3XAgJUyybj2K3cD+H7 PsC15Z+C8sHLNvDA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id CB26D1369A; Wed, 10 Jul 2024 10:51:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id 8L0uLbNnjmazcwAAD6G6ig (envelope-from ); Wed, 10 Jul 2024 10:51:31 +0000 From: Oscar Salvador To: Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , David Hildenbrand , Michal Hocko , Donet Tom , "Kirill A . Shutemov" , Matthew Wilcox , Vlastimil Babka , Oscar Salvador Subject: [RFC PATCH 8/8] mm: Consolidate common checks in hugetlb_mmap_check_and_align Date: Wed, 10 Jul 2024 12:50:42 +0200 Message-ID: <20240710105042.30165-9-osalvador@suse.de> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240710105042.30165-1-osalvador@suse.de> References: <20240710105042.30165-1-osalvador@suse.de> MIME-Version: 1.0 X-Stat-Signature: 1p8fwkymtqc4rphu7duup7yp7hwtgeco X-Rspamd-Queue-Id: 47D0E10001B X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1720608693-23800 X-HE-Meta: U2FsdGVkX18if2CRlRTeAq3/FBiWTwHIio7+Vrb+eJD6DUJktwIUe7dV6glGkOoOUHCDXwP7LChxB8+3xUyZBfl2Dnis4gWxuSk2/wFdTAKeLYJtvQsBqsSZx5jj9n086dc3Eo1S+v+30x61KfnooEGEi20gtlCiyIJiH7XqNFAypDVi86FDemd31cyvuq3ZbfAiLhThKN9f4ktifAPbVIUSRw/0x84xNsPn0ErzomLSLbsJ6pk2zo3HpFfXnDpHy1DZa+T2U6J0rQ/JtfdRPPHi0RNn4ipEoxB++DlRh8EWaYsLyItcQ51Tusu6ch+qvMHWrdpCbzkGUKpA62YOiV0vzl7Kbt4aoFo/SP+s7wUoeTh677OaUtKCFTpB9gnRB/zm/mFkemsEJnyHJvhU15FecbExQHyoeyd0WWJr0eWJQCyccHvq2FlfMXV+4nA9BFhGDJY3GxwsY/GdRsH+lnxhVRMLGijWE8FTl8ob+LiPvgcozJ+ZM+1oMn6S2K/ezDC6MJQuuhjHBPvcLWAKAGPfx5J2Ya50dmexZFKfRHIZ+YVpgc7RAAnm5l6bjriCruGmfG17caLRQ+NPumXhjrFMYC1rOzXZ5GItwAH0GNc+HKsB8DTsA1yhgr3HZbmcr/S2zJTXBZdwM/v7EHiOyFADxRtfy5VCuREKIMwUrbk3/xezToArrzXJecPnFsgLRlnL3ql/d/4choxARnbH0BpBRYy6VV+DBJTAwTuJHvE4hDIQIHbrxwfVIKR4TuEJJciJisLRg433ObHLIPsRnz+IpSHwEbvcMdWSjr8jfKbJ5adksmTp8U2jSroXgvVllIzZOaY//Qx4FUcsR5Z9I8tQmgJPbL86it2bqqo4sV9SIEDhuO6za5aO1NKIyuzQVb/1YaarqD1YCeh0+fIH5awMmivOLH78/C7ODnAhsrb4B2zljoDME2ym4YyNr/gtefH5a91KvNOIvpXJm/e m6N5o71B JAch5O5h8V6/32PNOu+WSIuUDXAcSfeH7ei14J07KI+wygJC5J1pYguwzksDplhyVZxeLf3R63kDBUSPz42axrgwhpnL/Kc/4vIDlJbmxK0wCm/AlDFlWCfEOHCa4egkIispBP+pGv3QfKApCIhm80rt6F6k+D+I9yfB6u4P3VxcaNEPYgK9kLerEF3DyNqdO+bTgLMIrD9ftLRUIj0f1CQ6X80rRwdUfD3qnd6TqOBaEsBTSAZRwyLceJnycXz1YOdNeYOtXBFvqq9RyskYxl2r4Jg== 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: prepare_hugepage_range() performs almost the same checks for all architectures that define it, with the exception of mips and loongarch that also check for overflows. The rest checks for the addr and len to be properly aligned, so we can move that to the generic hugetlb_mmap_check_and_align() function and get rid of a fair amount of duplicated code. Signed-off-by: Oscar Salvador --- arch/loongarch/include/asm/hugetlb.h | 4 ---- arch/mips/include/asm/hugetlb.h | 4 ---- arch/parisc/include/asm/hugetlb.h | 15 --------------- arch/s390/include/asm/hugetlb.h | 16 ---------------- arch/sh/include/asm/hugetlb.h | 15 --------------- fs/hugetlbfs/inode.c | 8 ++++++-- include/asm-generic/hugetlb.h | 7 ------- 7 files changed, 6 insertions(+), 63 deletions(-) diff --git a/arch/loongarch/include/asm/hugetlb.h b/arch/loongarch/include/asm/hugetlb.h index aa44b3fe43dd..107566c98938 100644 --- a/arch/loongarch/include/asm/hugetlb.h +++ b/arch/loongarch/include/asm/hugetlb.h @@ -18,10 +18,6 @@ static inline int prepare_hugepage_range(struct file *file, unsigned long task_size = STACK_TOP; struct hstate *h = hstate_file(file); - if (len & ~huge_page_mask(h)) - return -EINVAL; - if (addr & ~huge_page_mask(h)) - return -EINVAL; if (len > task_size) return -ENOMEM; if (task_size - len < addr) diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index fd69c8808554..6a63d82a8ab3 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -19,10 +19,6 @@ static inline int prepare_hugepage_range(struct file *file, unsigned long task_size = STACK_TOP; struct hstate *h = hstate_file(file); - if (len & ~huge_page_mask(h)) - return -EINVAL; - if (addr & ~huge_page_mask(h)) - return -EINVAL; if (len > task_size) return -ENOMEM; if (task_size - len < addr) diff --git a/arch/parisc/include/asm/hugetlb.h b/arch/parisc/include/asm/hugetlb.h index 72daacc472a0..5b3a5429f71b 100644 --- a/arch/parisc/include/asm/hugetlb.h +++ b/arch/parisc/include/asm/hugetlb.h @@ -12,21 +12,6 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); -/* - * If the arch doesn't supply something else, assume that hugepage - * size aligned regions are ok without further preparation. - */ -#define __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE -static inline int prepare_hugepage_range(struct file *file, - unsigned long addr, unsigned long len) -{ - if (len & ~HPAGE_MASK) - return -EINVAL; - if (addr & ~HPAGE_MASK) - return -EINVAL; - return 0; -} - #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) diff --git a/arch/s390/include/asm/hugetlb.h b/arch/s390/include/asm/hugetlb.h index ce5f4fe8be4d..38a10b47dc99 100644 --- a/arch/s390/include/asm/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h @@ -23,22 +23,6 @@ pte_t huge_ptep_get(pte_t *ptep); pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); -/* - * If the arch doesn't supply something else, assume that hugepage - * size aligned regions are ok without further preparation. - */ -static inline int prepare_hugepage_range(struct file *file, - unsigned long addr, unsigned long len) -{ - struct hstate *h = hstate_file(file); - - if (len & ~huge_page_mask(h)) - return -EINVAL; - if (addr & ~huge_page_mask(h)) - return -EINVAL; - return 0; -} - static inline void arch_clear_hugetlb_flags(struct folio *folio) { clear_bit(PG_arch_1, &folio->flags); diff --git a/arch/sh/include/asm/hugetlb.h b/arch/sh/include/asm/hugetlb.h index 75028bd568ba..4a92e6e4d627 100644 --- a/arch/sh/include/asm/hugetlb.h +++ b/arch/sh/include/asm/hugetlb.h @@ -5,21 +5,6 @@ #include #include -/* - * If the arch doesn't supply something else, assume that hugepage - * size aligned regions are ok without further preparation. - */ -#define __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE -static inline int prepare_hugepage_range(struct file *file, - unsigned long addr, unsigned long len) -{ - if (len & ~HPAGE_MASK) - return -EINVAL; - if (addr & ~HPAGE_MASK) - return -EINVAL; - return 0; -} - #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 722e60327615..82ec499feb41 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -180,8 +180,12 @@ hugetlb_mmap_check_and_align(struct file *file, unsigned long addr, if (len & ~huge_page_mask(h)) return -EINVAL; - if ((flags & MAP_FIXED) && prepare_hugepage_range(file, addr, len)) - return -EINVAL; + if (flags & MAP_FIXED) { + if (addr & ~huge_page_mask(h)) + return -EINVAL; + if (prepare_hugepage_range(file, addr, len)) + return -EINVAL; + } if (addr) addr0 = ALIGN(addr, huge_page_size(h)); diff --git a/include/asm-generic/hugetlb.h b/include/asm-generic/hugetlb.h index 6dcf4d576970..d522581441e5 100644 --- a/include/asm-generic/hugetlb.h +++ b/include/asm-generic/hugetlb.h @@ -115,13 +115,6 @@ static inline int huge_pte_none_mostly(pte_t pte) static inline int prepare_hugepage_range(struct file *file, unsigned long addr, unsigned long len) { - struct hstate *h = hstate_file(file); - - if (len & ~huge_page_mask(h)) - return -EINVAL; - if (addr & ~huge_page_mask(h)) - return -EINVAL; - return 0; } #endif