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)
11041104 struct mlx5_eq_table * table = dev -> priv .eq_table ;
11051105
11061106 mutex_lock (& table -> lock ); /* sync with create/destroy_async_eq */
1107- mlx5_irq_table_destroy (dev );
1107+ mlx5_irq_table_free_irqs (dev );
11081108 mutex_unlock (& table -> lock );
11091109}
11101110
Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ int mlx5_irq_table_init(struct mlx5_core_dev *dev);
1515void mlx5_irq_table_cleanup (struct mlx5_core_dev * dev );
1616int mlx5_irq_table_create (struct mlx5_core_dev * dev );
1717void mlx5_irq_table_destroy (struct mlx5_core_dev * dev );
18+ void mlx5_irq_table_free_irqs (struct mlx5_core_dev * dev );
1819int mlx5_irq_table_get_num_comp (struct mlx5_irq_table * table );
1920int mlx5_irq_table_get_sfs_vec (struct mlx5_irq_table * table );
2021struct 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)
691691 irq_pool_free (table -> pcif_pool );
692692}
693693
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+
694712/* irq_table API */
695713
696714int mlx5_irq_table_init (struct mlx5_core_dev * dev )
@@ -774,6 +792,17 @@ void mlx5_irq_table_destroy(struct mlx5_core_dev *dev)
774792 pci_free_irq_vectors (dev -> pdev );
775793}
776794
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+
777806int mlx5_irq_table_get_sfs_vec (struct mlx5_irq_table * table )
778807{
779808 if (table -> sf_comp_pool )
You can’t perform that action at this time.
0 commit comments