The agreement was that Maxim was going to send a fix patch for the IPC stuff soonest.
On Tue, Apr 26, 2016 at 12:57 PM, Mike Holmes <[email protected]> wrote: > 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 > >
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
