> +static void nfp_pcie_sriov_read_nfd_limit(struct nfp_pf *pf)
> +{
> +     int err;
> +
> +     pf->limit_vfs = nfp_rtsym_read_le(pf->cpp, "nfd_vf_cfg_max_vfs",
> &err);
> +     if (!err)
> +             return;
> +
> +     pf->limit_vfs = ~0;
> +     /* Allow any setting for backwards compatibility if symbol not found
> */
> +     if (err != -ENOENT)
> +             nfp_warn(pf->cpp, "Warning: VF limit read failed: %d\n", err);
> +}
> +

If you're only going to use this under CONFIG_PCI_IOV,
perhaps put this underneath the ifdef as well?

>  static int nfp_pcie_sriov_enable(struct pci_dev *pdev, int num_vfs)
>  {
>  #ifdef CONFIG_PCI_IOV
>       struct nfp_pf *pf = pci_get_drvdata(pdev);
>       int err;
> 
> +     if (num_vfs > pf->limit_vfs) {
> +             nfp_info(pf->cpp, "Firmware limits number of VFs to %u\n",
> +                      pf->limit_vfs);
> +             return -EINVAL;
> +     }
> +
>       err = pci_enable_sriov(pdev, num_vfs);
>       if (err) {
>               dev_warn(&pdev->dev, "Failed to enable PCI sriov: %d\n",
> err);
> @@ -333,6 +354,8 @@ static int nfp_pci_probe(struct pci_dev *pdev,
>       if (err)
>               goto err_cpp_free;
> 
> +     nfp_pcie_sriov_read_nfd_limit(pf);
> +
>       err = nfp_net_pci_probe(pf);
>       if (err)
>               goto err_fw_unload;
> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.h
> b/drivers/net/ethernet/netronome/nfp/nfp_main.h
> index 6c40fa322da3..39105d0435e9 100644
> --- a/drivers/net/ethernet/netronome/nfp/nfp_main.h
> +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.h
> @@ -59,6 +59,7 @@ struct nfp_eth_table;
>   * @tx_area:         Pointer to the CPP area for the TX queues
>   * @rx_area:         Pointer to the CPP area for the FL/RX queues
>   * @irq_entries:     Array of MSI-X entries for all ports
> + * @limit_vfs:               Number of VFs supported by firmware (~0 for PCI
> limit)
>   * @num_vfs:         Number of SR-IOV VFs enabled
>   * @fw_loaded:               Is the firmware loaded?
>   * @eth_tbl:         NSP ETH table
> @@ -77,6 +78,7 @@ struct nfp_pf {
> 
>       struct msix_entry *irq_entries;
> 
> +     unsigned int limit_vfs;
>       unsigned int num_vfs;
> 
>       bool fw_loaded;
> --
> 2.11.0

Reply via email to