Commit 37339e71 authored by Chris Wilson's avatar Chris Wilson

lib: Print other clients when DRM_SET_MASTER fails

It looks like there are some rogue processes running in CI that prevent
DRM_MASTER from being obtained. Dump the list of clients on failure to
make it more obvious what is being left behind.

v2: Fix up gtkdocs, meson build

References: https://bugs.freedesktop.org/show_bug.cgi?id=104157Signed-off-by: Chris Wilson's avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Daniel Vetter's avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 43199fbc
......@@ -22,6 +22,7 @@
<xi:include href="xml/igt_chamelium.xml"/>
<xi:include href="xml/igt_core.xml"/>
<xi:include href="xml/igt_debugfs.xml"/>
<xi:include href="xml/igt_device.xml"/>
<xi:include href="xml/igt_draw.xml"/>
<xi:include href="xml/igt_dummyload.xml"/>
<xi:include href="xml/igt_fb.xml"/>
......
......@@ -15,6 +15,8 @@ lib_source_list = \
igt.h \
igt_debugfs.c \
igt_debugfs.h \
igt_device.c \
igt_device.h \
igt_aux.c \
igt_aux.h \
igt_edid_template.h \
......
......@@ -51,6 +51,7 @@
#include "intel_chipset.h"
#include "intel_io.h"
#include "igt_debugfs.h"
#include "igt_device.h"
#include "igt_gt.h"
#include "igt_kmod.h"
#include "version.h"
......@@ -423,8 +424,7 @@ int drm_open_driver_master(int chipset)
{
int fd = drm_open_driver(chipset);
igt_require_f(drmSetMaster(fd) == 0, "Can't become DRM master, "
"please check if no other DRM client is running.\n");
igt_device_set_master(fd);
return fd;
}
......
/*
* Copyright © 2017 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
#include "igt.h"
#include "igt_device.h"
int __igt_device_set_master(int fd)
{
int err;
err = 0;
if (drmIoctl(fd, DRM_IOCTL_SET_MASTER, NULL))
err = -errno;
errno = 0;
return err;
}
/**
* igt_device_set_master: Set the device fd to be DRM master
* @fd: the device
*
* Tell the kernel to make this device fd become DRM master or skip the test.
*/
void igt_device_set_master(int fd)
{
if (__igt_device_set_master(fd)) {
igt_debugfs_dump(fd, "clients");
igt_require_f(__igt_device_set_master(fd) == 0,
"Can't become DRM master, "
"please check if no other DRM client is running.\n");
}
}
int __igt_device_drop_master(int fd)
{
int err;
err = 0;
if (drmIoctl(fd, DRM_IOCTL_DROP_MASTER, NULL))
err = -errno;
errno = 0;
return err;
}
/**
* igt_device_drop_master: Drop DRM master
* @fd: the device
*
* Tell the kernel we no longer want this device fd to be the DRM master;
* asserting that we lose the privilege.
*/
void igt_device_drop_master(int fd)
{
igt_assert_eq(__igt_device_drop_master(fd), 0);
}
/*
* Copyright © 2017 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
#ifndef __IGT_DEVICE_H__
#define __IGT_DEVICE_H__
int __igt_device_set_master(int fd);
void igt_device_set_master(int fd);
int __igt_device_drop_master(int fd);
void igt_device_drop_master(int fd);
#endif /* __IGT_DEVICE_H__ */
......@@ -10,6 +10,7 @@ lib_headers = [
'i915_pciids.h',
'igt.h',
'igt_debugfs.h',
'igt_device.h',
'igt_aux.h',
'igt_edid_template.h',
'igt_gt.h',
......@@ -57,6 +58,7 @@ lib_sources = [
'i915/gem_scheduler.c',
'i915/gem_submission.c',
'igt_debugfs.c',
'igt_device.c',
'igt_aux.c',
'igt_gt.c',
'igt_gvt.c',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment