return -ENOMEM;
        }
 
+       mutex_init(&chlist->lock);
+
        return 0;
 }
 
        unsigned int max_channels = host->info->nb_channels;
        unsigned int index;
 
+       mutex_lock(&chlist->lock);
+
        index = find_first_zero_bit(chlist->allocated_channels, max_channels);
        if (index >= max_channels) {
+               mutex_unlock(&chlist->lock);
                dev_err(host->dev, "failed to find free channel\n");
                return NULL;
        }
 
        set_bit(index, chlist->allocated_channels);
 
+       mutex_unlock(&chlist->lock);
+
        return &chlist->channels[index];
 }
 
 
 
 #include <linux/io.h>
 #include <linux/kref.h>
+#include <linux/mutex.h>
 
 #include "cdma.h"
 
 
 struct host1x_channel_list {
        struct host1x_channel *channels;
+
+       struct mutex lock;
        unsigned long *allocated_channels;
 };