Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1952242AbdDYR4X (ORCPT ); Tue, 25 Apr 2017 13:56:23 -0400 Received: from mail-ve1eur01on0100.outbound.protection.outlook.com ([104.47.1.100]:26848 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1947650AbdDYR4O (ORCPT ); Tue, 25 Apr 2017 13:56:14 -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 - ARM Linux CC: Will Deacon , , <0x7f454c46@gmail.com>, References: <20170414100953.4703-1-dsafonov@virtuozzo.com> <571024bf-892d-4d08-dd9e-654b1e28c23e@virtuozzo.com> <20170425173546.GS17774@n2100.armlinux.org.uk> From: Dmitry Safonov Message-ID: Date: Tue, 25 Apr 2017 20:51:58 +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: <20170425173546.GS17774@n2100.armlinux.org.uk> 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: HE1PR09CA0069.eurprd09.prod.outlook.com (10.174.50.141) To HE1PR0801MB1738.eurprd08.prod.outlook.com (10.168.149.150) X-MS-Office365-Filtering-Correlation-Id: 6e072f54-bb93-49e8-3f67-08d48c0458f8 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:HE1PR0801MB1738; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;3:K8VpWuXAXaYfwbl/VknYjTz0pW0hvkTvx3oiswXu7fR2FJyv7++dh7RPmZLww/wb3fefHa+zCtzqyJgNBfYEleif06RToPygvr/O+uf8njfyV5uJcPdJzWKRIXCcTeXpiWzg2Jq0nGyqCANZQTBkShHMSwUZ1PlC869h1V6YIkC65A5TvYilbsnC3VgnCNvwgPiFfMmZr7xmZWUI7rTvnHc7kgkhWc5SKYxkWXEVbPcJd9zzh2bct5BJjmDp0QcCXpCZVjGTeY/bAsl41jmvZRVgii4v9zh3ZqQYUe9Hgk81lPyK4rJrgWOOw52biog1+nnM78I81JNs9LF60qU6LQ==;25:7PwGV77t0bqS3ZtuhNrinqby8ycdiIyhoMVIYOc1ldmak40KAGTuLW9LJZasFMg63/ELHFcTaLWooBzEFTBkOmHBW3Gg2bZvOGBAajo9HUEjKQssIr1C0nSTg/K+UHAhzm+IVP1WsVSGGQ7lbcnyrNF3sLIvrsMnjdzi9zVufVB0kAvOz0Vb40gXrtYLhOlze4exl8D/9n3XqcKEkb3xcPbQR+V6MqidbhJ5QGkxGufmi2uA6Bi9DQEKBtWRnShZwn4kbdJoKpNgsTdq9yAGOjP2IAZiTYG+X1EYi4P/X6NaeNMeRhKyhLrfAIFxpfyxOaHUPC4n+LrGusrRdvHZmZpoaY5nJvJTZHsP3eVY2KtOEPvmDD3FTYagwXLWL5GiCa3m0yvar8zFkXJBBAE083HYu0NERNtC8FRE7QB8FoGW7XErK2bQgLolUAN0zXO7smxEnjzL19fFv8QK5vJVcw== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;31:aXd+awHQeUnEP4u2qOJapeKoPCuf2g+VrO494K2aYvATmH0pTEcL+6CNpVo/lMqk7c4SjlKSg6pUle0MavE6DVzs5qp2odVUNm8lFmB4PRXu5BaUcmasRCUTJWR1z1srDSbmGJeWgKwXNktR6G4ga/mGgRjeo63Qa5vLKfpEUpcBQmVFNTz1Qki1UlCwoPd8fttJsADHkrLnTq9gglQGnxpN40rVRlGm5gUh8vsusxncA5MZm9Vf4t/EOeI9InNi4jPZF7rKGnsQcPB/u6Ju+w==;20:/wjGGKflEgEad5ZkdH6g65U6B2rJjI0jzB2Dc0Awy8HBXz7QDLwYLLjqsBIPiXU7/MIO3Fe/uwsSKSwVylxj8jhvaTYbfJhBRA1A8FVJifeBT7n3qqnVdtPRgOq4856wYAlzlg6N/F/62Z29dTso1If+e65RupatuclB20oEkcBLrWNAaW0JF83uKzlHw+qguVmWtkxwBv1Zdp84qbwlNLxWRjyOdRiE9eP2J5ZteRWFB1iG6w/RYIhx/1ohVNfe6AfzoOg5TCXLIGyqaeSW8O6/xXSnQtbh+vRS0iblosSotmFF8hDFikr+09Wwmmo3KKHy1YIoFubp2on69uE2LAuNdow0w+n7mu+L00aV59rqiDYmaMsX3cnz36OsRjGUP4mR7rzm0YbFNpmHLQZ7pQMM5aTLaJmGhhUAr8Egygg= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(10201501046)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:HE1PR0801MB1738;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1738; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;4:vSnW/xeCipTDi/R2dX6duTUXYrMVqzJXpZDC4zYG0E4FcYlT+TJKkVWuqUi0D8YunE/TI3od3jgN+GRjgEkjBmLwgSExX+HHwh2AmzYZ3iSJiROHa+jbympaZ34uaolWLxcTl8DV4EkpqqPUbD5oFRzwY7ZH+f4SCCWADVHPvMz7m2SoWvDq/wlXKa02NrMZex14YQdVfoccatz4uUoNkjvZUe1Z656sCrS5TJDrRe053M8ShAAIJS80X7LSBFP26Sg4L/zOftWFFd96r8q/v3+FYuOCxFlEiSRgutKhHXpUPSvTGOOYT7inJ/AOzi+VNq6rQl9PPuRVSaSvS/OWX7cjjomIJslJQxPJ6ph6tVMLyf8zB/5v5pDGNrJlUSVcFsgET2V8q9m6+XFYzfllNLQx5FtQtjNhivufFhQaYZX1hfxsv58+uFBOhnzp0U4MNvMK34DLbikoeHX49Fx53iGWq2hIj0uMnVjziov1dVtHvXMqRTnmIATpkt1gn7fjcp3KOqOJgetE5tEN3YNRElTF3Bc+DHhVbUG1ngxkEC/IIjzcEieq0c3u30nEGeNSw9XjoAtYFQyHNaJK7eq9aPTjTEHqQmlKixxSrwQr0E137TSbWSsAF+zfJB5LQaK8IHewLS8rTj9JeqDq+mu6qYnTQjhyUZKBEFWgqbGDEbUWl7yHr3S7ZktMSfA7JD9VR+fva1VUOv2R7yI2gIEpvmireOTVbk+CY3FhXqhb2so= X-Forefront-PRVS: 0288CD37D9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(51914003)(24454002)(377454003)(76104003)(65956001)(230700001)(47776003)(66066001)(42186005)(5660300001)(3846002)(31686004)(6116002)(7736002)(65826007)(305945005)(23676002)(36756003)(6666003)(6916009)(229853002)(2950100002)(50986999)(33646002)(8676002)(50466002)(54356999)(64126003)(2906002)(38730400002)(110136004)(76176999)(31696002)(81166006)(4326008)(83506001)(53546009)(25786009)(4001350100001)(189998001)(53936002)(6246003)(77096006)(6486002)(54906002)(90366009)(86362001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1738;H:[172.16.24.230];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjE3Mzg7MjM6UTNwS2x0emVmQyt1ZGV3NnI5T0RteE9l?= =?utf-8?B?QndXOHR3VjZjQnlqM1FTM1UydHFYQ1pycUtqRlpZbHRVOGpaSGhWV0ZoSFA4?= =?utf-8?B?Z25iQlI3ODF6WGlmMmxrbGhOaG5VcWhWTGU0YnJiakl6ck9DZm5GL0JXOXhl?= =?utf-8?B?NS9hajhDUHlKZUdkL250S2QweUlXc25HYXZVK2ZRcVFhUzJ1V0QzbDhudDlY?= =?utf-8?B?eU1uQ0dMeEZPV2lOdjZpaTJCc2xIYmxMMTlHWGR5cmVPbzlSWSsvTGdFUEVy?= =?utf-8?B?cFNBdFg1L3pneTFmcmYzck5lMEd4U1hRaTE5eHNwc2VwUGttay96UU9IR0Rh?= =?utf-8?B?TTQveWdDendyeHJHZk9FMVBRSjBPczg2VitMMmtTaGxScVRpcmlBdUgrcUZ0?= =?utf-8?B?ODhXcVVaTllKUktqdHB4SUdQRS9ycnFBWXRKZGNTV1R2aDRmU3RpaVhtMVUr?= =?utf-8?B?Yk5ObDYrZmJkQ2VBTnVzOWtGVXFxR2FHZU50VklXUHJ3WVdVV3VxcVBXbVRm?= =?utf-8?B?YWpwSS9IbHl5Zk50NEl5aWlJUEVIRFVZaXdKVTZzQ2M1UThHWXpjOWZEM2py?= =?utf-8?B?WE5qRjBEVi9GMGdoQ0p1bVVTRU9BUFhYRWo5OVZDV01XRGtNOXZoNkpHbWhz?= =?utf-8?B?eU9GeWt6MFhiaDFTdCt1S0tmK0MvcjNoZVRlbnM3WXBZOUhibjI2eVlxaFNw?= =?utf-8?B?UWdUVFhTNXF0cFMraXdlTUt3S0xVL0dRZXFGbDJNVkdrM2UxK2ZjN0k0YmE2?= =?utf-8?B?SWJ2aVpOZXhpZjlyZjRFWm5FdVo1Q2FnT0hMdUdNOWF6VDNEaXpFNG1LYTAw?= =?utf-8?B?OHFHNzRycnU4d3JQT2xDS2NsRTRFbXAwdGlwN0Z4VzhYVGViOGEvSTljcEli?= =?utf-8?B?U1RXejRZYTEwUk5DTERoZ1NYanNuK1V1aDlxeVNaMWhQY1N4SExMdWVpT3NJ?= =?utf-8?B?YjluUStML2JKUGhadXNvdVNmNkpLeXpwVk1wcGNtRnBTeFpCVVVmVW1vdVFq?= =?utf-8?B?SGVGYnEzVzhKY0ZTakhGaG5YK2dsaDhpSFJCS29aWHZuQkZVOWZ2dytVQk9Y?= =?utf-8?B?Ri9ob3I3cGJCeXgyNDdWeXZBMXpBRmp5WlJ0Z3o4UzhwTjdFZkdyRjNYazZp?= =?utf-8?B?WVFkRmhiY0h0d0Z5Wk51WDhIOEE2ZnR2V0RocHZXU0lVVy9RSVpFeS82bUtJ?= =?utf-8?B?NHNwOFRtWmZjWm5KZ3ZFRDNMempSTlJzRFE3QXFYdEZ6aEJ6M3FJemRKM0xa?= =?utf-8?B?bEZyMkJQM2c4QmpUODFBVGNXRThlRVFTSk5rNVhaQlpMOHNremNPS0djbSta?= =?utf-8?B?azJLcTAyVDRWOURoMjhFV0pLZ0Jqci9TUWZiZkczZnVDR1NkQzBCZmNGU2lh?= =?utf-8?B?cU9xbGdsRERWeVNXdGdvYmRibzhDRmlTNklUWXV0aTROWUp6Wnd3ekttMHJD?= =?utf-8?B?UnBpYjROTDQ0MzZhTUE5Y3RDRVNNQU8rd2M4a24zcTRlNTFvTFk1UXUrQSs2?= =?utf-8?B?WVBxMHk4VENKWHJDdlBKd2l6WkdoMlFNOE1VMnpYcTBzcGQvQm1BU0dPT001?= =?utf-8?B?YnV3ZkdEUUFWaGhiaUhPMzZCbkFrWmtxek5YNHhrYkRpREF3RzBVeVpxVElM?= =?utf-8?B?WkFHa1hUUkhZWGs5ZzF3eW5IUmJscUhJdk9vWGltT2UzWWVweUR1dUp5OW9u?= =?utf-8?B?RGI0Qyt3bzl6RENzK1lvUUtQcnpZcG9SaERZdFd1WE1XN1hSNEFPc2E0ekRh?= =?utf-8?Q?Bjapcdk7SSrWZ497Us8dTSv3sE3ivpcDl0gAkZY=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;6:Ur69Dgz4JAl4Xy0L3eW3HEeUDq0WiFaNcpTCOevEpvC7BuhqlyK0xMEbFWjhWlQJDm6JkjPRd9Z/UpuY7qlL3VQGohTa4W+nrr09lpg7t70H2I7mj5iI+lXbLvHQLttHa4B9YjN571vHT12H/n0RdMSu+owwoOcW61JFLGCHXOF51jNRe36MQixo5hqAEUXU4CJPvBdrJ4b77JR383/8aTbeMT8lHm/Q/oqiWeSe9eXCGBtglD3Vnt+M4GTC9tryumZItOit3LgGHtD7+JMbBDUhbTYTSEywXmbJozVyyd0zZBRY6zDnbijGVlwt24mYMtgVASddolvGHE0zZazGsZHFFiQCBK47JfmQEY81F2JwR5FZ6146RwpiY6M0pJxKN/IrQ2NKZBDMSneL03MkIx1YMpG9FxMUyGqKAS5aou+h9/QwQxRHyDYzvtu1cGt+Oq0i4Nsim2zdsnfVhxrX1MaUQYRGbm5LVOHd9JQpIMKW8KLtBtOfwDOMXrqRTN68yhXR1caD/n2X0w+KzbBCfw==;5:PEXIIsj46z5Bd3ZbhbQtj6y8hOebcWfh98sJLfzjwBvmF+RaY2g1MxkqwKqyqhhVdvCCeTmhmJLP9FHZSMZXgLn0A5+bT7Sbd6obpC+i8ICnBnQoEKxlYshJoAAI6qgcz+TNlZG4URGw8Qf2OmfhRUBdBdOCVsc9Be1p+AU+Jwc=;24:REmbWg/wHVSTdC/QInsBAfeCAc9+bJCkUJiMkpA0yxuvYZoTAtMjxWY1i65uVF9z40lk7OeRD4aEM0Ja8KoLhG61lqJxDBnHTXeUajhEd3E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;7:Ah5f3QptpWZ9rokrpAwSxbpH/1JwNZgQUdH6LpPjBhlnE8EV+TVWDE/GLbpIIErIrl/4VGFKmDGV8LheMy6ibSkKNRCcb8A2uJCettL1OnH7jOCPpeAUL2J7VabnziWXDzK1Q5h6BMSlfsLFrzy0/yr7k7R5WBkovwaUe9B5ySK0YclQDxa6lpYVLu+SUq0hg0MYvVekR210KIBEV8KCpyFw7OtCwwuCIITEcah1qTaJVd/8SuOnVmxFzWnMcPxLShX3KqgvvLk3seXtyRB2QhHzxIkoACbS7bdJ+BVX4F8+mr1ZpBrboNrzCfNoez67yG5dGwyQKXYZBWO2ZeusLQ==;20:IR41OwbWAkHZCV+OfeH0Nuprz0TUlGZCNBgI+riAG6PeHPkEaI4BgZbCMkSW80CiyvavfmaYUQwlY4CkrZGLPijdA3Sn9Ex3cp95lAVo4lfx4lMgANMNaYw+Ni11Qw2Ne4MKkrrTuCNYTt1Hxwm+5B4W0ONE528VVHf5dhwRkEA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2017 17:56:06.2511 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1738 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4967 Lines: 135 On 04/25/2017 08:35 PM, Russell King - ARM Linux wrote: > On Tue, Apr 25, 2017 at 08:19:21PM +0300, Dmitry Safonov wrote: >> 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, > > CRIU? Please try to keep use of acronyms to a minimum. Ok. > >>> 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. > > I'm not happy with this. SHMLBA is defined by POSIX to be a constant, > which means that if we want to have any kind of binary compatibility > between different architecture versions, SHMLBA must be constant across > all variants of the architecture. > > Making it dependent on the cache architecture means that userspace's > assumptions can be broken. Increasing it is not an issue (since SHMLBA > is defined to be the address multiple - an address that is aligned to > 4-page is also by definition aligned to 1-page.) So what I did back in > 2004 wasn't a problem. > > However, reducing it (as you're now suggesting) is - newly built programs > are built today with: > > #define SHMLBA (__getpagesize () << 2) > > so we must not allow the kernel to return addresses that violate that. > As I say, we can't reduce SHMLBA now. Thanks for the reply! Hmm, so what do you think if we align then shmat(smid, NULL, shmflg) allocations also? (with 0 == shmaddr) Something like below: --- >8 --- diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c index 2239fde10b80..ac52f066f47f 100644 --- a/arch/arm/mm/mmap.c +++ b/arch/arm/mm/mmap.c @@ -59,21 +59,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, struct mm_struct *mm = current->mm; struct vm_area_struct *vma; int do_align = 0; - int aliasing = cache_is_vipt_aliasing(); struct vm_unmapped_area_info info; - /* - * We only need to do colour alignment if either the I or D - * caches alias. - */ - if (aliasing) - do_align = filp || (flags & MAP_SHARED); + do_align = filp || (flags & MAP_SHARED); /* * We enforce the MAP_FIXED case. */ if (flags & MAP_FIXED) { - if (aliasing && flags & MAP_SHARED && + if (flags & MAP_SHARED && (addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1)) return -EINVAL; return addr; @@ -112,22 +106,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, struct mm_struct *mm = current->mm; unsigned long addr = addr0; int do_align = 0; - int aliasing = cache_is_vipt_aliasing(); struct vm_unmapped_area_info info; - /* - * We only need to do colour alignment if either the I or D - * caches alias. - */ - if (aliasing) - do_align = filp || (flags & MAP_SHARED); + do_align = filp || (flags & MAP_SHARED); /* requested length too big for entire address space */ if (len > TASK_SIZE) return -ENOMEM; if (flags & MAP_FIXED) { - if (aliasing && flags & MAP_SHARED && + if (flags & MAP_SHARED && (addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1)) return -EINVAL; return addr;