Public bug reported:

I have an interaction problem between upowerd and Optimus Hybrid
graphics drivers.

I think potentially this should be split in to a few bugs (i.e. the
kernel video driver should probably respond with something whether or
not the card does, upowerd shouldn't fail because of a buggy driver and
GDM/X shouldn't become unresponsive due to upowerd failing), but thought
I'd start with this one to get feedback.

Summary of what's happening: When I have the discrete video card powered
off to save power, upowerd attempts to read from a file in sys that does
not respond and can cause GDM/X to lock up when it attempts to talk to
upowerd.

Detail and testing strategy follows...

To make the laptop stable I have disabled upowerd with:
: # mv /usr/lib/upower/upowerd{,.disabled} 
and then booted up.

Without doing this I can not login because the laptop crashes quickly
after displaying the GDM login prompt (and poking around from another
laptop over ssh indicated upowerd might be up to something).

I have an Optimus (hybrid) video card that is not well supported under Ubuntu 
(Linux generally) so to save power I keep the discrete (DIS) component powered 
off:
: # cat /sys/kernel/debug/vgaswitcheroo/switch 
: 0:IGD:+:Pwr:0000:00:02.0
: 1:DIS: :Off:0000:01:00.0

If I switch it on:
: # echo ON > /sys/kernel/debug/vgaswitcheroo/switch 
: # cat /sys/kernel/debug/vgaswitcheroo/switch 
: 0:IGD:+:Pwr:0000:00:02.0
: 1:DIS: :Pwr:0000:01:00.0

and then let upowerd start:
: # strace -f -o upowerd_vid-on.strace /usr/lib/upower/upowerd.disabled
... everything seems to behave just fine.

However if I turn the discrete card back off:
: # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch 
: # cat /sys/kernel/debug/vgaswitcheroo/switch 
: 0:IGD:+:Pwr:0000:00:02.0
: 1:DIS: :Off:0000:01:00.0

and then start it again:
: # strace -f -o upowerd_vid-off.strace /usr/lib/upower/upowerd.disabled

My %sy (system cpu) in top goes up to 75% for 1 core and load average 
continually rises (I'm guessing this is due to random process on the system 
trying to talk to an unresponsive upowerd). Any processes that have anything at 
all to do with upowerd seem to get stuck, e.g. niether the strace or a tail 
following its output can be killed with ^C and they sit in either sleeping or 
waiting on disk states:
: # ps aux | egrep 'strace|tail|upowerd' | grep -v grep
: root      6444  0.0  0.0   4648   824 pts/0    S+   19:01   0:00 strace -f -o 
upowerd_vid-off.strace /usr/lib/upower/upowerd.disabled
: root      6445  0.0  0.0 220176  4572 pts/0    Rl+  19:01   0:00 
/usr/lib/upower/upowerd.disabled
: root      6470  0.0  0.0      0     0 pts/3    D+   19:01   0:00 [tail]

(tail will not even respond to "kill -9 ...").

... at which point I can enable the discrete card again:
: # echo ON > /sys/kernel/debug/vgaswitcheroo/switch
and all of the processes die and the load average drops.

The interesting lines from the strace are:
: 6445  
lstat("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status",
 {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0
: 6445  
open("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status",
 O_RDONLY|O_CLOEXEC) = 14
: 6445  read(14, 
basically: upowerd tried to do a blocking read from 
"/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status"
 and nothing happened (it sits there indefinitely).

Isolating a little further, I've found that I can cat from the file upowerd is 
attempting to read from with the discrete card on:
: # echo ON > /sys/kernel/debug/vgaswitcheroo/switch 
: # cat 
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status
: connected
but with it off, cat stalls indefinitely (which is why I think I may need to 
lodge another bug around the driver):
: # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch 
: # cat 
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status

If I enable the card from another console I get "disconnected" echo'd
back from the "cat" call.

I've tested cat stalling in 3.2.0-{34,32,23}-generic and gotten the same
behavior.

ProblemType: Bug
DistroRelease: Ubuntu 12.04
Package: upower 0.9.15-3git1
ProcVersionSignature: Ubuntu 3.2.0-34.53-generic 3.2.33
Uname: Linux 3.2.0-34-generic x86_64
ApportVersion: 2.0.1-0ubuntu15
Architecture: amd64
Date: Thu Dec  6 19:54:21 2012
InstallationMedia: Ubuntu 12.04 LTS "Precise Pangolin" - Release amd64 
(20120425)
MarkForUpload: True
SourcePackage: upower
UpgradeStatus: No upgrade log present (probably fresh install)

** Affects: upower (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug precise

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to upower in Ubuntu.
https://bugs.launchpad.net/bugs/1087175

Title:
  upowerd locks up, crashing X, with optimus hybrid graphics in power
  saving mode

Status in “upower” package in Ubuntu:
  New

Bug description:
  I have an interaction problem between upowerd and Optimus Hybrid
  graphics drivers.

  I think potentially this should be split in to a few bugs (i.e. the
  kernel video driver should probably respond with something whether or
  not the card does, upowerd shouldn't fail because of a buggy driver
  and GDM/X shouldn't become unresponsive due to upowerd failing), but
  thought I'd start with this one to get feedback.

  Summary of what's happening: When I have the discrete video card
  powered off to save power, upowerd attempts to read from a file in sys
  that does not respond and can cause GDM/X to lock up when it attempts
  to talk to upowerd.

  Detail and testing strategy follows...

  To make the laptop stable I have disabled upowerd with:
  : # mv /usr/lib/upower/upowerd{,.disabled} 
  and then booted up.

  Without doing this I can not login because the laptop crashes quickly
  after displaying the GDM login prompt (and poking around from another
  laptop over ssh indicated upowerd might be up to something).

  I have an Optimus (hybrid) video card that is not well supported under Ubuntu 
(Linux generally) so to save power I keep the discrete (DIS) component powered 
off:
  : # cat /sys/kernel/debug/vgaswitcheroo/switch 
  : 0:IGD:+:Pwr:0000:00:02.0
  : 1:DIS: :Off:0000:01:00.0

  If I switch it on:
  : # echo ON > /sys/kernel/debug/vgaswitcheroo/switch 
  : # cat /sys/kernel/debug/vgaswitcheroo/switch 
  : 0:IGD:+:Pwr:0000:00:02.0
  : 1:DIS: :Pwr:0000:01:00.0

  and then let upowerd start:
  : # strace -f -o upowerd_vid-on.strace /usr/lib/upower/upowerd.disabled
  ... everything seems to behave just fine.

  However if I turn the discrete card back off:
  : # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch 
  : # cat /sys/kernel/debug/vgaswitcheroo/switch 
  : 0:IGD:+:Pwr:0000:00:02.0
  : 1:DIS: :Off:0000:01:00.0

  and then start it again:
  : # strace -f -o upowerd_vid-off.strace /usr/lib/upower/upowerd.disabled

  My %sy (system cpu) in top goes up to 75% for 1 core and load average 
continually rises (I'm guessing this is due to random process on the system 
trying to talk to an unresponsive upowerd). Any processes that have anything at 
all to do with upowerd seem to get stuck, e.g. niether the strace or a tail 
following its output can be killed with ^C and they sit in either sleeping or 
waiting on disk states:
  : # ps aux | egrep 'strace|tail|upowerd' | grep -v grep
  : root      6444  0.0  0.0   4648   824 pts/0    S+   19:01   0:00 strace -f 
-o upowerd_vid-off.strace /usr/lib/upower/upowerd.disabled
  : root      6445  0.0  0.0 220176  4572 pts/0    Rl+  19:01   0:00 
/usr/lib/upower/upowerd.disabled
  : root      6470  0.0  0.0      0     0 pts/3    D+   19:01   0:00 [tail]

  (tail will not even respond to "kill -9 ...").

  ... at which point I can enable the discrete card again:
  : # echo ON > /sys/kernel/debug/vgaswitcheroo/switch
  and all of the processes die and the load average drops.

  The interesting lines from the strace are:
  : 6445  
lstat("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status",
 {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0
  : 6445  
open("/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status",
 O_RDONLY|O_CLOEXEC) = 14
  : 6445  read(14, 
  basically: upowerd tried to do a blocking read from 
"/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status"
 and nothing happened (it sits there indefinitely).

  Isolating a little further, I've found that I can cat from the file upowerd 
is attempting to read from with the discrete card on:
  : # echo ON > /sys/kernel/debug/vgaswitcheroo/switch 
  : # cat 
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status
  : connected
  but with it off, cat stalls indefinitely (which is why I think I may need to 
lodge another bug around the driver):
  : # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch 
  : # cat 
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-2/status

  If I enable the card from another console I get "disconnected" echo'd
  back from the "cat" call.

  I've tested cat stalling in 3.2.0-{34,32,23}-generic and gotten the
  same behavior.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: upower 0.9.15-3git1
  ProcVersionSignature: Ubuntu 3.2.0-34.53-generic 3.2.33
  Uname: Linux 3.2.0-34-generic x86_64
  ApportVersion: 2.0.1-0ubuntu15
  Architecture: amd64
  Date: Thu Dec  6 19:54:21 2012
  InstallationMedia: Ubuntu 12.04 LTS "Precise Pangolin" - Release amd64 
(20120425)
  MarkForUpload: True
  SourcePackage: upower
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/upower/+bug/1087175/+subscriptions

-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to