qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alex Williamson <alex.williamson@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
	Jan Kiszka <jan.kiszka@web.de>,
	qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 05/13] pci: Add pci_device_route_intx_to_irq
Date: Sun, 10 Jun 2012 09:25:06 -0600	[thread overview]
Message-ID: <1339341906.26976.254.camel@ul30vt> (raw)
In-Reply-To: <20120610144301.GC8922@redhat.com>

On Sun, 2012-06-10 at 17:43 +0300, Michael S. Tsirkin wrote:
> On Sun, Jun 10, 2012 at 08:19:28AM -0600, Alex Williamson wrote:
> > On Sun, 2012-06-10 at 12:49 +0200, Jan Kiszka wrote:
> > > On 2012-06-10 12:41, Michael S. Tsirkin wrote:
> > > > On Sun, Jun 10, 2012 at 12:08:23PM +0200, Jan Kiszka wrote:
> > > >> On 2012-06-10 11:55, Michael S. Tsirkin wrote:
> > > >>> On Thu, Jun 07, 2012 at 06:46:38PM +0200, Jan Kiszka wrote:
> > > >>>> On 2012-06-07 18:28, Michael S. Tsirkin wrote:
> > > >>>>> On Thu, Jun 07, 2012 at 05:10:17PM +0200, Jan Kiszka wrote:
> > > >>>>>> On 2012-06-07 16:32, Michael S. Tsirkin wrote:
> > > >>>>>>> On Mon, Jun 04, 2012 at 10:52:13AM +0200, Jan Kiszka wrote:
> > > >>>>>>>> @@ -1089,6 +1093,14 @@ static void pci_set_irq(void *opaque, int irq_num, int level)
> > > >>>>>>>>      pci_change_irq_level(pci_dev, irq_num, change);
> > > >>>>>>>>  }
> > > >>>>>>>>  
> > > >>>>>>>> +PCIINTxRoute pci_device_route_intx_to_irq(PCIDevice *dev, int pin)
> > > >>>>>>>> +{
> > > >>>>>>>> +    PCIBus *bus = dev->host_bus;
> > > >>>>>>>> +
> > > >>>>>>>> +    assert(bus->route_intx_to_irq);
> > > >>>>>>>> +    return bus->route_intx_to_irq(bus->irq_opaque, dev->host_intx_pin[pin]);
> > > >>>>>>>> +}
> > > >>>>>>>> +
> > > >>>>>>>>  /***********************************************************/
> > > >>>>>>>>  /* monitor info on PCI */
> > > >>>>>>>>  
> > > >>>>>>>
> > > >>>>>>> Just an idea: can devices cache this result, bypassing the
> > > >>>>>>> intx to irq lookup on data path?
> > > >>>>>>
> > > >>>>>> That lookup is part of set_irq which we don't bypass so far and where
> > > >>>>>> this is generally trivial. If we want to cache the effects of set_irq as
> > > >>>>>> well, I guess things would become pretty complex (e.g. due to vmstate
> > > >>>>>> compatibility), and I'm unsure if it would buy us much.
> > > >>>>>
> > > >>>>> This is less for performance but more for making
> > > >>>>> everyone use the same infrastructure rather than
> > > >>>>> assigned devices being the weird case.
> > > >>>>
> > > >>>> Device assignment is weird. It bypasses all state updates as it does not
> > > >>>> have to bother about migratability.
> > > >>>>
> > > >>>> Well, of course we could cache the host bridge routing result as well,
> > > >>>> for every device. It would have to be in addition to host_intx_pin. But
> > > >>>> the result would look pretty strange to me.
> > > >>>>
> > > >>>> In any case, I would prefer to do this, if at all, on top of this
> > > >>>> series, specifically as it will require to touch all host bridges.
> > > >>>
> > > >>> I'd like to ponder this a bit more then.
> > > >>>
> > > >>> If the claim is that device assignment is only needed for
> > > >>> piix anyway, then why not make it depend on piix *explicitly*?
> > > >>> Yes ugly but this will make it very easy to find and
> > > >>> address any missing pieces.
> > > >>
> > > >> Because it is conceptually independent of the PIIX, we will need it for
> > > >> successors of that x86 chipset as well, and I won't add the ugly hack of
> > > >> qemu-kvm upstream
> > > > 
> > > > So you look at an API and see it requires a route
> > > > callback. And you ask "why doesn't chipset X implement it"?
> > > > And the answer is "because it's only used by device assignment".
> > > > Which you will only know if you read this thread. So it's
> > > > a hack. And I'd rather have the hacks in device-assignment.c
> > > > than in pci.c even if the former are nastier.
> > > 
> > > I don't share your view on this. It is surely _not_ a hack, specifically
> > > when compared to what we have so far and what could be done otherwise,
> > > e.g. hacking device-assignment and PIIX to make them cooperate (sorry, I
> > > would vote against such an attempt). This is just a partially used
> > > generic API. Any chipset not providing the required routing function
> > > will cause an assert once some tries to make use of it.
> > 
> > I agree, and frankly it sounds like a rather biased attitude against
> > device assignment.
> > piix and q35 may be the only initial chipsets to
> > implement this, but VFIO is designed to be architecture neutral.  It's
> > already working on POWER.
> 
> Not with this patch it doesn't.

Alexey, how are you handling INTx routing and EOI on POWER?

> >  Interrupt routing is one of the most
> > intrusive parts because we cannot know from inside the device assignment
> > code how the chipset exposes intx out to an irq.  Jan's interface makes
> > it easy for a chipset to add this, versus hacks in device assignment
> > code, even if they were possible.  If it needs to be tweaked for other
> > chipsets, we'll do that when they come.  Please don't roadblock device
> > assignment or VFIO support by not allowing us a well architected,
> > generic interface to track interrupts.  Thanks,
> > 
> > Alex
> 
> Problems are:
> 1. This sticks NULL in all chipsets except one. This means it's
>    hard to find and fill out.

I don't buy that.  Look for all the callers, find the one that's not
NULL, look at what it does...  How's that a problem?  This can be solved
by documentation.

> 2. Adds a function, in every chipset, that is only used by assignment.
>    This means many maintainers have no way to test it.

It's effectively optional, so they don't have to implement it.  They can
wait to care about it until they want device assignment.  This can also
be solved by documentation so the maintainer knows when and how this is
used and can choose to implement it or not.

> Ways to handle this that came up so far, in order of my preference:
> 1. Cache all of route in devices.

How do we get the route to cache it?

> 2. Some ugly hack in device assignment.

We still have the problem of how do we get the route to start with?

> 3. Merge as is and fix it when it gets broken.

Isn't that how open source works? ;^)

> So if you expect me to merge this work, then either Jan does (1), or
> gives up and does (2), or I find some time and do (1), or I fail to do
> (1) and get convinced that we need to do (3). Or someone else gets
> involved.

I still have trouble seeing how (3) is a problem.  The translation of an
INTx to an irq is chipset specific.  We need a chipset function to
perform that transform.  We don't know how to do this for every chipset
in the tree, nor do many of those chipset care at the moment about
device assignment.  Jan has created an arrangement where chipsets can
easily opt-in to this support.  Aside from asking us to go spend a month
digging up specs for every chipset in tree and trying to implement this
ourselves, what kind of enhancement to the interface are you looking
for?  Thanks,

Alex

  reply	other threads:[~2012-06-10 15:25 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-04  8:52 [Qemu-devel] [PATCH 00/13] pci: Cleanups & preparations for KVM device assignment Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 01/13] pci: Refactor pci_change_irq_level Jan Kiszka
2012-06-10 11:28   ` Michael S. Tsirkin
2012-06-04  8:52 ` [Qemu-devel] [PATCH 02/13] pci: Fold pci_bus_new_inplace into pci_bus_new Jan Kiszka
2012-06-07 12:51   ` Andreas Färber
2012-06-07 15:07     ` Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 03/13] pci: Introduce cached device INTx routing Jan Kiszka
2012-06-10 11:28   ` Michael S. Tsirkin
2012-06-04  8:52 ` [Qemu-devel] [PATCH 04/13] pci: Rename map_irq to route_pin Jan Kiszka
2012-06-10 11:28   ` Michael S. Tsirkin
2012-06-10 13:23   ` Michael S. Tsirkin
2012-06-04  8:52 ` [Qemu-devel] [PATCH 05/13] pci: Add pci_device_route_intx_to_irq Jan Kiszka
2012-06-07 14:32   ` Michael S. Tsirkin
2012-06-07 15:10     ` Jan Kiszka
2012-06-07 16:28       ` Michael S. Tsirkin
2012-06-07 16:46         ` Jan Kiszka
2012-06-07 16:55           ` Michael S. Tsirkin
2012-06-10  9:55           ` Michael S. Tsirkin
2012-06-10 10:08             ` Jan Kiszka
2012-06-10 10:41               ` Michael S. Tsirkin
2012-06-10 10:49                 ` Jan Kiszka
2012-06-10 10:53                   ` Michael S. Tsirkin
2012-06-10 14:19                   ` Alex Williamson
2012-06-10 14:43                     ` Michael S. Tsirkin
2012-06-10 15:25                       ` Alex Williamson [this message]
2012-06-10 15:55                         ` Michael S. Tsirkin
2012-06-10 16:30                           ` Jan Kiszka
2012-06-10 16:50                             ` Michael S. Tsirkin
2012-06-10 17:04                               ` Michael S. Tsirkin
2012-06-04  8:52 ` [Qemu-devel] [PATCH 06/13] pci: Add INTx routing notifier Jan Kiszka
2012-06-07 13:14   ` Michael S. Tsirkin
2012-06-07 15:13     ` Jan Kiszka
2012-06-08 12:47   ` [Qemu-devel] [PATCH v2 " Jan Kiszka
2012-06-10  9:48   ` [Qemu-devel] [PATCH " Michael S. Tsirkin
2012-06-10 10:05     ` Jan Kiszka
2012-06-10 10:33       ` Michael S. Tsirkin
2012-06-10 10:44         ` Jan Kiszka
2012-06-10 11:11           ` Michael S. Tsirkin
2012-06-10 11:18             ` Jan Kiszka
2012-06-10 11:39               ` Michael S. Tsirkin
2012-06-10 12:09                 ` Jan Kiszka
2012-06-10 12:16                   ` Michael S. Tsirkin
2012-06-10 12:33                     ` Jan Kiszka
2012-06-10 12:42                       ` Michael S. Tsirkin
2012-06-10 12:47                         ` Jan Kiszka
2012-06-10 13:19                           ` Michael S. Tsirkin
2012-06-10 12:32               ` Michael S. Tsirkin
2012-06-04  8:52 ` [Qemu-devel] [PATCH 07/13] pci: Make domain and bus unsigned in pci_read_devaddr Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 08/13] pci: Export pci_parse_devaddr instead of pci_read_devaddr Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 09/13] pci: Introduce and apply PCIDeviceAddress Jan Kiszka
2012-06-10  9:37   ` Michael S. Tsirkin
2012-06-10 10:10     ` Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 10/13] pci: Fix coding style of pci_parse_devaddr Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 11/13] Move pci_parse_devaddr to qdev-properties Jan Kiszka
2012-06-07 12:57   ` Andreas Färber
2012-06-07 15:11     ` Jan Kiszka
2012-06-07 15:56       ` Andreas Färber
2012-06-08 10:57         ` Jan Kiszka
2012-06-08 12:03           ` Andreas Färber
2012-06-08 12:14             ` Jan Kiszka
2012-06-08 12:18               ` Andreas Färber
2012-06-08 12:45                 ` Jan Kiszka
2012-06-08 14:17                   ` Michael S. Tsirkin
2012-06-08 14:20                     ` Anthony Liguori
2012-06-08 13:55     ` Anthony Liguori
2012-06-08 19:21       ` Andreas Färber
2012-06-04  8:52 ` [Qemu-devel] [PATCH 12/13] qdev-properties: Use qemu_parse_pci_devaddr for pci-devfn property Jan Kiszka
2012-06-04  8:52 ` [Qemu-devel] [PATCH 13/13] qdev-properties: Add pci-devaddr property Jan Kiszka
2012-06-10  9:35   ` Michael S. Tsirkin
2012-06-10 10:14     ` Jan Kiszka
2012-06-10 10:49       ` Michael S. Tsirkin
2012-06-10 10:52         ` Jan Kiszka
2012-06-10 10:58           ` Michael S. Tsirkin
2012-06-10 11:00             ` Jan Kiszka
2012-06-10 11:17               ` Michael S. Tsirkin
2012-06-10 11:25                 ` Jan Kiszka
2012-06-10 12:01                   ` Michael S. Tsirkin
2012-06-10 13:41                     ` Alex Williamson
2012-06-10 14:03                       ` Michael S. Tsirkin
2012-06-10 14:41                         ` Alex Williamson
2012-06-10 14:54                           ` Michael S. Tsirkin
2012-06-10 15:15                             ` Alex Williamson
2012-06-10 15:37                               ` Michael S. Tsirkin
2012-06-10 15:58                                 ` Alex Williamson
2012-06-10 16:22                                   ` Michael S. Tsirkin
2012-06-10 17:29                                     ` Alex Williamson
2012-06-10 17:57                                       ` Michael S. Tsirkin
2012-06-10 13:49       ` Michael S. Tsirkin

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=1339341906.26976.254.camel@ul30vt \
    --to=alex.williamson@redhat.com \
    --cc=aik@ozlabs.ru \
    --cc=jan.kiszka@web.de \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.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).