linux/lib/debugobjects.c
<<
>>
Prefs
   1/*
   2 * Generic infrastructure for lifetime debugging of objects.
   3 *
   4 * Started by Thomas Gleixner
   5 *
   6 * Copyright (C) 2008, Thomas Gleixner <tglx@linutronix.de>
   7 *
   8 * For licencing details see kernel-base/COPYING
   9 */
  10
  11#define pr_fmt(fmt) "ODEBUG: " fmt
  12
  13#include <linux/debugobjects.h>
  14#include <linux/interrupt.h>
  15#include <linux/sched.h>
  16#include <linux/seq_file.h>
  17#include <linux/debugfs.h>
  18#include <linux/slab.h>
  19#include <linux/hash.h>
  20
  21#define ODEBUG_HASH_BITS        14
  22#define ODEBUG_HASH_SIZE        (1 << ODEBUG_HASH_BITS)
  23
  24#define ODEBUG_POOL_SIZE        1024
  25#define ODEBUG_POOL_MIN_LEVEL   256
  26
  27#define ODEBUG_CHUNK_SHIFT      PAGE_SHIFT
  28#define ODEBUG_CHUNK_SIZE       (1 << ODEBUG_CHUNK_SHIFT)
  29#define ODEBUG_CHUNK_MASK       (~(ODEBUG_CHUNK_SIZE - 1))
  30
  31struct debug_bucket {
  32        struct hlist_head       list;
  33        raw_spinlock_t          lock;
  34};
  35
  36static struct debug_bucket      obj_hash[ODEBUG_HASH_SIZE];
  37
  38static struct debug_obj         obj_static_pool[ODEBUG_POOL_SIZE] __initdata;
  39
  40static DEFINE_RAW_SPINLOCK(pool_lock);
  41
  42static HLIST_HEAD(obj_pool);
  43
  44static int                      obj_pool_min_free = ODEBUG_POOL_SIZE;
  45static int                      obj_pool_free = ODEBUG_POOL_SIZE;
  46static int                      obj_pool_used;
  47static int                      obj_pool_max_used;
  48static struct kmem_cache        *obj_cache;
  49
  50static int                      debug_objects_maxchain __read_mostly;
  51static int                      debug_objects_fixups __read_mostly;
  52static int                      debug_objects_warnings __read_mostly;
  53static int                      debug_objects_enabled __read_mostly
  54                                = CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT;
  55
  56static struct debug_obj_descr   *descr_test  __read_mostly;
  57
  58static void free_obj_work(struct work_struct *work);
  59static DECLARE_WORK(debug_obj_work, free_obj_work);
  60
  61static int __init enable_object_debug(char *str)
  62{
  63        debug_objects_enabled = 1;
  64        return 0;
  65}
  66
  67static int __init disable_object_debug(char *str)
  68{
  69        debug_objects_enabled = 0;
  70        return 0;
  71}
  72
  73early_param("debug_objects", enable_object_debug);
  74early_param("no_debug_objects", disable_object_debug);
  75
  76static const char *obj_states[ODEBUG_STATE_MAX] = {
  77        [ODEBUG_STATE_NONE]             = "none",
  78        [ODEBUG_STATE_INIT]             = "initialized",
  79        [ODEBUG_STATE_INACTIVE]         = "inactive",
  80        [ODEBUG_STATE_ACTIVE]           = "active",
  81        [ODEBUG_STATE_DESTROYED]        = "destroyed",
  82        [ODEBUG_STATE_NOTAVAILABLE]     = "not available",
  83};
  84
  85static void fill_pool(void)
  86{
  87        gfp_t gfp = GFP_ATOMIC | __GFP_NORETRY | __GFP_NOWARN;
  88        struct debug_obj *new;
  89        unsigned long flags;
  90
  91        if (likely(obj_pool_free >= ODEBUG_POOL_MIN_LEVEL))
  92                return;
  93
  94        if (unlikely(!obj_cache))
  95                return;
  96
  97        while (obj_pool_free < ODEBUG_POOL_MIN_LEVEL) {
  98
  99                new = kmem_cache_zalloc(obj_cache, gfp);
 100                if (!new)
 101                        return;
 102
 103                raw_spin_lock_irqsave(&pool_lock, flags);
 104                hlist_add_head(&new->node, &obj_pool);
 105                obj_pool_free++;
 106                raw_spin_unlock_irqrestore(&pool_lock, flags);
 107        }
 108}
 109
 110/*
 111 * Lookup an object in the hash bucket.
 112 */
 113static struct debug_obj *lookup_object(void *addr, struct debug_bucket *b)
 114{
 115        struct debug_obj *obj;
 116        int cnt = 0;
 117
 118        hlist_for_each_entry(obj, &b->list, node) {
 119                cnt++;
 120                if (obj->object == addr)
 121                        return obj;
 122        }
 123        if (cnt > debug_objects_maxchain)
 124                debug_objects_maxchain = cnt;
 125
 126        return NULL;
 127}
 128
 129/*
 130 * Allocate a new object. If the pool is empty, switch off the debugger.
 131 * Must be called with interrupts disabled.
 132 */
 133static struct debug_obj *
 134alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)
 135{
 136        struct debug_obj *obj = NULL;
 137
 138        raw_spin_lock(&pool_lock);
 139        if (obj_pool.first) {
 140                obj         = hlist_entry(obj_pool.first, typeof(*obj), node);
 141
 142                obj->object = addr;
 143                obj->descr  = descr;
 144                obj->state  = ODEBUG_STATE_NONE;
 145                obj->astate = 0;
 146                hlist_del(&obj->node);
 147
 148                hlist_add_head(&obj->node, &b->list);
 149
 150                obj_pool_used++;
 151                if (obj_pool_used > obj_pool_max_used)
 152                        obj_pool_max_used = obj_pool_used;
 153
 154                obj_pool_free--;
 155                if (obj_pool_free < obj_pool_min_free)
 156                        obj_pool_min_free = obj_pool_free;
 157        }
 158        raw_spin_unlock(&pool_lock);
 159
 160        return obj;
 161}
 162
 163/*
 164 * workqueue function to free objects.
 165 */
 166static void free_obj_work(struct work_struct *work)
 167{
 168        struct debug_obj *obj;
 169        unsigned long flags;
 170
 171        raw_spin_lock_irqsave(&pool_lock, flags);
 172        while (obj_pool_free > ODEBUG_POOL_SIZE) {
 173                obj = hlist_entry(obj_pool.first, typeof(*obj), node);
 174                hlist_del(&obj->node);
 175                obj_pool_free--;
 176                /*
 177                 * We release pool_lock across kmem_cache_free() to
 178                 * avoid contention on pool_lock.
 179                 */
 180                raw_spin_unlock_irqrestore(&pool_lock, flags);
 181                kmem_cache_free(obj_cache, obj);
 182                raw_spin_lock_irqsave(&pool_lock, flags);
 183        }
 184        raw_spin_unlock_irqrestore(&pool_lock, flags);
 185}
 186
 187/*
 188 * Put the object back into the pool and schedule work to free objects
 189 * if necessary.
 190 */
 191static void free_object(struct debug_obj *obj)
 192{
 193        unsigned long flags;
 194        int sched = 0;
 195
 196        raw_spin_lock_irqsave(&pool_lock, flags);
 197        /*
 198         * schedule work when the pool is filled and the cache is
 199         * initialized:
 200         */
 201        if (obj_pool_free > ODEBUG_POOL_SIZE && obj_cache)
 202                sched = keventd_up();
 203        hlist_add_head(&obj->node, &obj_pool);
 204        obj_pool_free++;
 205        obj_pool_used--;
 206        raw_spin_unlock_irqrestore(&pool_lock, flags);
 207        if (sched)
 208                schedule_work(&debug_obj_work);
 209}
 210
 211/*
 212 * We run out of memory. That means we probably have tons of objects
 213 * allocated.
 214 */
 215static void debug_objects_oom(void)
 216{
 217        struct debug_bucket *db = obj_hash;
 218        struct hlist_node *tmp;
 219        HLIST_HEAD(freelist);
 220        struct debug_obj *obj;
 221        unsigned long flags;
 222        int i;
 223
 224        pr_warn("Out of memory. ODEBUG disabled\n");
 225
 226        for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
 227                raw_spin_lock_irqsave(&db->lock, flags);
 228                hlist_move_list(&db->list, &freelist);
 229                raw_spin_unlock_irqrestore(&db->lock, flags);
 230
 231                /* Now free them */
 232                hlist_for_each_entry_safe(obj, tmp, &freelist, node) {
 233                        hlist_del(&obj->node);
 234                        free_object(obj);
 235                }
 236        }
 237}
 238
 239/*
 240 * We use the pfn of the address for the hash. That way we can check
 241 * for freed objects simply by checking the affected bucket.
 242 */
 243static struct debug_bucket *get_bucket(unsigned long addr)
 244{
 245        unsigned long hash;
 246
 247        hash = hash_long((addr >> ODEBUG_CHUNK_SHIFT), ODEBUG_HASH_BITS);
 248        return &obj_hash[hash];
 249}
 250
 251static void debug_print_object(struct debug_obj *obj, char *msg)
 252{
 253        struct debug_obj_descr *descr = obj->descr;
 254        static int limit;
 255
 256        if (limit < 5 && descr != descr_test) {
 257                void *hint = descr->debug_hint ?
 258                        descr->debug_hint(obj->object) : NULL;
 259                limit++;
 260                WARN(1, KERN_ERR "ODEBUG: %s %s (active state %u) "
 261                                 "object type: %s hint: %pS\n",
 262                        msg, obj_states[obj->state], obj->astate,
 263                        descr->name, hint);
 264        }
 265        debug_objects_warnings++;
 266}
 267
 268/*
 269 * Try to repair the damage, so we have a better chance to get useful
 270 * debug output.
 271 */
 272static bool
 273debug_object_fixup(bool (*fixup)(void *addr, enum debug_obj_state state),
 274                   void * addr, enum debug_obj_state state)
 275{
 276        if (fixup && fixup(addr, state)) {
 277                debug_objects_fixups++;
 278                return true;
 279        }
 280        return false;
 281}
 282
 283static void debug_object_is_on_stack(void *addr, int onstack)
 284{
 285        int is_on_stack;
 286        static int limit;
 287
 288        if (limit > 4)
 289                return;
 290
 291        is_on_stack = object_is_on_stack(addr);
 292        if (is_on_stack == onstack)
 293                return;
 294
 295        limit++;
 296        if (is_on_stack)
 297                pr_warn("object is on stack, but not annotated\n");
 298        else
 299                pr_warn("object is not on stack, but annotated\n");
 300        WARN_ON(1);
 301}
 302
 303static void
 304__debug_object_init(void *addr, struct debug_obj_descr *descr, int onstack)
 305{
 306        enum debug_obj_state state;
 307        struct debug_bucket *db;
 308        struct debug_obj *obj;
 309        unsigned long flags;
 310
 311        fill_pool();
 312
 313        db = get_bucket((unsigned long) addr);
 314
 315        raw_spin_lock_irqsave(&db->lock, flags);
 316
 317        obj = lookup_object(addr, db);
 318        if (!obj) {
 319                obj = alloc_object(addr, db, descr);
 320                if (!obj) {
 321                        debug_objects_enabled = 0;
 322                        raw_spin_unlock_irqrestore(&db->lock, flags);
 323                        debug_objects_oom();
 324                        return;
 325                }
 326                debug_object_is_on_stack(addr, onstack);
 327        }
 328
 329        switch (obj->state) {
 330        case ODEBUG_STATE_NONE:
 331        case ODEBUG_STATE_INIT:
 332        case ODEBUG_STATE_INACTIVE:
 333                obj->state = ODEBUG_STATE_INIT;
 334                break;
 335
 336        case ODEBUG_STATE_ACTIVE:
 337                debug_print_object(obj, "init");
 338                state = obj->state;
 339                raw_spin_unlock_irqrestore(&db->lock, flags);
 340                debug_object_fixup(descr->fixup_init, addr, state);
 341                return;
 342
 343        case ODEBUG_STATE_DESTROYED:
 344                debug_print_object(obj, "init");
 345                break;
 346        default:
 347                break;
 348        }
 349
 350        raw_spin_unlock_irqrestore(&db->lock, flags);
 351}
 352
 353/**
 354 * debug_object_init - debug checks when an object is initialized
 355 * @addr:       address of the object
 356 * @descr:      pointer to an object specific debug description structure
 357 */
 358void debug_object_init(void *addr, struct debug_obj_descr *descr)
 359{
 360        if (!debug_objects_enabled)
 361                return;
 362
 363        __debug_object_init(addr, descr, 0);
 364}
 365
 366/**
 367 * debug_object_init_on_stack - debug checks when an object on stack is
 368 *                              initialized
 369 * @addr:       address of the object
 370 * @descr:      pointer to an object specific debug description structure
 371 */
 372void debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr)
 373{
 374        if (!debug_objects_enabled)
 375                return;
 376
 377        __debug_object_init(addr, descr, 1);
 378}
 379
 380/**
 381 * debug_object_activate - debug checks when an object is activated
 382 * @addr:       address of the object
 383 * @descr:      pointer to an object specific debug description structure
 384 * Returns 0 for success, -EINVAL for check failed.
 385 */
 386int debug_object_activate(void *addr, struct debug_obj_descr *descr)
 387{
 388        enum debug_obj_state state;
 389        struct debug_bucket *db;
 390        struct debug_obj *obj;
 391        unsigned long flags;
 392        int ret;
 393        struct debug_obj o = { .object = addr,
 394                               .state = ODEBUG_STATE_NOTAVAILABLE,
 395                               .descr = descr };
 396
 397        if (!debug_objects_enabled)
 398                return 0;
 399
 400        db = get_bucket((unsigned long) addr);
 401
 402        raw_spin_lock_irqsave(&db->lock, flags);
 403
 404        obj = lookup_object(addr, db);
 405        if (obj) {
 406                switch (obj->state) {
 407                case ODEBUG_STATE_INIT:
 408                case ODEBUG_STATE_INACTIVE:
 409                        obj->state = ODEBUG_STATE_ACTIVE;
 410                        ret = 0;
 411                        break;
 412
 413                case ODEBUG_STATE_ACTIVE:
 414                        debug_print_object(obj, "activate");
 415                        state = obj->state;
 416                        raw_spin_unlock_irqrestore(&db->lock, flags);
 417                        ret = debug_object_fixup(descr->fixup_activate, addr, state);
 418                        return ret ? 0 : -EINVAL;
 419
 420                case ODEBUG_STATE_DESTROYED:
 421                        debug_print_object(obj, "activate");
 422                        ret = -EINVAL;
 423                        break;
 424                default:
 425                        ret = 0;
 426                        break;
 427                }
 428                raw_spin_unlock_irqrestore(&db->lock, flags);
 429                return ret;
 430        }
 431
 432        raw_spin_unlock_irqrestore(&db->lock, flags);
 433        /*
 434         * We are here when a static object is activated. We
 435         * let the type specific code confirm whether this is
 436         * true or not. if true, we just make sure that the
 437         * static object is tracked in the object tracker. If
 438         * not, this must be a bug, so we try to fix it up.
 439         */
 440        if (descr->is_static_object && descr->is_static_object(addr)) {
 441                /* track this static object */
 442                debug_object_init(addr, descr);
 443                debug_object_activate(addr, descr);
 444        } else {
 445                debug_print_object(&o, "activate");
 446                ret = debug_object_fixup(descr->fixup_activate, addr,
 447                                        ODEBUG_STATE_NOTAVAILABLE);
 448                return ret ? 0 : -EINVAL;
 449        }
 450        return 0;
 451}
 452
 453/**
 454 * debug_object_deactivate - debug checks when an object is deactivated
 455 * @addr:       address of the object
 456 * @descr:      pointer to an object specific debug description structure
 457 */
 458void debug_object_deactivate(void *addr, struct debug_obj_descr *descr)
 459{
 460        struct debug_bucket *db;
 461        struct debug_obj *obj;
 462        unsigned long flags;
 463
 464        if (!debug_objects_enabled)
 465                return;
 466
 467        db = get_bucket((unsigned long) addr);
 468
 469        raw_spin_lock_irqsave(&db->lock, flags);
 470
 471        obj = lookup_object(addr, db);
 472        if (obj) {
 473                switch (obj->state) {
 474                case ODEBUG_STATE_INIT:
 475                case ODEBUG_STATE_INACTIVE:
 476                case ODEBUG_STATE_ACTIVE:
 477                        if (!obj->astate)
 478                                obj->state = ODEBUG_STATE_INACTIVE;
 479                        else
 480                                debug_print_object(obj, "deactivate");
 481                        break;
 482
 483                case ODEBUG_STATE_DESTROYED:
 484                        debug_print_object(obj, "deactivate");
 485                        break;
 486                default:
 487                        break;
 488                }
 489        } else {
 490                struct debug_obj o = { .object = addr,
 491                                       .state = ODEBUG_STATE_NOTAVAILABLE,
 492                                       .descr = descr };
 493
 494                debug_print_object(&o, "deactivate");
 495        }
 496
 497        raw_spin_unlock_irqrestore(&db->lock, flags);
 498}
 499
 500/**
 501 * debug_object_destroy - debug checks when an object is destroyed
 502 * @addr:       address of the object
 503 * @descr:      pointer to an object specific debug description structure
 504 */
 505void debug_object_destroy(void *addr, struct debug_obj_descr *descr)
 506{
 507        enum debug_obj_state state;
 508        struct debug_bucket *db;
 509        struct debug_obj *obj;
 510        unsigned long flags;
 511
 512        if (!debug_objects_enabled)
 513                return;
 514
 515        db = get_bucket((unsigned long) addr);
 516
 517        raw_spin_lock_irqsave(&db->lock, flags);
 518
 519        obj = lookup_object(addr, db);
 520        if (!obj)
 521                goto out_unlock;
 522
 523        switch (obj->state) {
 524        case ODEBUG_STATE_NONE:
 525        case ODEBUG_STATE_INIT:
 526        case ODEBUG_STATE_INACTIVE:
 527                obj->state = ODEBUG_STATE_DESTROYED;
 528                break;
 529        case ODEBUG_STATE_ACTIVE:
 530                debug_print_object(obj, "destroy");
 531                state = obj->state;
 532                raw_spin_unlock_irqrestore(&db->lock, flags);
 533                debug_object_fixup(descr->fixup_destroy, addr, state);
 534                return;
 535
 536        case ODEBUG_STATE_DESTROYED:
 537                debug_print_object(obj, "destroy");
 538                break;
 539        default:
 540                break;
 541        }
 542out_unlock:
 543        raw_spin_unlock_irqrestore(&db->lock, flags);
 544}
 545
 546/**
 547 * debug_object_free - debug checks when an object is freed
 548 * @addr:       address of the object
 549 * @descr:      pointer to an object specific debug description structure
 550 */
 551void debug_object_free(void *addr, struct debug_obj_descr *descr)
 552{
 553        enum debug_obj_state state;
 554        struct debug_bucket *db;
 555        struct debug_obj *obj;
 556        unsigned long flags;
 557
 558        if (!debug_objects_enabled)
 559                return;
 560
 561        db = get_bucket((unsigned long) addr);
 562
 563        raw_spin_lock_irqsave(&db->lock, flags);
 564
 565        obj = lookup_object(addr, db);
 566        if (!obj)
 567                goto out_unlock;
 568
 569        switch (obj->state) {
 570        case ODEBUG_STATE_ACTIVE:
 571                debug_print_object(obj, "free");
 572                state = obj->state;
 573                raw_spin_unlock_irqrestore(&db->lock, flags);
 574                debug_object_fixup(descr->fixup_free, addr, state);
 575                return;
 576        default:
 577                hlist_del(&obj->node);
 578                raw_spin_unlock_irqrestore(&db->lock, flags);
 579                free_object(obj);
 580                return;
 581        }
 582out_unlock:
 583        raw_spin_unlock_irqrestore(&db->lock, flags);
 584}
 585
 586/**
 587 * debug_object_assert_init - debug checks when object should be init-ed
 588 * @addr:       address of the object
 589 * @descr:      pointer to an object specific debug description structure
 590 */
 591void debug_object_assert_init(void *addr, struct debug_obj_descr *descr)
 592{
 593        struct debug_bucket *db;
 594        struct debug_obj *obj;
 595        unsigned long flags;
 596
 597        if (!debug_objects_enabled)
 598                return;
 599
 600        db = get_bucket((unsigned long) addr);
 601
 602        raw_spin_lock_irqsave(&db->lock, flags);
 603
 604        obj = lookup_object(addr, db);
 605        if (!obj) {
 606                struct debug_obj o = { .object = addr,
 607                                       .state = ODEBUG_STATE_NOTAVAILABLE,
 608                                       .descr = descr };
 609
 610                raw_spin_unlock_irqrestore(&db->lock, flags);
 611                /*
 612                 * Maybe the object is static, and we let the type specific
 613                 * code confirm. Track this static object if true, else invoke
 614                 * fixup.
 615                 */
 616                if (descr->is_static_object && descr->is_static_object(addr)) {
 617                        /* Track this static object */
 618                        debug_object_init(addr, descr);
 619                } else {
 620                        debug_print_object(&o, "assert_init");
 621                        debug_object_fixup(descr->fixup_assert_init, addr,
 622                                           ODEBUG_STATE_NOTAVAILABLE);
 623                }
 624                return;
 625        }
 626
 627        raw_spin_unlock_irqrestore(&db->lock, flags);
 628}
 629
 630/**
 631 * debug_object_active_state - debug checks object usage state machine
 632 * @addr:       address of the object
 633 * @descr:      pointer to an object specific debug description structure
 634 * @expect:     expected state
 635 * @next:       state to move to if expected state is found
 636 */
 637void
 638debug_object_active_state(void *addr, struct debug_obj_descr *descr,
 639                          unsigned int expect, unsigned int next)
 640{
 641        struct debug_bucket *db;
 642        struct debug_obj *obj;
 643        unsigned long flags;
 644
 645        if (!debug_objects_enabled)
 646                return;
 647
 648        db = get_bucket((unsigned long) addr);
 649
 650        raw_spin_lock_irqsave(&db->lock, flags);
 651
 652        obj = lookup_object(addr, db);
 653        if (obj) {
 654                switch (obj->state) {
 655                case ODEBUG_STATE_ACTIVE:
 656                        if (obj->astate == expect)
 657                                obj->astate = next;
 658                        else
 659                                debug_print_object(obj, "active_state");
 660                        break;
 661
 662                default:
 663                        debug_print_object(obj, "active_state");
 664                        break;
 665                }
 666        } else {
 667                struct debug_obj o = { .object = addr,
 668                                       .state = ODEBUG_STATE_NOTAVAILABLE,
 669                                       .descr = descr };
 670
 671                debug_print_object(&o, "active_state");
 672        }
 673
 674        raw_spin_unlock_irqrestore(&db->lock, flags);
 675}
 676
 677#ifdef CONFIG_DEBUG_OBJECTS_FREE
 678static void __debug_check_no_obj_freed(const void *address, unsigned long size)
 679{
 680        unsigned long flags, oaddr, saddr, eaddr, paddr, chunks;
 681        struct hlist_node *tmp;
 682        HLIST_HEAD(freelist);
 683        struct debug_obj_descr *descr;
 684        enum debug_obj_state state;
 685        struct debug_bucket *db;
 686        struct debug_obj *obj;
 687        int cnt;
 688
 689        saddr = (unsigned long) address;
 690        eaddr = saddr + size;
 691        paddr = saddr & ODEBUG_CHUNK_MASK;
 692        chunks = ((eaddr - paddr) + (ODEBUG_CHUNK_SIZE - 1));
 693        chunks >>= ODEBUG_CHUNK_SHIFT;
 694
 695        for (;chunks > 0; chunks--, paddr += ODEBUG_CHUNK_SIZE) {
 696                db = get_bucket(paddr);
 697
 698repeat:
 699                cnt = 0;
 700                raw_spin_lock_irqsave(&db->lock, flags);
 701                hlist_for_each_entry_safe(obj, tmp, &db->list, node) {
 702                        cnt++;
 703                        oaddr = (unsigned long) obj->object;
 704                        if (oaddr < saddr || oaddr >= eaddr)
 705                                continue;
 706
 707                        switch (obj->state) {
 708                        case ODEBUG_STATE_ACTIVE:
 709                                debug_print_object(obj, "free");
 710                                descr = obj->descr;
 711                                state = obj->state;
 712                                raw_spin_unlock_irqrestore(&db->lock, flags);
 713                                debug_object_fixup(descr->fixup_free,
 714                                                   (void *) oaddr, state);
 715                                goto repeat;
 716                        default:
 717                                hlist_del(&obj->node);
 718                                hlist_add_head(&obj->node, &freelist);
 719                                break;
 720                        }
 721                }
 722                raw_spin_unlock_irqrestore(&db->lock, flags);
 723
 724                /* Now free them */
 725                hlist_for_each_entry_safe(obj, tmp, &freelist, node) {
 726                        hlist_del(&obj->node);
 727                        free_object(obj);
 728                }
 729
 730                if (cnt > debug_objects_maxchain)
 731                        debug_objects_maxchain = cnt;
 732        }
 733}
 734
 735void debug_check_no_obj_freed(const void *address, unsigned long size)
 736{
 737        if (debug_objects_enabled)
 738                __debug_check_no_obj_freed(address, size);
 739}
 740#endif
 741
 742#ifdef CONFIG_DEBUG_FS
 743
 744static int debug_stats_show(struct seq_file *m, void *v)
 745{
 746        seq_printf(m, "max_chain     :%d\n", debug_objects_maxchain);
 747        seq_printf(m, "warnings      :%d\n", debug_objects_warnings);
 748        seq_printf(m, "fixups        :%d\n", debug_objects_fixups);
 749        seq_printf(m, "pool_free     :%d\n", obj_pool_free);
 750        seq_printf(m, "pool_min_free :%d\n", obj_pool_min_free);
 751        seq_printf(m, "pool_used     :%d\n", obj_pool_used);
 752        seq_printf(m, "pool_max_used :%d\n", obj_pool_max_used);
 753        return 0;
 754}
 755
 756static int debug_stats_open(struct inode *inode, struct file *filp)
 757{
 758        return single_open(filp, debug_stats_show, NULL);
 759}
 760
 761static const struct file_operations debug_stats_fops = {
 762        .open           = debug_stats_open,
 763        .read           = seq_read,
 764        .llseek         = seq_lseek,
 765        .release        = single_release,
 766};
 767
 768static int __init debug_objects_init_debugfs(void)
 769{
 770        struct dentry *dbgdir, *dbgstats;
 771
 772        if (!debug_objects_enabled)
 773                return 0;
 774
 775        dbgdir = debugfs_create_dir("debug_objects", NULL);
 776        if (!dbgdir)
 777                return -ENOMEM;
 778
 779        dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
 780                                       &debug_stats_fops);
 781        if (!dbgstats)
 782                goto err;
 783
 784        return 0;
 785
 786err:
 787        debugfs_remove(dbgdir);
 788
 789        return -ENOMEM;
 790}
 791__initcall(debug_objects_init_debugfs);
 792
 793#else
 794static inline void debug_objects_init_debugfs(void) { }
 795#endif
 796
 797#ifdef CONFIG_DEBUG_OBJECTS_SELFTEST
 798
 799/* Random data structure for the self test */
 800struct self_test {
 801        unsigned long   dummy1[6];
 802        int             static_init;
 803        unsigned long   dummy2[3];
 804};
 805
 806static __initdata struct debug_obj_descr descr_type_test;
 807
 808static bool __init is_static_object(void *addr)
 809{
 810        struct self_test *obj = addr;
 811
 812        return obj->static_init;
 813}
 814
 815/*
 816 * fixup_init is called when:
 817 * - an active object is initialized
 818 */
 819static bool __init fixup_init(void *addr, enum debug_obj_state state)
 820{
 821        struct self_test *obj = addr;
 822
 823        switch (state) {
 824        case ODEBUG_STATE_ACTIVE:
 825                debug_object_deactivate(obj, &descr_type_test);
 826                debug_object_init(obj, &descr_type_test);
 827                return true;
 828        default:
 829                return false;
 830        }
 831}
 832
 833/*
 834 * fixup_activate is called when:
 835 * - an active object is activated
 836 * - an unknown non-static object is activated
 837 */
 838static bool __init fixup_activate(void *addr, enum debug_obj_state state)
 839{
 840        struct self_test *obj = addr;
 841
 842        switch (state) {
 843        case ODEBUG_STATE_NOTAVAILABLE:
 844                return true;
 845        case ODEBUG_STATE_ACTIVE:
 846                debug_object_deactivate(obj, &descr_type_test);
 847                debug_object_activate(obj, &descr_type_test);
 848                return true;
 849
 850        default:
 851                return false;
 852        }
 853}
 854
 855/*
 856 * fixup_destroy is called when:
 857 * - an active object is destroyed
 858 */
 859static bool __init fixup_destroy(void *addr, enum debug_obj_state state)
 860{
 861        struct self_test *obj = addr;
 862
 863        switch (state) {
 864        case ODEBUG_STATE_ACTIVE:
 865                debug_object_deactivate(obj, &descr_type_test);
 866                debug_object_destroy(obj, &descr_type_test);
 867                return true;
 868        default:
 869                return false;
 870        }
 871}
 872
 873/*
 874 * fixup_free is called when:
 875 * - an active object is freed
 876 */
 877static bool __init fixup_free(void *addr, enum debug_obj_state state)
 878{
 879        struct self_test *obj = addr;
 880
 881        switch (state) {
 882        case ODEBUG_STATE_ACTIVE:
 883                debug_object_deactivate(obj, &descr_type_test);
 884                debug_object_free(obj, &descr_type_test);
 885                return true;
 886        default:
 887                return false;
 888        }
 889}
 890
 891static int __init
 892check_results(void *addr, enum debug_obj_state state, int fixups, int warnings)
 893{
 894        struct debug_bucket *db;
 895        struct debug_obj *obj;
 896        unsigned long flags;
 897        int res = -EINVAL;
 898
 899        db = get_bucket((unsigned long) addr);
 900
 901        raw_spin_lock_irqsave(&db->lock, flags);
 902
 903        obj = lookup_object(addr, db);
 904        if (!obj && state != ODEBUG_STATE_NONE) {
 905                WARN(1, KERN_ERR "ODEBUG: selftest object not found\n");
 906                goto out;
 907        }
 908        if (obj && obj->state != state) {
 909                WARN(1, KERN_ERR "ODEBUG: selftest wrong state: %d != %d\n",
 910                       obj->state, state);
 911                goto out;
 912        }
 913        if (fixups != debug_objects_fixups) {
 914                WARN(1, KERN_ERR "ODEBUG: selftest fixups failed %d != %d\n",
 915                       fixups, debug_objects_fixups);
 916                goto out;
 917        }
 918        if (warnings != debug_objects_warnings) {
 919                WARN(1, KERN_ERR "ODEBUG: selftest warnings failed %d != %d\n",
 920                       warnings, debug_objects_warnings);
 921                goto out;
 922        }
 923        res = 0;
 924out:
 925        raw_spin_unlock_irqrestore(&db->lock, flags);
 926        if (res)
 927                debug_objects_enabled = 0;
 928        return res;
 929}
 930
 931static __initdata struct debug_obj_descr descr_type_test = {
 932        .name                   = "selftest",
 933        .is_static_object       = is_static_object,
 934        .fixup_init             = fixup_init,
 935        .fixup_activate         = fixup_activate,
 936        .fixup_destroy          = fixup_destroy,
 937        .fixup_free             = fixup_free,
 938};
 939
 940static __initdata struct self_test obj = { .static_init = 0 };
 941
 942static void __init debug_objects_selftest(void)
 943{
 944        int fixups, oldfixups, warnings, oldwarnings;
 945        unsigned long flags;
 946
 947        local_irq_save(flags);
 948
 949        fixups = oldfixups = debug_objects_fixups;
 950        warnings = oldwarnings = debug_objects_warnings;
 951        descr_test = &descr_type_test;
 952
 953        debug_object_init(&obj, &descr_type_test);
 954        if (check_results(&obj, ODEBUG_STATE_INIT, fixups, warnings))
 955                goto out;
 956        debug_object_activate(&obj, &descr_type_test);
 957        if (check_results(&obj, ODEBUG_STATE_ACTIVE, fixups, warnings))
 958                goto out;
 959        debug_object_activate(&obj, &descr_type_test);
 960        if (check_results(&obj, ODEBUG_STATE_ACTIVE, ++fixups, ++warnings))
 961                goto out;
 962        debug_object_deactivate(&obj, &descr_type_test);
 963        if (check_results(&obj, ODEBUG_STATE_INACTIVE, fixups, warnings))
 964                goto out;
 965        debug_object_destroy(&obj, &descr_type_test);
 966        if (check_results(&obj, ODEBUG_STATE_DESTROYED, fixups, warnings))
 967                goto out;
 968        debug_object_init(&obj, &descr_type_test);
 969        if (check_results(&obj, ODEBUG_STATE_DESTROYED, fixups, ++warnings))
 970                goto out;
 971        debug_object_activate(&obj, &descr_type_test);
 972        if (check_results(&obj, ODEBUG_STATE_DESTROYED, fixups, ++warnings))
 973                goto out;
 974        debug_object_deactivate(&obj, &descr_type_test);
 975        if (check_results(&obj, ODEBUG_STATE_DESTROYED, fixups, ++warnings))
 976                goto out;
 977        debug_object_free(&obj, &descr_type_test);
 978        if (check_results(&obj, ODEBUG_STATE_NONE, fixups, warnings))
 979                goto out;
 980
 981        obj.static_init = 1;
 982        debug_object_activate(&obj, &descr_type_test);
 983        if (check_results(&obj, ODEBUG_STATE_ACTIVE, fixups, warnings))
 984                goto out;
 985        debug_object_init(&obj, &descr_type_test);
 986        if (check_results(&obj, ODEBUG_STATE_INIT, ++fixups, ++warnings))
 987                goto out;
 988        debug_object_free(&obj, &descr_type_test);
 989        if (check_results(&obj, ODEBUG_STATE_NONE, fixups, warnings))
 990                goto out;
 991
 992#ifdef CONFIG_DEBUG_OBJECTS_FREE
 993        debug_object_init(&obj, &descr_type_test);
 994        if (check_results(&obj, ODEBUG_STATE_INIT, fixups, warnings))
 995                goto out;
 996        debug_object_activate(&obj, &descr_type_test);
 997        if (check_results(&obj, ODEBUG_STATE_ACTIVE, fixups, warnings))
 998                goto out;
 999        __debug_check_no_obj_freed(&obj, sizeof(obj));
1000        if (check_results(&obj, ODEBUG_STATE_NONE, ++fixups, ++warnings))
1001                goto out;
1002#endif
1003        pr_info("selftest passed\n");
1004
1005out:
1006        debug_objects_fixups = oldfixups;
1007        debug_objects_warnings = oldwarnings;
1008        descr_test = NULL;
1009
1010        local_irq_restore(flags);
1011}
1012#else
1013static inline void debug_objects_selftest(void) { }
1014#endif
1015
1016/*
1017 * Called during early boot to initialize the hash buckets and link
1018 * the static object pool objects into the poll list. After this call
1019 * the object tracker is fully operational.
1020 */
1021void __init debug_objects_early_init(void)
1022{
1023        int i;
1024
1025        for (i = 0; i < ODEBUG_HASH_SIZE; i++)
1026                raw_spin_lock_init(&obj_hash[i].lock);
1027
1028        for (i = 0; i < ODEBUG_POOL_SIZE; i++)
1029                hlist_add_head(&obj_static_pool[i].node, &obj_pool);
1030}
1031
1032/*
1033 * Convert the statically allocated objects to dynamic ones:
1034 */
1035static int __init debug_objects_replace_static_objects(void)
1036{
1037        struct debug_bucket *db = obj_hash;
1038        struct hlist_node *tmp;
1039        struct debug_obj *obj, *new;
1040        HLIST_HEAD(objects);
1041        int i, cnt = 0;
1042
1043        for (i = 0; i < ODEBUG_POOL_SIZE; i++) {
1044                obj = kmem_cache_zalloc(obj_cache, GFP_KERNEL);
1045                if (!obj)
1046                        goto free;
1047                hlist_add_head(&obj->node, &objects);
1048        }
1049
1050        /*
1051         * When debug_objects_mem_init() is called we know that only
1052         * one CPU is up, so disabling interrupts is enough
1053         * protection. This avoids the lockdep hell of lock ordering.
1054         */
1055        local_irq_disable();
1056
1057        /* Remove the statically allocated objects from the pool */
1058        hlist_for_each_entry_safe(obj, tmp, &obj_pool, node)
1059                hlist_del(&obj->node);
1060        /* Move the allocated objects to the pool */
1061        hlist_move_list(&objects, &obj_pool);
1062
1063        /* Replace the active object references */
1064        for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
1065                hlist_move_list(&db->list, &objects);
1066
1067                hlist_for_each_entry(obj, &objects, node) {
1068                        new = hlist_entry(obj_pool.first, typeof(*obj), node);
1069                        hlist_del(&new->node);
1070                        /* copy object data */
1071                        *new = *obj;
1072                        hlist_add_head(&new->node, &db->list);
1073                        cnt++;
1074                }
1075        }
1076        local_irq_enable();
1077
1078        pr_debug("%d of %d active objects replaced\n",
1079                 cnt, obj_pool_used);
1080        return 0;
1081free:
1082        hlist_for_each_entry_safe(obj, tmp, &objects, node) {
1083                hlist_del(&obj->node);
1084                kmem_cache_free(obj_cache, obj);
1085        }
1086        return -ENOMEM;
1087}
1088
1089/*
1090 * Called after the kmem_caches are functional to setup a dedicated
1091 * cache pool, which has the SLAB_DEBUG_OBJECTS flag set. This flag
1092 * prevents that the debug code is called on kmem_cache_free() for the
1093 * debug tracker objects to avoid recursive calls.
1094 */
1095void __init debug_objects_mem_init(void)
1096{
1097        if (!debug_objects_enabled)
1098                return;
1099
1100        obj_cache = kmem_cache_create("debug_objects_cache",
1101                                      sizeof (struct debug_obj), 0,
1102                                      SLAB_DEBUG_OBJECTS, NULL);
1103
1104        if (!obj_cache || debug_objects_replace_static_objects()) {
1105                debug_objects_enabled = 0;
1106                if (obj_cache)
1107                        kmem_cache_destroy(obj_cache);
1108                pr_warn("out of memory.\n");
1109        } else
1110                debug_objects_selftest();
1111}
1112