Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a77e15e8 authored by Jan Kiszka's avatar Jan Kiszka Committed by Linus Torvalds
Browse files

scripts/gdb: convert CpuList to generator function



Yet another code simplification.

Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ben Widawsky <ben@bwidawsk.net>
Cc: Borislav Petkov <bp@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent fffb944c
Loading
Loading
Loading
Loading
+32 −39
Original line number Diff line number Diff line
@@ -61,50 +61,43 @@ def cpu_mask_invalidate(event):
        gdb.events.new_objfile.disconnect(cpu_mask_invalidate)


class CpuList():
    def __init__(self, mask_name):
def cpu_list(mask_name):
    global cpu_mask
        self.mask = None
    mask = None
    if mask_name in cpu_mask:
            self.mask = cpu_mask[mask_name]
        if self.mask is None:
            self.mask = gdb.parse_and_eval(mask_name + ".bits")
        mask = cpu_mask[mask_name]
    if mask is None:
        mask = gdb.parse_and_eval(mask_name + ".bits")
        if hasattr(gdb, 'events'):
                cpu_mask[mask_name] = self.mask
            cpu_mask[mask_name] = mask
            gdb.events.stop.connect(cpu_mask_invalidate)
            if hasattr(gdb.events, 'new_objfile'):
                gdb.events.new_objfile.connect(cpu_mask_invalidate)
        self.bits_per_entry = self.mask[0].type.sizeof * 8
        self.num_entries = self.mask.type.sizeof * 8 / self.bits_per_entry
        self.entry = -1
        self.bits = 0

    def __iter__(self):
        return self

    def __next__(self):
        while self.bits == 0:
            self.entry += 1
            if self.entry == self.num_entries:
                raise StopIteration
            self.bits = self.mask[self.entry]
            if self.bits != 0:
                self.bit = 0
    bits_per_entry = mask[0].type.sizeof * 8
    num_entries = mask.type.sizeof * 8 / bits_per_entry
    entry = -1
    bits = 0

    while True:
        while bits == 0:
            entry += 1
            if entry == num_entries:
                return
            bits = mask[entry]
            if bits != 0:
                bit = 0
                break

        while self.bits & 1 == 0:
            self.bits >>= 1
            self.bit += 1
        while bits & 1 == 0:
            bits >>= 1
            bit += 1

        cpu = self.entry * self.bits_per_entry + self.bit
        cpu = entry * bits_per_entry + bit

        self.bits >>= 1
        self.bit += 1
        bits >>= 1
        bit += 1

        return cpu

    def next(self):
        return self.__next__()
        yield cpu


class PerCpu(gdb.Function):
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ class LxLsmod(gdb.Command):
        for module in module_list():
            ref = 0
            module_refptr = module['refptr']
            for cpu in cpus.CpuList("cpu_possible_mask"):
            for cpu in cpus.cpu_list("cpu_possible_mask"):
                refptr = cpus.per_cpu(module_refptr, cpu)
                ref += refptr['incs']
                ref -= refptr['decs']