diff options
Diffstat (limited to 'drivers/misc/cxl')
| -rw-r--r-- | drivers/misc/cxl/Makefile | 1 | ||||
| -rw-r--r-- | drivers/misc/cxl/cxllib.c | 13 | ||||
| -rw-r--r-- | drivers/misc/cxl/flash.c | 1 | 
3 files changed, 13 insertions, 2 deletions
| diff --git a/drivers/misc/cxl/Makefile b/drivers/misc/cxl/Makefile index 0b5fd749d96d..502d41fc9ea5 100644 --- a/drivers/misc/cxl/Makefile +++ b/drivers/misc/cxl/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ccflags-y			:= $(call cc-disable-warning, unused-const-variable)  ccflags-$(CONFIG_PPC_WERROR)	+= -Werror 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); diff --git a/drivers/misc/cxl/flash.c b/drivers/misc/cxl/flash.c index 3aa216bf0939..43917898fb9a 100644 --- a/drivers/misc/cxl/flash.c +++ b/drivers/misc/cxl/flash.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/kernel.h>  #include <linux/fs.h>  #include <linux/semaphore.h> |