From: Youssef Samir <[email protected]>

When a BO is created, qaic will use the page allocator to request the
memory chunks that the BO will be composed of in-memory. The number of
chunks increases when memory is segmented. For example, a 16MB BO can
be composed of four 4MB chunks or 4096 4KB chunks.

A BO is then sliced into a single or multiple slices to be transferred
to the device on the DBC's xfer queue. For that to happen, the slice
needs to encode its memory chunks into DBC requests and keep track of
them in an array, which is allocated using kcalloc(). Knowing that the
BO might be very fragmented, this array can grow so large that the
allocation may fail to find contiguous memory for it.

Replace kcalloc() with kvcalloc() to allocate the DBC requests array
for a slice.

Signed-off-by: Youssef Samir <[email protected]>
Signed-off-by: Youssef Samir <[email protected]>
---
 drivers/accel/qaic/qaic_data.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/accel/qaic/qaic_data.c b/drivers/accel/qaic/qaic_data.c
index 797289e9d780..27c24eb351c7 100644
--- a/drivers/accel/qaic/qaic_data.c
+++ b/drivers/accel/qaic/qaic_data.c
@@ -165,7 +165,7 @@ static void free_slice(struct kref *kref)
        drm_gem_object_put(&slice->bo->base);
        sg_free_table(slice->sgt);
        kfree(slice->sgt);
-       kfree(slice->reqs);
+       kvfree(slice->reqs);
        kfree(slice);
 }
 
@@ -404,7 +404,7 @@ static int qaic_map_one_slice(struct qaic_device *qdev, 
struct qaic_bo *bo,
                goto free_sgt;
        }
 
-       slice->reqs = kcalloc(sgt->nents, sizeof(*slice->reqs), GFP_KERNEL);
+       slice->reqs = kvcalloc(sgt->nents, sizeof(*slice->reqs), GFP_KERNEL);
        if (!slice->reqs) {
                ret = -ENOMEM;
                goto free_slice;
@@ -430,7 +430,7 @@ static int qaic_map_one_slice(struct qaic_device *qdev, 
struct qaic_bo *bo,
        return 0;
 
 free_req:
-       kfree(slice->reqs);
+       kvfree(slice->reqs);
 free_slice:
        kfree(slice);
 free_sgt:
-- 
2.43.0

Reply via email to