All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bernhard Beschow <shentey@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Richard Henderson" <richard.henderson@linaro.org>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org,
	"Hervé Poussineau" <hpoussin@reactos.org>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Paul Durrant" <paul@xen.org>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Chuck Zmudzinski" <brchuckz@aol.com>,
	"Bernhard Beschow" <shentey@gmail.com>
Subject: [PATCH v2 4/6] hw/isa/piix: Avoid Xen-specific variant of piix_write_config()
Date: Wed,  4 Jan 2023 15:44:35 +0100	[thread overview]
Message-ID: <20230104144437.27479-5-shentey@gmail.com> (raw)
In-Reply-To: <20230104144437.27479-1-shentey@gmail.com>

Subscribe to pci_bus_fire_intx_routing_notifier() instead which allows for
having a common piix_write_config() for all PIIX device models.

While at it, move the subscription into machine code in order to resolve
TYPE_PIIX3_XEN_DEVICE.

In a possible future followup, pci_bus_fire_intx_routing_notifier() could
be adjusted in such a way that subscribing to it doesn't require
knowledge of the device firing it.

Signed-off-by: Bernhard Beschow <shentey@gmail.com>
---
 hw/i386/pc_piix.c | 18 ++++++++++++++++++
 hw/isa/piix.c     | 22 +---------------------
 2 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 792dcd3ce8..5738d9cdca 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -86,6 +86,21 @@ static int pci_slot_get_pirq(PCIDevice *pci_dev, int pci_intx)
     return (pci_intx + slot_addend) & 3;
 }
 
+static void piix_intx_routing_notifier_xen(PCIDevice *dev)
+{
+    int i;
+
+    /* Scan for updates to PCI link routes (0x60-0x63). */
+    for (i = 0; i < PIIX_NUM_PIRQS; i++) {
+        uint8_t v = dev->config_read(dev, PIIX_PIRQCA + i, 1);
+        if (v & 0x80) {
+            v = 0;
+        }
+        v &= 0xf;
+        xen_set_pci_link_route(i, v);
+    }
+}
+
 /* PC hardware initialisation */
 static void pc_init1(MachineState *machine,
                      const char *host_type, const char *pci_type)
@@ -248,6 +263,9 @@ static void pc_init1(MachineState *machine,
         pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
 
         if (xen_enabled()) {
+            pci_device_set_intx_routing_notifier(
+                        pci_dev, piix_intx_routing_notifier_xen);
+
             /*
              * Xen supports additional interrupt routes from the PCI devices to
              * the IOAPIC: the four pins of each PCI device on the bus are also
diff --git a/hw/isa/piix.c b/hw/isa/piix.c
index ac04781f46..d4cdb3dadb 100644
--- a/hw/isa/piix.c
+++ b/hw/isa/piix.c
@@ -125,26 +125,6 @@ static void piix_write_config(PCIDevice *dev, uint32_t address, uint32_t val,
     }
 }
 
-static void piix3_write_config_xen(PCIDevice *dev,
-                                   uint32_t address, uint32_t val, int len)
-{
-    int i;
-
-    /* Scan for updates to PCI link routes (0x60-0x63). */
-    for (i = 0; i < len; i++) {
-        uint8_t v = (val >> (8 * i)) & 0xff;
-        if (v & 0x80) {
-            v = 0;
-        }
-        v &= 0xf;
-        if (((address + i) >= PIIX_PIRQCA) && ((address + i) <= PIIX_PIRQCD)) {
-            xen_set_pci_link_route(address + i - PIIX_PIRQCA, v);
-        }
-    }
-
-    piix_write_config(dev, address, val, len);
-}
-
 static void piix_reset(DeviceState *dev)
 {
     PIIXState *d = PIIX_PCI_DEVICE(dev);
@@ -490,7 +470,7 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
 
-    k->config_write = piix3_write_config_xen;
+    k->config_write = piix_write_config;
     k->realize = piix3_realize;
     /* 82371SB PIIX3 PCI-to-ISA bridge (Step A1) */
     k->device_id = PCI_DEVICE_ID_INTEL_82371SB_0;
-- 
2.39.0



  parent reply	other threads:[~2023-01-04 14:47 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-04 14:44 [PATCH v2 0/6] Resolve TYPE_PIIX3_XEN_DEVICE Bernhard Beschow
2023-01-04 14:44 ` [PATCH v2 1/6] include/hw/xen/xen: Rename xen_piix3_set_irq() to xen_intx_set_irq() Bernhard Beschow
2023-01-04 15:17   ` Philippe Mathieu-Daudé
2023-01-04 14:44 ` [PATCH v2 2/6] hw/isa/piix: Reuse piix3_realize() in piix3_xen_realize() Bernhard Beschow
2023-01-04 14:44 ` [PATCH v2 3/6] hw/isa/piix: Wire up Xen PCI IRQ handling outside of PIIX3 Bernhard Beschow
2023-01-04 15:18   ` Philippe Mathieu-Daudé
2023-01-06 17:35   ` David Woodhouse
2023-01-06 17:46     ` Chuck Zmudzinski
2023-01-06 18:39       ` Chuck Zmudzinski
2023-01-07 10:58     ` Bernhard Beschow
2023-01-04 14:44 ` Bernhard Beschow [this message]
2023-01-04 14:44 ` [PATCH v2 5/6] hw/isa/piix: Resolve redundant k->config_write assignments Bernhard Beschow
2023-01-04 15:19   ` Philippe Mathieu-Daudé
2023-01-04 14:44 ` [PATCH v2 6/6] hw/isa/piix: Resolve redundant TYPE_PIIX3_XEN_DEVICE Bernhard Beschow
2023-01-04 15:35   ` Philippe Mathieu-Daudé
2023-01-04 17:54     ` Chuck Zmudzinski
2023-01-04 18:48       ` Philippe Mathieu-Daudé
2023-01-04 19:29         ` Chuck Zmudzinski
2023-01-04 20:31           ` Bernhard Beschow
2023-01-04 20:57             ` Chuck Zmudzinski
2023-01-04 22:18           ` Philippe Mathieu-Daudé
2023-01-05  2:34             ` Chuck Zmudzinski
2023-01-04 20:44       ` Bernhard Beschow
2023-01-04 20:50         ` Chuck Zmudzinski
2023-01-06 11:57     ` Bernhard Beschow
2023-01-06 12:25       ` Philippe Mathieu-Daudé
2023-01-06 19:08         ` Chuck Zmudzinski
2023-01-06 23:04           ` Chuck Zmudzinski
2023-01-07  1:08             ` Chuck Zmudzinski
2023-01-07 11:05               ` Bernhard Beschow
2023-01-07 18:08                 ` Chuck Zmudzinski
2023-01-04 16:42   ` Chuck Zmudzinski
2023-01-04 19:45     ` Bernhard Beschow
2023-01-04 22:35     ` Philippe Mathieu-Daudé
2023-01-05  1:57       ` Chuck Zmudzinski
2023-01-05  2:25       ` Chuck Zmudzinski
2023-01-17 22:51 ` [PATCH v2 0/6] Resolve TYPE_PIIX3_XEN_DEVICE Bernhard Beschow
2023-01-18 10:13 ` Michael S. Tsirkin
2023-01-24 16:11   ` Anthony PERARD via
2023-01-24 16:11     ` Anthony PERARD
2023-01-24 17:07     ` Bernhard Beschow
2023-02-01  8:11       ` Bernhard Beschow
2023-02-09 21:53         ` Bernhard Beschow
2023-03-11 22:20           ` Chuck Zmudzinski
2023-03-12  9:22             ` Bernhard Beschow
2023-03-12 21:02               ` Chuck Zmudzinski
2023-03-12 22:46                 ` Bernhard Beschow

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=20230104144437.27479-5-shentey@gmail.com \
    --to=shentey@gmail.com \
    --cc=anthony.perard@citrix.com \
    --cc=aurelien@aurel32.net \
    --cc=brchuckz@aol.com \
    --cc=eduardo@habkost.net \
    --cc=hpoussin@reactos.org \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.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.