[PATCH] config/udev: add pre_init stage to config and udev.

Peter Hutterer peter.hutterer at who-t.net
Mon May 7 15:24:34 PDT 2012


On Sun, May 06, 2012 at 05:36:57PM +0100, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> In order to use udev for gpu enumeration, we need to init udev earlier
> than input initialisations. This splits the config init stuff so that udev
> pre init sets up before output initialisation.
> 
> this is just a prepatory patch, doesn't change anything major.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  config/config-backends.h     |    1 +
>  config/config.c              |    9 +++++++++
>  config/udev.c                |   16 ++++++++++++----
>  hw/xfree86/common/xf86Init.c |    2 ++
>  include/hotplug.h            |    1 +
>  5 files changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/config/config-backends.h b/config/config-backends.h
> index e5622d5..62abc0a 100644
> --- a/config/config-backends.h
> +++ b/config/config-backends.h
> @@ -33,6 +33,7 @@ void remove_devices(const char *backend, const char *config_info);
>  BOOL device_is_duplicate(const char *config_info);
>  
>  #ifdef CONFIG_UDEV
> +int config_udev_pre_init(void);
>  int config_udev_init(void);
>  void config_udev_fini(void);
>  #else
> diff --git a/config/config.c b/config/config.c
> index 2b96dbb..24e7ba7 100644
> --- a/config/config.c
> +++ b/config/config.c
> @@ -33,6 +33,15 @@
>  #include "config-backends.h"
>  
>  void
> +config_pre_init(void)
> +{
> +#ifdef CONFIG_UDEV
> +    if (!config_udev_pre_init())
> +        ErrorF("[config] failed to pre-init udev\n");
> +#endif
> +}
> +
> +void
>  config_init(void)
>  {
>  #ifdef CONFIG_UDEV
> diff --git a/config/udev.c b/config/udev.c
> index 8b3ca04..1995184 100644
> --- a/config/udev.c
> +++ b/config/udev.c
> @@ -281,15 +281,14 @@ block_handler(pointer data, struct timeval **tv, pointer read_mask)
>  }
>  
>  int
> -config_udev_init(void)
> +config_udev_pre_init(void)
>  {
>      struct udev *udev;
> -    struct udev_enumerate *enumerate;
> -    struct udev_list_entry *devices, *device;
>  
>      udev = udev_new();
>      if (!udev)
>          return 0;
> +
>      udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
>      if (!udev_monitor)
>          return 0;
> @@ -302,12 +301,21 @@ config_udev_init(void)
>      if (SeatId && strcmp(SeatId, "seat0"))
>          udev_monitor_filter_add_match_tag(udev_monitor, SeatId);
>  #endif
> -
>      if (udev_monitor_enable_receiving(udev_monitor)) {
>          ErrorF("config/udev: failed to bind the udev monitor\n");
>          return 0;
>      }
> +    return 1;
> +}
>  
> +int
> +config_udev_init(void)
> +{
> +    struct udev *udev;
> +    struct udev_enumerate *enumerate;
> +    struct udev_list_entry *devices, *device;
> +
> +    udev = udev_monitor_get_udev(udev_monitor);
>      enumerate = udev_enumerate_new(udev);
>      if (!enumerate)
>          return 0;
> diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
> index f42dd10..ead47cc 100644
> --- a/hw/xfree86/common/xf86Init.c
> +++ b/hw/xfree86/common/xf86Init.c
> @@ -405,6 +405,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
>  
>      xf86Initialising = TRUE;
>  
> +    config_pre_init();
> +
>      if (serverGeneration == 1) {
>          if ((xf86ServerName = strrchr(argv[0], '/')) != 0)
>              xf86ServerName++;
> diff --git a/include/hotplug.h b/include/hotplug.h
> index caa3201..f3eeea2 100644
> --- a/include/hotplug.h
> +++ b/include/hotplug.h
> @@ -26,6 +26,7 @@
>  #ifndef HOTPLUG_H
>  #define HOTPLUG_H
>  
> +extern _X_EXPORT void config_pre_init(void);
>  extern _X_EXPORT void config_init(void);
>  extern _X_EXPORT void config_fini(void);

I do wonder why we're exporting this.

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter


More information about the xorg-devel mailing list