On Tue, Oct 20, 2015 at 04:53:10PM +0300, Maxim Uvarov wrote:
> 
> slave:
> 
> On 10/20/2015 15:41, Stuart Haslam wrote:
> >>+   /* recv() rings */
> >>>+  pktio_entry->s.ipc.recv.r = pktio_entry->s.ipc.m.prod;
> >>>+  pktio_entry->s.ipc.recv.r_p = pktio_entry->s.ipc.m.cons;
> >>>+  /* tx() rings */
> >>>+  pktio_entry->s.ipc.tx.r = pktio_entry->s.ipc.s.prod;
> >>>+  pktio_entry->s.ipc.tx.r_p = pktio_entry->s.ipc.s.cons;
> >>>+
> >This isn't exactly what I had in mind, can't you just use these names
> >directly in the first place in the code above? Is there any reason to
> >retain two copies of the pointers?
> >
> master:
> 
> +     /* recv() rings */
> +     pktio_entry->s.ipc.recv.r = pktio_entry->s.ipc.s.prod;
> +     pktio_entry->s.ipc.recv.r_p = pktio_entry->s.ipc.s.cons;
> +     /* tx() rings */
> +     pktio_entry->s.ipc.tx.r = pktio_entry->s.ipc.m.prod;
> +     pktio_entry->s.ipc.tx.r_p = pktio_entry->s.ipc.m.cons;
> +
> 
> 
> They are crossed. Instead of implementing 2 function slave_recv()
> master_recv()
> I add added one and this links.
> 
> But I can rename rings something like:
> 
> pktio_entry->s.ipc.local.prod
> pktio_entry->s.ipc.local.cons
> pktio_entry->s.ipc.remote.prod
> pktio_entry->s.ipc.remote.cons
> 
> local - will reflect local pool/ring mappings;
> remote - for remote process poll/ring mappings;
> 
> Maxim.

I don't think we're understanding each other, I mean like this (based on
top of this series):

diff --git a/platform/linux-generic/include/odp_packet_io_internal.h 
b/platform/linux-generic/include/odp_packet_io_internal.h
index e25e747..5ee3fd3 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -42,31 +42,22 @@ typedef struct {
 typedef        struct {
        /* TX */
        struct  {
-               odph_ring_t     *prod; /**< ODP ring for IPC msg packets
+               odph_ring_t     *send; /**< ODP ring for IPC msg packets
                                          indexes transmitted to shared
                                          memory */
-               odph_ring_t     *cons; /**< ODP ring for IPC msg packets
+               odph_ring_t     *free; /**< ODP ring for IPC msg packets
                                            indexes already processed by remote
                                            process */
-       } m; /* master */
+       } tx;
        /* RX */
        struct {
-               odph_ring_t     *prod; /**< ODP ring for IPC msg packets
+               odph_ring_t     *recv; /**< ODP ring for IPC msg packets
                                            indexes received from shared
                                             memory (from remote process) */
-               odph_ring_t     *cons; /**< ODP ring for IPC msg packets
+               odph_ring_t     *free; /**< ODP ring for IPC msg packets
                                            indexes already processed by
                                            current process */
-       } s; /* slave */
-       struct {
-               odph_ring_t *r;   /**< ring to receive from */
-               odph_ring_t *r_p; /**< after recv is done place packet descr to
-                                      that produced ring */
-       } recv; /* remapped above rings for easy usage in recv() */
-       struct {
-               odph_ring_t *r; /**< ring to transmit packets */
-               odph_ring_t *r_p; /**< ring with already transmitted packets */
-       } tx; /* remapped above rings for easy usage in send() */
+       } rx; /* slave */
        void            *pool_base;             /**< Remote pool base addr */
        void            *pool_mdata_base;       /**< Remote pool mdata base 
addr */
        uint64_t        pkt_size;               /**< Packet size in remote pool 
*/
diff --git a/platform/linux-generic/pktio/ipc.c 
b/platform/linux-generic/pktio/ipc.c
index 835de17..791ad1f 100644
--- a/platform/linux-generic/pktio/ipc.c
+++ b/platform/linux-generic/pktio/ipc.c
@@ -116,13 +116,6 @@ static int _ipc_master_post_init(pktio_entry_t 
*pktio_entry)
        pktio_entry->s.ipc.pool_mdata_base = (char *)ipc_pool_base +
                                             pinfo->slave.mdata_offset;
 
-       /* recv() rings */
-       pktio_entry->s.ipc.recv.r = pktio_entry->s.ipc.s.prod;
-       pktio_entry->s.ipc.recv.r_p = pktio_entry->s.ipc.s.cons;
-       /* tx() rings */
-       pktio_entry->s.ipc.tx.r = pktio_entry->s.ipc.m.prod;
-       pktio_entry->s.ipc.tx.r_p = pktio_entry->s.ipc.m.cons;
-
        odp_atomic_store_u32(&pktio_entry->s.ipc.ready, 1);
 
        ODP_DBG("Post init... DONE.\n");
@@ -152,59 +145,59 @@ static int _ipc_init_master(pktio_entry_t *pktio_entry,
         * to be processed packets ring.
         */
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_m_prod", dev);
-       pktio_entry->s.ipc.m.prod = odph_ring_create(ipc_shm_name,
+       pktio_entry->s.ipc.tx.send = odph_ring_create(ipc_shm_name,
                        PKTIO_IPC_ENTRIES,
                        ODPH_RING_SHM_PROC | ODPH_RING_NO_LIST);
-       if (!pktio_entry->s.ipc.m.prod) {
+       if (!pktio_entry->s.ipc.tx.send) {
                ODP_DBG("pid %d unable to create ipc ring %s name\n",
                        getpid(), ipc_shm_name);
                return -1;
        }
        ODP_DBG("Created IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.m.prod),
-               odph_ring_free_count(pktio_entry->s.ipc.m.prod));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.tx.send),
+               odph_ring_free_count(pktio_entry->s.ipc.tx.send));
 
        /* generate name in shm like ipc_pktio_p for
         * already processed packets
         */
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_m_cons", dev);
-       pktio_entry->s.ipc.m.cons = odph_ring_create(ipc_shm_name,
+       pktio_entry->s.ipc.tx.free = odph_ring_create(ipc_shm_name,
                        PKTIO_IPC_ENTRIES,
                        ODPH_RING_SHM_PROC | ODPH_RING_NO_LIST);
-       if (!pktio_entry->s.ipc.m.cons) {
+       if (!pktio_entry->s.ipc.tx.free) {
                ODP_DBG("pid %d unable to create ipc ring %s name\n",
                        getpid(), ipc_shm_name);
                goto free_m_prod;
        }
        ODP_DBG("Created IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.m.cons),
-               odph_ring_free_count(pktio_entry->s.ipc.m.cons));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.tx.free),
+               odph_ring_free_count(pktio_entry->s.ipc.tx.free));
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_s_prod", dev);
-       pktio_entry->s.ipc.s.prod = odph_ring_create(ipc_shm_name,
+       pktio_entry->s.ipc.rx.recv = odph_ring_create(ipc_shm_name,
                        PKTIO_IPC_ENTRIES,
                        ODPH_RING_SHM_PROC | ODPH_RING_NO_LIST);
-       if (!pktio_entry->s.ipc.s.prod) {
+       if (!pktio_entry->s.ipc.rx.recv) {
                ODP_DBG("pid %d unable to create ipc ring %s name\n",
                        getpid(), ipc_shm_name);
                goto free_m_cons;
        }
        ODP_DBG("Created IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.s.prod),
-               odph_ring_free_count(pktio_entry->s.ipc.s.prod));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.rx.recv),
+               odph_ring_free_count(pktio_entry->s.ipc.rx.recv));
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_s_cons", dev);
-       pktio_entry->s.ipc.s.cons = odph_ring_create(ipc_shm_name,
+       pktio_entry->s.ipc.rx.free = odph_ring_create(ipc_shm_name,
                        PKTIO_IPC_ENTRIES,
                        ODPH_RING_SHM_PROC | ODPH_RING_NO_LIST);
-       if (!pktio_entry->s.ipc.s.cons) {
+       if (!pktio_entry->s.ipc.rx.free) {
                ODP_DBG("pid %d unable to create ipc ring %s name\n",
                        getpid(), ipc_shm_name);
                goto free_s_prod;
        }
        ODP_DBG("Created IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.s.cons),
-               odph_ring_free_count(pktio_entry->s.ipc.s.cons));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.rx.free),
+               odph_ring_free_count(pktio_entry->s.ipc.rx.free));
 
        /* Set up pool name for remote info */
        pinfo = pktio_entry->s.ipc.pinfo;
@@ -316,49 +309,49 @@ static int _ipc_slave_post_init(pktio_entry_t 
*pktio_entry)
        const char *dev = pktio_entry->s.name;
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_m_prod", dev);
-       pktio_entry->s.ipc.m.prod  = _ipc_shm_map(ipc_shm_name, ring_size);
-       if (!pktio_entry->s.ipc.m.prod) {
+       pktio_entry->s.ipc.rx.recv  = _ipc_shm_map(ipc_shm_name, ring_size);
+       if (!pktio_entry->s.ipc.rx.recv) {
                ODP_DBG("pid %d unable to find ipc ring %s name\n",
                        getpid(), dev);
                sleep(1);
                return -1;
        }
        ODP_DBG("Connected IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.m.prod),
-               odph_ring_free_count(pktio_entry->s.ipc.m.prod));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.rx.recv),
+               odph_ring_free_count(pktio_entry->s.ipc.rx.recv));
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_m_cons", dev);
-       pktio_entry->s.ipc.m.cons = _ipc_shm_map(ipc_shm_name, ring_size);
-       if (!pktio_entry->s.ipc.m.cons) {
+       pktio_entry->s.ipc.rx.free = _ipc_shm_map(ipc_shm_name, ring_size);
+       if (!pktio_entry->s.ipc.rx.free) {
                ODP_DBG("pid %d unable to find ipc ring %s name\n",
                        getpid(), dev);
                goto free_m_prod;
        }
        ODP_DBG("Connected IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.m.cons),
-               odph_ring_free_count(pktio_entry->s.ipc.m.cons));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.rx.free),
+               odph_ring_free_count(pktio_entry->s.ipc.rx.free));
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_s_prod", dev);
-       pktio_entry->s.ipc.s.prod = _ipc_shm_map(ipc_shm_name, ring_size);
-       if (!pktio_entry->s.ipc.s.prod) {
+       pktio_entry->s.ipc.tx.send = _ipc_shm_map(ipc_shm_name, ring_size);
+       if (!pktio_entry->s.ipc.tx.send) {
                ODP_DBG("pid %d unable to find ipc ring %s name\n",
                        getpid(), dev);
                goto free_m_cons;
        }
        ODP_DBG("Connected IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.s.prod),
-               odph_ring_free_count(pktio_entry->s.ipc.s.prod));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.tx.send),
+               odph_ring_free_count(pktio_entry->s.ipc.tx.send));
 
        snprintf(ipc_shm_name, sizeof(ipc_shm_name), "%s_s_cons", dev);
-       pktio_entry->s.ipc.s.cons = _ipc_shm_map(ipc_shm_name, ring_size);
-       if (!pktio_entry->s.ipc.s.cons) {
+       pktio_entry->s.ipc.tx.free = _ipc_shm_map(ipc_shm_name, ring_size);
+       if (!pktio_entry->s.ipc.tx.free) {
                ODP_DBG("pid %d unable to find ipc ring %s name\n",
                        getpid(), dev);
                goto free_s_prod;
        }
        ODP_DBG("Connected IPC ring: %s, count %d, free %d\n",
-               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.s.cons),
-               odph_ring_free_count(pktio_entry->s.ipc.s.cons));
+               ipc_shm_name, odph_ring_count(pktio_entry->s.ipc.tx.free),
+               odph_ring_free_count(pktio_entry->s.ipc.tx.free));
 
        /* Get info about remote pool */
        pinfo = pktio_entry->s.ipc.pinfo;
@@ -375,13 +368,6 @@ static int _ipc_slave_post_init(pktio_entry_t *pktio_entry)
         */
        _odp_ipc_export_pool(pinfo, pktio_entry->s.ipc.pool);
 
-       /* recv() rings */
-       pktio_entry->s.ipc.recv.r = pktio_entry->s.ipc.m.prod;
-       pktio_entry->s.ipc.recv.r_p = pktio_entry->s.ipc.m.cons;
-       /* tx() rings */
-       pktio_entry->s.ipc.tx.r = pktio_entry->s.ipc.s.prod;
-       pktio_entry->s.ipc.tx.r_p = pktio_entry->s.ipc.s.cons;
-
        odp_atomic_store_u32(&pktio_entry->s.ipc.ready, 1);
 
        ODP_DBG("Post init... DONE.\n");
@@ -497,7 +483,7 @@ int ipc_pktio_recv(pktio_entry_t *pktio_entry,
                odph_ring_t *tx_r_p;
 
                rbuf_p = (void *)&r_p_pkts;
-               tx_r_p = pktio_entry->s.ipc.tx.r_p;
+               tx_r_p = pktio_entry->s.ipc.tx.free;
                ret = odph_ring_mc_dequeue_burst(tx_r_p, rbuf_p,
                                                 PKTIO_IPC_ENTRIES);
                if (0 == ret)
@@ -508,7 +494,7 @@ int ipc_pktio_recv(pktio_entry_t *pktio_entry,
                }
        }
 
-       r = pktio_entry->s.ipc.recv.r;
+       r = pktio_entry->s.ipc.rx.recv;
        pkts = odph_ring_mc_dequeue_burst(r, ipcbufs_p, len);
        if (odp_unlikely(pkts < 0))
                ODP_ABORT("error to dequeue no packets\n");
@@ -587,7 +573,7 @@ int ipc_pktio_recv(pktio_entry_t *pktio_entry,
        }
 
        /* Now tell other process that we no longer need that buffers.*/
-       r_p = pktio_entry->s.ipc.recv.r_p;
+       r_p = pktio_entry->s.ipc.rx.free;
        pkts = odph_ring_mp_enqueue_burst(r_p, ipcbufs_p, i);
        if (odp_unlikely(pkts < 0))
                ODP_ABORT("ipc: odp_ring_mp_enqueue_bulk r_p fail\n");
@@ -613,7 +599,7 @@ int ipc_pktio_send(pktio_entry_t *pktio_entry, odp_packet_t 
pkt_table[],
                odph_ring_t *r_p;
 
                rbuf_p = (void *)&r_p_pkts;
-               r_p = pktio_entry->s.ipc.tx.r_p;
+               r_p = pktio_entry->s.ipc.tx.free;
                ret = odph_ring_mc_dequeue_burst(r_p, rbuf_p,
                                                 PKTIO_IPC_ENTRIES);
                if (0 == ret)
@@ -661,7 +647,7 @@ int ipc_pktio_send(pktio_entry_t *pktio_entry, odp_packet_t 
pkt_table[],
 
        /* Put packets to ring to be processed in other process. */
        rbuf_p = (void *)&pkt_table[0];
-       r = pktio_entry->s.ipc.tx.r;
+       r = pktio_entry->s.ipc.tx.send;
        ret = odph_ring_mp_enqueue_burst(r, rbuf_p, len);
        if (odp_unlikely(ret < 0)) {
                ODP_ERR("pid %d odp_ring_mp_enqueue_bulk fail, ipc_slave %d, 
ret %d\n",
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to