From patchwork Mon Oct 7 07:50:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oscar Salvador X-Patchwork-Id: 13824292 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 35C91CFB43F for ; Mon, 7 Oct 2024 07:51:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E994B6B00FD; Mon, 7 Oct 2024 03:50:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E20CB6B00FE; Mon, 7 Oct 2024 03:50:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C74F76B00FF; Mon, 7 Oct 2024 03:50:59 -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 9D94B6B00FD for ; Mon, 7 Oct 2024 03:50:59 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 1C5B1161484 for ; Mon, 7 Oct 2024 07:50:59 +0000 (UTC) X-FDA: 82646035038.30.23E6A08 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf27.hostedemail.com (Postfix) with ESMTP id 00F894001B for ; Mon, 7 Oct 2024 07:50:56 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf27.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.131 as permitted sender) smtp.mailfrom=osalvador@suse.de ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728287432; a=rsa-sha256; cv=none; b=QxsC/ocAIkZAxJ87QBRLFO9fHXP87uHAvFnm6CzbJoIrAtzrA6fH7TTkhqBSypyl3Yesh+ COttgta0bdM4/ADLuToHxnMFPjJnv/jL3Mhniv65KS31zBKCSTTAgZVABw8i782QfDDP0r VAJaZWtD8APoyrq/IZ+neEo7eY4bOe4= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf27.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.131 as permitted sender) smtp.mailfrom=osalvador@suse.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728287432; 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; bh=M4NF0V/6zll6/XXedmKrJjb2YRT81sYU+Jdnzk66xVM=; b=4bIkSzooSfNqCIfS5OjlzQDwcKHcfDAAro6U6B7qRip5+xsYf8+++PjqR1xoD5Jr8m3naa 1bgpADVZpY5HOH6wlcEZLYQJJZLlBovn7cdPojpiOZ37ZL+KoKOa0bifcmDsrQK443OgmR TKpFWFEkWVr/jw80XoQEc6RLlxYY8Lc= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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-out2.suse.de (Postfix) with ESMTPS id AE63E1FD18; Mon, 7 Oct 2024 07:50:55 +0000 (UTC) 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 EB9AC13A55; Mon, 7 Oct 2024 07:50:54 +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 oMimNt6SA2d6cQAAD6G6ig (envelope-from ); Mon, 07 Oct 2024 07:50:54 +0000 From: Oscar Salvador To: Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Peter Xu , Muchun Song , David Hildenbrand , Donet Tom , Vlastimil Babka , Michal Hocko , Lorenzo Stoakes , Oscar Salvador Subject: [PATCH v4 6/9] mm: Make hugetlb mappings go through mm_get_unmapped_area_vmflags Date: Mon, 7 Oct 2024 09:50:34 +0200 Message-ID: <20241007075037.267650-7-osalvador@suse.de> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20241007075037.267650-1-osalvador@suse.de> References: <20241007075037.267650-1-osalvador@suse.de> MIME-Version: 1.0 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Action: no action X-Rspam-User: X-Stat-Signature: weoiz7c96tsggm56zq9u4b7f41mjcg7x X-Rspamd-Queue-Id: 00F894001B X-Rspamd-Server: rspam02 X-HE-Tag: 1728287456-777711 X-HE-Meta: U2FsdGVkX19oW6T0BiDJIFTeg47CFcAbRx9u4QAby9vXImOcg46gBE+lO/rCleCL5bS93n6XUN+oaaPPpUI4VNeDOHDxTxRDW6+TRIQhyeoenlbKFp/iTnto0JhpAqhICkL0dhkggkVKiYh1FDHiFkOKc7MUuz6SyPCV4gCvu03V8UuPG6AfTGoR3Ooj3N6OwXifpmvUdempCxHkBSh45x3j6vdItuLI8PPzCcwn+Lvx0NFMOMKqYyinE1pfMWhss0tuMeu35xkbvK6bcGVPIygRwQKeuGwvLNpxhNt4XYobV002QZypkGqvAWMu3ycw3NGd2DNT02sAuuZFq9Qe/u7G6Id5j+GQptU26D0z1ZlSvkW/eTcqHrmKloIFVVjFlJaSJ23faPmivbF9jrfC1AIdUTxOpeSsf/XlVUL8HETffdeJ5/jHXC0gl4uSbXkwzAI5hzZgRDXoBZyIPaKHmevIY5VZgBUNMEtz9ovcHVeo/AuOsaRu5PMopqeEE6cn7lS7+zfBZT7oNiclFZKL/sLqqQvjuVYtwVMmHDO9H4XlkbS+Kej7M7NkA4BZrMm46oXoIHpGPU+zsxxp8zaQXLvvYSP+J3UG83ojjNrfy/tV/73NNiv+uO9s8q7ZS7xaXYgZrup7CnbXLw8FyFIxm4B+dP6ueQnfeqjZydymLtZmgpPoFkkif/d+fCYpC8drOZGFTGLfxO5Kxsi5nZV/VHTZHNdBisKIXOCPYboSG2yEfqtk1Ze0hYod0U/fwNenzLMt3giCm2ElkkzitdctXbc9eUf2wkgCcWP/YxAU3vehjfXgHaC6WV4kpGfKHFYLbU8fYNjG45JEi0qmSY2GL2F+DVLFllwlkV8i42xT5r/PmjziFzkkjSR0/RKjAmspk7ihFsYOlpJ6fGpecv7WH8RSlMNQlkF/r4p+BPRutNw3reXVZZsQUG96vcS1VW19ZAddyX3/W3Icfp1ilSR BYcSEu+q Vtf2ZHM+kR8hAs7zCxR17qZFrUJvYGE5qt2YcSBA1jZVfm419+A1JMaRWoinlUSIyzHqegMBnQLitC+FLSurPOmQwr7tq7lUftn7Z0PVIhOS55Z8H+oO5SNLGxNN3AF1TGoqz0YGUCzwK1jRKFVtDGlTr1krFU/8T4LvAOt5PUF3GxhY= 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: Hugetlb mappings will no longer be special cased but rather go through the generic mm_get_unmapped_area_vmflags function. For that to happen, let us remove the .get_unmapped_area from hugetlbfs_file_operations struct, and hint __get_unmapped_area that it should not send hugetlb mappings through thp_get_unmapped_area_vmflags but through mm_get_unmapped_area_vmflags. Create also a function called hugetlb_mmap_check_and_align() where a couple of safety checks are being done and the addr is aligned to the huge page size. Otherwise we will have to do this in every single function, which duplicates quite a lot of code. Signed-off-by: Oscar Salvador --- fs/hugetlbfs/inode.c | 24 ++++++++++++++++-------- include/linux/hugetlb.h | 9 ++++----- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 5cf327337e22..2c5f34e315d2 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -258,15 +258,23 @@ generic_hugetlb_get_unmapped_area(struct file *file, unsigned long addr, pgoff, flags); } -#ifndef HAVE_ARCH_HUGETLB_UNMAPPED_AREA -static unsigned long -hugetlb_get_unmapped_area(struct file *file, unsigned long addr, - unsigned long len, unsigned long pgoff, - unsigned long flags) +unsigned long +__hugetlb_get_unmapped_area(struct file *file, unsigned long addr, + unsigned long len, unsigned long flags) { - return generic_hugetlb_get_unmapped_area(file, addr, len, pgoff, flags); + unsigned long addr0 = 0; + struct hstate *h = hstate_file(file); + + if (len & ~huge_page_mask(h)) + return -EINVAL; + if ((flags & MAP_FIXED) && prepare_hugepage_range(file, addr, len)) + return -EINVAL; + if (addr) + addr0 = ALIGN(addr, huge_page_size(h)); + + return mm_get_unmapped_area_vmflags(current->mm, file, addr, len, pgoff, + flags, 0); } -#endif /* * Someone wants to read @bytes from a HWPOISON hugetlb @page from @offset. @@ -1300,7 +1308,7 @@ static const struct file_operations hugetlbfs_file_operations = { .read_iter = hugetlbfs_read_iter, .mmap = hugetlbfs_file_mmap, .fsync = noop_fsync, - .get_unmapped_area = hugetlb_get_unmapped_area, + .get_unmapped_area = __hugetlb_get_unmapped_area, .llseek = default_llseek, .fallocate = hugetlbfs_fallocate, .fop_flags = FOP_HUGE_PAGES, diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 368d552e4860..3a81b6126f62 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -546,11 +546,10 @@ static inline struct hstate *hstate_inode(struct inode *i) } #endif /* !CONFIG_HUGETLBFS */ -#ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA -unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, - unsigned long len, unsigned long pgoff, - unsigned long flags); -#endif /* HAVE_ARCH_HUGETLB_UNMAPPED_AREA */ +unsigned long +__generic_hugetlb_get_unmapped_area(struct file *file, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags); unsigned long generic_hugetlb_get_unmapped_area(struct file *file, unsigned long addr,