From: Peter Zijlstra <peterz@infradead.org>
To: Benjamin Bara <bbara93@gmail.com>
Cc: Wolfram Sang <wsa@kernel.org>, Lee Jones <lee@kernel.org>,
rafael.j.wysocki@intel.com, dmitry.osipenko@collabora.com,
jonathanh@nvidia.com, richard.leitner@linux.dev,
treding@nvidia.com, linux-kernel@vger.kernel.org,
linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org,
Benjamin Bara <benjamin.bara@skidata.com>,
stable@vger.kernel.org
Subject: Re: [PATCH v3 2/4] i2c: core: run atomic i2c xfer when !preemptible
Date: Tue, 4 Apr 2023 10:22:55 +0200 [thread overview]
Message-ID: <20230404082255.GU4253@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <CAJpcXm5eKhQg3JDksGs5fHi-DN+VAJNnuyUKtQGiS2OzTgzyVw@mail.gmail.com>
On Sun, Apr 02, 2023 at 12:04:48PM +0200, Benjamin Bara wrote:
> On Wed, 29 Mar 2023 at 21:50, Wolfram Sang <wsa@kernel.org> wrote:
> > Could you make sure please?
>
> Sure, I'll try. The check before bae1d3a was:
> in_atomic() || irqs_disabled()
> which boils down to:
> (preempt_count() != 0) || irqs_disabled()
> preemptible() is defined as:
> (preempt_count() == 0 && !irqs_disabled())
>
> so this patch should behave the same as pre-v5.2, but with the
> additional system state check. From my point of view, the additional
> value of the in_atomic() check was that it activated atomic i2c xfers
> when preemption is disabled, like in the case of panic(). So reverting
> that commit would also re-activate atomic i2c transfers during emergency
> restarts. However, I think considering the system state makes sense
> here.
>
> From my understanding, non-atomic i2c transfers require enabled IRQs,
> but atomic i2c transfers do not have any "requirements". So the
> irqs_disabled() check is not here to ensure that the following atomic
> i2c transfer works correctly, but to use non-atomic i2c xfer as
> long/often as possible.
>
> Unfortunately, I am not sure yet about !CONFIG_PREEMPTION. I looked into
> some i2c-bus implementations which implement both, atomic and
> non-atomic. As far as I saw, the basic difference is that the non-atomic
> variants usually utilize the DMA and then call a variant of
> wait_for_completion(), like in i2c_imx_dma_write() [1]. However, the
> documentation of wait_for_completion [2] states that:
> "wait_for_completion() and its variants are only safe in process context
> (as they can sleep) but not (...) [if] preemption is disabled".
> Therefore, I am not quite sure yet if !CONFIG_PREEMPTION uses the
> non-atomic variant at all or if this case is handled differently.
>
> > Asking Peter Zijlstra might be a good idea.
> > He helped me with the current implementation.
>
> Thanks for the hint! I wrote an extra email to him and added him to CC.
So yeah, can't call schedule() if non preemptible (which is either
preempt_disable(), local_bh_disable() (true for bh handlers) or
local_irq_disable() (true for IRQ handlers) and mostly rcu_read_lock()).
You can mostly forget about CONFIG_PREEMPT=n (or more specifically
CONFIG_PREMPT_COUNT=n) things that work for PREEMPT typically also work
for !PREEMPT.
The question here seems to be if i2c_in_atomic_xfer_mode() should have
an in_atomic() / !preemptible() check, right? IIUC Wolfram doesn't like
it being used outside of extra special cicumstances?
next prev parent reply other threads:[~2023-04-04 8:23 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-27 13:57 [PATCH v3 0/4] mfd: tps6586x: register restart handler Benjamin Bara
2023-03-27 13:57 ` [PATCH v3 1/4] kernel/reboot: emergency_restart: set correct system_state Benjamin Bara
2023-03-27 13:57 ` [PATCH v3 2/4] i2c: core: run atomic i2c xfer when !preemptible Benjamin Bara
2023-03-27 14:54 ` Wolfram Sang
2023-03-27 16:23 ` Benjamin Bara
2023-03-29 19:50 ` Wolfram Sang
2023-04-02 10:04 ` Benjamin Bara
2023-04-04 8:22 ` Peter Zijlstra [this message]
2023-04-04 14:06 ` Benjamin Bara
2023-03-27 13:57 ` [PATCH v3 3/4] mfd: tps6586x: use devm-based power off handler Benjamin Bara
2023-04-02 22:28 ` Dmitry Osipenko
2023-03-27 13:57 ` [PATCH v3 4/4] mfd: tps6586x: register restart handler Benjamin Bara
2023-04-02 22:30 ` Dmitry Osipenko
2023-04-03 6:50 ` Benjamin Bara
2023-04-03 15:44 ` Dmitry Osipenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230404082255.GU4253@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bbara93@gmail.com \
--cc=benjamin.bara@skidata.com \
--cc=dmitry.osipenko@collabora.com \
--cc=jonathanh@nvidia.com \
--cc=lee@kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=rafael.j.wysocki@intel.com \
--cc=richard.leitner@linux.dev \
--cc=stable@vger.kernel.org \
--cc=treding@nvidia.com \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.