linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Brown <broonie@kernel.org>
To: David Jander <david@protonic.nl>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
	linux-spi@vger.kernel.org, Oleksij Rempel <ore@pengutronix.de>
Subject: Re: [RFC] A new SPI API for fast, low-latency regmap peripheral access
Date: Tue, 17 May 2022 19:17:54 +0100	[thread overview]
Message-ID: <YoPm0qDaMEogH8n2@sirena.org.uk> (raw)
In-Reply-To: <20220517171626.51d50e74@erd992>

[-- Attachment #1: Type: text/plain, Size: 3011 bytes --]

On Tue, May 17, 2022 at 05:16:26PM +0200, David Jander wrote:
> Mark Brown <broonie@kernel.org> wrote:

> > I think the worst case would be mixing latency sensitive and throughput
> > sensitive devices, or possibly tasks on a device.  As you say there's an
> > element of system design here.

> Sure. I have combined NOR-flash chips on the same SPI bus with an MCP2515 CAN
> controller in the past. But I knew that the NOR-flash chip would only ever be
> accessed during a firmware update or from the bootloader. Never together with
> CAN communication. If I did, I would have lost CAN messages guaranteed. So
> you can have compromises. I (as HW designer) in this case would never expect
> the kernel to try to make this work concurrently, and IMHO we (as
> kernel developers) shouldn't try in such extreme cases either.

Part of the worry here is if we manage to do something that plays badly
with tools like real time scheduling that allows people to manage this
stuff, causing problems for something that otherwise works fine.

> > OK, no - I'm proposing actually putting the message onto the hardware
> > from interrupt context.

> Nice! I like that idea. Do you want to somehow extend spi_async() to do this
> transparently? So we just need to introduce a second function
> ("spi_async_await()" ?) which would wait for completion and collect the RX
> buffer?

We shouldn't need a new API to wait for the async operation to complete,
hopefully the existing one is fine.

> To sum up all possible patches you would accept if I understood correctly:

>  1. Make the stats/accounting code be NOP with a sysfs or similar toggle.

Or otherwise make it unobtrusive (eg, with similar techniques to those
used by the networking API).

>  2. Enable the re-use of messages with once in lifetime prepare/map/validate.
> 
>  3. Introduce spi_async_await() (or similar), to wait for completion of an
>  async message.
> 
>  4. Enable SPI drivers to tell the core (spi.c) under which conditions it can
>  fire a message asynchronously without the need for the worker queue and
>  implement support for those cases. Conditions involve max. transfer size, CS
>  non-sleep access, etc... but it should probably be up to the SPI driver to
>  decide I guess (ctlr->can_send_uninterruptible(msg)).
> 
> Do I miss something?

That's roughly it, plus a general push to optimise the hot path.

> Minor concern about 4. above: Hopefully the decision can be made very quickly
> (i.e. without trying and failing). Maybe this decision result can be cached in
> the struct spi_message, so it can be re-used (see point 2)? Maybe as part of
> prepare or validate?

Yes, we need to do this at validation time to play with the reuse I
think.

> I feel confident that these 4 modifications will have enough of a performance
> impact if fully exploited by the MCP2518FD driver, that overhead will no
> longer be a concern.

Just the small matter of implementing them then :/

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  reply	other threads:[~2022-05-17 18:18 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-12 14:34 [RFC] A new SPI API for fast, low-latency regmap peripheral access David Jander
2022-05-12 20:37 ` Mark Brown
2022-05-12 22:12   ` Mark Brown
2022-05-13 12:46   ` David Jander
2022-05-13 19:36     ` Mark Brown
2022-05-16 16:28       ` Marc Kleine-Budde
2022-05-16 17:46         ` Mark Brown
2022-05-17 10:24           ` David Jander
2022-05-17 11:57             ` Mark Brown
2022-05-17 13:09               ` David Jander
2022-05-17 13:43                 ` Mark Brown
2022-05-17 15:16                   ` David Jander
2022-05-17 18:17                     ` Mark Brown [this message]
2022-05-19  8:12                       ` David Jander
2022-05-19  8:24                         ` Marc Kleine-Budde
2022-05-19 12:14                         ` Andrew Lunn
2022-05-19 14:33                           ` David Jander
2022-05-19 15:21                             ` Andrew Lunn
2022-05-20 15:22                         ` Mark Brown
2022-05-23 14:48                           ` David Jander
2022-05-23 14:59                             ` Marc Kleine-Budde
2022-05-24 11:30                               ` David Jander
2022-05-24 19:46                                 ` Mark Brown
2022-05-25 14:39                                   ` David Jander
2022-05-13 12:10 ` Andrew Lunn

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=YoPm0qDaMEogH8n2@sirena.org.uk \
    --to=broonie@kernel.org \
    --cc=david@protonic.nl \
    --cc=linux-spi@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=ore@pengutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).