Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp225229iog; Wed, 15 Jun 2022 00:36:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxL80EMdozJujGsi2DToQBjp2TvY/eyagiYqTHJrNE2c1i0riX+XueU/hlwyz7xSC+yinva X-Received: by 2002:a17:907:75e5:b0:70d:97bd:df01 with SMTP id jz5-20020a17090775e500b0070d97bddf01mr7885197ejc.548.1655278619513; Wed, 15 Jun 2022 00:36:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655278619; cv=none; d=google.com; s=arc-20160816; b=uYxY9z0excMXD7hLsqac5OD8756hs5bjqAeDkVneSOPmFrVqjS7VBqmYdywcutA6hI +DAG2Is/UIUg4Mfw+noJbtCAWiPF+Ar53jyVDsPjp09xw9/bIaMDL9SC57c9dfOGOm3O pipEHPqzYX19IGkSQ4oZrbw0hxTMnf3Q/HYfkzIVCJUyEUIh4licUjnNL5OxdUj8nZVP +vWWRS00BIglKpFUz32fw4q3zGC9H20zglPIef5K3tHSAn/fQAbZUBKS8VWoBUxeOoTg 7If89gdg7H/ud/bTRRQdFrknC9KALN/2pIm6Pude9WWkzY0g3s8DoMsh+mGqECMH8uoz My7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=tGV/RSsW48AsjZJ+T8kv/eAUlGEm+TRsUG4lDlbmsqk=; b=GVICmDnP3XzH2wH0SlGDCczkaI0XBa2kRIKP4NYs5eTwn1J/OYpjtPWYLWL83h5MX5 1m/E3Pqp0OGXj4v2SgjEw+RV9SG9taIzGUbsC5qbHVZiBIDWgwhFOTvM5AIW7RKbSNK6 AcWJ/OdMxOgIY8eWkyQl7v4r061+yEcLjWLgsqzmJvyS7QhBbpSEoWgp4+9bIDGbuW3h YLTo+N8wF/gnu7gMmQQh9Yt7+zgQ0eLT02766DDNnHe0Wln4rcD5pzPEov9yoQ+snPwJ DPSblYB+1KVonS75tQiarvARB/henbwRFM24SaCh2PsfoCmZK+qkaYW7d88fk+5FKnMb bncQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@hev-cc.20210112.gappssmtp.com header.s=20210112 header.b="Wr/xhbSF"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cz21-20020a0564021cb500b0042de4ef4f48si13433278edb.169.2022.06.15.00.36.32; Wed, 15 Jun 2022 00:36:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@hev-cc.20210112.gappssmtp.com header.s=20210112 header.b="Wr/xhbSF"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344292AbiFOG5g (ORCPT + 99 others); Wed, 15 Jun 2022 02:57:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245022AbiFOG5b (ORCPT ); Wed, 15 Jun 2022 02:57:31 -0400 Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A90BD2B3 for ; Tue, 14 Jun 2022 23:57:28 -0700 (PDT) Received: by mail-io1-xd2a.google.com with SMTP id y79so11712659iof.2 for ; Tue, 14 Jun 2022 23:57:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hev-cc.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=tGV/RSsW48AsjZJ+T8kv/eAUlGEm+TRsUG4lDlbmsqk=; b=Wr/xhbSFHpBhBKCQGohU7Ir6zyEXL0eaEIWJX4v8AKd25OP0py5J3erENj4JwsrdQ1 2N9fcgU+gQUK8vvGYldetvPljG6M06F4OhMk0pD2ysayVqXo7I7bJwMo6X5mdKVSX7M1 q7DHQMc9MTCxsxpwHW2DpcM47vlIUJ7FgOfvcxN/OTVdoOXPWp9QmTbnhK74lKrfB0Uf ILBLFbMB3la/TRFCUo/05z7Jl0ypRUfpSiipbPG3etUHitCONvc6P0VDh3yDNkzAJgdY noGTcSwLkazWeCN1kHgq4CHNea9FOH7LGIhzX6Hi04jUeTAYM2lQf7U08pwbk7uQj/DM mHkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=tGV/RSsW48AsjZJ+T8kv/eAUlGEm+TRsUG4lDlbmsqk=; b=Y5QgL0927SF9+9eRUBcDgLsNK7m+5Ya24tN37JR+awZumfkppcxoZ30g7dYeFPQAXS M3goWc3onTh/8XWTDbvrJlZNPL1zRjokFhKbvfDGfEDrgnvbRGY7ixBQhqE4aCK470bN f0DC1HDAkqw1wD9IQPMm9jdy3SCALsDCS8PoTBOd2EvbiITtWEM/MV4zl43n/SAJ7O0U 2ckeKJrJI8DK0jAhQDSnhAAR9LBI9/gCvhDClUjvg91FU+wTnc77NMIJHq9F1pQl07EU Wqk6SGaosXbkmTZ8DCfPNtsvbOLNiB5KCM0DhUP0QgdwGzY9M+a5TW+3q+39Nj7i3ZG5 CWyA== X-Gm-Message-State: AOAM531qJnmnhY7iHi7yWL8NxVp7PmUszskwXFEqi2rRuBuvLcwwop8N tBNd3/fLlEst7o6HCPb300pAPrwLg8HTKjt78CtJ/w== X-Received: by 2002:a02:3448:0:b0:331:84bb:d66b with SMTP id z8-20020a023448000000b0033184bbd66bmr4893378jaz.292.1655276247855; Tue, 14 Jun 2022 23:57:27 -0700 (PDT) MIME-Version: 1.0 References: <1655275079-17651-1-git-send-email-yangtiezhu@loongson.cn> <1655275079-17651-3-git-send-email-yangtiezhu@loongson.cn> In-Reply-To: <1655275079-17651-3-git-send-email-yangtiezhu@loongson.cn> From: hev Date: Wed, 15 Jun 2022 14:57:17 +0800 Message-ID: Subject: Re: [RFC PATCH v2 2/2] LoongArch: No need to call RESTORE_ALL_AND_RET for all syscalls To: Tiezhu Yang Cc: Huacai Chen , WANG Xuerui , Xuefeng Li , Jianmin Lv , Jun Yi , Rui Wang , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, On Wed, Jun 15, 2022 at 2:38 PM Tiezhu Yang wrote: > > In handle_syscall, it is unnecessary to call RESTORE_ALL_AND_RET > for all syscalls. > > (1) If syscall number is __NR_clone and __NR_clone3, > call RESTORE_STATIC_SOME_SP_AND_RET. > (2) If syscall number is __NR_rt_sigreturn and __NR_rt_sigsuspend, > call RESTORE_TEMP_SOME_SP_AND_RET. > (3) The other syscalls call RESTORE_SOME_SP_AND_RET. > > With this patch, it can reduce many load instructions. > > Signed-off-by: Tiezhu Yang > --- > arch/loongarch/include/asm/stackframe.h | 17 +++++++++++++++++ > arch/loongarch/kernel/entry.S | 24 +++++++++++++++++++++++- > 2 files changed, 40 insertions(+), 1 deletion(-) > > diff --git a/arch/loongarch/include/asm/stackframe.h b/arch/loongarch/include/asm/stackframe.h > index 4ca9530..52649a5f 100644 > --- a/arch/loongarch/include/asm/stackframe.h > +++ b/arch/loongarch/include/asm/stackframe.h > @@ -216,4 +216,21 @@ > RESTORE_SP_AND_RET \docfi > .endm > > + .macro RESTORE_SOME_SP_AND_RET docfi=0 > + RESTORE_SOME \docfi > + RESTORE_SP_AND_RET \docfi > + .endm > + > + .macro RESTORE_STATIC_SOME_SP_AND_RET docfi=0 > + RESTORE_STATIC \docfi > + RESTORE_SOME \docfi > + RESTORE_SP_AND_RET \docfi > + .endm > + > + .macro RESTORE_TEMP_SOME_SP_AND_RET docfi=0 > + RESTORE_TEMP \docfi > + RESTORE_SOME \docfi > + RESTORE_SP_AND_RET \docfi > + .endm > + > #endif /* _ASM_STACKFRAME_H */ > diff --git a/arch/loongarch/kernel/entry.S b/arch/loongarch/kernel/entry.S > index 53ce2cb..58fe507 100644 > --- a/arch/loongarch/kernel/entry.S > +++ b/arch/loongarch/kernel/entry.S > @@ -79,7 +79,29 @@ SYM_FUNC_START(handle_syscall) > move a0, sp > bl do_syscall > > - RESTORE_ALL_AND_RET > + /* > + * Syscall number held in a7 which is stored in PT_R11. > + * If syscall number is __NR_clone and __NR_clone3, > + * call RESTORE_STATIC_SOME_SP_AND_RET. > + * If syscall number is __NR_rt_sigreturn and __NR_rt_sigsuspend, > + * call RESTORE_TEMP_SOME_SP_AND_RET. > + * The other syscalls call RESTORE_SOME_SP_AND_RET. > + */ > + cfi_ld t3, PT_R11 I think PT_R11 may be overwritten by the signal handler and the syscall number is now lost. > + li.w t4, __NR_clone > + beq t3, t4, 3f > + li.w t4, __NR_clone3 > + beq t3, t4, 3f > + li.w t4, __NR_rt_sigreturn > + beq t3, t4, 4f > + li.w t4, __NR_rt_sigsuspend > + beq t3, t4, 4f > + > + RESTORE_SOME_SP_AND_RET > +3: > + RESTORE_STATIC_SOME_SP_AND_RET > +4: > + RESTORE_TEMP_SOME_SP_AND_RET > SYM_FUNC_END(handle_syscall) > > SYM_CODE_START(ret_from_fork) > -- > 2.1.0 > Best regards, hev