static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem,

                               unsigned int len)

{

    unsigned int offset;

    int i;



    offset = 0;

    for (i = 0; i < elem->in_num; i++) {

        size_t size = MIN(len - offset, elem->in_sg[i].iov_len);



        cpu_physical_memory_unmap(elem->in_sg[i].iov_base,

                                  elem->in_sg[i].iov_len,

                                  1, size);



        offset += size;

    }



    for (i = 0; i < elem->out_num; i++)

        cpu_physical_memory_unmap(elem->out_sg[i].iov_base,

                                  elem->out_sg[i].iov_len,

                                  0, elem->out_sg[i].iov_len);

}

static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem,

                               unsigned int len)

{

    unsigned int offset;

    int i;



    offset = 0;

    for (i = 0; i < elem->in_num; i++) {

        size_t size = MIN(len - offset, elem->in_sg[i].iov_len);



        cpu_physical_memory_unmap(elem->in_sg[i].iov_base,

                                  elem->in_sg[i].iov_len,

                                  1, size);



        offset += size;

    }



    for (i = 0; i < elem->out_num; i++)

        cpu_physical_memory_unmap(elem->out_sg[i].iov_base,

                                  elem->out_sg[i].iov_len,

                                  0, elem->out_sg[i].iov_len);

}

static void FUNC_0(VirtQueue *VAR_0, const VirtQueueElement *VAR_1,

                               unsigned int VAR_2)

{

    unsigned int VAR_3;

    int VAR_4;



    VAR_3 = 0;

    for (VAR_4 = 0; VAR_4 < VAR_1->in_num; VAR_4++) {

        size_t size = MIN(VAR_2 - VAR_3, VAR_1->in_sg[VAR_4].iov_len);



        cpu_physical_memory_unmap(VAR_1->in_sg[VAR_4].iov_base,

                                  VAR_1->in_sg[VAR_4].iov_len,

                                  1, size);



        VAR_3 += size;

    }



    for (VAR_4 = 0; VAR_4 < VAR_1->out_num; VAR_4++)

        cpu_physical_memory_unmap(VAR_1->out_sg[VAR_4].iov_base,

                                  VAR_1->out_sg[VAR_4].iov_len,

                                  0, VAR_1->out_sg[VAR_4].iov_len);

}

static void FUNC_0(VirtQueue *VAR_0, const VirtQueueElement *VAR_1,
unsigned int VAR_2)
{ unsigned int VAR_3; int VAR_4; VAR_3 = 0; for (VAR_4 = 0; VAR_4 < VAR_1->in_num; VAR_4++) { size_t size = MIN(VAR_2 - VAR_3, VAR_1->in_sg[VAR_4].iov_len); cpu_physical_memory_unmap(VAR_1->in_sg[VAR_4].iov_base,
VAR_1->in_sg[VAR_4].iov_len,
1, size); VAR_3 += size; } for (VAR_4 = 0; VAR_4 < VAR_1->out_num; VAR_4++) cpu_physical_memory_unmap(VAR_1->out_sg[VAR_4].iov_base,
VAR_1->out_sg[VAR_4].iov_len,
0, VAR_1->out_sg[VAR_4].iov_len); }