static struct ttm_pool_type global_dma32_write_combined[MAX_ORDER];
 static struct ttm_pool_type global_dma32_uncached[MAX_ORDER];
 
-static spinlock_t shrinker_lock;
+static struct mutex shrinker_lock;
 static struct list_head shrinker_list;
 static struct shrinker mm_shrinker;
 
        spin_lock_init(&pt->lock);
        INIT_LIST_HEAD(&pt->pages);
 
-       spin_lock(&shrinker_lock);
+       mutex_lock(&shrinker_lock);
        list_add_tail(&pt->shrinker_list, &shrinker_list);
-       spin_unlock(&shrinker_lock);
+       mutex_unlock(&shrinker_lock);
 }
 
 /* Remove a pool_type from the global shrinker list and free all pages */
 {
        struct page *p, *tmp;
 
-       spin_lock(&shrinker_lock);
+       mutex_lock(&shrinker_lock);
        list_del(&pt->shrinker_list);
-       spin_unlock(&shrinker_lock);
+       mutex_unlock(&shrinker_lock);
 
        list_for_each_entry_safe(p, tmp, &pt->pages, lru)
                ttm_pool_free_page(pt->pool, pt->caching, pt->order, p);
        unsigned int num_freed;
        struct page *p;
 
-       spin_lock(&shrinker_lock);
+       mutex_lock(&shrinker_lock);
        pt = list_first_entry(&shrinker_list, typeof(*pt), shrinker_list);
 
        p = ttm_pool_type_take(pt);
        }
 
        list_move_tail(&pt->shrinker_list, &shrinker_list);
-       spin_unlock(&shrinker_lock);
+       mutex_unlock(&shrinker_lock);
 
        return num_freed;
 }
 {
        unsigned int i;
 
-       spin_lock(&shrinker_lock);
+       mutex_lock(&shrinker_lock);
 
        seq_puts(m, "\t ");
        for (i = 0; i < MAX_ORDER; ++i)
        seq_printf(m, "\ntotal\t: %8lu of %8lu\n",
                   atomic_long_read(&allocated_pages), page_pool_size);
 
-       spin_unlock(&shrinker_lock);
+       mutex_unlock(&shrinker_lock);
 
        return 0;
 }
        if (!page_pool_size)
                page_pool_size = num_pages;
 
-       spin_lock_init(&shrinker_lock);
+       mutex_init(&shrinker_lock);
        INIT_LIST_HEAD(&shrinker_list);
 
        for (i = 0; i < MAX_ORDER; ++i) {