Since really that's all it protects - legacy horror stories in
drm_bufs.c. Since I don't want to waste any more time on this I didn't
bother to actually look at what it protects in there, but it's at
least contained now.

v2: Move the spurious hunk to the right patch (Thierry).

Cc: Thierry Reding <thierry.reding at gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 drivers/gpu/drm/drm_bufs.c | 32 ++++++++++++++++----------------
 drivers/gpu/drm/drm_stub.c |  2 +-
 include/drm/drmP.h         |  2 +-
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
index edec31fe3fed..ef7f0199a0f1 100644
--- a/drivers/gpu/drm/drm_bufs.c
+++ b/drivers/gpu/drm/drm_bufs.c
@@ -656,13 +656,13 @@ int drm_addbufs_agp(struct drm_device * dev, struct 
drm_buf_desc * request)
                DRM_DEBUG("zone invalid\n");
                return -EINVAL;
        }
-       spin_lock(&dev->count_lock);
+       spin_lock(&dev->buf_lock);
        if (dev->buf_use) {
-               spin_unlock(&dev->count_lock);
+               spin_unlock(&dev->buf_lock);
                return -EBUSY;
        }
        atomic_inc(&dev->buf_alloc);
-       spin_unlock(&dev->count_lock);
+       spin_unlock(&dev->buf_lock);

        mutex_lock(&dev->struct_mutex);
        entry = &dma->bufs[order];
@@ -805,13 +805,13 @@ int drm_addbufs_pci(struct drm_device * dev, struct 
drm_buf_desc * request)
        page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0;
        total = PAGE_SIZE << page_order;

-       spin_lock(&dev->count_lock);
+       spin_lock(&dev->buf_lock);
        if (dev->buf_use) {
-               spin_unlock(&dev->count_lock);
+               spin_unlock(&dev->buf_lock);
                return -EBUSY;
        }
        atomic_inc(&dev->buf_alloc);
-       spin_unlock(&dev->count_lock);
+       spin_unlock(&dev->buf_lock);

        mutex_lock(&dev->struct_mutex);
        entry = &dma->bufs[order];
@@ -1015,13 +1015,13 @@ static int drm_addbufs_sg(struct drm_device * dev, 
struct drm_buf_desc * request
        if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
                return -EINVAL;

-       spin_lock(&dev->count_lock);
+       spin_lock(&dev->buf_lock);
        if (dev->buf_use) {
-               spin_unlock(&dev->count_lock);
+               spin_unlock(&dev->buf_lock);
                return -EBUSY;
        }
        atomic_inc(&dev->buf_alloc);
-       spin_unlock(&dev->count_lock);
+       spin_unlock(&dev->buf_lock);

        mutex_lock(&dev->struct_mutex);
        entry = &dma->bufs[order];
@@ -1175,7 +1175,7 @@ int drm_addbufs(struct drm_device *dev, void *data,
  * \param arg pointer to a drm_buf_info structure.
  * \return zero on success or a negative number on failure.
  *
- * Increments drm_device::buf_use while holding the drm_device::count_lock
+ * Increments drm_device::buf_use while holding the drm_device::buf_lock
  * lock, preventing of allocating more buffers after this call. Information
  * about each requested buffer is then copied into user space.
  */
@@ -1196,13 +1196,13 @@ int drm_infobufs(struct drm_device *dev, void *data,
        if (!dma)
                return -EINVAL;

-       spin_lock(&dev->count_lock);
+       spin_lock(&dev->buf_lock);
        if (atomic_read(&dev->buf_alloc)) {
-               spin_unlock(&dev->count_lock);
+               spin_unlock(&dev->buf_lock);
                return -EBUSY;
        }
        ++dev->buf_use;         /* Can't allocate more after this call */
-       spin_unlock(&dev->count_lock);
+       spin_unlock(&dev->buf_lock);

        for (i = 0, count = 0; i < DRM_MAX_ORDER + 1; i++) {
                if (dma->bufs[i].buf_count)
@@ -1381,13 +1381,13 @@ int drm_mapbufs(struct drm_device *dev, void *data,
        if (!dma)
                return -EINVAL;

-       spin_lock(&dev->count_lock);
+       spin_lock(&dev->buf_lock);
        if (atomic_read(&dev->buf_alloc)) {
-               spin_unlock(&dev->count_lock);
+               spin_unlock(&dev->buf_lock);
                return -EBUSY;
        }
        dev->buf_use++;         /* Can't allocate more after this call */
-       spin_unlock(&dev->count_lock);
+       spin_unlock(&dev->buf_lock);

        if (request->count >= dma->buf_count) {
                if ((dev->agp && (dma->flags & _DRM_DMA_USE_AGP))
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 6299c197bd6f..8de201fde4a6 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -441,7 +441,7 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
        INIT_LIST_HEAD(&dev->maplist);
        INIT_LIST_HEAD(&dev->vblank_event_list);

-       spin_lock_init(&dev->count_lock);
+       spin_lock_init(&dev->buf_lock);
        spin_lock_init(&dev->event_lock);
        mutex_init(&dev->struct_mutex);
        mutex_init(&dev->ctxlist_mutex);
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ee65c25e25d3..386745913d2a 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1079,7 +1079,6 @@ struct drm_device {

        /** \name Locks */
        /*@{ */
-       spinlock_t count_lock;          /**< For inuse, drm_device::open_count, 
drm_device::buf_use */
        struct mutex struct_mutex;      /**< For others */
        /*@} */

@@ -1088,6 +1087,7 @@ struct drm_device {
        int open_count;                 /**< Outstanding files open, protected 
by drm_global_lock. */
        atomic_t ioctl_count;           /**< Outstanding IOCTLs pending */
        atomic_t vma_count;             /**< Outstanding vma areas open */
+       spinlock_t buf_lock;            /**< For drm_device::buf_use and a few 
other things. */
        int buf_use;                    /**< Buffers in use -- cannot alloc */
        atomic_t buf_alloc;             /**< Buffer allocation in progress */
        /*@} */
-- 
1.8.4.3

Reply via email to