From patchwork Wed Dec 8 17:18:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 1565401 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4J8P7x5hb0z9sCD for ; Thu, 9 Dec 2021 04:20:45 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4J8P7x4XlGz3ddN for ; Thu, 9 Dec 2021 04:20:45 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=csgroup.eu (client-ip=2a01:111:f400:7e18::630; helo=fra01-pr2-obe.outbound.protection.outlook.com; envelope-from=christophe.leroy@csgroup.eu; receiver=) Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown [IPv6:2a01:111:f400:7e18::630]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4J8P5g4cMQz2yZ6 for ; Thu, 9 Dec 2021 04:18:47 +1100 (AEDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HXQNO7tgokw4+yMdFmKjXAubANMaKTZX1DeW1QGWvlrlnLsOdz6jqplL4fUIgfALNnthcRN8nFUc6IlYhcWJS1EbSV3NV8Vi3pVONpeGxlFowioA3e4Jwfu3tYaN1+3nA7Yxj3aQNHfUybF1dzLktcNDJWCeIT7lWts8KZRmNs0NEadGHrUP8JYO6KTC6USPEGCG/Ujy6e2a2L9DWh53vl6H/Xg+szVdC2bl2sw7k9qxtlMbX28RAdhHb3oMdwWbuwECsXAvZyyfVJD1bRaEAN2ZwX+0z8ysVBhTmah6SYL92k4iQsed2pHG1fC3v160B4XwhGLKVpwI2dvDuJlSiw== 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=4YWvRbBjf4U0kCRDlH8pY/8azmVLOnn0S8nZTqPpHvk=; b=gY3Mvt2CbKn/bvHtnnm8H5k04uzK67OZBUGKtyintisXRvNRM6uxO5N46IMAH/Zb7ZqZowzp9Co8Y1sc4suW9c8+LdiQdN293iKwnzETPo1QIUXr5U8DU1E/ExKhhQz1+osNenqVcM55EwNV3xN5dpdniWFEU2k4haJ+k6YK2hsJpvHbPXVEKeTv2H2XPyCtWqmjjVaHUC77XMbaLABnQ41kBudOS1IJvNOvZmPXg4P2bymd9lM4HsmgKlyTkHoVlB+cDZUTXfVi8zKWEEh0+oeiAhMRsx2e3x1q0pgIjMjNRnGe0Jwvtr4lprDy7+N27uGg1VWPeT8PAazBTWUK+w== 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 MR2P264MB0228.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.12; Wed, 8 Dec 2021 17:18:18 +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.4755.022; Wed, 8 Dec 2021 17:18:18 +0000 From: Christophe Leroy To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , "alex@ghiti.fr" Subject: [PATCH v4 02/10] mm, hugetlbfs: Allow an arch to always use generic versions of get_unmapped_area functions Thread-Topic: [PATCH v4 02/10] mm, hugetlbfs: Allow an arch to always use generic versions of get_unmapped_area functions Thread-Index: AQHX7FeXC+bo9wFWa0ylx4DmOTaxMg== Date: Wed, 8 Dec 2021 17:18:18 +0000 Message-ID: <52eb6d66c41f1165c88a0b0da08ae190c0b95a59.1638976229.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: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 663d94f9-e49d-41cd-58b5-08d9ba6eba39 x-ms-traffictypediagnostic: MR2P264MB0228: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: gKKhevcMkmUToTHKkxJrf/+v/OlqVftIpwxxclDTtrWddplZmqRDnzfnqlfqgjQcsftA2ndI5nG3KxgwUL/fpAKnyGCvCsyel/NJseGz2oGYs68G0SpYrQ4dczs1PJaYQyzhJt3YtYwSoujrdqxJ9ZA4AFMFJ+XLrnwgozh71pnkWVbtvNsrykjsMas2p46wetA2oX71Rqs/sOu5n7earHY0NlIvIuBbBH3iZfv0mObYObhFbSrQtbzebrXYmcxrK+13v5JwwCgOX5qJmey3XwgpuBVLDyPje6+8Npvx3FfaMbseL1SiJPxtY3p0LwqTwTfkhIcb3Qsy1kpgIsIKi8YhCIHBU+Qc/7N4BRWNz5lwthew+UqVRaQTSEWP5nkfxn1fYpugZqz2mTLH8WWTIW8pXgBCi3IrPN1pQdcpb8rGn+LO7MrzNumdTuNdIXr9xOObsYmLFA4ZhPThAGLtkGxhOOw/aD32P+RCKQo/k9HX1oWNLe6EH6gype857Txi+s4QPOH1kqQccVyVdguCmL7FVKBW088iKlS31fX0HgXhCRGyOuekMBbWmDo9/DPOyrDqy1Tn46tK2LUujbs5qhZIbqqgc5hH4Mva/ynDTi7SPacvZCWuWD+S6/0s9yRtAFRHBXU04QyfF/79Jwps+R/Tn2hrkRAVfyL+LuPE7ZaLQQeyCgHKT4+az2/tnfnt9hVpwKFeTzgDxawzc49O9BSxfTz3IXZEsPMkaN+K8yo= 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)(2616005)(91956017)(76116006)(66946007)(122000001)(5660300002)(38100700002)(66476007)(44832011)(6512007)(64756008)(66446008)(6486002)(66556008)(8676002)(86362001)(4326008)(8936002)(54906003)(508600001)(36756003)(71200400001)(38070700005)(316002)(83380400001)(26005)(110136005)(6506007)(2906002)(186003)(41533002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?U/95AweVdvyItBy5oWdOwai?= =?iso-8859-1?q?uty2qiKat6/t4XTVN0/skRNtNJbnIDHbjPoTF0IN3IrSvgJuXiXSn5EZgsTY?= =?iso-8859-1?q?Ck+kLa/vx7+uPP0R3aikSF7pfpiclPgnYXdNHqoY8jdYcHKVgKsQ1t+sg0K+?= =?iso-8859-1?q?xLpoHW13fVSMobcVCsxhCG2GfbuKCxSRFIip9hDpOkUYCFtBsLRJubtAWxXM?= =?iso-8859-1?q?ARnAMAfIGDCn371TMCMGhpxea/GZ0HtU33ntGxl1xAtUn9i9eusNSWqsbJhv?= =?iso-8859-1?q?eQWk99Lug9h6KKUVk02u6jYEsZasr4WflewPHW+watjz5fpLU4RVxDenuqaC?= =?iso-8859-1?q?uahaQU/Kg5ELOEjYgdkksrzQdV0w7rlMUywsCZ95ouSOtThLbwiWa/w4Hzxy?= =?iso-8859-1?q?N+gxsYP6H0SRXjzCRwEsQNIGISMnzmVYsGs58MNSkxws5IzOrXfqcc8XA3Qk?= =?iso-8859-1?q?p5x5uokyCiJlDb80+6U14aDPNOnNQMIkXI+9H6OgKqjjMwoVH/hRo8gU+sKe?= =?iso-8859-1?q?x5Kiipz2k4qTM0nBzm3MDkhGLZFeHLHB+XS0OfheMPdK2MBOrg/d6EOoSS53?= =?iso-8859-1?q?NT0bo7+QfC3OgXZOsTjdkZRQaJOH6I6ZbHwmAWju8V0mbMG2ZcizpQ1baYnW?= =?iso-8859-1?q?7IF8DNyrcH5lme/CCKCIGG4P0IiojL21xohlrbTg/vHY5Bla/3L5BhfAXBSG?= =?iso-8859-1?q?CFALy3QlsIAU3lIz6tDBOIvyH+9oWq4cjfGq7NW22hjeZUxmzJi8xKWpauJX?= =?iso-8859-1?q?nkml3VFt62UfKHOkIHLqHJMoa/xv/AaWQPpsHCntMGGUEWRlbcxJW8pbFATb?= =?iso-8859-1?q?qb6BmlB9ETKQUcojdDnx49oTGRmnuLMEUaarEKOVVA8ZL1MeQsBtZ8XLvZe4?= =?iso-8859-1?q?8IhISnHw5KbzfDUMOG6DyY38ZIrDDNDx0mK2XdT7/YKNwawgJEfxQC5yO9t1?= =?iso-8859-1?q?7/MoueJspMJlsMycEsT2WFsXZn8iw3ipGzVyfC/u4MbRrIrwOWxFv2Hp+QOQ?= =?iso-8859-1?q?cevzw2/Lc9RjTKp/2wMlL4KAsdYfajOado/qV/Oj4AQT9pO85xSd5TgUFUwt?= =?iso-8859-1?q?UMUkLW363HpnQsjLH3Rwln51aKo4usSXytigU3wBc5Y8oAnor2mGW1N772Dv?= =?iso-8859-1?q?9mzejSMEJD0M8oloFnW6gJUBDpzV/NEfMDRSeyC2YiDWsuD15CFuNG629Ran?= =?iso-8859-1?q?AR3nSI3yCePwcRKYr9n6coGWpOL3hN3vM2bdT6kwBHWu6ZlOcwFpLf0apseM?= =?iso-8859-1?q?QBoscEOlmxsbOmObpS9XreA+jwwkjI9nsjEU7wcEMvaZg4lPpCQEGjH8Jdoj?= =?iso-8859-1?q?xK13TVsWwgzvMKbAW3bFc/cuTsTOPIWzIi98qWWWSddaVxT/rRGvdqvwhbJI?= =?iso-8859-1?q?aT4ylSdvc6zndimoDMeEj13Bm4ivM428/qH6eyP4v62Ps6ItZKU+oF4CHtfA?= =?iso-8859-1?q?heQqS66kYMCH575wTyREENr+Otz8k4UfNDRGxzISVmFGGibu26+0T4BoIIj3?= =?iso-8859-1?q?EbROeOPlBCol0MBUqLxAi3llqBV4/RELC0h3eX7jPumcMZNJw2IMXuWwZYyy?= =?iso-8859-1?q?XfRmRjRsTnKDrHZcCkwW0IZbRyob9iWLlB2uA/XeuCUjwv6XpclhvMwI8zuF?= =?iso-8859-1?q?hnXjjsbqCWIxejQhI2NV6FT3xkvMmNmIMrL/OkAwjpBAA5bH0gSiHE3/S3GM?= =?iso-8859-1?q?JTro4DcXMMkTbdbxVgEl2yroy4aMY1gdQxMd+jy5oYUsc8jiOTYkMGDNNkr9?= =?iso-8859-1?q?ZLaI=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: 663d94f9-e49d-41cd-58b5-08d9ba6eba39 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Dec 2021 17:18:18.2039 (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: /1voBmP0delN+x4XvdKUxqrrkdCJkerOk8/kplN8lncTlt2MtRz77pU0C7Z6y7aPaboKrYdoon441i6dGVvy4mkeNdGO6jut4O2xWdH7Y2s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR2P264MB0228 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "linux-mm@kvack.org" , "akpm@linux-foundation.org" , "linuxppc-dev@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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