From: Alexander Duyck <alexander.duyck@gmail.com>
To: Leon Romanovsky <leon@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Saeed Mahameed <saeedm@nvidia.com>,
Leon Romanovsky <leonro@nvidia.com>,
Jason Gunthorpe <jgg@nvidia.com>,
Jakub Kicinski <kuba@kernel.org>,
linux-pci <linux-pci@vger.kernel.org>,
linux-rdma@vger.kernel.org, Netdev <netdev@vger.kernel.org>,
Don Dutile <ddutile@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [PATCH mlx5-next v1 2/5] PCI: Add SR-IOV sysfs entry to read number of MSI-X vectors
Date: Mon, 11 Jan 2021 11:30:39 -0800 [thread overview]
Message-ID: <CAKgT0Uczu6cULPsVjFuFVmir35SpL-bs0hosbfH-T5sZLZ78BQ@mail.gmail.com> (raw)
In-Reply-To: <20210110150727.1965295-3-leon@kernel.org>
On Sun, Jan 10, 2021 at 7:10 AM Leon Romanovsky <leon@kernel.org> wrote:
>
> From: Leon Romanovsky <leonro@nvidia.com>
>
> Some SR-IOV capable devices provide an ability to configure specific
> number of MSI-X vectors on their VF prior driver is probed on that VF.
>
> In order to make management easy, provide new read-only sysfs file that
> returns a total number of possible to configure MSI-X vectors.
>
> cat /sys/bus/pci/devices/.../sriov_vf_total_msix
> = 0 - feature is not supported
> > 0 - total number of MSI-X vectors to consume by the VFs
>
> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> ---
> Documentation/ABI/testing/sysfs-bus-pci | 14 +++++++++++
> drivers/pci/iov.c | 31 +++++++++++++++++++++++++
> drivers/pci/pci.h | 3 +++
> include/linux/pci.h | 2 ++
> 4 files changed, 50 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci
> index 05e26e5da54e..64e9b700acc9 100644
> --- a/Documentation/ABI/testing/sysfs-bus-pci
> +++ b/Documentation/ABI/testing/sysfs-bus-pci
> @@ -395,3 +395,17 @@ Description:
> The file is writable if the PF is bound to a driver that
> supports the ->sriov_set_msix_vec_count() callback and there
> is no driver bound to the VF.
> +
> +What: /sys/bus/pci/devices/.../sriov_vf_total_msix
In this case I would drop the "vf" and just go with sriov_total_msix
since now you are referring to a global value instead of a per VF
value.
> +Date: January 2021
> +Contact: Leon Romanovsky <leonro@nvidia.com>
> +Description:
> + This file is associated with the SR-IOV PFs.
> + It returns a total number of possible to configure MSI-X
> + vectors on the enabled VFs.
> +
> + The values returned are:
> + * > 0 - this will be total number possible to consume by VFs,
> + * = 0 - feature is not supported
> +
> + If no SR-IOV VFs are enabled, this value will return 0.
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index 42c0df4158d1..0a6ddf3230fd 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -394,12 +394,22 @@ static ssize_t sriov_drivers_autoprobe_store(struct device *dev,
> return count;
> }
>
> +static ssize_t sriov_vf_total_msix_show(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + struct pci_dev *pdev = to_pci_dev(dev);
> +
> + return sprintf(buf, "%d\n", pdev->sriov->vf_total_msix);
> +}
> +
You display it as a signed value, but unsigned values are not
supported, correct?
> static DEVICE_ATTR_RO(sriov_totalvfs);
> static DEVICE_ATTR_RW(sriov_numvfs);
> static DEVICE_ATTR_RO(sriov_offset);
> static DEVICE_ATTR_RO(sriov_stride);
> static DEVICE_ATTR_RO(sriov_vf_device);
> static DEVICE_ATTR_RW(sriov_drivers_autoprobe);
> +static DEVICE_ATTR_RO(sriov_vf_total_msix);
>
> static struct attribute *sriov_dev_attrs[] = {
> &dev_attr_sriov_totalvfs.attr,
> @@ -408,6 +418,7 @@ static struct attribute *sriov_dev_attrs[] = {
> &dev_attr_sriov_stride.attr,
> &dev_attr_sriov_vf_device.attr,
> &dev_attr_sriov_drivers_autoprobe.attr,
> + &dev_attr_sriov_vf_total_msix.attr,
> NULL,
> };
>
> @@ -658,6 +669,7 @@ static void sriov_disable(struct pci_dev *dev)
> sysfs_remove_link(&dev->dev.kobj, "dep_link");
>
> iov->num_VFs = 0;
> + iov->vf_total_msix = 0;
> pci_iov_set_numvfs(dev, 0);
> }
>
> @@ -1116,6 +1128,25 @@ int pci_sriov_get_totalvfs(struct pci_dev *dev)
> }
> EXPORT_SYMBOL_GPL(pci_sriov_get_totalvfs);
>
> +/**
> + * pci_sriov_set_vf_total_msix - set total number of MSI-X vectors for the VFs
> + * @dev: the PCI PF device
> + * @numb: the total number of MSI-X vector to consume by the VFs
> + *
> + * Sets the number of MSI-X vectors that is possible to consume by the VFs.
> + * This interface is complimentary part of the pci_set_msix_vec_count()
> + * that will be used to configure the required number on the VF.
> + */
> +void pci_sriov_set_vf_total_msix(struct pci_dev *dev, int numb)
> +{
> + if (!dev->is_physfn || !dev->driver ||
> + !dev->driver->sriov_set_msix_vec_count)
> + return;
> +
> + dev->sriov->vf_total_msix = numb;
> +}
> +EXPORT_SYMBOL_GPL(pci_sriov_set_vf_total_msix);
> +
This seems broken. What validation is being done on the numb value?
You pass it as int, and your documentation all refers to tests for >=
0, but isn't a signed input a possibility as well? Also "numb" doesn't
make for a good abbreviation as it is already a word of its own. It
might make more sense to use count or something like that rather than
trying to abbreviate number.
> /**
> * pci_sriov_configure_simple - helper to configure SR-IOV
> * @dev: the PCI device
> diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
> index 1fd273077637..0fbe291eb0f2 100644
> --- a/drivers/pci/pci.h
> +++ b/drivers/pci/pci.h
> @@ -327,6 +327,9 @@ struct pci_sriov {
> u16 subsystem_device; /* VF subsystem device */
> resource_size_t barsz[PCI_SRIOV_NUM_BARS]; /* VF BAR size */
> bool drivers_autoprobe; /* Auto probing of VFs by driver */
> + int vf_total_msix; /* Total number of MSI-X vectors the VFs
> + * can consume
> + */
> };
>
> /**
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index a17cfc28eb66..fd9ff1f42a09 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -2074,6 +2074,7 @@ int pci_sriov_get_totalvfs(struct pci_dev *dev);
> int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn);
> resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
> void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
> +void pci_sriov_set_vf_total_msix(struct pci_dev *dev, int numb);
>
> /* Arch may override these (weak) */
> int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs);
> @@ -2114,6 +2115,7 @@ static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
> static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
> { return 0; }
> static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
> +static inline void pci_sriov_set_vf_total_msix(struct pci_dev *dev, int numb) {}
> #endif
>
> #if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
> --
> 2.29.2
>
next prev parent reply other threads:[~2021-01-11 19:32 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-10 15:07 [PATCH mlx5-next v1 0/5] Dynamically assign MSI-X vectors count Leon Romanovsky
2021-01-10 15:07 ` [PATCH mlx5-next v1 1/5] PCI: Add sysfs callback to allow MSI-X table size change of SR-IOV VFs Leon Romanovsky
2021-01-11 19:30 ` Alexander Duyck
2021-01-12 3:25 ` Don Dutile
2021-01-12 6:15 ` Leon Romanovsky
2021-01-12 6:39 ` Leon Romanovsky
2021-01-12 21:59 ` Alexander Duyck
2021-01-13 6:09 ` Leon Romanovsky
2021-01-13 20:00 ` Alexander Duyck
2021-01-14 7:16 ` Leon Romanovsky
2021-01-14 16:51 ` Alexander Duyck
2021-01-14 17:12 ` Leon Romanovsky
2021-01-13 17:50 ` Alex Williamson
2021-01-13 19:49 ` Leon Romanovsky
2021-01-10 15:07 ` [PATCH mlx5-next v1 2/5] PCI: Add SR-IOV sysfs entry to read number of MSI-X vectors Leon Romanovsky
2021-01-11 19:30 ` Alexander Duyck [this message]
2021-01-12 6:56 ` Leon Romanovsky
2021-01-12 21:34 ` Alexander Duyck
2021-01-13 6:19 ` Leon Romanovsky
2021-01-13 22:44 ` Alexander Duyck
2021-01-14 6:50 ` Leon Romanovsky
2021-01-14 16:40 ` Alexander Duyck
2021-01-14 16:48 ` Jason Gunthorpe
2021-01-14 17:55 ` Alexander Duyck
2021-01-14 18:29 ` Jason Gunthorpe
2021-01-14 19:24 ` Alexander Duyck
2021-01-14 19:56 ` Leon Romanovsky
2021-01-14 20:08 ` Jason Gunthorpe
2021-01-14 21:43 ` Alexander Duyck
2021-01-14 23:28 ` Alex Williamson
2021-01-15 1:56 ` Alexander Duyck
2021-01-15 14:06 ` Jason Gunthorpe
2021-01-15 15:53 ` Leon Romanovsky
2021-01-16 1:48 ` Alexander Duyck
2021-01-16 8:20 ` Leon Romanovsky
2021-01-18 3:16 ` Alexander Duyck
2021-01-18 7:20 ` Leon Romanovsky
2021-01-18 13:28 ` Leon Romanovsky
2021-01-18 18:21 ` Alexander Duyck
2021-01-19 5:43 ` Leon Romanovsky
2021-01-16 4:32 ` Alexander Duyck
2021-01-18 15:47 ` Jason Gunthorpe
2021-01-15 13:51 ` Jason Gunthorpe
2021-01-14 17:26 ` Leon Romanovsky
2021-01-18 17:03 ` Greg KH
2021-01-19 5:38 ` Leon Romanovsky
2021-01-10 15:07 ` [PATCH mlx5-next v1 3/5] net/mlx5: Add dynamic MSI-X capabilities bits Leon Romanovsky
2021-01-10 15:07 ` [PATCH mlx5-next v1 4/5] net/mlx5: Dynamically assign MSI-X vectors count Leon Romanovsky
2021-01-10 15:07 ` [PATCH mlx5-next v1 5/5] net/mlx5: Allow to the users to configure number of MSI-X vectors Leon Romanovsky
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=CAKgT0Uczu6cULPsVjFuFVmir35SpL-bs0hosbfH-T5sZLZ78BQ@mail.gmail.com \
--to=alexander.duyck@gmail.com \
--cc=alex.williamson@redhat.com \
--cc=bhelgaas@google.com \
--cc=ddutile@redhat.com \
--cc=jgg@nvidia.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=leonro@nvidia.com \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=saeedm@nvidia.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).