virt-ps working again.
[virt-mem.git] / lib / kernel.ml
index efdd413..9b7d3bc 100644 (file)
@@ -1255,8 +1255,12 @@ let rec task_struct_follower kernel_version load map addr =
            let offset = data.task_struct_run_list'next_offset
            and adj = data.task_struct_run_list'next_adjustment in
            let offset = Int64.of_int offset and adj = Int64.of_int adj in
-           let addr = Int64.sub (Int64.add addr offset) adj in
-           let map = AddrMap.add addr ("task_struct", None) map in
+           let map =
+             if offset <> adj
+             then
+               (let addr = Int64.sub (Int64.add addr offset) adj
+                in AddrMap.add addr ("task_struct", None) map)
+             else map in
            let dest_addr = Int64.sub dest_addr adj in
            let map = task_struct_follower kernel_version load map dest_addr
            in map in
@@ -1265,8 +1269,12 @@ let rec task_struct_follower kernel_version load map addr =
        let offset = data.task_struct_tasks'next_offset
        and adj = data.task_struct_tasks'next_adjustment in
        let offset = Int64.of_int offset and adj = Int64.of_int adj in
-       let addr = Int64.sub (Int64.add addr offset) adj in
-       let map = AddrMap.add addr ("task_struct", None) map in
+       let map =
+         if offset <> adj
+         then
+           (let addr = Int64.sub (Int64.add addr offset) adj
+            in AddrMap.add addr ("task_struct", None) map)
+         else map in
        let dest_addr = Int64.sub dest_addr adj in
        let map = task_struct_follower kernel_version load map dest_addr
        in map
@@ -1289,8 +1297,12 @@ and net_device_follower kernel_version load map addr =
            let offset = data.net_device_dev_list'next_offset
            and adj = data.net_device_dev_list'next_adjustment in
            let offset = Int64.of_int offset and adj = Int64.of_int adj in
-           let addr = Int64.sub (Int64.add addr offset) adj in
-           let map = AddrMap.add addr ("net_device", None) map in
+           let map =
+             if offset <> adj
+             then
+               (let addr = Int64.sub (Int64.add addr offset) adj
+                in AddrMap.add addr ("net_device", None) map)
+             else map in
            let dest_addr = Int64.sub dest_addr adj in
            let map = net_device_follower kernel_version load map dest_addr
            in map in
@@ -1322,8 +1334,12 @@ and net_follower kernel_version load map addr =
        let offset = data.net_dev_base_head'next_offset
        and adj = data.net_dev_base_head'next_adjustment in
        let offset = Int64.of_int offset and adj = Int64.of_int adj in
-       let addr = Int64.sub (Int64.add addr offset) adj in
-       let map = AddrMap.add addr ("net_device", None) map in
+       let map =
+         if offset <> adj
+         then
+           (let addr = Int64.sub (Int64.add addr offset) adj
+            in AddrMap.add addr ("net_device", None) map)
+         else map in
        let dest_addr = Int64.sub dest_addr adj in
        let map = net_device_follower kernel_version load map dest_addr in map in
      let dest_addr = data.net_dev_base_head'prev in
@@ -1331,8 +1347,12 @@ and net_follower kernel_version load map addr =
        let offset = data.net_dev_base_head'prev_offset
        and adj = data.net_dev_base_head'prev_adjustment in
        let offset = Int64.of_int offset and adj = Int64.of_int adj in
-       let addr = Int64.sub (Int64.add addr offset) adj in
-       let map = AddrMap.add addr ("net_device", None) map in
+       let map =
+         if offset <> adj
+         then
+           (let addr = Int64.sub (Int64.add addr offset) adj
+            in AddrMap.add addr ("net_device", None) map)
+         else map in
        let dest_addr = Int64.sub dest_addr adj in
        let map = net_device_follower kernel_version load map dest_addr in map
      in map)