linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: benh@kernel.crashing.org (Benjamin Herrenschmidt)
To: linux-arm-kernel@lists.infradead.org
Subject: USB mass storage and ARM cache coherency
Date: Sun, 28 Feb 2010 11:29:53 +1100	[thread overview]
Message-ID: <1267316993.23523.1857.camel@pasglop> (raw)
In-Reply-To: <20100226220351.GE23933@n2100.arm.linux.org.uk>

On Fri, 2010-02-26 at 22:03 +0000, Russell King - ARM Linux wrote:
> On Sat, Feb 27, 2010 at 08:49:40AM +1100, Benjamin Herrenschmidt wrote:
> > It will deadlock if you use normal IRQs. I don't see a good way around
> > that other than using a higher-level type of IRQs. I though ARM has
> > something like that (FIQs ?). Can you use those guys for IPIs ?
> 
> If the hardware did support using FIQs for IPIs, this would not be
> desirable because then it takes it away from the SoC folk to do what
> they will with it.
> 
> In the past, it's been used as a fast CPU-driven "DMA" interface -
> some SoCs have been wired up in such a way that's the only use
> available for the FIQ.

This is an issue indeed.

> The other problem we'd encounter using FIQs for IPIs is that some IPIs
> need to take locks - and in order to make that safe, we'd either need
> another class of locks which disable IRQs and FIQs together, or we'd
> need to disable FIQs everywhere we disable IRQs - at which point FIQs
> become utterly pointless.

That's solvable easily :-) I mentioned having potentially to deal with a
similar problem with people using PowerPC 440 for SMP (doesn't broadcast
cache ops either). 440 has critical interrupts, which are akin to FIQs.

The trick here is that you don't use -only- critical interrupts for
IPIs. You use normal interrupts for all the current IPI types. You -add-
a fast one using critical interrupts specifically for cache ops, with a
very fast asm only path.

This works for us because masking interrupts doesn't mask critical
interrupts (it's a separate mask bit in our MSR). If that isn't the case
with FIQs then the whole idea is moot.

> (There only differences between FIQ and IRQ are:
>  - on simultaneous raising of both, the FIQ will be called before the IRQ.
>  - each has its own (single) vector.
>  - invocation of FIQ masks IRQ.
> 
> What I'm saying is that what gives FIQ an advantage for SoC people is
> that it's bare bones light weight and therefore extremely fast - as soon
> as you load it up with additional complexity, it becomes less useful.)

I understand.

Then Catalin idea of tricking the cache with load and stores would work
for the D$ side of thing. The I$ side of thing probably still needs IPIs
though, and you might need to use non-blocking async SMP call function
for that if you're going to do it from set_pte_at() instead of
update_mmu_cache() since the later is racy. In any case, it's a lot less
of a deadlock nest than the D$ side which needs to be dealt with in the
DMA ops, called below layers of driver and subsystem locks.

Note: Somebody at ARM needs to be severely beaten up for coming up with
that SMP scheme without broadcast cache ops and not also mandating some
kind FIQ IPI scheme that isn't masked with normal interrupts :-)

Cheers,
Ben.

  reply	other threads:[~2010-02-28  0:29 UTC|newest]

Thread overview: 155+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20100129185434.GH19501@one-eyed-alien.net>
     [not found] ` <1265045354.25750.52.camel@pc1117.cambridge.arm.com>
2010-02-08  6:55   ` USB mass storage and ARM cache coherency Pavel Machek
2010-02-08  7:33     ` Andreas Mohr
2010-02-08 10:19       ` Catalin Marinas
2010-02-08  9:51     ` Catalin Marinas
2010-02-08 10:03       ` Andy Green
2010-02-17  9:50         ` Sascha Hauer
2010-02-17  9:57           ` Andy Green
2010-02-08 10:52       ` Pavel Machek
2010-02-08 11:28         ` Catalin Marinas
2010-02-16  7:57           ` Shilimkar, Santosh
2010-02-16  8:22             ` Oliver Neukum
2010-02-16  8:55               ` Shilimkar, Santosh
2010-02-16  9:07                 ` Oliver Neukum
2010-02-16  9:39                   ` Russell King - ARM Linux
2010-02-16 13:32                     ` Oliver Neukum
2010-02-16 13:40                       ` Shilimkar, Santosh
2010-02-16 13:46                         ` Oliver Neukum
2010-02-16 14:12                           ` Shilimkar, Santosh
2010-02-16 14:22                             ` Oliver Neukum
2010-02-16 14:45                               ` Shilimkar, Santosh
2010-02-16 15:44                                 ` Alan Stern
2010-02-17  8:55                               ` Shilimkar, Santosh
2010-02-17  9:10                                 ` Oliver Neukum
2010-02-17  9:17                                   ` Shilimkar, Santosh
2010-02-17 17:02                                 ` Alan Stern
2010-02-17 20:26                                   ` Russell King - ARM Linux
2010-02-17 20:30                                   ` Gadiyar, Anand
2010-02-18  6:56                                     ` Oliver Neukum
2010-02-18  7:14                                       ` Gadiyar, Anand
2010-02-17 12:29                     ` Jamie Lokier
2010-02-17  3:21                 ` Ming Lei
2010-02-17  9:05               ` Benjamin Herrenschmidt
2010-02-17  9:15                 ` Oliver Neukum
2010-02-17  9:40                   ` Benjamin Herrenschmidt
2010-02-17 10:09                     ` Oliver Neukum
2010-02-17 10:18                       ` Benjamin Herrenschmidt
2010-02-17 10:23                         ` Oliver Neukum
2010-02-17 12:15                           ` Benjamin Herrenschmidt
2010-02-17  9:55                 ` Russell King - ARM Linux
2010-02-17 10:05                   ` Benjamin Herrenschmidt
2010-02-17 15:27                 ` Catalin Marinas
2010-02-17 20:37                   ` Benjamin Herrenschmidt
2010-02-17 20:44                     ` Russell King - ARM Linux
2010-02-17 22:31                       ` Benjamin Herrenschmidt
2010-02-19 17:15                         ` Catalin Marinas
2010-02-19 17:36                           ` Catalin Marinas
2010-02-19 20:53                             ` Oliver Neukum
2010-02-24  2:48                               ` Benjamin Herrenschmidt
2010-02-24  7:16                                 ` Oliver Neukum
2010-02-24 21:12                                   ` Benjamin Herrenschmidt
2010-02-25  3:48                                     ` Oliver Neukum
2010-02-26  0:22                                       ` Benjamin Herrenschmidt
2010-02-25 12:36                                     ` James Bottomley
2010-02-24  2:47                             ` Benjamin Herrenschmidt
2010-02-24 16:19                               ` Alan Stern
2010-02-24 21:13                                 ` Benjamin Herrenschmidt
2010-02-24 21:50                                   ` Alan Stern
2010-02-25 20:52                                     ` Benjamin Herrenschmidt
2010-02-26 16:00                                   ` Catalin Marinas
2010-02-26 21:36                                     ` Benjamin Herrenschmidt
2010-02-26 16:25                               ` Catalin Marinas
2010-02-26 16:52                                 ` Alan Stern
2010-02-26 21:51                                   ` Benjamin Herrenschmidt
2010-02-26 21:00                                 ` Russell King - ARM Linux
2010-02-28  0:14                                   ` Benjamin Herrenschmidt
2010-02-28  5:01                                     ` James Bottomley
2010-03-01 10:39                                       ` Catalin Marinas
2010-03-01 11:06                                         ` Russell King - ARM Linux
2010-03-02 12:11                                       ` FUJITA Tomonori
2010-03-02 17:05                                         ` Catalin Marinas
2010-03-02 17:47                                           ` Catalin Marinas
2010-03-02 23:33                                             ` Benjamin Herrenschmidt
2010-03-03 10:21                                               ` Catalin Marinas
2010-03-02 23:29                                           ` Benjamin Herrenschmidt
2010-03-03  3:47                                             ` FUJITA Tomonori
2010-03-03  5:10                                               ` Benjamin Herrenschmidt
2010-03-03  5:40                                                 ` James Bottomley
2010-03-03  9:36                                                   ` Russell King - ARM Linux
2010-03-03 10:24                                                     ` James Bottomley
2010-03-03 19:41                                                       ` Russell King - ARM Linux
2010-03-04  2:00                                                   ` Benjamin Herrenschmidt
2010-03-04  8:26                                                     ` James Bottomley
2010-03-04 21:25                                                       ` Benjamin Herrenschmidt
2010-03-03  6:35                                                 ` FUJITA Tomonori
2010-03-03 10:43                                               ` Catalin Marinas
2010-03-03 10:40                                             ` Catalin Marinas
2010-03-03 21:54                                           ` Pavel Machek
2010-03-04  6:54                                             ` Wolfgang Mües
2010-03-04  9:31                                               ` Russell King - ARM Linux
2010-03-06 10:56                                                 ` Wolfgang Mües
2010-03-06 11:05                                                   ` Oliver Neukum
2010-03-06 19:44                                                   ` Russell King - ARM Linux
2010-03-04 13:47                                               ` Catalin Marinas
2010-03-04 13:35                                             ` Catalin Marinas
2010-03-04 13:51                                               ` Pavel Machek
2010-03-04 14:21                                                 ` James Bottomley
2010-03-04 14:27                                                   ` Russell King - ARM Linux
2010-03-04 15:25                                                     ` Catalin Marinas
2010-03-04 15:34                                                       ` Russell King - ARM Linux
2010-03-04 21:31                                                       ` Benjamin Herrenschmidt
2010-03-06 10:47                                                     ` James Bottomley
2010-03-06 19:36                                                       ` Russell King - ARM Linux
2010-03-06 21:07                                                         ` Benjamin Herrenschmidt
2010-03-07  5:54                                                         ` James Bottomley
2010-03-08 11:17                                                         ` Catalin Marinas
2010-03-06 21:03                                                       ` Benjamin Herrenschmidt
2010-03-07  3:37                                                         ` James Bottomley
2010-03-08  8:46                                                           ` FUJITA Tomonori
2010-03-09  2:25                                                           ` Benjamin Herrenschmidt
2010-03-04 15:29                                                   ` Catalin Marinas
2010-03-04 15:41                                                     ` Paul Mundt
2010-03-04 16:30                                                       ` Russell King - ARM Linux
2010-03-04 17:34                                                         ` Catalin Marinas
2010-03-04 17:54                                                           ` Russell King - ARM Linux
2010-03-04 18:07                                                       ` Catalin Marinas
2010-03-04 21:37                                                         ` Benjamin Herrenschmidt
2010-03-04 22:11                                                           ` Catalin Marinas
2010-03-05  4:34                                                             ` Benjamin Herrenschmidt
2010-03-05  9:27                                                               ` Catalin Marinas
2010-03-05  1:17                                                           ` Paul Mundt
2010-03-05  4:44                                                             ` Benjamin Herrenschmidt
2010-03-10  3:52                                                               ` Paul Mundt
2010-03-11 21:44                                                                 ` Benjamin Herrenschmidt
2010-03-04 21:34                                                       ` Benjamin Herrenschmidt
2010-03-04 21:28                                                   ` Benjamin Herrenschmidt
2010-03-04 21:40                                                     ` Russell King - ARM Linux
2010-03-05  4:31                                                       ` Benjamin Herrenschmidt
2010-03-04 15:35                                                 ` Catalin Marinas
2010-03-07  8:23                                                   ` Pavel Machek
2010-03-08 10:57                                                     ` Catalin Marinas
2010-03-02 23:26                                         ` Benjamin Herrenschmidt
2010-03-01 10:42                                     ` Catalin Marinas
2010-03-03 20:24                                       ` Jamie Lokier
2010-02-26 21:40                                 ` Benjamin Herrenschmidt
2010-02-26 21:49                                   ` Russell King - ARM Linux
2010-02-28  0:24                                     ` Benjamin Herrenschmidt
2010-02-28 19:17                                       ` Pavel Machek
2010-03-01 11:10                                       ` Catalin Marinas
2010-03-02  4:11                                         ` Benjamin Herrenschmidt
2010-02-24  2:39                           ` Benjamin Herrenschmidt
2010-02-26 16:44                             ` Catalin Marinas
2010-02-26 21:49                               ` Benjamin Herrenschmidt
2010-02-26 22:03                                 ` Russell King - ARM Linux
2010-02-28  0:29                                   ` Benjamin Herrenschmidt [this message]
2010-02-28 23:20                                   ` Catalin Marinas
2010-02-28 23:17                                 ` Catalin Marinas
2010-02-17 15:27                 ` Catalin Marinas
2010-02-17 15:39                 ` Catalin Marinas
2010-02-17 15:40                 ` Catalin Marinas
2010-02-17 15:40                 ` Catalin Marinas
2010-02-17 16:19                   ` Catalin Marinas
2010-02-17 16:19                   ` Catalin Marinas
2010-02-16  8:44             ` Russell King - ARM Linux
2010-02-16  8:51               ` Gadiyar, Anand
2010-02-20  7:21                 ` Pete Zaitcev

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=1267316993.23523.1857.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=linux-arm-kernel@lists.infradead.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 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).