All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>
Subject: [Qemu-devel] [PULL 04/22] pcie: minor cleanups for slot control/status
Date: Tue, 2 Jul 2019 11:06:48 -0400	[thread overview]
Message-ID: <20190702150606.24851-5-mst@redhat.com> (raw)
In-Reply-To: <20190702150606.24851-1-mst@redhat.com>

Rename function arguments to make intent clearer.
Better documentation for slot control logic.

Suggested-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/hw/pci/pcie.h |  3 ++-
 hw/pci/pcie.c         | 17 +++++++++++------
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h
index 8d90c0e193..34f277735c 100644
--- a/include/hw/pci/pcie.h
+++ b/include/hw/pci/pcie.h
@@ -108,7 +108,8 @@ void pcie_cap_lnkctl_reset(PCIDevice *dev);
 void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot);
 void pcie_cap_slot_reset(PCIDevice *dev);
 void pcie_cap_slot_get(PCIDevice *dev, uint16_t *slot_ctl, uint16_t *slt_sta);
-void pcie_cap_slot_write_config(PCIDevice *dev, uint16_t slot_ctl, uint16_t slt_sta,
+void pcie_cap_slot_write_config(PCIDevice *dev,
+                                uint16_t old_slot_ctl, uint16_t old_slt_sta,
                                 uint32_t addr, uint32_t val, int len);
 int pcie_cap_slot_post_load(void *opaque, int version_id);
 void pcie_cap_slot_push_attention_button(PCIDevice *dev);
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index c605d32dd4..a6beb567bd 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -602,7 +602,8 @@ void pcie_cap_slot_get(PCIDevice *dev, uint16_t *slt_ctl, uint16_t *slt_sta)
     *slt_sta = pci_get_word(exp_cap + PCI_EXP_SLTSTA);
 }
 
-void pcie_cap_slot_write_config(PCIDevice *dev, uint16_t slt_ctl, uint16_t slt_sta,
+void pcie_cap_slot_write_config(PCIDevice *dev,
+                                uint16_t old_slt_ctl, uint16_t old_slt_sta,
                                 uint32_t addr, uint32_t val, int len)
 {
     uint32_t pos = dev->exp.exp_cap;
@@ -625,8 +626,8 @@ void pcie_cap_slot_write_config(PCIDevice *dev, uint16_t slt_ctl, uint16_t slt_s
                           PCI_EXP_SLTSTA_MRLSC | PCI_EXP_SLTSTA_PDC | \
                           PCI_EXP_SLTSTA_CC)
 
-        if (val & ~slt_sta & PCIE_SLOT_EVENTS) {
-            sltsta = (sltsta & ~PCIE_SLOT_EVENTS) | (slt_sta & PCIE_SLOT_EVENTS);
+        if (val & ~old_slt_sta & PCIE_SLOT_EVENTS) {
+            sltsta = (sltsta & ~PCIE_SLOT_EVENTS) | (old_slt_sta & PCIE_SLOT_EVENTS);
             pci_set_word(exp_cap + PCI_EXP_SLTSTA, sltsta);
         }
         hotplug_event_clear(dev);
@@ -646,13 +647,17 @@ void pcie_cap_slot_write_config(PCIDevice *dev, uint16_t slt_ctl, uint16_t slt_s
     }
 
     /*
-     * If the slot is polulated, power indicator is off and power
+     * If the slot is populated, power indicator is off and power
      * controller is off, it is safe to detach the devices.
+     *
+     * Note: don't detach if condition was already true:
+     * this is a work around for guests that overwrite
+     * control of powered off slots before powering them on.
      */
     if ((sltsta & PCI_EXP_SLTSTA_PDS) && (val & PCI_EXP_SLTCTL_PCC) &&
         (val & PCI_EXP_SLTCTL_PIC_OFF) == PCI_EXP_SLTCTL_PIC_OFF &&
-        (!(slt_ctl & PCI_EXP_SLTCTL_PCC) ||
-        (slt_ctl & PCI_EXP_SLTCTL_PIC_OFF) != PCI_EXP_SLTCTL_PIC_OFF)) {
+        (!(old_slt_ctl & PCI_EXP_SLTCTL_PCC) ||
+        (old_slt_ctl & PCI_EXP_SLTCTL_PIC_OFF) != PCI_EXP_SLTCTL_PIC_OFF)) {
         PCIBus *sec_bus = pci_bridge_get_sec_bus(PCI_BRIDGE(dev));
         pci_for_each_device(sec_bus, pci_bus_num(sec_bus),
                             pcie_unplug_device, NULL);
-- 
MST



  parent reply	other threads:[~2019-07-02 15:39 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-02 15:06 [Qemu-devel] [PULL 00/22] virtio, pc, pci: features, fixes, cleanups Michael S. Tsirkin
2019-07-02 15:06 ` [Qemu-devel] [PULL 01/22] pcie: don't skip multi-mask events Michael S. Tsirkin
2019-07-02 15:06 ` [Qemu-devel] [PULL 02/22] pcie: check that slt ctrl changed before deleting Michael S. Tsirkin
2019-07-11 12:31   ` Peter Maydell
2019-07-02 15:06 ` [Qemu-devel] [PULL 03/22] pcie: work around for racy guest init Michael S. Tsirkin
2019-07-02 15:06 ` Michael S. Tsirkin [this message]
2019-07-02 15:56 ` [Qemu-devel] [PULL 00/22] virtio, pc, pci: features, fixes, cleanups Peter Maydell
2019-07-02 17:00   ` Michael S. Tsirkin
2019-07-02 17:20     ` Peter Maydell
2019-07-02 18:22       ` Michael S. Tsirkin
2019-07-02 18:27         ` Peter Maydell
2019-07-02 19:00           ` Michael S. Tsirkin
2019-07-26 12:39           ` Peter Maydell
2019-07-26 13:43             ` Michael S. Tsirkin
2019-07-04  9:25 ` Peter Maydell
2019-07-04 11:03   ` Pankaj Gupta
2019-07-04 21:24     ` Michael S. Tsirkin
2019-07-05  9:37       ` Pankaj Gupta
2019-07-04 21:29   ` Michael S. Tsirkin
2019-07-05  9:47     ` Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2019-06-28 20:02 [Qemu-devel] [PATCH] pc: Move compat_apic_id_mode variable to PCMachineClass Eduardo Habkost
2019-07-02 15:08 ` [Qemu-devel] [PULL 18/22] " Michael S. Tsirkin
2019-06-29 10:46 ` [Qemu-devel] [PATCH] " Philippe Mathieu-Daudé
2019-06-30 21:30 ` Michael S. Tsirkin
2019-06-26  7:48 [Qemu-devel] [PATCH v2 0/4] libvhost-user: VHOST_USER_PROTOCOL_F_MQ support Stefan Hajnoczi
2019-06-26  7:48 ` [Qemu-devel] [PATCH v2 1/4] libvhost-user: add vmsg_set_reply_u64() helper Stefan Hajnoczi
2019-07-02 15:08   ` [Qemu-devel] [PULL 19/22] " Michael S. Tsirkin
2019-06-26  7:48 ` [Qemu-devel] [PATCH v2 2/4] libvhost-user: support many virtqueues Stefan Hajnoczi
2019-07-02 15:08   ` [Qemu-devel] [PULL 20/22] " Michael S. Tsirkin
2019-06-26  7:48 ` [Qemu-devel] [PATCH v2 3/4] libvhost-user: implement VHOST_USER_PROTOCOL_F_MQ Stefan Hajnoczi
2019-07-02 15:08   ` [Qemu-devel] [PULL 21/22] " Michael S. Tsirkin
2019-06-26  7:48 ` [Qemu-devel] [PATCH v2 4/4] docs: avoid vhost-user-net specifics in multiqueue section Stefan Hajnoczi
2019-07-02 15:08   ` [Qemu-devel] [PULL 22/22] " Michael S. Tsirkin
2019-06-26  2:31 [Qemu-devel] [PATCH v4 0/5] virtio: fix some issues of "started" and "start_on_kick" flag elohimes
2019-06-26  2:31 ` [Qemu-devel] [PATCH v4 1/5] virtio: add "use-started" property elohimes
2019-07-02 15:07   ` [Qemu-devel] [PULL 13/22] " Michael S. Tsirkin
2019-06-26 10:17   ` [Qemu-devel] [PATCH v4 1/5] " Greg Kurz
2019-06-27  2:20     ` Yongji Xie
2019-06-26  2:31 ` [Qemu-devel] [PATCH v4 2/5] virtio: Set "start_on_kick" for legacy devices elohimes
2019-07-02 15:07   ` [Qemu-devel] [PULL 14/22] " Michael S. Tsirkin
2019-06-26  2:31 ` [Qemu-devel] [PATCH v4 3/5] virtio: Set "start_on_kick" on virtio_set_features() elohimes
2019-07-02 15:08   ` [Qemu-devel] [PULL 15/22] " Michael S. Tsirkin
2019-06-26  2:31 ` [Qemu-devel] [PATCH v4 4/5] virtio: Make sure we get correct state of device on handle_aio_output() elohimes
2019-07-02 15:08   ` [Qemu-devel] [PULL 16/22] " Michael S. Tsirkin
2019-06-26  2:31 ` [Qemu-devel] [PATCH v4 5/5] virtio: Don't change "started" flag on virtio_vmstate_change() elohimes
2019-07-02 15:08   ` [Qemu-devel] [PULL 17/22] " Michael S. Tsirkin
2019-06-26 10:43 ` [Qemu-devel] [PATCH v4 0/5] virtio: fix some issues of "started" and "start_on_kick" flag Laurent Vivier
2019-06-27  2:19   ` Yongji Xie
2019-06-25 23:23 [Qemu-devel] [PATCH] virtio-pci: fix missing device properties Marc-André Lureau
2019-07-02 15:07 ` [Qemu-devel] [PULL 12/22] " Michael S. Tsirkin
2019-06-26  1:55 ` [Qemu-devel] [PATCH] " Eduardo Habkost
2019-06-26  9:48   ` Marc-André Lureau
2019-06-26 12:39     ` Eduardo Habkost
2019-06-19  9:49 [Qemu-devel] [PATCH v2 0/7] Qemu virtio pmem device Pankaj Gupta
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 1/7] virtio-pmem: add virtio device Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 05/22] " Michael S. Tsirkin
2019-07-02 11:46   ` [Qemu-devel] [PATCH v2 1/7] " Cornelia Huck
2019-07-11 12:57   ` [Qemu-devel] [PULL 05/22] " Peter Maydell
2019-07-11 14:05     ` Pankaj Gupta
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 2/7] virtio-pci: Allow to specify additional interfaces for the base type Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 06/22] " Michael S. Tsirkin
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 3/7] virtio-pmem: sync linux headers Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 07/22] " Michael S. Tsirkin
2019-07-02 11:50   ` [Qemu-devel] [PATCH v2 3/7] " Cornelia Huck
2019-07-02 11:59     ` Pankaj Gupta
2019-07-02 16:58       ` Michael S. Tsirkin
2019-07-02 17:09         ` Pankaj Gupta
2019-07-02 17:11           ` Michael S. Tsirkin
2019-07-02 17:21             ` Pankaj Gupta
2019-07-02 15:10     ` Michael S. Tsirkin
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 4/7] virtio-pci: Proxy for virtio-pmem Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 08/22] " Michael S. Tsirkin
2019-07-02 11:55   ` [Qemu-devel] [PATCH v2 4/7] " Cornelia Huck
2019-07-02 12:00     ` Pankaj Gupta
2019-07-02 17:09     ` Michael S. Tsirkin
2019-07-02 17:14       ` Pankaj Gupta
2019-07-11 12:59   ` [Qemu-devel] [PULL 08/22] " Peter Maydell
2019-07-11 13:27     ` Pankaj Gupta
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 5/7] hmp: Handle virtio-pmem when printing memory device infos Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 09/22] " Michael S. Tsirkin
2019-07-02  8:50   ` [Qemu-devel] [PATCH v2 5/7] " Wei Yang
2019-07-02 10:17     ` Pankaj Gupta
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 6/7] numa: Handle virtio-pmem in NUMA stats Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 10/22] " Michael S. Tsirkin
2019-06-19  9:49 ` [Qemu-devel] [PATCH v2 7/7] pc: Support for virtio-pmem-pci Pankaj Gupta
2019-07-02 15:07   ` [Qemu-devel] [PULL 11/22] " Michael S. Tsirkin
2019-07-01  3:53 ` [Qemu-devel] [PATCH v2 0/7] Qemu virtio pmem device Pankaj Gupta
2019-07-02  8:49 ` Wei Yang
2019-07-02 10:07   ` Pankaj Gupta
2019-07-03  0:58     ` Wei Yang
2019-07-03  1:31       ` Pankaj Gupta
2019-07-03  1:57         ` Wei Yang
2019-07-03  2:31           ` Pankaj Gupta
2019-07-03  2:42             ` Wei Yang
2019-07-03  3:21               ` Pankaj Gupta

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=20190702150606.24851-5-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@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 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.