[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V7 2/6] Adding utility function iov_net_csum_add
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH V7 2/6] Adding utility function iov_net_csum_add() for iovec checksum calculation Adding utility function iov_rebuild() for smart iovec copy |
Date: |
Fri, 30 Nov 2012 16:35:09 +0100 |
On Fri, Nov 16, 2012 at 2:55 PM, Dmitry Fleytman <address@hidden> wrote:
> @@ -252,6 +253,58 @@ unsigned iov_copy(struct iovec *dst_iov, unsigned int
> dst_iov_cnt,
> return j;
> }
>
> +size_t iov_rebuild(struct iovec *dst, unsigned int dst_cnt,
> + const struct iovec *src, const unsigned int src_cnt,
> + size_t src_off)
> +{
> + size_t curr_src_off = 0;
> + unsigned int i, j = 0;
> +
> + for (i = 0; i < src_cnt; i++) {
> + if (src_off < (curr_src_off + src[i].iov_len)) {
> + if (j == dst_cnt) {
> + return (size_t) -1;
> + }
> +
> + dst[j].iov_len = curr_src_off + src[i].iov_len - src_off;
> + dst[j].iov_base = src[i].iov_base + (src_off - curr_src_off);
> +
> + src_off += dst[j].iov_len;
> + j++;
> + }
> + curr_src_off += src[i].iov_len;
> + }
> + return j;
> +}
The existing iov_copy() function provides equivalent functionality. I
don't think iov_rebuild() is needed.
> +uint32_t
> +iov_net_csum_add(const struct iovec *iov, const unsigned int iov_cnt,
> + size_t iov_off, size_t size)
> +{
> + size_t iovec_off, buf_off;
> + unsigned int i;
> + uint32_t res = 0;
> + uint32_t seq = 0;
> +
> + iovec_off = 0;
> + buf_off = 0;
> + for (i = 0; i < iov_cnt && size; i++) {
> + if (iov_off < (iovec_off + iov[i].iov_len)) {
> + size_t len = MIN((iovec_off + iov[i].iov_len) - iov_off , size);
> + void *chunk_buf = iov[i].iov_base + (iov_off - iovec_off);
> +
> + res += net_checksum_add_cont(len, chunk_buf, seq);
> + seq += len;
> +
> + buf_off += len;
> + iov_off += len;
> + size -= len;
> + }
> + iovec_off += iov[i].iov_len;
> + }
> + return res;
> +}
Rename this net_checksum_add_iov() and place it in net/checksum.c,
then the new dependency on net from block can be dropped.
- [Qemu-devel] [PATCH V7 0/6] VMXNET3 paravirtual NIC device implementation, Dmitry Fleytman, 2012/11/16
- [Qemu-devel] [PATCH V7 1/6] Adding utility function net_checksum_add_cont() that allows checksum calculation of scattered data with odd chunk sizes, Dmitry Fleytman, 2012/11/16
- [Qemu-devel] [PATCH V7 2/6] Adding utility function iov_net_csum_add() for iovec checksum calculation Adding utility function iov_rebuild() for smart iovec copy, Dmitry Fleytman, 2012/11/16
- Re: [Qemu-devel] [PATCH V7 2/6] Adding utility function iov_net_csum_add() for iovec checksum calculation Adding utility function iov_rebuild() for smart iovec copy,
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH V7 3/6] Adding common definitions for VMWARE devices, Dmitry Fleytman, 2012/11/16
- [Qemu-devel] [PATCH V7 4/6] Adding common code for VMWARE network devices, Dmitry Fleytman, 2012/11/16
- [Qemu-devel] [PATCH V7 5/6] Adding packet abstraction for VMWARE network devices, Dmitry Fleytman, 2012/11/16
- [Qemu-devel] [PATCH V7 6/6] Adding VMXNET3 device implementation, Dmitry Fleytman, 2012/11/16
- Re: [Qemu-devel] [PATCH V7 0/6] VMXNET3 paravirtual NIC device implementation, Stefan Hajnoczi, 2012/11/21
- Re: [Qemu-devel] [PATCH V7 0/6] VMXNET3 paravirtual NIC device implementation, Stefan Hajnoczi, 2012/11/29