regulator: Fix check of unsigned return value and transmit errors in wm831x_gp_ldo_ge...
[safe/jmp/linux-2.6] / drivers / edac / edac_device.c
index ca9113e..d5e13c9 100644 (file)
@@ -356,7 +356,6 @@ static void complete_edac_device_list_del(struct rcu_head *head)
 
        edac_dev = container_of(head, struct edac_device_ctl_info, rcu);
        INIT_LIST_HEAD(&edac_dev->link);
-       complete(&edac_dev->removal_complete);
 }
 
 /*
@@ -369,10 +368,8 @@ static void del_edac_device_from_global_list(struct edac_device_ctl_info
                                                *edac_device)
 {
        list_del_rcu(&edac_device->link);
-
-       init_completion(&edac_device->removal_complete);
        call_rcu(&edac_device->rcu, complete_edac_device_list_del);
-       wait_for_completion(&edac_device->removal_complete);
+       rcu_barrier();
 }
 
 /*
@@ -389,7 +386,7 @@ static void del_edac_device_from_global_list(struct edac_device_ctl_info
  */
 static void edac_device_workq_function(struct work_struct *work_req)
 {
-       struct delayed_work *d_work = (struct delayed_work *)work_req;
+       struct delayed_work *d_work = to_delayed_work(work_req);
        struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work);
 
        mutex_lock(&device_ctls_mutex);
@@ -490,6 +487,20 @@ void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
        mutex_unlock(&device_ctls_mutex);
 }
 
+/*
+ * edac_device_alloc_index: Allocate a unique device index number
+ *
+ * Return:
+ *     allocated index number
+ */
+int edac_device_alloc_index(void)
+{
+       static atomic_t device_indexes = ATOMIC_INIT(0);
+
+       return atomic_inc_return(&device_indexes) - 1;
+}
+EXPORT_SYMBOL_GPL(edac_device_alloc_index);
+
 /**
  * edac_device_add_device: Insert the 'edac_dev' structure into the
  * edac_device global list and create sysfs entries associated with