Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp365858ybl; Thu, 9 Jan 2020 23:38:04 -0800 (PST) X-Google-Smtp-Source: APXvYqyGTxGwjiVYQ49zrL8ZA4eCjOkdK+8R8pLT7HX/TGLZk2pXYep+XbUdCJFLOq5TWDiBKrVH X-Received: by 2002:a9d:6f07:: with SMTP id n7mr1479965otq.112.1578641884021; Thu, 09 Jan 2020 23:38:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578641884; cv=none; d=google.com; s=arc-20160816; b=bI5FkoVRd/9aE58HTNJU5T7wY4QaRsTgwkQVkTErVF4Z6yvORn6J/qGJabVEPE5yhz bTzlQmAH1uizpBUXoFeuOcUt0zoSXTtdHVFRUg77DcxKewwJoSKpV9mTJxPh2EHcmY3z /F+raz0gORub0lYM/3JhBiKcz0nr5DeFiCw9N4sjyZPTmWOJLqKVjrnXLrTD1TKOCHzf 3f599PuQP2EgrXAKQCwgW7LKKiwm9MrITdZe7/pXeG39p4U951KvqSWNhAitSVT6ISrv esgJyCoj8xqaRHQ8Z68ltCPAbKBYy9+svT4nvwPJYiZaObNLyn8BKP0r2yubrWw5ySLz k55g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=VkFahSTywvqn5j5X/7juimxnMuGVeAK18BGmio6HoZw=; b=gU0+k+032VP5mqJz6f/obL7R2q4IfRP6DF/YZPIusuj+0k5dLOatFvoKPGl1f9Rkj7 NABeaGsKZ8wyIKQ0XtgfBFt4xMPTqIezNgOfzvZl4P0tJK3Bhim1yKb2Sb7S42KImNmY TPcBM6SI9x9iAOJh/vN9iGO3a8klZBZU6+A2FK+Q/1uLOlw5QQYBe0QDoTKBEevqiakq GsFUEoei2/CDZPUj3zEf3lzqR3fp4wRdFo0Dmpk0515b24fnShM7d87gOzEbJEJ9azc8 OK1OK4UU1490Jwl4X72nGmUGnxpykQsVXn6odwVQBlMvrOdz6dQw4HO8/kZrKyTLzuN+ rxdQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c19si773168otn.7.2020.01.09.23.37.52; Thu, 09 Jan 2020 23:38:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726697AbgAJHfy (ORCPT + 99 others); Fri, 10 Jan 2020 02:35:54 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:41897 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726401AbgAJHfx (ORCPT ); Fri, 10 Jan 2020 02:35:53 -0500 Received: from mail-ot1-f69.google.com ([209.85.210.69]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1ipopj-0001Jw-R5 for linux-kernel@vger.kernel.org; Fri, 10 Jan 2020 07:35:52 +0000 Received: by mail-ot1-f69.google.com with SMTP id 73so538732otj.10 for ; Thu, 09 Jan 2020 23:35:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=VkFahSTywvqn5j5X/7juimxnMuGVeAK18BGmio6HoZw=; b=Nd8TfAOT6qvIoIhpODSKxl17t+p9YOubCFyjR67fNE0G6r/DpV6DqykWlQiuf3KOQT C2e/PGYoXw0MFpeHZm6LcrQyOqQMHCN7lKk7GfhW/a9SV1S5EPqRNpofufTAk1QNOS5K IuNvLjC/mU++8KlMEX4WWZCFlo3E2MprTm1iUJhM2DE2S4Jderry3ck77mqdhXyMZjNI qzJrIXH1L8brKcED5a2YWfUa50aTZLEhzjaXs9FGfvUUbBwVjdXgghOi2g8vk3GJ+7l/ dgtn5Mq3GTbAaLjAYYgzXaJjsLR9GpcI4jUlvWjBxBt6770Ovi9frBfK4jX9zafuRNUN 3BLQ== X-Gm-Message-State: APjAAAWvKMMSJuA+RfVsPhL3HXXf83rOeuh0+Ipi8ly3nBNUAUmirerv SF6u5e2v6Zus/OKYzhad9ZPtTYPrWT9ARQK5yD2XfpavIUDdt5Pm9vsjrfI8/1VBOkgqX6Ae3eR GXXOv5zSLQ5cEiy522Cm4nP+C5athiLW0H3uRpAuhP5dKy4l44XuD3lmOPg== X-Received: by 2002:aca:2419:: with SMTP id n25mr1229246oic.13.1578641750557; Thu, 09 Jan 2020 23:35:50 -0800 (PST) X-Received: by 2002:aca:2419:: with SMTP id n25mr1229235oic.13.1578641750299; Thu, 09 Jan 2020 23:35:50 -0800 (PST) MIME-Version: 1.0 References: <90B37743-30D1-41BB-8272-D5FBDC89C88F@canonical.com> In-Reply-To: From: Kai-Heng Feng Date: Fri, 10 Jan 2020 15:35:39 +0800 Message-ID: Subject: Re: [PATCH 3/3] USB: Disable LPM on WD19's Realtek Hub during setting its ports to U0 To: Alan Stern Cc: Mathias Nyman , Greg Kroah-Hartman , AceLan Kao , USB list , LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 6, 2020 at 11:08 PM Alan Stern wrote: > > On Mon, 6 Jan 2020, Kai-Heng Feng wrote: > > > > On Jan 5, 2020, at 00:20, Alan Stern wrote: > > > > > > On Sat, 4 Jan 2020, Kai-Heng Feng wrote: > > > > > >>>>>> @@ -3533,9 +3533,17 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg) > > >>>>>> } > > >>>>>> > > >>>>>> /* see 7.1.7.7; affects power usage, but not budgeting */ > > >>>>>> - if (hub_is_superspeed(hub->hdev)) > > >>>>>> + if (hub_is_superspeed(hub->hdev)) { > > >>>>>> + if (hub->hdev->quirks & USB_QUIRK_DISABLE_LPM_ON_U0) { > > >>>>>> + usb_lock_device(hub->hdev); > > >>>>>> + usb_unlocked_disable_lpm(hub->hdev); > > >>>>>> + } > > >>>>>> status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0); > > >>>>>> - else > > >>>>>> + if (hub->hdev->quirks & USB_QUIRK_DISABLE_LPM_ON_U0) { > > >>>>>> + usb_unlocked_enable_lpm(hub->hdev); > > >>>>>> + usb_unlock_device(hub->hdev); > > >>>>> > > >>>>> The locking here seems questionable. Doesn't this code sometimes get > > >>>>> called with the hub already locked? Or with the child device locked > > >>>>> (in which case locking the hub would violate the normal locking order: > > >>>>> parent first, child second)? > > >>> > > >>> I did a little checking. In many cases the child device _will_ be > > >>> locked at this point. > > >>> > > >>>> Maybe introduce a new lock? The lock however will only be used by this specific hub. > > >>>> But I still want the LPM can be enabled for this hub. > > >>> > > >>> Do you really need to lock the hub at all? What would the lock protect > > >>> against? > > >> > > >> There can be multiple usb_port_resume() run at the same time for different ports, so this is to prevent LPM enable/disable race. > > > > > > But there can't really be an LPM enable/disable race, can there? The > > > individual function calls are protected by the bandwidth mutex taken by > > > the usb_unlocked_{en|dis}able_lpm routines, and the overall LPM setting > > > is controlled by the hub device's lpm_disable_counter. > > > > For enable/disable LPM itself, there's no race. > > But the lock here is to protect hub_set_port_link_state(). > > If we don't lock the hub, other instances of usb_port_resume() > > routine can enable LPM and we want the LPM stays disabled until > > hub_set_port_link_state() is done. > > That's what I was trying to explain above. Other instances of > usb_port_resume() _can't_ enable LPM while this instance is running, > because the lpm_disable_counter value will be > 0. Yes you are right, there's actually no race. The hub is still a bit flaky with this approach, so I'll resend a v2 to simply disable LPM for this hub. Kai-Heng > > Alan Stern >