diff options
Diffstat (limited to 'drivers/net/usb/lan78xx.c')
| -rw-r--r-- | drivers/net/usb/lan78xx.c | 23 | 
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index f033fee225a1..58f5a219fb65 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -1258,8 +1258,7 @@ static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb)  		return;  	} -	memcpy(&intdata, urb->transfer_buffer, 4); -	le32_to_cpus(&intdata); +	intdata = get_unaligned_le32(urb->transfer_buffer);  	if (intdata & INT_ENP_PHY_INT) {  		netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); @@ -2730,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); @@ -2758,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;  } @@ -3105,16 +3101,13 @@ static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb)  		struct sk_buff *skb2;  		unsigned char *packet; -		memcpy(&rx_cmd_a, skb->data, sizeof(rx_cmd_a)); -		le32_to_cpus(&rx_cmd_a); +		rx_cmd_a = get_unaligned_le32(skb->data);  		skb_pull(skb, sizeof(rx_cmd_a)); -		memcpy(&rx_cmd_b, skb->data, sizeof(rx_cmd_b)); -		le32_to_cpus(&rx_cmd_b); +		rx_cmd_b = get_unaligned_le32(skb->data);  		skb_pull(skb, sizeof(rx_cmd_b)); -		memcpy(&rx_cmd_c, skb->data, sizeof(rx_cmd_c)); -		le16_to_cpus(&rx_cmd_c); +		rx_cmd_c = get_unaligned_le16(skb->data);  		skb_pull(skb, sizeof(rx_cmd_c));  		packet = skb->data;  |