Unified · Split
| @@ -525,8 +525,8 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, · 524 unmodified lines | ||
| 525 | 525 | return -EINVAL; |
| 526 | 526 | } |
| 527 | 527 | |
| 528 | − invalid_flags = ~(AMDGPU_VM_PAGE_READABLE | AMDGPU_VM_PAGE_WRITEABLE | | |
| 529 | − AMDGPU_VM_PAGE_EXECUTABLE); | |
| 528 | + invalid_flags = ~(AMDGPU_VM_DELAY_UPDATE | AMDGPU_VM_PAGE_READABLE | | |
| 529 | + AMDGPU_VM_PAGE_WRITEABLE | AMDGPU_VM_PAGE_EXECUTABLE); | |
| 530 | 530 | if ((args->flags & invalid_flags)) { |
| 531 | 531 | dev_err(&dev->pdev->dev, "invalid flags 0x%08X vs 0x%08X\n", |
| 532 | 532 | args->flags, invalid_flags); |
| @@ -579,7 +579,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, · 46 unmodified lines | ||
| 579 | 579 | break; |
| 580 | 580 | } |
| 581 | 581 | |
| 582 | − if (!r) | |
| 582 | + if (!r && !(args->flags & AMDGPU_VM_DELAY_UPDATE)) | |
| 583 | 583 | amdgpu_gem_va_update_vm(adev, bo_va); |
| 584 | 584 | |
| 585 | 585 | drm_gem_object_unreference_unlocked(gobj); |
| @@ -313,6 +313,9 @@ struct drm_amdgpu_gem_op { · 312 unmodified lines | ||
| 313 | 313 | #define AMDGPU_VA_OP_MAP 1 |
| 314 | 314 | #define AMDGPU_VA_OP_UNMAP 2 |
| 315 | 315 | |
| 316 | +/* Delay the page table update till the next CS */ | |
| 317 | +#define AMDGPU_VM_DELAY_UPDATE (1 << 0) | |
| 318 | + | |
| 316 | 319 | /* Mapping flags */ |
| 317 | 320 | /* readable mapping */ |
| 318 | 321 | #define AMDGPU_VM_PAGE_READABLE (1 << 1) |