]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - lib/debugobjects.c
arm: imx6: defconfig: update tx6 defconfigs
[karo-tx-linux.git] / lib / debugobjects.c
index 37061ede8b8124e7fa59cd0963ede7ba27979007..bf2c8b1043d8bb5a8b44d19a139842ffb5514067 100644 (file)
@@ -381,19 +381,21 @@ void debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr)
  * debug_object_activate - debug checks when an object is activated
  * @addr:      address of the object
  * @descr:     pointer to an object specific debug description structure
+ * Returns 0 for success, -EINVAL for check failed.
  */
-void debug_object_activate(void *addr, struct debug_obj_descr *descr)
+int debug_object_activate(void *addr, struct debug_obj_descr *descr)
 {
        enum debug_obj_state state;
        struct debug_bucket *db;
        struct debug_obj *obj;
        unsigned long flags;
+       int ret;
        struct debug_obj o = { .object = addr,
                               .state = ODEBUG_STATE_NOTAVAILABLE,
                               .descr = descr };
 
        if (!debug_objects_enabled)
-               return;
+               return 0;
 
        db = get_bucket((unsigned long) addr);
 
@@ -405,23 +407,26 @@ void debug_object_activate(void *addr, struct debug_obj_descr *descr)
                case ODEBUG_STATE_INIT:
                case ODEBUG_STATE_INACTIVE:
                        obj->state = ODEBUG_STATE_ACTIVE;
+                       ret = 0;
                        break;
 
                case ODEBUG_STATE_ACTIVE:
                        debug_print_object(obj, "activate");
                        state = obj->state;
                        raw_spin_unlock_irqrestore(&db->lock, flags);
-                       debug_object_fixup(descr->fixup_activate, addr, state);
-                       return;
+                       ret = debug_object_fixup(descr->fixup_activate, addr, state);
+                       return ret ? -EINVAL : 0;
 
                case ODEBUG_STATE_DESTROYED:
                        debug_print_object(obj, "activate");
+                       ret = -EINVAL;
                        break;
                default:
+                       ret = 0;
                        break;
                }
                raw_spin_unlock_irqrestore(&db->lock, flags);
-               return;
+               return ret;
        }
 
        raw_spin_unlock_irqrestore(&db->lock, flags);
@@ -431,8 +436,11 @@ void debug_object_activate(void *addr, struct debug_obj_descr *descr)
         * true or not.
         */
        if (debug_object_fixup(descr->fixup_activate, addr,
-                          ODEBUG_STATE_NOTAVAILABLE))
+                          ODEBUG_STATE_NOTAVAILABLE)) {
                debug_print_object(&o, "activate");
+               return -EINVAL;
+       }
+       return 0;
 }
 
 /**