cmb_area
spin_lock(&cmb_area.lock);
if (!list_empty(&cmb_area.list))
cmf_activate(cmb_area.mem, CMF_ON);
spin_unlock(&cmb_area.lock);
static struct cmb_area cmb_area = {
.lock = __SPIN_LOCK_UNLOCKED(cmb_area.lock),
.list = LIST_HEAD_INIT(cmb_area.list),
module_param_named(maxchannels, cmb_area.num_channels, uint, 0444);
cmb = cmb_area.mem;
list_for_each_entry(node, &cmb_area.list, cmb_list) {
if (cmb - cmb_area.mem >= cmb_area.num_channels) {
spin_lock(&cmb_area.lock);
if (!cmb_area.mem) {
size = sizeof(struct cmb) * cmb_area.num_channels;
WARN_ON(!list_empty(&cmb_area.list));
spin_unlock(&cmb_area.lock);
spin_lock(&cmb_area.lock);
if (cmb_area.mem) {
cmb_area.mem = mem;
cmf_activate(cmb_area.mem, CMF_ON);
spin_unlock(&cmb_area.lock);
spin_lock(&cmb_area.lock);
if (list_empty(&cmb_area.list)) {
size = sizeof(struct cmb) * cmb_area.num_channels;
free_pages((unsigned long)cmb_area.mem, get_order(size));
cmb_area.mem = NULL;
spin_unlock(&cmb_area.lock);
offset = mme ? (struct cmb *)cmb_data->hw_block - cmb_area.mem : 0;
spin_lock(&cmb_area.lock);
if (list_empty(&cmb_area.list))
list_add_tail(&cdev->private->cmb_list, &cmb_area.list);
spin_unlock(&cmb_area.lock);
spin_unlock(&cmb_area.lock);
spin_lock(&cmb_area.lock);
if (list_empty(&cmb_area.list))
spin_unlock(&cmb_area.lock);