kmscon: add --primary-gpu-only and --all-gpus options
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 27 Oct 2012 16:00:27 +0000 (18:00 +0200)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 27 Oct 2012 16:00:27 +0000 (18:00 +0200)
By default, kmscon now only uses primary und auxiliary displays. All
uncategorized displays are ignored. This fixes problems with dual-GPU
systems.

--primary-gpu-only makes kmscon not use any auxiliary displays. --all-gpus
makes kmscon also use uncategorized displays.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/kmscon_conf.c
src/kmscon_conf.h
src/kmscon_main.c

index 43b6b9b..0b29731 100644 (file)
@@ -121,6 +121,8 @@ static void print_help()
                "\t    --fbdev                 [off]   Use fbdev instead of DRM\n"
                "\t    --dumb                  [off]   Use dumb DRM instead of hardware-\n"
                "\t                                    accelerated DRM devices\n"
+               "\t    --primary-gpu-only      [off]   Use primary GPU only\n"
+               "\t    --all-gpus              [off]   Use all GPUs unconditionally\n"
                "\t    --fps                   [50]    Limit frame-rate\n"
                "\t    --render-engine <eng>   [-]     Console renderer\n"
                "\t    --render-timing         [off]   Print renderer timing information\n"
@@ -480,6 +482,8 @@ int kmscon_conf_new(struct conf_ctx **out)
                /* Video Options */
                CONF_OPTION_BOOL(0, "fbdev", &conf->fbdev, false),
                CONF_OPTION_BOOL(0, "dumb", &conf->dumb, false),
+               CONF_OPTION_BOOL(0, "primary-gpu-only", &conf->primary_gpu_only, false),
+               CONF_OPTION_BOOL(0, "all-gpus", &conf->all_gpus, false),
                CONF_OPTION_UINT(0, "fps", &conf->fps, 50),
                CONF_OPTION_STRING(0, "render-engine", &conf->render_engine, NULL),
                CONF_OPTION_BOOL(0, "render-timing", &conf->render_timing, false),
index bd759e6..8348305 100644 (file)
@@ -111,6 +111,10 @@ struct kmscon_conf_t {
        bool fbdev;
        /* use dumb DRM devices */
        bool dumb;
+       /* use only primary GPU */
+       bool primary_gpu_only;
+       /* use all GPUs unconditionally */
+       bool all_gpus;
        /* frame-rate limit */
        unsigned int fps;
        /* render engine */
index 90c3b23..ea3ef01 100644 (file)
@@ -224,6 +224,19 @@ static int app_seat_add_video(struct app_seat *seat,
                }
        }
 
+       if (!seat->conf->all_gpus) {
+               if (seat->conf->primary_gpu_only && !(flags & UTERM_MONITOR_PRIMARY)) {
+                       log_info("ignoring video device %s on seat %s as it is no primary GPU",
+                                node, seat->name);
+                       return -ERANGE;
+               }
+               if (!(flags & (UTERM_MONITOR_PRIMARY | UTERM_MONITOR_AUX))) {
+                       log_info("ignoring video device %s on seat %s as it is neither a primary nor auxiliary GPU",
+                                node, seat->name);
+                       return -ERANGE;
+               }
+       }
+
        log_debug("new video device %s on seat %s", node, seat->name);
 
        vid = malloc(sizeof(*vid));