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

Reply via email to