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