Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1111544pxb; Sat, 17 Apr 2021 07:01:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJBMYyJfVnsxredsw9q3BwvWnm5xkPZp/zY68Hfme6iIV4f9BU9VhQcvkiH5X0PAsN6svp X-Received: by 2002:a05:6402:154a:: with SMTP id p10mr12926767edx.77.1618668108639; Sat, 17 Apr 2021 07:01:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618668108; cv=none; d=google.com; s=arc-20160816; b=WtP181Uhz8wBN/cXyWq6pguuMi4/Ndjj1+mjgN3Kiz6eyB6v8TMqqdTYOKirgY9xyg giUhniTabRQnFv3pre4YCCKBhcC7fK3kw0ezCqygpi1em3uVPZz2fox6fFtAaP7QdsaF uByr3DUPiZ2qjS/Grr1WMp5r0J5fk5Z1w5a7XyBQFAMSM2AmRbwu7+w6cT4eL9KCrIJk VZfCxcUKn5OVyT8HQ1T+XBoN1BerJnD22+Qz/qGB6IhwBjDTqkyv2ufEmO/W5TySxnIK /NeScIMmtLBwCaAumKwt5LzbaWjLfe0sZCpc3dzU/PxtkVX+AYy5JPECR5CW4b2t5bjn 5zDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :mime-version:accept-language:in-reply-to:references:message-id:date :thread-index:thread-topic:subject:cc:to:from; bh=ebsACq1g+bbKO9egOeuxX8lnLhIUUU+r0ZilM7GFX5E=; b=ejBVvvP270MdV+Bjf5TR6hQ0xwvqAXW27Qa+OgmMghPBkFYeoep477s76Mwa3rky7E LX39sV2F6VEdKvGFbpR1bI5GY8BMN2fq1W2yJfyYaAyOHgn9flbm2GKdmZAGwQo4ELWi FYgjjl6pvK1pGP5C/V57Zx4/RGinKQ4rxXJU9cEM/tfpz9yLSslapOs6wAGJJcnf5yoi lb7foDJjbNvyCj1Z7gdQsHdnlrHSfKopBihG5LDIuJHW8POs7P0Bh0hbOxBuY6OetqvJ 2Q+cs5xMSPl0hft6cyJPCrcQ0LZ7aJDdseCO9Ye0d8h9LBRDIo3mVXOOuAO/1PZGnQxq 22jA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=aculab.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ga16si7595629ejc.102.2021.04.17.07.01.25; Sat, 17 Apr 2021 07:01:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=aculab.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236287AbhDQOAD convert rfc822-to-8bit (ORCPT + 99 others); Sat, 17 Apr 2021 10:00:03 -0400 Received: from eu-smtp-delivery-151.mimecast.com ([185.58.86.151]:20565 "EHLO eu-smtp-delivery-151.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230442AbhDQOAC (ORCPT ); Sat, 17 Apr 2021 10:00:02 -0400 Received: from AcuMS.aculab.com (156.67.243.121 [156.67.243.121]) (Using TLS) by relay.mimecast.com with ESMTP id uk-mta-213-vl0FeB5ZN9KlyvtC7G0NGQ-1; Sat, 17 Apr 2021 14:59:33 +0100 X-MC-Unique: vl0FeB5ZN9KlyvtC7G0NGQ-1 Received: from AcuMS.Aculab.com (fd9f:af1c:a25b:0:994c:f5c2:35d6:9b65) by AcuMS.aculab.com (fd9f:af1c:a25b:0:994c:f5c2:35d6:9b65) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 17 Apr 2021 14:59:32 +0100 Received: from AcuMS.Aculab.com ([fe80::994c:f5c2:35d6:9b65]) by AcuMS.aculab.com ([fe80::994c:f5c2:35d6:9b65%12]) with mapi id 15.00.1497.015; Sat, 17 Apr 2021 14:59:32 +0100 From: David Laight To: 'Al Viro' , Eric Dumazet CC: Thomas Gleixner , Linus Torvalds , linux-kernel , Eric Dumazet Subject: RE: [PATCH] x86/uaccess: small optimization in unsafe_copy_to_user() Thread-Topic: [PATCH] x86/uaccess: small optimization in unsafe_copy_to_user() Thread-Index: AQHXMvjk6jXIkdHnG0KLlGcZVxHm0qq4vBHA Date: Sat, 17 Apr 2021 13:59:32 +0000 Message-ID: References: <20210416192413.1514419-1-eric.dumazet@gmail.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.202.205.107] MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=C51A453 smtp.mailfrom=david.laight@aculab.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: aculab.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Al Viro On Behalf Of Al Viro > Sent: 16 April 2021 20:44 > On Fri, Apr 16, 2021 at 12:24:13PM -0700, Eric Dumazet wrote: > > From: Eric Dumazet > > > > We have to loop only to copy u64 values. > > After this first loop, we copy at most one u32, one u16 and one byte. > > Does it actually yield a better code? > > FWIW, this > void bar(unsigned); > void foo(unsigned n) > { > while (n >= 8) { > bar(n); > n -= 8; > } > while (n >= 4) { > bar(n); > n -= 4; > } > while (n >= 2) { > bar(n); > n -= 2; > } > while (n >= 1) { > bar(n); > n -= 1; > } > } This variant might be better: void foo(unsigned n) { while (n >= 8) { bar(8); n -= 8; } if (likely(!n)) return; if (n & 4) bar(4); if (n & 2) bar(2); if (n & 1) bar(1); } I think Al's version might have optimised down to this, but Eric's asm contains the n -= 4/2/1; OTOH gcc can make a real pig's breakfast of code like this! David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)