All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32
@ 2019-07-22  7:41 Chuhong Yuan
  2019-07-23  1:22 ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Chuhong Yuan @ 2019-07-22  7:41 UTC (permalink / raw)
  Cc: David S . Miller, Woojung Huh, Microchip Linux Driver Support,
	Steve Glendinning, linux-usb, netdev, linux-kernel, Chuhong Yuan

Merge the combo uses of cpu_to_le32s and memcpy.
Use put_unaligned_le32 instead.
This simplifies the code.

Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
---
 drivers/net/usb/asix_common.c  |  9 ++++-----
 drivers/net/usb/ax88179_178a.c | 11 ++++-------
 drivers/net/usb/lan78xx.c      | 11 ++++-------
 drivers/net/usb/smsc75xx.c     | 11 ++++-------
 drivers/net/usb/sr9800.c       |  9 ++++-----
 5 files changed, 20 insertions(+), 31 deletions(-)

diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
index b39ee714fb01..e39f41efda3e 100644
--- a/drivers/net/usb/asix_common.c
+++ b/drivers/net/usb/asix_common.c
@@ -221,6 +221,7 @@ struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 	int tailroom = skb_tailroom(skb);
 	u32 packet_len;
 	u32 padbytes = 0xffff0000;
+	void *ptr;
 
 	padlen = ((skb->len + 4) & (dev->maxpacket - 1)) ? 0 : 4;
 
@@ -256,13 +257,11 @@ struct sk_buff *asix_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 	}
 
 	packet_len = ((skb->len ^ 0x0000ffff) << 16) + skb->len;
-	skb_push(skb, 4);
-	cpu_to_le32s(&packet_len);
-	skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len));
+	ptr = skb_push(skb, 4);
+	put_unaligned_le32(packet_len, ptr);
 
 	if (padlen) {
-		cpu_to_le32s(&padbytes);
-		memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes));
+		put_unaligned_le32(padbytes, skb_tail_pointer(skb));
 		skb_put(skb, sizeof(padbytes));
 	}
 
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 72d165114b67..daa54486ab09 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -1421,6 +1421,7 @@ ax88179_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
 	int frame_size = dev->maxpacket;
 	int mss = skb_shinfo(skb)->gso_size;
 	int headroom;
+	void *ptr;
 
 	tx_hdr1 = skb->len;
 	tx_hdr2 = mss;
@@ -1435,13 +1436,9 @@ ax88179_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
 		return NULL;
 	}
 
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_hdr2);
-	skb_copy_to_linear_data(skb, &tx_hdr2, 4);
-
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_hdr1);
-	skb_copy_to_linear_data(skb, &tx_hdr1, 4);
+	ptr = skb_push(skb, 8);
+	put_unaligned_le32(tx_hdr1, ptr);
+	put_unaligned_le32(tx_hdr2, ptr + 4);
 
 	return skb;
 }
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 9c33b35bd155..769bb262fbec 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2729,6 +2729,7 @@ static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev,
 				       struct sk_buff *skb, gfp_t flags)
 {
 	u32 tx_cmd_a, tx_cmd_b;
+	void *ptr;
 
 	if (skb_cow_head(skb, TX_OVERHEAD)) {
 		dev_kfree_skb_any(skb);
@@ -2757,13 +2758,9 @@ static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev,
 		tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_;
 	}
 
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_cmd_b);
-	memcpy(skb->data, &tx_cmd_b, 4);
-
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_cmd_a);
-	memcpy(skb->data, &tx_cmd_a, 4);
+	ptr = skb_push(skb, 8);
+	put_unaligned_le32(tx_cmd_a, ptr);
+	put_unaligned_le32(tx_cmd_b, ptr + 4);
 
 	return skb;
 }
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
index 7fac9db5380d..9556d431885f 100644
--- a/drivers/net/usb/smsc75xx.c
+++ b/drivers/net/usb/smsc75xx.c
@@ -2255,6 +2255,7 @@ static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev,
 					 struct sk_buff *skb, gfp_t flags)
 {
 	u32 tx_cmd_a, tx_cmd_b;
+	void *ptr;
 
 	if (skb_cow_head(skb, SMSC75XX_TX_OVERHEAD)) {
 		dev_kfree_skb_any(skb);
@@ -2275,13 +2276,9 @@ static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev,
 		tx_cmd_b = 0;
 	}
 
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_cmd_b);
-	memcpy(skb->data, &tx_cmd_b, 4);
-
-	skb_push(skb, 4);
-	cpu_to_le32s(&tx_cmd_a);
-	memcpy(skb->data, &tx_cmd_a, 4);
+	ptr = skb_push(skb, 8);
+	put_unaligned_le32(tx_cmd_a, ptr);
+	put_unaligned_le32(tx_cmd_b, ptr + 4);
 
 	return skb;
 }
diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
index 35f39f23d881..c5d4a0060124 100644
--- a/drivers/net/usb/sr9800.c
+++ b/drivers/net/usb/sr9800.c
@@ -115,6 +115,7 @@ static struct sk_buff *sr_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 	u32 padbytes = 0xffff0000;
 	u32 packet_len;
 	int padlen;
+	void *ptr;
 
 	padlen = ((skb->len + 4) % (dev->maxpacket - 1)) ? 0 : 4;
 
@@ -133,14 +134,12 @@ static struct sk_buff *sr_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
 			return NULL;
 	}
 
-	skb_push(skb, 4);
+	ptr = skb_push(skb, 4);
 	packet_len = (((skb->len - 4) ^ 0x0000ffff) << 16) + (skb->len - 4);
-	cpu_to_le32s(&packet_len);
-	skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len));
+	put_unaligned_le32(packet_len, ptr);
 
 	if (padlen) {
-		cpu_to_le32s(&padbytes);
-		memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes));
+		put_unaligned_le32(padbytes, skb_tail_pointer(skb));
 		skb_put(skb, sizeof(padbytes));
 	}
 
-- 
2.20.1


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

* Re: [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32
  2019-07-22  7:41 [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32 Chuhong Yuan
@ 2019-07-23  1:22 ` David Miller
  2019-07-23  2:16   ` Chuhong Yuan
  0 siblings, 1 reply; 4+ messages in thread
From: David Miller @ 2019-07-23  1:22 UTC (permalink / raw)
  To: hslester96
  Cc: woojung.huh, UNGLinuxDriver, steve.glendinning, linux-usb,
	netdev, linux-kernel

From: Chuhong Yuan <hslester96@gmail.com>
Date: Mon, 22 Jul 2019 15:41:34 +0800

> Merge the combo uses of cpu_to_le32s and memcpy.
> Use put_unaligned_le32 instead.
> This simplifies the code.
> 
> Signed-off-by: Chuhong Yuan <hslester96@gmail.com>

Isn't the skb->data aligned to 4 bytes in these situations?

If so, we should use the aligned variants.

Thank you.

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

* Re: [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32
  2019-07-23  1:22 ` David Miller
@ 2019-07-23  2:16   ` Chuhong Yuan
  2019-07-23  3:43     ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Chuhong Yuan @ 2019-07-23  2:16 UTC (permalink / raw)
  To: David Miller
  Cc: Woojung Huh, Microchip Linux Driver Support, Steve Glendinning,
	linux-usb, netdev, linux-kernel

David Miller <davem@davemloft.net> 于2019年7月23日周二 上午9:22写道:
>
> From: Chuhong Yuan <hslester96@gmail.com>
> Date: Mon, 22 Jul 2019 15:41:34 +0800
>
> > Merge the combo uses of cpu_to_le32s and memcpy.
> > Use put_unaligned_le32 instead.
> > This simplifies the code.
> >
> > Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
>
> Isn't the skb->data aligned to 4 bytes in these situations?
>
> If so, we should use the aligned variants.
>
> Thank you.

I have checked the five changed files.
I find that they all have used get_unaligned_le32 for skb->data
according to my previous applied patches and existing code.
So I think the skb->data is unaligned in these situations.

Usages of get_unaligned_le32:
asix_common.c: line 104 and 133
ax88179_178a.c: https://lkml.org/lkml/2019/7/19/652
lan78xx.c: https://lkml.org/lkml/2019/7/19/573
smsc75xx.c: https://lkml.org/lkml/2019/7/19/617
sr9800.c: line 73

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

* Re: [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32
  2019-07-23  2:16   ` Chuhong Yuan
@ 2019-07-23  3:43     ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-07-23  3:43 UTC (permalink / raw)
  To: hslester96
  Cc: woojung.huh, UNGLinuxDriver, steve.glendinning, linux-usb,
	netdev, linux-kernel

From: Chuhong Yuan <hslester96@gmail.com>
Date: Tue, 23 Jul 2019 10:16:27 +0800

> David Miller <davem@davemloft.net> 于2019年7月23日周二 上午9:22写道:
>>
>> From: Chuhong Yuan <hslester96@gmail.com>
>> Date: Mon, 22 Jul 2019 15:41:34 +0800
>>
>> > Merge the combo uses of cpu_to_le32s and memcpy.
>> > Use put_unaligned_le32 instead.
>> > This simplifies the code.
>> >
>> > Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
>>
>> Isn't the skb->data aligned to 4 bytes in these situations?
>>
>> If so, we should use the aligned variants.
>>
>> Thank you.
> 
> I have checked the five changed files.
> I find that they all have used get_unaligned_le32 for skb->data
> according to my previous applied patches and existing code.
> So I think the skb->data is unaligned in these situations.

Thank you for checking.

Patch applied to net-next.

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

end of thread, other threads:[~2019-07-23  3:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-22  7:41 [PATCH] net: usb: Merge cpu_to_le32s + memcpy to put_unaligned_le32 Chuhong Yuan
2019-07-23  1:22 ` David Miller
2019-07-23  2:16   ` Chuhong Yuan
2019-07-23  3:43     ` David Miller

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.