On Thu, Aug 20, 2015 at 04:52:29PM +0530, Santosh Shukla wrote:
> On 20 August 2015 at 16:23, Jerin Jacob <jerin.ja...@caviumnetworks.com> 
> wrote:
> > On Thu, Aug 20, 2015 at 03:30:23PM +0530, Santosh Shukla wrote:
> >> On 20 August 2015 at 14:48, Balasubramanian Manoharan
> >> <bala.manoha...@linaro.org> wrote:
> >> >
> >> >
> >> > On Sunday 16 August 2015 06:14 PM, Santosh Shukla wrote:
> >> >>
> >> >> On 15 August 2015 at 00:12, Zoltan Kiss <zoltan.k...@linaro.org> wrote:
> >> >>>
> >> >>> Applications can read the computed hash (if any) and set it if they
> >> >>> changed the packet headers or if the platform haven't calculated the
> >> >>> hash.
> >> >>>
> >> >>> Signed-off-by: Zoltan Kiss <zoltan.k...@linaro.org>
> >> >>> ---
> >> >>> v2:
> >> >>> - focus on RSS hash only
> >> >>> - use setter/getter's
> >> >>>
> >> >>> v3:
> >> >>> - do not mention pointers
> >> >>> - add a note
> >> >>> - add new patches for implementation and test
> >> >>>
> >> >>>   include/odp/api/packet.h | 30 ++++++++++++++++++++++++++++++
> >> >>>   1 file changed, 30 insertions(+)
> >> >>>
> >> >>> diff --git a/include/odp/api/packet.h b/include/odp/api/packet.h
> >> >>> index 3a454b5..1ae24bc 100644
> >> >>> --- a/include/odp/api/packet.h
> >> >>> +++ b/include/odp/api/packet.h
> >> >>> @@ -48,6 +48,11 @@ extern "C" {
> >> >>>    * Invalid packet segment
> >> >>>    */
> >> >>>
> >> >>> +/**
> >> >>> + * @def ODP_PACKET_RSS_INVALID
> >> >>> + * RSS hash is not set
> >> >>> + */
> >> >>> +
> >> >>>   /*
> >> >>>    *
> >> >>>    * Alloc and free
> >> >>> @@ -605,6 +610,31 @@ uint32_t odp_packet_l4_offset(odp_packet_t pkt);
> >> >>>   int odp_packet_l4_offset_set(odp_packet_t pkt, uint32_t offset);
> >> >>>
> >> >>>   /**
> >> >>> + * RSS hash value
> >> >>> + *
> >> >>> + * Returns the RSS hash stored for the packet.
> >> >>> + *
> >> >>> + * @param      pkt      Packet handle
> >> >>> + *
> >> >>> + * @return  Hash value
> >> >>> + * @retval ODP_PACKET_RSS_INVALID if RSS hash is not set.
> >> >>> + */
> >> >>> +uint32_t odp_packet_rss_hash(odp_packet_t pkt);
> >> >>> +
> >> >>> +/**
> >> >>> + * Set RSS hash value
> >> >>> + *
> >> >>> + * Store the RSS hash for the packet.
> >> >>> + *
> >> >>> + * @param      pkt      Packet handle
> >> >>> + * @param      rss_hash Hash value to set
> >> >>> + *
> >> >>> + * @note If the application changes the packet header, it might want 
> >> >>> to
> >> >>> + * recalculate this value and set it.
> >> >>> + */
> >> >>> +void odp_packet_rss_hash_set(odp_packet_t pkt, uint32_t rss_hash);
> >> >
> >> > Can this use-case be handled by calling
> >> > odp_packet_generate_rss_hash(odp_packet_t pkt) function where the rss 
> >> > gets
> >> > generated by the implementation rather than being set from application 
> >> > using
> >> > odp_packet_set_rss_hash() function?
> >> >
> >>
> >> Bala, As we discussed and in summary for rest; Considering ovs example
> >> : ovs uses sw based rss_hash only when HW not supporting rss Or HW
> >> generated rss is zero.
> >>
> >>     hash = packet_get_hash(packet);
> >>     if (OVS_UNLIKELY(!hash)) {
> >>         hash = miniflow_hash_5tuple(mf, 0);
> >>         packet_set_hash(packet, hash);
> >>     }
> >>     return hash;
> >>
> >> and rss_hash generation is inside ovs dp_packet (middle  layer), It is
> >
> > How about following change in OVS plarform specific packet_get_hash code.
> > odp_packet_rss_hash_set
> > kind of interface wont fit correctly in octeon  platform as hash
> > identifier used by hardware in subsequent HW based queue operations
> >
> > static inline uint32_t
> > packet_get_hash(struct dp_packet *p)
> > {
> > #ifdef DPDK_NETDEV
> >     return p->mbuf.hash.rss;
> > #else
> > #ifdef ODP_NETDEV
> >     unit32_t hash;
> >     hash = odp_packet_rss_hash(p->odp_pkt);
> >     if (OVS_UNLIKELY(!hash)
> >         hash = odp_packet_generate_rss_hash(p->odp_pkt);
> >     return hash;
> > #endif
> >     return p->rss_hash;
> > #endif
> > }
> >
> 
> Trying to understand your api definition;
> odp_packet_rss_hash() -> to get rss
> and
> odp_packet_generate_rss_hash() -> generate rss from where :  sw or hw?

NOP if HW is capable, for software generated packet/ non-capable HW it
will be in SW

> In either case, your trying to generate non-zero rss (considering a
> valid rss (?) for your platform).

IMO, The term RSS may not be correct in API definition. May be something
like flow id, make sense across all platform.

Jerin

> 
> - IIUC _generate_rss_hash() able to take corrective measure so you
> won't find need for using rss_hash_set() right?
> - In other word, No s/w based rss __setting__ required for octeon.
> 
> did I understood all that right?
> 
> >
> >> with in ovs implementation, Not exposed to application layer, so
> >> application won't need to generate rss / update, so no possibility of
> >> rss mis-match /corruption.
> >>
> >> > Regards,
> >> > Bala
> >> >
> >> >>> +
> >> >>> +/**
> >> >>>    * Tests if packet is segmented
> >> >>>    *
> >> >>>    * @param pkt  Packet handle
> >> >>> --
> >> >>
> >> >> Reviewed-by : Santosh Shukla <santosh.shu...@linaro.org>
> >> >>
> >> >>> 1.9.1
> >> >>>
> >> >>> _______________________________________________
> >> >>> lng-odp mailing list
> >> >>> lng-odp@lists.linaro.org
> >> >>> https://lists.linaro.org/mailman/listinfo/lng-odp
> >> >>
> >> >> _______________________________________________
> >> >> lng-odp mailing list
> >> >> lng-odp@lists.linaro.org
> >> >> https://lists.linaro.org/mailman/listinfo/lng-odp
> >> >
> >> >
> >> _______________________________________________
> >> lng-odp mailing list
> >> lng-odp@lists.linaro.org
> >> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to