diff options
Diffstat (limited to 'lib/debugobjects.c')
| -rw-r--r-- | lib/debugobjects.c | 20 | 
1 files changed, 14 insertions, 6 deletions
| diff --git a/lib/debugobjects.c b/lib/debugobjects.c index 37061ede8b81..bf2c8b1043d8 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -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;  }  /** | 
