EDAC/device: Rework error logging API
[linux-2.6-microblaze.git] / drivers / edac / edac_device.c
index 65cf2b9..8c4d947 100644 (file)
@@ -555,12 +555,16 @@ static inline int edac_device_get_panic_on_ue(struct edac_device_ctl_info
        return edac_dev->panic_on_ue;
 }
 
-void edac_device_handle_ce(struct edac_device_ctl_info *edac_dev,
-                       int inst_nr, int block_nr, const char *msg)
+void edac_device_handle_ce_count(struct edac_device_ctl_info *edac_dev,
+                                unsigned int count, int inst_nr, int block_nr,
+                                const char *msg)
 {
        struct edac_device_instance *instance;
        struct edac_device_block *block = NULL;
 
+       if (!count)
+               return;
+
        if ((inst_nr >= edac_dev->nr_instances) || (inst_nr < 0)) {
                edac_device_printk(edac_dev, KERN_ERR,
                                "INTERNAL ERROR: 'instance' out of range "
@@ -582,27 +586,31 @@ void edac_device_handle_ce(struct edac_device_ctl_info *edac_dev,
 
        if (instance->nr_blocks > 0) {
                block = instance->blocks + block_nr;
-               block->counters.ce_count++;
+               block->counters.ce_count += count;
        }
 
        /* Propagate the count up the 'totals' tree */
-       instance->counters.ce_count++;
-       edac_dev->counters.ce_count++;
+       instance->counters.ce_count += count;
+       edac_dev->counters.ce_count += count;
 
        if (edac_device_get_log_ce(edac_dev))
                edac_device_printk(edac_dev, KERN_WARNING,
-                               "CE: %s instance: %s block: %s '%s'\n",
-                               edac_dev->ctl_name, instance->name,
-                               block ? block->name : "N/A", msg);
+                                  "CE: %s instance: %s block: %s count: %d '%s'\n",
+                                  edac_dev->ctl_name, instance->name,
+                                  block ? block->name : "N/A", count, msg);
 }
-EXPORT_SYMBOL_GPL(edac_device_handle_ce);
+EXPORT_SYMBOL_GPL(edac_device_handle_ce_count);
 
-void edac_device_handle_ue(struct edac_device_ctl_info *edac_dev,
-                       int inst_nr, int block_nr, const char *msg)
+void edac_device_handle_ue_count(struct edac_device_ctl_info *edac_dev,
+                                unsigned int count, int inst_nr, int block_nr,
+                                const char *msg)
 {
        struct edac_device_instance *instance;
        struct edac_device_block *block = NULL;
 
+       if (!count)
+               return;
+
        if ((inst_nr >= edac_dev->nr_instances) || (inst_nr < 0)) {
                edac_device_printk(edac_dev, KERN_ERR,
                                "INTERNAL ERROR: 'instance' out of range "
@@ -624,22 +632,22 @@ void edac_device_handle_ue(struct edac_device_ctl_info *edac_dev,
 
        if (instance->nr_blocks > 0) {
                block = instance->blocks + block_nr;
-               block->counters.ue_count++;
+               block->counters.ue_count += count;
        }
 
        /* Propagate the count up the 'totals' tree */
-       instance->counters.ue_count++;
-       edac_dev->counters.ue_count++;
+       instance->counters.ue_count += count;
+       edac_dev->counters.ue_count += count;
 
        if (edac_device_get_log_ue(edac_dev))
                edac_device_printk(edac_dev, KERN_EMERG,
-                               "UE: %s instance: %s block: %s '%s'\n",
-                               edac_dev->ctl_name, instance->name,
-                               block ? block->name : "N/A", msg);
+                                  "UE: %s instance: %s block: %s count: %d '%s'\n",
+                                  edac_dev->ctl_name, instance->name,
+                                  block ? block->name : "N/A", count, msg);
 
        if (edac_device_get_panic_on_ue(edac_dev))
-               panic("EDAC %s: UE instance: %s block %s '%s'\n",
-                       edac_dev->ctl_name, instance->name,
-                       block ? block->name : "N/A", msg);
+               panic("EDAC %s: UE instance: %s block %s count: %d '%s'\n",
+                     edac_dev->ctl_name, instance->name,
+                     block ? block->name : "N/A", count, msg);
 }
-EXPORT_SYMBOL_GPL(edac_device_handle_ue);
+EXPORT_SYMBOL_GPL(edac_device_handle_ue_count);