diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 24 | 
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 749420f1ea6f..25012c790f8f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -104,10 +104,11 @@ int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type,  		}  		break;  	case AMDGPU_HW_IP_DMA: -		if (ring < 2) { -			*out_ring = &adev->sdma[ring].ring; +		if (ring < adev->sdma.num_instances) { +			*out_ring = &adev->sdma.instance[ring].ring;  		} else { -			DRM_ERROR("only two SDMA rings are supported\n"); +			DRM_ERROR("only %d SDMA rings are supported\n", +				  adev->sdma.num_instances);  			return -EINVAL;  		}  		break; @@ -566,9 +567,24 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser *p,  			if (r)  				return r;  		} + +	} + +	r = amdgpu_vm_clear_invalids(adev, vm, &p->ibs[0].sync); + +	if (amdgpu_vm_debug && p->bo_list) { +		/* Invalidate all BOs to test for userspace bugs */ +		for (i = 0; i < p->bo_list->num_entries; i++) { +			/* ignore duplicates */ +			bo = p->bo_list->array[i].robj; +			if (!bo) +				continue; + +			amdgpu_vm_bo_invalidate(adev, bo); +		}  	} -	return amdgpu_vm_clear_invalids(adev, vm, &p->ibs[0].sync); +	return r;  }  static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,  | 
