lkml.org 
[lkml]   [2020]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 16/17] vdpa_sim: split vdpasim_virtqueue's iov field in out_iov and in_iov
    Date
    vringh_getdesc_iotlb() manages 2 iovs for writable and readable
    descriptors. This is very useful for the block device, where for
    each request we have both types of descriptor.

    Let's split the vdpasim_virtqueue's iov field in out_iov and
    in_iov to use them with vringh_getdesc_iotlb().

    We are using VIRTIO terminology for "out" (readable by the device)
    and "in" (writable by the device) descriptors.

    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    ---
    v2:
    - used VIRTIO terminology [Stefan]
    ---
    drivers/vdpa/vdpa_sim/vdpa_sim.c | 11 ++++++-----
    1 file changed, 6 insertions(+), 5 deletions(-)

    diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
    index f5f41f20ee0b..f8ee261ef4ae 100644
    --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
    +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
    @@ -33,7 +33,8 @@ u8 macaddr_buf[ETH_ALEN];

    struct vdpasim_virtqueue {
    struct vringh vring;
    - struct vringh_kiov iov;
    + struct vringh_kiov in_iov;
    + struct vringh_kiov out_iov;
    unsigned short head;
    bool ready;
    u64 desc_addr;
    @@ -197,12 +198,12 @@ static void vdpasim_net_work(struct work_struct *work)

    while (true) {
    total_write = 0;
    - err = vringh_getdesc_iotlb(&txq->vring, &txq->iov, NULL,
    + err = vringh_getdesc_iotlb(&txq->vring, &txq->out_iov, NULL,
    &txq->head, GFP_ATOMIC);
    if (err <= 0)
    break;

    - err = vringh_getdesc_iotlb(&rxq->vring, NULL, &rxq->iov,
    + err = vringh_getdesc_iotlb(&rxq->vring, NULL, &rxq->in_iov,
    &rxq->head, GFP_ATOMIC);
    if (err <= 0) {
    vringh_complete_iotlb(&txq->vring, txq->head, 0);
    @@ -210,13 +211,13 @@ static void vdpasim_net_work(struct work_struct *work)
    }

    while (true) {
    - read = vringh_iov_pull_iotlb(&txq->vring, &txq->iov,
    + read = vringh_iov_pull_iotlb(&txq->vring, &txq->out_iov,
    vdpasim->buffer,
    PAGE_SIZE);
    if (read <= 0)
    break;

    - write = vringh_iov_push_iotlb(&rxq->vring, &rxq->iov,
    + write = vringh_iov_push_iotlb(&rxq->vring, &rxq->in_iov,
    vdpasim->buffer, read);
    if (write <= 0)
    break;
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-11-26 15:53    [W:4.061 / U:0.320 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site