scripts: Update spdk_print_io_devices and spdk_print_threads gdb macros

The structs io_device and spdk_io_channel were moved from using tailq list to rb tree,
moving the parsing in gdb functions to use those too.

Fixes issue #2763

Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: I8fa5a69b5004e3d86fdfa201c2ba47e06fa47cfa
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15330
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Michael Haeuptle <michaelhaeuptle@gmail.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
Kozlowski Mateusz 2022-11-08 10:41:04 +01:00 committed by Tomasz Zawadzki
parent b35a6f39a6
commit 311d014d17

View File

@ -25,6 +25,37 @@ class SpdkNormalTailqList(SpdkTailqList):
['tailq'])
class SpdkRbTree(object):
def __init__(self, tree_pointer, tree_member, tree_name_list):
self.tree_pointer = tree_pointer
self.tree_name_list = tree_name_list
self.tree_member = tree_member
self.tree = gdb.parse_and_eval(self.tree_pointer)
def get_left_node(self, node):
return node['node']['rbe_left']
def get_right_node(self, node):
return node['node']['rbe_right']
def traverse_rb_tree(self, node):
if node:
self.rb_list.append(node)
self.traverse_rb_tree(self.get_left_node(node))
self.traverse_rb_tree(self.get_right_node(node))
def __iter__(self):
self.rb_list = []
tree_top = self.tree['rbh_root']
if tree_top:
self.traverse_rb_tree(tree_top)
for rb_node in self.rb_list:
yield self.tree_member(rb_node)
else:
yield
class SpdkArr(object):
def __init__(self, arr_pointer, num_elements, element_type):
@ -82,10 +113,10 @@ class IoDevice(SpdkObject):
type_name = 'struct io_device'
class IoDevices(SpdkTailqList):
class IoDevices(SpdkRbTree):
def __init__(self):
super(IoDevices, self).__init__('g_io_devices', IoDevice, ['tailq'])
super(IoDevices, self).__init__('g_io_devices', IoDevice, ['rbh_root'])
class spdk_print_io_devices(SpdkPrintCommand):
@ -214,13 +245,12 @@ class IoChannel(SpdkObject):
return s
# TODO - create TailqList type that gets a gdb object instead of a pointer
class IoChannels(SpdkTailqList):
class IoChannels(SpdkRbTree):
def __init__(self, list_obj):
self.tailq_name_list = ['tailq']
self.list_member = IoChannel
self.list = list_obj
def __init__(self, tree_obj):
self.tree_name_list = ['rbh_root']
self.tree_member = IoChannel
self.tree = tree_obj
class SpdkThread(SpdkObject):