All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
@ 2010-08-23 17:14 Eric Dumazet
  2010-08-23 17:21 ` Ben Hutchings
  2010-08-23 17:47 ` Joe Perches
  0 siblings, 2 replies; 7+ messages in thread
From: Eric Dumazet @ 2010-08-23 17:14 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, Ben Hutchings

No need to use a temporary struct rtnl_link_stats64 variable,
just copy the source to skb buffer.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
---
 net/core/rtnetlink.c |   31 +------------------------------
 1 file changed, 1 insertion(+), 30 deletions(-)

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index f78d821..b2a718d 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -612,36 +612,7 @@ static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
 
 static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b)
 {
-	struct rtnl_link_stats64 a;
-
-	a.rx_packets = b->rx_packets;
-	a.tx_packets = b->tx_packets;
-	a.rx_bytes = b->rx_bytes;
-	a.tx_bytes = b->tx_bytes;
-	a.rx_errors = b->rx_errors;
-	a.tx_errors = b->tx_errors;
-	a.rx_dropped = b->rx_dropped;
-	a.tx_dropped = b->tx_dropped;
-
-	a.multicast = b->multicast;
-	a.collisions = b->collisions;
-
-	a.rx_length_errors = b->rx_length_errors;
-	a.rx_over_errors = b->rx_over_errors;
-	a.rx_crc_errors = b->rx_crc_errors;
-	a.rx_frame_errors = b->rx_frame_errors;
-	a.rx_fifo_errors = b->rx_fifo_errors;
-	a.rx_missed_errors = b->rx_missed_errors;
-
-	a.tx_aborted_errors = b->tx_aborted_errors;
-	a.tx_carrier_errors = b->tx_carrier_errors;
-	a.tx_fifo_errors = b->tx_fifo_errors;
-	a.tx_heartbeat_errors = b->tx_heartbeat_errors;
-	a.tx_window_errors = b->tx_window_errors;
-
-	a.rx_compressed = b->rx_compressed;
-	a.tx_compressed = b->tx_compressed;
-	memcpy(v, &a, sizeof(a));
+	memcpy(v, b, sizeof(*b));
 }
 
 /* All VF info */



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 17:14 [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification Eric Dumazet
@ 2010-08-23 17:21 ` Ben Hutchings
  2010-08-24  3:45   ` David Miller
  2010-08-23 17:47 ` Joe Perches
  1 sibling, 1 reply; 7+ messages in thread
From: Ben Hutchings @ 2010-08-23 17:21 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev

On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
> No need to use a temporary struct rtnl_link_stats64 variable,
> just copy the source to skb buffer.

Yes, this makes sense.

The reason I didn't do this initially was that I was concerned about
possible tearing of asynchronously-updated stats.  Since you made
dev_get_stats() copy into a caller-provided buffer, this is no longer a
concern.

For what it's worth:

> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Reviewed-by: Ben Hutchings <bhutchings@solarflare.com>

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 17:14 [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification Eric Dumazet
  2010-08-23 17:21 ` Ben Hutchings
@ 2010-08-23 17:47 ` Joe Perches
  2010-08-23 18:14   ` Ben Hutchings
  2010-08-23 18:17   ` Eric Dumazet
  1 sibling, 2 replies; 7+ messages in thread
From: Joe Perches @ 2010-08-23 17:47 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev, Ben Hutchings

On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
> No need to use a temporary struct rtnl_link_stats64 variable,
> just copy the source to skb buffer.
> 
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>

Maybe it's better to use the same argument style as copy_rtnl_link_stats

 net/core/rtnetlink.c |   36 ++++--------------------------------
 1 files changed, 4 insertions(+), 32 deletions(-)

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index f78d821..f8781db 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -610,38 +610,10 @@ static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
 	a->tx_compressed = b->tx_compressed;
 }
 
-static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b)
+static void copy_rtnl_link_stats64(struct rtnl_link_stats64 *a,
+				   const struct rtnl_link_stats64 *b)
 {
-	struct rtnl_link_stats64 a;
-
-	a.rx_packets = b->rx_packets;
-	a.tx_packets = b->tx_packets;
-	a.rx_bytes = b->rx_bytes;
-	a.tx_bytes = b->tx_bytes;
-	a.rx_errors = b->rx_errors;
-	a.tx_errors = b->tx_errors;
-	a.rx_dropped = b->rx_dropped;
-	a.tx_dropped = b->tx_dropped;
-
-	a.multicast = b->multicast;
-	a.collisions = b->collisions;
-
-	a.rx_length_errors = b->rx_length_errors;
-	a.rx_over_errors = b->rx_over_errors;
-	a.rx_crc_errors = b->rx_crc_errors;
-	a.rx_frame_errors = b->rx_frame_errors;
-	a.rx_fifo_errors = b->rx_fifo_errors;
-	a.rx_missed_errors = b->rx_missed_errors;
-
-	a.tx_aborted_errors = b->tx_aborted_errors;
-	a.tx_carrier_errors = b->tx_carrier_errors;
-	a.tx_fifo_errors = b->tx_fifo_errors;
-	a.tx_heartbeat_errors = b->tx_heartbeat_errors;
-	a.tx_window_errors = b->tx_window_errors;
-
-	a.rx_compressed = b->rx_compressed;
-	a.tx_compressed = b->tx_compressed;
-	memcpy(v, &a, sizeof(a));
+	memcpy(a, b, sizeof(*b));
 }
 
 /* All VF info */



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 17:47 ` Joe Perches
@ 2010-08-23 18:14   ` Ben Hutchings
  2010-08-24  3:44     ` David Miller
  2010-08-23 18:17   ` Eric Dumazet
  1 sibling, 1 reply; 7+ messages in thread
From: Ben Hutchings @ 2010-08-23 18:14 UTC (permalink / raw)
  To: Joe Perches; +Cc: Eric Dumazet, David Miller, netdev

On Mon, 2010-08-23 at 10:47 -0700, Joe Perches wrote:
> On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
> > No need to use a temporary struct rtnl_link_stats64 variable,
> > just copy the source to skb buffer.
> > 
> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> 
> Maybe it's better to use the same argument style as copy_rtnl_link_stats
[...]

I believe the destination pointer is typed as void * because it may not
be naturally aligned for u64.

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 17:47 ` Joe Perches
  2010-08-23 18:14   ` Ben Hutchings
@ 2010-08-23 18:17   ` Eric Dumazet
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Dumazet @ 2010-08-23 18:17 UTC (permalink / raw)
  To: Joe Perches; +Cc: David Miller, netdev, Ben Hutchings

Le lundi 23 août 2010 à 10:47 -0700, Joe Perches a écrit :
> On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
> > No need to use a temporary struct rtnl_link_stats64 variable,
> > just copy the source to skb buffer.
> > 
> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> 
> Maybe it's better to use the same argument style as copy_rtnl_link_stats
> 
>  net/core/rtnetlink.c |   36 ++++--------------------------------
>  1 files changed, 4 insertions(+), 32 deletions(-)
> 
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index f78d821..f8781db 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -610,38 +610,10 @@ static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
>  	a->tx_compressed = b->tx_compressed;
>  }
>  
> -static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b)
> +static void copy_rtnl_link_stats64(struct rtnl_link_stats64 *a,
> +				   const struct rtnl_link_stats64 *b)
>  {



Nope, we have no quarantee of v being aligned on a u64

If you tell compiler first argument is a pointer to rtnl_link_stats64,
it might use 64bit stores and trap.




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 18:14   ` Ben Hutchings
@ 2010-08-24  3:44     ` David Miller
  0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2010-08-24  3:44 UTC (permalink / raw)
  To: bhutchings; +Cc: joe, eric.dumazet, netdev

From: Ben Hutchings <bhutchings@solarflare.com>
Date: Mon, 23 Aug 2010 19:14:52 +0100

> On Mon, 2010-08-23 at 10:47 -0700, Joe Perches wrote:
>> On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
>> > No need to use a temporary struct rtnl_link_stats64 variable,
>> > just copy the source to skb buffer.
>> > 
>> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
>> 
>> Maybe it's better to use the same argument style as copy_rtnl_link_stats
> [...]
> 
> I believe the destination pointer is typed as void * because it may not
> be naturally aligned for u64.

Exactly right.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification
  2010-08-23 17:21 ` Ben Hutchings
@ 2010-08-24  3:45   ` David Miller
  0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2010-08-24  3:45 UTC (permalink / raw)
  To: bhutchings; +Cc: eric.dumazet, netdev

From: Ben Hutchings <bhutchings@solarflare.com>
Date: Mon, 23 Aug 2010 18:21:36 +0100

> On Mon, 2010-08-23 at 19:14 +0200, Eric Dumazet wrote:
>> No need to use a temporary struct rtnl_link_stats64 variable,
>> just copy the source to skb buffer.
> 
> Yes, this makes sense.
> 
> The reason I didn't do this initially was that I was concerned about
> possible tearing of asynchronously-updated stats.  Since you made
> dev_get_stats() copy into a caller-provided buffer, this is no longer a
> concern.
> 
> For what it's worth:
> 
>> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com>

Applied, thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-08-24  3:44 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-23 17:14 [PATCH net-next-2.6] net: copy_rtnl_link_stats64() simplification Eric Dumazet
2010-08-23 17:21 ` Ben Hutchings
2010-08-24  3:45   ` David Miller
2010-08-23 17:47 ` Joe Perches
2010-08-23 18:14   ` Ben Hutchings
2010-08-24  3:44     ` David Miller
2010-08-23 18:17   ` Eric Dumazet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.