Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933741AbcKVPgt (ORCPT ); Tue, 22 Nov 2016 10:36:49 -0500 Received: from mail-wj0-f171.google.com ([209.85.210.171]:33260 "EHLO mail-wj0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933551AbcKVPgp (ORCPT ); Tue, 22 Nov 2016 10:36:45 -0500 Date: Tue, 22 Nov 2016 15:39:45 +0000 From: Lee Jones To: Milo Kim Cc: Tony Lindgren , linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/5] mfd: tps65217: Fix page fault on unloading modules Message-ID: <20161122153945.GA10134@dell.home> References: <20161115130215.3301-1-woogyom.kim@gmail.com> <20161115130215.3301-2-woogyom.kim@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20161115130215.3301-2-woogyom.kim@gmail.com> User-Agent: Mutt/1.6.2 (2016-07-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10344 Lines: 160 On Tue, 15 Nov 2016, Milo Kim wrote: > TPS65217 IRQ domain should be removed and initialised as NULL when the > module is unloaded for the next use. When tps65217.ko is loaded again, > it causes the page fault. This patch fixes the error below. > > root@arm:~# lsmod | grep "tps" > tps65217_charger 3538 0 > tps65218_pwrbutton 2974 0 > tps65217 6710 1 tps65217_charger > > root@arm:~# modprobe -r tps65217_charger > > root@arm:~# modprobe tps65217.ko > [ 71.990277] Unable to handle kernel paging request at virtual address bf055944 > [ 71.998063] pgd = dd3a4000 > [ 72.000904] [bf055944] *pgd=9e6f7811, *pte=00000000, *ppte=00000000 > [ 72.007567] Internal error: Oops: 7 [#1] SMP ARM > [ 72.012404] Modules linked in: tps65217(+) evdev musb_dsps musb_hdrc udc_core tps65218_pwrbutton usbcore phy_am335] > [ 72.055700] CPU: 0 PID: 243 Comm: modprobe Not tainted 4.9.0-rc5-next-20161114 #3 > [ 72.063531] Hardware name: Generic AM33XX (Flattened Device Tree) > [ 72.069899] task: de714380 task.stack: de7e6000 > [ 72.074655] PC is at irq_find_matching_fwspec+0x88/0x100 > [ 72.080211] LR is at 0xde7e79d8 > [ 72.083496] pc : [] lr : [] psr: 200e0013 > [ 72.083496] sp : de7e7a78 ip : 00000000 fp : dd138a68 > [ 72.095506] r10: c0ca04f8 r9 : 00000018 r8 : de7e7ab8 > [ 72.100973] r7 : 00000001 r6 : c0c4517c r5 : df963f68 r4 : de321980 > [ 72.107797] r3 : bf055940 r2 : de714380 r1 : 00000000 r0 : 00000000 > [ 72.114633] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none > [ 72.122084] Control: 10c5387d Table: 9d3a4019 DAC: 00000051 > [ 72.128097] Process modprobe (pid: 243, stack limit = 0xde7e6218) > [ 72.134489] Stack: (0xde7e7a78 to 0xde7e8000) > [ 72.139060] 7a60: df963f68 de7e7ab8 > [ 72.147643] 7a80: 00000000 dd0e1000 dd491e20 c01a6ea0 600e0013 c01a5dc0 dd138a68 c0c45138 > [ 72.156216] 7aa0: df963f68 00000000 df963f68 dd0e1010 00000000 c01a71a4 df963f68 00000001 > [ 72.164800] 7ac0: 00000002 de7e7ac0 c80048b8 dd0adf00 df963f68 c0c4517c 00000000 de7e7b50 > [ 72.173369] 7ae0: 00000018 c0ca04f8 dd138a68 c01a5dc0 df963f68 dd0e1010 00000000 dd0e1000 > [ 72.181942] 7b00: dd491e20 c0653a70 df963f58 00000001 00000002 00000000 00000000 00000000 > [ 72.190522] 7b20: 600e0093 c0cbf8f0 c0c0512c c0193674 00000001 00000080 00000000 c0554984 > [ 72.199096] 7b40: 00000000 00000000 800e0013 c0553858 df963f68 00000000 00000000 00000000 > [ 72.207674] 7b60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > [ 72.216239] 7b80: 00000000 00000000 00000000 00000000 00000000 00000000 dd0e1000 c0544d24 > [ 72.224816] 7ba0: dd491e10 dd0e1010 dd16e800 bf1d517c bf1d5620 dd0e1010 c1497ed4 bf1d5620 > [ 72.233398] 7bc0: dd0e1010 fffffdfb bf1d5620 bf1d5620 00000000 c054537c c0545330 dd0e1010 > [ 72.241967] 7be0: c1497ed4 00000000 bf1d5620 c05433ac 00000000 00000000 de7e7c28 c0543570 > [ 72.250537] 7c00: 00000001 c1497e90 00000000 c0541884 de080cd4 dd44b7d4 dd0e1010 dd0e1010 > [ 72.259109] 7c20: dd0e1044 c05430c8 dd0e1010 00000001 dd0e1010 dd0e1018 dd0e1010 c0c9e328 > [ 72.267676] 7c40: de5d4020 c0542760 dd0e1018 dd0e1010 00000000 c0540ba8 dd138a40 c048dec4 > [ 72.276253] 7c60: 00000000 dd0e1000 00000001 dd0e1000 dd0e1010 dd0e1000 bf233de0 dd138a40 > [ 72.284829] 7c80: dd0e1010 c05450a0 000000bf 00000000 dd138a60 00000001 dd0e1000 c0571240 > [ 72.293398] 7ca0: 00000000 dd1ce9c0 00000040 dd1ce9cc bf233de0 00000003 de5d4020 ffffffff > [ 72.301969] 7cc0: 00000004 dd0adf00 00000000 c0571408 00000000 00000000 dd0adf00 de5d4020 > [ 72.310543] 7ce0: c057146c dd1ce9c0 bf233d14 de5d4020 de7fb3d0 00000004 bf233d14 ffffffff > [ 72.319120] 7d00: 00000018 dd49bf30 c01cedc0 c05714d0 00000000 00000000 dd0adf00 de322810 > [ 72.327692] 7d20: de322810 00000000 dd033000 000000f0 00000001 bf2333fc 00000000 00000000 > [ 72.336269] 7d40: dd0adf00 de5d4020 000000b6 bf233e40 de5d4020 bf233968 de5d4004 de5d4000 > [ 72.344848] 7d60: bf233314 c06148ac de5d4020 c1497ed4 00000000 bf233e40 00000000 c05433ac > [ 72.353422] 7d80: 00000000 de5d4020 bf233e40 de5d4054 00000000 bf236000 00000000 c0543538 > [ 72.362002] 7da0: 00000000 bf233e40 c0543484 c05417e4 de1442a4 de5d04d0 bf233e40 de321300 > [ 72.370582] 7dc0: c0caa5a4 c05429fc bf233be0 bf233e40 c0cbfa44 bf233e40 c0cbfa44 dd2f7740 > [ 72.379148] 7de0: bf233f00 c05442f0 bf233e8c bf233e24 c0cbfa44 c0615ae0 00000000 bf233f00 > [ 72.387718] 7e00: c0cbfa44 c010186c 200f0013 c0191650 de714380 00000000 600f0013 00000040 > [ 72.396286] 7e20: dd2f7740 c018f1ac 00000001 c0c8356c 024000c0 c01a8854 c0c56e0e c028225c > [ 72.404863] 7e40: dd2f7740 c0191984 de714380 dd2f7740 00000001 bf233f00 bf233f00 c0cbfa44 > [ 72.413440] 7e60: dd2f7740 bf233f00 00000001 dd49bf08 dd49bf30 c0230998 00000001 c0c8356c > [ 72.421997] 7e80: c0c4c536 c0cbfa44 c0c0512c c01d2070 bf233f0c 00007fff bf233f00 c01cf5b8 > [ 72.430570] 7ea0: 00000000 c1475134 c01cee34 bf23411c bf233f48 bf234054 bf234150 00000000 > [ 72.439144] 7ec0: 024002c2 de7fbf40 0009bc20 c02776ac ff800000 00000000 00000000 bf233670 > [ 72.447723] 7ee0: 00000004 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > [ 72.456298] 7f00: 00000000 00000000 00000000 00000000 c01d2590 0000aa41 00000000 00000000 > [ 72.464862] 7f20: 000b2549 e12c3a41 00000051 de7e6000 0009bc20 c01d2630 00000530 e12b9000 > [ 72.473438] 7f40: 0000aa41 e12c1434 e12c1211 e12c336c 00001150 00001620 00000000 00000000 > [ 72.482003] 7f60: 00000000 000010fc 00000035 00000036 0000001d 0000001a 00000017 00000000 > [ 72.490564] 7f80: de7e6000 3ba39a00 0009b008 0009b718 00000080 c0107704 de7e6000 00000000 > [ 72.499141] 7fa0: 0009f609 c0107560 3ba39a00 0009b008 000a7b08 0000aa41 0009bc20 0000aa41 > [ 72.507717] 7fc0: 3ba39a00 0009b008 0009b718 00000080 00000001 00000008 0009ab14 0009f609 > [ 72.516290] 7fe0: bea31ab8 bea31aa8 0001e5eb b6e83b42 800f0030 000a7b08 0000ffff 0840ffff > [ 72.524883] [] (irq_find_matching_fwspec) from [] (irq_create_fwspec_mapping+0x28/0x2e0) > [ 72.535174] [] (irq_create_fwspec_mapping) from [] (irq_create_of_mapping+0x4c/0x54) > [ 72.545115] [] (irq_create_of_mapping) from [] (of_irq_get+0x58/0x68) > [ 72.553699] [] (of_irq_get) from [] (platform_get_irq+0x1c/0xec) > [ 72.561828] [] (platform_get_irq) from [] (tps6521x_pb_probe+0xd0/0x1a8 [tps65218_pwrbutton]) > [ 72.572581] [] (tps6521x_pb_probe [tps65218_pwrbutton]) from [] (platform_drv_probe+0x4c/0xac) > [ 72.583426] [] (platform_drv_probe) from [] (driver_probe_device+0x204/0x2dc) > [ 72.592729] [] (driver_probe_device) from [] (bus_for_each_drv+0x58/0x8c) > [ 72.601657] [] (bus_for_each_drv) from [] (__device_attach+0xb0/0x114) > [ 72.610324] [] (__device_attach) from [] (bus_probe_device+0x88/0x90) > [ 72.618898] [] (bus_probe_device) from [] (device_add+0x3b8/0x560) > [ 72.627203] [] (device_add) from [] (platform_device_add+0xa8/0x208) > [ 72.635693] [] (platform_device_add) from [] (mfd_add_device+0x240/0x338) > [ 72.644634] [] (mfd_add_device) from [] (mfd_add_devices+0xa0/0x104) > [ 72.653120] [] (mfd_add_devices) from [] (devm_mfd_add_devices+0x60/0xa8) > [ 72.662077] [] (devm_mfd_add_devices) from [] (tps65217_probe+0xe8/0x2ec [tps65217]) > [ 72.672026] [] (tps65217_probe [tps65217]) from [] (i2c_device_probe+0x168/0x1f4) > [ 72.681695] [] (i2c_device_probe) from [] (driver_probe_device+0x204/0x2dc) > [ 72.690816] [] (driver_probe_device) from [] (__driver_attach+0xb4/0xb8) > [ 72.699657] [] (__driver_attach) from [] (bus_for_each_dev+0x60/0x94) > [ 72.708224] [] (bus_for_each_dev) from [] (bus_add_driver+0x18c/0x214) > [ 72.716892] [] (bus_add_driver) from [] (driver_register+0x78/0xf8) > [ 72.725280] [] (driver_register) from [] (i2c_register_driver+0x38/0x80) > [ 72.734120] [] (i2c_register_driver) from [] (do_one_initcall+0x3c/0x178) > [ 72.743055] [] (do_one_initcall) from [] (do_init_module+0x5c/0x1d0) > [ 72.751537] [] (do_init_module) from [] (load_module+0x1d10/0x21c0) > [ 72.759933] [] (load_module) from [] (SyS_init_module+0x110/0x154) > [ 72.768242] [] (SyS_init_module) from [] (ret_fast_syscall+0x0/0x1c) > [ 72.776725] Code: e5944000 e1540006 0a00001b e594300c (e593c004) > [ 72.783181] ---[ end trace 0278ec325f4689b8 ]--- > > Fixes: 6556bdacf646 ("mfd: tps65217: Add support for IRQs") > Signed-off-by: Milo Kim > --- > drivers/mfd/tps65217.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) Applied, thanks. > diff --git a/drivers/mfd/tps65217.c b/drivers/mfd/tps65217.c > index 9a4d868..df2e775 100644 > --- a/drivers/mfd/tps65217.c > +++ b/drivers/mfd/tps65217.c > @@ -424,6 +424,24 @@ static int tps65217_probe(struct i2c_client *client, > return 0; > } > > +static int tps65217_remove(struct i2c_client *client) > +{ > + struct tps65217 *tps = i2c_get_clientdata(client); > + unsigned int virq; > + int i; > + > + for (i = 0; i < ARRAY_SIZE(tps65217_irqs); i++) { > + virq = irq_find_mapping(tps->irq_domain, i); > + if (virq) > + irq_dispose_mapping(virq); > + } > + > + irq_domain_remove(tps->irq_domain); > + tps->irq_domain = NULL; > + > + return 0; > +} > + > static const struct i2c_device_id tps65217_id_table[] = { > {"tps65217", TPS65217}, > { /* sentinel */ } > @@ -437,6 +455,7 @@ static struct i2c_driver tps65217_driver = { > }, > .id_table = tps65217_id_table, > .probe = tps65217_probe, > + .remove = tps65217_remove, > }; > > static int __init tps65217_init(void) -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog