From: <jb...@ke...> - 2008-05-22 17:35:43
|
linux-core/drm_bo.c | 6 ++++-- shared-core/i915_init.c | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) New commits: commit 1cde3cc1ac467eb0527ed55127cf3bb983afde80 Author: Hong Liu <hon...@in...> Date: Mon May 19 17:06:40 2008 +0800 i915: check dummy page before freeing The dummy read page will point to NULL if drm_bo_driver_init failed at firstopen (modeset is not enabled), and will cause kernel oops at subsequent drm_lastclose call, so be sure to check it. diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c index 0470825..f2d3ceb 100644 --- a/linux-core/drm_bo.c +++ b/linux-core/drm_bo.c @@ -2361,10 +2361,12 @@ int drm_bo_driver_finish(struct drm_device *dev) if (list_empty(&bm->unfenced)) DRM_DEBUG("Unfenced list was clean\n"); + if (bm->dummy_read_page) { #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) - ClearPageReserved(bm->dummy_read_page); + ClearPageReserved(bm->dummy_read_page); #endif - __free_page(bm->dummy_read_page); + __free_page(bm->dummy_read_page); + } out: mutex_unlock(&dev->struct_mutex); commit e8320a716d97504d91299d20d640b847c86e4b17 Author: Hong Liu <hon...@in...> Date: Mon May 19 17:06:38 2008 +0800 i915: init bo mm at driver init only when modeset=1 To avoid bo memory manager being inited twice, it will be called at firstopen when modeset is not enabled. diff --git a/shared-core/i915_init.c b/shared-core/i915_init.c index 98908a5..f5fe5ba 100644 --- a/shared-core/i915_init.c +++ b/shared-core/i915_init.c @@ -353,16 +353,17 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) #endif #endif - /* - * Initialize the memory manager for local and AGP space - */ - ret = drm_bo_driver_init(dev); - if (ret) { - DRM_ERROR("fail to init memory manager for local & AGP space\n"); - goto out_rmmap; - } - if (drm_core_check_feature(dev, DRIVER_MODESET)) { + /* + * Initialize the memory manager for local and AGP space + */ + ret = drm_bo_driver_init(dev); + if (ret) { + DRM_ERROR("fail to init memory manager for " + "local & AGP space\n"); + goto out_rmmap; + } + ret = i915_load_modeset_init(dev); if (ret < 0) { DRM_ERROR("failed to init modeset\n"); |