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:
parent
b35a6f39a6
commit
311d014d17
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user