From: Saeed Mahameed <saeed@kernel.org>
To: "David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>,
netdev@vger.kernel.org, Tariq Toukan <tariqt@nvidia.com>,
Eli Cohen <elic@nvidia.com>, Shay Drory <shayd@nvidia.com>
Subject: [PATCH net-next 14/14] net/mlx5: Provide external API for allocating vectors
Date: Sun, 19 Feb 2023 22:14:42 -0800 [thread overview]
Message-ID: <20230220061442.403092-15-saeed@kernel.org> (raw)
In-Reply-To: <20230220061442.403092-1-saeed@kernel.org>
From: Eli Cohen <elic@nvidia.com>
Provide external API to be used by other drivers relying on mlx5_core,
for allocating MSIX vectors. An example for such a driver would be
mlx5_vdpa.
Signed-off-by: Eli Cohen <elic@nvidia.com>
Reviewed-by: Shay Drory <shayd@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
---
.../net/ethernet/mellanox/mlx5/core/pci_irq.c | 52 +++++++++++++++++++
include/linux/mlx5/driver.h | 6 +++
2 files changed, 58 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
index 7fa63d31ae5b..e12e528c09f5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
@@ -483,6 +483,58 @@ struct mlx5_irq *mlx5_irq_request(struct mlx5_core_dev *dev, u16 vecidx,
return irq;
}
+/**
+ * mlx5_msix_alloc - allocate msix interrupt
+ * @dev: mlx5 device from which to request
+ * @handler: interrupt handler
+ * @affdesc: affinity descriptor
+ * @name: interrupt name
+ *
+ * Returns: struct msi_map with result encoded.
+ * Note: the caller must make sure to release the irq by calling
+ * mlx5_msix_free() if shutdown was initiated.
+ */
+struct msi_map mlx5_msix_alloc(struct mlx5_core_dev *dev,
+ irqreturn_t (*handler)(int, void *),
+ const struct irq_affinity_desc *affdesc,
+ const char *name)
+{
+ struct msi_map map;
+ int err;
+
+ if (!dev->pdev) {
+ map.virq = 0;
+ map.index = -EINVAL;
+ return map;
+ }
+
+ map = pci_msix_alloc_irq_at(dev->pdev, MSI_ANY_INDEX, affdesc);
+ if (!map.virq)
+ return map;
+
+ err = request_irq(map.virq, handler, 0, name, NULL);
+ if (err) {
+ mlx5_core_warn(dev, "err %d\n", err);
+ pci_msix_free_irq(dev->pdev, map);
+ map.virq = 0;
+ map.index = -ENOMEM;
+ }
+ return map;
+}
+EXPORT_SYMBOL(mlx5_msix_alloc);
+
+/**
+ * mlx5_msix_free - free a previously allocated msix interrupt
+ * @dev: mlx5 device associated with interrupt
+ * @map: map previously returned by mlx5_msix_alloc()
+ */
+void mlx5_msix_free(struct mlx5_core_dev *dev, struct msi_map map)
+{
+ free_irq(map.virq, NULL);
+ pci_msix_free_irq(dev->pdev, map);
+}
+EXPORT_SYMBOL(mlx5_msix_free);
+
/**
* mlx5_irqs_release_vectors - release one or more IRQs back to the system.
* @irqs: IRQs to be released.
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index a170c8565779..3bf3cba53347 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -1309,4 +1309,10 @@ enum {
MLX5_OCTWORD = 16,
};
+struct msi_map mlx5_msix_alloc(struct mlx5_core_dev *dev,
+ irqreturn_t (*handler)(int, void *),
+ const struct irq_affinity_desc *affdesc,
+ const char *name);
+void mlx5_msix_free(struct mlx5_core_dev *dev, struct msi_map map);
+
#endif /* MLX5_DRIVER_H */
--
2.39.1
next prev parent reply other threads:[~2023-02-20 6:17 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-20 6:14 [PATCH net-next 00/14] mlx5 dynamic msix Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 01/14] lib: cpu_rmap: Avoid use after free on rmap->obj array entries Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 02/14] lib: cpu_rmap: Use allocator for rmap entries Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 03/14] lib: cpu_rmap: Add irq_cpu_rmap_remove to complement irq_cpu_rmap_add Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 04/14] net/mlx5e: Coding style fix, add empty line Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 05/14] net/mlx5: Fix wrong comment Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 06/14] net/mlx5: Modify struct mlx5_irq to use struct msi_map Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 07/14] net/mlx5: Use newer affinity descriptor Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 08/14] net/mlx5: Improve naming of pci function vectors Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 09/14] net/mlx5: Refactor completion irq request/release code Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 10/14] net/mlx5: Use dynamic msix vectors allocation Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 11/14] net/mlx5: Move devlink registration before mlx5_load Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 12/14] net/mlx5: Refactor calculation of required completion vectors Saeed Mahameed
2023-02-20 6:14 ` [PATCH net-next 13/14] net/mlx5: Use one completion vector if eth is disabled Saeed Mahameed
2023-02-20 6:14 ` Saeed Mahameed [this message]
2023-02-21 0:51 ` [PATCH net-next 00/14] mlx5 dynamic msix Jakub Kicinski
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=20230220061442.403092-15-saeed@kernel.org \
--to=saeed@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=elic@nvidia.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=saeedm@nvidia.com \
--cc=shayd@nvidia.com \
--cc=tariqt@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).