Commit 311d014d authored by Kozlowski Mateusz's avatar Kozlowski Mateusz Committed by Tomasz Zawadzki
Browse files

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: default avatarKozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: I8fa5a69b5004e3d86fdfa201c2ba47e06fa47cfa
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15330


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarMichael Haeuptle <michaelhaeuptle@gmail.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent b35a6f39
Loading
Loading
Loading
Loading
+38 −8
Original line number Diff line number Diff line
@@ -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):