hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/rknpu/rknpu_mem.c
....@@ -15,6 +15,8 @@
1515 #include "rknpu_ioctl.h"
1616 #include "rknpu_mem.h"
1717
18
+#ifdef CONFIG_ROCKCHIP_RKNPU_DMA_HEAP
19
+
1820 int rknpu_mem_create_ioctl(struct rknpu_device *rknpu_dev, unsigned long data,
1921 struct file *file)
2022 {
....@@ -108,7 +110,7 @@
108110 }
109111
110112 page_count = length >> PAGE_SHIFT;
111
- pages = kmalloc_array(page_count, sizeof(struct page), GFP_KERNEL);
113
+ pages = vmalloc(page_count * sizeof(struct page));
112114 if (!pages) {
113115 LOG_ERROR("alloc pages failed\n");
114116 ret = -ENOMEM;
....@@ -146,7 +148,8 @@
146148 goto err_unmap_kv_addr;
147149 }
148150
149
- kfree(pages);
151
+ vfree(pages);
152
+ pages = NULL;
150153 dma_buf_unmap_attachment(attachment, table, DMA_BIDIRECTIONAL);
151154 dma_buf_detach(dmabuf, attachment);
152155
....@@ -169,7 +172,8 @@
169172 rknpu_obj->kv_addr = NULL;
170173
171174 err_free_pages:
172
- kfree(pages);
175
+ vfree(pages);
176
+ pages = NULL;
173177
174178 err_detach_dma_buf:
175179 dma_buf_unmap_attachment(attachment, table, DMA_BIDIRECTIONAL);
....@@ -292,7 +296,9 @@
292296 {
293297 struct rknpu_mem_object *rknpu_obj = NULL;
294298 struct rknpu_mem_sync args;
299
+#ifdef CONFIG_DMABUF_PARTIAL
295300 struct dma_buf *dmabuf;
301
+#endif
296302 int ret = -EFAULT;
297303
298304 if (unlikely(copy_from_user(&args, (struct rknpu_mem_sync *)data,
....@@ -310,7 +316,6 @@
310316 }
311317
312318 rknpu_obj = (struct rknpu_mem_object *)(uintptr_t)args.obj_addr;
313
- dmabuf = rknpu_obj->dmabuf;
314319
315320 #ifndef CONFIG_DMABUF_PARTIAL
316321 if (args.flags & RKNPU_MEM_SYNC_TO_DEVICE) {
....@@ -322,6 +327,7 @@
322327 DMA_FROM_DEVICE, true);
323328 }
324329 #else
330
+ dmabuf = rknpu_obj->dmabuf;
325331 if (args.flags & RKNPU_MEM_SYNC_TO_DEVICE) {
326332 dmabuf->ops->end_cpu_access_partial(dmabuf, DMA_TO_DEVICE,
327333 args.offset, args.size);
....@@ -334,3 +340,5 @@
334340
335341 return 0;
336342 }
343
+
344
+#endif