• Home
  • Raw
  • Download

Lines Matching +full:b +full:- +full:facing

2  * Client-facing interface for the Xenbus driver.  In other words, the
3 * interface between the Xenbus and the device-specific code, be it the
115 * xenbus_watch_path - register a watch
123 * success, or -errno on error. On success, the given @path will be saved as
124 * @watch->node, and remains the caller's to free. On error, @watch->node will
137 watch->node = path; in xenbus_watch_path()
138 watch->will_handle = will_handle; in xenbus_watch_path()
139 watch->callback = callback; in xenbus_watch_path()
144 watch->node = NULL; in xenbus_watch_path()
145 watch->will_handle = NULL; in xenbus_watch_path()
146 watch->callback = NULL; in xenbus_watch_path()
156 * xenbus_watch_pathfmt - register a watch on a sprintf-formatted path
164 * Return 0 on success, or -errno on error. On success, the watched path
165 * (@path/@path2) will be saved as @watch->node, and becomes the caller's to
166 * kfree(). On error, watch->node will be NULL, so the caller has nothing to
187 xenbus_dev_fatal(dev, -ENOMEM, "allocating path for watch"); in xenbus_watch_pathfmt()
188 return -ENOMEM; in xenbus_watch_pathfmt()
214 (something it was trying to in the past) because dev->state in __xenbus_switch_state()
222 if (state == dev->state) in __xenbus_switch_state()
234 err = xenbus_scanf(xbt, dev->nodename, "state", "%d", &current_state); in __xenbus_switch_state()
238 err = xenbus_printf(xbt, dev->nodename, "state", "%d", state); in __xenbus_switch_state()
248 if (err == -EAGAIN && !abort) in __xenbus_switch_state()
252 dev->state = state; in __xenbus_switch_state()
263 * Return 0 on success, or -errno on error. On error, the device will switch
276 complete(&dev->down); in xenbus_frontend_closed()
294 len = sprintf(printf_buffer, "%i ", -err); in xenbus_va_dev_error()
295 vsnprintf(printf_buffer + len, PRINTF_BUFFER_SIZE - len, fmt, ap); in xenbus_va_dev_error()
297 dev_err(&dev->dev, "%s\n", printf_buffer); in xenbus_va_dev_error()
299 path_buffer = kasprintf(GFP_KERNEL, "error/%s", dev->nodename); in xenbus_va_dev_error()
390 ret = -ENOMEM; in xenbus_setup_ring()
410 gnttab_grant_foreign_access_ref(grefs[i], dev->otherend_id, in xenbus_setup_ring()
458 * created local port to *port. Return 0 on success, or -errno on error. On
468 alloc_unbound.remote_dom = dev->otherend_id; in xenbus_alloc_evtchn()
483 * Free an existing event channel. Returns 0 on success or -errno on error.
511 * sets *vaddr to that address. Returns 0 on success, and -errno on
524 return -EINVAL; in xenbus_map_ring_valloc()
528 return -ENOMEM; in xenbus_map_ring_valloc()
530 info->node = kzalloc(sizeof(*info->node), GFP_KERNEL); in xenbus_map_ring_valloc()
531 if (!info->node) in xenbus_map_ring_valloc()
532 err = -ENOMEM; in xenbus_map_ring_valloc()
534 err = ring_ops->map(dev, info, gnt_refs, nr_grefs, vaddr); in xenbus_map_ring_valloc()
536 kfree(info->node); in xenbus_map_ring_valloc()
542 /* N.B. sizeof(phys_addr_t) doesn't always equal to sizeof(unsigned
543 * long), e.g. 32-on-64. Caller is responsible for preparing the
556 return -EINVAL; in __xenbus_map_ring()
559 gnttab_set_map_op(&info->map[i], info->phys_addrs[i], flags, in __xenbus_map_ring()
560 gnt_refs[i], dev->otherend_id); in __xenbus_map_ring()
564 gnttab_batch_map(info->map, i); in __xenbus_map_ring()
567 if (info->map[i].status != GNTST_okay) { in __xenbus_map_ring()
568 xenbus_dev_fatal(dev, info->map[i].status, in __xenbus_map_ring()
570 gnt_refs[i], dev->otherend_id); in __xenbus_map_ring()
573 handles[i] = info->map[i].handle; in __xenbus_map_ring()
581 gnttab_set_unmap_op(&info->unmap[j], in __xenbus_map_ring()
582 info->phys_addrs[i], in __xenbus_map_ring()
588 BUG_ON(HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, info->unmap, j)); in __xenbus_map_ring()
592 if (info->unmap[i].status != GNTST_okay) { in __xenbus_map_ring()
598 return -ENOENT; in __xenbus_map_ring()
620 return -EINVAL; in xenbus_unmap_ring()
650 info->phys_addrs[info->idx] = vaddr; in xenbus_map_ring_setup_grant_hvm()
651 info->addrs[info->idx] = vaddr; in xenbus_map_ring_setup_grant_hvm()
653 info->idx++; in xenbus_map_ring_setup_grant_hvm()
662 struct xenbus_map_node *node = info->node; in xenbus_map_ring_hvm()
668 err = xen_alloc_unpopulated_pages(nr_pages, node->hvm.pages); in xenbus_map_ring_hvm()
672 gnttab_foreach_grant(node->hvm.pages, nr_grefs, in xenbus_map_ring_hvm()
676 err = __xenbus_map_ring(dev, gnt_ref, nr_grefs, node->handles, in xenbus_map_ring_hvm()
678 node->nr_handles = nr_grefs; in xenbus_map_ring_hvm()
683 addr = vmap(node->hvm.pages, nr_pages, VM_MAP | VM_IOREMAP, in xenbus_map_ring_hvm()
686 err = -ENOMEM; in xenbus_map_ring_hvm()
690 node->hvm.addr = addr; in xenbus_map_ring_hvm()
693 list_add(&node->next, &xenbus_valloc_pages); in xenbus_map_ring_hvm()
697 info->node = NULL; in xenbus_map_ring_hvm()
703 xenbus_unmap_ring(dev, node->handles, nr_grefs, info->addrs); in xenbus_map_ring_hvm()
709 xen_free_unpopulated_pages(nr_pages, node->hvm.pages); in xenbus_map_ring_hvm()
728 return ring_ops->unmap(dev, vaddr); in xenbus_unmap_ring_vfree()
737 info->phys_addrs[info->idx++] = arbitrary_virt_to_machine(pte).maddr; in map_ring_apply()
747 struct xenbus_map_node *node = info->node; in xenbus_map_ring_pv()
750 int err = -ENOMEM; in xenbus_map_ring_pv()
754 return -ENOMEM; in xenbus_map_ring_pv()
755 if (apply_to_page_range(&init_mm, (unsigned long)area->addr, in xenbus_map_ring_pv()
758 err = __xenbus_map_ring(dev, gnt_refs, nr_grefs, node->handles, in xenbus_map_ring_pv()
764 node->nr_handles = nr_grefs; in xenbus_map_ring_pv()
765 node->pv.area = area; in xenbus_map_ring_pv()
768 list_add(&node->next, &xenbus_valloc_pages); in xenbus_map_ring_pv()
771 *vaddr = area->addr; in xenbus_map_ring_pv()
772 info->node = NULL; in xenbus_map_ring_pv()
796 if (node->pv.area->addr == vaddr) { in xenbus_unmap_ring_pv()
797 list_del(&node->next); in xenbus_unmap_ring_pv()
806 xenbus_dev_error(dev, -ENOENT, in xenbus_unmap_ring_pv()
811 for (i = 0; i < node->nr_handles; i++) { in xenbus_unmap_ring_pv()
819 unmap[i].handle = node->handles[i]; in xenbus_unmap_ring_pv()
826 for (i = 0; i < node->nr_handles; i++) { in xenbus_unmap_ring_pv()
831 node->handles[i], unmap[i].status); in xenbus_unmap_ring_pv()
838 free_vm_area(node->pv.area); in xenbus_unmap_ring_pv()
841 node->pv.area, node->nr_handles); in xenbus_unmap_ring_pv()
866 info->addrs[info->idx] = (unsigned long)gfn_to_virt(gfn); in xenbus_unmap_ring_setup_grant_hvm()
868 info->idx++; in xenbus_unmap_ring_setup_grant_hvm()
883 addr = node->hvm.addr; in xenbus_unmap_ring_hvm()
885 list_del(&node->next); in xenbus_unmap_ring_hvm()
894 xenbus_dev_error(dev, -ENOENT, in xenbus_unmap_ring_hvm()
899 nr_pages = XENBUS_PAGES(node->nr_handles); in xenbus_unmap_ring_hvm()
901 gnttab_foreach_grant(node->hvm.pages, node->nr_handles, in xenbus_unmap_ring_hvm()
905 rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles, in xenbus_unmap_ring_hvm()
909 xen_free_unpopulated_pages(nr_pages, node->hvm.pages); in xenbus_unmap_ring_hvm()