[PATCH] Revert "drm/nouveau: fix dma syncing warning with debugging on."
Tobias
tobias.klausmann at freenet.de
Sun Feb 28 21:19:56 UTC 2021
This reverts commit f295c8cfec833c2707ff1512da10d65386dde7af.
Starting with commit f295c8cfec833c2707ff1512da10d65386dde7af
("drm/nouveau: fix dma syncing warning with debugging on.")
the following oops occures:
BUG: kernel NULL pointer dereference, address: 0000000000000000
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: 0000 [#1] PREEMPT SMP PTI
CPU: 6 PID: 1013 Comm: Xorg.bin Tainted: G E 5.11.0-desktop-rc0+ #2
Hardware name: Acer Aspire VN7-593G/Pluto_KLS, BIOS V1.11 08/01/2018
RIP: 0010:nouveau_bo_sync_for_device+0x40/0xb0 [nouveau]
Call Trace:
nouveau_bo_validate+0x5d/0x80 [nouveau]
nouveau_gem_ioctl_pushbuf+0x662/0x1120 [nouveau]
? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau]
drm_ioctl_kernel+0xa6/0xf0 [drm]
drm_ioctl+0x1f4/0x3a0 [drm]
? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau]
nouveau_drm_ioctl+0x50/0xa0 [nouveau]
__x64_sys_ioctl+0x7e/0xb0
do_syscall_64+0x33/0x80
entry_SYSCALL_64_after_hwframe+0x44/0xae
---[ end trace ccfb1e7f4064374f ]---
RIP: 0010:nouveau_bo_sync_for_device+0x40/0xb0 [nouveau]
Reverting the commit, fixes the issue!
Signed-off-by: Tobias Klausmann <tobias.klausmann at freenet.de>
---
drivers/gpu/drm/nouveau/nouveau_bo.c | 35 +++++-----------------------
1 file changed, 6 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 2375711877cf..33dc886d1d6d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -547,7 +547,7 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
{
struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
struct ttm_tt *ttm_dma = (struct ttm_tt *)nvbo->bo.ttm;
- int i, j;
+ int i;
if (!ttm_dma)
return;
@@ -556,21 +556,10 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
if (nvbo->force_coherent)
return;
- for (i = 0; i < ttm_dma->num_pages; ++i) {
- struct page *p = ttm_dma->pages[i];
- size_t num_pages = 1;
-
- for (j = i + 1; j < ttm_dma->num_pages; ++j) {
- if (++p != ttm_dma->pages[j])
- break;
-
- ++num_pages;
- }
+ for (i = 0; i < ttm_dma->num_pages; i++)
dma_sync_single_for_device(drm->dev->dev,
ttm_dma->dma_address[i],
- num_pages * PAGE_SIZE, DMA_TO_DEVICE);
- i += num_pages;
- }
+ PAGE_SIZE, DMA_TO_DEVICE);
}
void
@@ -578,7 +567,7 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)
{
struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
struct ttm_tt *ttm_dma = (struct ttm_tt *)nvbo->bo.ttm;
- int i, j;
+ int i;
if (!ttm_dma)
return;
@@ -587,21 +576,9 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)
if (nvbo->force_coherent)
return;
- for (i = 0; i < ttm_dma->num_pages; ++i) {
- struct page *p = ttm_dma->pages[i];
- size_t num_pages = 1;
-
- for (j = i + 1; j < ttm_dma->num_pages; ++j) {
- if (++p != ttm_dma->pages[j])
- break;
-
- ++num_pages;
- }
-
+ for (i = 0; i < ttm_dma->num_pages; i++)
dma_sync_single_for_cpu(drm->dev->dev, ttm_dma->dma_address[i],
- num_pages * PAGE_SIZE, DMA_FROM_DEVICE);
- i += num_pages;
- }
+ PAGE_SIZE, DMA_FROM_DEVICE);
}
void nouveau_bo_add_io_reserve_lru(struct ttm_buffer_object *bo)
--
2.30.1
More information about the dri-devel
mailing list