From patchwork Wed Dec 15 06:45:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 12677569 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 75A9DC433F5 for ; Wed, 15 Dec 2021 06:47:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 21BDF6B0075; Wed, 15 Dec 2021 01:45:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1FCE86B0078; Wed, 15 Dec 2021 01:45:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 06B0B6B007B; Wed, 15 Dec 2021 01:45:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0164.hostedemail.com [216.40.44.164]) by kanga.kvack.org (Postfix) with ESMTP id EC6716B0075 for ; Wed, 15 Dec 2021 01:45:27 -0500 (EST) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id A67FE181AC9C6 for ; Wed, 15 Dec 2021 06:45:17 +0000 (UTC) X-FDA: 78919091874.13.EAE81E4 Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-eopbgr90052.outbound.protection.outlook.com [40.107.9.52]) by imf06.hostedemail.com (Postfix) with ESMTP id 408CD180005 for ; Wed, 15 Dec 2021 06:45:16 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L26RWQ+lQWj4Uf6msk2qFfZ1efxYSq1bJwBJcxe2/9pPL6S4K6kSczaZesZL+mWEPgTMgXHKwfEh7d9XL/deUnIHGVpUXztiFBc3UhEAi9SWp21QUj3RVqlJvABb1jB8b0o7/D3uO+9WSiHv0Vb69BWgKhxI+D8VsvWTi32byMYBzUK2NkbbyDmgnBWGDEBpQj5Rx4/wCFyh3R/YjI+Myes3mnoxu/BmbetbSNSucqw32mfQB+KeDuPiwCaZ96yqtDIkhm3Vnb2vNnGU9DpbdbxfV74wWCaNgzGeLP0rwTIzrhTVUkcc/XXtV38I/ViNSe3zt67aL9YedeoZ+I2OGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KuKZ8Pp5OoKCaatHC4wZ7EyUM5TYF66Dvkuh8U4yTxw=; b=KWYJKaLMIi+Tr8qVHZilElbLcrcJdFvThP0bc3kcyTJUno0ndLrkqX3hEgv7Q0RfqIR8VC83PVOtP4zJF07Ertmg/xJVWcO/oStPf39UZ7JFgL68//de/WMht+Q4Dxh70HsizGTyJTCj/DT/QyywgyvAJgQyUH3jQKkpr82xvEbIBeBnCAOj5EY89s8mzMA5vKD19HetsZB295ICSDLlrmqCjIVYqgdJFvytqMb50haAR0Am0H6OFsJiIehnZznhb/cPOAhJbAHeKj+hZJU0sQjfT3FgG9tGtyrN6tfUY2ZGmCOKH0lw46lZFgfQZMzo5OpvR0CT/3jDFs4wwGlPbg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB2147.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:11::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.16; Wed, 15 Dec 2021 06:45:11 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::fc67:d895:7965:663f]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::fc67:d895:7965:663f%2]) with mapi id 15.20.4778.018; Wed, 15 Dec 2021 06:45:11 +0000 From: Christophe Leroy To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , "alex@ghiti.fr" CC: Christophe Leroy , "linux-kernel@vger.kernel.org" , "linuxppc-dev@lists.ozlabs.org" , "linux-mm@kvack.org" , "akpm@linux-foundation.org" , "catalin.marinas@arm.com" , "will@kernel.org" , "linux-arm-kernel@lists.infradead.org" , Nicholas Piggin Subject: [PATCH v5 02/11] mm, hugetlbfs: Allow an arch to always use generic versions of get_unmapped_area functions Thread-Topic: [PATCH v5 02/11] mm, hugetlbfs: Allow an arch to always use generic versions of get_unmapped_area functions Thread-Index: AQHX8X9OFivBvoz9ekm2yhHkjqMGSA== Date: Wed, 15 Dec 2021 06:45:11 +0000 Message-ID: <50d176dcf3942894a8dcbc42b7b767b065df9af0.1639550392.git.christophe.leroy@csgroup.eu> References: In-Reply-To: Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 890d07ad-38aa-498e-e067-08d9bf96716f x-ms-traffictypediagnostic: MR1P264MB2147:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JuLIPca/In4EmZzAm9LN26YXx0hCc+rrT7QWQfWK5ICRyHg0u8TcuC4iBFZ+Pv/9I/y4s53EFYqYdiEqLyUoJOR6g8u013ThutLoI1v+orSk4Xy0yhG5lSigtAWlOHnrxhPl4a6ekc1iz/98EOFMoxmzhrFDr5MUNXMvwPmH7No+Le9w4UhRzL2WWIXqNMWLA+RgoZ5rJt/8Sj0+Zhcn/Y6iq7HWJKPU/H7Vno2ZEycKPNUPgxV0i9wbrTN2GsWgqTOhTxCLrb5xCbQSMJJ/kaHn2LTNmLLzjj4YUQRTR/rf6WSmb//U1d7VoUHifvQhTYI4UH40AvLl3cpvS6Pagc9xFJ8FCR9pCoj9r42ivDD1AVbaDjXb9vn1EAkTkFrXFjXdT7BV5JatVKgFZ0HCu8TrWWYo86RkJXHCqm7DKycYgHGJ0CjwqclbB2ATcDHodUd+V4nV3mDpgcX6fMfcPnN+Xa5hdfPwh6InrSCRS/ew7Lr50N6VORIyF9uHRmAp09QMwhdxaYq/lY1mKspzNZVydNrNh2NKFyj0y2ob8/jH4e8zTvnDptUrT+QoCv/Cr8mJxrYesv6FYgeqG79JItg50QbR7mSTQsXCPMdLGfo98DMTKzcMRu6T75ke3mz66MDS2Yzrehf6ExYoCWJYKtfFu0o0Ls4bI8DuKwqWVLiohhkmGsdO7uxbSYMLDsgTbHdTlVZTwxs2MQt2lrYS/XzGtqREeW8SIhKYut/5xQY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(366004)(110136005)(36756003)(6486002)(2906002)(86362001)(5660300002)(508600001)(26005)(186003)(38100700002)(8936002)(44832011)(54906003)(316002)(66556008)(66446008)(66476007)(64756008)(6506007)(76116006)(91956017)(8676002)(66946007)(4326008)(2616005)(122000001)(83380400001)(6512007)(71200400001)(38070700005)(7416002)(41533002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?9WpF00yis3ZLCq3rB3Sd8Js?= =?iso-8859-1?q?aXgR5VFp5U6svB/ofSrDDJpsHWe+WxoRIm0C/LTeEfsw4sCI+8+r4QezgxJ3?= =?iso-8859-1?q?a5WxzO7u0LQUgLONX4H6V8/YMSQtpch2Vyb+cwVVjBKMQI3ukY5b6dK/XkD2?= =?iso-8859-1?q?djlUZg/DGYr8j7XTglcUQIws4zDT5kdSqEjdR+KC/fsmsSUIqBMRpmKLbo73?= =?iso-8859-1?q?ucuUkG6CLyLHLMkiExtv/RL9md8uVmO5XPS5A84LSfCQp8vzP0Rb4TsteIaa?= =?iso-8859-1?q?LoA/YOXXP8fz8rTxrXrPUFFzWgZtMrgJpubT+c513z7oAQQahCD3v7An2FxJ?= =?iso-8859-1?q?zNi1oKudNaHsifVCzybhWS2B6aIq+KNn2RkOOYZdAzksg0/IioNyeBkalxvz?= =?iso-8859-1?q?XROdT0ecTXOn2gbxf85RaArXIE06k/juDz4mfox2OISTjfSCqiO96a8zP5dL?= =?iso-8859-1?q?jTElcDd0dNamaA7Gv7cG/hiJ96GfNS5+YFAf66UMbV1BCA56Pwpw/qXB9s30?= =?iso-8859-1?q?jKVMBlYZUAdPJ8uKtCtZsJvoAYhK6dlgrvRy5CD0uMGch5kBowST1bfc1nT6?= =?iso-8859-1?q?9WHG3CgSNX7zriAwaKZw8indy+aDtEtFBFI2cYjZtsgkUiryr1Jon9Z/bvKE?= =?iso-8859-1?q?7rQzPb5O+JCdwwDry1yxuBgChDeg9hKviDkNEfahkP6bGoZ2wK7KVFY/DKum?= =?iso-8859-1?q?yFtUmiRVdghjAXEZS8PPX+rhQspVbMxTfq8aXct9KvezTHDx4s24YTV0iC2q?= =?iso-8859-1?q?0C765CxrPIR9XBkyztlsCmDDpoz+vk3HvGfxJIreFPFRpbHkU9vJ+zQ1U5xh?= =?iso-8859-1?q?7XUfXc3iheqU2a/pU3AEKyOSxkoAZU3gj04shQvLd2LWBAu4ODDQel40Vbiz?= =?iso-8859-1?q?r+MlxMUK4ze2z3aJZLIYb0tRU4UfO+xre4LiR/HRDhtJl+4OTzpRb5aJ/SIC?= =?iso-8859-1?q?IsYi7zhVH0ewGFPHbqEcXUDKv5vjvxyfAnJG5OXLfZ+V3Y/Id0z/0vx1Hwhi?= =?iso-8859-1?q?1VL7VGwFbwFDQFXb6WXojif+98xAkifwsSZAWr74FuOr3D1PrVYBGh65Tybv?= =?iso-8859-1?q?tORH41xzY9p/zgpGPeFZuZ9tl4zmIe0VONHiwvIlE68eFq3YPE7bE4waMqCQ?= =?iso-8859-1?q?r6PN1zJ9shozRP8PcA3TRrdtCT7/hwvO3S6Djy+syWLJKk9nceITRWwqHN4l?= =?iso-8859-1?q?TzHH9uIsHOSr1EKgdrienNrL6557J2L6W3qu1veF8Oc2Ov6MSN9dbTybrwvG?= =?iso-8859-1?q?IUxHUMR28YjiiUPRgklJciV5EmP/gZCAPL0dxN95+6plNNx8PFwnAcVRFwzv?= =?iso-8859-1?q?z41aFpUCUhcuWu/lXX9pazXQ3LYuo7ZHsbZPPCGbvn0apMYI+SG8guR9Tb8E?= =?iso-8859-1?q?MbSFQk0yNXN39WKZuOsSe9LzkV/Nqzz+w3WDK7htwbFZLBkzpYXHX0Yz1q84?= =?iso-8859-1?q?v4I7TJUh50P/uLFhLB0Hmh7HqJjTHa4r22a0rleSwupACSwj8k1JUjSLD+Ua?= =?iso-8859-1?q?hpvhF2YYHmPZgT3yL2+d1iIVmUHo+O5smGqlwfwR5pBfhkVJMl2fKLSK0Pfx?= =?iso-8859-1?q?iGdSzPMsLWaahxWpJRzsIrqd+Bhqal6nouNPbUXAoG0m5eRYM7L0MwrxjAvL?= =?iso-8859-1?q?TPirN5J2zAhFttUL+OcPA/3l6uo3FTP6z4rA3do7HAtDUyInvHxkWmLdIKKC?= =?iso-8859-1?q?NEh+D52fHsh7mnTF9fHzAKunZtigG28ZM9xgBPKZk5efZXeksoaQJqbLBpor?= =?iso-8859-1?q?SPTU=3D?= MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 890d07ad-38aa-498e-e067-08d9bf96716f X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Dec 2021 06:45:11.5387 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7GtL1reS3uDvvkTRL5y04udJbcv6GijHyRkvexwyJPsR0Jlqe69MnRxHaBIhnIxJvvdedDuD3kH8tEwmdoMeTYnmM6Wg5vOa9fy0J1WWVLI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB2147 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 408CD180005 X-Stat-Signature: izhwim5eyhqsck93odkqsbdu37cm7mfo Authentication-Results: imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 40.107.9.52 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu; dmarc=none X-HE-Tag: 1639550716-422252 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: Unlike most architectures, powerpc can only define at runtime if it is going to use the generic arch_get_unmapped_area() or not. Today, powerpc has a copy of the generic arch_get_unmapped_area() because when selection HAVE_ARCH_UNMAPPED_AREA the generic arch_get_unmapped_area() is not available. Rename it generic_get_unmapped_area() and make it independent of HAVE_ARCH_UNMAPPED_AREA. Do the same for arch_get_unmapped_area_topdown() versus HAVE_ARCH_UNMAPPED_AREA_TOPDOWN. Do the same for hugetlb_get_unmapped_area() versus HAVE_ARCH_HUGETLB_UNMAPPED_AREA. Signed-off-by: Christophe Leroy Reviewed-by: Nicholas Piggin --- fs/hugetlbfs/inode.c | 17 +++++++++++++---- include/linux/hugetlb.h | 5 +++++ include/linux/sched/mm.h | 9 +++++++++ mm/mmap.c | 31 ++++++++++++++++++++++++------- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 49d2e686be74..c7cde4e5924d 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -195,7 +195,6 @@ static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma) * Called under mmap_write_lock(mm). */ -#ifndef HAVE_ARCH_HUGETLB_UNMAPPED_AREA static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) @@ -244,9 +243,10 @@ hugetlb_get_unmapped_area_topdown(struct file *file, unsigned long addr, return addr; } -static 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 mm_struct *mm = current->mm; struct vm_area_struct *vma; @@ -282,6 +282,15 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, return hugetlb_get_unmapped_area_bottomup(file, addr, len, 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) +{ + return generic_hugetlb_get_unmapped_area(file, addr, len, pgoff, flags); +} #endif static size_t diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 00351ccb49a3..df899d1937ff 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -513,6 +513,11 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, 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); + /* * huegtlb page specific state flags. These flags are located in page.private * of the hugetlb head page. Functions created via the below macros should be diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h index aca874d33fe6..2584f7c13f69 100644 --- a/include/linux/sched/mm.h +++ b/include/linux/sched/mm.h @@ -144,6 +144,15 @@ extern unsigned long arch_get_unmapped_area_topdown(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, + unsigned long flags); +unsigned long +generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags); #else static inline void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack) {} diff --git a/mm/mmap.c b/mm/mmap.c index bfb0ea164a90..7ac6a07ff382 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2131,10 +2131,10 @@ unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info) * * This function "knows" that -ENOMEM has the bits set. */ -#ifndef HAVE_ARCH_UNMAPPED_AREA unsigned long -arch_get_unmapped_area(struct file *filp, unsigned long addr, - unsigned long len, unsigned long pgoff, unsigned long flags) +generic_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) { struct mm_struct *mm = current->mm; struct vm_area_struct *vma, *prev; @@ -2164,17 +2164,25 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, info.align_offset = 0; return vm_unmapped_area(&info); } + +#ifndef HAVE_ARCH_UNMAPPED_AREA +unsigned long +arch_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + return generic_get_unmapped_area(filp, addr, len, pgoff, flags); +} #endif /* * This mmap-allocator allocates new areas top-down from below the * stack's low limit (the base): */ -#ifndef HAVE_ARCH_UNMAPPED_AREA_TOPDOWN unsigned long -arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, - unsigned long len, unsigned long pgoff, - unsigned long flags) +generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) { struct vm_area_struct *vma, *prev; struct mm_struct *mm = current->mm; @@ -2222,6 +2230,15 @@ arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, return addr; } + +#ifndef HAVE_ARCH_UNMAPPED_AREA_TOPDOWN +unsigned long +arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + return generic_get_unmapped_area_topdown(filp, addr, len, pgoff, flags); +} #endif unsigned long