Skip to content

Commit b48a0f7

Browse files
elic307iSaeed Mahameed
authored andcommitted
net/mlx5: Refactor completion irq request/release code
Break the request and release functions into pci and sub-functions devices handling for better readability, eventually making the code symmetric in terms of request/release. Signed-off-by: Eli Cohen <[email protected]> Reviewed-by: Shay Drory <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Reviewed-by: Jacob Keller <[email protected]>
1 parent 8bebfd7 commit b48a0f7

File tree

1 file changed

+46
-24
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+46
-24
lines changed

drivers/net/ethernet/mellanox/mlx5/core/eq.c

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -804,44 +804,28 @@ void mlx5_eq_update_ci(struct mlx5_eq *eq, u32 cc, bool arm)
804804
}
805805
EXPORT_SYMBOL(mlx5_eq_update_ci);
806806

807-
static void comp_irqs_release(struct mlx5_core_dev *dev)
807+
static void comp_irqs_release_pci(struct mlx5_core_dev *dev)
808808
{
809809
struct mlx5_eq_table *table = dev->priv.eq_table;
810810

811-
if (mlx5_core_is_sf(dev))
812-
mlx5_irq_affinity_irqs_release(dev, table->comp_irqs, table->num_comp_eqs);
813-
else
814-
mlx5_irqs_release_vectors(table->comp_irqs, table->num_comp_eqs);
815-
kfree(table->comp_irqs);
811+
mlx5_irqs_release_vectors(table->comp_irqs, table->num_comp_eqs);
816812
}
817813

818-
static int comp_irqs_request(struct mlx5_core_dev *dev)
814+
static int comp_irqs_request_pci(struct mlx5_core_dev *dev)
819815
{
820816
struct mlx5_eq_table *table = dev->priv.eq_table;
821817
const struct cpumask *prev = cpu_none_mask;
822818
const struct cpumask *mask;
823-
int ncomp_eqs = table->num_comp_eqs;
819+
int ncomp_eqs;
824820
u16 *cpus;
825821
int ret;
826822
int cpu;
827823
int i;
828824

829825
ncomp_eqs = table->num_comp_eqs;
830-
table->comp_irqs = kcalloc(ncomp_eqs, sizeof(*table->comp_irqs), GFP_KERNEL);
831-
if (!table->comp_irqs)
832-
return -ENOMEM;
833-
if (mlx5_core_is_sf(dev)) {
834-
ret = mlx5_irq_affinity_irqs_request_auto(dev, ncomp_eqs, table->comp_irqs);
835-
if (ret < 0)
836-
goto free_irqs;
837-
return ret;
838-
}
839-
840826
cpus = kcalloc(ncomp_eqs, sizeof(*cpus), GFP_KERNEL);
841-
if (!cpus) {
827+
if (!cpus)
842828
ret = -ENOMEM;
843-
goto free_irqs;
844-
}
845829

846830
i = 0;
847831
rcu_read_lock();
@@ -857,12 +841,50 @@ static int comp_irqs_request(struct mlx5_core_dev *dev)
857841
rcu_read_unlock();
858842
ret = mlx5_irqs_request_vectors(dev, cpus, ncomp_eqs, table->comp_irqs);
859843
kfree(cpus);
860-
if (ret < 0)
861-
goto free_irqs;
862844
return ret;
845+
}
846+
847+
static void comp_irqs_release_sf(struct mlx5_core_dev *dev)
848+
{
849+
struct mlx5_eq_table *table = dev->priv.eq_table;
850+
851+
mlx5_irq_affinity_irqs_release(dev, table->comp_irqs, table->num_comp_eqs);
852+
}
853+
854+
static int comp_irqs_request_sf(struct mlx5_core_dev *dev)
855+
{
856+
struct mlx5_eq_table *table = dev->priv.eq_table;
857+
int ncomp_eqs = table->num_comp_eqs;
858+
859+
return mlx5_irq_affinity_irqs_request_auto(dev, ncomp_eqs, table->comp_irqs);
860+
}
861+
862+
static void comp_irqs_release(struct mlx5_core_dev *dev)
863+
{
864+
struct mlx5_eq_table *table = dev->priv.eq_table;
865+
866+
mlx5_core_is_sf(dev) ? comp_irqs_release_sf(dev) :
867+
comp_irqs_release_pci(dev);
863868

864-
free_irqs:
865869
kfree(table->comp_irqs);
870+
}
871+
872+
static int comp_irqs_request(struct mlx5_core_dev *dev)
873+
{
874+
struct mlx5_eq_table *table = dev->priv.eq_table;
875+
int ncomp_eqs;
876+
int ret;
877+
878+
ncomp_eqs = table->num_comp_eqs;
879+
table->comp_irqs = kcalloc(ncomp_eqs, sizeof(*table->comp_irqs), GFP_KERNEL);
880+
if (!table->comp_irqs)
881+
return -ENOMEM;
882+
883+
ret = mlx5_core_is_sf(dev) ? comp_irqs_request_sf(dev) :
884+
comp_irqs_request_pci(dev);
885+
if (ret < 0)
886+
kfree(table->comp_irqs);
887+
866888
return ret;
867889
}
868890

0 commit comments

Comments
 (0)