|
@@ -428,9 +428,21 @@ static int dev_dax_fault(struct vm_fault *vmf)
|
|
|
return dev_dax_huge_fault(vmf, PE_SIZE_PTE);
|
|
|
}
|
|
|
|
|
|
+static int dev_dax_split(struct vm_area_struct *vma, unsigned long addr)
|
|
|
+{
|
|
|
+ struct file *filp = vma->vm_file;
|
|
|
+ struct dev_dax *dev_dax = filp->private_data;
|
|
|
+ struct dax_region *dax_region = dev_dax->region;
|
|
|
+
|
|
|
+ if (!IS_ALIGNED(addr, dax_region->align))
|
|
|
+ return -EINVAL;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct vm_operations_struct dax_vm_ops = {
|
|
|
.fault = dev_dax_fault,
|
|
|
.huge_fault = dev_dax_huge_fault,
|
|
|
+ .split = dev_dax_split,
|
|
|
};
|
|
|
|
|
|
static int dax_mmap(struct file *filp, struct vm_area_struct *vma)
|