#define LOCKHASH_BITS          12
 #define LOCKHASH_SIZE          (1UL << LOCKHASH_BITS)
 
-static struct hlist_head lockhash_table[LOCKHASH_SIZE];
+static struct hlist_head *lockhash_table;
 
 #define __lockhashfn(key)      hash_long((unsigned long)key, LOCKHASH_BITS)
 #define lockhashentry(key)     (lockhash_table + __lockhashfn((key)))
        };
        struct lock_contention con = {
                .target = &target,
-               .result = &lockhash_table[0],
                .map_nr_entries = bpf_map_entries,
                .max_stack = max_stack_depth,
                .stack_skip = stack_skip,
                .owner = show_lock_owner,
        };
 
+       lockhash_table = calloc(LOCKHASH_SIZE, sizeof(*lockhash_table));
+       if (!lockhash_table)
+               return -ENOMEM;
+
+       con.result = &lockhash_table[0];
+
        session = perf_session__new(use_bpf ? NULL : &data, &eops);
        if (IS_ERR(session)) {
                pr_err("Initializing perf session failed\n");
-               return PTR_ERR(session);
+               err = PTR_ERR(session);
+               goto out_delete;
        }
 
        con.machine = &session->machines.host;
        evlist__delete(con.evlist);
        lock_contention_finish();
        perf_session__delete(session);
+       zfree(&lockhash_table);
        return err;
 }
 
        unsigned int i;
        int rc = 0;
 
+       lockhash_table = calloc(LOCKHASH_SIZE, sizeof(*lockhash_table));
+       if (!lockhash_table)
+               return -ENOMEM;
+
        for (i = 0; i < LOCKHASH_SIZE; i++)
                INIT_HLIST_HEAD(lockhash_table + i);
 
                rc = __cmd_report(false);
        } else if (!strcmp(argv[0], "script")) {
                /* Aliased to 'perf script' */
-               return cmd_script(argc, argv);
+               rc = cmd_script(argc, argv);
        } else if (!strcmp(argv[0], "info")) {
                if (argc) {
                        argc = parse_options(argc, argv,
                usage_with_options(lock_usage, lock_options);
        }
 
+       zfree(&lockhash_table);
        return rc;
 }