Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6

* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm/ttm: Read buffer overflow
drm/radeon: Read buffer overflow
drm/ttm: Fix a sync object leak.
drm/radeon/kms: fix memory leak in radeon_driver_load_kms
drm/radeon/kms: fix nomodeset.
drm/ttm: Fix a potential comparison of structs.
drm/radeon/kms: fix rv515 VRAM initialisation.
drm/radeon: add some new r7xx pci ids
drm: Catch stop possible NULL pointer reference
drm: Small logic fix in drm_mode_setcrtc

+33 -18
+1 -1
drivers/gpu/drm/drm_crtc.c
··· 1461 1461 goto out; 1462 1462 } 1463 1463 1464 - if (crtc_req->count_connectors > 0 && !mode && !fb) { 1464 + if (crtc_req->count_connectors > 0 && (!mode || !fb)) { 1465 1465 DRM_DEBUG("Count connectors is %d but no mode or fb set\n", 1466 1466 crtc_req->count_connectors); 1467 1467 ret = -EINVAL;
+4 -2
drivers/gpu/drm/drm_crtc_helper.c
··· 706 706 struct drm_encoder **save_encoders, *new_encoder; 707 707 struct drm_framebuffer *old_fb = NULL; 708 708 bool save_enabled; 709 - bool mode_changed = false; 710 - bool fb_changed = false; 709 + bool mode_changed = false; /* if true do a full mode set */ 710 + bool fb_changed = false; /* if true and !mode_changed just do a flip */ 711 711 struct drm_connector *connector; 712 712 int count = 0, ro, fail = 0; 713 713 struct drm_crtc_helper_funcs *crtc_funcs; ··· 757 757 /* If we have no fb then treat it as a full mode set */ 758 758 if (set->crtc->fb == NULL) { 759 759 DRM_DEBUG("crtc has no fb, full mode set\n"); 760 + mode_changed = true; 761 + } else if (set->fb == NULL) { 760 762 mode_changed = true; 761 763 } else if ((set->fb->bits_per_pixel != 762 764 set->crtc->fb->bits_per_pixel) ||
+2 -1
drivers/gpu/drm/radeon/r100.c
··· 722 722 unsigned idx) 723 723 { 724 724 struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx]; 725 - uint32_t header = ib_chunk->kdata[idx]; 725 + uint32_t header; 726 726 727 727 if (idx >= ib_chunk->length_dw) { 728 728 DRM_ERROR("Can not parse packet at %d after CS end %d !\n", 729 729 idx, ib_chunk->length_dw); 730 730 return -EINVAL; 731 731 } 732 + header = ib_chunk->kdata[idx]; 732 733 pkt->idx = idx; 733 734 pkt->type = CP_PACKET_GET_TYPE(header); 734 735 pkt->count = CP_PACKET_GET_COUNT(header);
+8 -9
drivers/gpu/drm/radeon/radeon_drv.c
··· 318 318 driver = &driver_old; 319 319 driver->num_ioctls = radeon_max_ioctl; 320 320 #if defined(CONFIG_DRM_RADEON_KMS) 321 + #ifdef CONFIG_VGA_CONSOLE 322 + if (vgacon_text_force() && radeon_modeset == -1) { 323 + DRM_INFO("VGACON disable radeon kernel modesetting.\n"); 324 + driver = &driver_old; 325 + driver->driver_features &= ~DRIVER_MODESET; 326 + radeon_modeset = 0; 327 + } 328 + #endif 321 329 /* if enabled by default */ 322 330 if (radeon_modeset == -1) { 323 331 DRM_INFO("radeon default to kernel modesetting.\n"); ··· 337 329 driver->driver_features |= DRIVER_MODESET; 338 330 driver->num_ioctls = radeon_max_kms_ioctl; 339 331 } 340 - 341 332 /* if the vga console setting is enabled still 342 333 * let modprobe override it */ 343 - #ifdef CONFIG_VGA_CONSOLE 344 - if (vgacon_text_force() && radeon_modeset == -1) { 345 - DRM_INFO("VGACON disable radeon kernel modesetting.\n"); 346 - driver = &driver_old; 347 - driver->driver_features &= ~DRIVER_MODESET; 348 - radeon_modeset = 0; 349 - } 350 - #endif 351 334 #endif 352 335 return drm_init(driver); 353 336 }
+2
drivers/gpu/drm/radeon/radeon_kms.c
··· 58 58 if (r) { 59 59 DRM_ERROR("Failed to initialize radeon, disabling IOCTL\n"); 60 60 radeon_device_fini(rdev); 61 + kfree(rdev); 62 + dev->dev_private = NULL; 61 63 return r; 62 64 } 63 65 return 0;
+1
drivers/gpu/drm/radeon/rv515.c
··· 370 370 371 371 rv515_vram_get_type(rdev); 372 372 373 + r100_vram_init_sizes(rdev); 373 374 /* FIXME: we should enforce default clock in case GPU is not in 374 375 * default setup 375 376 */
+6 -1
drivers/gpu/drm/ttm/ttm_bo.c
··· 1182 1182 1183 1183 int ttm_bo_clean_mm(struct ttm_bo_device *bdev, unsigned mem_type) 1184 1184 { 1185 - struct ttm_mem_type_manager *man = &bdev->man[mem_type]; 1185 + struct ttm_mem_type_manager *man; 1186 1186 int ret = -EINVAL; 1187 1187 1188 1188 if (mem_type >= TTM_NUM_MEM_TYPES) { 1189 1189 printk(KERN_ERR TTM_PFX "Illegal memory type %d\n", mem_type); 1190 1190 return ret; 1191 1191 } 1192 + man = &bdev->man[mem_type]; 1192 1193 1193 1194 if (!man->has_type) { 1194 1195 printk(KERN_ERR TTM_PFX "Trying to take down uninitialized " ··· 1575 1574 spin_unlock(&bo->lock); 1576 1575 driver->sync_obj_unref(&sync_obj); 1577 1576 driver->sync_obj_unref(&tmp_obj); 1577 + spin_lock(&bo->lock); 1578 + } else { 1579 + spin_unlock(&bo->lock); 1580 + driver->sync_obj_unref(&sync_obj); 1578 1581 spin_lock(&bo->lock); 1579 1582 } 1580 1583 }
+4 -4
drivers/gpu/drm/ttm/ttm_bo_util.c
··· 150 150 #ifdef CONFIG_X86 151 151 dst = kmap_atomic_prot(d, KM_USER0, prot); 152 152 #else 153 - if (prot != PAGE_KERNEL) 153 + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) 154 154 dst = vmap(&d, 1, 0, prot); 155 155 else 156 156 dst = kmap(d); ··· 163 163 #ifdef CONFIG_X86 164 164 kunmap_atomic(dst, KM_USER0); 165 165 #else 166 - if (prot != PAGE_KERNEL) 166 + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) 167 167 vunmap(dst); 168 168 else 169 169 kunmap(d); ··· 186 186 #ifdef CONFIG_X86 187 187 src = kmap_atomic_prot(s, KM_USER0, prot); 188 188 #else 189 - if (prot != PAGE_KERNEL) 189 + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) 190 190 src = vmap(&s, 1, 0, prot); 191 191 else 192 192 src = kmap(s); ··· 199 199 #ifdef CONFIG_X86 200 200 kunmap_atomic(src, KM_USER0); 201 201 #else 202 - if (prot != PAGE_KERNEL) 202 + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) 203 203 vunmap(src); 204 204 else 205 205 kunmap(s);
+5
include/drm/drm_pciids.h
··· 257 257 {0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \ 258 258 {0x1002, 0x94A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 259 259 {0x1002, 0x94A1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 260 + {0x1002, 0x94A3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 260 261 {0x1002, 0x94B1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ 261 262 {0x1002, 0x94B3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ 263 + {0x1002, 0x94B4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ 262 264 {0x1002, 0x94B5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_NEW_MEMMAP}, \ 265 + {0x1002, 0x94B9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 263 266 {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ 264 267 {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ 265 268 {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ ··· 291 288 {0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ 292 289 {0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ 293 290 {0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 291 + {0x1002, 0x9495, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ 294 292 {0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ 295 293 {0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ 296 294 {0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \ ··· 329 325 {0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 330 326 {0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 331 327 {0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 328 + {0x1002, 0x9557, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 332 329 {0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \ 333 330 {0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 334 331 {0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \