Lines Matching refs:dev_dax
17 static int check_vma(struct dev_dax *dev_dax, struct vm_area_struct *vma,
20 struct device *dev = &dev_dax->dev;
23 if (!dax_alive(dev_dax->dax_dev))
34 mask = dev_dax->align - 1;
54 __weak phys_addr_t dax_pgoff_to_phys(struct dev_dax *dev_dax, pgoff_t pgoff,
59 for (i = 0; i < dev_dax->nr_range; i++) {
60 struct dev_dax_range *dax_range = &dev_dax->ranges[i];
76 static vm_fault_t __dev_dax_pte_fault(struct dev_dax *dev_dax,
79 struct device *dev = &dev_dax->dev;
83 if (check_vma(dev_dax, vmf->vma, __func__))
86 if (dev_dax->align > PAGE_SIZE) {
88 dev_dax->align, fault_size);
92 if (fault_size != dev_dax->align)
95 phys = dax_pgoff_to_phys(dev_dax, vmf->pgoff, PAGE_SIZE);
106 static vm_fault_t __dev_dax_pmd_fault(struct dev_dax *dev_dax,
110 struct device *dev = &dev_dax->dev;
115 if (check_vma(dev_dax, vmf->vma, __func__))
118 if (dev_dax->align > PMD_SIZE) {
120 dev_dax->align, fault_size);
124 if (fault_size < dev_dax->align)
126 else if (fault_size > dev_dax->align)
135 phys = dax_pgoff_to_phys(dev_dax, pgoff, PMD_SIZE);
147 static vm_fault_t __dev_dax_pud_fault(struct dev_dax *dev_dax,
151 struct device *dev = &dev_dax->dev;
157 if (check_vma(dev_dax, vmf->vma, __func__))
160 if (dev_dax->align > PUD_SIZE) {
162 dev_dax->align, fault_size);
166 if (fault_size < dev_dax->align)
168 else if (fault_size > dev_dax->align)
177 phys = dax_pgoff_to_phys(dev_dax, pgoff, PUD_SIZE);
188 static vm_fault_t __dev_dax_pud_fault(struct dev_dax *dev_dax,
203 struct dev_dax *dev_dax = filp->private_data;
205 dev_dbg(&dev_dax->dev, "%s: %s (%#lx - %#lx) size = %d\n", current->comm,
213 rc = __dev_dax_pte_fault(dev_dax, vmf, &pfn);
217 rc = __dev_dax_pmd_fault(dev_dax, vmf, &pfn);
221 rc = __dev_dax_pud_fault(dev_dax, vmf, &pfn);
262 struct dev_dax *dev_dax = filp->private_data;
264 if (!IS_ALIGNED(addr, dev_dax->align))
272 struct dev_dax *dev_dax = filp->private_data;
274 return dev_dax->align;
286 struct dev_dax *dev_dax = filp->private_data;
289 dev_dbg(&dev_dax->dev, "trace\n");
296 rc = check_vma(dev_dax, vma, __func__);
312 struct dev_dax *dev_dax = filp ? filp->private_data : NULL;
314 if (!dev_dax || addr)
317 align = dev_dax->align;
348 struct dev_dax *dev_dax = dax_get_private(dax_dev);
350 dev_dbg(&dev_dax->dev, "trace\n");
357 filp->private_data = dev_dax;
365 struct dev_dax *dev_dax = filp->private_data;
367 dev_dbg(&dev_dax->dev, "trace\n");
386 static void dev_dax_kill(void *dev_dax)
388 kill_dev_dax(dev_dax);
391 int dev_dax_probe(struct dev_dax *dev_dax)
393 struct dax_device *dax_dev = dev_dax->dax_dev;
394 struct device *dev = &dev_dax->dev;
401 pgmap = dev_dax->pgmap;
402 if (dev_WARN_ONCE(dev, pgmap && dev_dax->nr_range > 1,
408 * (dev_dax->nr_range - 1), GFP_KERNEL);
411 pgmap->nr_range = dev_dax->nr_range;
414 for (i = 0; i < dev_dax->nr_range; i++) {
415 struct range *range = &dev_dax->ranges[i].range;
424 if (!dev_dax->pgmap)
451 return devm_add_action_or_reset(dev, dev_dax_kill, dev_dax);
455 static int dev_dax_remove(struct dev_dax *dev_dax)