CC: [email protected] BCC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Ray Chi <[email protected]> TO: [email protected] TO: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: Ray Chi <[email protected]>
Hi Ray, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on usb/usb-testing] [also build test WARNING on linus/master v5.19-rc2 next-20220617] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Ray-Chi/USB-hub-add-module-parameters-to-usbcore-for-port-init-retries/20220617-182442 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: parisc-randconfig-m031-20220619 (https://download.01.org/0day-ci/archive/20220619/[email protected]/config) compiler: hppa-linux-gcc (GCC) 11.3.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/usb/core/hub.c:3061 hub_port_reset() error: uninitialized symbol 'status'. vim +/status +3061 drivers/usb/core/hub.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 2955 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2956 /* Handle port reset and port warm(BH) reset (for USB3 protocol ports) */ 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2957 static int hub_port_reset(struct usb_hub *hub, int port1, 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2958 struct usb_device *udev, unsigned int delay, bool warm) 5e467f6ebab151 Andiry Xu 2011-04-27 2959 { 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2960 int i, status; a24a6078754f28 Sarah Sharp 2012-11-01 2961 u16 portchange, portstatus; d99f6b41308779 Dan Williams 2014-05-20 2962 struct usb_port *port_dev = hub->ports[port1 - 1]; 781f0766cc41a9 Kai-Heng Feng 2018-10-19 2963 int reset_recovery_time; 5e467f6ebab151 Andiry Xu 2011-04-27 2964 5e467f6ebab151 Andiry Xu 2011-04-27 2965 if (!hub_is_superspeed(hub->hdev)) { 0fe51aa5eee51d Sarah Sharp 2012-11-01 2966 if (warm) { 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2967 dev_err(hub->intfdev, "only USB3 hub support " 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2968 "warm reset\n"); 5e467f6ebab151 Andiry Xu 2011-04-27 2969 return -EINVAL; 5e467f6ebab151 Andiry Xu 2011-04-27 2970 } 0fe51aa5eee51d Sarah Sharp 2012-11-01 2971 /* Block EHCI CF initialization during the port reset. 0fe51aa5eee51d Sarah Sharp 2012-11-01 2972 * Some companion controllers don't like it when they mix. 0fe51aa5eee51d Sarah Sharp 2012-11-01 2973 */ 0fe51aa5eee51d Sarah Sharp 2012-11-01 2974 down_read(&ehci_cf_port_reset_rwsem); d3b9d7a9051d70 Sarah Sharp 2012-11-01 2975 } else if (!warm) { d3b9d7a9051d70 Sarah Sharp 2012-11-01 2976 /* d3b9d7a9051d70 Sarah Sharp 2012-11-01 2977 * If the caller hasn't explicitly requested a warm reset, d3b9d7a9051d70 Sarah Sharp 2012-11-01 2978 * double check and see if one is needed. d3b9d7a9051d70 Sarah Sharp 2012-11-01 2979 */ f061f43d7418cb Michael Grzeschik 2022-06-07 2980 if (usb_hub_port_status(hub, port1, &portstatus, f061f43d7418cb Michael Grzeschik 2022-06-07 2981 &portchange) == 0) fb6d1f7df5d252 Robert Schlabbach 2015-05-26 2982 if (hub_port_warm_reset_required(hub, port1, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 2983 portstatus)) d3b9d7a9051d70 Sarah Sharp 2012-11-01 2984 warm = true; 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2985 } 3cd12f91514da6 Dan Williams 2014-05-29 2986 clear_bit(port1, hub->warm_reset_bits); 5e467f6ebab151 Andiry Xu 2011-04-27 2987 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2988 /* Reset the port */ 079a8b75b95ac4 Ray Chi 2022-06-17 2989 for (i = 0; i < port_reset_tries; i++) { 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2990 status = set_port_feature(hub->hdev, port1, (warm ? 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2991 USB_PORT_FEAT_BH_PORT_RESET : 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2992 USB_PORT_FEAT_RESET)); e9e88fb7bca9f5 Alan Stern 2013-03-27 2993 if (status == -ENODEV) { e9e88fb7bca9f5 Alan Stern 2013-03-27 2994 ; /* The hub is gone */ e9e88fb7bca9f5 Alan Stern 2013-03-27 2995 } else if (status) { d99f6b41308779 Dan Williams 2014-05-20 2996 dev_err(&port_dev->dev, d99f6b41308779 Dan Williams 2014-05-20 2997 "cannot %sreset (err = %d)\n", d99f6b41308779 Dan Williams 2014-05-20 2998 warm ? "warm " : "", status); 75d7cf72ab9fa0 Andiry Xu 2011-09-13 2999 } else { 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3000 status = hub_port_wait_reset(hub, port1, udev, delay, 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3001 warm); e9e88fb7bca9f5 Alan Stern 2013-03-27 3002 if (status && status != -ENOTCONN && status != -ENODEV) 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3003 dev_dbg(hub->intfdev, 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3004 "port_wait_reset: err = %d\n", 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3005 status); 5e467f6ebab151 Andiry Xu 2011-04-27 3006 } 5e467f6ebab151 Andiry Xu 2011-04-27 3007 c89686118c786a Kai-Heng Feng 2022-01-20 3008 /* c89686118c786a Kai-Heng Feng 2022-01-20 3009 * Check for disconnect or reset, and bail out after several c89686118c786a Kai-Heng Feng 2022-01-20 3010 * reset attempts to avoid warm reset loop. c89686118c786a Kai-Heng Feng 2022-01-20 3011 */ c89686118c786a Kai-Heng Feng 2022-01-20 3012 if (status == 0 || status == -ENOTCONN || status == -ENODEV || 079a8b75b95ac4 Ray Chi 2022-06-17 3013 (status == -EBUSY && i == port_reset_tries - 1)) { fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3014 usb_clear_port_feature(hub->hdev, port1, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3015 USB_PORT_FEAT_C_RESET); a24a6078754f28 Sarah Sharp 2012-11-01 3016 a24a6078754f28 Sarah Sharp 2012-11-01 3017 if (!hub_is_superspeed(hub->hdev)) 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3018 goto done; a24a6078754f28 Sarah Sharp 2012-11-01 3019 fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3020 usb_clear_port_feature(hub->hdev, port1, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3021 USB_PORT_FEAT_C_BH_PORT_RESET); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3022 usb_clear_port_feature(hub->hdev, port1, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3023 USB_PORT_FEAT_C_PORT_LINK_STATE); 22454b79e6de05 Dennis Wassenberg 2018-11-13 3024 22454b79e6de05 Dennis Wassenberg 2018-11-13 3025 if (udev) fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3026 usb_clear_port_feature(hub->hdev, port1, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3027 USB_PORT_FEAT_C_CONNECTION); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3028 a24a6078754f28 Sarah Sharp 2012-11-01 3029 /* a24a6078754f28 Sarah Sharp 2012-11-01 3030 * If a USB 3.0 device migrates from reset to an error a24a6078754f28 Sarah Sharp 2012-11-01 3031 * state, re-issue the warm reset. a24a6078754f28 Sarah Sharp 2012-11-01 3032 */ f061f43d7418cb Michael Grzeschik 2022-06-07 3033 if (usb_hub_port_status(hub, port1, a24a6078754f28 Sarah Sharp 2012-11-01 3034 &portstatus, &portchange) < 0) a24a6078754f28 Sarah Sharp 2012-11-01 3035 goto done; a24a6078754f28 Sarah Sharp 2012-11-01 3036 3cd12f91514da6 Dan Williams 2014-05-29 3037 if (!hub_port_warm_reset_required(hub, port1, 3cd12f91514da6 Dan Williams 2014-05-29 3038 portstatus)) a24a6078754f28 Sarah Sharp 2012-11-01 3039 goto done; a24a6078754f28 Sarah Sharp 2012-11-01 3040 a24a6078754f28 Sarah Sharp 2012-11-01 3041 /* a24a6078754f28 Sarah Sharp 2012-11-01 3042 * If the port is in SS.Inactive or Compliance Mode, the a24a6078754f28 Sarah Sharp 2012-11-01 3043 * hot or warm reset failed. Try another warm reset. a24a6078754f28 Sarah Sharp 2012-11-01 3044 */ a24a6078754f28 Sarah Sharp 2012-11-01 3045 if (!warm) { d99f6b41308779 Dan Williams 2014-05-20 3046 dev_dbg(&port_dev->dev, d99f6b41308779 Dan Williams 2014-05-20 3047 "hot reset failed, warm reset\n"); a24a6078754f28 Sarah Sharp 2012-11-01 3048 warm = true; a24a6078754f28 Sarah Sharp 2012-11-01 3049 } 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3050 } 5e467f6ebab151 Andiry Xu 2011-04-27 3051 d99f6b41308779 Dan Williams 2014-05-20 3052 dev_dbg(&port_dev->dev, d99f6b41308779 Dan Williams 2014-05-20 3053 "not enabled, trying %sreset again...\n", d99f6b41308779 Dan Williams 2014-05-20 3054 warm ? "warm " : ""); 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3055 delay = HUB_LONG_RESET_TIME; 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3056 } 5e467f6ebab151 Andiry Xu 2011-04-27 3057 d99f6b41308779 Dan Williams 2014-05-20 3058 dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n"); 5e467f6ebab151 Andiry Xu 2011-04-27 3059 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3060 done: fb6d1f7df5d252 Robert Schlabbach 2015-05-26 @3061 if (status == 0) { aa071a92bbf09d Nicolas Boichat 2018-05-28 3062 if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM) aa071a92bbf09d Nicolas Boichat 2018-05-28 3063 usleep_range(10000, 12000); 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3064 else { 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3065 /* TRSTRCY = 10 ms; plus some extra */ 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3066 reset_recovery_time = 10 + 40; 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3067 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3068 /* Hub needs extra delay after resetting its port. */ 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3069 if (hub->hdev->quirks & USB_QUIRK_HUB_SLOW_RESET) 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3070 reset_recovery_time += 100; 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3071 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3072 msleep(reset_recovery_time); 781f0766cc41a9 Kai-Heng Feng 2018-10-19 3073 } aa071a92bbf09d Nicolas Boichat 2018-05-28 3074 fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3075 if (udev) { fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3076 struct usb_hcd *hcd = bus_to_hcd(udev->bus); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3077 fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3078 update_devnum(udev, 0); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3079 /* The xHC may think the device is already reset, fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3080 * so ignore the status. fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3081 */ fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3082 if (hcd->driver->reset_device) fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3083 hcd->driver->reset_device(hcd, udev); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3084 fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3085 usb_set_device_state(udev, USB_STATE_DEFAULT); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3086 } fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3087 } else { fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3088 if (udev) fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3089 usb_set_device_state(udev, USB_STATE_NOTATTACHED); fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3090 } fb6d1f7df5d252 Robert Schlabbach 2015-05-26 3091 0fe51aa5eee51d Sarah Sharp 2012-11-01 3092 if (!hub_is_superspeed(hub->hdev)) 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3093 up_read(&ehci_cf_port_reset_rwsem); 5e467f6ebab151 Andiry Xu 2011-04-27 3094 75d7cf72ab9fa0 Andiry Xu 2011-09-13 3095 return status; 5e467f6ebab151 Andiry Xu 2011-04-27 3096 } 5e467f6ebab151 Andiry Xu 2011-04-27 3097 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
