Hi, I am getting freezes in direct rendering. Sometimes glxgears works, but eventually the freeze occurs at program exit, or upon xrandr operation. The freeze occurs because the kernel function drm_lock continually returns -EINTR because the hardware lock variable master->lock.hw_lock is NULL, and the function drmIoctl (in user space drm) continually invokes the ioctl while it returns -EINTR.
Delving further, the problem appears to be caused by the ioctl DRM_IOCTL_ADD_MAP, type _DRM_SHM, in kernel code drm/drm_bufs.c. This ioctl normally allocates the hardware lock that drm_lock locks. However when it fails it does so by finding an existing map, (ie drm_find_matching_map returns true) and returns without setting a hardware lock variable, in the first "return 0" after the "case _DRM_SHM" statement. The variable dev->primary->master->lock.hw_lock, set in the third-last line, is left NULL, and causes the drm_lock call to fail later. ******************************************************************* case _DRM_SHM: list = drm_find_matching_map(dev, map); if (list != NULL) { if(list->map->size != map->size) { DRM_DEBUG("Matching maps of type %d with " "mismatched sizes, (%ld vs %ld)\n", map->type, map->size, list->map->size); list->map->size = map->size; } drm_free(map, sizeof(*map), DRM_MEM_MAPS); *maplist = list; return 0; } map->handle = vmalloc_user(map->size); DRM_DEBUG("%lu %d %p\n", map->size, drm_order(map->size), map->handle); if (!map->handle) { drm_free(map, sizeof(*map), DRM_MEM_MAPS); return -ENOMEM; } map->offset = (unsigned long)map->handle; if (map->flags & _DRM_CONTAINS_LOCK) { /* Prevent a 2nd X Server from creating a 2nd lock */ if (dev->primary->master->lock.hw_lock != NULL) { vfree(map->handle); drm_free(map, sizeof(*map), DRM_MEM_MAPS); return -EBUSY; } dev->sigdata.lock = dev->primary->master->lock.hw_lock = map->handle; /* Pointer to lock */ } break; ******************************************************************* I am also getting a prior mtrr failure upon device closure, for pci region 2, size 256 Meg. I have documented this in bugzilla bug #18967 The equipment is intel GM45 (pci id 8086:2a42). If anyone can suggest what the root cause of the problem is likely to be, would be grateful. Thanks in advance, _______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg