qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Akihiko Odaki <akihiko.odaki@daynix.com>
To: "Sriram Yagnaraman" <sriram.yagnaraman@ericsson.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Cédric Le Goater" <clg@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Jason Wang" <jasowang@redhat.com>,
	"Keith Busch" <kbusch@kernel.org>,
	"Klaus Jensen" <its@irrelevant.dk>,
	"Markus Armbruster" <armbru@redhat.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"qemu-block@nongnu.org" <qemu-block@nongnu.org>
Subject: Re: [PATCH v8 03/15] pcie_sriov: Reset SR-IOV extended capability
Date: Thu, 29 Feb 2024 11:27:55 +0900	[thread overview]
Message-ID: <e6a27d2a-d2d4-4f2f-a8e8-b6def304a9f3@daynix.com> (raw)
In-Reply-To: <AS4PR07MB8412339C60640B86A894664B90582@AS4PR07MB8412.eurprd07.prod.outlook.com>

On 2024/02/29 1:23, Sriram Yagnaraman wrote:
> 
> 
>> -----Original Message-----
>> From: Akihiko Odaki <akihiko.odaki@daynix.com>
>> Sent: Wednesday, 28 February 2024 12:33
>> To: Philippe Mathieu-Daudé <philmd@linaro.org>; Michael S. Tsirkin
>> <mst@redhat.com>; Marcel Apfelbaum <marcel.apfelbaum@gmail.com>;
>> Alex Williamson <alex.williamson@redhat.com>; Cédric Le Goater
>> <clg@redhat.com>; Paolo Bonzini <pbonzini@redhat.com>; Daniel P.
>> Berrangé <berrange@redhat.com>; Eduardo Habkost
>> <eduardo@habkost.net>; Sriram Yagnaraman
>> <sriram.yagnaraman@ericsson.com>; Jason Wang <jasowang@redhat.com>;
>> Keith Busch <kbusch@kernel.org>; Klaus Jensen <its@irrelevant.dk>; Markus
>> Armbruster <armbru@redhat.com>
>> Cc: qemu-devel@nongnu.org; qemu-block@nongnu.org; Akihiko Odaki
>> <akihiko.odaki@daynix.com>
>> Subject: [PATCH v8 03/15] pcie_sriov: Reset SR-IOV extended capability
>>
>> pcie_sriov_pf_disable_vfs() is called when resetting the PF, but it only disables
>> VFs and does not reset SR-IOV extended capability, leaking the state and
>> making the VF Enable register inconsistent with the actual state.
>>
>> Replace pcie_sriov_pf_disable_vfs() with pcie_sriov_pf_reset(), which does
>> not only disable VFs but also resets the capability.
>>
>> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>> ---
>>   include/hw/pci/pcie_sriov.h |  4 ++--
>>   hw/net/igb.c                |  2 +-
>>   hw/nvme/ctrl.c              |  2 +-
>>   hw/pci/pcie_sriov.c         | 26 ++++++++++++++++++--------
>>   4 files changed, 22 insertions(+), 12 deletions(-)
>>
>> diff --git a/include/hw/pci/pcie_sriov.h b/include/hw/pci/pcie_sriov.h index
>> 095fb0c9edf9..b77eb7bf58ac 100644
>> --- a/include/hw/pci/pcie_sriov.h
>> +++ b/include/hw/pci/pcie_sriov.h
>> @@ -58,8 +58,8 @@ void pcie_sriov_pf_add_sup_pgsize(PCIDevice *dev,
>> uint16_t opt_sup_pgsize);  void pcie_sriov_config_write(PCIDevice *dev,
>> uint32_t address,
>>                                uint32_t val, int len);
>>
>> -/* Reset SR/IOV VF Enable bit to unregister all VFs */ -void
>> pcie_sriov_pf_disable_vfs(PCIDevice *dev);
>> +/* Reset SR/IOV */
>> +void pcie_sriov_pf_reset(PCIDevice *dev);
>>
>>   /* Get logical VF number of a VF - only valid for VFs */  uint16_t
>> pcie_sriov_vf_number(PCIDevice *dev); diff --git a/hw/net/igb.c
>> b/hw/net/igb.c index 0b5c31a58bba..9345506f81ec 100644
>> --- a/hw/net/igb.c
>> +++ b/hw/net/igb.c
>> @@ -493,7 +493,7 @@ static void igb_qdev_reset_hold(Object *obj)
>>
>>       trace_e1000e_cb_qdev_reset_hold();
>>
>> -    pcie_sriov_pf_disable_vfs(d);
>> +    pcie_sriov_pf_reset(d);
>>       igb_core_reset(&s->core);
>>   }
>>
>> diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index
>> 7a56e7b79b4d..7c0d3f108724 100644
>> --- a/hw/nvme/ctrl.c
>> +++ b/hw/nvme/ctrl.c
>> @@ -7116,7 +7116,7 @@ static void nvme_ctrl_reset(NvmeCtrl *n,
>> NvmeResetType rst)
>>               }
>>
>>               if (rst != NVME_RESET_CONTROLLER) {
>> -                pcie_sriov_pf_disable_vfs(pci_dev);
>> +                pcie_sriov_pf_reset(pci_dev);
>>               }
>>           }
>>
>> diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index
>> da209b7f47fd..51b66d1bb342 100644
>> --- a/hw/pci/pcie_sriov.c
>> +++ b/hw/pci/pcie_sriov.c
>> @@ -249,16 +249,26 @@ void pcie_sriov_config_write(PCIDevice *dev,
>> uint32_t address,  }
>>
>>
>> -/* Reset SR/IOV VF Enable bit to trigger an unregister of all VFs */ -void
>> pcie_sriov_pf_disable_vfs(PCIDevice *dev)
>> +/* Reset SR/IOV */
>> +void pcie_sriov_pf_reset(PCIDevice *dev)
>>   {
>>       uint16_t sriov_cap = dev->exp.sriov_cap;
>> -    if (sriov_cap) {
>> -        uint32_t val = pci_get_byte(dev->config + sriov_cap + PCI_SRIOV_CTRL);
>> -        if (val & PCI_SRIOV_CTRL_VFE) {
>> -            val &= ~PCI_SRIOV_CTRL_VFE;
>> -            pcie_sriov_config_write(dev, sriov_cap + PCI_SRIOV_CTRL, val, 1);
>> -        }
>> +    if (!sriov_cap) {
>> +        return;
>> +    }
>> +
>> +    pci_set_word(dev->config + sriov_cap + PCI_SRIOV_CTRL, 0);
>> +    unregister_vfs(dev);
>> +
>> +    /*
>> +     * Default is to use 4K pages, software can modify it
>> +     * to any of the supported bits
>> +     */
>> +    pci_set_word(dev->config + sriov_cap + PCI_SRIOV_SYS_PGSIZE, 0x1);
>> +
> 
> Just curious, do we need this?
> On Linux, I thought the PCI subsystem restores the page size after reset.

Perhaps Linux doesn't need it, but the specification requires to reset 
the whole capability.

> 
> Otherwise,
> Assuming change of my mail address from sriram.yagnaraman@est.tech to @ericsson.com is accepted,
> Reviewed-by: Sriram Yagnaraman <sriram.yagnaraman@ericsson.com>
> 
>> +    for (uint16_t i = 0; i < PCI_NUM_REGIONS; i++) {
>> +        pci_set_quad(dev->config + sriov_cap + PCI_SRIOV_BAR + i * 4,
>> +                     dev->exp.sriov_pf.vf_bar_type[i]);
>>       }
>>   }
>>
>>
>> --
>> 2.43.2


  reply	other threads:[~2024-02-29  2:29 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-28 11:33 [PATCH v8 00/15] hw/pci: SR-IOV related fixes and improvements Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 01/15] hw/nvme: Use pcie_sriov_num_vfs() Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 02/15] pcie_sriov: Validate NumVFs Akihiko Odaki
2024-02-28 16:08   ` Sriram Yagnaraman
2024-02-28 11:33 ` [PATCH v8 03/15] pcie_sriov: Reset SR-IOV extended capability Akihiko Odaki
2024-02-28 16:23   ` Sriram Yagnaraman
2024-02-29  2:27     ` Akihiko Odaki [this message]
2024-02-28 11:33 ` [PATCH v8 04/15] pcie_sriov: Do not reset NumVFs after disabling VFs Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 05/15] hw/pci: Always call pcie_sriov_pf_reset() Akihiko Odaki
2024-02-28 16:23   ` Sriram Yagnaraman
2024-02-28 11:33 ` [PATCH v8 06/15] hw/pci: Rename has_power to enabled Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 07/15] pcie_sriov: Do not manually unrealize Akihiko Odaki
2024-03-12 19:27   ` Michael S. Tsirkin
2024-02-28 11:33 ` [PATCH v8 08/15] pcie_sriov: Reuse SR-IOV VF device instances Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 09/15] pcie_sriov: Release VFs failed to realize Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 10/15] pcie_sriov: Remove num_vfs from PCIESriovPF Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 11/15] pcie_sriov: Register VFs after migration Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 12/15] hw/pci: Replace -1 with UINT32_MAX for romsize Akihiko Odaki
2024-02-28 11:33 ` [PATCH v8 13/15] hw/pci: Use UINT32_MAX as a default value for rombar Akihiko Odaki
2024-02-28 12:36   ` Markus Armbruster
2024-02-28 11:33 ` [PATCH v8 14/15] hw/pci: Determine if rombar is explicitly enabled Akihiko Odaki
2024-02-28 12:37   ` Markus Armbruster
2024-02-28 11:33 ` [PATCH v8 15/15] hw/qdev: Remove opts member Akihiko Odaki
2024-03-12 19:53 ` [PATCH v8 00/15] hw/pci: SR-IOV related fixes and improvements Michael S. Tsirkin
2024-06-04 14:01 ` Michael S. Tsirkin

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=e6a27d2a-d2d4-4f2f-a8e8-b6def304a9f3@daynix.com \
    --to=akihiko.odaki@daynix.com \
    --cc=alex.williamson@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=clg@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=its@irrelevant.dk \
    --cc=jasowang@redhat.com \
    --cc=kbusch@kernel.org \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sriram.yagnaraman@ericsson.com \
    /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).