@@ -804,44 +804,28 @@ void mlx5_eq_update_ci(struct mlx5_eq *eq, u32 cc, bool arm)
804804}
805805EXPORT_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