Repeat ioctl when device is busy

Change-Id: I29007c316df610c9410a71a59c5098bd4539b504
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
Lukasz Jobczyk
2020-07-28 10:25:04 +02:00
committed by sys_ocldev
parent 960aff5637
commit 038577eaf4
2 changed files with 11 additions and 1 deletions

View File

@@ -242,6 +242,16 @@ TEST_F(DrmTests, createReturnsDrm) {
EXPECT_EQ(0, ret); EXPECT_EQ(0, ret);
EXPECT_EQ(deviceId, lDeviceId); EXPECT_EQ(deviceId, lDeviceId);
ioctlCnt = 0;
ioctlSeq[0] = -1;
errno = EBUSY;
// check if device works, although there was EBUSY error from KMD
getParam.param = I915_PARAM_CHIPSET_ID;
getParam.value = &lDeviceId;
ret = drm->ioctl(DRM_IOCTL_I915_GETPARAM, &getParam);
EXPECT_EQ(0, ret);
EXPECT_EQ(deviceId, lDeviceId);
ioctlCnt = 0; ioctlCnt = 0;
ioctlSeq[0] = -1; ioctlSeq[0] = -1;
errno = 0; errno = 0;

View File

@@ -65,7 +65,7 @@ int Drm::ioctl(unsigned long request, void *arg) {
SYSTEM_ENTER(); SYSTEM_ENTER();
do { do {
ret = SysCalls::ioctl(getFileDescriptor(), request, arg); ret = SysCalls::ioctl(getFileDescriptor(), request, arg);
} while (ret == -1 && (errno == EINTR || errno == EAGAIN)); } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EBUSY));
SYSTEM_LEAVE(request); SYSTEM_LEAVE(request);
return ret; return ret;
} }