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 X-Spam-Level: X-Spam-Status: No, score=-17.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3F87C43603 for ; Fri, 6 Dec 2019 17:38:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 887E421823 for ; Fri, 6 Dec 2019 17:38:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OZMDl0dU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726325AbfLFRil (ORCPT ); Fri, 6 Dec 2019 12:38:41 -0500 Received: from mail-pj1-f73.google.com ([209.85.216.73]:43317 "EHLO mail-pj1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726298AbfLFRil (ORCPT ); Fri, 6 Dec 2019 12:38:41 -0500 Received: by mail-pj1-f73.google.com with SMTP id b23so3978668pjz.10 for ; Fri, 06 Dec 2019 09:38:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=Vd5KbYjsiE1EtZVMNSeHzigBzJq8TAQZuGFlb+8G3b8=; b=OZMDl0dUbNauHdvrfwR2yLtAP+z7tlBcQot4LIPI+YLtbcnyAF2LnvofuehMpRxZly 4e6e+kbWST8hgfl9TRAJx7sTrUDnRBv96/ES4htzD5NfkLKOFFZOHKwsE3j0JfYwvqrH VtsRKPsSp+i7bg6wWzAO58h4vT9iHHF4lYxTPRrgt+8wH3ADe44gicez0DL99GqWb6s1 vx+SzJHezyRrFbLheJ6yhpLhD2VBgj01ov2X8CkIPe3fPhXSi7kmJixIzOQB1PdW9YTy Z5pLOSR1JJAflfMfGsFamFiGXjmen7HSm4sbAIUS52jTCMoUUWugXPSDVfMqKIQCXkVs 03Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=Vd5KbYjsiE1EtZVMNSeHzigBzJq8TAQZuGFlb+8G3b8=; b=LuoPSXNvjSwU7chc5r04H0UMuEImXsEecH9nAGYRDAiTKvNLWyw8TL3JpZLP2qEgdA pGMaBxUgerlRiMmZRS/6ToEl1kz+cN4rgtw+cRky96spS5W8ZKH9faX5Tph8FAvzJeCA dRxtQaGz+Kg6OTF52MttrXDCcrWlItLQwH7ZqxT2gHJqb4nv5D9OsUg4I4Mh2EGK0nN1 XLYxsUNiDHM78WioMHWlADDP01ClJeRmXF0jujB9wfvEtNEfb9r/hnP9lR2M9S/b6yEp 3TQMNs6FVXHEyoax/sCljiCKLJWAtkvcciJHyvijD6ZAjzvXz4qU8YC/y7Ay0dztCVyT cTpQ== X-Gm-Message-State: APjAAAVQWACydWIHDcItjedGilkVf+RjYypiazK/5dVmAWXinuI5m0tg yZKpGOJ2eSLc2SUw0/xsB8xusu6L3Qhn0w== X-Google-Smtp-Source: APXvYqwb6gPjfb8TQu/jBy/TXXOXj1+RJfxa9d4Xm6wW0E1H7DZCH+GR2erbctEfBrZKOO5jae46zCaxpb5etg== X-Received: by 2002:a63:fd0a:: with SMTP id d10mr4548283pgh.197.1575653920241; Fri, 06 Dec 2019 09:38:40 -0800 (PST) Date: Fri, 6 Dec 2019 09:38:36 -0800 Message-Id: <20191206173836.34294-1-edumazet@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.24.0.393.g34dc348eaf-goog Subject: [PATCH net] net: avoid an indirect call in ____sys_recvmsg() From: Eric Dumazet To: "David S . Miller" Cc: netdev , Eric Dumazet , Eric Dumazet , Paolo Abeni , David Laight Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org CONFIG_RETPOLINE=y made indirect calls expensive. gcc seems to add an indirect call in ____sys_recvmsg(). Rewriting the code slightly makes sure to avoid this indirection. Alternative would be to not call sock_recvmsg() and instead use security_socket_recvmsg() and sock_recvmsg_nosec(), but this is less readable IMO. Signed-off-by: Eric Dumazet Cc: Paolo Abeni Cc: David Laight --- net/socket.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/socket.c b/net/socket.c index ea28cbb9e2e7a7180ee63de2d09a81aacb001ab7..5af84d71cbc2f731def460b70aa7f68533a90b16 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2559,7 +2559,12 @@ static int ____sys_recvmsg(struct socket *sock, struct msghdr *msg_sys, if (sock->file->f_flags & O_NONBLOCK) flags |= MSG_DONTWAIT; - err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys, flags); + + if (unlikely(nosec)) + err = sock_recvmsg_nosec(sock, msg_sys, flags); + else + err = sock_recvmsg(sock, msg_sys, flags); + if (err < 0) goto out; len = err; -- 2.24.0.393.g34dc348eaf-goog