aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic
diff options
context:
space:
mode:
authorMaxim Uvarov <maxim.uvarov@linaro.org>2014-12-09 20:44:49 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2014-12-10 16:52:31 +0300
commitff860ac879483b4a518c3f1e4c9ae35adee678c5 (patch)
treef18b1f8bff6c75dcbf844a9cf30ebc1a4c421f6b /platform/linux-generic
parent3b366191520817c1592c42006e13410229dc7207 (diff)
linux-generic: correct socket get for mtu functions
Use helper function to get socket fd and add locks. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> Reviewed-by: Stuart Haslam <stuart.haslam@arm.com> Reviewed-by: Victor Kamensky <victor.kamensky@linaro.org>
Diffstat (limited to 'platform/linux-generic')
-rw-r--r--platform/linux-generic/odp_packet_io.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c
index 96f2eb62f..1f6d44dcc 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -563,20 +563,27 @@ int odp_pktio_set_mtu(odp_pktio_t id, int mtu)
return -1;
}
- if (entry->s.pkt_sock_mmap.sockfd)
- sockfd = entry->s.pkt_sock_mmap.sockfd;
- else
- sockfd = entry->s.pkt_sock.sockfd;
+ lock_entry(entry);
- strncpy(ifr.ifr_name, entry->s.name, IFNAMSIZ);
+ if (odp_unlikely(is_free(entry))) {
+ unlock_entry(entry);
+ ODP_DBG("already freed pktio\n");
+ return -1;
+ }
+
+ sockfd = sockfd_from_pktio_entry(entry);
+ strncpy(ifr.ifr_name, entry->s.name, IFNAMSIZ - 1);
+ ifr.ifr_name[IFNAMSIZ - 1] = 0;
ifr.ifr_mtu = mtu;
ret = ioctl(sockfd, SIOCSIFMTU, (caddr_t)&ifr);
if (ret < 0) {
ODP_DBG("ioctl SIOCSIFMTU error\n");
+ unlock_entry(entry);
return -1;
}
+ unlock_entry(entry);
return 0;
}
@@ -593,19 +600,26 @@ int odp_pktio_mtu(odp_pktio_t id)
return -1;
}
- if (entry->s.pkt_sock_mmap.sockfd)
- sockfd = entry->s.pkt_sock_mmap.sockfd;
- else
- sockfd = entry->s.pkt_sock.sockfd;
+ lock_entry(entry);
- strncpy(ifr.ifr_name, entry->s.name, IFNAMSIZ);
+ if (odp_unlikely(is_free(entry))) {
+ unlock_entry(entry);
+ ODP_DBG("already freed pktio\n");
+ return -1;
+ }
+
+ sockfd = sockfd_from_pktio_entry(entry);
+ strncpy(ifr.ifr_name, entry->s.name, IFNAMSIZ - 1);
+ ifr.ifr_name[IFNAMSIZ - 1] = 0;
ret = ioctl(sockfd, SIOCGIFMTU, &ifr);
if (ret < 0) {
ODP_DBG("ioctl SIOCGIFMTU error\n");
+ unlock_entry(entry);
return -1;
}
+ unlock_entry(entry);
return ifr.ifr_mtu;
}