Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
Browse files Browse the repository at this point in the history
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
  [S390] update default configuration.
  [S390] omit frame pointers on s390 when possible
  [S390] Use tape_generic_offline directly.
  [S390] /proc/stat idle field for idle cpus
  [S390] appldata: avoid deadlock with appldata_mem
  [S390] ipl: fix compile breakage
  • Loading branch information
Linus Torvalds committed Apr 24, 2009
2 parents 12bac70 + e655dc8 commit 58be18c
Show file tree
Hide file tree
Showing 12 changed files with 104 additions and 50 deletions.
32 changes: 16 additions & 16 deletions arch/s390/appldata/appldata_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ static DECLARE_WORK(appldata_work, appldata_work_fn);
/*
* Ops list
*/
static DEFINE_SPINLOCK(appldata_ops_lock);
static DEFINE_MUTEX(appldata_ops_mutex);
static LIST_HEAD(appldata_ops_list);


Expand Down Expand Up @@ -129,14 +129,14 @@ static void appldata_work_fn(struct work_struct *work)

i = 0;
get_online_cpus();
spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
list_for_each(lh, &appldata_ops_list) {
ops = list_entry(lh, struct appldata_ops, list);
if (ops->active == 1) {
ops->callback(ops->data);
}
}
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
put_online_cpus();
}

Expand Down Expand Up @@ -338,23 +338,23 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
struct list_head *lh;

found = 0;
spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
list_for_each(lh, &appldata_ops_list) {
tmp_ops = list_entry(lh, struct appldata_ops, list);
if (&tmp_ops->ctl_table[2] == ctl) {
found = 1;
}
}
if (!found) {
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
return -ENODEV;
}
ops = ctl->data;
if (!try_module_get(ops->owner)) { // protect this function
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
return -ENODEV;
}
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);

if (!*lenp || *ppos) {
*lenp = 0;
Expand All @@ -378,11 +378,11 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
return -EFAULT;
}

spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
if ((buf[0] == '1') && (ops->active == 0)) {
// protect work queue callback
if (!try_module_get(ops->owner)) {
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
module_put(ops->owner);
return -ENODEV;
}
Expand All @@ -407,7 +407,7 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
"failed with rc=%d\n", ops->name, rc);
module_put(ops->owner);
}
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
out:
*lenp = len;
*ppos += len;
Expand All @@ -433,9 +433,9 @@ int appldata_register_ops(struct appldata_ops *ops)
if (!ops->ctl_table)
return -ENOMEM;

spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
list_add(&ops->list, &appldata_ops_list);
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);

ops->ctl_table[0].procname = appldata_proc_name;
ops->ctl_table[0].maxlen = 0;
Expand All @@ -452,9 +452,9 @@ int appldata_register_ops(struct appldata_ops *ops)
goto out;
return 0;
out:
spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
list_del(&ops->list);
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
kfree(ops->ctl_table);
return -ENOMEM;
}
Expand All @@ -466,9 +466,9 @@ int appldata_register_ops(struct appldata_ops *ops)
*/
void appldata_unregister_ops(struct appldata_ops *ops)
{
spin_lock(&appldata_ops_lock);
mutex_lock(&appldata_ops_mutex);
list_del(&ops->list);
spin_unlock(&appldata_ops_lock);
mutex_unlock(&appldata_ops_mutex);
unregister_sysctl_table(ops->sysctl_header);
kfree(ops->ctl_table);
}
Expand Down
2 changes: 1 addition & 1 deletion arch/s390/appldata/appldata_mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ static void appldata_get_mem_data(void *data)
{
/*
* don't put large structures on the stack, we are
* serialized through the appldata_ops_lock and can use static
* serialized through the appldata_ops_mutex and can use static
*/
static struct sysinfo val;
unsigned long ev[NR_VM_EVENT_ITEMS];
Expand Down
Loading

0 comments on commit 58be18c

Please sign in to comment.