From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C064EB64DD for ; Fri, 11 Aug 2023 18:14:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DB8546B0074; Fri, 11 Aug 2023 14:14:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D67C46B0078; Fri, 11 Aug 2023 14:14:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C2EEA6B007B; Fri, 11 Aug 2023 14:14:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B3F926B0074 for ; Fri, 11 Aug 2023 14:14:01 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8B2C5A0614 for ; Fri, 11 Aug 2023 18:14:01 +0000 (UTC) X-FDA: 81112622682.14.F8BA381 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) by imf27.hostedemail.com (Postfix) with ESMTP id 55E3940009 for ; Fri, 11 Aug 2023 18:13:59 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=google header.b=M8+WMK2c; dmarc=none; spf=pass (imf27.hostedemail.com: domain of torvalds@linuxfoundation.org designates 209.85.218.52 as permitted sender) smtp.mailfrom=torvalds@linuxfoundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691777639; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yc08NlpUYdnLIv24Lptdj+fSBDTOBa932kABNWFPLk4=; b=8ClUFxlXXgcxOLEpThrgs0UYBa2DU0OguZbfv2TvhcOr55ZsuNVgCamdLQ+OQ6Bi61J3a0 i0mRDHUaF8APofc9XGW126hkjS8OiVYRqI509+HoSLSv05onKnIzIZdz9JwDvJiLNRUCas XcyrUE7xOITYtOD41YGSwvhiGcpNhg4= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=google header.b=M8+WMK2c; dmarc=none; spf=pass (imf27.hostedemail.com: domain of torvalds@linuxfoundation.org designates 209.85.218.52 as permitted sender) smtp.mailfrom=torvalds@linuxfoundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691777639; a=rsa-sha256; cv=none; b=Tge16hn2QDC4gVWAwZ/JhtN8HUIoRJRV5iWe7OAREvB6XGT/kD9174tatB/yoe7AbUrVMX bZrjX8AlLGHWPnzs5dV48KGyxv3+xf0r46wOjOD73v7VRfyeImwh44TbZoYzn60CNQn3Pn 8GGg0rweGfw1L4jZclZBi8ts8E52TKM= Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-99bdf08860dso709837466b.0 for ; Fri, 11 Aug 2023 11:13:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-foundation.org; s=google; t=1691777637; x=1692382437; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yc08NlpUYdnLIv24Lptdj+fSBDTOBa932kABNWFPLk4=; b=M8+WMK2cNmoXiL1Fm72vw+VoqL65yOpIy+FzSbVQyuwyFhZAMb8Zf8mVwM/5ZMsZOv pNQNrUfAlCuk99pCp1UesRvod0/70CYpYCpu89LTEJ2hBpd7hojuLe39HmCqENXw9I/x sXrQu27QLN3DPuU0InQhNopybDieyL9S5VfW4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691777637; x=1692382437; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=yc08NlpUYdnLIv24Lptdj+fSBDTOBa932kABNWFPLk4=; b=TvWj+DPWx6UDmqR1UYIByoX2lN+Vw60izs4J3+on4zMQrMENtFFmmKYex+daxjHDxF T5jF2nIBjRS8wZppwS1h3blcA3uM1E+tq9uz2d+a1VPKyFa5NCVoJvr8Av1MVyIrm3Hw IIe/4pr4DbN9rPdhfDWf7s53v372popcxOQnJ7P8rHTOewpGV4LIt8qHuLCDz/cLls+3 PixikiuWpJEbWhsXwqyxDI8RwmnB6vTxC9qV1bbkKYBbkLJadKgZ4IsC9vohv4BW88OG m5dv+VGHzqfQ82j9c4uQFqK8KXN9fPMAP8JIpc5FQhLjSGxQc/U2IPPgML9z68aGgd4o fYEA== X-Gm-Message-State: AOJu0Ywrcb3PIA4MOw7n0zIlpp/x+zY8zcM7LRJteiW8gEiTZHRLGOdH mch8E6ur/bdovKnbH/qpjPZCsjzsPpkg91osdBjjdioD X-Google-Smtp-Source: AGHT+IEGDv136AUy6N0+5tlboncrHkW4/H4jwfEM74pRytA+9DlI1XHAKWbHyoKAoV16q3Jedwauuw== X-Received: by 2002:a05:6402:1b1c:b0:523:b37e:b83b with SMTP id by28-20020a0564021b1c00b00523b37eb83bmr2863875edb.13.1691777323855; Fri, 11 Aug 2023 11:08:43 -0700 (PDT) Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com. [209.85.208.43]) by smtp.gmail.com with ESMTPSA id n21-20020a05640204d500b005233885d0c6sm2298491edw.41.2023.08.11.11.08.43 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 11 Aug 2023 11:08:43 -0700 (PDT) Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-51a52a7d859so6941659a12.0 for ; Fri, 11 Aug 2023 11:08:43 -0700 (PDT) X-Received: by 2002:aa7:dad9:0:b0:521:ad49:8493 with SMTP id x25-20020aa7dad9000000b00521ad498493mr3461940eds.6.1691777323138; Fri, 11 Aug 2023 11:08:43 -0700 (PDT) MIME-Version: 1.0 References: <3710261.1691764329@warthog.procyon.org.uk> <3888331.1691773627@warthog.procyon.org.uk> In-Reply-To: <3888331.1691773627@warthog.procyon.org.uk> From: Linus Torvalds Date: Fri, 11 Aug 2023 11:08:26 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [RFC PATCH] iov_iter: Convert iterate*() to inline funcs To: David Howells Cc: Alexander Viro , Jens Axboe , Christoph Hellwig , Christian Brauner , Matthew Wilcox , jlayton@kernel.org, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 55E3940009 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: xho3njbukma6ednigifxhtxh5jd9wwmw X-HE-Tag: 1691777639-136225 X-HE-Meta: U2FsdGVkX19zWYw0l4FCU6It7tioHG1wUwUvZV1chmTx+p+ldOX05oNXG/fxmi99P6Af+XAzn4ff3AoMZxkC22AylNeKBf4xdMmm5oo4/Q02AzAiTSUmsVeoG5tPfXdzgdJodDTt28KuNTU7TZOSLnUX7Y+nIfLuQ2vJaSXylB2Sd0ap+SVJypFjJUR6FZgZIacwct0OtbL9B7rcoaini+eriJxj+ASfZYnWz75Wihj1hIYUAteAVOxzocmWWl45wgW1eeP+uDXxDeVNhysT/SHKW7DSeZHHLbWlPbyXntd57SlWjMdlznPwrfx8uI4tFXNxWyoUnxe8NqmRclw9O20egSNhFc0yMYez4mtSi5pEJ2HYJWiZrrq9fjfh5nGwcfnfle5B5ExQXtJBnjxvHZ90b/rhlVCTiATBJM4kBGhwttYATNuUoMC4VpAcpqZSwLbR4mMR/lygnEugVwt1cd0wnKJ+UP2Kx/Objg7D/Kq6XO1OQkiZ8+7BH0OCKqjM2k+XNzckbi2Q66uA75dGqMFXMJt0ZEgKZC1H65dGrZUlPyTDkfge9BhjgaeA+41fkBXXpD1TX0WNSekK9NqQMA66EDD7cFbLkXgGtuGFxmX/0q26CsAkyJ1VUw5HIMEeJrBTs+rcG1JMPnUuV7LBzsCOhdfy0Pel/DIt8kfmIHshMccXI94DmJLini8xh6WW3QkESVs1oTuqP8EsJ9idJ3Gsfl7NuJudBJe+4+6DxAY/FFEmGDyQJbufNbxlFIE0iA4YlIpubvsNw8+sW6zse0W8p+NvGPdC9X50uGgF8BdAW24CpW61PBdrL9vlGcebAc2sODRcsAtek+1nFNzhydMLqzW8fJN5ILTnJzYvuwdPBdCjs9KwgivL1zHXH/xtii+8zQW+0J4YBHQ0YkxXiM1KycsoosTx7L01ibRhL6opBWk5zfsyUDfekR8eD2M8lXtjESog+zd0sfsHLoK cAisRxTF ia0bAxXM7sVYiqG9XMg27wzMKjqdUY1G79fCa3sjaTN+c3bVtxwY241oWsw56GPawxUkCjKkiDNJKjFP9Gx+nJ+fcIsh89dVFoSWnbMb7Qt576VUyrQNPIoZmKv1KcbGdn6vivqMHWW+RMoCXiwacPBA+QbPbqZjLkxEaMhm4OjSRO8/p/mISe32AylVt9UtqnQM3b61RPlXHwkld3SS6DV0rNsexIq1Fw7sKWxsqxeucXfthzJgRNXpIHlfa1tPBRayBN/e26B7bDbEHWAsYWcg8ibq/NT3nUVS+blhiTSTPwHBM25ACs5hW+hm+MKWDNusg/aB2EQ3esfeQb/7p6nHhgQCCspVJ2O1gGJE+Gzg3oMu1SeZlHX17VRfbOyc9Q54iZzHW/BQ1hrilMSDFGLHPqUKGAVBxinR6QRnRCGQT6zZrfNtzZTMRvtXxM8jFwv+UgSoYMyryhLb9VTCQnoVvLHV5SeGew3lwKYMsGvOKU+6ErD0KEy3b98aBHTCXdl+wVYDBAtM6EkLLB1JQvCyDaDiZK3yVqWFH X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, 11 Aug 2023 at 10:07, David Howells wrote: > > Hmmm... It seems that using if-if-if rather than switch() gets optimised > better in terms of .text space. The attached change makes things a bit > smaller (by 69 bytes). Ack, and that also makes your change look more like the original code and more as just a plain "turn macros into inline functions". As a result the code diff initially seems a bit smaller too, but then at some point it looks like at least clang decides that it can combine common code and turn those 'ustep' calls into indirect calls off a conditional register, ie code like movq $memcpy_from_iter, %rax movq $memcpy_from_iter_mc, %r13 cmoveq %rax, %r13 [...] movq %r13, %r11 callq __x86_indirect_thunk_r11 Which is absolutely horrible. It might actually generate smaller code, but with all the speculation overhead, indirect calls are a complete no-no. They now cause a pipeline flush on a large majority of CPUs out there. That code generation is not ok, and the old macro thing didn't generate it (because it didn't have any indirect calls). And it turns out that __always_inline on those functions doesn't even help, because the fact that it's called through an indirect function pointer means that at least clang just keeps it as an indirect call. So I think you need to remove the changes you did to memcpy_from_iter(). The old code was an explicit conditional of direct calls: if (iov_iter_is_copy_mc(i)) return (void *)copy_mc_to_kernel(to, from, size); return memcpy(to, from, size); and now you do that iov_iter_is_copy_mc(i) ? memcpy_from_iter_mc : memcpy_from_iter); to pass in a function pointer. Not ok. Not ok at all. It may look clever, but function pointers are bad. Avoid them like the plague. Linus