From 0615082378003fe5c27a1769d70c5d333ffab75e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 1 Mar 2021 14:30:13 +0100 Subject: [PATCH] 4.9-stable patches added patches: gpio-pcf857x-fix-missing-first-interrupt.patch mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch --- ...-pcf857x-fix-missing-first-interrupt.patch | 45 ++++++++++ ...-fix-kernel-panic-when-remove-module.patch | 82 +++++++++++++++++++ ..._-when-warning-for-undefined-symbols.patch | 80 ++++++++++++++++++ queue-4.9/series | 3 + 4 files changed, 210 insertions(+) create mode 100644 queue-4.9/gpio-pcf857x-fix-missing-first-interrupt.patch create mode 100644 queue-4.9/mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch create mode 100644 queue-4.9/module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch diff --git a/queue-4.9/gpio-pcf857x-fix-missing-first-interrupt.patch b/queue-4.9/gpio-pcf857x-fix-missing-first-interrupt.patch new file mode 100644 index 00000000000..ce78d520efa --- /dev/null +++ b/queue-4.9/gpio-pcf857x-fix-missing-first-interrupt.patch @@ -0,0 +1,45 @@ +From a8002a35935aaefcd6a42ad3289f62bab947f2ca Mon Sep 17 00:00:00 2001 +From: Maxim Kiselev +Date: Wed, 17 Feb 2021 14:10:00 +0100 +Subject: gpio: pcf857x: Fix missing first interrupt + +From: Maxim Kiselev + +commit a8002a35935aaefcd6a42ad3289f62bab947f2ca upstream. + +If no n_latch value will be provided at driver probe then all pins will +be used as an input: + + gpio->out = ~n_latch; + +In that case initial state for all pins is "one": + + gpio->status = gpio->out; + +So if pcf857x IRQ happens with change pin value from "zero" to "one" +then we miss it, because of "one" from IRQ and "one" from initial state +leaves corresponding pin unchanged: +change = (gpio->status ^ status) & gpio->irq_enabled; + +The right solution will be to read actual state at driver probe. + +Cc: stable@vger.kernel.org +Fixes: 6e20a0a429bd ("gpio: pcf857x: enable gpio_to_irq() support") +Signed-off-by: Maxim Kiselev +Signed-off-by: Bartosz Golaszewski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpio/gpio-pcf857x.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpio/gpio-pcf857x.c ++++ b/drivers/gpio/gpio-pcf857x.c +@@ -370,7 +370,7 @@ static int pcf857x_probe(struct i2c_clie + * reset state. Otherwise it flags pins to be driven low. + */ + gpio->out = ~n_latch; +- gpio->status = gpio->out; ++ gpio->status = gpio->read(gpio->client); + + status = devm_gpiochip_add_data(&client->dev, &gpio->chip, gpio); + if (status < 0) diff --git a/queue-4.9/mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch b/queue-4.9/mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch new file mode 100644 index 00000000000..b5703057d16 --- /dev/null +++ b/queue-4.9/mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch @@ -0,0 +1,82 @@ +From a56f44138a2c57047f1ea94ea121af31c595132b Mon Sep 17 00:00:00 2001 +From: Frank Li +Date: Wed, 10 Feb 2021 12:19:33 -0600 +Subject: mmc: sdhci-esdhc-imx: fix kernel panic when remove module + +From: Frank Li + +commit a56f44138a2c57047f1ea94ea121af31c595132b upstream. + +In sdhci_esdhc_imx_remove() the SDHCI_INT_STATUS in read. Under some +circumstances, this may be done while the device is runtime suspended, +triggering the below splat. + +Fix the problem by adding a pm_runtime_get_sync(), before reading the +register, which will turn on clocks etc making the device accessible again. + +[ 1811.323148] mmc1: card aaaa removed +[ 1811.347483] Internal error: synchronous external abort: 96000210 [#1] PREEMPT SMP +[ 1811.354988] Modules linked in: sdhci_esdhc_imx(-) sdhci_pltfm sdhci cqhci mmc_block mmc_core [last unloaded: mmc_core] +[ 1811.365726] CPU: 0 PID: 3464 Comm: rmmod Not tainted 5.10.1-sd-99871-g53835a2e8186 #5 +[ 1811.373559] Hardware name: Freescale i.MX8DXL EVK (DT) +[ 1811.378705] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--) +[ 1811.384723] pc : sdhci_esdhc_imx_remove+0x28/0x15c [sdhci_esdhc_imx] +[ 1811.391090] lr : platform_drv_remove+0x2c/0x50 +[ 1811.395536] sp : ffff800012c7bcb0 +[ 1811.398855] x29: ffff800012c7bcb0 x28: ffff00002c72b900 +[ 1811.404181] x27: 0000000000000000 x26: 0000000000000000 +[ 1811.409497] x25: 0000000000000000 x24: 0000000000000000 +[ 1811.414814] x23: ffff0000042b3890 x22: ffff800009127120 +[ 1811.420131] x21: ffff00002c4c9580 x20: ffff0000042d0810 +[ 1811.425456] x19: ffff0000042d0800 x18: 0000000000000020 +[ 1811.430773] x17: 0000000000000000 x16: 0000000000000000 +[ 1811.436089] x15: 0000000000000004 x14: ffff000004019c10 +[ 1811.441406] x13: 0000000000000000 x12: 0000000000000020 +[ 1811.446723] x11: 0101010101010101 x10: 7f7f7f7f7f7f7f7f +[ 1811.452040] x9 : fefefeff6364626d x8 : 7f7f7f7f7f7f7f7f +[ 1811.457356] x7 : 78725e6473607372 x6 : 0000000080808080 +[ 1811.462673] x5 : 0000000000000000 x4 : 0000000000000000 +[ 1811.467990] x3 : ffff800011ac1cb0 x2 : 0000000000000000 +[ 1811.473307] x1 : ffff8000091214d4 x0 : ffff8000133a0030 +[ 1811.478624] Call trace: +[ 1811.481081] sdhci_esdhc_imx_remove+0x28/0x15c [sdhci_esdhc_imx] +[ 1811.487098] platform_drv_remove+0x2c/0x50 +[ 1811.491198] __device_release_driver+0x188/0x230 +[ 1811.495818] driver_detach+0xc0/0x14c +[ 1811.499487] bus_remove_driver+0x5c/0xb0 +[ 1811.503413] driver_unregister+0x30/0x60 +[ 1811.507341] platform_driver_unregister+0x14/0x20 +[ 1811.512048] sdhci_esdhc_imx_driver_exit+0x1c/0x3a8 [sdhci_esdhc_imx] +[ 1811.518495] __arm64_sys_delete_module+0x19c/0x230 +[ 1811.523291] el0_svc_common.constprop.0+0x78/0x1a0 +[ 1811.528086] do_el0_svc+0x24/0x90 +[ 1811.531405] el0_svc+0x14/0x20 +[ 1811.534461] el0_sync_handler+0x1a4/0x1b0 +[ 1811.538474] el0_sync+0x174/0x180 +[ 1811.541801] Code: a9025bf5 f9403e95 f9400ea0 9100c000 (b9400000) +[ 1811.547902] ---[ end trace 3fb1a3bd48ff7be5 ]--- + +Signed-off-by: Frank Li +Cc: stable@vger.kernel.org # v4.0+ +Link: https://lore.kernel.org/r/20210210181933.29263-1-Frank.Li@nxp.com +[Ulf: Clarified the commit message a bit] +Signed-off-by: Ulf Hansson +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mmc/host/sdhci-esdhc-imx.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/mmc/host/sdhci-esdhc-imx.c ++++ b/drivers/mmc/host/sdhci-esdhc-imx.c +@@ -1301,9 +1301,10 @@ static int sdhci_esdhc_imx_remove(struct + struct sdhci_host *host = platform_get_drvdata(pdev); + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host); +- int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff); ++ int dead; + + pm_runtime_get_sync(&pdev->dev); ++ dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff); + pm_runtime_disable(&pdev->dev); + pm_runtime_put_noidle(&pdev->dev); + diff --git a/queue-4.9/module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch b/queue-4.9/module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch new file mode 100644 index 00000000000..d2156193cc3 --- /dev/null +++ b/queue-4.9/module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch @@ -0,0 +1,80 @@ +From ebfac7b778fac8b0e8e92ec91d0b055f046b4604 Mon Sep 17 00:00:00 2001 +From: Fangrui Song +Date: Fri, 15 Jan 2021 11:52:22 -0800 +Subject: module: Ignore _GLOBAL_OFFSET_TABLE_ when warning for undefined symbols + +From: Fangrui Song + +commit ebfac7b778fac8b0e8e92ec91d0b055f046b4604 upstream. + +clang-12 -fno-pic (since +https://github.com/llvm/llvm-project/commit/a084c0388e2a59b9556f2de0083333232da3f1d6) +can emit `call __stack_chk_fail@PLT` instead of `call __stack_chk_fail` +on x86. The two forms should have identical behaviors on x86-64 but the +former causes GNU as<2.37 to produce an unreferenced undefined symbol +_GLOBAL_OFFSET_TABLE_. + +(On x86-32, there is an R_386_PC32 vs R_386_PLT32 difference but the +linker behavior is identical as far as Linux kernel is concerned.) + +Simply ignore _GLOBAL_OFFSET_TABLE_ for now, like what +scripts/mod/modpost.c:ignore_undef_symbol does. This also fixes the +problem for gcc/clang -fpie and -fpic, which may emit `call foo@PLT` for +external function calls on x86. + +Note: ld -z defs and dynamic loaders do not error for unreferenced +undefined symbols so the module loader is reading too much. If we ever +need to ignore more symbols, the code should be refactored to ignore +unreferenced symbols. + +Cc: +Link: https://github.com/ClangBuiltLinux/linux/issues/1250 +Link: https://sourceware.org/bugzilla/show_bug.cgi?id=27178 +Reported-by: Marco Elver +Reviewed-by: Nick Desaulniers +Reviewed-by: Nathan Chancellor +Tested-by: Marco Elver +Signed-off-by: Fangrui Song +Signed-off-by: Jessica Yu +Signed-off-by: Greg Kroah-Hartman +--- + kernel/module.c | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +--- a/kernel/module.c ++++ b/kernel/module.c +@@ -2209,6 +2209,21 @@ static int verify_export_symbols(struct + return 0; + } + ++static bool ignore_undef_symbol(Elf_Half emachine, const char *name) ++{ ++ /* ++ * On x86, PIC code and Clang non-PIC code may have call foo@PLT. GNU as ++ * before 2.37 produces an unreferenced _GLOBAL_OFFSET_TABLE_ on x86-64. ++ * i386 has a similar problem but may not deserve a fix. ++ * ++ * If we ever have to ignore many symbols, consider refactoring the code to ++ * only warn if referenced by a relocation. ++ */ ++ if (emachine == EM_386 || emachine == EM_X86_64) ++ return !strcmp(name, "_GLOBAL_OFFSET_TABLE_"); ++ return false; ++} ++ + /* Change all symbols so that st_value encodes the pointer directly. */ + static int simplify_symbols(struct module *mod, const struct load_info *info) + { +@@ -2254,8 +2269,10 @@ static int simplify_symbols(struct modul + break; + } + +- /* Ok if weak. */ +- if (!ksym && ELF_ST_BIND(sym[i].st_info) == STB_WEAK) ++ /* Ok if weak or ignored. */ ++ if (!ksym && ++ (ELF_ST_BIND(sym[i].st_info) == STB_WEAK || ++ ignore_undef_symbol(info->hdr->e_machine, name))) + break; + + pr_warn("%s: Unknown symbol %s (err %li)\n", diff --git a/queue-4.9/series b/queue-4.9/series index 6c8526f2fda..d332cd8a1e7 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -111,3 +111,6 @@ mtd-spi-nor-hisi-sfc-put-child-node-np-on-error-path.patch mm-hugetlb-fix-a-race-between-freeing-and-dissolving-the-page.patch usb-renesas_usbhs-clear-pipe-running-flag-in-usbhs_pkt_pop.patch libnvdimm-dimm-avoid-race-between-probe-and-available_slots_show.patch +module-ignore-_global_offset_table_-when-warning-for-undefined-symbols.patch +mmc-sdhci-esdhc-imx-fix-kernel-panic-when-remove-module.patch +gpio-pcf857x-fix-missing-first-interrupt.patch -- 2.47.3