return rc ?: dso_id__cmp(id, &b->id);
 }
 
-static int dso__cmp_short_name(struct dso *a, struct dso *b)
-{
-       return __dso__cmp_short_name(a->short_name, &a->id, b);
-}
-
 static int dsos__cmp_long_name_id_short_name(const void *va, const void *vb)
 {
        const struct dso *a = *((const struct dso **)va);
  * Either one of the dso or name parameter must be non-NULL or the
  * function will not work.
  */
-struct dso *__dsos__findnew_link_by_longname_id(struct dsos *dsos,
-                                               struct dso *dso,
-                                               const char *name,
-                                               struct dso_id *id,
-                                               bool write_locked)
+static struct dso *__dsos__find_by_longname_id(struct dsos *dsos,
+                                              const char *name,
+                                              struct dso_id *id,
+                                              bool write_locked)
 {
        int low = 0, high = dsos->cnt - 1;
 
        if (!dsos->sorted) {
                if (!write_locked) {
+                       struct dso *dso;
+
                        up_read(&dsos->lock);
                        down_write(&dsos->lock);
-                       dso = __dsos__findnew_link_by_longname_id(dsos, dso, name, id,
-                                                                 /*write_locked=*/true);
+                       dso = __dsos__find_by_longname_id(dsos, name, id,
+                                                         /*write_locked=*/true);
                        up_write(&dsos->lock);
                        down_read(&dsos->lock);
                        return dso;
                dsos->sorted = true;
        }
 
-       if (!name)
-               name = dso->long_name;
-
        /*
         * Find node with the matching name
         */
                int rc = __dso__cmp_long_name(name, id, this);
 
                if (rc == 0) {
-                       /*
-                        * In case the new DSO is a duplicate of an existing
-                        * one, print a one-time warning & put the new entry
-                        * at the end of the list of duplicates.
-                        */
-                       if (!dso || (dso == this))
-                               return dso__get(this);  /* Find matching dso */
-                       /*
-                        * The core kernel DSOs may have duplicated long name.
-                        * In this case, the short name should be different.
-                        * Comparing the short names to differentiate the DSOs.
-                        */
-                       rc = dso__cmp_short_name(dso, this);
-                       if (rc == 0) {
-                               pr_err("Duplicated dso name: %s\n", name);
-                               return NULL;
-                       }
+                       return dso__get(this);  /* Find matching dso */
                }
                if (rc < 0)
                        high = mid - 1;
                else
                        low = mid + 1;
        }
-       if (dso)
-               __dsos__add(dsos, dso);
        return NULL;
 }
 
        return ret;
 }
 
-static struct dso *__dsos__findnew_by_longname_id(struct dsos *dsos, const char *name,
-                                               struct dso_id *id, bool write_locked)
-{
-       return __dsos__findnew_link_by_longname_id(dsos, NULL, name, id, write_locked);
-}
-
 struct dsos__find_id_cb_args {
        const char *name;
        struct dso_id *id;
                __dsos__for_each_dso(dsos, dsos__find_id_cb, &args);
                return args.res;
        }
-       res = __dsos__findnew_by_longname_id(dsos, name, id, write_locked);
+       res = __dsos__find_by_longname_id(dsos, name, id, write_locked);
        return res;
 }