Lines Matching defs:batch
799 static int gntdev_get_page(struct gntdev_copy_batch *batch, void __user *virt,
807 ret = pin_user_pages_fast(addr, 1, batch->writeable ? FOLL_WRITE : 0, &page);
811 batch->pages[batch->nr_pages++] = page;
819 static void gntdev_put_pages(struct gntdev_copy_batch *batch)
821 unpin_user_pages_dirty_lock(batch->pages, batch->nr_pages, batch->writeable);
822 batch->nr_pages = 0;
823 batch->writeable = false;
826 static int gntdev_copy(struct gntdev_copy_batch *batch)
830 gnttab_batch_copy(batch->ops, batch->nr_ops);
831 gntdev_put_pages(batch);
837 for (i = 0; i < batch->nr_ops; i++) {
838 s16 status = batch->ops[i].status;
844 if (__get_user(old_status, batch->status[i]))
850 if (__put_user(status, batch->status[i]))
854 batch->nr_ops = 0;
858 static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch,
866 * batch->pages for one page per-op and this would be a very
892 if (batch->nr_ops >= GNTDEV_COPY_BATCH) {
893 ret = gntdev_copy(batch);
900 op = &batch->ops[batch->nr_ops];
912 batch->writeable = false;
914 ret = gntdev_get_page(batch, virt, &gfn);
932 batch->writeable = true;
934 ret = gntdev_get_page(batch, virt, &gfn);
946 batch->status[batch->nr_ops] = status;
947 batch->nr_ops++;
956 struct gntdev_copy_batch batch;
963 batch.nr_ops = 0;
964 batch.nr_pages = 0;
974 ret = gntdev_grant_copy_seg(&batch, &seg, ©.segments[i].status);
980 if (batch.nr_ops)
981 ret = gntdev_copy(&batch);
985 gntdev_put_pages(&batch);