Here is a patch showing the debugging statements to debug this problem, followed by dmesg output. ***************************************************************************** diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c index 7fb690b..b19d778 100644 --- a/drivers/gpu/drm/drm_bufs.c +++ b/drivers/gpu/drm/drm_bufs.c @@ -63,6 +63,29 @@ static struct drm_map_list *drm_find_matching_map(struct drm_device *dev, return NULL; } +void drm_dump_maplist(struct drm_device * dev, const char * msg) +{ + struct drm_map_list *entry; + int cnt = 0; + printk("dump maplist %s dev %p:", msg, dev); + list_for_each_entry(entry, &dev->maplist, head) { + printk(" %p", entry); + cnt++; + } + printk(" for %d entries.\n", cnt); +} +EXPORT_SYMBOL(drm_dump_maplist); +static void why_no_match(struct drm_device * dev, drm_local_map_t * map) +{ + struct drm_map_list *entry; + list_for_each_entry(entry, &dev->maplist, head) { + printk("nomatch at offsets %lx/%lx master %d (%p %p) type %d drm_contains_lock %d\n", + map->offset, entry->map->offset, + (entry->master == dev->primary->master),entry->master,dev->primary->master, + (map->type == entry->map->type), + ((map->type == _DRM_SHM) && (map->flags&_DRM_CONTAINS_LOCK))); + } +} static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash, unsigned long user_token, int hashed_handle) @@ -111,6 +134,7 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, drm_dma_handle_t *dmah; unsigned long user_token; int ret; +printk("drm_addmap_core, primary dev master %p\n", dev->primary->master); map = drm_alloc(sizeof(*map), DRM_MEM_MAPS); if (!map) @@ -189,6 +213,10 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, case _DRM_SHM: list = drm_find_matching_map(dev, map); if (list != NULL) { +printk("dev %p _DRM_SHM ioctl finds existing matching map entry %p master %p offset %lx size %lx type %x flags %x handle %p hw_lock %p\n", + dev, list, + list->master, + list->map->offset, list->map->size, list->map->type, list->map->flags, list->map->handle, dev->primary->master->lock.hw_lock); if(list->map->size != map->size) { DRM_DEBUG("Matching maps of type %d with " "mismatched sizes, (%ld vs %ld)\n", @@ -198,8 +226,12 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, drm_free(map, sizeof(*map), DRM_MEM_MAPS); *maplist = list; +printk("dev %p Device lock at address %p is %p\n", dev, &(dev->primary->master->lock.hw_lock),dev->primary->master->lock.hw_lock); +printk("list master %p primary dev master %p\n",list->master, dev->primary->master); return 0; } +printk("No match in existing maps for offset %lx. Reasons:\n", map->offset); +why_no_match(dev, map); map->handle = vmalloc_user(map->size); DRM_DEBUG("%lu %d %p\n", map->size, drm_order(map->size), map->handle); @@ -215,6 +247,7 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, drm_free(map, sizeof(*map), DRM_MEM_MAPS); return -EBUSY; } +printk("dev %p Setting the device lock at address %p to %p\n", dev, &(dev->primary->master->lock.hw_lock),map->handle); dev->sigdata.lock = dev->primary->master->lock.hw_lock = map->handle; /* Pointer to lock */ } break; @@ -303,6 +336,7 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, list->map = map; mutex_lock(&dev->struct_mutex); +printk("drm_addmap_core:: Adding element %p to maplist for dev %p\n", &(list->head), dev); list_add(&list->head, &dev->maplist); /* Assign a 32-bit handle */ @@ -323,9 +357,10 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset, mutex_unlock(&dev->struct_mutex); list->master = dev->primary->master; +printk("Normal return from drm_addmap_core, list master set to primary device master %p\n",list->master); *maplist = list; return 0; - } +} int drm_addmap(struct drm_device * dev, unsigned int offset, unsigned int size, enum drm_map_type type, @@ -385,10 +420,12 @@ int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map) drm_dma_handle_t dmah; int found = 0; struct drm_master *master; +printk("drm_rmmap_locked called.\n"); /* Find the list entry for the map and remove it */ list_for_each_entry_safe(r_list, list_t, &dev->maplist, head) { if (r_list->map == map) { +printk("Removing element %p from maplist for dev %p\n", &(r_list->master), dev); master = r_list->master; list_del(&r_list->head); drm_ht_remove_key(&dev->map_hash, @@ -418,6 +455,7 @@ int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t *map) if (master) { if (dev->sigdata.lock == master->lock.hw_lock) dev->sigdata.lock = NULL; +printk("nullifying hardware lock at address %p for dev %p\n", &(master->lock.hw_lock),dev); master->lock.hw_lock = NULL; /* SHM removed */ master->lock.file_priv = NULL; wake_up_interruptible(&master->lock.lock_queue); diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 0b9f316..eb8427e 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -347,7 +347,11 @@ void drm_exit(struct drm_driver *driver) DRM_DEBUG("\n"); list_for_each_entry_safe(dev, tmp, &driver->device_list, driver_item) + { + extern void drm_dump_maplist(struct drm_device * dev, const char * msg); + drm_dump_maplist(dev, "drm_exit invoked."); drm_cleanup(dev); + } DRM_INFO("Module unloaded\n"); } diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 3733e36..9f1b868 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c @@ -114,6 +114,7 @@ static int drm_setup(struct drm_device * dev) * increments the device open count. If the open count was previous at zero, * i.e., it's the first that the device is open, then calls setup(). */ +extern void drm_dump_maplist(struct drm_device * dev, const char * msg); int drm_open(struct inode *inode, struct file *filp) { struct drm_device *dev = NULL; @@ -128,6 +129,9 @@ int drm_open(struct inode *inode, struct file *filp) if (!(dev = minor->dev)) return -ENODEV; +printk("drm_open using minor dev %p opencount %d\n",dev,dev->open_count); +drm_dump_maplist(dev, "at file open"); + retcode = drm_open_helper(inode, filp, dev); if (!retcode) { atomic_inc(&dev->counts[_DRM_STAT_OPENS]); @@ -432,6 +436,8 @@ int drm_release(struct inode *inode, struct file *filp) lock_kernel(); +printk("drm_release releases minor dev %p, opencount %d\n",dev,dev->open_count); +drm_dump_maplist(dev, "at file close"); DRM_DEBUG("open_count = %d\n", dev->open_count); if (dev->driver->preclose) @@ -519,6 +525,7 @@ int drm_release(struct inode *inode, struct file *filp) return drm_lastclose(dev); } spin_unlock(&dev->count_lock); +drm_dump_maplist(dev, "after file close"); unlock_kernel(); diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c index 46e7b28..d56500d 100644 --- a/drivers/gpu/drm/drm_lock.c +++ b/drivers/gpu/drm/drm_lock.c @@ -67,6 +67,14 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) lock->context, task_pid_nr(current), master->lock.hw_lock->lock, lock->flags); +if(!master->lock.hw_lock) +{ + static int x; + int xmax = 10; + if(++x <= xmax)printk("drm_lock has NULL hardware lock for %d out of %d times, primary at addr %p is %p.\n",x,xmax,&(dev->primary->master->lock.hw_lock), + dev->primary->master->lock.hw_lock); +} + if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)) if (lock->context < 0) return -EINVAL; diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 592192d..1120b58 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -103,6 +103,7 @@ struct drm_master *drm_master_create(struct drm_minor *minor) master->minor = minor; list_add_tail(&master->head, &minor->master_list); +printk("Creating new master %p\n", master); return master; } @@ -118,6 +119,7 @@ static void drm_master_destroy(struct kref *kref) struct drm_master *master = container_of(kref, struct drm_master, refcount); struct drm_magic_entry *pt, *next; struct drm_device *dev = master->minor->dev; +printk("Destroying master %p\n", master); list_del(&master->head); @@ -195,6 +197,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev, INIT_LIST_HEAD(&dev->ctxlist); INIT_LIST_HEAD(&dev->vmalist); INIT_LIST_HEAD(&dev->maplist); +printk("Initialize maplist for dev %p\n",dev); spin_lock_init(&dev->count_lock); spin_lock_init(&dev->drw_lock); ***************************************************************************** end of patch. This is the output, from drm/i915 insertion to drm removal, with my comments introduced by #. ***************************************************************************** [drm] Initialized drm 1.1.0 20060810 pci 0000:00:02.0: setting latency timer to 64 Initialize maplist for dev da02e800 pci 0000:00:02.0: irq 2302 for MSI/MSI-X [drm] Initialized i915 1.6.0 20080730 on minor 0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: for 0 entries. Creating new master dad0a8c0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: for 0 entries. Destroying master dad0a8c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: for 0 entries. Creating new master dad0a8c0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: for 0 entries. Destroying master dad0a8c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: for 0 entries. Creating new master dad0a8c0 drm_addmap_core, primary dev master dad0a8c0 No match in existing maps for offset 0. Reasons: dev da02e800 Setting the device lock at address dad0a8fc to dd09c000 drm_addmap_core:: Adding element da43a800 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master dad0a8c0 drm_addmap_core, primary dev master dad0a8c0 drm_addmap_core:: Adding element dad48dc0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master dad0a8c0 [drm:i915_report_and_clear_errors] *ERROR* Encountered page table error. [drm] Can't be cleared without device reset, disabling. [drm] PGTBL_ER: invalid command data PTE drm_addmap_core, primary dev master dad0a8c0 drm_addmap_core:: Adding element da8d88c0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master dad0a8c0 drm_addmap_core, primary dev master dad0a8c0 drm_addmap_core:: Adding element da9e6500 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master dad0a8c0 drm_addmap_core, primary dev master dad0a8c0 drm_addmap_core:: Adding element da8d8980 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master dad0a8c0 drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. dump maplist after file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. dump maplist after file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. mtrr: no MTRR for 20000000,10000000 found drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. Destroying master dad0a8c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. # # This new master is not the same as the prior master, which was dad0a8c0, so the error will not become apparent. # Creating new master da917140 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. Destroying master da917140 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. Creating new master da917140 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. Destroying master da917140 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 5 entries. Creating new master da917140 drm_addmap_core, primary dev master da917140 # # Although there are prior elements in the list, they don't match. The last entry would match, # but the masters are different. When they become the same, the error occurs. # No match in existing maps for offset 0. Reasons: nomatch at offsets 0/22020000 master 0 (dad0a8c0 da917140) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (dad0a8c0 da917140) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (dad0a8c0 da917140) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (dad0a8c0 da917140) type 0 drm_contains_lock 1 nomatch at offsets 0/dd09c000 master 0 (dad0a8c0 da917140) type 1 drm_contains_lock 1 dev da02e800 Setting the device lock at address da91717c to dd0d5000 drm_addmap_core:: Adding element da43ab00 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master da917140 drm_addmap_core, primary dev master da917140 drm_addmap_core:: Adding element da8d8f40 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master da917140 [drm:i915_report_and_clear_errors] *ERROR* Encountered page table error. [drm] Can't be cleared without device reset, disabling. [drm] PGTBL_ER: invalid command data PTE drm_addmap_core, primary dev master da917140 drm_addmap_core:: Adding element da43a580 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master da917140 drm_addmap_core, primary dev master da917140 drm_addmap_core:: Adding element da43a340 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master da917140 drm_addmap_core, primary dev master da917140 drm_addmap_core:: Adding element da1ddd00 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master da917140 drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. dump maplist after file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. dump maplist after file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. mtrr: no MTRR for 20000000,10000000 found drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. Destroying master da917140 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. # # This new master is different to any prior master, so the error will not become apparent. # Creating new master d6a06ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. Destroying master d6a06ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. Creating new master d6a06ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. Destroying master d6a06ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 10 entries. Creating new master d6a06ac0 drm_addmap_core, primary dev master d6a06ac0 No match in existing maps for offset 0. Reasons: nomatch at offsets 0/22020000 master 0 (da917140 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (da917140 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (da917140 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (da917140 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0d5000 master 0 (da917140 d6a06ac0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (dad0a8c0 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (dad0a8c0 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (dad0a8c0 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (dad0a8c0 d6a06ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd09c000 master 0 (dad0a8c0 d6a06ac0) type 1 drm_contains_lock 1 dev da02e800 Setting the device lock at address d6a06afc to dd0c2000 drm_addmap_core:: Adding element d7c2e700 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master d6a06ac0 drm_addmap_core, primary dev master d6a06ac0 drm_addmap_core:: Adding element d9d82bc0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master d6a06ac0 [drm:i915_report_and_clear_errors] *ERROR* Encountered page table error. [drm] Can't be cleared without device reset, disabling. [drm] PGTBL_ER: invalid command data PTE drm_addmap_core, primary dev master d6a06ac0 drm_addmap_core:: Adding element d7c88ec0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master d6a06ac0 drm_addmap_core, primary dev master d6a06ac0 drm_addmap_core:: Adding element cbd1c940 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master d6a06ac0 drm_addmap_core, primary dev master d6a06ac0 drm_addmap_core:: Adding element c240ea00 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master d6a06ac0 drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. dump maplist after file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. dump maplist after file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. mtrr: no MTRR for 20000000,10000000 found drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Destroying master d6a06ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Creating new master cedd62c0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Destroying master cedd62c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Creating new master cedd62c0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Destroying master cedd62c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 15 entries. Creating new master cedd62c0 drm_addmap_core, primary dev master cedd62c0 No match in existing maps for offset 0. Reasons: nomatch at offsets 0/22020000 master 0 (d6a06ac0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (d6a06ac0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (d6a06ac0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (d6a06ac0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0c2000 master 0 (d6a06ac0 cedd62c0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (da917140 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (da917140 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (da917140 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (da917140 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0d5000 master 0 (da917140 cedd62c0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (dad0a8c0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (dad0a8c0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (dad0a8c0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (dad0a8c0 cedd62c0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd09c000 master 0 (dad0a8c0 cedd62c0) type 1 drm_contains_lock 1 dev da02e800 Setting the device lock at address cedd62fc to dd0c6000 drm_addmap_core:: Adding element da0b92c0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd62c0 drm_addmap_core, primary dev master cedd62c0 drm_addmap_core:: Adding element d9e85f40 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd62c0 [drm:i915_report_and_clear_errors] *ERROR* Encountered page table error. [drm] Can't be cleared without device reset, disabling. [drm] PGTBL_ER: invalid command data PTE drm_addmap_core, primary dev master cedd62c0 drm_addmap_core:: Adding element d7c0aa40 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd62c0 drm_addmap_core, primary dev master cedd62c0 drm_addmap_core:: Adding element d7c0a440 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd62c0 drm_addmap_core, primary dev master cedd62c0 drm_addmap_core:: Adding element d7c0a900 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd62c0 drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. dump maplist after file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. dump maplist after file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. mtrr: no MTRR for 20000000,10000000 found drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. Destroying master cedd62c0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. # # This new master is different to any prior master, so the error will not become apparent. # Creating new master cedd6ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. Destroying master cedd6ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. Creating new master cedd6ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. Destroying master cedd6ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 20 entries. Creating new master cedd6ac0 drm_addmap_core, primary dev master cedd6ac0 No match in existing maps for offset 0. Reasons: nomatch at offsets 0/22020000 master 0 (cedd62c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (cedd62c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (cedd62c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (cedd62c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0c6000 master 0 (cedd62c0 cedd6ac0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (d6a06ac0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (d6a06ac0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (d6a06ac0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (d6a06ac0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0c2000 master 0 (d6a06ac0 cedd6ac0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (da917140 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (da917140 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (da917140 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (da917140 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd0d5000 master 0 (da917140 cedd6ac0) type 1 drm_contains_lock 1 nomatch at offsets 0/22020000 master 0 (dad0a8c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/23020000 master 0 (dad0a8c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/24100000 master 0 (dad0a8c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/30000000 master 0 (dad0a8c0 cedd6ac0) type 0 drm_contains_lock 1 nomatch at offsets 0/dd09c000 master 0 (dad0a8c0 cedd6ac0) type 1 drm_contains_lock 1 dev da02e800 Setting the device lock at address cedd6afc to dd0ca000 drm_addmap_core:: Adding element da43aa40 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd6ac0 drm_addmap_core, primary dev master cedd6ac0 drm_addmap_core:: Adding element dad48d00 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd6ac0 [drm:i915_report_and_clear_errors] *ERROR* Encountered page table error. [drm] Can't be cleared without device reset, disabling. [drm] PGTBL_ER: invalid command data PTE drm_addmap_core, primary dev master cedd6ac0 drm_addmap_core:: Adding element c0e944c0 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd6ac0 drm_addmap_core, primary dev master cedd6ac0 drm_addmap_core:: Adding element c0e94c00 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd6ac0 drm_addmap_core, primary dev master cedd6ac0 drm_addmap_core:: Adding element c0e94700 to maplist for dev da02e800 Normal return from drm_addmap_core, list master set to primary device master cedd6ac0 drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. dump maplist after file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. drm_open using minor dev da02e800 opencount 1 dump maplist at file open dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. drm_release releases minor dev da02e800, opencount 2 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. dump maplist after file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. mtrr: no MTRR for 20000000,10000000 found drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Destroying master cedd6ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Creating new master cedd6ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Destroying master cedd6ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Creating new master cedd6ac0 drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Destroying master cedd6ac0 drm_open using minor dev da02e800 opencount 0 dump maplist at file open dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. # # The new master created here is the same as a previously destroyed master. # Creating new master cedd6ac0 drm_addmap_core, primary dev master cedd6ac0 # # The "other" branch is taken, a previous map structure is used, and the path that doesn't set a hardware lock is taken. # dev da02e800 _DRM_SHM ioctl finds existing matching map entry da43aa40 master cedd6ac0 offset dd0ca000 size 2000 type 2 flags 20 handle dd0ca000 hw_lock 00000000 dev da02e800 Device lock at address cedd6afc is 00000000 list master cedd6ac0 primary dev master cedd6ac0 drm_lock has NULL hardware lock for 1 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 2 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 3 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 4 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 5 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 6 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 7 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 8 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 9 out of 10 times, primary at addr cedd6afc is 00000000. drm_lock has NULL hardware lock for 10 out of 10 times, primary at addr cedd6afc is 00000000. drm_release releases minor dev da02e800, opencount 1 dump maplist at file close dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. Destroying master cedd6ac0 dump maplist drm_exit invoked. dev da02e800: c0e94700 c0e94c00 c0e944c0 dad48d00 da43aa40 d7c0a900 d7c0a440 d7c0aa40 d9e85f40 da0b92c0 c240ea00 cbd1c940 d7c88ec0 d9d82bc0 d7c2e700 da1ddd00 da43a340 da43a580 da8d8f40 da43ab00 da8d8980 da9e6500 da8d88c0 dad48dc0 da43a800 for 25 entries. [drm] Module unloaded