forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/mellanox/mlx5/core/alloc.c
....@@ -56,22 +56,23 @@
5656 size_t size, dma_addr_t *dma_handle,
5757 int node)
5858 {
59
+ struct device *device = mlx5_core_dma_dev(dev);
5960 struct mlx5_priv *priv = &dev->priv;
6061 int original_node;
6162 void *cpu_handle;
6263
6364 mutex_lock(&priv->alloc_mutex);
64
- original_node = dev_to_node(&dev->pdev->dev);
65
- set_dev_node(&dev->pdev->dev, node);
66
- cpu_handle = dma_zalloc_coherent(&dev->pdev->dev, size,
67
- dma_handle, GFP_KERNEL);
68
- set_dev_node(&dev->pdev->dev, original_node);
65
+ original_node = dev_to_node(device);
66
+ set_dev_node(device, node);
67
+ cpu_handle = dma_alloc_coherent(device, size, dma_handle,
68
+ GFP_KERNEL);
69
+ set_dev_node(device, original_node);
6970 mutex_unlock(&priv->alloc_mutex);
7071 return cpu_handle;
7172 }
7273
73
-int mlx5_buf_alloc_node(struct mlx5_core_dev *dev, int size,
74
- struct mlx5_frag_buf *buf, int node)
74
+static int mlx5_buf_alloc_node(struct mlx5_core_dev *dev, int size,
75
+ struct mlx5_frag_buf *buf, int node)
7576 {
7677 dma_addr_t t;
7778
....@@ -110,7 +111,7 @@
110111
111112 void mlx5_buf_free(struct mlx5_core_dev *dev, struct mlx5_frag_buf *buf)
112113 {
113
- dma_free_coherent(&dev->pdev->dev, buf->size, buf->frags->buf,
114
+ dma_free_coherent(mlx5_core_dma_dev(dev), buf->size, buf->frags->buf,
114115 buf->frags->map);
115116
116117 kfree(buf->frags);
....@@ -139,7 +140,7 @@
139140 if (!frag->buf)
140141 goto err_free_buf;
141142 if (frag->map & ((1 << buf->page_shift) - 1)) {
142
- dma_free_coherent(&dev->pdev->dev, frag_sz,
143
+ dma_free_coherent(mlx5_core_dma_dev(dev), frag_sz,
143144 buf->frags[i].buf, buf->frags[i].map);
144145 mlx5_core_warn(dev, "unexpected map alignment: %pad, page_shift=%d\n",
145146 &frag->map, buf->page_shift);
....@@ -152,7 +153,7 @@
152153
153154 err_free_buf:
154155 while (i--)
155
- dma_free_coherent(&dev->pdev->dev, PAGE_SIZE, buf->frags[i].buf,
156
+ dma_free_coherent(mlx5_core_dma_dev(dev), PAGE_SIZE, buf->frags[i].buf,
156157 buf->frags[i].map);
157158 kfree(buf->frags);
158159 err_out:
....@@ -168,7 +169,7 @@
168169 for (i = 0; i < buf->npages; i++) {
169170 int frag_sz = min_t(int, size, PAGE_SIZE);
170171
171
- dma_free_coherent(&dev->pdev->dev, frag_sz, buf->frags[i].buf,
172
+ dma_free_coherent(mlx5_core_dma_dev(dev), frag_sz, buf->frags[i].buf,
172173 buf->frags[i].map);
173174 size -= frag_sz;
174175 }
....@@ -186,10 +187,7 @@
186187 if (!pgdir)
187188 return NULL;
188189
189
- pgdir->bitmap = kcalloc(BITS_TO_LONGS(db_per_page),
190
- sizeof(unsigned long),
191
- GFP_KERNEL);
192
-
190
+ pgdir->bitmap = bitmap_zalloc(db_per_page, GFP_KERNEL);
193191 if (!pgdir->bitmap) {
194192 kfree(pgdir);
195193 return NULL;
....@@ -200,7 +198,7 @@
200198 pgdir->db_page = mlx5_dma_zalloc_coherent_node(dev, PAGE_SIZE,
201199 &pgdir->db_dma, node);
202200 if (!pgdir->db_page) {
203
- kfree(pgdir->bitmap);
201
+ bitmap_free(pgdir->bitmap);
204202 kfree(pgdir);
205203 return NULL;
206204 }
....@@ -277,10 +275,10 @@
277275 __set_bit(db->index, db->u.pgdir->bitmap);
278276
279277 if (bitmap_full(db->u.pgdir->bitmap, db_per_page)) {
280
- dma_free_coherent(&(dev->pdev->dev), PAGE_SIZE,
278
+ dma_free_coherent(mlx5_core_dma_dev(dev), PAGE_SIZE,
281279 db->u.pgdir->db_page, db->u.pgdir->db_dma);
282280 list_del(&db->u.pgdir->list);
283
- kfree(db->u.pgdir->bitmap);
281
+ bitmap_free(db->u.pgdir->bitmap);
284282 kfree(db->u.pgdir);
285283 }
286284
....@@ -301,11 +299,18 @@
301299 }
302300 EXPORT_SYMBOL_GPL(mlx5_fill_page_array);
303301
304
-void mlx5_fill_page_frag_array(struct mlx5_frag_buf *buf, __be64 *pas)
302
+void mlx5_fill_page_frag_array_perm(struct mlx5_frag_buf *buf, __be64 *pas, u8 perm)
305303 {
306304 int i;
307305
306
+ WARN_ON(perm & 0xfc);
308307 for (i = 0; i < buf->npages; i++)
309
- pas[i] = cpu_to_be64(buf->frags[i].map);
308
+ pas[i] = cpu_to_be64(buf->frags[i].map | perm);
309
+}
310
+EXPORT_SYMBOL_GPL(mlx5_fill_page_frag_array_perm);
311
+
312
+void mlx5_fill_page_frag_array(struct mlx5_frag_buf *buf, __be64 *pas)
313
+{
314
+ mlx5_fill_page_frag_array_perm(buf, pas, 0);
310315 }
311316 EXPORT_SYMBOL_GPL(mlx5_fill_page_frag_array);