2018-08-13 07:13:05

by Gupta, Anshuman

[permalink] [raw]
Subject: [Query] USB device autosuspend and its runtime usage count.

Hi ,
I need to test a functionality with USB autosuspend with latest kernel
Linux 4.18-rc8. I am trying to autosuspend a USB key board, i enabled
its autosuspend by doing echo "auto" to its "control" attributes.
I am expecting USB keyboard to go to autosuspend after autosuspend_delay_ms.
But USB key board is not going to autosuspend because its runtime usage
count is not equal to zero.

Below are the log snippets:

root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_enabled
enabled
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/control
auto
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/autosuspend_delay_ms
2000
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_status
active
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_usage
1
root@intel-Kabylake-Client-platform:# sleep 60; cat /sys/bus/usb/devices/1-5/power/runtime_usage
1

My USB keyboard runtime usage reference count is not decreasing to zero.
Here am i missing something regarding runtime usage count or is it some issue with
my kernel or OS?

Thanks,
Anshuman Gupta.


2018-08-13 07:59:42

by Oliver Neukum

[permalink] [raw]
Subject: Re: [Query] USB device autosuspend and its runtime usage count.

On Mo, 2018-08-13 at 12:15 +0530, Anshuman Gupta wrote:
> Hi ,
> I need to test a functionality with USB autosuspend with latest kernel
> Linux 4.18-rc8. I am trying to autosuspend a USB key board, i enabled
> its autosuspend by doing echo "auto" to its "control" attributes.
> I am expecting USB keyboard to go to autosuspend after autosuspend_delay_ms.
> But USB key board is not going to autosuspend because its runtime usage
> count is not equal to zero.
>
> Below are the log snippets:
>
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_enabled
> enabled
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/control
> auto
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/autosuspend_delay_ms
> 2000
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_status
> active
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_usage
> 1
> root@intel-Kabylake-Client-platform:# sleep 60; cat /sys/bus/usb/devices/1-5/power/runtime_usage
> 1
>
> My USB keyboard runtime usage reference count is not decreasing to zero.
> Here am i missing something regarding runtime usage count or is it some issue with
> my kernel or OS?

Very hard to say without further information. Is the HID device the
only interface of the whole device?
Does the device support remote wakeup?
Is an LED on?

Usbhid does support autosuspend, but its criteria must be met.
And all interface drivers must call the device idle.
Or you have discovered a kernel bug.

Regards
Oliver


2018-08-13 10:48:49

by Gupta, Anshuman

[permalink] [raw]
Subject: Re: [Query] USB device autosuspend and its runtime usage count.

On Mon, Aug 13, 2018 at 01:19:26PM +0530, Oliver Neukum wrote:
> On Mo, 2018-08-13 at 12:15 +0530, Anshuman Gupta wrote:
> > Hi ,
> > I need to test a functionality with USB autosuspend with latest kernel
> > Linux 4.18-rc8. I am trying to autosuspend a USB key board, i enabled
> > its autosuspend by doing echo "auto" to its "control" attributes.
> > I am expecting USB keyboard to go to autosuspend after autosuspend_delay_ms.
> > But USB key board is not going to autosuspend because its runtime usage
> > count is not equal to zero.
> >
> > Below are the log snippets:
> >
> > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_enabled
> > enabled
> > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/control
> > auto
> > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/autosuspend_delay_ms
> > 2000
> > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_status
> > active
> > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_usage
> > 1
> > root@intel-Kabylake-Client-platform:# sleep 60; cat /sys/bus/usb/devices/1-5/power/runtime_usage
> > 1
> >
> > My USB keyboard runtime usage reference count is not decreasing to zero.
> > Here am i missing something regarding runtime usage count or is it some issue with
> > my kernel or OS?
>
> Very hard to say without further information. Is the HID device the
> only interface of the whole device?
yes, HID device is only the interface for given device, below here lsusb -t log for usb dev 1-5.

root@intel-Kabylake-Client-platform:# lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 5: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 5: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

> Does the device support remote wakeup?
yes, from lsusb logs it seems, it is supporting remote wakeup.

root@intel-Kabylake-Client-platform:# lsusb
Bus 001 Device 003: ID 04d9:1702 Holtek Semiconductor, Inc. Keyboard LKS02

root@intel-Kabylake-Client-platform:# lsusb -v -d 04d9:1702 | grep Remote
Remote Wakeup

> Is an LED on?
Num lock led was on, but switching it off also does not help.
>
> Usbhid does support autosuspend, but its criteria must be met.
> And all interface drivers must call the device idle.
All of its interfaces are in runtime suspend

root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.0/power/runtime_status
suspended
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.1/power/runtime_status
suspended
root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_active_kids
0

> Or you have discovered a kernel bug.
>
> Regards
> Oliver
>

--
Thanks,
Anshuman


2018-08-13 12:58:24

by Oliver Neukum

[permalink] [raw]
Subject: Re: [Query] USB device autosuspend and its runtime usage count.

On Mo, 2018-08-13 at 16:15 +0530, Anshuman Gupta wrote:
>
> All of its interfaces are in runtime suspend
>
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.0/power/runtime_status
> suspended
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.1/power/runtime_status
> suspended
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_active_kids
> 0

Is the RESET_RESUME quirk set for this device?
All children idle but the parent active is odd.

Regards
Oliver


2018-08-13 14:06:03

by Alan Stern

[permalink] [raw]
Subject: Re: [Query] USB device autosuspend and its runtime usage count.

On Mon, 13 Aug 2018, Anshuman Gupta wrote:

> On Mon, Aug 13, 2018 at 01:19:26PM +0530, Oliver Neukum wrote:
> > On Mo, 2018-08-13 at 12:15 +0530, Anshuman Gupta wrote:
> > > Hi ,
> > > I need to test a functionality with USB autosuspend with latest kernel
> > > Linux 4.18-rc8. I am trying to autosuspend a USB key board, i enabled
> > > its autosuspend by doing echo "auto" to its "control" attributes.
> > > I am expecting USB keyboard to go to autosuspend after autosuspend_delay_ms.
> > > But USB key board is not going to autosuspend because its runtime usage
> > > count is not equal to zero.
> > >
> > > Below are the log snippets:
> > >
> > > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_enabled
> > > enabled
> > > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/control
> > > auto
> > > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/autosuspend_delay_ms
> > > 2000
> > > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_status
> > > active
> > > root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_usage
> > > 1
> > > root@intel-Kabylake-Client-platform:# sleep 60; cat /sys/bus/usb/devices/1-5/power/runtime_usage
> > > 1
> > >
> > > My USB keyboard runtime usage reference count is not decreasing to zero.
> > > Here am i missing something regarding runtime usage count or is it some issue with
> > > my kernel or OS?
> >
> > Very hard to say without further information. Is the HID device the
> > only interface of the whole device?
> yes, HID device is only the interface for given device, below here lsusb -t log for usb dev 1-5.
>
> root@intel-Kabylake-Client-platform:# lsusb -t
> /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
> |__ Port 5: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
> |__ Port 5: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
>
> > Does the device support remote wakeup?
> yes, from lsusb logs it seems, it is supporting remote wakeup.
>
> root@intel-Kabylake-Client-platform:# lsusb
> Bus 001 Device 003: ID 04d9:1702 Holtek Semiconductor, Inc. Keyboard LKS02
>
> root@intel-Kabylake-Client-platform:# lsusb -v -d 04d9:1702 | grep Remote
> Remote Wakeup
>
> > Is an LED on?
> Num lock led was on, but switching it off also does not help.
> >
> > Usbhid does support autosuspend, but its criteria must be met.
> > And all interface drivers must call the device idle.
> All of its interfaces are in runtime suspend
>
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.0/power/runtime_status
> suspended
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5\:1.1/power/runtime_status
> suspended
> root@intel-Kabylake-Client-platform:# cat /sys/bus/usb/devices/1-5/power/runtime_active_kids
> 0

What matters is not the power/* settings for the interfaces themselves,
but rather the power/* settings for the interfaces' children.

Alan Stern