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

Reply via email to