From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v2 2/2] pci: Add INTx routing notifier
Date: Thu, 19 Jul 2012 17:16:02 +0300 [thread overview]
Message-ID: <20120719141602.GB12118@redhat.com> (raw)
In-Reply-To: <0de594d38ac7479645bb71547665ebf64418c9ce.1341232709.git.jan.kiszka@siemens.com>
On Mon, Jul 02, 2012 at 02:38:47PM +0200, Jan Kiszka wrote:
> This per-device notifier shall be triggered by any interrupt router
> along the path of a device's legacy interrupt signal on routing changes.
> For simplicity reasons and as this is a slow path anyway, no further
> details on the routing changes are provided. Instead, the callback is
> expected to use pci_device_route_intx_to_irq to check the effect of the
> change.
>
> Will be used by KVM PCI device assignment and VFIO.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Thanks, applied.
> ---
> hw/pci.c | 23 +++++++++++++++++++++++
> hw/pci.h | 7 +++++++
> hw/piix_pci.c | 2 ++
> 3 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/hw/pci.c b/hw/pci.c
> index 311ba09..772141a 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -1095,6 +1095,29 @@ PCIINTxRoute pci_device_route_intx_to_irq(PCIDevice *dev, int pin)
> return bus->route_intx_to_irq(bus->irq_opaque, pin);
> }
>
> +void pci_bus_fire_intx_routing_notifier(PCIBus *bus)
> +{
> + PCIDevice *dev;
> + PCIBus *sec;
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) {
> + dev = bus->devices[i];
> + if (dev && dev->intx_routing_notifier) {
> + dev->intx_routing_notifier(dev);
> + }
> + QLIST_FOREACH(sec, &bus->child, sibling) {
> + pci_bus_fire_intx_routing_notifier(sec);
> + }
> + }
> +}
> +
> +void pci_device_set_intx_routing_notifier(PCIDevice *dev,
> + PCIINTxRoutingNotifier notifier)
> +{
> + dev->intx_routing_notifier = notifier;
> +}
> +
> /***********************************************************/
> /* monitor info on PCI */
>
> diff --git a/hw/pci.h b/hw/pci.h
> index 387111b..c4382a1 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -182,6 +182,7 @@ typedef struct PCIDeviceClass {
> const char *romfile;
> } PCIDeviceClass;
>
> +typedef void (*PCIINTxRoutingNotifier)(PCIDevice *dev);
> typedef int (*MSIVectorUseNotifier)(PCIDevice *dev, unsigned int vector,
> MSIMessage msg);
> typedef void (*MSIVectorReleaseNotifier)(PCIDevice *dev, unsigned int vector);
> @@ -259,6 +260,9 @@ struct PCIDevice {
> MemoryRegion rom;
> uint32_t rom_bar;
>
> + /* INTx routing notifier */
> + PCIINTxRoutingNotifier intx_routing_notifier;
> +
> /* MSI-X notifiers */
> MSIVectorUseNotifier msix_vector_use_notifier;
> MSIVectorReleaseNotifier msix_vector_release_notifier;
> @@ -319,6 +323,9 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name,
> MemoryRegion *address_space_io,
> uint8_t devfn_min, int nirq);
> PCIINTxRoute pci_device_route_intx_to_irq(PCIDevice *dev, int pin);
> +void pci_bus_fire_intx_routing_notifier(PCIBus *bus);
> +void pci_device_set_intx_routing_notifier(PCIDevice *dev,
> + PCIINTxRoutingNotifier notifier);
> void pci_device_reset(PCIDevice *dev);
> void pci_bus_reset(PCIBus *bus);
>
> diff --git a/hw/piix_pci.c b/hw/piix_pci.c
> index 347177f..8fd21f3 100644
> --- a/hw/piix_pci.c
> +++ b/hw/piix_pci.c
> @@ -422,6 +422,8 @@ static void piix3_write_config(PCIDevice *dev,
> if (ranges_overlap(address, len, PIIX_PIRQC, 4)) {
> PIIX3State *piix3 = DO_UPCAST(PIIX3State, dev, dev);
> int pic_irq;
> +
> + pci_bus_fire_intx_routing_notifier(piix3->dev.bus);
> piix3_update_irq_levels(piix3);
> for (pic_irq = 0; pic_irq < PIIX_NUM_PIC_IRQS; pic_irq++) {
> piix3_set_irq_pic(piix3, pic_irq);
> --
> 1.7.3.4
next prev parent reply other threads:[~2012-07-19 14:15 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-02 12:38 [Qemu-devel] [PATCH v2 0/2] pci: Preparations for KVM device assignment Jan Kiszka
2012-07-02 12:38 ` [Qemu-devel] [PATCH v2 1/2] pci: Add pci_device_route_intx_to_irq Jan Kiszka
2012-07-02 14:27 ` Alex Williamson
2012-07-19 14:09 ` Michael S. Tsirkin
2012-07-02 12:38 ` [Qemu-devel] [PATCH v2 2/2] pci: Add INTx routing notifier Jan Kiszka
2012-07-02 14:26 ` Alex Williamson
2012-07-02 14:31 ` Jan Kiszka
2012-07-02 14:49 ` Alex Williamson
2012-07-19 14:16 ` Michael S. Tsirkin [this message]
2012-07-04 21:15 ` [Qemu-devel] [PATCH v2 0/2] pci: Preparations for KVM device assignment Michael S. Tsirkin
2012-07-04 22:38 ` Jan Kiszka
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=20120719141602.GB12118@redhat.com \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=jan.kiszka@siemens.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).