linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	You-Sheng Yang <vicamo.yang@canonical.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.4 02/93] r8152: check disconnect status after long sleep
Date: Thu, 19 Mar 2020 13:59:06 +0100	[thread overview]
Message-ID: <20200319123925.488274849@linuxfoundation.org> (raw)
In-Reply-To: <20200319123924.795019515@linuxfoundation.org>

From: You-Sheng Yang <vicamo.yang@canonical.com>

[ Upstream commit d64c7a08034b32c285e576208ae44fc3ba3fa7df ]

Dell USB Type C docking WD19/WD19DC attaches additional peripherals as:

  /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
      |__ Port 1: Dev 11, If 0, Class=Hub, Driver=hub/4p, 5000M
          |__ Port 3: Dev 12, If 0, Class=Hub, Driver=hub/4p, 5000M
          |__ Port 4: Dev 13, If 0, Class=Vendor Specific Class,
              Driver=r8152, 5000M

where usb 2-1-3 is a hub connecting all USB Type-A/C ports on the dock.

When hotplugging such dock with additional usb devices already attached on
it, the probing process may reset usb 2.1 port, therefore r8152 ethernet
device is also reset. However, during r8152 device init there are several
for-loops that, when it's unable to retrieve hardware registers due to
being disconnected from USB, may take up to 14 seconds each in practice,
and that has to be completed before USB may re-enumerate devices on the
bus. As a result, devices attached to the dock will only be available
after nearly 1 minute after the dock was plugged in:

  [ 216.388290] [250] r8152 2-1.4:1.0: usb_probe_interface
  [ 216.388292] [250] r8152 2-1.4:1.0: usb_probe_interface - got id
  [ 258.830410] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): PHY not ready
  [ 258.830460] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): Invalid header when reading pass-thru MAC addr
  [ 258.830464] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): Get ether addr fail

This happens in, for example, r8153_init:

  static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
			    void *data, u16 type)
  {
    if (test_bit(RTL8152_UNPLUG, &tp->flags))
      return -ENODEV;
    ...
  }

  static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
  {
    u32 data;
    ...
    generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen);

    data = __le32_to_cpu(tmp);
    ...
    return (u16)data;
  }

  static void r8153_init(struct r8152 *tp)
  {
    ...
    if (test_bit(RTL8152_UNPLUG, &tp->flags))
      return;

    for (i = 0; i < 500; i++) {
      if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
          AUTOLOAD_DONE)
        break;
      msleep(20);
    }
    ...
  }

Since ocp_read_word() doesn't check the return status of
generic_ocp_read(), and the only exit condition for the loop is to have
a match in the returned value, such loops will only ends after exceeding
its maximum runs when the device has been marked as disconnected, which
takes 500 * 20ms = 10 seconds in theory, 14 in practice.

To solve this long latency another test to RTL8152_UNPLUG flag should be
added after those 20ms sleep to skip unnecessary loops, so that the device
probe can complete early and proceed to parent port reset/reprobe process.

This can be reproduced on all kernel versions up to latest v5.6-rc2, but
after v5.5-rc7 the reproduce rate is dramatically lowered to 1/30 or less
while it was around 1/2.

Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/usb/r8152.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -3328,14 +3328,20 @@ static void r8153_init(struct r8152 *tp)
 		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
 		    AUTOLOAD_DONE)
 			break;
+
 		msleep(20);
+		if (test_bit(RTL8152_UNPLUG, &tp->flags))
+			break;
 	}
 
 	for (i = 0; i < 500; i++) {
 		ocp_data = ocp_reg_read(tp, OCP_PHY_STATUS) & PHY_STAT_MASK;
 		if (ocp_data == PHY_STAT_LAN_ON || ocp_data == PHY_STAT_PWRDN)
 			break;
+
 		msleep(20);
+		if (test_bit(RTL8152_UNPLUG, &tp->flags))
+			break;
 	}
 
 	usb_disable_lpm(tp->udev);



  parent reply	other threads:[~2020-03-19 13:05 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-19 12:59 [PATCH 4.4 00/93] 4.4.217-rc1 review Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 01/93] NFS: Remove superfluous kmap in nfs_readdir_xdr_to_array Greg Kroah-Hartman
2020-03-19 12:59 ` Greg Kroah-Hartman [this message]
2020-03-19 12:59 ` [PATCH 4.4 03/93] net: nfc: fix bounds checking bugs on "pipe" Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 04/93] bnxt_en: reinitialize IRQs when MTU is modified Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 05/93] fib: add missing attribute validation for tun_id Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 06/93] nl802154: add missing attribute validation Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 07/93] nl802154: add missing attribute validation for dev_type Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 08/93] team: add missing attribute validation for port ifindex Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 09/93] team: add missing attribute validation for array index Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 10/93] nfc: add missing attribute validation for SE API Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 11/93] nfc: add missing attribute validation for vendor subcommand Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 12/93] ipvlan: add cond_resched_rcu() while processing muticast backlog Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 13/93] ipvlan: do not add hardware address of master to its unicast filter list Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 14/93] ipvlan: egress mcast packets are not exceptional Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 15/93] ipvlan: do not use cond_resched_rcu() in ipvlan_process_multicast() Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 16/93] ipvlan: dont deref eth hdr before checking its set Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 17/93] macvlan: add cond_resched() during multicast processing Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 18/93] net: fec: validate the new settings in fec_enet_set_coalesce() Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 19/93] slip: make slhc_compress() more robust against malicious packets Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 20/93] bonding/alb: make sure arp header is pulled before accessing it Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 21/93] net: fq: add missing attribute validation for orphan mask Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 22/93] iommu/vt-d: quirk_ioat_snb_local_iommu: replace WARN_TAINT with pr_warn + add_taint Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 23/93] drm/amd/display: remove duplicated assignment to grph_obj_type Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 24/93] gfs2_atomic_open(): fix O_EXCL|O_CREAT handling on cold dcache Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 25/93] KVM: x86: clear stale x86_emulate_ctxt->intercept value Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 26/93] ARC: define __ALIGN_STR and __ALIGN symbols for ARC Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 27/93] efi: Fix a race and a buffer overflow while reading efivars via sysfs Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 28/93] iommu/vt-d: dmar: replace WARN_TAINT with pr_warn + add_taint Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 29/93] iommu/vt-d: Fix a bug in intel_iommu_iova_to_phys() for huge page Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 30/93] nl80211: add missing attribute validation for critical protocol indication Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 31/93] nl80211: add missing attribute validation for channel switch Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 32/93] netfilter: cthelper: add missing attribute validation for cthelper Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 33/93] iommu/vt-d: Fix the wrong printing in RHSA parsing Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 34/93] iommu/vt-d: Ignore devices with out-of-spec domain number Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 35/93] mwifiex: Fix heap overflow in mmwifiex_process_tdls_action_frame() Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 36/93] ipv6: restrict IPV6_ADDRFORM operation Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 37/93] efi: Add a sanity check to efivar_store_raw() Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 38/93] batman-adv: Fix invalid read while copying bat_iv.bcast_own Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 39/93] batman-adv: Only put gw_node list reference when removed Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 40/93] batman-adv: Only put orig_node_vlan " Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 41/93] batman-adv: Avoid endless loop in bat-on-bat netdevice check Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 42/93] batman-adv: Fix unexpected free of bcast_own on add_if error Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 43/93] batman-adv: Fix integer overflow in batadv_iv_ogm_calc_tq Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 44/93] batman-adv: init neigh node last seen field Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 45/93] batman-adv: Deactivate TO_BE_ACTIVATED hardif on shutdown Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 46/93] batman-adv: Drop reference to netdevice on last reference Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 47/93] batman-adv: Fix reference counting of vlan object for tt_local_entry Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 48/93] batman-adv: Avoid duplicate neigh_node additions Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 49/93] batman-adv: fix skb deref after free Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 50/93] batman-adv: Fix use-after-free/double-free of tt_req_node Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 51/93] batman-adv: Fix ICMP RR ethernet access after skb_linearize Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 52/93] batman-adv: Clean up untagged vlan when destroying via rtnl-link Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 53/93] batman-adv: Avoid nullptr dereference in bla after vlan_insert_tag Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 54/93] batman-adv: Avoid nullptr dereference in dat " Greg Kroah-Hartman
2020-03-19 12:59 ` [PATCH 4.4 55/93] batman-adv: Fix orig_node_vlan leak on orig_node_release Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 56/93] batman-adv: lock crc access in bridge loop avoidance Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 57/93] batman-adv: Fix non-atomic bla_claim::backbone_gw access Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 58/93] batman-adv: Fix reference leak in batadv_find_router Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 59/93] batman-adv: Free last_bonding_candidate on release of orig_node Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 60/93] batman-adv: Fix speedy join in gateway client mode Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 61/93] batman-adv: Add missing refcnt for last_candidate Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 62/93] batman-adv: Fix double free during fragment merge error Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 63/93] batman-adv: Fix transmission of final, 16th fragment Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 64/93] batman-adv: Fix rx packet/bytes stats on local ARP reply Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 65/93] batman-adv: fix TT sync flag inconsistencies Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 66/93] batman-adv: Fix lock for ogm cnt access in batadv_iv_ogm_calc_tq Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 67/93] batman-adv: Fix internal interface indices types Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 68/93] batman-adv: update data pointers after skb_cow() Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 69/93] batman-adv: Fix skbuff rcsum on packet reroute Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 70/93] batman-adv: Avoid race in TT TVLV allocator helper Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 71/93] batman-adv: Fix TT sync flags for intermediate TT responses Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 72/93] batman-adv: prevent TT request storms by not sending inconsistent TT TLVLs Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 73/93] batman-adv: Fix debugfs path for renamed hardif Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 74/93] batman-adv: Fix debugfs path for renamed softif Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 75/93] batman-adv: Avoid storing non-TT-sync flags on singular entries too Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 76/93] batman-adv: Prevent duplicated gateway_node entry Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 77/93] batman-adv: Prevent duplicated nc_node entry Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 78/93] batman-adv: Prevent duplicated global TT entry Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 79/93] batman-adv: Prevent duplicated tvlv handler Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 80/93] batman-adv: Reduce claim hash refcnt only for removed entry Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 81/93] batman-adv: Reduce tt_local " Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 82/93] batman-adv: Reduce tt_global " Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 83/93] batman-adv: Only read OGM tvlv_len after buffer len check Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 84/93] batman-adv: Avoid free/alloc race when handling OGM buffer Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 85/93] batman-adv: Dont schedule OGM for disabled interface Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 86/93] perf/amd/uncore: Replace manual sampling check with CAP_NO_INTERRUPT flag Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 87/93] net: ks8851-ml: Fix IRQ handling and locking Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 88/93] signal: avoid double atomic counter increments for user accounting Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 89/93] jbd2: fix data races at struct journal_head Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 90/93] ARM: 8957/1: VDSO: Match ARMv8 timer in cntvct_functional() Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 91/93] ARM: 8958/1: rename missed uaccess .fixup section Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 92/93] mm: slub: add missing TID bump in kmem_cache_alloc_bulk() Greg Kroah-Hartman
2020-03-19 13:00 ` [PATCH 4.4 93/93] ipv4: ensure rcu_read_lock() in cipso_v4_error() Greg Kroah-Hartman
2020-03-19 23:35 ` [PATCH 4.4 00/93] 4.4.217-rc1 review Guenter Roeck
2020-03-20 20:54 ` Chris Paterson
2020-03-21  0:50 ` shuah
2020-03-21  7:12   ` Greg Kroah-Hartman
2020-03-21  4:01 ` Naresh Kamboju
2020-03-21  7:12   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200319123925.488274849@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=vicamo.yang@canonical.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).