From patchwork Mon Jun 27 06:36:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 9199931 X-Patchwork-Delegate: geert@linux-m68k.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A777F6075F for ; Mon, 27 Jun 2016 06:37:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9784228575 for ; Mon, 27 Jun 2016 06:37:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8A2A42857C; Mon, 27 Jun 2016 06:37:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9B8A928575 for ; Mon, 27 Jun 2016 06:37:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751601AbcF0GhK (ORCPT ); Mon, 27 Jun 2016 02:37:10 -0400 Received: from relmlor1.renesas.com ([210.160.252.171]:39654 "EHLO relmlie4.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750870AbcF0GhH (ORCPT ); Mon, 27 Jun 2016 02:37:07 -0400 Received: from unknown (HELO relmlir4.idc.renesas.com) ([10.200.68.154]) by relmlie4.idc.renesas.com with ESMTP; 27 Jun 2016 15:37:05 +0900 Received: from relmlac4.idc.renesas.com (relmlac4.idc.renesas.com [10.200.69.24]) by relmlir4.idc.renesas.com (Postfix) with ESMTP id A11854C53D; Mon, 27 Jun 2016 15:37:05 +0900 (JST) Received: by relmlac4.idc.renesas.com (Postfix, from userid 0) id 8F904480A3; Mon, 27 Jun 2016 15:37:05 +0900 (JST) Received: from relmlac4.idc.renesas.com (localhost [127.0.0.1]) by relmlac4.idc.renesas.com (Postfix) with ESMTP id 87F8648014; Mon, 27 Jun 2016 15:37:05 +0900 (JST) Received: from relmlii1.idc.renesas.com [10.200.68.65] by relmlac4.idc.renesas.com with ESMTP id RAJ12589; Mon, 27 Jun 2016 15:37:05 +0900 X-IronPort-AV: E=Sophos;i="5.22,559,1449500400"; d="scan'";a="213825425" Received: from mail-pu1apc01lp0020.outbound.protection.outlook.com (HELO APC01-PU1-obe.outbound.protection.outlook.com) ([65.55.88.20]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA; 27 Jun 2016 15:37:04 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=fMBoTEp4VNJBHQG0wQLIVk5VukH9Qmo1+8yJlfvNETM=; b=RvAEZl950cvvoMOeOrJ5nOVxSvxSvC4jtwzwSLRJop3w/J+hWnx75cuUVylpMnqZEz/GvX+9ZoZIPNIDAPQu+8nWpUMyRYGhdcezwF9VSZHJ10jGJnzesMLJPMIbsU9dP13ix0vgDr/+VDIuGErEkY7V/28c3FE+gZqbCmEn2mo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=<>; Received: from localhost (211.11.155.144) by SIXPR06MB0921.apcprd06.prod.outlook.com (10.162.173.13) with Microsoft SMTP Server (TLS) id 15.1.523.12; Mon, 27 Jun 2016 06:37:03 +0000 From: Yoshihiro Shimoda To: CC: , , Yoshihiro Shimoda Subject: [PATCH] phy: rcar-gen3-usb2: fix mutex_lock calling in interrupt Date: Mon, 27 Jun 2016 15:36:53 +0900 Message-ID: <1467009413-8076-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.4.msysgit.1 MIME-Version: 1.0 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: TY1PR0201CA0009.apcprd02.prod.outlook.com (10.164.90.147) To SIXPR06MB0921.apcprd06.prod.outlook.com (10.162.173.13) X-MS-Office365-Filtering-Correlation-Id: 4d57487e-436f-449e-a45c-08d39e557382 X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0921; 2:ey0DtsgInjvOvQ2OZIAOBrfiPP5S9p6PU+aGkUhtvbaXFeHmKf/Wf2ulI4YD9GdVEo5suw1UiOp6ubzRtrPNkWr+4kn1OvmUz3xwfl5JCT3fY3xwnT49DR3JZIMVZedUuztzwq6oKiNYrzrJ9V5LyRxYFhPznigTETUUpyADtes7QLOUqMephnKps/4BqD8S; 3:CJC5B6pvHO8pYTBCO1AUe6xI50CyBApl17iKVlVLz7tf6BAmMRwrgV8RSGnXdzAIDMQpWkW2PljV0d3YiEI/uJLmrLg41qJUkxuf/2r1eW5imqZzUQTVnvrv5qM0oDUN; 25:Gytl4szhNfLusOY5Jp34HUVfhS4yjY+7TZsQVuGAIIJVfwxEjhdyk0wrI7/Se1hzQ5S1XKODcEWmsiBcpEMW1xa+r+JXdQ4DLnNGAzlSUb2vTqOxpigD25oe4AuEvMElczhY2XSK6cWKRDxJ/GbTrtcBLnnMLlYhW2hP4CFI7j1AyWe6+NoO6FbzX+tGJmgsEcaHSbUAq5q6lS02+r5XJ1BEdQb+CSRBpTcisKgOZ/IeeLUZjwa6loXQnzGrcXeIQsyk1a7oZV9nqUR0JnR44x+JH2tJ7SaGihnlRtI0R0/xInF7owRqnFHvpSjWrfRn9+vlRo3tnf1Bn+Qlw5prHHtUJUSqDoG/28H8Ec4XT3nF32+AABvUb79vuHC/8tV1Bz1G+vWlBsAAfraO//mu974jczN5t1Jyt6b/hFOY/l8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SIXPR06MB0921; X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0921; 20:uZ3tYxbHRH7hdPmTOx8mo/w3/Y6F9B/QHVOmXPsYGJx7F1xC4XvxOVaCNmsp5ocmqGOOMVb8BPc4bLY7kXU2Vo4EnVBJnuhyaQG2Tg6ig6lvsd+N45hrOizs/OxbIdox2oA2ZyMeU4pAr5PkWWP8Ry/LEf7Si9bwR0sI8NGP28wfnILmOm1CCDLVNIna0DS86OLABm/iaDo1vwzWPJLyLs8H8t07NKNWX0O9OiaEylyNHrba+ewNwU6Z7DlmbUPgZ8FI+c3fMMLrqU6PqPdqJrTlxHAZKu6vJueDxlVe+UGZEooZ1Ls97bt5WA3ljzzd0GouJfAp8KrIk7wkuO2GUPjtey4T7YYp8ffExxZQYNb6Ffg/VluxOKziNPzoUWWqWy0pvUDz36Ipm7W6XeQ1QsbFb9wVSiTXEmB4cvLMfrThYedWI55fnj0azT9T16jtiCJAFILiz0DyPgHesfNp0D1purED8/xA6apni5k6Ww/nP/9zrmJyvTgS93tT1/Lv; 4:aalgpiKt5T5ff/oIZ7EDpz1iedlEWYlTDvKmgnN5sflURxJmJj8C6w9/uQKKk4l6QyUsYrMyj4HJgMoU+kebi8DeC0hVwa+nODkj0JNbMatxTmiwmvF4k3/6ZkrdSrswu9MYI+zG/JpkbepRdRFpX514nuevss9g3P+R4uw51SSkvKxfl/X4HGQvU+VbKfJmIWg3vpN7JjMeKXE0kOSo4I4ReLPWcSKcthxLPTmm/rkoYWMUoEFouP2VrLj1U3b+5PqsICZl+G8R88N+clR26PBlsj8MekDgTUHtSDk0+fQ2Da9WZesOF+evGyQ+o3PQsJFMAuSOQSxdEeESku6tXhpCFKLJGs40jt7pPOpzIgYMUibVLd5nS1YtewGl73977Io4sLsVuvblG1SAqpWOVQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:SIXPR06MB0921; BCL:0; PCL:0; RULEID:; SRVR:SIXPR06MB0921; X-Forefront-PRVS: 09860C2161 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(77096005)(110136002)(36756003)(42186005)(76506005)(107886002)(189998001)(5003940100001)(305945005)(7846002)(7736002)(92566002)(4001430100002)(78352004)(8676002)(81166006)(2351001)(2906002)(97736004)(101416001)(4326007)(81156014)(50226002)(33646002)(66066001)(68736007)(229853001)(47776003)(3846002)(105586002)(6116002)(230783001)(106356001)(50466002)(48376002)(19580405001)(19580395003)(586003)(50986999); DIR:OUT; SFP:1102; SCL:1; SRVR:SIXPR06MB0921; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; MX:0; A:0; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SIXPR06MB0921; 23:94olEjDpi8+9DSAMP5Gnwkq6cgdY7ALbUGz7Armf6?= =?us-ascii?Q?w/Pgh422nmy1iBmBjGTcckB3xfFhO64cTHIkAVTzMBmoOe+orE62ZtyZJE1N?= =?us-ascii?Q?j0j5HaNIN704sImfkzdftN9XgDXXsyypEOdUGk1yzgTZ9ZrvlE85mc8oXsJz?= =?us-ascii?Q?yjEsvAAz6tC1WwF/s5rojCGcEeO7bXkkaZ/dKRI6cXWATQmTanVYqztunyT4?= =?us-ascii?Q?U+KMhok2GnwxxfaMPyvFaZ27V5wt4s2ZGLwSVZc4Y2Xu10sBjM8s5wZ8PnxQ?= =?us-ascii?Q?mS2+aV2PxLXgMXL3sCITgwRuoI2snZ1NiXMTIpF9gS7W/fzNnlHyvSTi2SeW?= =?us-ascii?Q?l9dmBwgnylcQgSaBERGh3itKJVdfhcZr7DRTubuK9Y1XX3momW4m2nCLZFsX?= =?us-ascii?Q?rAmtbTzBt9DipS9vhC+5Bk/om8gks2bL0/N0UyLyqqcAVL2o9M1AXBJ6eirr?= =?us-ascii?Q?WODRnPraFULqRc+rKfVylDJSSWkS8XsTjINNPouZPZLlMfPMj/DbOwyuy1gj?= =?us-ascii?Q?hIFEGnDXsGmuTQJxi7ArTx4XCTBooqTN+2wX/Gi/dMk6WP39HqZ7ms3YrVPd?= =?us-ascii?Q?YtzdSYN2vAdq8br+d5nKTb1j2JaQLmztGHHQ0rJn9mXCNkstkllVL3dGi5jP?= =?us-ascii?Q?Ua4k+x9ugmplkdhEfw/Cy3f7BXD7oqdzR0xdFjSddjHdZUs4aDtw8kU4+MtF?= =?us-ascii?Q?FA5pJ/AmqVgUQrDpzTPOAsTxgabMb7R799m+DvZ7JDku0JaXlGn8sH0nOwyn?= =?us-ascii?Q?wOOjkPg7GWF9pW3+JDviwGeFfyaYoLSlUUD4ZqzwtSOFTGMyED2TY+xXvpHe?= =?us-ascii?Q?3oTTAkfAdR0zR5fEGhw0WE7aJKhRDdLmCWn9ImLS1SFiuS/4+OajQ5SDmEKd?= =?us-ascii?Q?4tVrYI4D8sNoWdozw2VO88yHpho7wwzQA3YGx0VcBUEK/ed0jApphR7XXsNL?= =?us-ascii?Q?dSYIx/fMWRQ8JpBnYWTAy94QIJKKJ35Ad40rd2urmuphkt5LF17B1UlQD52N?= =?us-ascii?Q?otD+wnCLoKSFQj39LkJuNsQlE8JVUxqLoNHTJhy9KiV8N8TU7UuM37+PHq4v?= =?us-ascii?Q?rrA2jHH03DsKUofbhmpa499y/2aXmXclnZMgGBD9vbUc7YRwXdxGLm86UwZ6?= =?us-ascii?Q?vdkLNU90b0hIHDXG7uTk86w8smfSsQu?= X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0921; 6:jggxc452gBtjdr4fN7/jthfXuvFLH8BdUsmtpDQjXKsMI9TMHPCYCNWYBFuGQQcTJaOaS8SljyLMQhM6je3BA9mLJFhkMeZB8uofnTiqX3P1X5QI0mzMEYTa+GMAtqofQ+xgwxQDSQlkAIgQnlfj9NeZRHEAK1sMIRwjno7pCZ39GgOgZLhVuzjFVZ4rfSHKf3Oj5pvNMWRkMs+DwgwDomTucM+zRsZCwVP1liPUs7Q0rD60ZOzDRhKpU4WB0wGHUyjAyVvnj5Il2+cyCwC1YFmEbtmnTypX30F+8RFxNn2GCRGb1J04sYr7v8qXwt1MGpbv1deBYrb83tiMT2uXn9zLshEI1SYIUXn4HyaAx8s=; 5:FHiWLoMsEa/vaoyKma50K8ZjLoxKh+rKIEzxqZA+5V+fBfSw5KAUKrxqeVzynW4V3DPyKTg6jBh36WCNhK3VjAva873vhLdqmhIIH1cBo//0MuY2I96+LJLtp8PqoqCBoTsi3MRex6jFpoSNYLtqIA==; 24:h8IVmp4OhNgClqn374U+/7zNp6MNjUAkKA6rWQhPTzhaN58X9iRm+9INvAQb1ruonqoY6A7DnAbrZ1HMxGn91TwPwLVsF7erv2dgpa/h1wE=; 7:HC8R9zEnVreZ2ZRlN6yq5+ywGEAXPLJcm1jf/ZAv5hA0aIVpqyOoZS7Rpn6Dg1zggDisxDyn/TC3mtu4NactCSXgvhM8Y25mLhK+JGVlTbdj7dURPRmPmgVuXcEXvkScBYkjz7Jh2ORtqkvOjWj26tG5a2luuIMgAlv/LTHX7lW0xBepNWChmYoV0ssDvBMOij9bMlZEngSQ9dWRV49XIy9F9TbPiuwwudSGaaqb0DTaAaUbkms5/Nfna85ogqBPzUYWvErdRCHV6o9lIyhVAA== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0921; 20:gxFNRGmRvwuSGG1/cwcPHDOO6GKSjWD1jv6fs36sXTOxBE5g/Y0zgqnjnDuooVV1R3upHHxY+SNrbc6gQjFLsEKIA9+9Q4DBexUSOnrHrimQEyh7TRrwQxzGKmcG1gKgeYmtlu13VdjlU4IS0EDwMAjGuA/3W6Fr5LUSwhjTJaY= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2016 06:37:03.3889 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SIXPR06MB0921 Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch fixes an issue that the extcon_set_cable_state_() is possible to cause "BUG: scheduling while atomic" because this driver calls extcon_set_cable_state_() in the interrupt handler and mutex_lock() is possible to be called by like the following call trace. So, this patch adds a workqueue function to resolve this issue. [ 9.706504] BUG: scheduling while atomic: systemd-journal/25893/0x00010303 [ 9.714569] Modules linked in: [ 9.717629] CPU: 0 PID: 25893 Comm: systemd-journal Not tainted 4.7.0-rc4+ #86 [ 9.724844] Hardware name: Renesas Salvator-X board based on r8a7795 (DT) [ 9.731624] Call trace: [ 9.734077] [] dump_backtrace+0x0/0x1a8 [ 9.739470] [] show_stack+0x14/0x20 [ 9.744520] [] dump_stack+0x94/0xb8 [ 9.749568] [] __schedule_bug+0x44/0x58 [ 9.754966] [] __schedule+0x4e4/0x598 [ 9.760185] [] schedule+0x3c/0xa8 [ 9.765057] [] schedule_preempt_disabled+0x20/0x38 [ 9.771408] [] mutex_optimistic_spin+0x18c/0x1d0 [ 9.777583] [] __mutex_lock_slowpath+0x38/0x140 [ 9.783669] [] mutex_lock+0x44/0x60 [ 9.788717] [] kobject_uevent_env+0x250/0x500 [ 9.794634] [] extcon_update_state+0x220/0x298 [ 9.800634] [] extcon_set_cable_state_+0x78/0x88 [ 9.806812] [] rcar_gen3_device_recognition+0x5c/0xe0 [ 9.813420] [] rcar_gen3_phy_usb2_irq+0x3c/0x48 [ 9.819509] [] handle_irq_event_percpu+0x94/0x140 [ 9.825769] [] handle_irq_event+0x48/0x78 [ 9.831334] [] handle_fasteoi_irq+0xb8/0x1b0 [ 9.837162] [] generic_handle_irq+0x24/0x38 [ 9.842900] [] __handle_domain_irq+0x5c/0xb8 [ 9.848727] [] gic_handle_irq+0x58/0xb0 Reported-by: Simon Horman Fixes: 2b38543c8db1 ("phy: rcar-gen3-usb2: add extcon support") Signed-off-by: Yoshihiro Shimoda --- drivers/phy/phy-rcar-gen3-usb2.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c index 4be3f5d..31156c9 100644 --- a/drivers/phy/phy-rcar-gen3-usb2.c +++ b/drivers/phy/phy-rcar-gen3-usb2.c @@ -21,6 +21,7 @@ #include #include #include +#include /******* USB2.0 Host registers (original offset is +0x200) *******/ #define USB2_INT_ENABLE 0x000 @@ -81,9 +82,25 @@ struct rcar_gen3_chan { struct extcon_dev *extcon; struct phy *phy; struct regulator *vbus; + struct work_struct work; + bool extcon_host; bool has_otg; }; +static void rcar_gen3_phy_usb2_work(struct work_struct *work) +{ + struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan, + work); + + if (ch->extcon_host) { + extcon_set_cable_state_(ch->extcon, EXTCON_USB_HOST, true); + extcon_set_cable_state_(ch->extcon, EXTCON_USB, false); + } else { + extcon_set_cable_state_(ch->extcon, EXTCON_USB_HOST, false); + extcon_set_cable_state_(ch->extcon, EXTCON_USB, true); + } +} + static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) { void __iomem *usb2_base = ch->base; @@ -130,8 +147,8 @@ static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch) rcar_gen3_set_host_mode(ch, 1); rcar_gen3_enable_vbus_ctrl(ch, 1); - extcon_set_cable_state_(ch->extcon, EXTCON_USB_HOST, true); - extcon_set_cable_state_(ch->extcon, EXTCON_USB, false); + ch->extcon_host = true; + schedule_work(&ch->work); } static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) @@ -140,8 +157,8 @@ static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) rcar_gen3_set_host_mode(ch, 0); rcar_gen3_enable_vbus_ctrl(ch, 0); - extcon_set_cable_state_(ch->extcon, EXTCON_USB_HOST, false); - extcon_set_cable_state_(ch->extcon, EXTCON_USB, true); + ch->extcon_host = false; + schedule_work(&ch->work); } static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) @@ -301,6 +318,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) if (irq >= 0) { int ret; + INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work); irq = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq, IRQF_SHARED, dev_name(dev), channel); if (irq < 0)