@@ -804,44 +804,28 @@ void mlx5_eq_update_ci(struct mlx5_eq *eq, u32 cc, bool arm)
804
804
}
805
805
EXPORT_SYMBOL (mlx5_eq_update_ci );
806
806
807
- static void comp_irqs_release (struct mlx5_core_dev * dev )
807
+ static void comp_irqs_release_pci (struct mlx5_core_dev * dev )
808
808
{
809
809
struct mlx5_eq_table * table = dev -> priv .eq_table ;
810
810
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 );
816
812
}
817
813
818
- static int comp_irqs_request (struct mlx5_core_dev * dev )
814
+ static int comp_irqs_request_pci (struct mlx5_core_dev * dev )
819
815
{
820
816
struct mlx5_eq_table * table = dev -> priv .eq_table ;
821
817
const struct cpumask * prev = cpu_none_mask ;
822
818
const struct cpumask * mask ;
823
- int ncomp_eqs = table -> num_comp_eqs ;
819
+ int ncomp_eqs ;
824
820
u16 * cpus ;
825
821
int ret ;
826
822
int cpu ;
827
823
int i ;
828
824
829
825
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
-
840
826
cpus = kcalloc (ncomp_eqs , sizeof (* cpus ), GFP_KERNEL );
841
- if (!cpus ) {
827
+ if (!cpus )
842
828
ret = - ENOMEM ;
843
- goto free_irqs ;
844
- }
845
829
846
830
i = 0 ;
847
831
rcu_read_lock ();
@@ -857,12 +841,50 @@ static int comp_irqs_request(struct mlx5_core_dev *dev)
857
841
rcu_read_unlock ();
858
842
ret = mlx5_irqs_request_vectors (dev , cpus , ncomp_eqs , table -> comp_irqs );
859
843
kfree (cpus );
860
- if (ret < 0 )
861
- goto free_irqs ;
862
844
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 );
863
868
864
- free_irqs :
865
869
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
+
866
888
return ret ;
867
889
}
868
890
0 commit comments