All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
	qemu-devel@nongnu.org, Alex Graf <agraf@suse.de>,
	kvm@vger.kernel.org, David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [RFC PATCH] vfio: add fixup for broken PCI devices
Date: Thu, 07 Jun 2012 12:52:37 +1000	[thread overview]
Message-ID: <1339037557.24838.2.camel@pasglop> (raw)
In-Reply-To: <1339024663.23475.338.camel@bling.home>

On Wed, 2012-06-06 at 17:17 -0600, Alex Williamson wrote:
> > diff --git a/drivers/vfio/pci/vfio_pci.c
> b/drivers/vfio/pci/vfio_pci.c
> > index 1e5315c..6e7c12d 100644
> > --- a/drivers/vfio/pci/vfio_pci.c
> > +++ b/drivers/vfio/pci/vfio_pci.c
> > @@ -88,6 +88,8 @@ static void vfio_pci_disable(struct
> vfio_pci_device *vdev)
> >  {
> >       int bar;
> >  
> > +     pci_fixup_device(pci_fixup_final, vdev->pdev);
> > +
> >       pci_disable_device(vdev->pdev);
> >  
> >       vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE |
> 
> Sorry, just taking a look at this again.  Do you have any idea what
> fixup it is that makes it work?  Calling a fixup at this point seems
> rather odd.  I suspect the problem is that vfio is only calling
> pci_load_and_free_saved_state if pci_reset_function reports that it
> worked.  kvm device assignment doesn't do that and I'm not sure why I
> did that.  If you unconditionally call pci_load_and_free_saved_state a
> bit further down in this function, does it solve the problem?  

No it won't do, you need device-specific "reset" fixup code for devices
where the function reset doesn't do the right thing.

My suggestion is to add a new quirk category (in addition to
early,late,... add reset) and call that here.

Then we can do one for the NEC OHCI that properly stops the controller,
among others. I would be -very- surprised if that chip ends up being the
only one causing that sort of trouble.

Also, some chips will need some "tweaks" after the reset, for example if
we do a full link reset, I know of at least one device that might
randomly fail to properly train the PCIe link, such a quirk is a perfect
spot to add the right fixup.

Cheers,
Ben.

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
	qemu-devel@nongnu.org, Alex Graf <agraf@suse.de>,
	kvm@vger.kernel.org, David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [RFC PATCH] vfio: add fixup for broken PCI devices
Date: Thu, 07 Jun 2012 12:52:37 +1000	[thread overview]
Message-ID: <1339037557.24838.2.camel@pasglop> (raw)
In-Reply-To: <1339024663.23475.338.camel@bling.home>

On Wed, 2012-06-06 at 17:17 -0600, Alex Williamson wrote:
> > diff --git a/drivers/vfio/pci/vfio_pci.c
> b/drivers/vfio/pci/vfio_pci.c
> > index 1e5315c..6e7c12d 100644
> > --- a/drivers/vfio/pci/vfio_pci.c
> > +++ b/drivers/vfio/pci/vfio_pci.c
> > @@ -88,6 +88,8 @@ static void vfio_pci_disable(struct
> vfio_pci_device *vdev)
> >  {
> >       int bar;
> >  
> > +     pci_fixup_device(pci_fixup_final, vdev->pdev);
> > +
> >       pci_disable_device(vdev->pdev);
> >  
> >       vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE |
> 
> Sorry, just taking a look at this again.  Do you have any idea what
> fixup it is that makes it work?  Calling a fixup at this point seems
> rather odd.  I suspect the problem is that vfio is only calling
> pci_load_and_free_saved_state if pci_reset_function reports that it
> worked.  kvm device assignment doesn't do that and I'm not sure why I
> did that.  If you unconditionally call pci_load_and_free_saved_state a
> bit further down in this function, does it solve the problem?  

No it won't do, you need device-specific "reset" fixup code for devices
where the function reset doesn't do the right thing.

My suggestion is to add a new quirk category (in addition to
early,late,... add reset) and call that here.

Then we can do one for the NEC OHCI that properly stops the controller,
among others. I would be -very- surprised if that chip ends up being the
only one causing that sort of trouble.

Also, some chips will need some "tweaks" after the reset, for example if
we do a full link reset, I know of at least one device that might
randomly fail to properly train the PCIe link, such a quirk is a perfect
spot to add the right fixup.

Cheers,
Ben.

  reply	other threads:[~2012-06-07  2:52 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-25  7:35 [RFC PATCH] vfio: add fixup for broken PCI devices Alexey Kardashevskiy
2012-05-25  7:35 ` [Qemu-devel] " Alexey Kardashevskiy
2012-05-25  8:28 ` Benjamin Herrenschmidt
2012-05-25  8:28   ` [Qemu-devel] " Benjamin Herrenschmidt
2012-05-25 12:24   ` Alex Williamson
2012-05-25 12:24     ` [Qemu-devel] " Alex Williamson
2012-05-25 12:36     ` Benjamin Herrenschmidt
2012-05-25 12:36       ` [Qemu-devel] " Benjamin Herrenschmidt
2012-05-28 12:44 ` Michael S. Tsirkin
2012-05-28 12:44   ` Michael S. Tsirkin
2012-05-28 12:48   ` Jan Kiszka
2012-05-28 12:48     ` Jan Kiszka
2012-05-28 13:15     ` Michael S. Tsirkin
2012-05-28 13:15       ` Michael S. Tsirkin
2012-06-06 23:17 ` Alex Williamson
2012-06-06 23:17   ` [Qemu-devel] " Alex Williamson
2012-06-07  2:52   ` Benjamin Herrenschmidt [this message]
2012-06-07  2:52     ` Benjamin Herrenschmidt
2012-06-07  3:56     ` Alex Williamson
2012-06-07  3:56       ` Alex Williamson
2012-06-07  4:37       ` Benjamin Herrenschmidt
2012-06-07  4:37         ` [Qemu-devel] " Benjamin Herrenschmidt
2012-06-22  8:16   ` Alexey Kardashevskiy
2012-06-22  8:16     ` [Qemu-devel] " Alexey Kardashevskiy
2012-08-17 14:28     ` Alexey Kardashevskiy
2012-08-17 14:28       ` [Qemu-devel] " Alexey Kardashevskiy
2012-08-21  2:31       ` Alex Williamson
2012-08-21  2:31         ` [Qemu-devel] " Alex Williamson

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=1339037557.24838.2.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=alex.williamson@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=kvm@vger.kernel.org \
    --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 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.