forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/drivers/gpu/drm/vmwgfx/vmwgfx_blit.c
....@@ -27,6 +27,7 @@
2727 **************************************************************************/
2828
2929 #include "vmwgfx_drv.h"
30
+#include <linux/highmem.h>
3031
3132 /*
3233 * Template that implements find_first_diff() for a generic
....@@ -374,12 +375,12 @@
374375 copy_size = min_t(u32, copy_size, PAGE_SIZE - src_page_offset);
375376
376377 if (unmap_src) {
377
- ttm_kunmap_atomic_prot(d->src_addr, d->src_prot);
378
+ kunmap_local(d->src_addr);
378379 d->src_addr = NULL;
379380 }
380381
381382 if (unmap_dst) {
382
- ttm_kunmap_atomic_prot(d->dst_addr, d->dst_prot);
383
+ kunmap_local(d->dst_addr);
383384 d->dst_addr = NULL;
384385 }
385386
....@@ -387,12 +388,8 @@
387388 if (WARN_ON_ONCE(dst_page >= d->dst_num_pages))
388389 return -EINVAL;
389390
390
- d->dst_addr =
391
- ttm_kmap_atomic_prot(d->dst_pages[dst_page],
392
- d->dst_prot);
393
- if (!d->dst_addr)
394
- return -ENOMEM;
395
-
391
+ d->dst_addr = kmap_local_page_prot(d->dst_pages[dst_page],
392
+ d->dst_prot);
396393 d->mapped_dst = dst_page;
397394 }
398395
....@@ -400,12 +397,8 @@
400397 if (WARN_ON_ONCE(src_page >= d->src_num_pages))
401398 return -EINVAL;
402399
403
- d->src_addr =
404
- ttm_kmap_atomic_prot(d->src_pages[src_page],
405
- d->src_prot);
406
- if (!d->src_addr)
407
- return -ENOMEM;
408
-
400
+ d->src_addr = kmap_local_page_prot(d->src_pages[src_page],
401
+ d->src_prot);
409402 d->mapped_src = src_page;
410403 }
411404 diff->do_cpy(diff, d->dst_addr + dst_page_offset,
....@@ -435,8 +428,10 @@
435428 *
436429 * Performs a CPU blit from one buffer object to another avoiding a full
437430 * bo vmap which may exhaust- or fragment vmalloc space.
438
- * On supported architectures (x86), we're using kmap_atomic which avoids
439
- * cross-processor TLB- and cache flushes and may, on non-HIGHMEM systems
431
+ *
432
+ * On supported architectures (x86), we're using kmap_local_prot() which
433
+ * avoids cross-processor TLB- and cache flushes. kmap_local_prot() will
434
+ * either map a highmem page with the proper pgprot on HIGHMEM=y systems or
440435 * reference already set-up mappings.
441436 *
442437 * Neither of the buffer objects may be placed in PCI memory
....@@ -459,18 +454,18 @@
459454
460455 /* Buffer objects need to be either pinned or reserved: */
461456 if (!(dst->mem.placement & TTM_PL_FLAG_NO_EVICT))
462
- lockdep_assert_held(&dst->resv->lock.base);
457
+ dma_resv_assert_held(dst->base.resv);
463458 if (!(src->mem.placement & TTM_PL_FLAG_NO_EVICT))
464
- lockdep_assert_held(&src->resv->lock.base);
459
+ dma_resv_assert_held(src->base.resv);
465460
466
- if (dst->ttm->state == tt_unpopulated) {
467
- ret = dst->ttm->bdev->driver->ttm_tt_populate(dst->ttm, &ctx);
461
+ if (!ttm_tt_is_populated(dst->ttm)) {
462
+ ret = dst->bdev->driver->ttm_tt_populate(dst->bdev, dst->ttm, &ctx);
468463 if (ret)
469464 return ret;
470465 }
471466
472
- if (src->ttm->state == tt_unpopulated) {
473
- ret = src->ttm->bdev->driver->ttm_tt_populate(src->ttm, &ctx);
467
+ if (!ttm_tt_is_populated(src->ttm)) {
468
+ ret = src->bdev->driver->ttm_tt_populate(src->bdev, src->ttm, &ctx);
474469 if (ret)
475470 return ret;
476471 }
....@@ -499,9 +494,9 @@
499494 }
500495 out:
501496 if (d.src_addr)
502
- ttm_kunmap_atomic_prot(d.src_addr, d.src_prot);
497
+ kunmap_local(d.src_addr);
503498 if (d.dst_addr)
504
- ttm_kunmap_atomic_prot(d.dst_addr, d.dst_prot);
499
+ kunmap_local(d.dst_addr);
505500
506501 return ret;
507502 }