Lines Matching refs:queue
142 typedef int vmci_memcpy_to_queue_func(struct vmci_queue *queue,
146 const struct vmci_queue *queue,
273 struct vmci_queue *queue = q; in qp_free_queue() local
275 if (queue) { in qp_free_queue()
281 queue->kernel_if->u.g.vas[i], in qp_free_queue()
282 queue->kernel_if->u.g.pas[i]); in qp_free_queue()
285 vfree(queue); in qp_free_queue()
297 struct vmci_queue *queue; in qp_alloc_queue() local
300 size_t queue_size = sizeof(*queue) + sizeof(*queue->kernel_if); in qp_alloc_queue()
305 (sizeof(*queue->kernel_if->u.g.pas) + in qp_alloc_queue()
306 sizeof(*queue->kernel_if->u.g.vas))) in qp_alloc_queue()
309 pas_size = num_pages * sizeof(*queue->kernel_if->u.g.pas); in qp_alloc_queue()
310 vas_size = num_pages * sizeof(*queue->kernel_if->u.g.vas); in qp_alloc_queue()
313 queue = vmalloc(queue_size); in qp_alloc_queue()
314 if (!queue) in qp_alloc_queue()
317 queue->q_header = NULL; in qp_alloc_queue()
318 queue->saved_header = NULL; in qp_alloc_queue()
319 queue->kernel_if = (struct vmci_queue_kern_if *)(queue + 1); in qp_alloc_queue()
320 queue->kernel_if->mutex = NULL; in qp_alloc_queue()
321 queue->kernel_if->num_pages = num_pages; in qp_alloc_queue()
322 queue->kernel_if->u.g.pas = (dma_addr_t *)(queue->kernel_if + 1); in qp_alloc_queue()
323 queue->kernel_if->u.g.vas = in qp_alloc_queue()
324 (void **)((u8 *)queue->kernel_if->u.g.pas + pas_size); in qp_alloc_queue()
325 queue->kernel_if->host = false; in qp_alloc_queue()
328 queue->kernel_if->u.g.vas[i] = in qp_alloc_queue()
330 &queue->kernel_if->u.g.pas[i], in qp_alloc_queue()
332 if (!queue->kernel_if->u.g.vas[i]) { in qp_alloc_queue()
334 qp_free_queue(queue, i * PAGE_SIZE); in qp_alloc_queue()
340 queue->q_header = queue->kernel_if->u.g.vas[0]; in qp_alloc_queue()
342 return queue; in qp_alloc_queue()
351 static int __qp_memcpy_to_queue(struct vmci_queue *queue, in __qp_memcpy_to_queue() argument
357 struct vmci_queue_kern_if *kernel_if = queue->kernel_if; in __qp_memcpy_to_queue()
412 const struct vmci_queue *queue, in __qp_memcpy_from_queue() argument
417 struct vmci_queue_kern_if *kernel_if = queue->kernel_if; in __qp_memcpy_from_queue()
569 static int qp_memcpy_to_queue(struct vmci_queue *queue, in qp_memcpy_to_queue() argument
573 return __qp_memcpy_to_queue(queue, queue_offset, in qp_memcpy_to_queue()
579 const struct vmci_queue *queue, in qp_memcpy_from_queue() argument
583 queue, queue_offset, size, false); in qp_memcpy_from_queue()
589 static int qp_memcpy_to_queue_iov(struct vmci_queue *queue, in qp_memcpy_to_queue_iov() argument
599 return __qp_memcpy_to_queue(queue, queue_offset, msg, size, true); in qp_memcpy_to_queue_iov()
607 const struct vmci_queue *queue, in qp_memcpy_from_queue_iov() argument
614 return __qp_memcpy_from_queue(dest, queue, queue_offset, size, true); in qp_memcpy_from_queue_iov()
625 struct vmci_queue *queue; in qp_host_alloc_queue() local
628 const size_t queue_size = sizeof(*queue) + sizeof(*(queue->kernel_if)); in qp_host_alloc_queue()
631 sizeof(*queue->kernel_if->u.h.page)) in qp_host_alloc_queue()
634 queue_page_size = num_pages * sizeof(*queue->kernel_if->u.h.page); in qp_host_alloc_queue()
636 queue = kzalloc(queue_size + queue_page_size, GFP_KERNEL); in qp_host_alloc_queue()
637 if (queue) { in qp_host_alloc_queue()
638 queue->q_header = NULL; in qp_host_alloc_queue()
639 queue->saved_header = NULL; in qp_host_alloc_queue()
640 queue->kernel_if = (struct vmci_queue_kern_if *)(queue + 1); in qp_host_alloc_queue()
641 queue->kernel_if->host = true; in qp_host_alloc_queue()
642 queue->kernel_if->mutex = NULL; in qp_host_alloc_queue()
643 queue->kernel_if->num_pages = num_pages; in qp_host_alloc_queue()
644 queue->kernel_if->u.h.header_page = in qp_host_alloc_queue()
645 (struct page **)((u8 *)queue + queue_size); in qp_host_alloc_queue()
646 queue->kernel_if->u.h.page = in qp_host_alloc_queue()
647 &queue->kernel_if->u.h.header_page[1]; in qp_host_alloc_queue()
650 return queue; in qp_host_alloc_queue()
657 static void qp_host_free_queue(struct vmci_queue *queue, u64 queue_size) in qp_host_free_queue() argument
659 kfree(queue); in qp_host_free_queue()
701 static void qp_acquire_queue_mutex(struct vmci_queue *queue) in qp_acquire_queue_mutex() argument
703 if (queue->kernel_if->host) in qp_acquire_queue_mutex()
704 mutex_lock(queue->kernel_if->mutex); in qp_acquire_queue_mutex()
712 static void qp_release_queue_mutex(struct vmci_queue *queue) in qp_release_queue_mutex() argument
714 if (queue->kernel_if->host) in qp_release_queue_mutex()
715 mutex_unlock(queue->kernel_if->mutex); in qp_release_queue_mutex()