Received: by 2002:a05:6359:6284:b0:131:369:b2a3 with SMTP id se4csp5288452rwb; Wed, 9 Aug 2023 01:27:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHzWxK0sPXnPS0te2AKYmZN2yyglkFokNUWRq/zItZRf9ij05vSS95HQyuf0QxXO8706frU X-Received: by 2002:a17:902:ea0b:b0:1bb:7b6c:983a with SMTP id s11-20020a170902ea0b00b001bb7b6c983amr2503342plg.59.1691569665511; Wed, 09 Aug 2023 01:27:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691569665; cv=none; d=google.com; s=arc-20160816; b=I9LKm7/nwPRrPjKdl2M/4dbucic4olRBSz+svX/0vXWDGS6k427b8Oblz9BRDoZAt/ f3V10nalX+qOBSJLse0w95F6PtDZ4XqFlgz4O3SwQm3NVWJ7jjmdHitIPy+0IOt9Vss1 vHZUt5UKp87wW+qiunxOv9DhofUbdnkEyDa1Z/HweNSs5tRRQOuHXSw8C4IfpmmkbM7s NrqLYS7aSgz/dotpOJ9UxsbXr11o2JmQRS8ovtDkGD1idf58XIfWGWjuUuTfNP9v4ukI EQBocvEZhSRgvrk9bDbT5xA6bUTNbLw2UTBRKoqZJdiLPh23XzUDBeNoiAK3CyxcPAe7 WRKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=pefRTU+8B4m9LlJAFGQ0IQAqbtMHJMUCx10va6N3Enw=; fh=KJbfRuRtq1V3lMA5Q7SN2J000HD/IWqerEakkTonk88=; b=kHH+Hb3nBRR1QyYE3yAfcp6JtYg1CEc635cyLJblUTQKZoxui89LmyDX47NsKgfePa W9TFVsKIsa+Az25ihV04rVpraHyQZco74y+7+Fl95g6SYLzZXLviMTnGsLzT87f3w7yP uOqo8r+2sHdbWQTVy9pzlUKk/VXYFBn8poBr5uzW5Cdfa9wRjNtpjIMj98lIrYM3Kwmt SOZhWwVKOCxeHmxyCQxg8C39+v+gNinWQpURNK2zypspLXqL9hb+OmJvp9sQdFghF0Bg z+iC0uELV+LVNA+s47QbHzR+eajHAaqit1foBs5WIdv4ClKnEHh7hD+fRWZBaUTeAQ7O vIgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance.com header.s=google header.b=kz805cuh; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=bytedance.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m1-20020a170902f20100b001b53a3fbcc3si8429242plc.328.2023.08.09.01.27.33; Wed, 09 Aug 2023 01:27:45 -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=@bytedance.com header.s=google header.b=kz805cuh; 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; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230514AbjHIG6r (ORCPT + 99 others); Wed, 9 Aug 2023 02:58:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47810 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229445AbjHIG6q (ORCPT ); Wed, 9 Aug 2023 02:58:46 -0400 Received: from mail-oo1-xc34.google.com (mail-oo1-xc34.google.com [IPv6:2607:f8b0:4864:20::c34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBF7F19BC for ; Tue, 8 Aug 2023 23:58:23 -0700 (PDT) Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-56c7f47ec42so4620482eaf.2 for ; Tue, 08 Aug 2023 23:58:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1691564303; x=1692169103; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=pefRTU+8B4m9LlJAFGQ0IQAqbtMHJMUCx10va6N3Enw=; b=kz805cuhiEqMxJpNJIufLksHrMhd7adoGDZy9oV1BHultXIZgvH+RyhBxZVCzVgzS1 PwOkw442ijAM94hAao2Fq9PqJKXcrrF8D65D23NizmOYWcQtSucLZuIBFn11hHkBdYEs NoT956z0mGNKbS+5lX7fvo+Ohr7kdF9hmidxuC6hjaS8EobOZJQ2NPGKYPK4hN6FmOAv NtIsgPPQH4grl6sGObE32GxmZ3L4V/ctfsbfDKqFmWa9FavJzB+N/mdoa2F89ncCTzjj c4+a1ECILnbtW+vqIvkD20K9TedBOEd3flPXKSCaEXd337M5yQa5Mjb1D0jg7WKqm6ou WJ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691564303; x=1692169103; h=content-transfer-encoding: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=pefRTU+8B4m9LlJAFGQ0IQAqbtMHJMUCx10va6N3Enw=; b=RpGF2aK7tqapb7g2E8pe0qJocjyHBWreYqgFzuOXKrrDRoeTFmk2v4BaStOvAqhCNC /az7JMVB6ebluS5TL39oa3RcogrBZ/NFFgN+PFZCTNIYpvzG+AEP8M8B3L9iDBus7ON9 aTipMvQu0o5n1mTh7cdIuh87y/QMzxNrboJF34qBemrCUPWxNkED+K1ruNH/FWYXss6A RdOsdD0VKJ7mr3E4hTp7jELScK5xv+pQaGd1SFS03PxxVs1AU4mF0EeNjLqAWCzNEsu+ hYqObEO58RI8Mj2r0EjgOZpzqHLmb+jPT7T3B83uqyC7VlLtkuQ6hrq+S7fnhyikqrr6 3AqQ== X-Gm-Message-State: AOJu0YxzULCf5OycAuiee1GvkFf0wQ5PPepFxQzrZn7cO7s9+Vr2QovY n1I2ON0SvzUPXj9+pKSEQkRARD9+oq4qWiF4xJ+Kug== X-Received: by 2002:a05:6808:1988:b0:3a3:654d:b2e5 with SMTP id bj8-20020a056808198800b003a3654db2e5mr2333267oib.42.1691564302996; Tue, 08 Aug 2023 23:58:22 -0700 (PDT) MIME-Version: 1.0 References: <20230725070549.89810-1-luxu.kernel@bytedance.com> In-Reply-To: From: =?UTF-8?B?5pet6Lev?= Date: Wed, 9 Aug 2023 14:58:11 +0800 Message-ID: Subject: Re: [External] Re: [PATCH] riscv: Fix local irq restore when flags indicates irq disabled To: Palmer Dabbelt Cc: Paul Walmsley , aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 On Wed, Aug 9, 2023 at 2:05=E2=80=AFPM Palmer Dabbelt = wrote: > > On Tue, 25 Jul 2023 00:05:49 PDT (-0700), luxu.kernel@bytedance.com wrote= : > > When arch_local_irq_restore() is called with flags indicating irqs > > disabled, we need to clear SR_IE bit in CSR_STATUS, whereas current > > implementation based on csr_set() function only sets SR_IE bit of > > CSR_STATUS when SR_IE bit of flags is high and does nothing when > > SR_IE bit of flags is low. > > > > This commit supplies csr clear operation when calling irq restore > > function with flags indicating irq disabled. > > > > Fixes: 6d60b6ee0c97 ("RISC-V: Device, timer, IRQs, and the SBI") > > Signed-off-by: Xu Lu > > --- > > arch/riscv/include/asm/irqflags.h | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/arch/riscv/include/asm/irqflags.h b/arch/riscv/include/asm= /irqflags.h > > index 08d4d6a5b7e9..7c31fc3c3559 100644 > > --- a/arch/riscv/include/asm/irqflags.h > > +++ b/arch/riscv/include/asm/irqflags.h > > @@ -49,7 +49,10 @@ static inline int arch_irqs_disabled(void) > > /* set interrupt enabled status */ > > static inline void arch_local_irq_restore(unsigned long flags) > > { > > - csr_set(CSR_STATUS, flags & SR_IE); > > + if (flags & SR_IE) > > + csr_set(CSR_STATUS, SR_IE); > > + else > > + csr_clear(CSR_STATUS, SR_IE); > > Unless I'm missing something, the original version is correct: > local_irq_restore() must be paired with a local_irq_save(), so we can > only get here with interrupts disabled. Yes, it is correct if local_irq_save() is called when irq is enabled before= . The flags returned will be SR_IE. And it is safe to call local_irq_restore(= ) with flag SR_IE in any case. However, if local_irq_save() is called when irq is disabled. The SR_IE bit = of flag returned is clear. If some code between local_irq_save() and local_irq_restore() reenables irq, causing the SR_IE bit of CSR_STATUS back to 1, then local_irq_restore() can not restore irq status back to disa= bled. Here is an example in existing driver (may not belong to riscv arch) in drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c. The pseudo code behaves like: int rtl8723e_hw_init(struct ieee80211_hw *hw) { int err; unsigned long flags; ... local_irq_save_flags(flags); local_irq_enable(); ... local_irq_restore(flags); ... return err; } > > > } > > > > #endif /* _ASM_RISCV_IRQFLAGS_H */