Re: [PATCH 3/3] usb: typec: fusb302: Call fusb302_debugfs_init earlier
On Thu, Aug 15, 2019 at 09:18:15PM +0200, Hans de Goede wrote: > tcpm_register_port() will call some of the fusb302 code's callbacks > wich in turn will call fusb302_log(). So we need to call > fusb302_debugfs_init() before we call tcpm_register_port(). > > This fixes the following warning, which was caused by the logbuffer_lock > not yet being initialized (which is done by fusb302_debugfs_init): > > DEBUG_LOCKS_WARN_ON(lock->magic != lock) > WARNING: CPU: 0 PID: 1306 at kernel/locking/mutex.c:912 > __mutex_lock+0x978/0x9a0 > Modules linked in: fusb302(+) tcpm pi3usb30532 typec bq24190_charger > snd_soc_sst_cht_bsw_rt5645 mei_hdcp dwc3 intel_rapl_msr udc_core ulpi > gpio_keys intel_powerclamp coretemp kvm_intel brcmfmac kvm brcmutil joydev > cfg80211 wdat_wdt irqbypass pcspkr intel_cstate extcon_intel_cht_wc > i2c_cht_wc(E) snd_intel_sst_acpi snd_intel_sst_core snd_soc_rt5645 > snd_soc_sst_atom_hifi2_platform snd_soc_acpi_intel_match snd_soc_rl6231 > snd_soc_acpi intel_xhci_usb_role_switch roles hci_uart snd_soc_core btqca > mei_txe btrtl processor_thermal_device mei snd_hdmi_lpe_audio lpc_ich > snd_compress btbcm intel_rapl_common ac97_bus dwc3_pci snd_pcm_dmaengine > intel_soc_dts_iosf btintel snd_seq bluetooth snd_seq_device snd_pcm > intel_cht_int33fe_musb snd_timer intel_cht_int33fe_typec intel_hid > intel_cht_int33fe_common sparse_keymap snd ecdh_generic goodix rfkill > soundcore ecc spi_pxa2xx_platform max17042_battery dw_dmac int3406_thermal > dptf_power acpi_pad soc_button_array int3400_thermal int3403_thermal > gpd_pocket_fan intel_int0002_vgpio int340x_thermal_zone acpi_thermal_rel > dm_crypt mmc_block i915 crct10dif_pclmul crc32_pclmul crc32c_intel > ghash_clmulni_intel i2c_algo_bit drm_kms_helper drm video sdhci_acpi sdhci > mmc_core pwm_lpss_platform pwm_lpss i2c_dev > CPU: 0 PID: 1306 Comm: systemd-udevd Tainted: GE 5.3.0-rc4+ > #83 > Hardware name: Default string Default string/Default string, BIOS 5.11 > 06/28/2017 > RIP: 0010:__mutex_lock+0x978/0x9a0 > Code: c0 0f 84 26 f7 ff ff 44 8b 05 24 25 c8 00 45 85 c0 0f 85 16 f7 ff ff > 48 c7 c6 da 55 2f ae 48 c7 c7 98 8c 2d ae e8 a0 f9 5c ff <0f> 0b e9 fc f6 ff > ff 4c 89 f0 4d 89 fe 49 89 c7 e9 cf fa ff ff e8 > RSP: 0018:b7a8c0523800 EFLAGS: 00010286 > RAX: RBX: RCX: > RDX: 0002 RSI: 0001 RDI: 0246 > RBP: b7a8c05238c0 R08: R09: > R10: b7a8c0523648 R11: 0030 R12: > R13: b7a8c0523990 R14: 9bf22f70c028 R15: 9bf22f70c360 > FS: 7f39ca234940() GS:9bf23740() knlGS: > CS: 0010 DS: ES: CR0: 80050033 > CR2: 7f1f108481a0 CR3: 000271f28000 CR4: 001006f0 > Call Trace: > ? find_held_lock+0x39/0x90 > ? _fusb302_log+0x81/0x1d0 [fusb302] > ? vsnprintf+0x3aa/0x4f0 > ? _fusb302_log+0x81/0x1d0 [fusb302] > _fusb302_log+0x81/0x1d0 [fusb302] > ... > > Signed-off-by: Hans de Goede Reviewed-by: Heikki Krogerus > --- > drivers/usb/typec/tcpm/fusb302.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/typec/tcpm/fusb302.c > b/drivers/usb/typec/tcpm/fusb302.c > index 69a2afaf8f68..c7769fa73148 100644 > --- a/drivers/usb/typec/tcpm/fusb302.c > +++ b/drivers/usb/typec/tcpm/fusb302.c > @@ -1726,6 +1726,7 @@ static int fusb302_probe(struct i2c_client *client, > INIT_WORK(&chip->irq_work, fusb302_irq_work); > INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work); > init_tcpc_dev(&chip->tcpc_dev); > + fusb302_debugfs_init(chip); > > if (client->irq) { > chip->gpio_int_n_irq = client->irq; > @@ -1758,7 +1759,6 @@ static int fusb302_probe(struct i2c_client *client, > goto tcpm_unregister_port; > } > enable_irq_wake(chip->gpio_int_n_irq); > - fusb302_debugfs_init(chip); > i2c_set_clientdata(client, chip); > > return ret; > @@ -1767,6 +1767,7 @@ static int fusb302_probe(struct i2c_client *client, > tcpm_unregister_port(chip->tcpm_port); > fwnode_handle_put(chip->tcpc_dev.fwnode); > destroy_workqueue: > + fusb302_debugfs_exit(chip); > destroy_workqueue(chip->wq); > > return ret; > -- > 2.23.0.rc2 thanks, -- heikki
Re: [PATCH 3/3] usb: typec: fusb302: Call fusb302_debugfs_init earlier
On Thu, Aug 15, 2019 at 09:18:15PM +0200, Hans de Goede wrote: > tcpm_register_port() will call some of the fusb302 code's callbacks > wich in turn will call fusb302_log(). So we need to call > fusb302_debugfs_init() before we call tcpm_register_port(). > > This fixes the following warning, which was caused by the logbuffer_lock > not yet being initialized (which is done by fusb302_debugfs_init): > > DEBUG_LOCKS_WARN_ON(lock->magic != lock) > WARNING: CPU: 0 PID: 1306 at kernel/locking/mutex.c:912 > __mutex_lock+0x978/0x9a0 > Modules linked in: fusb302(+) tcpm pi3usb30532 typec bq24190_charger > snd_soc_sst_cht_bsw_rt5645 mei_hdcp dwc3 intel_rapl_msr udc_core ulpi > gpio_keys intel_powerclamp coretemp kvm_intel brcmfmac kvm brcmutil joydev > cfg80211 wdat_wdt irqbypass pcspkr intel_cstate extcon_intel_cht_wc > i2c_cht_wc(E) snd_intel_sst_acpi snd_intel_sst_core snd_soc_rt5645 > snd_soc_sst_atom_hifi2_platform snd_soc_acpi_intel_match snd_soc_rl6231 > snd_soc_acpi intel_xhci_usb_role_switch roles hci_uart snd_soc_core btqca > mei_txe btrtl processor_thermal_device mei snd_hdmi_lpe_audio lpc_ich > snd_compress btbcm intel_rapl_common ac97_bus dwc3_pci snd_pcm_dmaengine > intel_soc_dts_iosf btintel snd_seq bluetooth snd_seq_device snd_pcm > intel_cht_int33fe_musb snd_timer intel_cht_int33fe_typec intel_hid > intel_cht_int33fe_common sparse_keymap snd ecdh_generic goodix rfkill > soundcore ecc spi_pxa2xx_platform max17042_battery dw_dmac int3406_thermal > dptf_power acpi_pad soc_button_array int3400_thermal int3403_thermal > gpd_pocket_fan intel_int0002_vgpio int340x_thermal_zone acpi_thermal_rel > dm_crypt mmc_block i915 crct10dif_pclmul crc32_pclmul crc32c_intel > ghash_clmulni_intel i2c_algo_bit drm_kms_helper drm video sdhci_acpi sdhci > mmc_core pwm_lpss_platform pwm_lpss i2c_dev > CPU: 0 PID: 1306 Comm: systemd-udevd Tainted: GE 5.3.0-rc4+ > #83 > Hardware name: Default string Default string/Default string, BIOS 5.11 > 06/28/2017 > RIP: 0010:__mutex_lock+0x978/0x9a0 > Code: c0 0f 84 26 f7 ff ff 44 8b 05 24 25 c8 00 45 85 c0 0f 85 16 f7 ff ff > 48 c7 c6 da 55 2f ae 48 c7 c7 98 8c 2d ae e8 a0 f9 5c ff <0f> 0b e9 fc f6 ff > ff 4c 89 f0 4d 89 fe 49 89 c7 e9 cf fa ff ff e8 > RSP: 0018:b7a8c0523800 EFLAGS: 00010286 > RAX: RBX: RCX: > RDX: 0002 RSI: 0001 RDI: 0246 > RBP: b7a8c05238c0 R08: R09: > R10: b7a8c0523648 R11: 0030 R12: > R13: b7a8c0523990 R14: 9bf22f70c028 R15: 9bf22f70c360 > FS: 7f39ca234940() GS:9bf23740() knlGS: > CS: 0010 DS: ES: CR0: 80050033 > CR2: 7f1f108481a0 CR3: 000271f28000 CR4: 001006f0 > Call Trace: > ? find_held_lock+0x39/0x90 > ? _fusb302_log+0x81/0x1d0 [fusb302] > ? vsnprintf+0x3aa/0x4f0 > ? _fusb302_log+0x81/0x1d0 [fusb302] > _fusb302_log+0x81/0x1d0 [fusb302] > ... > > Signed-off-by: Hans de Goede Reviewed-by: Guenter Roeck > --- > drivers/usb/typec/tcpm/fusb302.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/typec/tcpm/fusb302.c > b/drivers/usb/typec/tcpm/fusb302.c > index 69a2afaf8f68..c7769fa73148 100644 > --- a/drivers/usb/typec/tcpm/fusb302.c > +++ b/drivers/usb/typec/tcpm/fusb302.c > @@ -1726,6 +1726,7 @@ static int fusb302_probe(struct i2c_client *client, > INIT_WORK(&chip->irq_work, fusb302_irq_work); > INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work); > init_tcpc_dev(&chip->tcpc_dev); > + fusb302_debugfs_init(chip); > > if (client->irq) { > chip->gpio_int_n_irq = client->irq; > @@ -1758,7 +1759,6 @@ static int fusb302_probe(struct i2c_client *client, > goto tcpm_unregister_port; > } > enable_irq_wake(chip->gpio_int_n_irq); > - fusb302_debugfs_init(chip); > i2c_set_clientdata(client, chip); > > return ret; > @@ -1767,6 +1767,7 @@ static int fusb302_probe(struct i2c_client *client, > tcpm_unregister_port(chip->tcpm_port); > fwnode_handle_put(chip->tcpc_dev.fwnode); > destroy_workqueue: > + fusb302_debugfs_exit(chip); > destroy_workqueue(chip->wq); > > return ret; > -- > 2.23.0.rc2 >
[PATCH 3/3] usb: typec: fusb302: Call fusb302_debugfs_init earlier
tcpm_register_port() will call some of the fusb302 code's callbacks wich in turn will call fusb302_log(). So we need to call fusb302_debugfs_init() before we call tcpm_register_port(). This fixes the following warning, which was caused by the logbuffer_lock not yet being initialized (which is done by fusb302_debugfs_init): DEBUG_LOCKS_WARN_ON(lock->magic != lock) WARNING: CPU: 0 PID: 1306 at kernel/locking/mutex.c:912 __mutex_lock+0x978/0x9a0 Modules linked in: fusb302(+) tcpm pi3usb30532 typec bq24190_charger snd_soc_sst_cht_bsw_rt5645 mei_hdcp dwc3 intel_rapl_msr udc_core ulpi gpio_keys intel_powerclamp coretemp kvm_intel brcmfmac kvm brcmutil joydev cfg80211 wdat_wdt irqbypass pcspkr intel_cstate extcon_intel_cht_wc i2c_cht_wc(E) snd_intel_sst_acpi snd_intel_sst_core snd_soc_rt5645 snd_soc_sst_atom_hifi2_platform snd_soc_acpi_intel_match snd_soc_rl6231 snd_soc_acpi intel_xhci_usb_role_switch roles hci_uart snd_soc_core btqca mei_txe btrtl processor_thermal_device mei snd_hdmi_lpe_audio lpc_ich snd_compress btbcm intel_rapl_common ac97_bus dwc3_pci snd_pcm_dmaengine intel_soc_dts_iosf btintel snd_seq bluetooth snd_seq_device snd_pcm intel_cht_int33fe_musb snd_timer intel_cht_int33fe_typec intel_hid intel_cht_int33fe_common sparse_keymap snd ecdh_generic goodix rfkill soundcore ecc spi_pxa2xx_platform max17042_battery dw_dmac int3406_thermal dptf_power acpi_pad soc_button_array int3400_thermal int3403_thermal gpd_pocket_fan intel_int0002_vgpio int340x_thermal_zone acpi_thermal_rel dm_crypt mmc_block i915 crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel i2c_algo_bit drm_kms_helper drm video sdhci_acpi sdhci mmc_core pwm_lpss_platform pwm_lpss i2c_dev CPU: 0 PID: 1306 Comm: systemd-udevd Tainted: GE 5.3.0-rc4+ #83 Hardware name: Default string Default string/Default string, BIOS 5.11 06/28/2017 RIP: 0010:__mutex_lock+0x978/0x9a0 Code: c0 0f 84 26 f7 ff ff 44 8b 05 24 25 c8 00 45 85 c0 0f 85 16 f7 ff ff 48 c7 c6 da 55 2f ae 48 c7 c7 98 8c 2d ae e8 a0 f9 5c ff <0f> 0b e9 fc f6 ff ff 4c 89 f0 4d 89 fe 49 89 c7 e9 cf fa ff ff e8 RSP: 0018:b7a8c0523800 EFLAGS: 00010286 RAX: RBX: RCX: RDX: 0002 RSI: 0001 RDI: 0246 RBP: b7a8c05238c0 R08: R09: R10: b7a8c0523648 R11: 0030 R12: R13: b7a8c0523990 R14: 9bf22f70c028 R15: 9bf22f70c360 FS: 7f39ca234940() GS:9bf23740() knlGS: CS: 0010 DS: ES: CR0: 80050033 CR2: 7f1f108481a0 CR3: 000271f28000 CR4: 001006f0 Call Trace: ? find_held_lock+0x39/0x90 ? _fusb302_log+0x81/0x1d0 [fusb302] ? vsnprintf+0x3aa/0x4f0 ? _fusb302_log+0x81/0x1d0 [fusb302] _fusb302_log+0x81/0x1d0 [fusb302] ... Signed-off-by: Hans de Goede --- drivers/usb/typec/tcpm/fusb302.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c index 69a2afaf8f68..c7769fa73148 100644 --- a/drivers/usb/typec/tcpm/fusb302.c +++ b/drivers/usb/typec/tcpm/fusb302.c @@ -1726,6 +1726,7 @@ static int fusb302_probe(struct i2c_client *client, INIT_WORK(&chip->irq_work, fusb302_irq_work); INIT_DELAYED_WORK(&chip->bc_lvl_handler, fusb302_bc_lvl_handler_work); init_tcpc_dev(&chip->tcpc_dev); + fusb302_debugfs_init(chip); if (client->irq) { chip->gpio_int_n_irq = client->irq; @@ -1758,7 +1759,6 @@ static int fusb302_probe(struct i2c_client *client, goto tcpm_unregister_port; } enable_irq_wake(chip->gpio_int_n_irq); - fusb302_debugfs_init(chip); i2c_set_clientdata(client, chip); return ret; @@ -1767,6 +1767,7 @@ static int fusb302_probe(struct i2c_client *client, tcpm_unregister_port(chip->tcpm_port); fwnode_handle_put(chip->tcpc_dev.fwnode); destroy_workqueue: + fusb302_debugfs_exit(chip); destroy_workqueue(chip->wq); return ret; -- 2.23.0.rc2