Matias Elo(matiaselo) replied on github web page: platform/linux-generic/include/odp_packet_dpdk.h line 20 @@ -49,16 +49,17 @@ typedef union { typedef struct { odp_pool_t pool; /**< pool to alloc packets from */ struct rte_mempool *pkt_pool; /**< DPDK packet pool */ - odp_pktio_capability_t capa; /**< interface capabilities */ uint32_t data_room; /**< maximum packet length */ - uint16_t mtu; /**< maximum transmission unit */ - /** Use system call to get/set vdev promisc mode */ - odp_bool_t vdev_sysc_promisc; - uint8_t port_id; /**< DPDK port identifier */ unsigned min_rx_burst; /**< minimum RX burst size */ odp_pktin_hash_proto_t hash; /**< Packet input hash protocol */ - odp_bool_t lockless_rx; /**< no locking for rx */ - odp_bool_t lockless_tx; /**< no locking for tx */ + uint16_t mtu; /**< maximum transmission unit */ + /** Use system call to get/set vdev promisc mode */ + uint8_t vdev_sysc_promisc; + uint8_t lockless_rx; /**< no locking for rx */ + uint8_t lockless_tx; /**< no locking for tx */ + uint8_t port_id; /**< DPDK port identifier */ + /* --- 34 bytes --- */
Comment: The next member in the struct named 'capa' is 40 bytes long, so it will cross a cache line boundary. I was thinking this comment was more useful than an ambiguous cache line comment. There is still space in the first cache line for additional fast path variables, so I wouldn't use a bitmask before it is actually needed. > Matias Elo(matiaselo) wrote: > odp_memcpy() is just a wrapper for memcpy() and I would avoid using api > functions in the implementation unless there is a clear benefit. >> Matias Elo(matiaselo) wrote: >> In this case it is needed. _odp_pool_inline is defined in odp_pool.c and >> _odp_packet_inline in odp_packet.c. ODP build with '--disable-abi-compat' >> will fail without extern declarations. >>> muvarov wrote >>> pktio capability is big struct and it's same for all packets. Is it really >>> needs to be here? as well as uint16_t mtu? why not in pktio_entry_t ? >>>> muvarov wrote >>>> what is propose of sayng 34 bytes here? Cache line is 64 so maybe comments >>>> for cache lines borders are more interesting here? vdev_sysc_promisc, >>>> lockless_rx, lockless_tx can be packet to bit field. That will also reduce >>>> structure size. Is there any reason to do that? >>>>> muvarov wrote >>>>> odp_memcpy() might be good fit here. >>>>>> muvarov wrote >>>>>> extern is not needed in .h file, also extern 2 lines above. >>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote: >>>>>>> The API being inlined is `odp_packet_pool()` so this is an artifact of >>>>>>> the implementation of that API. So I'm OK with it being here since this >>>>>>> is supposed to be fastpath code. >>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote: >>>>>>>> @matiaselo I agree this is correctly placed here. >>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote: >>>>>>>>> 2.0 is based on api-next, not master. This will be one of several >>>>>>>>> conflicts that will need to be resolved at merge time. >>>>>>>>>> muvarov wrote >>>>>>>>>> @matiaselo yes, I see. While reading patches in that web interface >>>>>>>>>> sometime I miss some pieces of code. Just above you changed that. >>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>> While packing the pkt_dpdk_t struct I changed >>>>>>>>>>> pkt_dpdk_t.lockless_rx and pkt_dpdk_t.lockless_tx to uint8_t. I'm >>>>>>>>>>> using the same type here. >>>>>>>>>>>> muvarov wrote >>>>>>>>>>>> why is that needed? >>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>> This is not planned untill TigerMoth. >>>>>>>>>>>>>> nagarahalli wrote >>>>>>>>>>>>>> It is about 2.0 merge to master, it will happen sometime in the >>>>>>>>>>>>>> future. >>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>> @nagarahalli Any reason why we shouldn't have it in master? >>>>>>>>>>>>>>>> nagarahalli wrote >>>>>>>>>>>>>>>> This change is done already in 2.0. >>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>> @matiaselo ok. >>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>> Since there are currently no functions in sight to put into >>>>>>>>>>>>>>>>>> pool_inlines.h I would suggest not to add a new header file. >>>>>>>>>>>>>>>>>> If/when some pool inline function are added later on the >>>>>>>>>>>>>>>>>> header can be created them. Is this OK for you? >>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>> Just wanted to have pool functions in pool header, etc. >>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>> I followed the same pattern as the packet inlines. >>>>>>>>>>>>>>>>>>>> _odp_packet_inline_offset_t is defined in packet_types.h. >>>>>>>>>>>>>>>>>>>>> Matias Elo(matiaselo) wrote: >>>>>>>>>>>>>>>>>>>>> pool_inlines.h would only include these two lines and >>>>>>>>>>>>>>>>>>>>> looking at pool API there aren't any additional functions >>>>>>>>>>>>>>>>>>>>> which should be inlined. Do you have a particular use >>>>>>>>>>>>>>>>>>>>> case in mind for this header? >>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>> And this to pool_inline_types.h. >>>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote: >>>>>>>>>>>>>>>>>>>>>>> This should go to pool_inlines.h https://github.com/Linaro/odp/pull/281#discussion_r151059106 updated_at 2017-11-15 11:47:30