Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936021AbcJ0SsD (ORCPT ); Thu, 27 Oct 2016 14:48:03 -0400 Received: from mail-eopbgr00091.outbound.protection.outlook.com ([40.107.0.91]:35235 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751068AbcJ0SsB (ORCPT ); Thu, 27 Oct 2016 14:48:01 -0400 X-Greylist: delayed 4855 seconds by postgrey-1.27 at vger.kernel.org; Thu, 27 Oct 2016 14:48:00 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 6/8] powerpc/vdso: switch from legacy_special_mapping_vmops Date: Thu, 27 Oct 2016 20:09:46 +0300 Message-ID: <20161027170948.8279-7-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: f03a0ad7-a078-4190-bbb2-08d3fe8c5927 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;2:l7/KWEILwNTMSqvG6Vhwy+fE0xudx1CyfOIstZwZOgGIdO0GfJgVwQewOGGoj72iWfEfqG0xcvWphlHFWYwwpiloYx4vLkxYK4jfz1ZDcGWPPPJC/Lvuxsm5bP1W+lOy5AydrcAwH7oJCYXMY6lLQ75yk7USirDclc56LKQ9z2mHq6ZHFdKQU23U3P9kSrDNP5jy93PGJ7KtS76bN/RXoQ==;3:BUuq1BFIMU2ZntHdlSdsUu3TwI8LMGwrbnAtivAnPbx/EUHpb5lwcuug5GJJcEe39u0usdKs1tfxUtAMc4kjv0wpVSnOtSAL93EbF9xhocaNrq/66N83/6UGl6BkgM0tS+chTOQq/e2exSho0Gn8wA==;25:jLpsZFlmmEkUE5+tt27wn16PGDRmj4nwitqNazugywMwmSmhaNnERNnsbEjfFatZAVhBmEvwtfTHyQuhKAoNzuuicRjIIMqUNBq11nfcJfRfOOnp1HXTzNsvsrABWcvCoUR1wdMEmikbvOw+/QZ4Z47TAjZti7vQIKEG0HET/q4znysliRnKTyY1sWq+XI/fpQYElZWFIyCv1kO3A0nYMUiZIyO0gIhQM8BPdOSg8RhJyOQo19bVxZmS6n3cQZhkexI9HfXrdq2vMmK/0173wI/AEAkexG01ZQ8fjXStUwXB8La9GWrGNsGsNHwQ2gQK5Ai6kHnuIxwWhUiQuJKtq4KljN2CulvyxIPZ9zA5aZx431Bp/yZ5yHbYnJh/nD3TQcZ/YUQo4EHnF1R95CpZASAjgH8LdgrM3a2pZdOcs3yYCY0mPZ4f8xnoZ3jtgZG3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1735; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;31:9T7SB0NKEvBD5QfiSUZIVEut3W8DOwlm2n9CRMEwZnqvFx3TVZokPCDVcsVkZ4YJrwSx+bwbJDA4ASRuxu2IAbUcMMal9v5KB9PpXPfyLkC2YjI0ZP3YErCFnycLiqC0CGFuuoBlZK3zMLMSIdP3mWyNLdUMNrD2TfFquEv09h1rPp2czB1aMc+Me8ffKWsPEsznZSHSTs92fRraGXZMzziW9xAkmnullAQOm7oN28PX5C8uLkWs1y/CJObm6e0h;4:IVuz5WDcZN0TWhsQrwy1WxYXYHA/BwD3LnHVm4uxP4pd/oE2s4GhCA5nn90lNGvb8D7kClbP0Hic0Ryob4dH8bBwcYjJEGStHQ2pxf2VWFLtYu0HnN32NfEdvaAJzdXmPZiK1z3OHhcJ0gmwcU+gENEkk0j8/xIGk95Iep4kcmsb9Xj/htSltK5gp3aW1Tg1P81GQ8LnnrvJ0feR59vs/oqYx0AsiDUTmwnoPAmRAjV2RMwul8HrWxNxV3D3BtAWYEoNfig2n8NRdTAjhNjutAUoybRPKfyVGzaTWXGOOpFqGAKUcZT5s0QJdghkySzKORdl6b/6Nw705n/6TKYOZblqXGmVtSJs60zfu1IPkNIRkKZaNttnU/+ADLt3+m0P9oJOOhiPySjZvY4pzANvucopcu55sxVk/70iS8qHDzcKbE71GD6cxf4Ur+VsRVEwI3Z2538NXURHhC/MRidEZvACfDfRySI5FZsXpLtXywSN7abKaexMozaXPvxbKVeDvBmsDZwCQ+JXyfaT35z3lw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(65623756079841)(788757137089); 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:VzgEXKmOJSPwcDkVPOuYcbOHdg2tKl/CE8n0e9K?= =?us-ascii?Q?hDIG8LghIWJFddcR0HX9EIa9rLfl0P+yBGM8I+8AuY/tG2ZIzXNCHW5ly3Qc?= =?us-ascii?Q?Vj4sOxXNPs0z1CQiGEC21n/kBLXCxTE/DU3bl3aNEt8yyqZprOC0gYuPzijo?= =?us-ascii?Q?8tp38cqyGhOYfPnDy7g/KsYXnoSF83iUf9FlmVfMzALMrUeCPoGc8lM4A0V+?= =?us-ascii?Q?912UgmoeAA8Y1cfx8mEEAjsBV0m7Vh+t/+vl7ByJ+h3kwwXegQsWHvlpKqOk?= =?us-ascii?Q?1S8Nakdd6kr5tDmbOnzra98HH253cg7O9ydV4neCgCy9tyhZLECooQ0dsZ3u?= =?us-ascii?Q?Q+f17alwMsMKgHq3GaHNcEnANDhIaEW/j8OXSJC6AQWHddXxdA09Us/lQfbp?= =?us-ascii?Q?AD9Q3stzvf3sGl06uoAfPfglptdJfDdMkU6BrmluIlbJK3UlovZgZ+vnJjK1?= =?us-ascii?Q?HJhBXu4wxT+olq7lcTPWLq8e6v4QrEK4cP3X7IbAsRNfM6JEESBBHTVCwCTX?= =?us-ascii?Q?1FnBl0uZMjmmDiqdK1DKrCjIX01I0ff1Q5OHNoZC2gt47YTIA23GtxMALtlb?= =?us-ascii?Q?lnASrfarqlF6nXF3Le2XNKGt85A+363Q9iWTdZupo+lCPoo7BRD+gV+pL8x+?= =?us-ascii?Q?LjgOqXOZbuesu+XNMuixYcg+2cHyo9R/J/MOetj4JPbCeQ44K8PkFj3I3ndc?= =?us-ascii?Q?9jPWcoOB5L10jQe2YER7ZlhXxCDVUrTAc0wLusVvRnKR4ZY7tuDl1pvc5pdM?= =?us-ascii?Q?LYMzj8agSRpeYOBl81hA/8vbqB7tz3qcjKayKNvMRYAeZ8CotdvfNphV07ze?= =?us-ascii?Q?ZFgtQXp2Qr/jk6YGptMXw19jyGEIE2d/NIw0QkNS0N81An3jv36uOh9ZaI0y?= =?us-ascii?Q?0WIEzYmCB6dh5ZI7f/QNYdg7MXmCRTUF/1UwEFmtIXiG1ikJyD5SuP9Xe96c?= =?us-ascii?Q?aXhiVmI5gbxDQwD7yonspJ06EQEzTI4zzFsYjozdRKX8E4yBFo5OJTwtRopn?= =?us-ascii?Q?tbA922BPTpIr+R7tFD44idXHGAzOfMgfKvk6yTdmA7/WsJdWo1PBP7zZGa7J?= =?us-ascii?Q?BkNdcjNJ+H6rq0aimx00ArRrAL9sNTZ6C7jugOrSHy7/DxGwhi9J3TOmMgQW?= =?us-ascii?Q?Z8/9B4OWEeK0iuW2uWj+1NoYxum4mZ6n39gWcAjZpiHl9v0iUrjocDOCsIQq?= =?us-ascii?Q?yAuok8KD8plCmUw0=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;6:OhlMFA2v+jqDb887G8knr5u65svsmqLskVdaOq3qtnO4EiYTjYA8Sxwf0FzOTwiHhS8L4JrrQYXxz+RkKqi1cQRR9bZnuwBBmRkCWwbuDtmFqGB7HoR9ZHaXxUhb/lulOUhEnWSrlhmfef/uNJ7iEublD7MLmKKeCUNvMqMDtpPj7g/Mh1PgJPykEGrT5Jj+16KaVfEYihlYaoRiYkobi0ZOAfBVLPgA0LirZCfifLeyXardP+YQXVXJRoAc9kRO6+orvt9ELzsFKFVzuX+K0GGoWG6N++s6lz+58pUaps+wcxnvgrqHkLvpY7spYK0Ur7eM9BzD/CRpWkB60GJraw==;5:rmpbx90HH0XDtBTUk3eQouxSM3JXNShNhU5vuyK45o+Ux3rr5Yg606JD4OuzRIxczv00FT0WWn4VyKN6tLlpSkh66RgwBw8x00jlM8sYn4nEXUtSCbc5m+M1cmTPa45BZxfUYkZnJ5KRoiInyP5o4w==;24:h2RLSdYYluiQ12ev/JWsDcd5HFp3Nlnup0MFwX9eoX+f5CWXoGM/qU8pOhe9BAKaH1j9p3eGV+Q4UYPw323++d+oq0XM0WJlxIEQ8yEpHOw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;7:dfyMJIXcHxCh1kQRu7YZ0kGONpXSdd3PIH+JxS3TAHGKoJjm7CvnCW5E674JmeCLWxQNDl/H3x4Hzna7zcJkTgQgyezqoUXYeEVoMBUhMUyqiUA/EW89/AfvIEr4yD1BiR9QnPNNSNuW7CTPHEOgH4Kq7892BqLlIghspW/PVRlnMQvkrh/lIpJ5n8ReB/sIwq4Wp5/pkbt51fa/9cWYMyS09hJ8DJjGYbs+/TDbcUpT9HD9/Df3YgaDoXSRchZlJHDAgMyL+822kFID479BxFD/0TTmhrRmdFxDCxGmXEark33yMcIuuKO/mKLOlsjnIjXD0eu+cHJPEhH5BTDlAOtb9gNPB5VBgIi/heWWOOg=;20:w5K0YnQA7iCtzmGarsJDE+eLzXj7L3RBh0a/UzzrsauLjYWuo1eOHxEE9GhBm02jM+/ET5fWFrKm3wfQO4zDPLIK8XnopMBsbjeluhWQiTfDZzxcQMVh6HXb3LcpN/AHnphpMZDcK7ECNcqes65lfqwoeCC1AnzNBWy/i3gxARw= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2016 17:11:52.5897 (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: 4360 Lines: 130 This will allow to handle vDSO vma like special_mapping, that has it's name and hooks. Needed for mremap hook, which will replace arch_mremap helper, also for removing arch_vma_name. 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 | 19 +++++++++++-------- arch/powerpc/kernel/vdso_common.c | 8 ++++++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index e68601ffc9ad..9ee3fd65c6e9 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -51,7 +51,7 @@ #define VDSO_ALIGNMENT (1 << 16) static unsigned int vdso32_pages; -static struct page **vdso32_pagelist; +static struct vm_special_mapping vdso32_mapping; unsigned long vdso32_sigtramp; unsigned long vdso32_rt_sigtramp; @@ -64,7 +64,7 @@ static void *vdso32_kbase; extern char vdso64_start, vdso64_end; static void *vdso64_kbase = &vdso64_start; static unsigned int vdso64_pages; -static struct page **vdso64_pagelist; +static struct vm_special_mapping vdso64_mapping; unsigned long vdso64_rt_sigtramp; #endif /* CONFIG_PPC64 */ @@ -143,10 +143,11 @@ struct lib64_elfinfo unsigned long text; }; -static int map_vdso(struct page **vdso_pagelist, unsigned long vdso_pages, +static int map_vdso(struct vm_special_mapping *vsm, unsigned long vdso_pages, unsigned long vdso_base) { struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; int ret = 0; mm->context.vdso_base = 0; @@ -198,12 +199,14 @@ static int map_vdso(struct page **vdso_pagelist, unsigned long vdso_pages, * It's fine to use that for setting breakpoints in the vDSO code * pages though. */ - ret = install_special_mapping(mm, vdso_base, vdso_pages << PAGE_SHIFT, + vma = _install_special_mapping(mm, vdso_base, vdso_pages << PAGE_SHIFT, VM_READ|VM_EXEC| VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC, - vdso_pagelist); - if (ret) + vsm); + if (IS_ERR(vma)) { + ret = PTR_ERR(vma); current->mm->context.vdso_base = 0; + } out_up_mmap_sem: up_write(&mm->mmap_sem); @@ -220,7 +223,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) return 0; if (is_32bit_task()) - return map_vdso(vdso32_pagelist, vdso32_pages, VDSO32_MBASE); + return map_vdso(&vdso32_mapping, vdso32_pages, VDSO32_MBASE); #ifdef CONFIG_PPC64 else /* @@ -228,7 +231,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) * 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); + return map_vdso(&vdso64_mapping, vdso64_pages, 0); #endif WARN_ONCE(1, "task is not 32-bit on non PPC64 kernel"); return -1; diff --git a/arch/powerpc/kernel/vdso_common.c b/arch/powerpc/kernel/vdso_common.c index c97c30606b3f..047f6b8b230f 100644 --- a/arch/powerpc/kernel/vdso_common.c +++ b/arch/powerpc/kernel/vdso_common.c @@ -14,7 +14,7 @@ #define VDSO_LBASE CONCAT3(VDSO, BITS, _LBASE) #define vdso_kbase CONCAT3(vdso, BITS, _kbase) #define vdso_pages CONCAT3(vdso, BITS, _pages) -#define vdso_pagelist CONCAT3(vdso, BITS, _pagelist) +#define vdso_mapping CONCAT3(vdso, BITS, _mapping) #undef pr_fmt #define pr_fmt(fmt) "vDSO" __stringify(BITS) ": " fmt @@ -207,6 +207,7 @@ static __init int vdso_setup(struct lib_elfinfo *v) static __init void init_vdso_pagelist(void) { int i; + struct page **vdso_pagelist; /* Make sure pages are in the correct state */ vdso_pagelist = kzalloc(sizeof(struct page *) * (vdso_pages + 2), @@ -221,6 +222,9 @@ static __init void init_vdso_pagelist(void) } vdso_pagelist[i++] = virt_to_page(vdso_data); vdso_pagelist[i] = NULL; + + vdso_mapping.pages = vdso_pagelist; + vdso_mapping.name = "[vdso]"; } #undef find_section @@ -236,7 +240,7 @@ static __init void init_vdso_pagelist(void) #undef VDSO_LBASE #undef vdso_kbase #undef vdso_pages -#undef vdso_pagelist +#undef vdso_mapping #undef lib_elfinfo #undef BITS #undef _CONCAT3 -- 2.10.1