mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 23:45:31 +08:00
398a9db655
Several init/setup functions passed the PCI BAR resource start address to ioremap_nocache() via an unsigned long. This caused address truncation for a 32-bit device mapped above 4 GiB (i.e. the CPU interacts with the device via a translated address), which resulted in a kernel panic. This patch replaces all of the instances of intermediate variable use with pci_ioremap_bar() to ensure the full resource_size_t start address is used and that ioremap_nocache() is still called. The kernel panic (Exar XR17V358 PCIe device on a Freescale P2020 SBC): Machine check in kernel mode. Caused by (from MCSR=10008): Bus - Read Data Bus Error Oops: Machine check, sig: 7 [#1] SMP NR_CPUS=2 X-ES P2020 Modules linked in: CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.14.15-xes_r2-00002-g560e401 #978 task: bf850000 ti: bffee000 task.ti: bf84c000 NIP: 80318e10 LR: 80319ecc CTR: 80318dfc REGS: bffeff10 TRAP: 0204 Not tainted (3.14.15-xes_r2-00002-g560e401) MSR: 00021000 <CE,ME> CR: 20adbe42 XER: 00000000 DEAR: c1058001 ESR: 00000000 GPR00: 00000000 bf84db30 bf850000 80cb4af8 00000001 00000000 80000007 80000000 GPR08: bf837c9c c1058001 00000001 00000000 80000007 00000000 80002a10 00000000 GPR16: 00000000 00000000 00000000 00000000 00000000 00000000 80cb0000 80c72dc4 GPR24: 80cb4900 fffffffe 00029000 00000001 bf8c11e8 ffffffea 80c72ce4 80cb4af8 NIP [80318e10] mem_serial_in+0x14/0x28 LR [80319ecc] serial8250_config_port+0x160/0xe38 Call Trace: [bf84db30] [80319d94] serial8250_config_port+0x28/0xe38 (unreliable) [bf84db60] [80315e3c] uart_add_one_port+0x148/0x3a4 [bf84dbf0] [8031bf40] serial8250_register_8250_port+0x2dc/0x3c8 [bf84dc20] [8032111c] pciserial_init_ports+0xd4/0x1c0 [bf84dd50] [803212f8] pciserial_init_one+0xf0/0x224 [bf84dd90] [802d8ff4] local_pci_probe+0x34/0x8c [bf84dda0] [802d92c8] pci_device_probe+0x84/0xa0 [bf84ddc0] [80329ee0] driver_probe_device+0xac/0x26c [bf84dde0] [8032a15c] __driver_attach+0xbc/0xc0 [bf84de00] [80328388] bus_for_each_dev+0x90/0xcc [bf84de30] [80329cd0] driver_attach+0x24/0x34 [bf84de40] [80328e28] bus_add_driver+0x104/0x1fc [bf84de60] [8032a8c8] driver_register+0x70/0x138 [bf84de70] [802d93c0] __pci_register_driver+0x48/0x58 [bf84de80] [8077e0e4] serial_pci_driver_init+0x24/0x34 [bf84de90] [80002228] do_one_initcall+0x34/0x1b0 [bf84df00] [80764294] kernel_init_freeable+0x138/0x1e8 [bf84df30] [80002a24] kernel_init+0x14/0x108 [bf84df40] [8000ef94] ret_from_kernel_thread+0x5c/0x64 Instruction dump: 800800c4 7d290214 39290001 7c0004ac 7ca049ae 7c0004ac 4e800020 88030035 81230008 7c840030 7d292214 7c0004ac <88690000> 0c030000 4c00012c 5463063e ---[ end trace e3c16443b5d573c6 ]--- Signed-off-by: Aaron Sierra <asierra@xes-inc.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
||
---|---|---|
.. | ||
8250 | ||
cpm_uart | ||
jsm | ||
21285.c | ||
68328serial.c | ||
altera_jtaguart.c | ||
altera_uart.c | ||
amba-pl010.c | ||
amba-pl011.c | ||
apbuart.c | ||
apbuart.h | ||
ar933x_uart.c | ||
arc_uart.c | ||
atmel_serial.c | ||
bcm63xx_uart.c | ||
bfin_sport_uart.c | ||
bfin_sport_uart.h | ||
bfin_uart.c | ||
clps711x.c | ||
crisv10.c | ||
crisv10.h | ||
dz.c | ||
dz.h | ||
earlycon-arm-semihost.c | ||
earlycon.c | ||
efm32-uart.c | ||
fsl_lpuart.c | ||
icom.c | ||
icom.h | ||
ifx6x60.c | ||
ifx6x60.h | ||
imx.c | ||
ioc3_serial.c | ||
ioc4_serial.c | ||
ip22zilog.c | ||
ip22zilog.h | ||
Kconfig | ||
kgdb_nmi.c | ||
kgdboc.c | ||
lantiq.c | ||
lpc32xx_hs.c | ||
m32r_sio_reg.h | ||
m32r_sio.c | ||
m32r_sio.h | ||
Makefile | ||
max310x.c | ||
max3100.c | ||
mcf.c | ||
men_z135_uart.c | ||
meson_uart.c | ||
mfd.c | ||
mpc52xx_uart.c | ||
mpsc.c | ||
mrst_max3110.c | ||
mrst_max3110.h | ||
msm_serial_hs.c | ||
msm_serial.c | ||
msm_serial.h | ||
msm_smd_tty.c | ||
mux.c | ||
mxs-auart.c | ||
netx-serial.c | ||
nwpserial.c | ||
of_serial.c | ||
omap-serial.c | ||
pch_uart.c | ||
pmac_zilog.c | ||
pmac_zilog.h | ||
pnx8xxx_uart.c | ||
pxa.c | ||
rp2.c | ||
sa1100.c | ||
samsung.c | ||
samsung.h | ||
sb1250-duart.c | ||
sc16is7xx.c | ||
sccnxp.c | ||
serial_core.c | ||
serial_ks8695.c | ||
serial_mctrl_gpio.c | ||
serial_mctrl_gpio.h | ||
serial_txx9.c | ||
serial-tegra.c | ||
sh-sci.c | ||
sh-sci.h | ||
sirfsoc_uart.c | ||
sirfsoc_uart.h | ||
sn_console.c | ||
st-asc.c | ||
suncore.c | ||
sunhv.c | ||
sunsab.c | ||
sunsab.h | ||
sunsu.c | ||
sunzilog.c | ||
sunzilog.h | ||
tilegx.c | ||
timbuart.c | ||
timbuart.h | ||
uartlite.c | ||
ucc_uart.c | ||
vr41xx_siu.c | ||
vt8500_serial.c | ||
xilinx_uartps.c | ||
zs.c | ||
zs.h |