From mboxrd@z Thu Jan 1 00:00:00 1970 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 90839C3DA49 for ; Wed, 24 Jul 2024 00:37:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E658C6B007B; Tue, 23 Jul 2024 20:37:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E15316B0082; Tue, 23 Jul 2024 20:37:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CDCD16B0083; Tue, 23 Jul 2024 20:37:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B17AF6B007B for ; Tue, 23 Jul 2024 20:37:27 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 31E56A0523 for ; Wed, 24 Jul 2024 00:37:27 +0000 (UTC) X-FDA: 82372782534.01.43905A2 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf23.hostedemail.com (Postfix) with ESMTP id C877B14001D for ; Wed, 24 Jul 2024 00:37:24 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=Dr7G1PxO; spf=pass (imf23.hostedemail.com: domain of akpm@linux-foundation.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721781398; 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=GIVzmuwJyvzUSAxhhRPyxh3XN0hXJUm/Kh/E368VjUI=; b=qz/Tn2I1NBN5Ksys0ccg7O9ckTpckirVj42ad/5XVV/Ch2xAXTcflyo7R7U4DWzzG09FZX GeHWzVhoIHPpDd2ayMd2k04FyM1xu/B7VmUDjIjb5ZQ0IpOjCI6BcsQEaRRI5RMw9RSS6e lZ6Q74qbb58lAuJ1VBjCDNc3vLUCSsk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721781398; a=rsa-sha256; cv=none; b=SPEfVt98YWMqUypbN/uhEni6aUsOjzeET7sIe5R1WCgh5Q+4UlPQM4xSUoAGaC7MZoeGhE AUuv4qnLn4wpR4zXOruaVqqNbPAV4i5wNk48sCIB2RBm/31sw1Nmy8RkVNyAAfdElenMZy wVm8eYg9eoxdq+RcMmmYmOwbRpvMNrE= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=Dr7G1PxO; spf=pass (imf23.hostedemail.com: domain of akpm@linux-foundation.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 499DCCE0B08; Wed, 24 Jul 2024 00:37:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4C01BC4AF09; Wed, 24 Jul 2024 00:37:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1721781440; bh=2sIExTgkE69oYCZK/sCrL6LOICo37hU1irVyTFaFzdE=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Dr7G1PxOy3yHGZuUlch65NMzOEJcRbEta/yXzXSSgIV9npQ13T2MQfSjzNcdRqYIK BfGdP28GeZkDRYrUzl+u/gNNMTApt9/XwzUBxQfO6hbS3bvqWjp3QNPfs/MApSHwFS RQqInT6svUsdaLgtbOVAXlPcpLWxqowIIlW/m3xY= Date: Tue, 23 Jul 2024 17:37:19 -0700 From: Andrew Morton To: Oscar Salvador Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Peter Xu , Muchun Song , Michal Hocko , Donet Tom , "Kirill A . Shutemov" , Matthew Wilcox , Vlastimil Babka Subject: Re: [PATCH 7/9] mm: Drop hugetlb_get_unmapped_area{_*} functions Message-Id: <20240723173719.e0894a5855e1b46d95cbc3cd@linux-foundation.org> In-Reply-To: <20240718105903.19617-8-osalvador@suse.de> References: <20240718105903.19617-1-osalvador@suse.de> <20240718105903.19617-8-osalvador@suse.de> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Stat-Signature: rs7y5iexjcjwa1k7ek6fzsf8nbhwu5zf X-Rspamd-Queue-Id: C877B14001D X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1721781444-227651 X-HE-Meta: U2FsdGVkX1/nfeVm6HGKrVvGHTtPe2QV/ty0JFM6vQYMtBOBtyA7nxP8U8GWrfXlT5KLG4tS1oUYd/iyB19eKsPC/1x+DRIRgX+IF04v2iUSz57hymfsdxY1I6oI0jvyi2SGkK25mGLQ6tX3vtaOCtAfpIz9C4Ylwow+0Xx09rgCB50AFDegnSPbNB6wHnhyTas5Ou4i2GMPlJsBx7nj4erNyQqPja8xNCz4luU/DN4+0XGVI3lgMobxrUqAZ6hRKfktMlXFuBngH/Q5wlRbgUbBQkXqPQBtOMr4JkmPlSUxnUYlQ0vjtDxDg4WyNV/57Ktw7Y4tMBZWpb5dnpiwM7evaSiXqmhcOBQIX5bmsyO8z1edh+PyuOXVIbdIUUMizqnJI5Ic3zMZ1SG1jXP42vSjLvAsL8vadHjrjMYHCQkW/tVjlO4rOYCsey3zg8ppIfgot/i/r2mrjFxWu+SAAt05QWl/YomWENCU9S0EcpFz+k2w0ao/h/UkZtDJs+pQYXpjmxxwK+T/KmnlPCNksg/bWjLA602EK15Zer37/Z20tekmzbw0bkklvvYEio0qkNFbXKL8bXd6HOb65TwJmOCOQtTIOIMDOP3acWdj9YEO4IdGcPQ3cs71ZWiVrlQRDpNShkOhWXCkGI4SQ0MY39hblpf+Vv90+XxO1jA5o+pMxdcCLbbp61GNrxgEuLUscRgOVJw0g/r6QYKLcJLEvXMoQur/m/ufCbUZwrToXC9juIEx3B0kpDriYQO+xG0JnXh6mP2LJ/9+lr7iCgWtLa70r1OSEB8pulUwho4gOKqYpp9ZD7IcOFoZcUDjXYO/fsER4OaMewf7tBXHtuQfXbmNoG48EazYjkikJang/j01mav0kTHUMBMY9HYxovPJuwP+qXM4ScuIUESqjAamuW7z/cXXPzvvROlAUK2P6+KygS5Bkax/B6tvlj8ZKZ88S+Y1qsdV/jkGlgQ8Tks k/kFt3Cv 3Ns3MhqDU+y/lAxYzlHWCfUSD820RDTNvA6mVFA0G+In3Vnyc4l+QsBA6drIyIERjb9bHrSqqP9Pui2FRzBDVrhMH/XeUv5K6UmyLkv5U1OKo47ZKkjDDB4dlJXexjNr7C8aDe2SIfkVg0zRGCwAcPLExCFhKj1QGZQDfhYbECa0fKoi21UY634W0AYT6Jy7Xjg9XbosVNFZuLZBfQq2xRkXPvyXeyoY/8yacNyfvXjR1aZEqQQulFY02K3H0vLaCiZbR1fnoFf7FQh/GC9BWTbFWOw== 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: On Thu, 18 Jul 2024 12:59:01 +0200 Oscar Salvador wrote: > Hugetlb mappings are now handled through normal channels just like any > other mapping, so we no longer need hugetlb_get_unmapped_area* specific > functions. > > ... > > fs/hugetlbfs/inode.c | 86 ------------------------ The fs/hugetlbfs/inode.c code which this patch removes is quite different from the code which is currently present. The concern is that important recent changes to this code were not carried over into the code which replaced it ("normal channels"). And that this patchset hasn't been tested against latest trees. So can we please have a redo? (Here's my diff of what-is-there versus what-this-patch-removes) --- /tmp/1 2024-07-23 17:29:43.704770012 -0700 +++ /tmp/2 2024-07-23 17:29:42.232748301 -0700 @@ -1,29 +1,28 @@ -static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, - unsigned long addr, unsigned long len, - unsigned long pgoff, unsigned long flags) +static unsigned long +hugetlb_get_unmapped_area_bottomup(struct file *file, unsigned long addr, + unsigned long len, unsigned long pgoff, unsigned long flags) { struct hstate *h = hstate_file(file); struct vm_unmapped_area_info info = {}; info.length = len; info.low_limit = current->mm->mmap_base; - info.high_limit = TASK_SIZE; + info.high_limit = arch_get_mmap_end(addr, len, flags); info.align_mask = PAGE_MASK & ~huge_page_mask(h); return vm_unmapped_area(&info); } -static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, - unsigned long addr0, unsigned long len, - unsigned long pgoff, unsigned long flags) +static unsigned long +hugetlb_get_unmapped_area_topdown(struct file *file, unsigned long addr, + unsigned long len, unsigned long pgoff, unsigned long flags) { struct hstate *h = hstate_file(file); struct vm_unmapped_area_info info = {}; - unsigned long addr; info.flags = VM_UNMAPPED_AREA_TOPDOWN; info.length = len; info.low_limit = PAGE_SIZE; - info.high_limit = current->mm->mmap_base; + info.high_limit = arch_get_mmap_base(addr, current->mm->mmap_base); info.align_mask = PAGE_MASK & ~huge_page_mask(h); addr = vm_unmapped_area(&info); @@ -33,53 +32,56 @@ * can happen with large stack limits and large mmap() * allocations. */ - if (addr & ~PAGE_MASK) { + if (unlikely(offset_in_page(addr))) { VM_BUG_ON(addr != -ENOMEM); info.flags = 0; - info.low_limit = TASK_UNMAPPED_BASE; - info.high_limit = TASK_SIZE; + info.low_limit = current->mm->mmap_base; + info.high_limit = arch_get_mmap_end(addr, len, flags); addr = vm_unmapped_area(&info); } return addr; } -unsigned long 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, + unsigned long len, unsigned long pgoff, + unsigned long flags) { - struct hstate *h = hstate_file(file); struct mm_struct *mm = current->mm; - struct vm_area_struct *vma; + struct vm_area_struct *vma, *prev; + struct hstate *h = hstate_file(file); + const unsigned long mmap_end = arch_get_mmap_end(addr, len, flags); if (len & ~huge_page_mask(h)) return -EINVAL; - if (len > TASK_SIZE - mmap_min_addr) + if (len > mmap_end - mmap_min_addr) return -ENOMEM; if (flags & MAP_FIXED) { if (prepare_hugepage_range(file, addr, len)) return -EINVAL; - goto check_asce_limit; + return addr; } if (addr) { addr = ALIGN(addr, huge_page_size(h)); - vma = find_vma(mm, addr); - if (TASK_SIZE - len >= addr && addr >= mmap_min_addr && - (!vma || addr + len <= vm_start_gap(vma))) - goto check_asce_limit; + vma = find_vma_prev(mm, addr, &prev); + if (mmap_end - len >= addr && addr >= mmap_min_addr && + (!vma || addr + len <= vm_start_gap(vma)) && + (!prev || addr >= vm_end_gap(prev))) + return addr; } - if (!test_bit(MMF_TOPDOWN, &mm->flags)) - addr = hugetlb_get_unmapped_area_bottomup(file, addr, len, - pgoff, flags); - else - addr = hugetlb_get_unmapped_area_topdown(file, addr, len, + /* + * Use MMF_TOPDOWN flag as a hint to use topdown routine. + * If architectures have special needs, they should define their own + * version of hugetlb_get_unmapped_area. + */ + if (test_bit(MMF_TOPDOWN, &mm->flags)) + return hugetlb_get_unmapped_area_topdown(file, addr, len, pgoff, flags); - if (offset_in_page(addr)) - return addr; - -check_asce_limit: - return check_asce_limit(mm, addr, len); + return hugetlb_get_unmapped_area_bottomup(file, addr, len, + pgoff, flags); }