diff mbox series

[1/1] PCI/IOV: Fix VF0 cached config space size for other VFs

Message ID 1558358244-35832-1-git-send-email-mowendugu@gmail.com
State Superseded
Delegated to: Bjorn Helgaas
Headers show
Series [1/1] PCI/IOV: Fix VF0 cached config space size for other VFs | expand

Commit Message

独孤败 May 20, 2019, 1:17 p.m. UTC
Set the pcie_cap field before getting the config space size for
other VFs. Otherwise, the config space size of other VFs are error
set to 256, while the size of VF0 is 4096.

Signed-off-by: Hao Zheng <mowendugu@gmail.com>
Signed-off-by: Quan Xu <quan.xu0@gmail.com>
---
 drivers/pci/iov.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Alex Williamson June 4, 2019, 5:29 p.m. UTC | #1
On Mon, 20 May 2019 21:17:24 +0800
Hao Zheng <mowendugu@gmail.com> wrote:

> Set the pcie_cap field before getting the config space size for
> other VFs. Otherwise, the config space size of other VFs are error
> set to 256, while the size of VF0 is 4096.
> 
> Signed-off-by: Hao Zheng <mowendugu@gmail.com>
> Signed-off-by: Quan Xu <quan.xu0@gmail.com>
> ---
>  drivers/pci/iov.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index 3aa115e..239fad1 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -133,6 +133,7 @@ static void pci_read_vf_config_common(struct pci_dev *virtfn)
>  	pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
>  			     &physfn->sriov->subsystem_device);
>  
> +	set_pcie_port_type(virtfn);
>  	physfn->sriov->cfg_size = pci_cfg_space_size(virtfn);
>  }
>  

This results in set_pci_port_type() being called multiple times on
VF0.  Why not simply delay calling pci_read_vf_config_common() until
after pci_setup_device()?  Here's the alternate approach:

https://lore.kernel.org/linux-pci/155966918965.10361.16228304474160813310.stgit@gimli.home/

Thanks,
Alex
独孤败 June 14, 2019, 3:57 a.m. UTC | #2
Alex Williamson <alex.williamson@redhat.com> 于2019年6月5日周三 上午1:29写道:
>
> On Mon, 20 May 2019 21:17:24 +0800
> Hao Zheng <mowendugu@gmail.com> wrote:
>
> > Set the pcie_cap field before getting the config space size for
> > other VFs. Otherwise, the config space size of other VFs are error
> > set to 256, while the size of VF0 is 4096.
> >
> > Signed-off-by: Hao Zheng <mowendugu@gmail.com>
> > Signed-off-by: Quan Xu <quan.xu0@gmail.com>
> > ---
> >  drivers/pci/iov.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> > index 3aa115e..239fad1 100644
> > --- a/drivers/pci/iov.c
> > +++ b/drivers/pci/iov.c
> > @@ -133,6 +133,7 @@ static void pci_read_vf_config_common(struct pci_dev *virtfn)
> >       pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
> >                            &physfn->sriov->subsystem_device);
> >
> > +     set_pcie_port_type(virtfn);
> >       physfn->sriov->cfg_size = pci_cfg_space_size(virtfn);
> >  }
> >
>
> This results in set_pci_port_type() being called multiple times on
> VF0.  Why not simply delay calling pci_read_vf_config_common() until
> after pci_setup_device()?  Here's the alternate approach:
>
> https://lore.kernel.org/linux-pci/155966918965.10361.16228304474160813310.stgit@gimli.home/

I get it. This is a better approach. Thank you for your advice!
>
> Thanks,
> Alex
diff mbox series

Patch

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 3aa115e..239fad1 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -133,6 +133,7 @@  static void pci_read_vf_config_common(struct pci_dev *virtfn)
 	pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
 			     &physfn->sriov->subsystem_device);
 
+	set_pcie_port_type(virtfn);
 	physfn->sriov->cfg_size = pci_cfg_space_size(virtfn);
 }