Lines Matching defs:batch
789 static int gntdev_get_page(struct gntdev_copy_batch *batch, void __user *virt,
797 ret = pin_user_pages_fast(addr, 1, batch->writeable ? FOLL_WRITE : 0, &page);
801 batch->pages[batch->nr_pages++] = page;
809 static void gntdev_put_pages(struct gntdev_copy_batch *batch)
811 unpin_user_pages_dirty_lock(batch->pages, batch->nr_pages, batch->writeable);
812 batch->nr_pages = 0;
813 batch->writeable = false;
816 static int gntdev_copy(struct gntdev_copy_batch *batch)
820 gnttab_batch_copy(batch->ops, batch->nr_ops);
821 gntdev_put_pages(batch);
827 for (i = 0; i < batch->nr_ops; i++) {
828 s16 status = batch->ops[i].status;
834 if (__get_user(old_status, batch->status[i]))
840 if (__put_user(status, batch->status[i]))
844 batch->nr_ops = 0;
848 static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch,
856 * batch->pages for one page per-op and this would be a very
882 if (batch->nr_ops >= GNTDEV_COPY_BATCH) {
883 ret = gntdev_copy(batch);
890 op = &batch->ops[batch->nr_ops];
902 batch->writeable = false;
904 ret = gntdev_get_page(batch, virt, &gfn);
922 batch->writeable = true;
924 ret = gntdev_get_page(batch, virt, &gfn);
936 batch->status[batch->nr_ops] = status;
937 batch->nr_ops++;
946 struct gntdev_copy_batch batch;
953 batch.nr_ops = 0;
954 batch.nr_pages = 0;
964 ret = gntdev_grant_copy_seg(&batch, &seg, ©.segments[i].status);
970 if (batch.nr_ops)
971 ret = gntdev_copy(&batch);
975 gntdev_put_pages(&batch);