* [PATCH] virtio-pci: Use PCI MMIO instead of PIO when available
@ 2011-10-12 3:39 Alexey Kardashevskiy
2011-10-12 23:52 ` Rusty Russell
0 siblings, 1 reply; 2+ messages in thread
From: Alexey Kardashevskiy @ 2011-10-12 3:39 UTC (permalink / raw)
To: linux-kernel; +Cc: rusty
Currently virtio-pci is specced so that configuration of the device is
done through a PCI IO space (via BAR 0 of the virtual PCI device).
However, use of PCI IO space (aka PIO) is long deprecated, and can be
awkward to use on some systems (for example IBM pSeries machines
typically have many PCI domains, and not all firmware/hypervisor
versions necessarily support PCI PIO access on all domains).
Therefore, it would be preferable for the virtio virtual PCI device to
advertise a PCI memory space (aka MMIO) BAR and have configuration
done through this interface instead. This can be done backwards
compatibly by advertising the MMIO BAR in addition to the existing PIO
BAR so that the guest driver can choose whichever interface.
In anticipation of adding such an MMIO BAR to virtio host-side
implementations (e.g. qemu), this patch updates the Linux virtio-pci
driver to attempt to use BAR 2 (which will be MMIO) in preference to
the existing PIO BAR 0.
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
index 4fb5b2b..ddad409 100644
--- a/drivers/virtio/virtio_pci.c
+++ b/drivers/virtio/virtio_pci.c
@@ -643,9 +643,13 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev,
if (err)
goto out_enable_device;
- vp_dev->ioaddr = pci_iomap(pci_dev, 0, 0);
- if (vp_dev->ioaddr == NULL)
- goto out_req_regions;
+ vp_dev->ioaddr = pci_iomap(pci_dev, 2, 0);
+ if (vp_dev->ioaddr == NULL) {
+ printk(KERN_INFO "virtio_pci: no memory BAR, falling back to IO\n");
+ vp_dev->ioaddr = pci_iomap(pci_dev, 0, 0);
+ if (vp_dev->ioaddr == NULL)
+ goto out_req_regions;
+ }
pci_set_drvdata(pci_dev, vp_dev);
pci_set_master(pci_dev);
--
Alexey
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] virtio-pci: Use PCI MMIO instead of PIO when available
2011-10-12 3:39 [PATCH] virtio-pci: Use PCI MMIO instead of PIO when available Alexey Kardashevskiy
@ 2011-10-12 23:52 ` Rusty Russell
0 siblings, 0 replies; 2+ messages in thread
From: Rusty Russell @ 2011-10-12 23:52 UTC (permalink / raw)
To: Alexey Kardashevskiy, linux-kernel
On Wed, 12 Oct 2011 14:39:06 +1100, Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
> Currently virtio-pci is specced so that configuration of the device is
> done through a PCI IO space (via BAR 0 of the virtual PCI device).
> However, use of PCI IO space (aka PIO) is long deprecated, and can be
> awkward to use on some systems (for example IBM pSeries machines
> typically have many PCI domains, and not all firmware/hypervisor
> versions necessarily support PCI PIO access on all domains).
>
> Therefore, it would be preferable for the virtio virtual PCI device to
> advertise a PCI memory space (aka MMIO) BAR and have configuration
> done through this interface instead. This can be done backwards
> compatibly by advertising the MMIO BAR in addition to the existing PIO
> BAR so that the guest driver can choose whichever interface.
>
> In anticipation of adding such an MMIO BAR to virtio host-side
> implementations (e.g. qemu), this patch updates the Linux virtio-pci
> driver to attempt to use BAR 2 (which will be MMIO) in preference to
> the existing PIO BAR 0.
Applied. Had to convert spaces to tabs though...
Thanks,
Rusty.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-10-13 0:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-12 3:39 [PATCH] virtio-pci: Use PCI MMIO instead of PIO when available Alexey Kardashevskiy
2011-10-12 23:52 ` Rusty Russell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox