* [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.