container_of(x, struct vmw_screen_object_unit, base.connector)
 
 struct vmw_screen_object_display {
-       struct list_head active;
-
        unsigned num_active;
 
        struct vmw_framebuffer *fb;
        struct vmw_dma_buffer *buffer; /**< Backing store buffer */
 
        bool defined;
-
-       struct list_head active;
+       bool active;
 };
 
 static void vmw_sou_destroy(struct vmw_screen_object_unit *sou)
 {
-       list_del_init(&sou->active);
        vmw_display_unit_cleanup(&sou->base);
        kfree(sou);
 }
        vmw_sou_destroy(vmw_crtc_to_sou(crtc));
 }
 
-static int vmw_sou_del_active(struct vmw_private *vmw_priv,
+static void vmw_sou_del_active(struct vmw_private *vmw_priv,
                              struct vmw_screen_object_unit *sou)
 {
        struct vmw_screen_object_display *ld = vmw_priv->sou_priv;
-       if (list_empty(&sou->active))
-               return 0;
-
-       /* Must init otherwise list_empty(&sou->active) will not work. */
-       list_del_init(&sou->active);
-       if (--(ld->num_active) == 0)
-               ld->fb = NULL;
 
-       return 0;
+       if (sou->active) {
+               if (--(ld->num_active) == 0)
+                       ld->fb = NULL;
+               sou->active = false;
+       }
 }
 
-static int vmw_sou_add_active(struct vmw_private *vmw_priv,
+static void vmw_sou_add_active(struct vmw_private *vmw_priv,
                              struct vmw_screen_object_unit *sou,
                              struct vmw_framebuffer *vfb)
 {
        struct vmw_screen_object_display *ld = vmw_priv->sou_priv;
-       struct vmw_screen_object_unit *entry;
-       struct list_head *at;
 
        BUG_ON(!ld->num_active && ld->fb);
-       ld->fb = vfb;
 
-       if (!list_empty(&sou->active))
-               return 0;
-
-       at = &ld->active;
-       list_for_each_entry(entry, &ld->active, active) {
-               if (entry->base.unit > sou->base.unit)
-                       break;
-
-               at = &entry->active;
+       if (!sou->active) {
+               ld->fb = vfb;
+               sou->active = true;
+               ld->num_active++;
        }
-
-       list_add(&sou->active, at);
-
-       ld->num_active++;
-
-       return 0;
 }
 
 /**
        /* sou only supports one fb active at the time */
        if (dev_priv->sou_priv->fb && vfb &&
            !(dev_priv->sou_priv->num_active == 1 &&
-             !list_empty(&sou->active)) &&
+             sou->active) &&
            dev_priv->sou_priv->fb != vfb) {
                DRM_ERROR("Multiple framebuffers not supported\n");
                return -EINVAL;
        encoder = &sou->base.encoder;
        connector = &sou->base.connector;
 
-       INIT_LIST_HEAD(&sou->active);
+       sou->active = false;
 
        sou->base.pref_active = (unit == 0);
        sou->base.pref_width = 800;
        if (unlikely(!dev_priv->sou_priv))
                goto err_no_mem;
 
-       INIT_LIST_HEAD(&dev_priv->sou_priv->active);
        dev_priv->sou_priv->num_active = 0;
        dev_priv->sou_priv->fb = NULL;
 
 
        drm_vblank_cleanup(dev);
 
-       if (!list_empty(&dev_priv->sou_priv->active))
+       if (dev_priv->sou_priv->num_active > 0)
                DRM_ERROR("Still have active outputs when unloading driver");
 
        kfree(dev_priv->sou_priv);