rangesets: add function to query for overlaps
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Sep 2010 17:50:06 +0000 (18:50 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Sep 2010 17:50:06 +0000 (18:50 +0100)
Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/common/rangeset.c
xen/include/xen/rangeset.h

index 78d0647acc6e1206f247f1a59566873ff5ab21c9..bb9523fda6fac41847ec7dca267e6e236824ce33 100644 (file)
@@ -251,6 +251,22 @@ int rangeset_contains_range(
     return contains;
 }
 
+int rangeset_overlaps_range(
+    struct rangeset *r, unsigned long s, unsigned long e)
+{
+    struct range *x;
+    int overlaps;
+
+    ASSERT(s <= e);
+
+    spin_lock(&r->lock);
+    x = find_range(r, e);
+    overlaps = (x && (s <= x->e));
+    spin_unlock(&r->lock);
+
+    return overlaps;
+}
+
 int rangeset_report_ranges(
     struct rangeset *r, unsigned long s, unsigned long e,
     int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt)
index 4219c079ef178c1c3df648b0ca52bab2809fe228..1e16a6b31927e517d03a4945b49f5175d34cfd75 100644 (file)
@@ -53,6 +53,8 @@ int __must_check rangeset_remove_range(
     struct rangeset *r, unsigned long s, unsigned long e);
 int __must_check rangeset_contains_range(
     struct rangeset *r, unsigned long s, unsigned long e);
+int __must_check rangeset_overlaps_range(
+    struct rangeset *r, unsigned long s, unsigned long e);
 int rangeset_report_ranges(
     struct rangeset *r, unsigned long s, unsigned long e,
     int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt);