From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756602AbcEaVeU (ORCPT ); Tue, 31 May 2016 17:34:20 -0400 Received: from mail-am1on0100.outbound.protection.outlook.com ([157.56.112.100]:18709 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751341AbcEaVeS (ORCPT ); Tue, 31 May 2016 17:34:18 -0400 Authentication-Results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=mellanox.com; Subject: Re: [glibc] preadv/pwritev question To: Yury Norov References: <20160531200454.GA32677@yury-N73SV> CC: , , , , , From: Chris Metcalf Message-ID: Date: Tue, 31 May 2016 17:00:31 -0400 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 MIME-Version: 1.0 In-Reply-To: <20160531200454.GA32677@yury-N73SV> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [12.216.194.146] X-ClientProxiedBy: SN1PR0701CA0046.namprd07.prod.outlook.com (10.163.126.14) To HE1PR05MB1689.eurprd05.prod.outlook.com (10.169.119.155) X-MS-Office365-Filtering-Correlation-Id: 3f3f481d-9bdd-49bc-6b0d-08d38996a2f0 X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1689;2:u3uVFbHNV47NrkRMccdnXgSu1SvDJyC+G6lAph9a/p5y6vVFTFjRvdoi2mjYIG9X+IRCsaZqlHbJVsh79T8USqPS/T7YwU8OuVYv+N88SDe/CiqrSwq/gGPEs/uhRjJG8xvvamMm/907A4U7KUx9qH6WGoyFj5WYBWbX/va+v80C+IHWyDUPpiVo8Iua3JGQ;3:+pg4DtnIqAX1EZEifVqk//Lci7Q8KNfXQtYk5yV0Kqah2GNOiy2hWZhf9ceGTlwciepa7Fqyq8GhHzL7osawtCCrkCOayG/VTGDXBAlCEH6GzzMVg90s1DaY2TVKYb6T;25:Yh0FwkZquQmeHsg4wJ3yz6imqGTZof6y4cSPbKkgzvgrwrvMeUoVz454NgRG5wAOaLuDDwQCjh3y3a2kVMvb6WC15UEO64ZVK+KKOXM019jKHyJkTbuXGYhWTxvTfr4KbWP8E0xgIpePP1Jz7FLQQtZ6tMOjxmjGWE85RWmzWaGC4yd1a/HQ3bTkAPnCgOOL8wUKCamUUN47etWkkXlpKKvUQj0KeZmVSGHdR6xxXaaws3lTIQKbhMJ33uKQULY0sZCChV7rKS8NOXBh0+RJLLDVbAU2o2O5tIRtP9hvkdzrpSffffZiDpAjkaah8qPPcD0WWcYltYAtnHdBHPTIdP0Zadn6gyz+PmTyiUrJD9Px2WYJf7UVaFa1b7QTfDahoWAQTLFZPkQCASfl6L4sKcOgAX3cvfTAeG9yPghEq5k= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR05MB1689; X-MLNXRule-EZCH-Linux: Rule triggered X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1689;20:3SSIl5dcpMPV5O16P8AaHzp1mew/ziKo9N/Xa0XLsIx5AEC1x5xzww00CMFIY4n49CYE7tavv9KuImXbzQEXO1fiBThqWcYF2eLL1NRcZOePevFHObDRK1n6ttUNbQO/lGFuZzqZsiQoVMgq+dER68K9o2Xso/q2e/sg3lzyw+ormosjUkDOBC6C0oLRygqYO9DWa4UaP+mZEZb/ilWhMrmBzjhUf9ciOfxOURTilvIxDgyMeTk7BzW6QseXEjf8F3+2y4w6SZ0457v59gSvMKXllsBEjUIpsg2/SpDyEAM0zhybMeuP+vql6xsDQX3mT4u6ez4IIBLYYAfygbVk8C85c/PE8KUsPY+OiAYAmYHX0eAmNSjPntbFw/5tbLA9s2ZwFUNZMYWV//3KQyfJLJp2gWNNhc4eBuLtAxsFPyqFNQbASjvmzlvjrSZLl0IR7irdclfPx2Kl/6viKgqgU1JN/yCjTrlZZIUj5LzWfLHVhunznTLf3SyzZNf1LAFC;4:EL2qDUE0+zQRn/8/Joii3viuX4VqSMu+rDeVrC1uCpunLG1D/dIMRJSwrb9HqwFmhDpO7sfY8e1BMFkUV87AyPtZRXaE6/JBlTslFgB+1x3619zF2VggoZv7USBvI2FNJreE3vt8ABOmDD6+qybXKCg46IYYpA6l17sKTNFvb7fZMYrzmRPvOFtIvGE0AwLlpuD9AcPItc6Y160vkXl4DkztKciSkkAk5OukcrKjFIf+CQJIobdhGcmXLESECH+xr/9GC4yIe66/6pcruuvXcaTjTceDNnXzbISa/+AgKDShkk85/Iw2xxf1xwJ/XU2DROimJoGB3D8gfNoDdFSKMbgIAJ9khasvl0CmWPLjy0HQxIXduxJCE4Cr6HjE300b4Y/JpIMYs+cEFHRCOliYT6cvvlcMPdwaU0mPC7WtUiykqe4+Vjb7np6bhcI5FF+T X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(171992500451332); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:HE1PR05MB1689;BCL:0;PCL:0;RULEID:;SRVR:HE1PR05MB1689; X-Forefront-PRVS: 095972DF2F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(979002)(6009001)(6049001)(24454002)(377454003)(230700001)(3846002)(5004730100002)(6116002)(47776003)(33646002)(65806001)(65956001)(66066001)(4326007)(2906002)(586003)(5008740100001)(2950100001)(15975445007)(19580395003)(83506001)(23746002)(31696002)(36756003)(4001350100001)(76176999)(77096005)(50466002)(86362001)(54356999)(81166006)(8676002)(50986999)(64126003)(31686004)(92566002)(189998001)(42186005)(110136002)(65826006)(18886065003)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR05MB1689;H:[10.15.7.169];FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;HE1PR05MB1689;23:UUIsPWjGPsFLszgpjyo756YOV8J38FKbZIBss?= =?Windows-1252?Q?u8KjfTwdBnUEGTE5VYd3NdZdKE1Uf02DgPfwK56G10lRtq4LAKnokuSi?= =?Windows-1252?Q?VjDmLRRWLhZSoA8ZCPVnXhf7muZgiWbz2zwTkCpbrU0vcgs2FnmDbClf?= =?Windows-1252?Q?lv7LScFMSK3ZteeEi85rzew3Kj2ic64y1Xg0UsJ2WK5FXqEeqOUvi2yU?= =?Windows-1252?Q?mlaJQ/TbeqDP4aOeizHIRhjH7QZvgNipT4BWCgZjvSaV6daKAo3k1AHB?= =?Windows-1252?Q?8rVkrAQbK+llPhcYV/d/KjrdtCV1wcEPbx4Swmpi27jqgwp1/dWxmnHx?= =?Windows-1252?Q?7QOkg3EmCjxU7vCcBRqYDwZPUb+S8onsL7OqJtdrA+COjO17MlXJ79OZ?= =?Windows-1252?Q?YABymRIRe4hQdK/Fc5OAoNQSo+eVprjmUA7c2O4TmMNTOmBfSg0aGnh2?= =?Windows-1252?Q?hGdcZns31eifzEuPnU38bVVNGQRd9Z9As7nadVWFnZ2e9Vd4CQxDbpKa?= =?Windows-1252?Q?r9eksO+T0L7mcbvVUcljz/AxzDrQc0O1zSq6xtZArVh43N87tc9G2mjO?= =?Windows-1252?Q?4pczkJ1Dk2X7k0/2b7lnc/C+M1nWufBY3gSQBnWY1P1wLQ1SqiJNU3Jq?= =?Windows-1252?Q?XuA+0xTbchFXmqUzsWciEfTyKglUkUXopdZnekwfwo4eunrUoOGIXq+U?= =?Windows-1252?Q?T/SYqZxFUBK1vlzQXRA6jhrwPkJp4s9Mxf0NcRlXzaOGvtyO2OlqgHyP?= =?Windows-1252?Q?bBfX822w+dXgHyjcZKE8XNBx9W/LkRdHYcggOSIEC6Mm2qmy6+Qk3vK8?= =?Windows-1252?Q?/iiXt84PcL1JK5aWHPV9G1yPNSKP8otWHI5AFGXvErAmNoAYQkK2fRYF?= =?Windows-1252?Q?Jlhcd1tl7miDu9AkfE39QMLG0t1lbLv8YtLM9Knf00WLMXfIiSSJbeRu?= =?Windows-1252?Q?ia1VH1VTvN9DfvkVWy/PF2jEsY/eY2TG85bxRXPWI1Zfcrkg8en8Om5g?= =?Windows-1252?Q?Qspya+PnRFWR6uU/vdouz5TyHKC+rHHLEPgJgQXmLM+Qk1neIEHw9X60?= =?Windows-1252?Q?V831aDTwsfb+eJPw2twtC+/anhRrFcNEtaczpWrf0CFC9qg8ky0yqxw5?= =?Windows-1252?Q?gc7E5e/Gnm9MIrKllP3z0tS5jsEu+/lC/k1aKZlcFMUvI+puPvkFE9QD?= =?Windows-1252?Q?/kx1rNppjgB9PJqFXnUvi3r0cqfHIm8lneJlnFI3EPncqxuGhFCx+KFE?= =?Windows-1252?Q?hh1Ga2ivccT8TEaDJf0YiubqjjVIe8nR3HIOfX6mwN8sF1S70OTXcjed?= =?Windows-1252?Q?Ma2?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR05MB1689;5:H9MyWg71egH2RvefI2iz1BGNU9lZz/TrUPtHxuOAiAmqpMFBkcvFx4didWSAFfMyl8NIPkU5ajnFrx+n6HXJdhj7fs6Qu55A2R3RU9SaT2UkgMl6hZzZGup0hhn8gUsVExM8kpmkl2F/YmoB5WBlxg==;24:73BKiw+n9PPeDJGJEHR+omAzZpvmLssu1Q+pusPxr5sHpIyjTJnBCZ24SHyWstI0mY2ZS5PPQ9rn1eFAuoFLLgPaHYz9wVHWBGjR1jLOpMQ=;7:Q8RqF23LCNrPng+RAghbr9ua9gUXNrCEcSLnpdaaqNYqowMiWpod9i7yrQ6qAYZ4kcr9q3HK7g0eMCRBF6M7+gBZYHf4juq/RVVsrlgvNp+exmFbNDYUK6uYGS9YPAW1aurg7mUU/uWGpGMxBbSVvT3Idxr83Qy+WTyY7cLdYTM= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2016 21:00:44.3323 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB1689 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/31/2016 4:04 PM, Yury Norov wrote: > Hi Chris, > > In path a63c7fa18a (Add sysdeps/unix/sysv/linux/generic/.) you add > this: > +++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c > > [...] > > +static ssize_t > +do_preadv (int fd, const struct iovec *vector, int count, off_t > offset) > +{ > + assert (sizeof (offset) == 4); > + return INLINE_SYSCALL (preadv, __ALIGNMENT_COUNT (5, 6), fd, > + vector, count, __ALIGNMENT_ARG > + __LONG_LONG_PAIR (offset >> 31, offset)); > +} > + > > And this is the code that is picked up if I choose wordsize-32 for my > AARCH64/ILP32. So I have questions. > > 1. What is the assert for? We agreed that all new ABIs will be 64-bit > off_t only. > > I fixed it internally like this: > +#ifndef __OFF_T_MATCHES_OFF64_T > assert (sizeof (offset) == 4); > +#endif > > There is a bunch of similar assertions in glibc. > > 2. This one looks weird: > __LONG_LONG_PAIR (offset >> 31, offset)) > Why 31-bit offset? And why you don't mask 2nd argument? > Later in your patch I see this: > +static ssize_t > +do_preadv64 (int fd, const struct iovec *vector, int count, off64_t > offset) > > +{ > + return INLINE_SYSCALL (preadv, __ALIGNMENT_COUNT (5, 6), fd, > + vector, count, __ALIGNMENT_ARG > + __LONG_LONG_PAIR ((off_t) (offset >> 32), > + (off_t) (offset & 0xffffffff))); > +} > > And it looks correct to me. If 1st version is correct as well, I think > it should be commented. I did this work before x32 came out, so I tried to model it more closely on the existing x86 compat API. I agree that a 64-bit off_t model seems reasonable; however, the code does exactly what it does to match x86, namely preadv() takes a 32-bit offset, and preadv64() take a 64-bit offset. The assert() in preadv to force sizeof to be 4 is exactly why in that routine we use (offset >> 31, offset). Since we know offset fits in 32 bits, all we need to do is properly sign-extend it into 64 bits in the high register of the pair, which is what (offset >> 31) does - you end up with only 0 or -1, thus sign-extending the 32-bit signed off_t. Then in preadv64() we actually need to break apart the 64-bit offset into a high 32 bits and a low 32 bits, which is what (offset >> 32, offset & 0xffffffff) does. For a 64-bit off_t you will want to not compile preadv.c at all, and instead make __libc_preadv() and friends be aliases of __libc_preadv64(). -- Chris Metcalf, Mellanox Technologies http://www.mellanox.com