|
@@ -145,8 +145,16 @@ static const struct vm_operations_struct cxl_mmap_vmops = {
|
|
|
*/
|
|
|
int cxl_context_iomap(struct cxl_context *ctx, struct vm_area_struct *vma)
|
|
|
{
|
|
|
+ u64 start = vma->vm_pgoff << PAGE_SHIFT;
|
|
|
u64 len = vma->vm_end - vma->vm_start;
|
|
|
- len = min(len, ctx->psn_size);
|
|
|
+
|
|
|
+ if (ctx->afu->current_mode == CXL_MODE_DEDICATED) {
|
|
|
+ if (start + len > ctx->afu->adapter->ps_size)
|
|
|
+ return -EINVAL;
|
|
|
+ } else {
|
|
|
+ if (start + len > ctx->psn_size)
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
if (ctx->afu->current_mode != CXL_MODE_DEDICATED) {
|
|
|
/* make sure there is a valid per process space for this AFU */
|