Message ID | 1282585624.1879.103.camel@Joe-Laptop |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
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.
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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 */