net/mlx5: Fix failing fw tracer allocation on s390
authorNiklas Schnelle <schnelle@linux.ibm.com>
Thu, 9 Apr 2020 07:46:20 +0000 (09:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 May 2020 15:25:53 +0000 (17:25 +0200)
commit a019b36123aec9700b21ae0724710f62928a8bc1 upstream.

On s390 FORCE_MAX_ZONEORDER is 9 instead of 11, thus a larger kzalloc()
allocation as done for the firmware tracer will always fail.

Looking at mlx5_fw_tracer_save_trace(), it is actually the driver itself
that copies the debug data into the trace array and there is no need for
the allocation to be contiguous in physical memory. We can therefor use
kvzalloc() instead of kzalloc() and get rid of the large contiguous
allcoation.

Fixes: f53aaa31cce7 ("net/mlx5: FW tracer, implement tracer logic")
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c

index d4ec93bde4dedbaeca4bb5976c705a3ea6b83f82..2266c09b741a26b134858ea9c56c86234bf190c9 100644 (file)
@@ -796,7 +796,7 @@ struct mlx5_fw_tracer *mlx5_fw_tracer_create(struct mlx5_core_dev *dev)
                return NULL;
        }
 
-       tracer = kzalloc(sizeof(*tracer), GFP_KERNEL);
+       tracer = kvzalloc(sizeof(*tracer), GFP_KERNEL);
        if (!tracer)
                return ERR_PTR(-ENOMEM);
 
@@ -842,7 +842,7 @@ struct mlx5_fw_tracer *mlx5_fw_tracer_create(struct mlx5_core_dev *dev)
        tracer->dev = NULL;
        destroy_workqueue(tracer->work_queue);
 free_tracer:
-       kfree(tracer);
+       kvfree(tracer);
        return ERR_PTR(err);
 }
 
@@ -919,7 +919,7 @@ void mlx5_fw_tracer_destroy(struct mlx5_fw_tracer *tracer)
        mlx5_fw_tracer_destroy_log_buf(tracer);
        flush_workqueue(tracer->work_queue);
        destroy_workqueue(tracer->work_queue);
-       kfree(tracer);
+       kvfree(tracer);
 }
 
 void mlx5_fw_tracer_event(struct mlx5_core_dev *dev, struct mlx5_eqe *eqe)