if (strcmp(modname, iter->modname)) {
                        ret = ddebug_add_module(iter_start, n, modname);
                        if (ret)
-                               goto out_free;
+                               goto out_err;
                        n = 0;
                        modname = iter->modname;
                        iter_start = iter;
        }
        ret = ddebug_add_module(iter_start, n, modname);
        if (ret)
-               goto out_free;
+               goto out_err;
 
-       /* ddebug_query boot param got passed -> set it up */
+       ddebug_init_success = 1;
+
+       /* apply ddebug_query boot param, dont unload tables on err */
        if (ddebug_setup_string[0] != '\0') {
                pr_warn("ddebug_query param name is deprecated,"
                        " change it to dyndbg\n");
                                ddebug_setup_string);
                else
                        pr_info("%d changes by ddebug_query\n", ret);
-
-               /* keep tables even on ddebug_query parse error */
-               ret = 0;
        }
        /* now that ddebug tables are loaded, process all boot args
         * again to find and activate queries given in dyndbg params.
        parse_args("dyndbg params", cmdline, NULL,
                   0, 0, 0, &ddebug_dyndbg_boot_param_cb);
        kfree(cmdline);
+       return 0;
 
-out_free:
-       if (ret)
-               ddebug_remove_all_tables();
-       else
-               ddebug_init_success = 1;
+out_err:
+       ddebug_remove_all_tables();
        return 0;
 }
 /* Allow early initialization for boot messages via boot param */