+/**
+ * Compare two osl objects pointing to unsigned integers of 64 bit size.
+ *
+ * \param obj1 Pointer to the first integer.
+ * \param obj2 Pointer to the second integer.
+ *
+ * \return The values required for an osl compare function.
+ *
+ * \sa osl_compare_func, osl_hash_compare().
+ */
+_static_inline_ int uint64_compare(const struct osl_object *obj1,
+ const struct osl_object *obj2)
+{
+ uint64_t d1 = read_u64((const char *)obj1->data);
+ uint64_t d2 = read_u64((const char *)obj2->data);
+
+ if (d1 < d2)
+ return 1;
+ if (d1 > d2)
+ return -1;
+ return 0;
+}
+
+/**
+ * Compare the size of two directories
+ *
+ * \param obj1 Pointer to the first object.
+ * \param obj2 Pointer to the second object.
+ *
+ * This function first compares the size values as usual integers. If they compare as
+ * equal, the address of \a obj1 and \a obj2 are compared. So this compare function
+ * returns zero if and only if \a obj1 and \a obj2 point to the same memory area.
+ */
+_static_inline_ int size_compare(const struct osl_object *obj1, const struct osl_object *obj2)
+{
+ uint64_t d1 = *(uint64_t *)obj1->data;
+ uint64_t d2 = *(uint64_t *)obj2->data;
+ int ret = NUM_COMPARE(d2, d1);
+
+ if (ret)
+ return ret;
+ //INFO_LOG("addresses: %p, %p\n", obj1->data, obj2->data);
+ return NUM_COMPARE(obj2->data, obj1->data);
+}
+