• Home
  • Raw
  • Download

Lines Matching full:pd

196 						struct usnic_uiom_pd *pd)  in usnic_uiom_unmap_sorted_intervals()  argument
207 iommu_unmap(pd->domain, va, PAGE_SIZE); in usnic_uiom_unmap_sorted_intervals()
214 static void __usnic_uiom_reg_release(struct usnic_uiom_pd *pd, in __usnic_uiom_reg_release() argument
228 spin_lock(&pd->lock); in __usnic_uiom_reg_release()
229 usnic_uiom_remove_interval(&pd->root, vpn_start, in __usnic_uiom_reg_release()
231 usnic_uiom_unmap_sorted_intervals(&rm_intervals, pd); in __usnic_uiom_reg_release()
241 spin_unlock(&pd->lock); in __usnic_uiom_reg_release()
255 struct usnic_uiom_pd *pd = uiomr->pd; in usnic_uiom_map_sorted_intervals() local
284 err = iommu_map(pd->domain, va_start, pa_start, in usnic_uiom_map_sorted_intervals()
301 err = iommu_map(pd->domain, va_start, pa_start, in usnic_uiom_map_sorted_intervals()
330 usnic_uiom_unmap_sorted_intervals(intervals, pd); in usnic_uiom_map_sorted_intervals()
334 struct usnic_uiom_reg *usnic_uiom_reg_get(struct usnic_uiom_pd *pd, in usnic_uiom_reg_get() argument
367 uiomr->pd = pd; in usnic_uiom_reg_get()
377 spin_lock(&pd->lock); in usnic_uiom_reg_get()
381 &pd->root, in usnic_uiom_reg_get()
397 err = usnic_uiom_insert_interval(&pd->root, vpn_start, vpn_last, in usnic_uiom_reg_get()
406 spin_unlock(&pd->lock); in usnic_uiom_reg_get()
411 usnic_uiom_unmap_sorted_intervals(&sorted_diff_intervals, pd); in usnic_uiom_reg_get()
416 spin_unlock(&pd->lock); in usnic_uiom_reg_get()
436 __usnic_uiom_reg_release(uiomr->pd, uiomr, 1); in usnic_uiom_reg_release()
444 struct usnic_uiom_pd *pd; in usnic_uiom_alloc_pd() local
447 pd = kzalloc(sizeof(*pd), GFP_KERNEL); in usnic_uiom_alloc_pd()
448 if (!pd) in usnic_uiom_alloc_pd()
451 pd->domain = domain = iommu_domain_alloc(&pci_bus_type); in usnic_uiom_alloc_pd()
454 kfree(pd); in usnic_uiom_alloc_pd()
458 iommu_set_fault_handler(pd->domain, usnic_uiom_dma_fault, NULL); in usnic_uiom_alloc_pd()
460 spin_lock_init(&pd->lock); in usnic_uiom_alloc_pd()
461 INIT_LIST_HEAD(&pd->devs); in usnic_uiom_alloc_pd()
463 return pd; in usnic_uiom_alloc_pd()
466 void usnic_uiom_dealloc_pd(struct usnic_uiom_pd *pd) in usnic_uiom_dealloc_pd() argument
468 iommu_domain_free(pd->domain); in usnic_uiom_dealloc_pd()
469 kfree(pd); in usnic_uiom_dealloc_pd()
472 int usnic_uiom_attach_dev_to_pd(struct usnic_uiom_pd *pd, struct device *dev) in usnic_uiom_attach_dev_to_pd() argument
482 err = iommu_attach_device(pd->domain, dev); in usnic_uiom_attach_dev_to_pd()
493 spin_lock(&pd->lock); in usnic_uiom_attach_dev_to_pd()
494 list_add_tail(&uiom_dev->link, &pd->devs); in usnic_uiom_attach_dev_to_pd()
495 pd->dev_cnt++; in usnic_uiom_attach_dev_to_pd()
496 spin_unlock(&pd->lock); in usnic_uiom_attach_dev_to_pd()
501 iommu_detach_device(pd->domain, dev); in usnic_uiom_attach_dev_to_pd()
507 void usnic_uiom_detach_dev_from_pd(struct usnic_uiom_pd *pd, struct device *dev) in usnic_uiom_detach_dev_from_pd() argument
512 spin_lock(&pd->lock); in usnic_uiom_detach_dev_from_pd()
513 list_for_each_entry(uiom_dev, &pd->devs, link) { in usnic_uiom_detach_dev_from_pd()
523 spin_unlock(&pd->lock); in usnic_uiom_detach_dev_from_pd()
528 pd->dev_cnt--; in usnic_uiom_detach_dev_from_pd()
529 spin_unlock(&pd->lock); in usnic_uiom_detach_dev_from_pd()
531 return iommu_detach_device(pd->domain, dev); in usnic_uiom_detach_dev_from_pd()
534 struct device **usnic_uiom_get_dev_list(struct usnic_uiom_pd *pd) in usnic_uiom_get_dev_list() argument
540 spin_lock(&pd->lock); in usnic_uiom_get_dev_list()
541 devs = kcalloc(pd->dev_cnt + 1, sizeof(*devs), GFP_ATOMIC); in usnic_uiom_get_dev_list()
547 list_for_each_entry(uiom_dev, &pd->devs, link) { in usnic_uiom_get_dev_list()
551 spin_unlock(&pd->lock); in usnic_uiom_get_dev_list()