diff --git a/linux-ramdump-parser-v2/parsers/irqstate.py b/linux-ramdump-parser-v2/parsers/irqstate.py
index af1ef9dda24a0d955b7b83759bc9043b08a23a2e..fb94c9a69a42f97548be1d507e186125d088aa7b 100755
--- a/linux-ramdump-parser-v2/parsers/irqstate.py
+++ b/linux-ramdump-parser-v2/parsers/irqstate.py
@@ -74,14 +74,19 @@ class IrqParse(RamParser):
 
     def radix_tree_lookup_element(self, ram_dump, root_addr, index):
         rnode_offset = ram_dump.field_offset('struct radix_tree_root', 'rnode')
-        rnode_height_offset = ram_dump.field_offset(
-            'struct radix_tree_node', 'height')
+        if (ram_dump.major[0], ram_dump.major[1]) >= (3, 18):
+            rnode_height_offset = ram_dump.field_offset(
+                'struct radix_tree_node', 'path')
+        else:
+            rnode_height_offset = ram_dump.field_offset(
+                'struct radix_tree_node', 'height')
         slots_offset = ram_dump.field_offset('struct radix_tree_node', 'slots')
         pointer_size = ram_dump.sizeof('struct radix_tree_node *')
 
         # if CONFIG_BASE_SMALL=0: radix_tree_map_shift = 6
         radix_tree_map_shift = 6
         radix_tree_map_mask = 0x3f
+        radix_tree_height_mask = 0xfff
         height_to_maxindex = [0x0, 0x3F, 0x0FFF,
                               0x0003FFFF, 0x00FFFFFF, 0x3FFFFFFF, 0xFFFFFFFF]
 
@@ -93,6 +98,9 @@ class IrqParse(RamParser):
         node_addr = ram_dump.read_word(root_addr + rnode_offset) & 0xfffffffffffffffe
         height = ram_dump.read_int(node_addr + rnode_height_offset)
 
+        if (ram_dump.major[0], ram_dump.major[1]) >= (3, 18):
+            height = height & radix_tree_height_mask
+
         if height > len(height_to_maxindex):
             return None
 
diff --git a/linux-ramdump-parser-v2/ramdump.py b/linux-ramdump-parser-v2/ramdump.py
index ca62cb56f28263f20eaea5ec255491a8bf44c06b..ac48542aef16db7be665c4ddde1e1f83126a28b1 100644
--- a/linux-ramdump-parser-v2/ramdump.py
+++ b/linux-ramdump-parser-v2/ramdump.py
@@ -466,6 +466,7 @@ class RamDump():
         self.ipc_log_debug = options.ipc_debug
         self.ipc_log_help = options.ipc_help
         self.use_stdout = options.stdout
+        self.major = [0, 0, 0]
         if options.ram_addr is not None:
             # TODO sanity check to make sure the memory regions don't overlap
             for file_path, start, end in options.ram_addr:
@@ -631,6 +632,12 @@ class RamDump():
                 print_out_str('!!! Could not match version! {0}'.format(b))
                 return False
             self.version = v.group(1)
+            match = re.search('(\d+)\.(\d+)\.(\d+)', self.version)
+            if match is not None:
+                self.major[0], self.major[1], self.major[2] = map(int, match.groups())
+            else:
+                print_out_str('!!! Could not extract version info! {0}'.format(self.version))
+
             print_out_str('Linux Banner: ' + b.rstrip())
             print_out_str('version = {0}'.format(self.version))
             return True