Commit cfa736f5 authored by Ralph Campbell's avatar Ralph Campbell Committed by Ben Skeggs

drm/nouveau/nouveau: fix the start/end range for migration

The user level OpenCL code shouldn't have to align start and end
addresses to a page boundary. That is better handled in the nouveau
driver. The npages field is also redundant since it can be computed
from the start and end addresses.
Signed-off-by: default avatarRalph Campbell <rcampbell@nvidia.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 3650b228
...@@ -105,11 +105,11 @@ nouveau_svmm_bind(struct drm_device *dev, void *data, ...@@ -105,11 +105,11 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,
struct nouveau_cli *cli = nouveau_cli(file_priv); struct nouveau_cli *cli = nouveau_cli(file_priv);
struct drm_nouveau_svm_bind *args = data; struct drm_nouveau_svm_bind *args = data;
unsigned target, cmd, priority; unsigned target, cmd, priority;
unsigned long addr, end, size; unsigned long addr, end;
struct mm_struct *mm; struct mm_struct *mm;
args->va_start &= PAGE_MASK; args->va_start &= PAGE_MASK;
args->va_end &= PAGE_MASK; args->va_end = ALIGN(args->va_end, PAGE_SIZE);
/* Sanity check arguments */ /* Sanity check arguments */
if (args->reserved0 || args->reserved1) if (args->reserved0 || args->reserved1)
...@@ -118,8 +118,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data, ...@@ -118,8 +118,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,
return -EINVAL; return -EINVAL;
if (args->va_start >= args->va_end) if (args->va_start >= args->va_end)
return -EINVAL; return -EINVAL;
if (!args->npages)
return -EINVAL;
cmd = args->header >> NOUVEAU_SVM_BIND_COMMAND_SHIFT; cmd = args->header >> NOUVEAU_SVM_BIND_COMMAND_SHIFT;
cmd &= NOUVEAU_SVM_BIND_COMMAND_MASK; cmd &= NOUVEAU_SVM_BIND_COMMAND_MASK;
...@@ -151,12 +149,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data, ...@@ -151,12 +149,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,
if (args->stride) if (args->stride)
return -EINVAL; return -EINVAL;
size = ((unsigned long)args->npages) << PAGE_SHIFT;
if ((args->va_start + size) <= args->va_start)
return -EINVAL;
if ((args->va_start + size) > args->va_end)
return -EINVAL;
/* /*
* Ok we are ask to do something sane, for now we only support migrate * Ok we are ask to do something sane, for now we only support migrate
* commands but we will add things like memory policy (what to do on * commands but we will add things like memory policy (what to do on
...@@ -171,7 +163,7 @@ nouveau_svmm_bind(struct drm_device *dev, void *data, ...@@ -171,7 +163,7 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,
return -EINVAL; return -EINVAL;
} }
for (addr = args->va_start, end = args->va_start + size; addr < end;) { for (addr = args->va_start, end = args->va_end; addr < end;) {
struct vm_area_struct *vma; struct vm_area_struct *vma;
unsigned long next; unsigned long next;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment