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 7154BE7717F for ; Thu, 12 Dec 2024 20:08:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EF5C86B00A2; Thu, 12 Dec 2024 15:08:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EA56E6B00A4; Thu, 12 Dec 2024 15:08:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D1E136B00A5; Thu, 12 Dec 2024 15:08:50 -0500 (EST) 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 B262F6B00A2 for ; Thu, 12 Dec 2024 15:08:50 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 62332ADEF1 for ; Thu, 12 Dec 2024 20:08:50 +0000 (UTC) X-FDA: 82887394254.25.6ED7517 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by imf27.hostedemail.com (Postfix) with ESMTP id 790F440024 for ; Thu, 12 Dec 2024 20:08:20 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=D9Qtdffg; spf=pass (imf27.hostedemail.com: domain of shy828301@gmail.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734034102; 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=zN4Ym/UunmzCYsNSflmoKoSUjG0g5+VHwXB/fYxaNqo=; b=b7CZDEhcsLRUaPtNIfCSNDZ8fevIsqBFzAWLV2M3F2zXac96KNews/M4aCONoZa/P0GPCC fOPjruV5l4fecDuTFlGx7w0yDW4WBeb1QxTGif0S4R6I5EK/LaWB7H6jUtS1alf/+l/QWY jTmmypOnIoTFoTB4H4ozIkA30YfKbnI= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=D9Qtdffg; spf=pass (imf27.hostedemail.com: domain of shy828301@gmail.com designates 209.85.218.48 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734034102; a=rsa-sha256; cv=none; b=nQa2t1Nfe1BdM0gixYsDmTgLN1DVHWLpPC7lRaqPD0R+aPwkEytsl8a4WhLzj3ZY8Mm0n5 hSqSC4eChrqbZBP1l0o62jR6zeT2ytppyDecw095nzFQbsHaLVXnE0giARcu4ZbLvVOTM9 H2EcU1pUf6gQLfhnqXigA3dF6XGYaWw= Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-a9ec267b879so85627166b.2 for ; Thu, 12 Dec 2024 12:08:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734034127; x=1734638927; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=zN4Ym/UunmzCYsNSflmoKoSUjG0g5+VHwXB/fYxaNqo=; b=D9QtdffgVcIOikFhWURzw5oHfbAPI+swhw419ccwtmjUtlHJaR3qnZhtXO6V6jw1zl nfTQOUxQRYC1vRT5CRdlAYd0G19bQbWzNNQhfxrscAlE0JBsmx682RFnSuvrUBqPPA92 UwCGAAwx9PuKGl+gUpcM+FeSMInopxAWThXGsWCyac8mW9GnCss9t4vUqreE7seGd53c d5We5p7I5zJJqnjXQrpGCwWgdJcRM+Cu1AFGSWqLqH55KzxTmR+hjK22KUgAWB0vgIeI +jToPpI5rwVkDlfBohfiDGS3iZccOmUa+ZPc8NXFoILE2qS5f4up1DsRFN0CHuBo4BcB ohEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734034127; x=1734638927; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zN4Ym/UunmzCYsNSflmoKoSUjG0g5+VHwXB/fYxaNqo=; b=MLl/g8dmeENDsBFT2VaLHcR5b8H3YRv7Iqc++b9nPGXhfwq60QGtQO7Mta35BdMCGG rsEIi8Ugb3xKaXnXho/vSvSqPblJoGWsvLZ8sj9yfX+UoDvZYwmLg8ebQYIXUGgdDUpR fvrwKuuAWfo46bl2jKDaCK71qlUU7QoYhrsQdP5v5Q/WBCneie0RCxBVFzCdrFz1l8lB MANebUDNlXQ/mUNhT0BZqefaSN3700YM3KHM5+BoGISukMZEczjPoGLTin2cmq+2u8us vxAB85tj8nA5dWZJrph0jVXVZWalWoxMwR5K0n2IPlv/iB/21NL5DaiIVOXDmb55pXqI GD8A== X-Forwarded-Encrypted: i=1; AJvYcCVFRXcq0+RRR/Jws8xAfo86PzSOyj1lmmbPXqGwiKZYei+hWfyDhgsvxEF9U3fBu3cKbn+Kwc9z5A==@kvack.org X-Gm-Message-State: AOJu0Yw3X167KrG0E+qg5nJDNYFpIVgJn8zJK/dnyfzIDTi16OKQyGhf dq/lMPGo3QOcFyfq2jOaC4VHanUcm+FG8uMinYf4sQ1zedH11LG4jQf+G/1ECi/8mykn+o9N7ck +wCjOxj8osBKCqMpe8S6hOIDfcQI= X-Gm-Gg: ASbGncvbuomm6vb4c/d2d6fp4EeCJr7ueg4r5nyHeo8B+8TvyRvlNtYTVrkSuQqA7pm QHtB3cTbNfEK+XF9uL96BNM9/Ru6cDQgc3vVyJBsz X-Google-Smtp-Source: AGHT+IFBjZrg88OqeWBDO1jTyqFkrRhdvj/sM97FkFYUxtUn8pc+yCVr/hdiAj5KO+SOUnoKUqWUM88SK7LqY4tEHG8= X-Received: by 2002:a17:907:3e9f:b0:aa6:64be:ff2d with SMTP id a640c23a62f3a-aab778c168emr3388966b.4.1734034126714; Thu, 12 Dec 2024 12:08:46 -0800 (PST) MIME-Version: 1.0 References: <20241211232754.1583023-1-kaleshsingh@google.com> <20241211232754.1583023-2-kaleshsingh@google.com> In-Reply-To: <20241211232754.1583023-2-kaleshsingh@google.com> From: Yang Shi Date: Thu, 12 Dec 2024 12:08:35 -0800 Message-ID: Subject: Re: [PATCH mm-unstable v2 01/16] mm: Introduce generic_mmap_hint() To: Kalesh Singh Cc: akpm@linux-foundation.org, vbabka@suse.cz, yang@os.amperecomputing.com, riel@surriel.com, david@redhat.com, minchan@kernel.org, jyescas@google.com, linux@armlinux.org.uk, tsbogend@alpha.franken.de, James.Bottomley@hansenpartnership.com, ysato@users.sourceforge.jp, dalias@libc.org, glaubitz@physik.fu-berlin.de, davem@davemloft.net, andreas@gaisler.com, tglx@linutronix.de, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, chris@zankel.net, jcmvbkbc@gmail.com, bhelgaas@google.com, jason.andryuk@amd.com, leitao@debian.org, linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, loongarch@lists.linux.dev, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-mm@kvack.org, kernel-team@android.com, android-mm@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 790F440024 X-Rspam-User: X-Stat-Signature: n9zfazgtepufgip5ttaz91egftqnjfpo X-HE-Tag: 1734034100-766346 X-HE-Meta: U2FsdGVkX1+UGYFzobceQ1zfM20u6X5CHy6e2SjkbWtmWZ0L0KlOdSwkkFfL6+S6oNkm09x8xNAWtoJ0YSlNCa+C4ypfv5TlyaoRnEqiAN6nvDZL0pwxXAG2VxfJdlef84rDVPjkHghNrcN3qwGZGkuIxHAUKJy3xU/JILwELis2v+W8jz+hbAnlpnSM2YQdW3YLLo9bUkEiW15eigodddyxP0sqxj2b5kApxLFx4VeDnvxZFOHghfdLKszxOC6X2EbT8TmjwY0BSvrPPxYuR9SVUSOsDWIL1QC4jDiWcg7QOo6LThnUV4yNv9gXSFrrCI1Td6sYP6L1JvdocrZbVcoJowHQIOsKCX6yEFZSagAaZoevZEOn3K8irZCn22k2BIFzVbEihV6wo/34dvHZYPMonyAcZE6D2qH48Ue+uL+EzxERk4bM0UQYvEFeKqDWzjg/dVUDBgO9iF5HTKaUV7eDAU49LKnDpe3khQnCM2Nh4DsiaQd15OucuZkIkau13YpCiIrlA1FFbNeRUkh4Bb4arpX9PHw7sn0BO5K/jJlEJpn/K13sLo3oVU46grXukcepleZ02tllLLLnmQ5xhXvOOFZNBeJS0Z5I0++teelxjPdkh7PB76v3YDCOHjIuFhjjMO7YG9GBbpfaV7tjpDT4fA2N4JVBTMrfUlP9sU1zuiMdIoohxnn5TovgrmYlAbYuthMyFNEHUSrHbj/2/hEX++Jo2/f+cc8gDV+LS80Hovwz2Bpk1Im6ASZH2gTMGF2BDux/pH5RCoawMVPC/0+waYSI2vaetK6vdB5fJUoi5PaBa/Et3qj/Wu56jYvhiKBWeIfihZMaH5tffrLPskBtmflOWRS5woRBp/I0RKDW8pzgcAip6e1iPr/ZUQUeRzrfLhDw4SUdUIyDQjNoOs0Jer/jBBjQGmvQOKRnSN/JZhkVT0q66yCcLYdlND02VT1+5jN4L20wlNl9wmS ZeHdjfk/ eHYXaXktwqOLDWRiAgDXpIxXp1Qe5/J62BZmW0ql8CHcn+t+PmSyL0FynD7lBZOm1SMR29lDof2MMAMwNf/eKzL5+W4wmJzslWlOlk0ZbQfzTtJIy5nJgIxyEH6M0dB0rtgyEWBX13t+EOmrfupXpwpbuvy2bVi73GIhgGZNTe3jHzOfjrETcWbGfZYbs16xpy9ngaV85yCd5VcyyVl1LK7guryeqHEu9CWo0qbO68q4jN+qxtXrsgnKK6ZvADmsvjrnNbqELRBMwQb1vjTGuagr3m/BBHHZ5GHT3jKzTabLGsTQt15003BsiaXemQDRN9h4CAYEm9GvzHvka2CMpfTuXKhCjoFDc5dj5CW6JrA2yHvU+g3DIIN17vSGw5ujdXL4lrFbWT0fvGSYJkM7GnvGpMqL3KfC+ylil X-Bogosity: Ham, tests=bogofilter, spamicity=0.198320, 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 Wed, Dec 11, 2024 at 3:28=E2=80=AFPM Kalesh Singh wrote: > > Consolidate the hint searches from both directions (topdown and > bottomup) into generic_mmap_hint(). > > No functional change is introduced. > > Signed-off-by: Kalesh Singh > --- > > Changes in v2: > - MAP_FIXED case is also handled in arch_mmap_hint() since this is just= a > special case of the hint addr being "enforced", per Yang Shi. > - Consolidate error handling in arch_mmap_hint(). Reviewed-by: Yang Shi > > include/linux/sched/mm.h | 4 +++ > mm/mmap.c | 76 ++++++++++++++++++++++++---------------- > 2 files changed, 50 insertions(+), 30 deletions(-) > > diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h > index 928a626725e6..edeec19d1708 100644 > --- a/include/linux/sched/mm.h > +++ b/include/linux/sched/mm.h > @@ -201,6 +201,10 @@ unsigned long mm_get_unmapped_area_vmflags(struct mm= _struct *mm, > unsigned long flags, > vm_flags_t vm_flags); > > +unsigned long generic_mmap_hint(struct file *filp, unsigned long addr, > + unsigned long len, unsigned long pgoff, > + unsigned long flags); > + > unsigned long > generic_get_unmapped_area(struct file *filp, unsigned long addr, > unsigned long len, unsigned long pgoff, > diff --git a/mm/mmap.c b/mm/mmap.c > index df9154b15ef9..382b4eac5406 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -620,6 +620,47 @@ unsigned long vm_unmapped_area(struct vm_unmapped_ar= ea_info *info) > return addr; > } > > +/* > + * Look up unmapped area at the requested hint addr > + * > + * NOTE: MAP_FIXED is also handled here since it's a special case of > + * enforcing the hint address. > + * > + * Returns: > + * ERR_VALUE: If the requested mapping is not valid > + * 0: If there isn't a sufficiently large hole at the hint addr. > + * addr: If sufficient VA space is available at the hint address; > + * or MAP_FIXED was specified. > + */ > +unsigned long generic_mmap_hint(struct file *filp, unsigned long addr, > + unsigned long len, unsigned long pgoff, > + unsigned long flags) > +{ > + struct mm_struct *mm =3D current->mm; > + struct vm_area_struct *vma, *prev; > + const unsigned long mmap_end =3D arch_get_mmap_end(addr, len, fla= gs); > + > + /* requested length too big for entire address space */ > + if (len > mmap_end - mmap_min_addr) > + return -ENOMEM; > + > + if (flags & MAP_FIXED) > + return addr; > + > + if (!addr) > + return 0; > + > + addr =3D PAGE_ALIGN(addr); > + vma =3D find_vma_prev(mm, addr, &prev); > + if (mmap_end - len >=3D addr && addr >=3D mmap_min_addr && > + (!vma || addr + len <=3D vm_start_gap(vma)) && > + (!prev || addr >=3D vm_end_gap(prev))) > + return addr; > + > + /* Fallback to VA space search */ > + return 0; > +} > + > /* Get an address range which is currently unmapped. > * For shmat() with addr=3D0. > * > @@ -637,25 +678,13 @@ generic_get_unmapped_area(struct file *filp, unsign= ed long addr, > unsigned long flags, vm_flags_t vm_flags) > { > struct mm_struct *mm =3D current->mm; > - struct vm_area_struct *vma, *prev; > struct vm_unmapped_area_info info =3D {}; > const unsigned long mmap_end =3D arch_get_mmap_end(addr, len, fla= gs); > > - if (len > mmap_end - mmap_min_addr) > - return -ENOMEM; > - > - if (flags & MAP_FIXED) > + addr =3D generic_mmap_hint(filp, addr, len, pgoff, flags); > + if (addr) > return addr; > > - if (addr) { > - addr =3D PAGE_ALIGN(addr); > - vma =3D find_vma_prev(mm, addr, &prev); > - if (mmap_end - len >=3D addr && addr >=3D mmap_min_addr &= & > - (!vma || addr + len <=3D vm_start_gap(vma)) && > - (!prev || addr >=3D vm_end_gap(prev))) > - return addr; > - } > - > info.length =3D len; > info.low_limit =3D mm->mmap_base; > info.high_limit =3D mmap_end; > @@ -685,27 +714,14 @@ generic_get_unmapped_area_topdown(struct file *filp= , unsigned long addr, > unsigned long len, unsigned long pgoff, > unsigned long flags, vm_flags_t vm_flag= s) > { > - struct vm_area_struct *vma, *prev; > struct mm_struct *mm =3D current->mm; > struct vm_unmapped_area_info info =3D {}; > const unsigned long mmap_end =3D arch_get_mmap_end(addr, len, fla= gs); > > - /* requested length too big for entire address space */ > - if (len > mmap_end - mmap_min_addr) > - return -ENOMEM; > - > - if (flags & MAP_FIXED) > - return addr; > - > /* requesting a specific address */ > - if (addr) { > - addr =3D PAGE_ALIGN(addr); > - vma =3D find_vma_prev(mm, addr, &prev); > - if (mmap_end - len >=3D addr && addr >=3D mmap_min_addr &= & > - (!vma || addr + len <=3D vm_start_gap(vma= )) && > - (!prev || addr >=3D vm_end_gap(prev))) > - return addr; > - } > + addr =3D generic_mmap_hint(filp, addr, len, pgoff, flags); > + if (addr) > + return addr; > > info.flags =3D VM_UNMAPPED_AREA_TOPDOWN; > info.length =3D len; > -- > 2.47.0.338.g60cca15819-goog > >