Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755389AbcJ0Tom (ORCPT ); Thu, 27 Oct 2016 15:44:42 -0400 Received: from mail-eopbgr00131.outbound.protection.outlook.com ([40.107.0.131]:32368 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754413AbcJ0Toj (ORCPT ); Thu, 27 Oct 2016 15:44:39 -0400 X-Greylist: delayed 3567 seconds by postgrey-1.27 at vger.kernel.org; Thu, 27 Oct 2016 15:44:38 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: Dmitry Safonov , Benjamin Herrenschmidt , Paul Mackerras , "Michael Ellerman" , Andy Lutomirski , "Oleg Nesterov" , , Subject: [PATCHv3 5/8] powerpc/vdso: split map_vdso from arch_setup_additional_pages Date: Thu, 27 Oct 2016 20:09:45 +0300 Message-ID: <20161027170948.8279-6-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161027170948.8279-1-dsafonov@virtuozzo.com> References: <20161027170948.8279-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM5PR0601CA0041.eurprd06.prod.outlook.com (10.173.86.155) To DB6PR0801MB1735.eurprd08.prod.outlook.com (10.169.226.150) X-MS-Office365-Filtering-Correlation-Id: 65518980-59db-415f-9cae-08d3fe8c5872 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;2:16RJCZ9ikTHKu05yhZnQszt9DJVeUQG5eB5mZuvL0hfSf5QzgnmL1h68hIcH1yC7NMRlAYvhyZ8OXxYBz9vZViuJlIbGZTq/z50BaIqr14D6lVlAmUz0GHwnuzChBsI51cR2odrIRt7nxKpyzm1qTDN4ixYk3IeCEd3EHm5IJH2nlvtxqJcmv7Cf2RavB+4UfxHchLL6Tg8RsGGRdPVPcg==;3:RPwIuYVFeBrdz4Z9kICCY9G2qznrz5DVLoboD0eDGNARCxT2zwygnt11FHsHnfvhFU+tse58A3A9YTVspUQ977zjRjzEOspXwtasiaxnLMn5K+/rZe9+aDDzkuKdpXd6mBjXZj8wRclPqbF6TQCeTQ==;25:veQ/7y+ctbGkERiMYw/93E1tZhm3KeImZMVy7Y4MWcUrqNgDfp76Lsxgc2zZgHm+DlpeLaxvWuVKZFlX+yh+oy7CHwCsYyf1Qr0hMuDMuA5xVsvBWrFRn5HHkQL73i2XUBFxjZLExuBrYvZjStixoJVvvgsyJvlHitdKpgcV777yBamlaBU6mhv2Io0jJP3+HAPgNW1ScknDUjKSPk2EDiyEYK5mTQUz5qseLg5iDQk9Sqo2I0XIXpw7dQDpmSJ3OjktkTtPXHxAMHvJkjfMSf8PJ95AKpzlrcFKbqReGVcdpDmSzyAzqBL7DUe5AUILxgNx08Wg3RHtmhePfSosspsb0U0l4Ha68j61TLmouTydORyl6rFuhijqh8f2iYRvc/POFRHKQnCIkPDRaVBJsGD/xpOMb+kOWck0+hvScOaHBqBh9iIjj85NNaXjsnlB X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1735; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;31:nEqqsRr6vSrZwH1cn5I2m2WiXnoP2+MtaKcnkh2c4hAuJ6dNubHZW40AZ6KnDZ443+yXryJWrBUOvdI3O135i36I7maMstjil9fmPB7M6MIYboQsb7JAxESCeuUrXMxYtN9oIo9t4aqWtt/ZM9/Yn2I4zzOh/DIjDyp7i57wgDdKoiYMU+j2Rejwf8KMRXzRUjc2kf7rH+uUiUY8jdVIhLGlj+Yama7xhwQEHwE776AW92mLHwVipwzDWhB85Ly+txj4E2A7ZjD+WsKSG5DVQw==;4:C1GnroNTYij9sbXqXqQ+a7+JuebAcVuFqEbYm+CWHNrvvct4JrSMQQ6zKyaen14VONn8N2zGFjIPnrsK8zkviCAr1P0vCcahTF/NJxSzgeF+b9Ks9qJkPILJPV09BKL6mHsmxDlqlTP04vUBZE/yYFU3LpSS3jZBE/u3H5GAWwYCIAL3U6OmqFMrjfovSmJCqQGRpd6JcEYbWPq4CMhk5ohzQNYGHVakDixZY72P93HAinyKFQx8FMV/hSFvd+dW5AcpFbB6mlCHV90+6ndB1cn0G+yp/f7dpC7DoyFO0gur7dAog5fa6o+V8yS3eXvdclSvfyr9A6O1S0RTdw50gTDW2xWqmNLR/LqelzvCvOAh0iWE2Kuggy+eqlA+qsFvmcy4/M19qDPStjLeYk0HTiZSfxnT0HEuhJTjNZboTWFK9k0rUcONYQL+D+sov27hPV333IP5a55N3M7Q0uYwyegYNsmBD4ex6l3LwIgfOAM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(65623756079841); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6042046)(6043046);SRVR:DB6PR0801MB1735;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1735; X-Forefront-PRVS: 0108A997B2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(7846002)(81156014)(97736004)(5003940100001)(305945005)(7736002)(6666003)(81166006)(66066001)(8676002)(92566002)(101416001)(110136003)(2950100002)(69596002)(68736007)(48376002)(5660300001)(77096005)(50466002)(6916009)(47776003)(50986999)(76176999)(586003)(189998001)(2906002)(3846002)(1076002)(6116002)(106356001)(33646002)(105586002)(36756003)(19580395003)(42186005)(229853001)(50226002)(53416004)(19580405001)(2351001)(86362001)(4326007);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1735;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB1735;23:6RQy54rAQ1zM6hn/r3uQ3SCsPQEvj5hLBnDcz4W?= =?us-ascii?Q?GDXlcPyVAK3SscULZif+kq6ZTGzLqg6se0cbM6qWiWdSyNtp4stGH83PQjWy?= =?us-ascii?Q?uga9i3fnXP3YYs9R7rSNu4ZnxgZNfmRU4YQCfmMMMNT1E7PMQ50pczB8IKC7?= =?us-ascii?Q?yZZPQT/KJecxe4uB4hQ3B8/nuhDeK2j8/4QohXLRkZ+U/AI1K73d2oMMeYgr?= =?us-ascii?Q?FxyG72VEd8Xj5aEp31hq8nYvxsizIz/UVp60cwYK5356Sv7X8lHydAdpleZc?= =?us-ascii?Q?MW7t7Ls9yGRv/onkyhm8RXr8Zvt5ns923z7PROVaMaYW3eestOxosNX0EK7M?= =?us-ascii?Q?BZBwuCeOdllkhoWPvKUJa5f8WDwRcmASmNpjXPQzYK3SA75z+D0fmpBVt3Ts?= =?us-ascii?Q?mT2Ea8zVCQdliO2U+IDGM+QyFYnSCc2Q79vk94gTh+vQsxfsMRNGjPu7cMVK?= =?us-ascii?Q?/YYOyADu32H6REyhtjeNUv9cYC/ovYTv5ljJsnX4h/VUeBGazfPMpn4oAWVi?= =?us-ascii?Q?fYMBH5aY2wZDS/3pRNQRfXrcyc7WSwU7H+RBGZd/9PgxruwrVmJvXosJPfyE?= =?us-ascii?Q?UUdJmd+DHDC2K83Ay7RLQQozb6rbucjCf2jAxoVI7ko2Nm2Q4o3aBCL6uiek?= =?us-ascii?Q?LV8not8nC59esGZopOZVTtFd8GMVKSuXuwZyNQphajkfcSe4sX6zAP+yYaWz?= =?us-ascii?Q?ZftueYpQMDAJgf8uRiAyyuTf8CYrfWo9jFAmemprOG+aVau07vf/wn54L9SF?= =?us-ascii?Q?UixBoopI6dGKzAeKN/kboXPN56I5aOKkh2EUHWU7ds535C5W2GYDl7zTtSFb?= =?us-ascii?Q?iHfFagqR0WbOKyUkzhh6yjh38q9/E5YHOOBDK3s8LQdwxc/nikrtcaygi6c2?= =?us-ascii?Q?gQtccXHP0EMNQIdRSCwwZzn+jXIPLgeNU60+g6ANfrn/THYJC9vUU0w1AGhk?= =?us-ascii?Q?06qSaRhGyNtZrNJeTJ4RNY+rQnIJYZXyJb1ftkCcqggRsw0GLgCClRbMjmIx?= =?us-ascii?Q?nYrgOsnJPG9XlZfTnpw+nSJldnGWnOdmN2LPMkycY6EZR4GSygEzXuE9RwVu?= =?us-ascii?Q?6NVN9GVP8Yp2vOMY92kxaG3VqpWltAkJz1DjPgpDiM3yjnQ5Dn6Otv12gFBO?= =?us-ascii?Q?I655tOO7bJMXO9vtatxzdKS3GBfo56hfeC/TZy7KUzCo9hkUp0rtHolGfMXI?= =?us-ascii?Q?RWntxNdyiNjsBI/s=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;6:gGgJsOkEXZ6vTJcR0/antnyWs+ISCigJUnOeojyZ3te3a8aSpCTNlI3sZgWe+2kaULB3aY51L5JpdqJLwTtJj5amKVirY0EY6Z7ZlESvRN0SksD1Mipv41gSYehi+2rAO8vYuDNaG5Z7s2SICWloDbTt5jn05Qnxl64A3X9wgQMQOL0UWL9sgKld5Qxf9wldalAMOWoMZ23anqI8YR67+fS7DrK/VTi9U8Zzt1/VxnPgfuszuftolCxq1Mk5mRPITMZDevq1vJ/5FoVmfsXEcD9bZl682oA30KDXeIWdRc2qe8rR+desCxTdqi5mqOfBWzw1I36VNIZTRLTTgUmoRw==;5:5aTgcrfVeW+dNWO9fNQI12p54lg6bzwOPLaJF52uba7RjsqH78ucj/888iCsTWTDnnoBiu844sSxr7Fp3NZjWCTlDNZ/16P3vXn6x10gn9IOPPslRJGSj9hbKCnUcQ+vXh8p3X8ifX4rPdpuOOSJuQ==;24:eEvCrqHHguC8zyHT/RoRwonvpghMLqz2W3FEvDi9xNvrgOY8jV+YMz/roOxczILdQiCVf7lmig9RyqEZDUfqYcP53yGGfP19meeZ8DV8LZc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;7:AP7mYXK8IHBWzBYu88T7gvyPU9uiO8XaOdn+GpXN5vOD7y43oGJJ4Iti2iqgMVYKjsMOkyMCZaXmYagZqWzxsTj5dsFkSHyczGjNtIHrJQAIKEsrxvYXyj6YGJOKeU2qF7oKTDYURFXRTc+DWdWKaiw1gtMvkYza4U3YSdE6vzL+rJc2FWf8y29ZQCGBmiNJbkmfQ22B7+LXxPO28Fj8+dFWwUuPwEuK1DW1sjnvnKNMrXWZzkg/jZmTtv8ej4EAzQidiRE0WNU3kGP/b7rjcrLaliT2TaBux+bcTNWqqJISu/iikZkk3HioxptEhL8WsIa6/TyzL97HQ5f8NvXwcLYNRBHT01DNYalip5br4Qo=;20:E8SwO3Jh5bCcoC7EYBvOhzQt237NsP0eggr+YmjvrsLUs4v4uOjxsaZ2za6DyNYPs0gXnvT7Uz+VRk9+c6CyVwqZ2G/jD1IM86qQax0NpbucuZN2L+2lTvCW72K6mW25YcTJZeGsmrLCCPnjC3qlQtdcGKJFRNBdXZNRT8QFJYs= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2016 17:11:51.3747 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1735 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3251 Lines: 115 Impact: cleanup I'll be easier to introduce vm_special_mapping struct in a smaller map_vdso() function (see the next patches). The same way it's handeled on x86. Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Michael Ellerman Cc: Andy Lutomirski Cc: Oleg Nesterov Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-mm@kvack.org Signed-off-by: Dmitry Safonov --- arch/powerpc/kernel/vdso.c | 67 +++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 25d03d773c49..e68601ffc9ad 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -143,52 +143,23 @@ struct lib64_elfinfo unsigned long text; }; - -/* - * This is called from binfmt_elf, we create the special vma for the - * vDSO and insert it into the mm struct tree - */ -int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) +static int map_vdso(struct page **vdso_pagelist, unsigned long vdso_pages, + unsigned long vdso_base) { struct mm_struct *mm = current->mm; - struct page **vdso_pagelist; - unsigned long vdso_pages; - unsigned long vdso_base; int ret = 0; - if (!vdso_ready) - return 0; - -#ifdef CONFIG_PPC64 - if (is_32bit_task()) { - vdso_pagelist = vdso32_pagelist; - vdso_pages = vdso32_pages; - vdso_base = VDSO32_MBASE; - } else { - vdso_pagelist = vdso64_pagelist; - vdso_pages = vdso64_pages; - /* - * On 64bit we don't have a preferred map address. This - * allows get_unmapped_area to find an area near other mmaps - * and most likely share a SLB entry. - */ - vdso_base = 0; - } -#else - vdso_pagelist = vdso32_pagelist; - vdso_pages = vdso32_pages; - vdso_base = VDSO32_MBASE; -#endif - - current->mm->context.vdso_base = 0; + mm->context.vdso_base = 0; - /* vDSO has a problem and was disabled, just don't "enable" it for the + /* + * vDSO has a problem and was disabled, just don't "enable" it for the * process */ if (vdso_pages == 0) return 0; + /* Add a page to the vdso size for the data page */ - vdso_pages ++; + vdso_pages++; /* * pick a base address for the vDSO in process space. We try to put it @@ -239,6 +210,30 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) return ret; } +/* + * This is called from binfmt_elf, we create the special vma for the + * vDSO and insert it into the mm struct tree + */ +int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) +{ + if (!vdso_ready) + return 0; + + if (is_32bit_task()) + return map_vdso(vdso32_pagelist, vdso32_pages, VDSO32_MBASE); +#ifdef CONFIG_PPC64 + else + /* + * On 64bit we don't have a preferred map address. This + * allows get_unmapped_area to find an area near other mmaps + * and most likely share a SLB entry. + */ + return map_vdso(vdso64_pagelist, vdso64_pages, 0); +#endif + WARN_ONCE(1, "task is not 32-bit on non PPC64 kernel"); + return -1; +} + const char *arch_vma_name(struct vm_area_struct *vma) { if (vma->vm_mm && vma->vm_start == vma->vm_mm->context.vdso_base) -- 2.10.1