From: ebiederm@xmission.com (Eric W. Biederman)
To: Grant Grundler <grundler@parisc-linux.org>
Cc: Greg Kroah-Hartman <greg@kroah.com>,
Kyle McMartin <kyle@parisc-linux.org>,
linuxppc-dev@ozlabs.org, Brice Goglin <brice@myri.com>,
shaohua.li@intel.com, linux-pci@atrey.karlin.mff.cuni.cz,
"David S.Miller" <davem@davemloft.net>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [RFC/PATCH 14/16] MPIC MSI backend
Date: Fri, 26 Jan 2007 10:56:35 -0700 [thread overview]
Message-ID: <m1ejphvfho.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <20070126171928.GA22275@colo.lackof.org> (Grant Grundler's message of "Fri, 26 Jan 2007 10:19:28 -0700")
Grant Grundler <grundler@parisc-linux.org> writes:
> On Fri, Jan 26, 2007 at 09:32:33AM -0700, Eric W. Biederman wrote:
>> > Well of course it's connected to real hardware. The virq
>> > numbers are a flat space; hwirqs are not (those are relative
>> > to one certain interrupt controller) so virqs are easier
>> > in use.
>>
>> ....However they are the linux abstraction of the hardware and
>> as such a useful mapping to the hardware is not required.
>
> What?!!! The whole point of the abstraction ("flat space") is
> to be able to do reverse lookups for additional information.
Yes. But that doesn't mean the number has any useful meaning
in and of itself. Just that you can index into a table and
get that meaning. (i.e. If you are a human being or anything
outside of the kernel you may not be able to do a reverse lookup
because you don't have the table.)
>> ia64 is the strong culprit
>> in this regard, and simply picks the next free number it can use
>> when a device asks for an irq.
>
> I think this is the only viable aproach to support MSI migration.
> Basing the "virq" value on bits in the addr/data pair can't migrate.
Thus my initial surprise at people not liking create_irq().
If the irq controller the msi arrives at can redirect the irq the
bits in the msi message could have some connection to the irq number.
Likewise if some of those bits have nothing to do with migration.
For irqs going across traces on a motherboard and into interrupt pins
you can embed a lot of that knowledge into the irq number. For MSI
with arbitrary programmable connections the numbers have less meaning
and less need of meaning in that sense.
> ...
>> The minimum silicon version of the destination of an MSI really only
>> needs the ability to record that it happened.
>
> "it" == record the data value sent to a specific address.
The data value the address something. You don't have to reply msi's
are edge triggered and non-acknowledged so you just need to record
enough for the software to figure it out.
> If the IRQ handler lookup is done in HW it can save us a substantial number
> of CPU cycles before we invoke the corresponding handler.
Maybe. I would love to see a useful implementation of that.
>> A prioiri setup of the
>> controller (in hardware) for each individual MSI source interrupt
>> seems to imply extra hardware logic, and limit the total number of
>> MSI's the system can handle for no apparent reason. For that
>> reason I expect more systems to do things closer to how x86 does it.
>> If for no other reason than because it is less logic to validate.
>
> It doesn't matter how many systems "do things closer to how x86"
> works since 95% (or more) of the systems running linux are x86.
> Linux MSI support must work on x86.
>
> Helping Michael make it work would be a constructive way forward.
> I think Michael has the abstraction correct so it's NOT x86 centric
> but still works optimally on x86.
NO NO NO NO Michaels abstraction does not work on x86.
Which is a big part of the my problem.
Michaels abstraction does not allow me to migrate irqs on x86.
setup_msi_msg only gets called when you enable the msi. Nothing
gets called when irqbalaced changes the cpu mask, and there is no
support that would allow that with Michael's msi ops.
I can't use Michaels msi_ops as they stand.
They also have the problem of trying to exist at two different levels
of the interrupt hierarchy setup hierarchy simultaneously which is
another part of the problem.
Micaheal's code is simple beautiful and doesn't work on x86, because
he has not implemented what needs to be there.
That is why I have asked for an evolutionary approach and not this
stupid drop and replace attempt.
Sorry for the rant I'm just a little annoyed that you hadn't hurd that
what Micahel is doing does not work on x86.
>> On x86 the only hardware we have to deal with is the 8 bit number
>> delivered to the cpu at interrupt time and the MSI registers.
>
> 8 bit number? That's the Intel Interrupt architecture definition.
> The PCI spec defines 16-bit messages for MSI. The chipsets
> can implement any number of bits they want up to that limits.
I said on x86. The cpu receives a 8 bit number.
>> All of
>> the rest of the x86 logic needed to translate MSI interrupts to
>> processor bus messages and the like has no registers we can set
>
> Are the EID and ID fields defined in Intel adrresses not programmable?
> Those are part of the MSI address.
All msi address on x86 by definition are of the form 0xffe????? if I
have remembered the address correctly. ia64 doesn't have that rule.
>> and
>> always behaves exactly the same way so is for all intents and purposes
>> transparent. The PCI-HT bridge logic for MSI is the most visible our
>> logic for MSI ever becomes. As for the destination window it is an
>> architecturally defined target with fixed meanings for all of the bits
>> on every system. So by transparent I mean that we don't have to
>> perform any per irq setup in the hardware except the pci card to make
>> MSI's work.
>
> I had the impression "we" was the OS and the setup was being done by BIOS.
> IIRC, main reason for doing setup in BIOS was to enable existing OS versions
> to run new HW without any changes. Paying customers like that sort of thing.
There is an architectural definition of how irq work on x86. The BIOS
sets up the hardware to match that definition if there are any registers
to setup. Things like the PCI-HT bridge registers. There are no
registers that need to be setup on a per msi basis.
Eric
next prev parent reply other threads:[~2007-01-26 17:57 UTC|newest]
Thread overview: 178+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-25 8:34 [RFC/PATCH 0/16] Ops based MSI Implementation Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 1/16] Replace pci_msi_quirk with calls to pci_no_msi() Michael Ellerman
2007-01-25 22:33 ` patch msi-replace-pci_msi_quirk-with-calls-to-pci_no_msi.patch added to gregkh-2.6 tree gregkh
2007-01-25 8:34 ` [RFC/PATCH 2/16] Remove pci_scan_msi_device() Michael Ellerman
2007-01-25 22:33 ` patch msi-remove-pci_scan_msi_device.patch added to gregkh-2.6 tree gregkh
2007-01-25 8:34 ` [RFC/PATCH 3/16] Combine pci_(save|restore)_msi/msix_state Michael Ellerman
2007-01-25 22:33 ` patch msi-combine-pci__msi-msix_state.patch added to gregkh-2.6 tree gregkh
2007-01-25 8:34 ` [RFC/PATCH 4/16] Abstract MSI suspend Michael Ellerman
2007-01-25 22:33 ` patch msi-abstract-msi-suspend.patch added to gregkh-2.6 tree gregkh
2007-01-28 8:27 ` [RFC/PATCH 4/16] Abstract MSI suspend Eric W. Biederman
2007-01-29 7:22 ` Michael Ellerman
2007-01-29 8:45 ` Eric W. Biederman
2007-01-29 9:47 ` Michael Ellerman
2007-01-29 16:52 ` Grant Grundler
2007-01-29 16:57 ` Roland Dreier
2007-01-29 17:02 ` Roland Dreier
2007-01-29 17:25 ` Eric W. Biederman
2007-01-29 17:32 ` Roland Dreier
2007-01-29 22:03 ` Grant Grundler
2007-01-29 17:20 ` Eric W. Biederman
2007-02-01 4:24 ` Greg KH
2007-01-25 8:34 ` [RFC/PATCH 5/16] Ops based MSI implementation Michael Ellerman
2007-01-25 21:52 ` Greg KH
2007-01-25 22:05 ` Roland Dreier
2007-01-25 22:10 ` Greg KH
2007-01-26 1:02 ` Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 6/16] Add bare metal MSI enable & disable routines Michael Ellerman
2007-01-26 5:35 ` Eric W. Biederman
2007-01-25 8:34 ` [RFC/PATCH 7/16] Rip out the existing powerpc msi stubs Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 8/16] Enable MSI on Powerpc Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 9/16] RTAS MSI implementation Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 10/16] Add a pci_irq_fixup for MSI via RTAS Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 12/16] Tell firmware we support MSI Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 11/16] Activate MSI via RTAS on pseries Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 13/16] MPIC MSI allocator Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 14/16] MPIC MSI backend Michael Ellerman
2007-01-26 6:43 ` Grant Grundler
2007-01-26 7:02 ` Eric W. Biederman
2007-01-26 8:47 ` Segher Boessenkool
2007-01-26 16:32 ` Eric W. Biederman
2007-01-26 17:19 ` Grant Grundler
2007-01-26 17:56 ` Eric W. Biederman [this message]
2007-01-26 22:48 ` Benjamin Herrenschmidt
2007-01-27 7:01 ` Michael Ellerman
2007-01-26 22:40 ` Benjamin Herrenschmidt
2007-01-27 2:11 ` David Miller
2007-01-26 22:08 ` Benjamin Herrenschmidt
2007-01-27 6:54 ` Michael Ellerman
2007-01-26 20:50 ` Benjamin Herrenschmidt
2007-01-26 22:46 ` Paul Mackerras
2007-01-27 2:46 ` Eric W. Biederman
2007-01-27 3:02 ` David Miller
2007-01-27 4:28 ` Eric W. Biederman
2007-01-27 18:30 ` Grant Grundler
2007-01-27 20:02 ` Benjamin Herrenschmidt
2007-01-26 20:41 ` Benjamin Herrenschmidt
2007-01-26 9:11 ` Segher Boessenkool
2007-01-27 6:33 ` Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 15/16] Enable MSI mappings for MPIC Michael Ellerman
2007-01-25 8:34 ` [RFC/PATCH 16/16] Activate MSI for the MPIC backend on U3 Michael Ellerman
2007-01-25 21:53 ` [RFC/PATCH 0/16] Ops based MSI Implementation Greg KH
2007-01-25 21:55 ` David Miller
2007-01-26 1:05 ` Michael Ellerman
2007-01-26 1:03 ` Michael Ellerman
2007-01-26 6:18 ` Eric W. Biederman
2007-01-26 6:56 ` Grant Grundler
2007-01-26 7:15 ` Eric W. Biederman
2007-01-26 7:48 ` Grant Grundler
2007-01-26 15:26 ` Eric W. Biederman
2007-01-26 21:58 ` Benjamin Herrenschmidt
2007-01-26 8:57 ` Segher Boessenkool
2007-01-26 17:27 ` Grant Grundler
2007-01-26 20:57 ` Benjamin Herrenschmidt
2007-01-26 21:24 ` Benjamin Herrenschmidt
2007-01-27 5:41 ` Michael Ellerman
2007-01-28 6:16 ` Eric W. Biederman
2007-01-28 8:12 ` Michael Ellerman
2007-01-28 8:36 ` Eric W. Biederman
2007-01-28 20:14 ` Benjamin Herrenschmidt
2007-01-28 20:53 ` Eric W. Biederman
2007-01-28 21:17 ` Benjamin Herrenschmidt
2007-01-28 22:36 ` Eric W. Biederman
2007-01-28 23:17 ` Benjamin Herrenschmidt
2007-01-28 23:38 ` Eric W. Biederman
2007-01-28 23:51 ` David Miller
2007-01-29 0:58 ` Benjamin Herrenschmidt
2007-01-29 1:13 ` David Miller
2007-01-29 3:17 ` Benjamin Herrenschmidt
2007-01-29 4:19 ` David Miller
2007-01-29 4:44 ` Benjamin Herrenschmidt
2007-01-29 5:46 ` Eric W. Biederman
2007-01-29 6:08 ` Benjamin Herrenschmidt
2007-01-31 6:52 ` David Miller
2007-01-31 7:40 ` Eric W. Biederman
2007-02-01 0:55 ` David Miller
2007-01-29 0:26 ` Benjamin Herrenschmidt
2007-01-29 0:59 ` Michael Ellerman
2007-01-28 23:31 ` David Miller
2007-01-28 23:59 ` Benjamin Herrenschmidt
2007-01-28 23:26 ` David Miller
2007-01-28 23:25 ` David Miller
2007-01-27 4:59 ` Michael Ellerman
2007-01-28 19:40 ` [PATCH 0/6] MSI portability cleanups Eric W. Biederman
2007-01-28 19:40 ` Eric W. Biederman
2007-01-28 19:42 ` [PATCH 1/6] msi: Kill msi_lookup_irq Eric W. Biederman
2007-01-28 19:42 ` Eric W. Biederman
2007-01-28 19:44 ` [PATCH 2/6] msi: Remove msi_lock Eric W. Biederman
2007-01-28 19:44 ` Eric W. Biederman
2007-01-28 19:45 ` [PATCH 3/6] msi: Fix msi_remove_pci_irq_vectors Eric W. Biederman
2007-01-28 19:45 ` Eric W. Biederman
2007-01-28 19:47 ` [PATCH 4/6] msi: Remove attach_msi_entry Eric W. Biederman
2007-01-28 19:47 ` Eric W. Biederman
2007-01-28 19:52 ` [PATCH 5/6] msi: Kill the msi_desc array Eric W. Biederman
2007-01-28 19:52 ` Eric W. Biederman
2007-01-28 19:56 ` [PATCH 6/6] msi: Make MSI useable more architectures Eric W. Biederman
2007-01-28 19:56 ` Eric W. Biederman
2007-02-01 6:08 ` patch msi-make-msi-useable-more-architectures.patch added to gregkh-2.6 tree gregkh
2007-02-01 6:07 ` patch msi-kill-the-msi_desc-array.patch " gregkh
2007-02-01 6:08 ` patch msi-remove-attach_msi_entry.patch " gregkh
2007-02-01 6:07 ` patch msi-fix-msi_remove_pci_irq_vectors.patch " gregkh
2007-02-01 6:08 ` patch msi-remove-msi_lock.patch " gregkh
2007-01-28 22:01 ` [PATCH 1/6] msi: Kill msi_lookup_irq Paul Mackerras
2007-01-28 22:01 ` Paul Mackerras
2007-01-28 22:18 ` Eric W. Biederman
2007-01-28 22:18 ` Eric W. Biederman
2007-02-01 6:07 ` patch msi-kill-msi_lookup_irq.patch added to gregkh-2.6 tree gregkh
2007-01-28 20:23 ` [PATCH 0/6] MSI portability cleanups Benjamin Herrenschmidt
2007-01-28 20:23 ` Benjamin Herrenschmidt
2007-01-28 20:47 ` Jeff Garzik
2007-01-28 20:47 ` Jeff Garzik
2007-01-28 21:20 ` Eric W. Biederman
2007-01-28 21:20 ` Eric W. Biederman
2007-01-28 21:26 ` Ingo Molnar
2007-01-28 21:26 ` Ingo Molnar
2007-01-28 22:09 ` Benjamin Herrenschmidt
2007-01-28 22:09 ` Benjamin Herrenschmidt
2007-01-28 23:26 ` Eric W. Biederman
2007-01-28 23:26 ` Eric W. Biederman
2007-01-28 23:37 ` David Miller
2007-01-28 23:37 ` David Miller
2007-01-29 5:18 ` Eric W. Biederman
2007-01-29 5:18 ` Eric W. Biederman
2007-01-29 5:25 ` David Miller
2007-01-29 5:25 ` David Miller
2007-01-29 5:58 ` Eric W. Biederman
2007-01-29 5:58 ` Eric W. Biederman
2007-01-29 6:05 ` Benjamin Herrenschmidt
2007-01-29 6:05 ` Benjamin Herrenschmidt
2007-01-29 8:28 ` Eric W. Biederman
2007-01-29 8:28 ` Eric W. Biederman
2007-01-29 9:03 ` Eric W. Biederman
2007-01-29 9:03 ` Eric W. Biederman
2007-01-29 10:11 ` Michael Ellerman
2007-01-29 10:11 ` Michael Ellerman
2007-01-29 20:32 ` Benjamin Herrenschmidt
2007-01-29 20:32 ` Benjamin Herrenschmidt
2007-01-29 23:29 ` Paul Mackerras
2007-01-29 23:29 ` Paul Mackerras
2007-01-29 23:40 ` Benjamin Herrenschmidt
2007-01-29 23:40 ` Benjamin Herrenschmidt
2007-01-29 20:22 ` Benjamin Herrenschmidt
2007-01-29 20:22 ` Benjamin Herrenschmidt
2007-01-29 23:05 ` Paul Mackerras
2007-01-29 23:05 ` Paul Mackerras
2007-01-30 19:32 ` Segher Boessenkool
2007-01-30 19:32 ` Segher Boessenkool
2007-01-29 1:33 ` Benjamin Herrenschmidt
2007-01-29 1:33 ` Benjamin Herrenschmidt
2007-02-01 4:29 ` Greg KH
2007-02-01 4:29 ` Greg KH
2007-01-28 23:44 ` David Miller
2007-01-28 23:44 ` David Miller
2007-01-28 22:11 ` Eric W. Biederman
2007-01-28 22:11 ` Eric W. Biederman
2007-01-28 23:42 ` David Miller
2007-01-28 23:42 ` David Miller
2007-01-28 21:34 ` Eric W. Biederman
2007-01-28 21:34 ` Eric W. Biederman
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=m1ejphvfho.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=brice@myri.com \
--cc=davem@davemloft.net \
--cc=greg@kroah.com \
--cc=grundler@parisc-linux.org \
--cc=kyle@parisc-linux.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
--cc=linuxppc-dev@ozlabs.org \
--cc=shaohua.li@intel.com \
/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.