File tree Expand file tree Collapse file tree 3 files changed +31
-1
lines changed
drivers/net/ethernet/mellanox/mlx5/core Expand file tree Collapse file tree 3 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -1104,7 +1104,7 @@ void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)
1104
1104
struct mlx5_eq_table * table = dev -> priv .eq_table ;
1105
1105
1106
1106
mutex_lock (& table -> lock ); /* sync with create/destroy_async_eq */
1107
- mlx5_irq_table_destroy (dev );
1107
+ mlx5_irq_table_free_irqs (dev );
1108
1108
mutex_unlock (& table -> lock );
1109
1109
}
1110
1110
Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ int mlx5_irq_table_init(struct mlx5_core_dev *dev);
15
15
void mlx5_irq_table_cleanup (struct mlx5_core_dev * dev );
16
16
int mlx5_irq_table_create (struct mlx5_core_dev * dev );
17
17
void mlx5_irq_table_destroy (struct mlx5_core_dev * dev );
18
+ void mlx5_irq_table_free_irqs (struct mlx5_core_dev * dev );
18
19
int mlx5_irq_table_get_num_comp (struct mlx5_irq_table * table );
19
20
int mlx5_irq_table_get_sfs_vec (struct mlx5_irq_table * table );
20
21
struct mlx5_irq_table * mlx5_irq_table_get (struct mlx5_core_dev * dev );
Original file line number Diff line number Diff line change @@ -691,6 +691,24 @@ static void irq_pools_destroy(struct mlx5_irq_table *table)
691
691
irq_pool_free (table -> pcif_pool );
692
692
}
693
693
694
+ static void mlx5_irq_pool_free_irqs (struct mlx5_irq_pool * pool )
695
+ {
696
+ struct mlx5_irq * irq ;
697
+ unsigned long index ;
698
+
699
+ xa_for_each (& pool -> irqs , index , irq )
700
+ free_irq (irq -> map .virq , & irq -> nh );
701
+ }
702
+
703
+ static void mlx5_irq_pools_free_irqs (struct mlx5_irq_table * table )
704
+ {
705
+ if (table -> sf_ctrl_pool ) {
706
+ mlx5_irq_pool_free_irqs (table -> sf_comp_pool );
707
+ mlx5_irq_pool_free_irqs (table -> sf_ctrl_pool );
708
+ }
709
+ mlx5_irq_pool_free_irqs (table -> pcif_pool );
710
+ }
711
+
694
712
/* irq_table API */
695
713
696
714
int mlx5_irq_table_init (struct mlx5_core_dev * dev )
@@ -774,6 +792,17 @@ void mlx5_irq_table_destroy(struct mlx5_core_dev *dev)
774
792
pci_free_irq_vectors (dev -> pdev );
775
793
}
776
794
795
+ void mlx5_irq_table_free_irqs (struct mlx5_core_dev * dev )
796
+ {
797
+ struct mlx5_irq_table * table = dev -> priv .irq_table ;
798
+
799
+ if (mlx5_core_is_sf (dev ))
800
+ return ;
801
+
802
+ mlx5_irq_pools_free_irqs (table );
803
+ pci_free_irq_vectors (dev -> pdev );
804
+ }
805
+
777
806
int mlx5_irq_table_get_sfs_vec (struct mlx5_irq_table * table )
778
807
{
779
808
if (table -> sf_comp_pool )
You can’t perform that action at this time.
0 commit comments