I am a bit worried that ipc is still an unhappy resident in api-next. On 26 April 2016 at 13:41, Maxim Uvarov <[email protected]> wrote:
> Merged, > > with same fix to pcap pktio. > > This patch comments out some ipc pktio code. I will try to send separate > patch to fix it, > anyway it's in broken state now. > > Maxim. > > > > On 04/26/16 16:02, Petri Savolainen wrote: > >> Input arrays should be defined as const, so that >> user can be sure that the implementation does not >> overwrite it during processing. >> >> Signed-off-by: Petri Savolainen <[email protected]> >> --- >> include/odp/api/spec/packet_io.h | 3 ++- >> platform/linux-generic/include/odp_packet_io_internal.h | 8 ++++---- >> platform/linux-generic/odp_packet_io.c | 10 ++++++---- >> platform/linux-generic/pktio/dpdk.c | 4 ++-- >> platform/linux-generic/pktio/ipc.c | 12 >> ++++++++---- >> platform/linux-generic/pktio/loop.c | 4 ++-- >> platform/linux-generic/pktio/netmap.c | 2 +- >> platform/linux-generic/pktio/socket.c | 2 +- >> platform/linux-generic/pktio/socket_mmap.c | 5 +++-- >> platform/linux-generic/pktio/tap.c | 2 +- >> 10 files changed, 30 insertions(+), 22 deletions(-) >> >> diff --git a/include/odp/api/spec/packet_io.h >> b/include/odp/api/spec/packet_io.h >> index 7c29176..a7d06da 100644 >> --- a/include/odp/api/spec/packet_io.h >> +++ b/include/odp/api/spec/packet_io.h >> @@ -805,7 +805,8 @@ uint64_t odp_pktin_wait_time(uint64_t nsec); >> * @return Number of packets sent >> * @retval <0 on failure >> */ >> -int odp_pktout_send(odp_pktout_queue_t queue, odp_packet_t packets[], >> int num); >> +int odp_pktout_send(odp_pktout_queue_t queue, const odp_packet_t >> packets[], >> + int num); >> /** >> * Return the currently configured MTU value of a packet IO interface. >> diff --git a/platform/linux-generic/include/odp_packet_io_internal.h >> b/platform/linux-generic/include/odp_packet_io_internal.h >> index 9fc13a9..5d102f4 100644 >> --- a/platform/linux-generic/include/odp_packet_io_internal.h >> +++ b/platform/linux-generic/include/odp_packet_io_internal.h >> @@ -189,7 +189,7 @@ typedef struct pktio_if_ops { >> odp_time_t (*pktin_ts_from_ns)(pktio_entry_t *pktio_entry, >> uint64_t ns); >> int (*recv)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], >> unsigned len); >> - int (*send)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[], >> + int (*send)(pktio_entry_t *pktio_entry, const odp_packet_t >> pkt_table[], >> unsigned len); >> uint32_t (*mtu_get)(pktio_entry_t *pktio_entry); >> int (*promisc_mode_set)(pktio_entry_t *pktio_entry, int enable); >> @@ -207,7 +207,7 @@ typedef struct pktio_if_ops { >> int (*recv_queue)(pktio_entry_t *entry, int index, >> odp_packet_t packets[], int num); >> int (*send_queue)(pktio_entry_t *entry, int index, >> - odp_packet_t packets[], int num); >> + const odp_packet_t packets[], int num); >> } pktio_if_ops_t; >> int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, const uint8_t >> *base, >> @@ -257,8 +257,8 @@ int single_output_queues_config(pktio_entry_t *entry, >> const odp_pktout_queue_param_t *param); >> int single_recv_queue(pktio_entry_t *entry, int index, odp_packet_t >> packets[], >> int num); >> -int single_send_queue(pktio_entry_t *entry, int index, odp_packet_t >> packets[], >> - int num); >> +int single_send_queue(pktio_entry_t *entry, int index, >> + const odp_packet_t packets[], int num); >> extern const pktio_if_ops_t netmap_pktio_ops; >> extern const pktio_if_ops_t dpdk_pktio_ops; >> diff --git a/platform/linux-generic/odp_packet_io.c >> b/platform/linux-generic/odp_packet_io.c >> index 148adc9..609f3e1 100644 >> --- a/platform/linux-generic/odp_packet_io.c >> +++ b/platform/linux-generic/odp_packet_io.c >> @@ -557,7 +557,8 @@ static int _odp_pktio_recv(odp_pktio_t id, >> odp_packet_t pkt_table[], int len) >> return pkts; >> } >> -static int _odp_pktio_send(odp_pktio_t id, odp_packet_t pkt_table[], >> int len) >> +static int _odp_pktio_send(odp_pktio_t id, const odp_packet_t >> pkt_table[], >> + int len) >> { >> pktio_entry_t *pktio_entry = get_pktio_entry(id); >> int pkts; >> @@ -1616,7 +1617,8 @@ uint64_t odp_pktin_wait_time(uint64_t nsec) >> return (nsec / SLEEP_NSEC) + 1; >> } >> -int odp_pktout_send(odp_pktout_queue_t queue, odp_packet_t packets[], >> int num) >> +int odp_pktout_send(odp_pktout_queue_t queue, const odp_packet_t >> packets[], >> + int num) >> { >> pktio_entry_t *entry; >> odp_pktio_t pktio = queue.pktio; >> @@ -1651,8 +1653,8 @@ int single_recv_queue(pktio_entry_t *entry, int >> index, odp_packet_t packets[], >> return _odp_pktio_recv(entry->s.handle, packets, num); >> } >> -int single_send_queue(pktio_entry_t *entry, int index, odp_packet_t >> packets[], >> - int num) >> +int single_send_queue(pktio_entry_t *entry, int index, >> + const odp_packet_t packets[], int num) >> { >> (void)index; >> return _odp_pktio_send(entry->s.handle, packets, num); >> diff --git a/platform/linux-generic/pktio/dpdk.c >> b/platform/linux-generic/pktio/dpdk.c >> index edd304d..d2167e7 100644 >> --- a/platform/linux-generic/pktio/dpdk.c >> +++ b/platform/linux-generic/pktio/dpdk.c >> @@ -741,7 +741,7 @@ fail: >> static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry, >> struct rte_mbuf *mbuf_table[], >> - odp_packet_t pkt_table[], uint16_t num) >> + const odp_packet_t pkt_table[], uint16_t >> num) >> { >> pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk; >> int i; >> @@ -852,7 +852,7 @@ static int dpdk_recv_queue(pktio_entry_t *pktio_entry, >> static int dpdk_send_queue(pktio_entry_t *pktio_entry, >> int index, >> - odp_packet_t pkt_table[], >> + const odp_packet_t pkt_table[], >> int num) >> { >> struct rte_mbuf *tx_mbufs[num]; >> diff --git a/platform/linux-generic/pktio/ipc.c >> b/platform/linux-generic/pktio/ipc.c >> index 381380e..4a17e36 100644 >> --- a/platform/linux-generic/pktio/ipc.c >> +++ b/platform/linux-generic/pktio/ipc.c >> @@ -575,8 +575,8 @@ static int ipc_pktio_recv(pktio_entry_t *pktio_entry, >> return pkts; >> } >> -static int ipc_pktio_send(pktio_entry_t *pktio_entry, odp_packet_t >> pkt_table[], >> - unsigned len) >> +static int ipc_pktio_send(pktio_entry_t *pktio_entry, >> + const odp_packet_t pkt_table[], unsigned len) >> { >> _ring_t *r; >> void **rbuf_p; >> @@ -610,7 +610,8 @@ static int ipc_pktio_send(pktio_entry_t *pktio_entry, >> odp_packet_t pkt_table[], >> ODP_ABORT("Unable to copy packet\n"); >> odp_packet_free(pkt); >> - pkt_table[i] = newpkt; >> + /* Cannot do this. Packet table is const. */ >> + /*pkt_table[i] = newpkt;*/ >> } >> rbuf_p = (void *)&pkt; >> @@ -625,7 +626,10 @@ static int ipc_pktio_send(pktio_entry_t >> *pktio_entry, odp_packet_t pkt_table[], >> } >> /* Put packets to ring to be processed by other process. */ >> - rbuf_p = (void *)&pkt_table[0]; >> + /* BUG: Cannot store pointer to user provided memory, >> + which is likely allocated from the stack and will be >> overwritten >> + after this function returns. */ >> +/* rbuf_p = (void *)&pkt_table[0]; */ >> r = pktio_entry->s.ipc.tx.send; >> ret = _ring_mp_enqueue_burst(r, rbuf_p, len); >> if (odp_unlikely(ret < 0)) { >> diff --git a/platform/linux-generic/pktio/loop.c >> b/platform/linux-generic/pktio/loop.c >> index f04824f..cd7cbec 100644 >> --- a/platform/linux-generic/pktio/loop.c >> +++ b/platform/linux-generic/pktio/loop.c >> @@ -104,8 +104,8 @@ static int loopback_recv(pktio_entry_t *pktio_entry, >> odp_packet_t pkts[], >> return nbr; >> } >> -static int loopback_send(pktio_entry_t *pktio_entry, odp_packet_t >> pkt_tbl[], >> - unsigned len) >> +static int loopback_send(pktio_entry_t *pktio_entry, >> + const odp_packet_t pkt_tbl[], unsigned len) >> { >> odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX]; >> queue_entry_t *qentry; >> diff --git a/platform/linux-generic/pktio/netmap.c >> b/platform/linux-generic/pktio/netmap.c >> index 1047a1e..6065922 100644 >> --- a/platform/linux-generic/pktio/netmap.c >> +++ b/platform/linux-generic/pktio/netmap.c >> @@ -743,7 +743,7 @@ static int netmap_recv_queue(pktio_entry_t >> *pktio_entry, int index, >> } >> static int netmap_send_queue(pktio_entry_t *pktio_entry, int index, >> - odp_packet_t pkt_table[], int num) >> + const odp_packet_t pkt_table[], int num) >> { >> pkt_netmap_t *pkt_nm = &pktio_entry->s.pkt_nm; >> struct pollfd polld; >> diff --git a/platform/linux-generic/pktio/socket.c >> b/platform/linux-generic/pktio/socket.c >> index da5c4ec..6f06170 100644 >> --- a/platform/linux-generic/pktio/socket.c >> +++ b/platform/linux-generic/pktio/socket.c >> @@ -743,7 +743,7 @@ static uint32_t _tx_pkt_to_iovec(odp_packet_t pkt, >> * ODP_PACKET_SOCKET_MMSG: >> */ >> static int sock_mmsg_send(pktio_entry_t *pktio_entry, >> - odp_packet_t pkt_table[], unsigned len) >> + const odp_packet_t pkt_table[], unsigned len) >> { >> pkt_sock_t *pkt_sock = &pktio_entry->s.pkt_sock; >> struct mmsghdr msgvec[ODP_PACKET_SOCKET_MAX_BURST_TX]; >> diff --git a/platform/linux-generic/pktio/socket_mmap.c >> b/platform/linux-generic/pktio/socket_mmap.c >> index d895690..efb5f78 100644 >> --- a/platform/linux-generic/pktio/socket_mmap.c >> +++ b/platform/linux-generic/pktio/socket_mmap.c >> @@ -197,7 +197,8 @@ static inline unsigned pkt_mmap_v2_rx(pktio_entry_t >> *pktio_entry, >> } >> static inline unsigned pkt_mmap_v2_tx(int sock, struct ring *ring, >> - odp_packet_t pkt_table[], unsigned >> len) >> + const odp_packet_t pkt_table[], >> + unsigned len) >> { >> union frame_map ppd; >> uint32_t pkt_len; >> @@ -554,7 +555,7 @@ static int sock_mmap_recv(pktio_entry_t *pktio_entry, >> } >> static int sock_mmap_send(pktio_entry_t *pktio_entry, >> - odp_packet_t pkt_table[], unsigned len) >> + const odp_packet_t pkt_table[], unsigned len) >> { >> pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap; >> diff --git a/platform/linux-generic/pktio/tap.c >> b/platform/linux-generic/pktio/tap.c >> index dac3b13..45c4ae1 100644 >> --- a/platform/linux-generic/pktio/tap.c >> +++ b/platform/linux-generic/pktio/tap.c >> @@ -238,7 +238,7 @@ static int tap_pktio_recv(pktio_entry_t *pktio_entry, >> odp_packet_t pkts[], >> return i; >> } >> -static int tap_pktio_send(pktio_entry_t *pktio_entry, odp_packet_t >> pkts[], >> +static int tap_pktio_send(pktio_entry_t *pktio_entry, const odp_packet_t >> pkts[], >> unsigned len) >> { >> ssize_t retval; >> > > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp > -- Mike Holmes Technical Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs "Work should be fun and collaborative, the rest follows"
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
