Control: tags -1 patch

sudo cat /sys/kernel/debug/vgaswitcheroo/switch
cat: /sys/kernel/debug/vgaswitcheroo/switch: No such file or directory
That suggests this system doesn't have a GPU switching mechanism, so may have the Intel GPU permanently disabled (try xrandr --listproviders as a further check), making it unable to run beignet.

However, _crashing_ in that situation is still a bug; the outside-chroot crash looks like the known upstream issue (24b2ad.patch), but the inside-chroot one looks like a new problem (779213.patch). Do these help?

(Please don't upload yet, I need to test them on hardware where beignet does run first, and also plan to include http://cgit.freedesktop.org/beignet/commit/?h=Release_v1.0&id=1c24f07213bcf302ffd6cc751f575dba10f1518d .)
>From 24b2adbd958884d5874dc12f456cee9889583967 Mon Sep 17 00:00:00 2001
From: Zhigang Gong <[email protected]>
Date: Fri, 6 Feb 2015 14:26:02 +0800
Subject: runtime: fix a potential null pointer dereference.

Signed-off-by: Zhigang Gong <[email protected]>
Reviewed-by: Xionghu Luo <[email protected]>

diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index 3032a38..0fd4a69 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -395,13 +395,14 @@ brw_gt3_break:
       printf("cl_get_gt_device(): error, unknown device: %x\n", device_id);
   }
 
+  if (ret == NULL)
+    return NULL;
+
   if (!CompilerSupported()) {
-    if (ret != NULL) {
-      ret->compiler_available = CL_FALSE;
-      //ret->linker_available = CL_FALSE;
-      ret->profile = "EMBEDDED_PROFILE";
-      ret->profile_sz = strlen(ret->profile) + 1;
-    }
+    ret->compiler_available = CL_FALSE;
+    //ret->linker_available = CL_FALSE;
+    ret->profile = "EMBEDDED_PROFILE";
+    ret->profile_sz = strlen(ret->profile) + 1;
   }
 
 #ifdef HAS_USERPTR
-- 
cgit v0.10.2

diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index 21546d9..e6878b3 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -124,14 +124,15 @@ intel_driver_aub_dump(intel_driver_t *driver)
   }
 }
 
-static void
+static int
 intel_driver_memman_init(intel_driver_t *driver)
 {
   driver->bufmgr = drm_intel_bufmgr_gem_init(driver->fd, BATCH_SIZE);
-  assert(driver->bufmgr);
+  if(!driver->bufmgr) return 0;
   drm_intel_bufmgr_gem_enable_reuse(driver->bufmgr);
   driver->device_id = drm_intel_bufmgr_gem_get_devid(driver->bufmgr);
   intel_driver_aub_dump(driver);
+  return 1;
 }
 
 static void
@@ -149,14 +150,14 @@ intel_driver_context_destroy(intel_driver_t *driver)
   driver->ctx = NULL;
 }
 
-static void 
+static int 
 intel_driver_init(intel_driver_t *driver, int dev_fd)
 {
   driver->fd = dev_fd;
   driver->locked = 0;
   pthread_mutex_init(&driver->ctxmutex, NULL);
 
-  intel_driver_memman_init(driver);
+  if(!intel_driver_memman_init(driver)) return 0;
   intel_driver_context_init(driver);
 
 #if EMULATE_GEN
@@ -183,6 +184,7 @@ intel_driver_init(intel_driver_t *driver, int dev_fd)
   else
     driver->gen_ver = 4;
 #endif /* EMULATE_GEN */
+  return 1;
 }
 
 static cl_int
@@ -271,19 +273,20 @@ intel_driver_is_active(intel_driver_t *driver) {
 LOCAL int 
 intel_driver_init_shared(intel_driver_t *driver, dri_state_t *state)
 {
+  int ret;
   assert(state);
   if(state->driConnectedFlag != DRI2)
     return 0;
-  intel_driver_init(driver, state->fd);
+  ret = intel_driver_init(driver, state->fd);
   driver->need_close = 0;
-  return 1;
+  return ret;
 }
 #endif
 
 LOCAL int
 intel_driver_init_master(intel_driver_t *driver, const char* dev_name)
 {
-  int dev_fd;
+  int dev_fd, ret;
 
   drm_client_t client;
 
@@ -296,7 +299,7 @@ intel_driver_init_master(intel_driver_t *driver, const char* dev_name)
 
   // Check that we're authenticated
   memset(&client, 0, sizeof(drm_client_t));
-  int ret = ioctl(dev_fd, DRM_IOCTL_GET_CLIENT, &client);
+  ret = ioctl(dev_fd, DRM_IOCTL_GET_CLIENT, &client);
   if (ret == -1) {
     fprintf(stderr, "ioctl(dev_fd, DRM_IOCTL_GET_CLIENT, &client) failed: %s\n", strerror(errno));
     close(dev_fd);
@@ -309,26 +312,26 @@ intel_driver_init_master(intel_driver_t *driver, const char* dev_name)
     return 0;
   }
 
-  intel_driver_init(driver, dev_fd);
+  ret = intel_driver_init(driver, dev_fd);
   driver->need_close = 1;
 
-  return 1;
+  return ret;
 }
 
 LOCAL int
 intel_driver_init_render(intel_driver_t *driver, const char* dev_name)
 {
-  int dev_fd;
+  int dev_fd, ret;
 
   // usually dev_name = "/dev/dri/renderD%d"
   dev_fd = open(dev_name, O_RDWR);
   if (dev_fd == -1)
     return 0;
 
-  intel_driver_init(driver, dev_fd);
+  ret = intel_driver_init(driver, dev_fd);
   driver->need_close = 1;
 
-  return 1;
+  return ret;
 }
 
 LOCAL int 

Reply via email to