On Thu, Apr 02, 2015 at 02:17:02PM +0300, Maxim Uvarov wrote:
> On 04/02/15 14:07, Stuart Haslam wrote:
> > {
> >- odp_packet_t pkt;
> > uint8_t *frame;
> > uint32_t frame_len;
> >- unsigned i;
> >- unsigned flags;
> > int sockfd;
> >- int nb_tx;
> > int ret;
> >+ unsigned i, n;
> > sockfd = pkt_sock->sockfd;
> >- flags = MSG_DONTWAIT;
> > i = 0;
> > while (i < len) {
> >- pkt = pkt_table[i];
> >+ frame = odp_packet_l2_ptr(pkt_table[i], &frame_len);
> >- frame = odp_packet_l2_ptr(pkt, &frame_len);
> >-
> >- ret = send(sockfd, frame, frame_len, flags);
> >+ ret = send(sockfd, frame, frame_len, MSG_DONTWAIT);
> > if (odp_unlikely(ret == -1)) {
> >- if (odp_likely(errno == EAGAIN)) {
> >- flags = 0; /* blocking for next rounds */
> >- continue; /* resend buffer */
> >- } else {
> >- break;
> >+ if (i == 0 && SOCK_ERR_REPORT(errno)) {
> >+ __odp_errno = errno;
> >+ ODP_ERR("send(basic): %s\n", strerror(errno));
> >+ return -1;
> > }
> >+ break;
> > }
> > i++;
> >- } /* end while */
> >- nb_tx = i;
> >+ }
> >- for (i = 0; i < len; i++)
> >- odp_packet_free(pkt_table[i]);
> >+ for (n = 0; n < i; ++n)
> >+ odp_packet_free(pkt_table[n]);
> >- return nb_tx;
> >+ return i;
> > }
> > /*
> >@@ -383,9 +379,7 @@ int send_pkt_sock_mmsg(pkt_sock_t *const pkt_sock,
> > struct iovec iovecs[ODP_PACKET_SOCKET_MAX_BURST_TX];
> > int ret;
> > int sockfd;
> >- unsigned i;
> >- unsigned sent_msgs = 0;
> >- unsigned flags;
> >+ unsigned i, n;
> > if (odp_unlikely(len > ODP_PACKET_SOCKET_MAX_BURST_TX))
> > return -1;
> >@@ -401,17 +395,24 @@ int send_pkt_sock_mmsg(pkt_sock_t *const pkt_sock,
> > msgvec[i].msg_hdr.msg_iovlen = 1;
> > }
> >- flags = MSG_DONTWAIT;
> >- for (i = 0; i < len; i += sent_msgs) {
> >- ret = sendmmsg(sockfd, &msgvec[i], len - i, flags);
> >- sent_msgs = ret > 0 ? (unsigned)ret : 0;
> >- flags = 0; /* blocking for next rounds */
> >+ for (i = 0; i < len; ) {
> >+ ret = sendmmsg(sockfd, &msgvec[i], len - i, MSG_DONTWAIT);
> >+ if (odp_unlikely(ret == -1)) {
> >+ if (i == 0 && SOCK_ERR_REPORT(errno)) {
> >+ __odp_errno = errno;
> >+ ODP_ERR("sendmmsg(): %s\n", strerror(errno));
> >+ return -1;
> >+ }
> >+ break;
> >+ }
> >+
> >+ i += (unsigned)ret;
> it looks like i should be simple int not unsigned.
>
> Maxim.
Possibly would be tidier, yes. I'll take a look at the best way to sort
it out, as it's compared with len which is unsigned, even though len is
signed in odp_pktio_send().
--
Stuart.
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp