[dpdk-dev] bnx2x: tx_start_bd->vlan_or_ethertype is le16

Message ID 1446571576-28399-1-git-send-email-3chas3@gmail.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Chas Williams Nov. 3, 2015, 5:26 p.m. UTC
  Signed-off-by: Chas Williams <3chas3@gmail.com>
---
 drivers/net/bnx2x/bnx2x.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Thomas Monjalon Nov. 24, 2015, 1:42 p.m. UTC | #1
Anyone to review please?

2015-11-03 12:26, Chas Williams:
> Signed-off-by: Chas Williams <3chas3@gmail.com>
> ---
>  drivers/net/bnx2x/bnx2x.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
> index fed7a06..76444eb 100644
> --- a/drivers/net/bnx2x/bnx2x.c
> +++ b/drivers/net/bnx2x/bnx2x.c
> @@ -2169,7 +2169,8 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_p
>  				struct ether_hdr *eh
>  				    = rte_pktmbuf_mtod(m0, struct ether_hdr *);
>  
> -				tx_start_bd->vlan_or_ethertype = eh->ether_type;
> +				tx_start_bd->vlan_or_ethertype
> +				    = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
>  			}
>  		}
  
Harish Patil Dec. 1, 2015, 9:53 p.m. UTC | #2
>

>Anyone to review please?

>

>2015-11-03 12:26, Chas Williams:

>> Signed-off-by: Chas Williams <3chas3@gmail.com>

>> ---

>>  drivers/net/bnx2x/bnx2x.c | 3 ++-

>>  1 file changed, 2 insertions(+), 1 deletion(-)

>>

>> diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c

>> index fed7a06..76444eb 100644

>> --- a/drivers/net/bnx2x/bnx2x.c

>> +++ b/drivers/net/bnx2x/bnx2x.c

>> @@ -2169,7 +2169,8 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq,

>>struct rte_mbuf **m_head, int m_p

>>                              struct ether_hdr *eh

>>                                  = rte_pktmbuf_mtod(m0, struct ether_hdr *);

>>

>> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;

>> +                            tx_start_bd->vlan_or_ethertype

>> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));

>>                      }

>>              }

>

>


Acked-by: Harish Patil <harish.patil@qlogic.com>



Minor question - any specific reason to use rte_be_to_cpu_16() on
ether_type alone before converting from native order to le16?


Thanks,
Harish


________________________________

This message and any attached documents contain information from the sending company or its parent company(s), subsidiaries, divisions or branch offices that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.
  
Stephen Hemminger Dec. 1, 2015, 10:37 p.m. UTC | #3
On Tue, 1 Dec 2015 21:53:59 +0000
Harish Patil <harish.patil@qlogic.com> wrote:

> >
> >Anyone to review please?
> >
> >2015-11-03 12:26, Chas Williams:  
> >> Signed-off-by: Chas Williams <3chas3@gmail.com>
> >> ---
> >>  drivers/net/bnx2x/bnx2x.c | 3 ++-
> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
> >> index fed7a06..76444eb 100644
> >> --- a/drivers/net/bnx2x/bnx2x.c
> >> +++ b/drivers/net/bnx2x/bnx2x.c
> >> @@ -2169,7 +2169,8 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq,
> >>struct rte_mbuf **m_head, int m_p
> >>                              struct ether_hdr *eh
> >>                                  = rte_pktmbuf_mtod(m0, struct ether_hdr *);
> >>
> >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> >> +                            tx_start_bd->vlan_or_ethertype
> >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> >>                      }
> >>              }  
> >
> >  
> 
> Acked-by: Harish Patil <harish.patil@qlogic.com>
> 
> 
> Minor question - any specific reason to use rte_be_to_cpu_16() on
> ether_type alone before converting from native order to le16?

ether_type is in network byte order (big endian)
and hardware wants little endian. On x86 the second step is a nop.
  
Harish Patil Dec. 1, 2015, 10:47 p.m. UTC | #4
>

>On Tue, 1 Dec 2015 21:53:59 +0000

>Harish Patil <harish.patil@qlogic.com> wrote:

>

>> >

>> >Anyone to review please?

>> >

>> >2015-11-03 12:26, Chas Williams:

>> >> Signed-off-by: Chas Williams <3chas3@gmail.com>

>> >> ---

>> >>  drivers/net/bnx2x/bnx2x.c | 3 ++-

>> >>  1 file changed, 2 insertions(+), 1 deletion(-)

>> >>

>> >> diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c

>> >> index fed7a06..76444eb 100644

>> >> --- a/drivers/net/bnx2x/bnx2x.c

>> >> +++ b/drivers/net/bnx2x/bnx2x.c

>> >> @@ -2169,7 +2169,8 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq,

>> >>struct rte_mbuf **m_head, int m_p

>> >>                              struct ether_hdr *eh

>> >>                                  = rte_pktmbuf_mtod(m0, struct

>>ether_hdr *);

>> >>

>> >> -                            tx_start_bd->vlan_or_ethertype =

>>eh->ether_type;

>> >> +                            tx_start_bd->vlan_or_ethertype

>> >> +                                =

>>rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));

>> >>                      }

>> >>              }

>> >

>> >

>>

>> Acked-by: Harish Patil <harish.patil@qlogic.com>

>>

>>

>> Minor question - any specific reason to use rte_be_to_cpu_16() on

>> ether_type alone before converting from native order to le16?

>

>ether_type is in network byte order (big endian)

>and hardware wants little endian. On x86 the second step is a nop.

>


Thanks. Yes the question was for second step, second step would be a no-op
on x86 - thanks for clarifying.


________________________________

This message and any attached documents contain information from the sending company or its parent company(s), subsidiaries, divisions or branch offices that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.
  
Thomas Monjalon Dec. 1, 2015, 11:34 p.m. UTC | #5
2015-12-01 14:37, Stephen Hemminger:
> Harish Patil <harish.patil@qlogic.com> wrote:
> > >2015-11-03 12:26, Chas Williams:  
> > >> --- a/drivers/net/bnx2x/bnx2x.c
> > >> +++ b/drivers/net/bnx2x/bnx2x.c
> > >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> > >> +                            tx_start_bd->vlan_or_ethertype
> > >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> > 
> > Minor question - any specific reason to use rte_be_to_cpu_16() on
> > ether_type alone before converting from native order to le16?
> 
> ether_type is in network byte order (big endian)
> and hardware wants little endian. On x86 the second step is a nop.

Doesn't it deserve a macro rte_ntole16()?
It may be in lib/librte_eal/common/include/generic/rte_byteorder.h.
  
Chas Williams Dec. 1, 2015, 11:58 p.m. UTC | #6
On Wed, 2015-12-02 at 00:34 +0100, Thomas Monjalon wrote:
> 2015-12-01 14:37, Stephen Hemminger:
> > Harish Patil <harish.patil@qlogic.com> wrote:
> > > >2015-11-03 12:26, Chas Williams:  
> > > >> --- a/drivers/net/bnx2x/bnx2x.c
> > > >> +++ b/drivers/net/bnx2x/bnx2x.c
> > > >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> > > >> +                            tx_start_bd->vlan_or_ethertype
> > > >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> > > 
> > > Minor question - any specific reason to use rte_be_to_cpu_16() on
> > > ether_type alone before converting from native order to le16?
> > 
> > ether_type is in network byte order (big endian)
> > and hardware wants little endian. On x86 the second step is a nop.
> 
> Doesn't it deserve a macro rte_ntole16()?
> It may be in lib/librte_eal/common/include/generic/rte_byteorder.h.

I looked I didn't see anything.  This value, according to the linux
driver, wants to be little endian regardless of the host endian.
  
Thomas Monjalon Dec. 2, 2015, 1:04 a.m. UTC | #7
2015-12-01 18:58, Charles  Williams:
> On Wed, 2015-12-02 at 00:34 +0100, Thomas Monjalon wrote:
> > 2015-12-01 14:37, Stephen Hemminger:
> > > Harish Patil <harish.patil@qlogic.com> wrote:
> > > > >2015-11-03 12:26, Chas Williams:  
> > > > >> --- a/drivers/net/bnx2x/bnx2x.c
> > > > >> +++ b/drivers/net/bnx2x/bnx2x.c
> > > > >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> > > > >> +                            tx_start_bd->vlan_or_ethertype
> > > > >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> > > > 
> > > > Minor question - any specific reason to use rte_be_to_cpu_16() on
> > > > ether_type alone before converting from native order to le16?
> > > 
> > > ether_type is in network byte order (big endian)
> > > and hardware wants little endian. On x86 the second step is a nop.
> > 
> > Doesn't it deserve a macro rte_ntole16()?
> > It may be in lib/librte_eal/common/include/generic/rte_byteorder.h.
> 
> I looked I didn't see anything.  This value, according to the linux
> driver, wants to be little endian regardless of the host endian.

Yes, that's why I suggest to create some macros to do this kind of conversion.
Example: rte_ntole16 means "network to little endian 16-bit".
Do you think it would be clearer to use?
  
Chas Williams Dec. 2, 2015, 10:18 a.m. UTC | #8
On Wed, 2015-12-02 at 02:04 +0100, Thomas Monjalon wrote:
> 2015-12-01 18:58, Charles  Williams:
> > On Wed, 2015-12-02 at 00:34 +0100, Thomas Monjalon wrote:
> > > 2015-12-01 14:37, Stephen Hemminger:
> > > > Harish Patil <harish.patil@qlogic.com> wrote:
> > > > > >2015-11-03 12:26, Chas Williams:  
> > > > > >> --- a/drivers/net/bnx2x/bnx2x.c
> > > > > >> +++ b/drivers/net/bnx2x/bnx2x.c
> > > > > >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> > > > > >> +                            tx_start_bd->vlan_or_ethertype
> > > > > >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> > > > > 
> > > > > Minor question - any specific reason to use rte_be_to_cpu_16() on
> > > > > ether_type alone before converting from native order to le16?
> > > > 
> > > > ether_type is in network byte order (big endian)
> > > > and hardware wants little endian. On x86 the second step is a nop.
> > > 
> > > Doesn't it deserve a macro rte_ntole16()?
> > > It may be in lib/librte_eal/common/include/generic/rte_byteorder.h.
> > 
> > I looked I didn't see anything.  This value, according to the linux
> > driver, wants to be little endian regardless of the host endian.
> 
> Yes, that's why I suggest to create some macros to do this kind of conversion.
> Example: rte_ntole16 means "network to little endian 16-bit".
> Do you think it would be clearer to use?

This is the only example of this kind of conversion in the source code
so it would be a macro for one user.  If you create rte_ntole16() you
might feel obligated to create the various permutations for which there
are no consumers.
  
Thomas Monjalon Dec. 2, 2015, 10:44 a.m. UTC | #9
2015-12-02 05:18, Charles  Williams:
> On Wed, 2015-12-02 at 02:04 +0100, Thomas Monjalon wrote:
> > 2015-12-01 18:58, Charles  Williams:
> > > On Wed, 2015-12-02 at 00:34 +0100, Thomas Monjalon wrote:
> > > > 2015-12-01 14:37, Stephen Hemminger:
> > > > > Harish Patil <harish.patil@qlogic.com> wrote:
> > > > > > >2015-11-03 12:26, Chas Williams:  
> > > > > > >> --- a/drivers/net/bnx2x/bnx2x.c
> > > > > > >> +++ b/drivers/net/bnx2x/bnx2x.c
> > > > > > >> -                            tx_start_bd->vlan_or_ethertype = eh->ether_type;
> > > > > > >> +                            tx_start_bd->vlan_or_ethertype
> > > > > > >> +                                = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> > > > > > 
> > > > > > Minor question - any specific reason to use rte_be_to_cpu_16() on
> > > > > > ether_type alone before converting from native order to le16?
> > > > > 
> > > > > ether_type is in network byte order (big endian)
> > > > > and hardware wants little endian. On x86 the second step is a nop.
> > > > 
> > > > Doesn't it deserve a macro rte_ntole16()?
> > > > It may be in lib/librte_eal/common/include/generic/rte_byteorder.h.
> > > 
> > > I looked I didn't see anything.  This value, according to the linux
> > > driver, wants to be little endian regardless of the host endian.
> > 
> > Yes, that's why I suggest to create some macros to do this kind of conversion.
> > Example: rte_ntole16 means "network to little endian 16-bit".
> > Do you think it would be clearer to use?
> 
> This is the only example of this kind of conversion in the source code
> so it would be a macro for one user.  If you create rte_ntole16() you
> might feel obligated to create the various permutations for which there
> are no consumers.

Yes, that's why I was not sure of the interest.
  
Thomas Monjalon Dec. 6, 2015, 9:55 p.m. UTC | #10
> >> Signed-off-by: Chas Williams <3chas3@gmail.com>
> 
> Acked-by: Harish Patil <harish.patil@qlogic.com>

Applied, thanks
  

Patch

diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index fed7a06..76444eb 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -2169,7 +2169,8 @@  int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_p
 				struct ether_hdr *eh
 				    = rte_pktmbuf_mtod(m0, struct ether_hdr *);
 
-				tx_start_bd->vlan_or_ethertype = eh->ether_type;
+				tx_start_bd->vlan_or_ethertype
+				    = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
 			}
 		}