drivers/vdpa/vdpa_sim/vdpa_sim.c
104
if (use_va && vdpasim->mm_bound) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
105
vringh_init_iotlb_va(&vq->vring, vdpasim->features, vq->num,
drivers/vdpa/vdpa_sim/vdpa_sim.c
108
vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num,
drivers/vdpa/vdpa_sim/vdpa_sim.c
127
static void vdpasim_vq_reset(struct vdpasim *vdpasim,
drivers/vdpa/vdpa_sim/vdpa_sim.c
136
vringh_init_iotlb(&vq->vring, vdpasim->dev_attr.supported_features,
drivers/vdpa/vdpa_sim/vdpa_sim.c
142
static void vdpasim_do_reset(struct vdpasim *vdpasim, u32 flags)
drivers/vdpa/vdpa_sim/vdpa_sim.c
146
spin_lock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
148
for (i = 0; i < vdpasim->dev_attr.nvqs; i++) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
149
vdpasim_vq_reset(vdpasim, &vdpasim->vqs[i]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
150
vringh_set_iotlb(&vdpasim->vqs[i].vring, &vdpasim->iommu[0],
drivers/vdpa/vdpa_sim/vdpa_sim.c
151
&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
155
for (i = 0; i < vdpasim->dev_attr.nas; i++) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
156
vhost_iotlb_reset(&vdpasim->iommu[i]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
157
vhost_iotlb_add_range(&vdpasim->iommu[i], 0, ULONG_MAX,
drivers/vdpa/vdpa_sim/vdpa_sim.c
159
vdpasim->iommu_pt[i] = true;
drivers/vdpa/vdpa_sim/vdpa_sim.c
163
vdpasim->running = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
164
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
166
vdpasim->features = 0;
drivers/vdpa/vdpa_sim/vdpa_sim.c
167
vdpasim->status = 0;
drivers/vdpa/vdpa_sim/vdpa_sim.c
168
++vdpasim->generation;
drivers/vdpa/vdpa_sim/vdpa_sim.c
176
struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
177
struct mm_struct *mm = vdpasim->mm_bound;
drivers/vdpa/vdpa_sim/vdpa_sim.c
185
vdpasim->dev_attr.work_fn(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.c
193
struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
drivers/vdpa/vdpa_sim/vdpa_sim.c
198
struct vdpasim *vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
227
vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
228
vdpasim->dev_attr = *dev_attr;
drivers/vdpa/vdpa_sim/vdpa_sim.c
229
dev = &vdpasim->vdpa.dev;
drivers/vdpa/vdpa_sim/vdpa_sim.c
231
kthread_init_work(&vdpasim->work, vdpasim_work_fn);
drivers/vdpa/vdpa_sim/vdpa_sim.c
232
vdpasim->worker = kthread_run_worker(0, "vDPA sim worker: %s",
drivers/vdpa/vdpa_sim/vdpa_sim.c
234
if (IS_ERR(vdpasim->worker))
drivers/vdpa/vdpa_sim/vdpa_sim.c
237
mutex_init(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
238
spin_lock_init(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
243
vdpasim->vdpa.mdev = dev_attr->mgmt_dev;
drivers/vdpa/vdpa_sim/vdpa_sim.c
245
vdpasim->config = kzalloc(dev_attr->config_size, GFP_KERNEL);
drivers/vdpa/vdpa_sim/vdpa_sim.c
246
if (!vdpasim->config)
drivers/vdpa/vdpa_sim/vdpa_sim.c
249
vdpasim->vqs = kzalloc_objs(struct vdpasim_virtqueue, dev_attr->nvqs);
drivers/vdpa/vdpa_sim/vdpa_sim.c
250
if (!vdpasim->vqs)
drivers/vdpa/vdpa_sim/vdpa_sim.c
253
vdpasim->iommu = kmalloc_objs(*vdpasim->iommu, vdpasim->dev_attr.nas);
drivers/vdpa/vdpa_sim/vdpa_sim.c
254
if (!vdpasim->iommu)
drivers/vdpa/vdpa_sim/vdpa_sim.c
257
vdpasim->iommu_pt = kmalloc_objs(*vdpasim->iommu_pt,
drivers/vdpa/vdpa_sim/vdpa_sim.c
258
vdpasim->dev_attr.nas);
drivers/vdpa/vdpa_sim/vdpa_sim.c
259
if (!vdpasim->iommu_pt)
drivers/vdpa/vdpa_sim/vdpa_sim.c
262
for (i = 0; i < vdpasim->dev_attr.nas; i++) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
263
vhost_iotlb_init(&vdpasim->iommu[i], max_iotlb_entries, 0);
drivers/vdpa/vdpa_sim/vdpa_sim.c
264
vhost_iotlb_add_range(&vdpasim->iommu[i], 0, ULONG_MAX, 0,
drivers/vdpa/vdpa_sim/vdpa_sim.c
266
vdpasim->iommu_pt[i] = true;
drivers/vdpa/vdpa_sim/vdpa_sim.c
270
vringh_set_iotlb(&vdpasim->vqs[i].vring, &vdpasim->iommu[0],
drivers/vdpa/vdpa_sim/vdpa_sim.c
271
&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
273
vdpasim->vdpa.vmap.dma_dev = dev;
drivers/vdpa/vdpa_sim/vdpa_sim.c
275
return vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
284
void vdpasim_schedule_work(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim.c
286
kthread_queue_work(vdpasim->worker, &vdpasim->work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
294
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
295
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
306
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
307
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
314
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
315
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
317
if (vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK)
drivers/vdpa/vdpa_sim/vdpa_sim.c
325
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
326
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
328
if (!vdpasim->running &&
drivers/vdpa/vdpa_sim/vdpa_sim.c
329
(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK)) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
330
vdpasim->pending_kick = true;
drivers/vdpa/vdpa_sim/vdpa_sim.c
335
vdpasim_schedule_work(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.c
341
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
342
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
350
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
351
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
354
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
358
vdpasim_queue_ready(vdpasim, idx);
drivers/vdpa/vdpa_sim/vdpa_sim.c
360
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
365
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
366
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
374
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
375
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
378
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
380
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
388
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
389
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.c
400
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
402
if (vdpasim->dev_attr.get_stats)
drivers/vdpa/vdpa_sim/vdpa_sim.c
403
return vdpasim->dev_attr.get_stats(vdpasim, idx,
drivers/vdpa/vdpa_sim/vdpa_sim.c
424
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
426
return vdpasim->dev_attr.supported_features;
drivers/vdpa/vdpa_sim/vdpa_sim.c
436
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
442
vdpasim->features = features & vdpasim->dev_attr.supported_features;
drivers/vdpa/vdpa_sim/vdpa_sim.c
449
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
451
return vdpasim->features;
drivers/vdpa/vdpa_sim/vdpa_sim.c
467
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
469
return vdpasim->dev_attr.id;
drivers/vdpa/vdpa_sim/vdpa_sim.c
479
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
482
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
483
status = vdpasim->status;
drivers/vdpa/vdpa_sim/vdpa_sim.c
484
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
49
struct vdpasim *vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
491
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
493
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
494
vdpasim->status = status;
drivers/vdpa/vdpa_sim/vdpa_sim.c
495
vdpasim->running = (status & VIRTIO_CONFIG_S_DRIVER_OK) != 0;
drivers/vdpa/vdpa_sim/vdpa_sim.c
496
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
501
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
503
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
504
vdpasim->status = 0;
drivers/vdpa/vdpa_sim/vdpa_sim.c
505
vdpasim_do_reset(vdpasim, flags);
drivers/vdpa/vdpa_sim/vdpa_sim.c
506
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
518
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
520
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
521
vdpasim->running = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
522
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
529
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
532
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
533
vdpasim->running = true;
drivers/vdpa/vdpa_sim/vdpa_sim.c
535
if (vdpasim->pending_kick) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
537
for (i = 0; i < vdpasim->dev_attr.nvqs; ++i)
drivers/vdpa/vdpa_sim/vdpa_sim.c
540
vdpasim->pending_kick = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
543
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
550
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
552
return vdpasim->dev_attr.config_size;
drivers/vdpa/vdpa_sim/vdpa_sim.c
558
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
560
if (offset + len > vdpasim->dev_attr.config_size)
drivers/vdpa/vdpa_sim/vdpa_sim.c
563
if (vdpasim->dev_attr.get_config)
drivers/vdpa/vdpa_sim/vdpa_sim.c
564
vdpasim->dev_attr.get_config(vdpasim, vdpasim->config);
drivers/vdpa/vdpa_sim/vdpa_sim.c
566
memcpy(buf, vdpasim->config + offset, len);
drivers/vdpa/vdpa_sim/vdpa_sim.c
572
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
574
if (offset + len > vdpasim->dev_attr.config_size)
drivers/vdpa/vdpa_sim/vdpa_sim.c
577
memcpy(vdpasim->config + offset, buf, len);
drivers/vdpa/vdpa_sim/vdpa_sim.c
579
if (vdpasim->dev_attr.set_config)
drivers/vdpa/vdpa_sim/vdpa_sim.c
58
struct vdpasim *vdpasim = mm_work->vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
580
vdpasim->dev_attr.set_config(vdpasim, vdpasim->config);
drivers/vdpa/vdpa_sim/vdpa_sim.c
585
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
587
return vdpasim->generation;
drivers/vdpa/vdpa_sim/vdpa_sim.c
603
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
607
iommu = &vdpasim->iommu[asid];
drivers/vdpa/vdpa_sim/vdpa_sim.c
609
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
611
for (i = 0; i < vdpasim->dev_attr.nvqs; i++)
drivers/vdpa/vdpa_sim/vdpa_sim.c
613
vringh_set_iotlb(&vdpasim->vqs[i].vring, iommu,
drivers/vdpa/vdpa_sim/vdpa_sim.c
614
&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
616
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim.c
624
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
63
vdpasim->mm_bound = mm_work->mm_to_bind;
drivers/vdpa/vdpa_sim/vdpa_sim.c
630
if (asid >= vdpasim->dev_attr.nas)
drivers/vdpa/vdpa_sim/vdpa_sim.c
633
spin_lock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
635
iommu = &vdpasim->iommu[asid];
drivers/vdpa/vdpa_sim/vdpa_sim.c
637
vdpasim->iommu_pt[asid] = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
646
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
651
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
657
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
659
if (asid >= vdpasim->dev_attr.nas)
drivers/vdpa/vdpa_sim/vdpa_sim.c
66
static void vdpasim_worker_change_mm_sync(struct vdpasim *vdpasim,
drivers/vdpa/vdpa_sim/vdpa_sim.c
662
spin_lock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
663
if (vdpasim->iommu_pt[asid])
drivers/vdpa/vdpa_sim/vdpa_sim.c
665
vhost_iotlb_reset(&vdpasim->iommu[asid]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
666
vhost_iotlb_add_range(&vdpasim->iommu[asid], 0, ULONG_MAX,
drivers/vdpa/vdpa_sim/vdpa_sim.c
668
vdpasim->iommu_pt[asid] = true;
drivers/vdpa/vdpa_sim/vdpa_sim.c
670
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
676
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
679
mm_work.vdpasim = vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
682
vdpasim_worker_change_mm_sync(vdpasim, &mm_work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
689
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
692
mm_work.vdpasim = vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.c
695
vdpasim_worker_change_mm_sync(vdpasim, &mm_work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
702
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
705
if (asid >= vdpasim->dev_attr.nas)
drivers/vdpa/vdpa_sim/vdpa_sim.c
708
spin_lock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
709
if (vdpasim->iommu_pt[asid]) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
710
vhost_iotlb_reset(&vdpasim->iommu[asid]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
711
vdpasim->iommu_pt[asid] = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
713
ret = vhost_iotlb_add_range_ctx(&vdpasim->iommu[asid], iova,
drivers/vdpa/vdpa_sim/vdpa_sim.c
715
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
72
kthread_queue_work(vdpasim->worker, work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
723
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
725
if (asid >= vdpasim->dev_attr.nas)
drivers/vdpa/vdpa_sim/vdpa_sim.c
728
if (vdpasim->iommu_pt[asid]) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
729
vhost_iotlb_reset(&vdpasim->iommu[asid]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
730
vdpasim->iommu_pt[asid] = false;
drivers/vdpa/vdpa_sim/vdpa_sim.c
733
spin_lock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
734
vhost_iotlb_del_range(&vdpasim->iommu[asid], iova, iova + size - 1);
drivers/vdpa/vdpa_sim/vdpa_sim.c
735
spin_unlock(&vdpasim->iommu_lock);
drivers/vdpa/vdpa_sim/vdpa_sim.c
742
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
745
kthread_cancel_work_sync(&vdpasim->work);
drivers/vdpa/vdpa_sim/vdpa_sim.c
746
kthread_destroy_worker(vdpasim->worker);
drivers/vdpa/vdpa_sim/vdpa_sim.c
748
for (i = 0; i < vdpasim->dev_attr.nvqs; i++) {
drivers/vdpa/vdpa_sim/vdpa_sim.c
749
vringh_kiov_cleanup(&vdpasim->vqs[i].out_iov);
drivers/vdpa/vdpa_sim/vdpa_sim.c
750
vringh_kiov_cleanup(&vdpasim->vqs[i].in_iov);
drivers/vdpa/vdpa_sim/vdpa_sim.c
753
vdpasim->dev_attr.free(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.c
755
for (i = 0; i < vdpasim->dev_attr.nas; i++)
drivers/vdpa/vdpa_sim/vdpa_sim.c
756
vhost_iotlb_reset(&vdpasim->iommu[i]);
drivers/vdpa/vdpa_sim/vdpa_sim.c
757
kfree(vdpasim->iommu);
drivers/vdpa/vdpa_sim/vdpa_sim.c
758
kfree(vdpasim->iommu_pt);
drivers/vdpa/vdpa_sim/vdpa_sim.c
759
kfree(vdpasim->vqs);
drivers/vdpa/vdpa_sim/vdpa_sim.c
760
kfree(vdpasim->config);
drivers/vdpa/vdpa_sim/vdpa_sim.c
77
static struct vdpasim *vdpa_to_sim(struct vdpa_device *vdpa)
drivers/vdpa/vdpa_sim/vdpa_sim.c
79
return container_of(vdpa, struct vdpasim, vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim.c
93
static void vdpasim_queue_ready(struct vdpasim *vdpasim, unsigned int idx)
drivers/vdpa/vdpa_sim/vdpa_sim.c
95
struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx];
drivers/vdpa/vdpa_sim/vdpa_sim.h
101
static inline u32 vdpasim32_to_cpu(struct vdpasim *vdpasim, __virtio32 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
103
return __virtio32_to_cpu(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim.h
106
static inline __virtio32 cpu_to_vdpasim32(struct vdpasim *vdpasim, u32 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
108
return __cpu_to_virtio32(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim.h
111
static inline u64 vdpasim64_to_cpu(struct vdpasim *vdpasim, __virtio64 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
113
return __virtio64_to_cpu(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim.h
116
static inline __virtio64 cpu_to_vdpasim64(struct vdpasim *vdpasim, u64 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
118
return __cpu_to_virtio64(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim.h
20
struct vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim.h
47
void (*work_fn)(struct vdpasim *vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.h
48
void (*get_config)(struct vdpasim *vdpasim, void *config);
drivers/vdpa/vdpa_sim/vdpa_sim.h
49
void (*set_config)(struct vdpasim *vdpasim, const void *config);
drivers/vdpa/vdpa_sim/vdpa_sim.h
50
int (*get_stats)(struct vdpasim *vdpasim, u16 idx,
drivers/vdpa/vdpa_sim/vdpa_sim.h
53
void (*free)(struct vdpasim *vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.h
80
struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *attr,
drivers/vdpa/vdpa_sim/vdpa_sim.h
82
void vdpasim_schedule_work(struct vdpasim *vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim.h
85
static inline bool vdpasim_is_little_endian(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim.h
88
(vdpasim->features & (1ULL << VIRTIO_F_VERSION_1));
drivers/vdpa/vdpa_sim/vdpa_sim.h
91
static inline u16 vdpasim16_to_cpu(struct vdpasim *vdpasim, __virtio16 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
93
return __virtio16_to_cpu(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim.h
96
static inline __virtio16 cpu_to_vdpasim16(struct vdpasim *vdpasim, u16 val)
drivers/vdpa/vdpa_sim/vdpa_sim.h
98
return __cpu_to_virtio16(vdpasim_is_little_endian(vdpasim), val);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
109
static bool vdpasim_blk_handle_req(struct vdpasim *vdpasim,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
112
struct vdpasim_blk *blk = sim_to_blk(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
129
dev_dbg(&vdpasim->vdpa.dev, "missing headers - out_iov: %u in_iov %u\n",
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
135
dev_dbg(&vdpasim->vdpa.dev, "request in header too short\n");
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
149
dev_dbg(&vdpasim->vdpa.dev, "request out header too short\n");
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
155
type = vdpasim32_to_cpu(vdpasim, hdr.type);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
156
sector = vdpasim64_to_cpu(vdpasim, hdr.sector);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
162
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
171
if (!vdpasim_blk_check_range(vdpasim, sector,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
183
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
194
if (!vdpasim_blk_check_range(vdpasim, sector,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
206
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
219
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
238
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
248
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
261
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
270
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
277
if (!vdpasim_blk_check_range(vdpasim, sector, num_sectors,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
293
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
324
static void vdpasim_blk_work(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
329
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
331
if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK))
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
334
if (!vdpasim->running)
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
338
struct vdpasim_virtqueue *vq = &vdpasim->vqs[i];
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
344
while (vdpasim_blk_handle_req(vdpasim, vq)) {
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
360
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
363
vdpasim_schedule_work(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
366
static void vdpasim_blk_get_config(struct vdpasim *vdpasim, void *config)
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
372
blk_config->capacity = cpu_to_vdpasim64(vdpasim, VDPASIM_BLK_CAPACITY);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
373
blk_config->size_max = cpu_to_vdpasim32(vdpasim, VDPASIM_BLK_SIZE_MAX);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
374
blk_config->seg_max = cpu_to_vdpasim32(vdpasim, VDPASIM_BLK_SEG_MAX);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
375
blk_config->num_queues = cpu_to_vdpasim16(vdpasim, VDPASIM_BLK_VQ_NUM);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
376
blk_config->min_io_size = cpu_to_vdpasim16(vdpasim, 1);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
377
blk_config->opt_io_size = cpu_to_vdpasim32(vdpasim, 1);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
378
blk_config->blk_size = cpu_to_vdpasim32(vdpasim, SECTOR_SIZE);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
381
cpu_to_vdpasim32(vdpasim, SECTOR_SIZE);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
383
cpu_to_vdpasim32(vdpasim, VDPASIM_BLK_DWZ_MAX_SECTORS);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
384
blk_config->max_discard_seg = cpu_to_vdpasim32(vdpasim, 1);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
387
cpu_to_vdpasim32(vdpasim, VDPASIM_BLK_DWZ_MAX_SECTORS);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
388
blk_config->max_write_zeroes_seg = cpu_to_vdpasim32(vdpasim, 1);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
392
static void vdpasim_blk_free(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
394
struct vdpasim_blk *blk = sim_to_blk(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
407
struct vdpasim *simdev;
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
455
struct vdpasim *simdev = container_of(dev, struct vdpasim, vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
47
struct vdpasim vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
52
static struct vdpasim_blk *sim_to_blk(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
54
return container_of(vdpasim, struct vdpasim_blk, vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
79
static bool vdpasim_blk_check_range(struct vdpasim *vdpasim, u64 start_sector,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
83
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
89
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
96
dev_dbg(&vdpasim->vdpa.dev,
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
105
static virtio_net_ctrl_ack vdpasim_handle_ctrl_mac(struct vdpasim *vdpasim,
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
108
struct virtio_net_config *vio_config = vdpasim->config;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
109
struct vdpasim_virtqueue *cvq = &vdpasim->vqs[2];
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
127
static void vdpasim_handle_cvq(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
129
struct vdpasim_virtqueue *cvq = &vdpasim->vqs[2];
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
130
struct vdpasim_net *net = sim_to_net(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
137
if (!(vdpasim->features & (1ULL << VIRTIO_NET_F_CTRL_VQ)))
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
160
status = vdpasim_handle_ctrl_mac(vdpasim, ctrl.cmd);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
196
static void vdpasim_net_work(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
198
struct vdpasim_virtqueue *txq = &vdpasim->vqs[1];
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
199
struct vdpasim_virtqueue *rxq = &vdpasim->vqs[0];
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
200
struct vdpasim_net *net = sim_to_net(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
206
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
208
if (!vdpasim->running)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
211
if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK))
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
214
vdpasim_handle_cvq(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
234
if (!receive_filter(vdpasim, read)) {
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
262
vdpasim_schedule_work(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
268
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
285
static int vdpasim_net_get_stats(struct vdpasim *vdpasim, u16 idx,
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
289
struct vdpasim_net *net = sim_to_net(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
410
static void vdpasim_net_get_config(struct vdpasim *vdpasim, void *config)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
414
net_config->status = cpu_to_vdpasim16(vdpasim, VIRTIO_NET_S_LINK_UP);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
420
struct vdpasim *vdpasim = container_of(dev, struct vdpasim, vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
421
struct virtio_net_config *vio_config = vdpasim->config;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
423
mutex_lock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
427
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
431
mutex_unlock(&vdpasim->mutex);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
435
static void vdpasim_net_setup_config(struct vdpasim *vdpasim,
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
438
struct virtio_net_config *vio_config = vdpasim->config;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
443
vio_config->mtu = cpu_to_vdpasim16(vdpasim, config->net.mtu);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
446
vio_config->mtu = cpu_to_vdpasim16(vdpasim, 1500);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
449
static void vdpasim_net_free(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
451
struct vdpasim_net *net = sim_to_net(vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
463
struct vdpasim *simdev;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
517
struct vdpasim *simdev = container_of(dev, struct vdpasim, vdpa);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
57
struct vdpasim vdpasim;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
64
static struct vdpasim_net *sim_to_net(struct vdpasim *vdpasim)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
66
return container_of(vdpasim, struct vdpasim_net, vdpasim);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
85
static bool receive_filter(struct vdpasim *vdpasim, size_t len)
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
87
bool modern = vdpasim->features & (1ULL << VIRTIO_F_VERSION_1);
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
90
struct virtio_net_config *vio_config = vdpasim->config;
drivers/vdpa/vdpa_sim/vdpa_sim_net.c
91
struct vdpasim_net *net = sim_to_net(vdpasim);