Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp2156272pxb; Sun, 17 Apr 2022 11:53:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXDZ035HLf2ujKlo59l+ELFkIlWYjddMFGY1lKmRb6+EqLr2mpyaTQHGFYhk0jvdc5tp/z X-Received: by 2002:a17:90b:3a8d:b0:1d2:80bf:d96f with SMTP id om13-20020a17090b3a8d00b001d280bfd96fmr4621163pjb.155.1650221622596; Sun, 17 Apr 2022 11:53:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650221622; cv=none; d=google.com; s=arc-20160816; b=Fpw66pANdb1AbNAQNnMlYWwgLCE8j53WHTwwD8CwU9lL86165wHwVS9LbQQODh4Fze N5t6n/RWBYRV7nOjRSlU7GUcGwuq4kGeV7FMkwJnA1gNw4scLO9Lvp4eXEUIogRa/5gM NUAy5tsXXp0Im+x6MbqmkBZ5W/su9Tr30JVMvM3b6crSWSDlvm4JRkdlp1JzfYN3f0bA RuQQVvnW3Ucq3H3uZH7aLuZWQIfu3Gtupe08rd7QGJRsdZd9pOyid+Hl2tfzPtpvLnSO BtUU/h7RtgQ/GHKuHfs401YpA2L9Db6KgWsOE2Yy5vuYy97UXml/UouvFCzUdoMp+jwo 567g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=zxCAVk6wn4hTO34h2TNh99qmsMRBe2us+aHWLGH1gpY=; b=H/HiWA7IPp7f4oY6l53eDrzV2VWYnwzisQUk7V2fP+d4uqn3DefkqB7YqRm8aJm8yl xD0XZW8DCrWFXG1znBt1NtsiWG0Q0UTBpjLQBEPwjM5hGQc9X837RtEHoCr26ZUCv2zN XdJ7p7jKlma3uHBaEJsDFl1TCKEr9yYbNTptN++oC/a81eg/Y+hZHsDmR1ahFxzDpwxP S2s0PVzKNW+6fRk/CHjoN6hbKgGg+yrIV4sYSzLaTc1zWXmZnTH5mOi2c3N9Yq+rADqj egXlD4EgUWHigkdQs4bzCHHgdPyEFMylFg+KlJKuobTE30kLr4KRarSZChrWbzfyj5L2 fvPQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g6-20020a056a0023c600b0050a766fdfafsi726295pfc.51.2022.04.17.11.53.26; Sun, 17 Apr 2022 11:53:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234013AbiDQMGF (ORCPT + 99 others); Sun, 17 Apr 2022 08:06:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232401AbiDQMGD (ORCPT ); Sun, 17 Apr 2022 08:06:03 -0400 Received: from zju.edu.cn (mail.zju.edu.cn [61.164.42.155]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BA7CC23BC7; Sun, 17 Apr 2022 05:03:26 -0700 (PDT) Received: from ubuntu.localdomain (unknown [10.15.192.164]) by mail-app2 (Coremail) with SMTP id by_KCgB3pMT6AVxihfvuAQ--.19863S2; Sun, 17 Apr 2022 20:03:12 +0800 (CST) From: Duoming Zhou To: linux-kernel@vger.kernel.org Cc: gregkh@linuxfoundation.org, davem@davemloft.net, alexander.deucher@amd.com, akpm@linux-foundation.org, broonie@kernel.org, linux-usb@vger.kernel.org, Duoming Zhou Subject: [PATCH] drivers: usb: host: Fix deadlock in oxu_bus_suspend() Date: Sun, 17 Apr 2022 20:03:05 +0800 Message-Id: <20220417120305.64577-1-duoming@zju.edu.cn> X-Mailer: git-send-email 2.17.1 X-CM-TRANSID: by_KCgB3pMT6AVxihfvuAQ--.19863S2 X-Coremail-Antispam: 1UD129KBjvJXoW7Gr1ftr4xWw1DXw43ArW5ZFb_yoW8JrW7pr 4qgryayr1Utr42gFyUCa1DZa4rGa1DW3yUCrW7G39xZ3W8XF45GF1vyrWFgF4aqFsrJwnI vF1Fq3y3CF4DCaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUk21xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s1l1IIY67AE w4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2 IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW0oVCq3wA2z4x0Y4vEx4A2 jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS0I0E0xvYzxvE52 x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWU GwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI4 8JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCF04k20xvY0x0EwIxGrwCF04k20xvE74AGY7Cv 6cx26r4fKr1UJr1l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGw C20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43MIIYrxkI7VAKI48J MIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMI IF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E 87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUoOJ5UUUUU X-CM-SenderInfo: qssqjiasttq6lmxovvfxof0/1tbiAgwDAVZdtZOglAAOsb X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is a deadlock in oxu_bus_suspend(), which is shown below: (Thread 1) | (Thread 2) | timer_action() oxu_bus_suspend() | mod_timer() spin_lock_irq() //(1) | (wait a time) ... | oxu_watchdog() del_timer_sync() | spin_lock_irq() //(2) (wait timer to stop) | ... We hold oxu->lock in position (1) of thread 1, and use del_timer_sync() to wait timer to stop, but timer handler also need oxu->lock in position (2) of thread 2. As a result, oxu_bus_suspend() will block forever. This patch extracts del_timer_sync() from the protection of spin_lock_irq(), which could let timer handler to obtain the needed lock. Signed-off-by: Duoming Zhou --- drivers/usb/host/oxu210hp-hcd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c index b741670525e..ee403df3309 100644 --- a/drivers/usb/host/oxu210hp-hcd.c +++ b/drivers/usb/host/oxu210hp-hcd.c @@ -3909,8 +3909,10 @@ static int oxu_bus_suspend(struct usb_hcd *hcd) } } + spin_unlock_irq(&oxu->lock); /* turn off now-idle HC */ del_timer_sync(&oxu->watchdog); + spin_lock_irq(&oxu->lock); ehci_halt(oxu); hcd->state = HC_STATE_SUSPENDED; -- 2.17.1