Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1951933AbdDYRX6 (ORCPT ); Tue, 25 Apr 2017 13:23:58 -0400 Received: from mail-eopbgr10128.outbound.protection.outlook.com ([40.107.1.128]:4960 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1951857AbdDYRXe (ORCPT ); Tue, 25 Apr 2017 13:23:34 -0400 Authentication-Results: virtuozzo.com; dkim=none (message not signed) header.d=none;virtuozzo.com; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCH] ARM/shmem: Drop page coloring align for non-VIPT CPUs To: Russell King , Will Deacon CC: , <0x7f454c46@gmail.com>, References: <20170414100953.4703-1-dsafonov@virtuozzo.com> From: Dmitry Safonov Message-ID: <571024bf-892d-4d08-dd9e-654b1e28c23e@virtuozzo.com> Date: Tue, 25 Apr 2017 20:19:21 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 MIME-Version: 1.0 In-Reply-To: <20170414100953.4703-1-dsafonov@virtuozzo.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: VI1PR06CA0001.eurprd06.prod.outlook.com (10.162.116.139) To AM5PR0801MB1729.eurprd08.prod.outlook.com (10.169.247.7) X-MS-Office365-Filtering-Correlation-Id: 4059ccc8-8e86-4772-c4eb-08d48bffcb55 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AM5PR0801MB1729; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;3:yWIwjKlelCShU2p648sgxmRtfhlSkpA0TBvlmTbIcLhRXWnVsQcttfo73GZIkMIK50O2AhraiUb6nJL+IgteWhM7b86Sf87NdSB0Bmdkn160xTX8GA2lxjLksxXUqhLOZSwuWZaP+jL8zB0OH2Pb16GQuDSEcRkUrKFdesfQnCqdiEhtWtGE+p+ND+JRqdn7fyZK1FJy5pILskoeQfRxLgwdJ+2vwy2XSnWJLORTZhhUr60ZQaAi+Sjlo+UfqyRTs7Wkm/cxrW5kfBoQ4YZ6FZp1kWgVMDu5Bl8ONKo7Z9eH9+McfAG+Q7tx8fPHmjUU8pFHgiqp4QnA9cLrHUFcWQ==;25:mOTpFP275QJBSbjj8s4dNnb2vnLLMIXGDDK7Z0rPLuQkROWzw/z98oUH5t27rruYWpecSEeoV3sKZqytph1c3QCsdyEH6f2U+9KABtuYAlmkO6gAghBrpybo1mTDOROM1eTM/7rrG8NDXqWJZ8yZ66yC7E9esH16gJxaWcNHHIA5sg0QmC8rpUyeOKGjxhApEOfzy2b4wM1cvcfjCSWsHM6PpeNsxiyT1qyLbsz8cY4dFGZipvuzYqVKICaxsc6XldIVV+yCgISGY9e0hB7L57VN7+3UahhTTji4UBOw3b/ZG9TXOiTQFbTy7YX4gbrl6nNxakOF86A+llG+7mj9iezAw9u7B6LWyTQS4XqH5XRj6P/AblFOd8y3a+xwvxs3ensKwFpCqWduxfClaK+mM85ZBxORDTfBMpEO51kNh+dNPtyci9Rg1oxLoQiSQzAvOnJ2E/Vmq7pS2DrS9N/adQ== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;31:Mlm/PF8Ak+8w5kY+gFZFJKBbjyneA21J+il7i2whBiacZbJTUQ+eop/6w83HS+aomLo3etZ0KhQTMeok1zkSGpfLN0iZI+/ux8tZksMAngZGBTB3y/l9wbfPOMM0JP9EGibXXQw/2CL9XLqd8xF5iopYHfYQAp9uYhHbYVYd11ONKvI+NrA7szJ89ShJ5aYyySdZswrzReQ4rd5BWC6WyhMjfkZL/W9Q6QJDIFeWYXE=;20:ciFp8qRlMsZYEMb7zWybyZ0nhY6JfDLZc7buiT3i49g0GB7Z1fSMZt5rMbNDma6UoZ52cxZ14vG4mudNCEiMKRJG1adQAR7ESeD8ckscpjq04IGmEgIqoIvI3fehzsVEqHvfaKvoh394Tst8bokHmDWLjHXVFlymXhXb9Up9koKWxd6cN+UxzzOmBabIjl24naVR/+oK/88N8Dh9xOrICIneVFJxCHURectrIxNphlqVHXUOwscapSDXx8OfuslA6SlgvBaxH+YrU1WjMvlYTJZ77r93fjkhz+YnidN8zgB+rzxXvj9HXNNo9KtUx190UYsMaUFayOVqpZjJKipSxOOXKplUHen4K+2jfNKPccsEzidng85lbBtsKsSSe8xEvjjAHLKvdmMu4hCwigvRT/dVW5aOji3ZJAavDY08sTc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(258649278758335); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(6041248)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(6072148);SRVR:AM5PR0801MB1729;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1729; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;4:JowvYM6nawp50guapAnzw2S/slbw0Bq5GW64ojn4qCHV8hR2H5fgEIUwPctMZsju4YbpnzTNpwce3vGumudxC64ixT/HsXSZZUr81L8omrzEJzHBPbN+IcFDz3AGW6ovJFvv4qPgW/WomFqAwAhbPoES4ubqnPltlIwf8wYwpfXEKtHQxuMYh15ht98Li6Ii4XbxcpZYipxx8/So/yvpmRas1rHumdt1IYVAnSykS8wfG/Vwd4NYWj/kovItL+Z6e+hw6a/rgylZai2JCdzKcmFegAqYgd9hBFeWjvE1q0nFFun3wz2XzqdcBzJ9vTDyfBjts438xBOGXPve5NFivngWe6uQcr+v4B9qOQLzd1BsjyRkesgKYLAxwzkFsixsvm59xP8sq0tXB+akUAVtS6QwI8Ru8agtSqYpS59kHMERwJJO19woL4W/SkZEbk9vH4wobRkMoXNeb+od6X2t0+A/NbK3eqrN989XV7+aN5RmSi/kayllcAYyQxJIfnyG50COxX0QL5BLiBX0GhuMk+/XtsAeH05eqypU9pKU86C665atUD/aDNwfgr99IqD8lehfm0akVM88wruDHNAEw8oFXFytEaQFibTF35VJp1tCFr7AjWx2Cxq9h9cBSyHmFX1lk9nfFL+QP5AV+CJ4My9vIaonfnWC1/gpLOQlImCwejWZNSHoGqYjZJW0JvxCmdpCG8pOx+cEHPueOUYUqU0OURTVvf7S7oKyt09PcDJTn08wL7ij6T939p1Zh7IjU//6HH7O84gjmWpthFhw8rLd89kDVmtuIQ+GvDm0Pn0= X-Forefront-PRVS: 0288CD37D9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39410400002)(39400400002)(39840400002)(39450400003)(377454003)(24454002)(6666003)(229853002)(5660300001)(6116002)(4326008)(3846002)(76176999)(50986999)(54356999)(2906002)(2950100002)(65826007)(83506001)(53936002)(77096006)(5890100001)(54906002)(6486002)(6306002)(90366009)(7736002)(36756003)(81166006)(305945005)(8676002)(189998001)(31696002)(38730400002)(23676002)(50466002)(6246003)(966004)(53546009)(66066001)(230700001)(47776003)(65956001)(31686004)(86362001)(42186005)(64126003)(4001350100001)(25786009)(33646002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1729;H:[172.16.24.230];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjE3Mjk7MjM6VzB0eFJ5ekFKaUxhT1ZHanRMSjlCckd5?= =?utf-8?B?T0Z0eU1DNk05VjhXTW0veGdqbTNXV09OMHBZaVUyNDlaWHRMNmcxVXhCVzZp?= =?utf-8?B?WXZpR1FSSkY2TGQvd3ZEZERCUDV6cWVaNDJDU2QyTVA4NFJwUTgwRFA0WFRP?= =?utf-8?B?aGc2VjB3dm1CL25LVURGaUZHWWF0Qy9PTGMwME5qbDgzZldTbXZhajY3cHVl?= =?utf-8?B?TTN2QkwxSmJBeDNvanNqTW02bDFCWjJJOEFkN1pMZStWRDdVN0RVUFVldENE?= =?utf-8?B?NjM0d3I4am5WOUJGR3RmWTNnd2dML0VoZ0FLeFVYM1NFdXhocHZGOXVIR21z?= =?utf-8?B?cHNJQ1hEZ3B0VDRqRHlOeGFuNjNQcEY5eVZ0ZHEvek00bFhXZVpoUEkyeVJo?= =?utf-8?B?dzhHYktGbEhEYTFJMHZld3NDNlhrUGNUbXZJbkZ2QU53MElkRzFRNExXL0RV?= =?utf-8?B?SzkwbEwzTlZlZmYzNTc4MmpoL0xUbFpLOGxMWVhnUWsrRDNiR1E0cW8wTDNa?= =?utf-8?B?eEdCc3RsNkYxTTkwckVyVmdVSmNWUUVSRExVOWdJaUhWTytTTGN4NS9VVEk3?= =?utf-8?B?Z3ovbDRWU3J6OHBjVzh1WHpiVVlpc0Fob1NHdG1qNE12ZUF2eGZsTFFmRExR?= =?utf-8?B?Wmc0My91UUhpZlBFT3ZSTzlqSWpRdC9xeXB1ZmpIbzBWeU5kU0o3K2QwT2lN?= =?utf-8?B?U1lLVGdKTjQ2dVRySjRlUTRFLzl6bUhVSzZ0aW43cXAvTHJpRnJzZzJZdmJI?= =?utf-8?B?RlJEZWsrUmJTZGxUaFRxLy9IWXVLWVpFWVBrUWYwVWhNU0xsZEhMSk0yRUhL?= =?utf-8?B?UExFRi9Gb2xoMVovWTdYSnJVYXdTcm1HS0FLcWhwdkNVR2wzNy9CeUdhcEMy?= =?utf-8?B?QkE2RWttUHo3SWNYZjNwYW52amk4R2psMEpsZ2NoYlhlQytCM21EdWVpU1ls?= =?utf-8?B?MnpNdVZobENRWEFBRkMvVEdUTDdWU3Z2dm5GK294V3o3empjMlMyVzBERGts?= =?utf-8?B?OFNHUWlOQWZlRC9BK3FLc0dsblZ0NlduMFpGTjhrZTNMTzNGV0ZhTmxwb0ls?= =?utf-8?B?K3JKRWlEMFRvaFltUmRIRnlTbU5QcytaaHlObllqN0h1NzdNVzRYZHgweTZ5?= =?utf-8?B?eC81dW5LeFd5QXB4TVRISnIzR2ZESFBTanVuNGpSWXh1YnlUMHdvenoxVFFa?= =?utf-8?B?SDhoaml3eVVLK1pRVWRoYVIyQXNmUjNmaEwyRmowb29kMWswdURkMlo3N0FY?= =?utf-8?B?dndTT2lDSjRhOVlURVVBN0JmZWhvSTVObVJCM0VIQklrc25SdzlPUlljME9m?= =?utf-8?B?SURkc0Y1c3VIckhldzVFbWR2Rk1MOTJQWmRwMklzNm5UZmN5WSswTXQxR3BZ?= =?utf-8?B?bHlxUnliQjB6VjlQNnJNUmpyNWZQRGR2QUd2Yk4wNTJLQkFFL1lidHpWNXAy?= =?utf-8?B?NHFHV2Faalp4NE5oNXNSVmtENkxjTUh5NHdWL1E1RFd3dk1laTZjbHhWeWVh?= =?utf-8?B?bG1Nanl0elI5WWJHU0d1dnNXbXVCcW05RXNYaG5sUkhQMkovcldEcmhKS3lB?= =?utf-8?B?N3orK0VYL0xaSlZaSXlraXp5Ni9XMTExaDJVYWRQN08wYVptOWVBR2RRREMy?= =?utf-8?B?aDFqLzBPSi9FbWk5OXVBeVZvakNoT1Vab2FNL1JvdXdkbTlaQ0ZpSlV3N1Vh?= =?utf-8?B?WEFrcWJ4WHY3Rjd3dDl0NHdIbUpFZm95VUY2WUJKU3hiSG01aWdVelJaRVEr?= =?utf-8?B?cnJVMGFuNGdTWloxMzFqaVpnPT0=?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;6:gw8ip77CSgDREjqYpu48FjcNHZsBzcPsZ0NFAuZuRGsAsvSxpDIRoMJlBHYjMxDXV0/10wtoWHWM2kdpmi1KSbJt3KCy1TboN/Rk9xaBcs06LwXPO1apKvwhGniPMPQ/Dq6IvSSgyary1feBmeBR75P599RsB1Jqe72IjvaMk5aAd2jUoH5uTZUi2mV6O9FqVwFQgAfltc84QL3MCE6ul35TYiZ+5tVIL8yjzKtanRTBeY+cQx1M74SguL2269KeTrI7pMeiPymsX4jHxeFab1eA7oSsQMs0uRglDTOEfCzk8xXF/Z9T9B2D2bVxSGIZkqnY5AsZFUpgejIfx/UhlwQn74TEs+Ao8ekbqVT5r+ENqMhhRDBgrmxX42RpDulz+0lxUwzzSeDLgauCfd/y7wrjZE/baP9Ww6//JYqglp7FVWv774iTrY1FfCZ06PCkkdW0NdQZTMhl2X9jQM6cBPVhyy1b9x+l8XpgU1k6SVmDy1RFTb2PVV9f7htbLu/Udb86Qti4WKlk37R6BFsNrg==;5:eqDR1YhZaYJIzCwsMS4qKXtMHUA/c9TQkO+8GAEW5/5hM6fl0DIbbBqiVWzm/i/EumHy+DeX/ocCPgNJ5bkZ3F5t7xFKDwrkaghHQn/+2zttE76UJfUGmp6yzeV/D89A0KTVPaWnU97fbkaI4WqDdQ==;24:HfnrQYohHdey3lJi9LCJXX0x3gRd0Tdhc5PeEmKdRI2F3NCaCKMB9dg3QzkbaSO3Y4rHAbuVCJd3LwhNKTlkTE6zPqZU+B4DEOaedFan9/8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;7:SaK6EA9Oky6pQ8Ncj74nt/VSw+arGx+6rIue4pEdQ7VxnuL3p+Guc1V1hr8be17go0MmRyIDmcE+AO96pzYMD0CtrOz60uEA6E0bcJGbFH4YV5mVUTNlRR+ILTRliLnSwPyKKzsBSF+jaxSekJMiIJLX0CZKgJWWJpqJniwMqeZ18QoIpiSZzgiL0AY2LTy3jYWScbsY4WYbBPR0XYKGAfgnFAgGei5S2ah1zmlb0Ig8I78g2rHDEFD+b0DdnD6kS928qkPK/C2RoTXEZLUgxVpY5ICUMFQWhkNOhEbAtGK4QjDmT1Kw5Q0Cqs1xIXMNWCkG9Stabt9hgSCKR1ySrw==;20:W1PLBX8mRGFNQkQXS8a6QgIFANB6CkgK6OwQuJCH55SokLM4Y+Zjs++H1l1IaGIGeBb5jNLUidupRJjTtlz7sfPsGn1c0Qem29fVOuElDLeQJmJFy51+b/h0OV5eJ1KIHIXLUDOi6QR+EYkgpV1K79DhThmbCndrOihQkpiRwBw= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2017 17:23:30.2823 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1729 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4240 Lines: 118 On 04/14/2017 01:09 PM, Dmitry Safonov wrote: > On ARMv6 CPUs with VIPT caches there are aliasing issues: if two > different cache line indexes correspond to the same physical > address, then changes made to one of the alias might be lost > or they can overwrite each other. To overcome aliasing issues, > the align for shared mappings was introduced with: > > commit 4197692eef113eeb8e3e413cc70993a5e667e5b8 > Author: Russell King > Date: Wed Apr 28 22:22:33 2004 +0100 > > [ARM] Fix shared mmap()ings for ARM VIPT caches. > > This allows us to appropriately align shared mappings on VIPT caches > with aliasing issues. > > Which introduced 4 pages align with SHMLBA, which resulted in > unique physical address after any tag in cache (because two upper bits > corresponding to page address get unused in tags). > > As this workaround is not needed by non-VIPT caches (like most armv7 > CPUs which have PIPT caches), ARM mmap() code checks if cache is VIPT > aliasing for MAP_SHARED. > > The problem here is in shmat() syscall: > 1. if shmaddr is NULL then do_shmat() uses arch_get_unmapped_area() > to allocate shared mapping. > 2. if shmaddr is specified then do_shmat() checks that address has > SHMLBA alignment regardless to CPU cache aliasing. > > Which results on ARMv7 CPUs that shmat() with NULL shmaddr may return > non-SHMLBA aligned address (page-aligned), but shmat() with the same > address will fail. > > That is not critical issue for CRIU as after shmat() with NULL address, > we can mremap() resulted shmem to restore shared memory mappings on the > same address where they were on checkpointing. > But it's still worth fixing because we can't reliably tell from > userspace if the platform has VIPT cache, and so this mremap() > workaround is done with HUGE warning that restoring application, that > uses SHMBLA-unaligned shmem on ARMv6 CPU with VIPT cache may result > in data corruptions. > > I also changed SHMLBA build-time check to init-time WARN_ON(), as > it's not constant afterward. > > This is resend of the patch from discussion: > http://www.spinics.net/lists/arm-kernel/msg258870.html > > Cc: linux-arm-kernel@lists.infradead.org > Cc: Will Deacon > Cc: Russell King > Cc: Christopher Covington > Cc: Cyrill Gorcunov > Cc: Pavel Emelyanov > Suggested-by: Russell King > Signed-off-by: Dmitry Safonov > --- > arch/arm/include/asm/shmparam.h | 8 ++++---- > arch/arm/mm/copypage-v6.c | 5 +---- > 2 files changed, 5 insertions(+), 8 deletions(-) Ping? > > diff --git a/arch/arm/include/asm/shmparam.h b/arch/arm/include/asm/shmparam.h > index a5223b3a9bf9..6e1a72cbdf78 100644 > --- a/arch/arm/include/asm/shmparam.h > +++ b/arch/arm/include/asm/shmparam.h > @@ -1,16 +1,16 @@ > #ifndef _ASMARM_SHMPARAM_H > #define _ASMARM_SHMPARAM_H > > +#include > + > /* > * This should be the size of the virtually indexed cache/ways, > * or page size, whichever is greater since the cache aliases > * every size/ways bytes. > */ > -#define SHMLBA (4 * PAGE_SIZE) /* attach addr a multiple of this */ > +#define SHMLBA (cache_is_vipt_aliasing() ? 4 * PAGE_SIZE : PAGE_SIZE) > > -/* > - * Enforce SHMLBA in shmat > - */ > +/* Enforce SHMLBA in shmat */ > #define __ARCH_FORCE_SHMLBA > > #endif /* _ASMARM_SHMPARAM_H */ > diff --git a/arch/arm/mm/copypage-v6.c b/arch/arm/mm/copypage-v6.c > index 70423345da26..9b22c530e8b6 100644 > --- a/arch/arm/mm/copypage-v6.c > +++ b/arch/arm/mm/copypage-v6.c > @@ -20,10 +20,6 @@ > > #include "mm.h" > > -#if SHMLBA > 16384 > -#error FIX ME > -#endif > - > static DEFINE_RAW_SPINLOCK(v6_lock); > > /* > @@ -129,6 +125,7 @@ struct cpu_user_fns v6_user_fns __initdata = { > > static int __init v6_userpage_init(void) > { > + WARN_ON(SHMLBA > 16384); > if (cache_is_vipt_aliasing()) { > cpu_user.cpu_clear_user_highpage = v6_clear_user_highpage_aliasing; > cpu_user.cpu_copy_user_highpage = v6_copy_user_highpage_aliasing; > -- Dmitry