Patchwork [20/20,v3] package/xserver_xorg-server: needs libudev, not a udev daemon

login
register
mail settings
Submitter Yann E. MORIN
Date July 19, 2014, 1:56 p.m.
Message ID <7964be0c75358121baa69301d23eb93d72a64db9.1405777634.git.yann.morin.1998@free.fr>
Download mbox | patch
Permalink /patch/371827/
State Superseded
Headers show

Comments

Yann E. MORIN - July 19, 2014, 1:56 p.m.
xserver_xorg-server is happy enough with just a libudev, and does
not require a udev daemon.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/x11r7/xserver_xorg-server/xserver_xorg-server.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Bernd Kuhls - July 27, 2014, 10:12 a.m.
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
news:7964be0c75358121baa69301d23eb93d72a64db9.1405777634.git.yann.morin.199
8@free.fr:

> xserver_xorg-server is happy enough with just a libudev, and does
> not require a udev daemon.

Hi,

although it is true that xserver_xorg-server compiles with libudev alone it 
segfaults at runtime when checking for video hardware without udev daemon:

========================================================================
(gdb) run
Starting program: /usr/bin/Xorg :0.0 vt01 -s 0 -noreset -allowMouseOpenFail 
-logfile /data/log/xorg.log
[...]
X.Org X Server 1.16.0
[...]
Program received signal SIGSEGV, Segmentation fault.
0x080e058a in xf86OutputClassDriverList (nmatches=20, matches=0xbffff710, 
index=0) at xf86platformBus.c:260
260     xf86platformBus.c: No such file or directory.
(gdb) bt full
#0  0x080e058a in xf86OutputClassDriverList (nmatches=20, matches=
0xbffff710, index=0) at xf86platformBus.c:260
        cl = <optimized out>
        i = 0
#1  xf86PlatformMatchDriver (matches=matches@entry=0xbffff710, 
nmatches=nmatches@entry=20) at xf86platformBus.c:297
        i = 0
        j = 0
        info = <optimized out>
        pass = 0
#2  0x080e3975 in listPossibleVideoDrivers (matches=matches@entry=
0xbffff710, nmatches=20) at xf86AutoConfig.c:203
        i = 0
#3  0x080e3b22 in xf86AutoConfig () at xf86AutoConfig.c:152
        deviceList = {0x0 <repeats 20 times>}
        p = <optimized out>
        cp = <optimized out>
        buf = "\b\000\000\000\b\000\000\000\b\000\000\000\b\000\000\000\200
\370\377\277", '\000' <repeats 60 times>, "\206\200\022\004\a\004\220\000
\006\000\000\003\000\000\000\000\004\000\000\360\000\000\000\000\f\000\000
\340\000\000\000\000\001\360\000\000\000\000\000\000\000\000\000\000I\030
\022\004\000\000\000\000\220\000\000\000\000\000\000\000\v\001\000\000\t
\000\f\001m\200\204b\320\000DV\000\000\000\000A\002\000\000\071\000\000\000
\000\000\000\000\001\000\240\317\000\000\002", '\000' <repeats 45 times>...
        ret = <optimized out>
#4  0x080c075a in InitOutput (pScreenInfo=pScreenInfo@entry=0x822b260 
<screenInfo>, argc=argc@entry=9, argv=argv@entry=0xbffffd44)
    at xf86Init.c:476
        i = <optimized out>
        j = <optimized out>
        k = <optimized out>
        scr_index = <optimized out>
        modulelist = <optimized out>
        optionlist = 0x822b260 <screenInfo>
        screenpix24 = <optimized out>
        pix24 = <optimized out>
        pix24From = X_DEFAULT
        pix24Fail = 0
        autoconfig = 1
        sigio_blocked = 0
        want_hw_access = 0
        configured_device = <optimized out>
#5  0x0807e7e4 in dix_main (argc=argc@entry=9, argv=argv@entry=0xbffffd44, 
envp=envp@entry=0xbffffd6c) at main.c:202
        i = <optimized out>
        alwaysCheckForInput = {0, 1}
#6  0x080686fe in main (argc=9, argv=0xbffffd44, envp=0xbffffd6c) at 
stubmain.c:34
No locals.
(gdb)
========================================================================
strace shows:

open("/etc/udev/udev.conf", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file 
or directory)
access("/run/udev/control", F_OK)       = -1 ENOENT (No such file or 
directory)

Luckily enough xserver_xorg-server does not depend on udev/hal, configure 
just prints:

configure: WARNING:
             ***********************************************
             Neither HAL nor udev backend will be enabled.
             Input device hotplugging will not be available!
             ***********************************************

which is fine for me, everything works good without udev/hal ;)

Regards, Bernd
Bernd Kuhls - July 27, 2014, 11:38 a.m.
Bernd Kuhls <bernd.kuhls@t-online.de> wrote in 
news:XnsA3777C2F4BB23berndkuhlsPkbjNfxxIA@bernd-kuhls.de:

> Luckily enough xserver_xorg-server does not depend on udev/hal, configure 
> just prints:
> 
> configure: WARNING:
>              ***********************************************
>              Neither HAL nor udev backend will be enabled.
>              Input device hotplugging will not be available!
>              ***********************************************
> 
> which is fine for me, everything works good without udev/hal ;)

Hi,

a small, but important addition: To avoid xserver_xorg-server picking up 
libudev when the udev daemon is disabled this patch is needed for 
xserver_xorg-server.mk:

@@ -134,6 +134,7 @@
 XSERVER_XORG_SERVER_CONF_OPT += --disable-config-udev-kms
 endif
 else
+XSERVER_XORG_SERVER_CONF_OPT += --disable-config-udev
 ifeq ($(BR2_PACKAGE_DBUS),y)
 XSERVER_XORG_SERVER_DEPENDENCIES += dbus
 XSERVER_XORG_SERVER_CONF_OPT += --enable-config-dbus

Regards, Bernd
Thomas Petazzoni - July 27, 2014, 12:31 p.m.
Dear Bernd Kuhls,

On Sun, 27 Jul 2014 12:12:29 +0200, Bernd Kuhls wrote:
> "Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
> news:7964be0c75358121baa69301d23eb93d72a64db9.1405777634.git.yann.morin.199
> 8@free.fr:
> 
> > xserver_xorg-server is happy enough with just a libudev, and does
> > not require a udev daemon.
> 

> although it is true that xserver_xorg-server compiles with libudev alone it 
> segfaults at runtime when checking for video hardware without udev daemon:

That's the kind of thing that worries me about the idea of allowing
only libudev to be installed without the udev daemon running. I believe
libudev and the udev daemon are meant to be used together, and we're
likely to fall into various issues by allowing libudev to be installed
separately from the udev daemon.

Best regards,

Thomas
Bernd Kuhls - July 27, 2014, 12:38 p.m.
Thomas Petazzoni <thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
@public.gmane.org> wrote in news:20140727143111.7f5091a0@free-electrons.com:

> That's the kind of thing that worries me about the idea of allowing
> only libudev to be installed without the udev daemon running. I believe
> libudev and the udev daemon are meant to be used together, and we're
> likely to fall into various issues by allowing libudev to be installed
> separately from the udev daemon.

Hi Thomas,

and thats exactly the reason why I suggest to switch only those packages over 
to libudev which are proven to work without the udev daemon. This is true for 
mesa3d/libcec/xbmc/libdrm/xdriver_xf86-video-intel, the packages I am using 
on my non-udev-daemon system.

Regards, Bernd
Yann E. MORIN - July 27, 2014, 1:03 p.m.
Bernd, All,

On 2014-07-27 13:38 +0200, Bernd Kuhls spake thusly:
> Bernd Kuhls <bernd.kuhls@t-online.de> wrote in 
> news:XnsA3777C2F4BB23berndkuhlsPkbjNfxxIA@bernd-kuhls.de:
> 
> > Luckily enough xserver_xorg-server does not depend on udev/hal, configure 
> > just prints:
> > 
> > configure: WARNING:
> >              ***********************************************
> >              Neither HAL nor udev backend will be enabled.
> >              Input device hotplugging will not be available!
> >              ***********************************************
> > 
> > which is fine for me, everything works good without udev/hal ;)
> 
> Hi,
> 
> a small, but important addition: To avoid xserver_xorg-server picking up 
> libudev when the udev daemon is disabled this patch is needed for 
> xserver_xorg-server.mk:
> 
> @@ -134,6 +134,7 @@
>  XSERVER_XORG_SERVER_CONF_OPT += --disable-config-udev-kms
>  endif
>  else
> +XSERVER_XORG_SERVER_CONF_OPT += --disable-config-udev
>  ifeq ($(BR2_PACKAGE_DBUS),y)
>  XSERVER_XORG_SERVER_DEPENDENCIES += dbus
>  XSERVER_XORG_SERVER_CONF_OPT += --enable-config-dbus

So, we can make this package work in the three cases:
  - _HAS_UDEV (implies _HAS_LIBUDEV)
  - _HAS_LIBUDEV && !_HAS_UDEV
  - !_HAS_LIBUDEV

Correct?

Regards,
Yann E. MORIN.
Yann E. MORIN - July 27, 2014, 1:04 p.m.
Thomas, All,

On 2014-07-27 14:31 +0200, Thomas Petazzoni spake thusly:
> On Sun, 27 Jul 2014 12:12:29 +0200, Bernd Kuhls wrote:
> > "Yann E. MORIN" <yann.morin.1998@free.fr> wrote in 
> > news:7964be0c75358121baa69301d23eb93d72a64db9.1405777634.git.yann.morin.199
> > 8@free.fr:
> > 
> > > xserver_xorg-server is happy enough with just a libudev, and does
> > > not require a udev daemon.
> > 
> 
> > although it is true that xserver_xorg-server compiles with libudev alone it 
> > segfaults at runtime when checking for video hardware without udev daemon:
> 
> That's the kind of thing that worries me about the idea of allowing
> only libudev to be installed without the udev daemon running. I believe
> libudev and the udev daemon are meant to be used together, and we're
> likely to fall into various issues by allowing libudev to be installed
> separately from the udev daemon.

Well, I was a bit overzealous when converting the xserver_xorg-server
package, on purpose. I wanted to stirr some questionning about it.

Ditto for other packages in the series.

The reasonning was: if we do not switch them over to using libudev and
we would never switch those packages. On the other hand, if we switch
all packages to use libudev (except those we know require udev), then
users will report breakage, and we can revert back.

So, I should not switch this package to use libudev, now we have a
report it is broken. I'll remove it from the series.

But, as Bernd stated, there *are* packages that work very well with kust
libudev and no udev daemon. And in some cases, an udev daemon may not be
wanted (for different reasons.) So we must be able to just provide
libudev if at all possible.

Regards,
Yann E. MORIN.
Yann E. MORIN - July 27, 2014, 1:29 p.m.
Bernd, All,

On 2014-07-27 14:38 +0200, Bernd Kuhls spake thusly:
> Thomas Petazzoni <thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
> @public.gmane.org> wrote in news:20140727143111.7f5091a0@free-electrons.com:
> 
> > That's the kind of thing that worries me about the idea of allowing
> > only libudev to be installed without the udev daemon running. I believe
> > libudev and the udev daemon are meant to be used together, and we're
> > likely to fall into various issues by allowing libudev to be installed
> > separately from the udev daemon.
> 
> and thats exactly the reason why I suggest to switch only those packages over 
> to libudev which are proven to work without the udev daemon. This is true for 
> mesa3d/libcec/xbmc/libdrm/xdriver_xf86-video-intel, the packages I am using 
> on my non-udev-daemon system.

I can see the reasonning. But if we do not convert those packages, they
will never be. If we do convert them. we can be sure to get complains by
angry users! Adn we can then revert broken packages.

What I would suggest is the following plan:

  - for the next release (-rc1 due shortly), only convert packages known
    to work with only libudev, that is the list provided by Bernd:
        mesa3d  libcec  xbmc  libdrm  xdriver_xf86-video-intel
    so we have a sane situation for the release, and not too much burden
    during the stabilisation phase.

  - when -rc1 is out, or early after -next is merged back in master,
    convert the remaining packages in -next, after _testing_ the
    packages are still working. Unfortunately, I won't be able to test
    all such packages (e.g. xserver_xorg-server) as I do not use Xorg;
    but Bernd uses it, so he may be able to give a hand at it, correct?

How do you feel with this plan?

Regards,
Yann E. MORIN.

Patch

diff --git a/package/x11r7/xserver_xorg-server/xserver_xorg-server.mk b/package/x11r7/xserver_xorg-server/xserver_xorg-server.mk
index 779c46d..a83feec 100644
--- a/package/x11r7/xserver_xorg-server/xserver_xorg-server.mk
+++ b/package/x11r7/xserver_xorg-server/xserver_xorg-server.mk
@@ -123,8 +123,8 @@  XSERVER_XORG_SERVER_DEPENDENCIES += tslib
 XSERVER_XORG_SERVER_CONF_OPT += --enable-tslib LDFLAGS="-lts"
 endif
 
-ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
-XSERVER_XORG_SERVER_DEPENDENCIES += udev
+ifeq ($(BR2_PACKAGE_HAS_LIBUDEV),y)
+XSERVER_XORG_SERVER_DEPENDENCIES += libudev
 XSERVER_XORG_SERVER_CONF_OPT += --enable-config-udev
 # udev kms support depends on libdrm
 ifeq ($(BR2_PACKAGE_LIBDRM),y)