diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-10-09 14:11:30 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-10-09 14:11:30 +0200 |
commit | 545633f6fecd240bfa50bb8e2db627eac76f9f8a (patch) | |
tree | 7b68d3d5d49e352c5d1eaecd5e0958db89bda09a /drivers/misc/cxl/cxllib.c | |
parent | 3a9fce327ff9cabf7f89d3f20616a83af28393da (diff) | |
parent | 5803b023881857db32ffefa0d269c90280a67ee0 (diff) | |
download | talos-op-linux-545633f6fecd240bfa50bb8e2db627eac76f9f8a.tar.gz talos-op-linux-545633f6fecd240bfa50bb8e2db627eac76f9f8a.zip |
Merge branch 'for-linus' into for-next
Diffstat (limited to 'drivers/misc/cxl/cxllib.c')
-rw-r--r-- | drivers/misc/cxl/cxllib.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/misc/cxl/cxllib.c b/drivers/misc/cxl/cxllib.c index 5dba23ca2e5f..dc9bc1807fdf 100644 --- a/drivers/misc/cxl/cxllib.c +++ b/drivers/misc/cxl/cxllib.c @@ -219,8 +219,17 @@ int cxllib_handle_fault(struct mm_struct *mm, u64 addr, u64 size, u64 flags) down_read(&mm->mmap_sem); - for (dar = addr; dar < addr + size; dar += page_size) { - if (!vma || dar < vma->vm_start || dar > vma->vm_end) { + vma = find_vma(mm, addr); + if (!vma) { + pr_err("Can't find vma for addr %016llx\n", addr); + rc = -EFAULT; + goto out; + } + /* get the size of the pages allocated */ + page_size = vma_kernel_pagesize(vma); + + for (dar = (addr & ~(page_size - 1)); dar < (addr + size); dar += page_size) { + if (dar < vma->vm_start || dar >= vma->vm_end) { vma = find_vma(mm, addr); if (!vma) { pr_err("Can't find vma for addr %016llx\n", addr); |