vdpa_sim: factor out buffer completion logic
authorGautam Dawar <gautam.dawar@xilinx.com>
Wed, 30 Mar 2022 18:03:57 +0000 (23:33 +0530)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 31 May 2022 16:44:33 +0000 (12:44 -0400)
Wrap up common buffer completion logic in to vdpasim_net_complete

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Gautam Dawar <gdawar@xilinx.com>
Message-Id: <20220330180436.24644-18-gdawar@xilinx.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vdpa/vdpa_sim/vdpa_sim_net.c

index 2d1d8c59d0eadbd6f77b6cf34ce641b2113ce681..f4607172b0b8c233870d819909baa8c233733804 100644 (file)
 
 #define VDPASIM_NET_VQ_NUM     2
 
+static void vdpasim_net_complete(struct vdpasim_virtqueue *vq, size_t len)
+{
+       /* Make sure data is wrote before advancing index */
+       smp_wmb();
+
+       vringh_complete_iotlb(&vq->vring, vq->head, len);
+
+       /* Make sure used is visible before rasing the interrupt. */
+       smp_wmb();
+
+       local_bh_disable();
+       if (vringh_need_notify_iotlb(&vq->vring) > 0)
+               vringh_notify(&vq->vring);
+       local_bh_enable();
+}
+
 static void vdpasim_net_work(struct work_struct *work)
 {
        struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
@@ -78,21 +94,8 @@ static void vdpasim_net_work(struct work_struct *work)
                        total_write += write;
                }
 
-               /* Make sure data is wrote before advancing index */
-               smp_wmb();
-
-               vringh_complete_iotlb(&txq->vring, txq->head, 0);
-               vringh_complete_iotlb(&rxq->vring, rxq->head, total_write);
-
-               /* Make sure used is visible before rasing the interrupt. */
-               smp_wmb();
-
-               local_bh_disable();
-               if (vringh_need_notify_iotlb(&txq->vring) > 0)
-                       vringh_notify(&txq->vring);
-               if (vringh_need_notify_iotlb(&rxq->vring) > 0)
-                       vringh_notify(&rxq->vring);
-               local_bh_enable();
+               vdpasim_net_complete(txq, 0);
+               vdpasim_net_complete(rxq, total_write);
 
                if (++pkts > 4) {
                        schedule_work(&vdpasim->work);