Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp18780464ybl; Fri, 3 Jan 2020 08:55:09 -0800 (PST) X-Google-Smtp-Source: APXvYqzOum2j+koAXtoL0RgL//sFHomnxA2rb5e2MPxSZqXcFWC1q0UH3iCUsqeZ8xYza2Uaq539 X-Received: by 2002:aca:bd84:: with SMTP id n126mr4463539oif.99.1578070509250; Fri, 03 Jan 2020 08:55:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578070509; cv=none; d=google.com; s=arc-20160816; b=i0TQolsTCWJ76gDUY0/0Fq6NihzC8ALuB9mOAisGkAS4X3lOK37lusLY6ZW4/CNY1w AEGD6kVgRUqEKm7pVepOVhboG/pHRB3xh7Sw19mPw2HK6ljjGQgyA1aIKZWW0xHz048s 7+ds2k7xsnxlAZM6NIhDHSsMbhjRBmxwJjfarntihEmYHw0vjfFzdBhndjAI78AEyWd7 3GI9PVPHRLcf98Yi/TA5oDRMsrudd8b0il9EhX4eT+hJt8rQBHexlgEzOIKA6PCu5jg2 P3E99Cxuoxdmk8PUu+C581EWS93dWZMm9tpfT6bmIlYfxiaNZ+WfZllJa0zGB8ByQeiu Xu6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:in-reply-to :subject:cc:to:from:date; bh=OAqG1/LGFumTcpg9lpFZ5o4XSSN6hIcoWvA1JWwJuAg=; b=kTYp2uveq/RsExCJvgU4dmw8lgbsnv2K2Z4SD8sQYZnfvSOZUeNQtLU3+aHk6vny+Y T0w+z+2Dl7TfQBW52rAQpp5zmL5E6QmPl1T6QKqnCm8gRYrgjsbTzovsQEKlSa3YfecQ 8scaJLIaDP0t69FFw53t2sjrhCzAidryQXTC0KUpI6VacPFxFzQjxx2jnZq8EM5I3R5q DAJyvPJ/5f97GwMW+gf1eLAKuBekv1q3egBSWsZWaP+YaQGHTqf4d0hdEr97RKpL8DQl aMAW/AolAYteD85eJ9XIp2qXDRatWNhTxSGObElGxYxxA5zqL720ChRnKeogqBsSJ+Ii 6xBQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k13si27884962oij.118.2020.01.03.08.54.56; Fri, 03 Jan 2020 08:55:09 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728103AbgACQyG (ORCPT + 99 others); Fri, 3 Jan 2020 11:54:06 -0500 Received: from iolanthe.rowland.org ([192.131.102.54]:34942 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1728040AbgACQyG (ORCPT ); Fri, 3 Jan 2020 11:54:06 -0500 Received: (qmail 5175 invoked by uid 2102); 3 Jan 2020 11:54:05 -0500 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 3 Jan 2020 11:54:05 -0500 Date: Fri, 3 Jan 2020 11:54:05 -0500 (EST) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Kai-Heng Feng cc: Mathias Nyman , , , , Subject: Re: [PATCH 3/3] USB: Disable LPM on WD19's Realtek Hub during setting its ports to U0 In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 4 Jan 2020, Kai-Heng Feng wrote: > Hi Alan, > > > On Jan 3, 2020, at 23:21, Alan Stern wrote: > > > > On Fri, 3 Jan 2020, Kai-Heng Feng wrote: > > > >> Realtek Hub (0bda:0x0487) used in Dell Dock WD19 sometimes drops off the > >> bus when bringing underlying ports from U3 to U0. > >> > >> After some expirements and guessworks, the hub itself needs to be U0 > >> during setting its port's link state back to U0. > >> > >> So add a new quirk to let the hub disables LPM on setting U0 for its > >> downstream facing ports. > >> > >> Signed-off-by: Kai-Heng Feng > >> --- > >> drivers/usb/core/hub.c | 12 ++++++++++-- > >> drivers/usb/core/quirks.c | 7 +++++++ > >> include/linux/usb/quirks.h | 3 +++ > >> 3 files changed, 20 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > >> index f229ad6952c0..35a035781c5a 100644 > >> --- a/drivers/usb/core/hub.c > >> +++ b/drivers/usb/core/hub.c > >> @@ -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? Alan Stern