From: <ai...@ke...> - 2007-03-27 08:28:25
|
linux-core/drm_fops.c | 5 ++++- linux-core/i915_drv.c | 1 + shared-core/i915_dma.c | 11 ++++++++--- shared-core/i915_drv.h | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) New commits: diff-tree 81b811da376fed5363f25e82e5285455df3e8157 (from 72a1190f6d9acea5fb789bec706c842604954049) Author: Dave Airlie <ai...@li...> Date: Tue Mar 27 18:01:31 2007 +1000 drm/i915: set the bo up at firstopen time not after DMA init This is required to use TTM to allocate the ring buffer. diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c index 56e5998..7fdb083 100644 --- a/linux-core/i915_drv.c +++ b/linux-core/i915_drv.c @@ -79,6 +79,7 @@ static struct drm_driver driver = { DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL | DRIVER_IRQ_VBL2, .load = i915_driver_load, + .firstopen = i915_driver_firstopen, .lastclose = i915_driver_lastclose, .preclose = i915_driver_preclose, .device_is_agp = i915_driver_device_is_agp, diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index c8b7e58..9053f54 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -195,9 +195,6 @@ static int i915_initialize(drm_device_t I915_WRITE(0x02080, dev_priv->dma_status_page); DRM_DEBUG("Enabled hardware status page\n"); dev->dev_private = (void *)dev_priv; -#ifdef I915_HAVE_BUFFER - drm_bo_driver_init(dev); -#endif return 0; } @@ -949,3 +946,11 @@ int i915_driver_device_is_agp(drm_device { return 1; } + +int i915_driver_firstopen(struct drm_device *dev) +{ +#ifdef I915_HAVE_BUFFER + drm_bo_driver_init(dev); +#endif + return 0; +} diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 662ffad..e8a7be2 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -153,7 +153,7 @@ extern long i915_compat_ioctl(struct fil extern void i915_emit_breadcrumb(drm_device_t *dev); extern void i915_dispatch_flip(drm_device_t * dev, int pipes, int sync); extern int i915_emit_mi_flush(drm_device_t *dev, uint32_t flush); - +extern int i915_driver_firstopen(struct drm_device *dev); /* i915_irq.c */ extern int i915_irq_emit(DRM_IOCTL_ARGS); diff-tree 72a1190f6d9acea5fb789bec706c842604954049 (from 674cefd4fe4b537a20a10edcb4ec5df55facca8e) Author: Dave Airlie <ai...@li...> Date: Tue Mar 27 17:59:30 2007 +1000 drm/ttm: make sure dev_mapping is set-up for the first opener of the drm This was causing an oops in my miniglx code to try and use a TTM-only setup. diff --git a/linux-core/drm_fops.c b/linux-core/drm_fops.c index 3521c09..d400a4d 100644 --- a/linux-core/drm_fops.c +++ b/linux-core/drm_fops.c @@ -154,10 +154,13 @@ int drm_open(struct inode *inode, struct spin_lock(&dev->count_lock); if (!dev->open_count++) { spin_unlock(&dev->count_lock); - return drm_setup(dev); + retcode = drm_setup(dev); + goto out; } spin_unlock(&dev->count_lock); } + + out: mutex_lock(&dev->struct_mutex); BUG_ON((dev->dev_mapping != NULL) && (dev->dev_mapping != inode->i_mapping)); |