linux_dsm_epyc7002/drivers/net/ethernet
Alexander Popov 26c0a14f34 net: fs_enet: Fix NETIF_F_SG feature for Freescale MPC5121
Commit 4fc9b87bae ("net: fs_enet: Implement NETIF_F_SG feature")
brings a trouble to Freescale MPC512x: a kernel oops happens
during sending non-linear sk_buff with .data not aligned by 4.

Log quotation:

Unable to handle kernel paging request for data at address 0xe467c000
Faulting instruction address: 0xc000cd44
Oops: Kernel access of bad area, sig: 11 [#1]
MPC512x generic
Modules linked in:
CPU: 0 PID: 984 Comm: kworker/0:1H Not tainted 4.1.0-rc8-00024-gbb16140 #2
Workqueue: rpciod rpc_async_schedule
task: cf364a50 ti: cf362000 task.ti: cf362000
NIP: c000cd44 LR: c000c720 CTR: 00000206
REGS: cf363ac0 TRAP: 0300   Not tainted  (4.1.0-rc8-00024-gbb16140)
MSR: 00009032 <EE,ME,IR,DR,RI>  CR: 42004082  XER: 00000000
DAR: e467c000 DSISR: 20000000
GPR00: c0279e24 cf363b70 cf364a50 e467c000 00000206 0000001f 00000001 00000001
GPR08: 00000000 e467c000 e46800be 000139a6 82002082 00000000 c002e46c cf3c3680
GPR16: c044cb30 c04b0000 cf363c48 00000000 00000001 fde0315c 00000000 0000000b
GPR24: 0000002c 000040be cf339aa0 0000000b 00000001 cf873210 00282f85 00000000
NIP [c000cd44] clean_dcache_range+0x1c/0x30
LR [c000c720] dma_direct_map_page+0x40/0x94
Call Trace:
[cf363b70] [cf339b60] 0xcf339b60 (unreliable)
[cf363b90] [c0279e24] fs_enet_start_xmit+0x1c8/0x42c
[cf363bd0] [c02ff710] dev_hard_start_xmit+0x2dc/0x3d4
[cf363c40] [c0319c60] sch_direct_xmit+0xcc/0x1cc
[cf363c70] [c02ff9c0] __dev_queue_xmit+0x1b8/0x47c
[cf363ca0] [c032a3e8] ip_finish_output+0x1fc/0x9a8
[cf363ce0] [c032c31c] ip_send_skb+0x1c/0xa4
[cf363cf0] [c035112c] udp_send_skb+0xe4/0x2e8
[cf363d10] [c0351368] udp_push_pending_frames+0x38/0x84
[cf363d20] [c03537b8] udp_sendpage+0x134/0x174
[cf363d70] [c0384fd4] xs_sendpages+0x21c/0x250
[cf363db0] [c03852bc] xs_udp_send_request+0x50/0xf8
[cf363de0] [c0382f08] xprt_transmit+0x64/0x280
[cf363e20] [c038017c] call_transmit+0x168/0x234
[cf363e40] [c0387918] __rpc_execute+0x88/0x2b0
[cf363e80] [c00296f8] process_one_work+0x124/0x2fc
[cf363ea0] [c0029a00] worker_thread+0x130/0x480
[cf363ef0] [c002e528] kthread+0xbc/0xd0
[cf363f40] [c000e4a8] ret_from_kernel_thread+0x5c/0x64
Instruction dump:
7c70faa6 60630800 7c70fba6 4c00012c 4e800020 38a0001f 7c632878 7c832050
7c842a14 5484d97f 4d820020 7c8903a6 <7c00186c> 38630020 4200fff8 7c0004ac
---[ end trace c846c1eceb513c85 ]---

The reason:

MPC5121 FEC requires 4-byte alignment for TX data buffer and calls
tx_skb_align_workaround() for copying sk_buff with not aligned .data to a new
sk_buff with aligned one. But tx_skb_align_workaround() uses
skb_copy_from_linear_data() which doesn't work for non-linear sk_buff:
a new sk_buff has non-zero nr_frags and zero .data_len.

So improve the condition of calling tx_skb_align_workaround() and use
skb_linearize() in it.

Signed-off-by: Alexander Popov <alex.popov@linux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-06-23 06:39:04 -07:00
..
3com drivers/net: Use setup_timer and mod_timer 2015-02-11 19:40:12 -08:00
8390 net:treewide: Fix typo in drivers/net 2015-04-27 13:40:53 -04:00
adaptec
adi ptp: blackfin: use helpers for converting ns to timespec. 2015-03-31 17:19:19 -04:00
aeroflex net: greth: constify of_device_id array 2015-03-17 15:00:22 -04:00
agere et131x: use msecs_to_jiffies for conversions 2015-02-11 19:37:43 -08:00
allwinner ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
alteon
altera altera_tse: Correct rx packet length 2015-04-29 15:19:34 -04:00
amd amd-xgbe: Use disable_irq_nosync from within timer function 2015-06-07 00:21:12 -07:00
apm net: xgene_enet: Set hardware dependency 2015-05-09 16:24:15 -04:00
apple powerpc updates for 4.1 2015-04-16 13:53:32 -05:00
arc ethernet: arc: ARC_EMAC and EMAC_ROCKCHIP should depend on HAS_DMA 2015-04-23 14:09:58 -04:00
atheros trivial: net: atl1e: atl1e_hw.h: fix 0x0x prefix 2015-04-29 14:56:39 -04:00
broadcom net: bcmgenet: power on MII block for all MII modes 2015-06-08 12:13:53 -07:00
brocade bna: fix soft lock-up during firmware initialization failure 2015-05-30 23:46:49 -07:00
cadence net: macb: Disable half duplex gigabit on Zynq 2015-05-22 14:58:09 -04:00
calxeda ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
chelsio cxgb4: Fix MC1 memory offset calculation 2015-04-29 15:50:16 -04:00
cirrus ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
cisco enic: fix memory leak in rq_clean 2015-06-10 23:42:39 -07:00
davicom dm9000: Add regulator and reset support to dm9000 2015-01-15 14:08:07 -05:00
dec Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-03-20 18:51:09 -04:00
dlink
emulex be2net: Replace dma/pci_alloc_coherent() calls with dma_zalloc_coherent() 2015-06-07 15:35:11 -07:00
faraday
freescale net: fs_enet: Fix NETIF_F_SG feature for Freescale MPC5121 2015-06-23 06:39:04 -07:00
fujitsu
hisilicon net: hip04: Make tx coalesce timer actually work 2015-04-15 17:21:29 -04:00
hp
i825xx
ibm net/ibm/emac: fix size of emac dump memory areas 2015-05-25 16:38:55 -04:00
icplus
intel net: igb: fix the start time for periodic output signals 2015-06-11 16:04:02 -07:00
marvell mvneta: add forgotten initialization of autonegotiation bits 2015-06-23 02:32:48 -07:00
mellanox net/mlx4_core: Disable Granular QoS per VF under IB/Eth VPI configuration 2015-06-15 16:42:57 -07:00
micrel ethernet: Use eth_<foo>_addr instead of memset 2015-03-03 17:01:36 -05:00
microchip
moxa ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
myricom ethernet: myri10ge: use arch_phys_wc_add() 2015-04-23 14:28:14 -04:00
natsemi
neterion s2io: Update driver to use dma_wmb 2015-04-08 12:15:14 -04:00
nuvoton
nvidia
nxp
octeon netdev: octeon_mgmt: constify of_device_id array 2015-03-17 15:00:22 -04:00
oki-semi ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
packetengines ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
pasemi net: pasemi: Use setup_timer and mod_timer 2015-03-01 13:40:23 -05:00
qlogic net: netxen: correct sysfs bin attribute return code 2015-05-27 00:25:33 -04:00
qualcomm net: qca_spi: Fix possible race during probe 2015-05-11 11:01:20 -04:00
rdc
realtek r8169: Do not use dev_kfree_skb in xmit path 2015-05-04 00:06:55 -04:00
renesas sh_eth: Mitigate lost statistics updates 2015-03-04 15:40:54 -05:00
rocker rocker: fix a neigh entry leak issue 2015-05-15 21:20:16 -04:00
samsung ethernet: codespell comment spelling fixes 2015-03-08 22:54:22 -04:00
seeq
sfc sfc: free multiple Rx buffers when required 2015-05-31 17:36:20 -07:00
sgi
silan
sis
smsc Revert "Revert "smc91x: retrieve IRQ and trigger flags in a modern way"" 2015-05-04 15:12:33 -04:00
stmicro net: stmmac: create one debugfs dir per net-device 2015-05-25 17:38:23 -04:00
sun sungem, sunhme, sunvnet: Update drivers to use dma_wmb/rmb 2015-04-08 12:15:14 -04:00
tehuti
ti net: netcp: remove call to netif_carrier_(on/off) for MAC to Phy interface 2015-04-27 23:11:49 -04:00
tile This is the final removal (after several years!) of the obsolete cpus_* 2015-04-20 10:19:03 -07:00
toshiba toshiba: Remove celleb from Kconfig options 2015-04-14 14:57:10 -04:00
tundra
via via-velocity: constify of_device_id array 2015-03-17 15:00:24 -04:00
wiznet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-03-20 18:51:09 -04:00
xilinx net: ll_temac: Fix DMA map size bug 2015-05-12 23:17:42 -04:00
xircom
xscale Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-03-03 21:16:48 -05:00
dnet.c
dnet.h
ec_bhf.c
ethoc.c net: ethoc: constify of_device_id array 2015-03-17 15:00:21 -04:00
fealnx.c
jme.c
jme.h
Kconfig
korina.c
lantiq_etop.c
Makefile
netx-eth.c