diff --git a/linux-ramdump-parser-v2/parsers/workqueue.py b/linux-ramdump-parser-v2/parsers/workqueue.py
index 183cb03d8747cd81ffae305c313fd988e8bd5ac8..27b25ce92bf6bfe38c98a9752254d682b32ce366 100644
--- a/linux-ramdump-parser-v2/parsers/workqueue.py
+++ b/linux-ramdump-parser-v2/parsers/workqueue.py
@@ -342,7 +342,6 @@ class Workqueues(RamParser):
     def print_workqueue_state_3_10(self, ram_dump):
         print_out_str(
             '======================= WORKQUEUE STATE ============================')
-        per_cpu_offset_addr = ram_dump.addr_lookup('__per_cpu_offset')
         cpu_worker_pools_addr = ram_dump.addr_lookup('cpu_worker_pools')
 
         busy_hash_offset = ram_dump.field_offset(
@@ -362,22 +361,15 @@ class Workqueues(RamParser):
         worker_pool_size = ram_dump.sizeof('struct worker_pool')
         pending_work_offset = ram_dump.field_offset(
             'struct worker_pool', 'worklist')
-        cpu_present_bits_addr = ram_dump.addr_lookup('cpu_present_bits')
-        cpu_present_bits = ram_dump.read_word(cpu_present_bits_addr)
-        cpus = bin(cpu_present_bits).count('1')
 
         s = '<'
         for a in range(0, 64):
             s = s + 'I'
 
-        for i in range(0, cpus):
+        for i in ram_dump.iter_cpus():
             busy_hash = []
-            if per_cpu_offset_addr is None:
-                offset = 0
-            else:
-                offset = ram_dump.read_word(per_cpu_offset_addr + 4 * i)
 
-            worker_pool = cpu_worker_pools_addr + offset
+            worker_pool = cpu_worker_pools_addr + ram_dump.per_cpu_offset(i)
             # Need better way to ge the number of pools...
             for k in range(0, 2):
                 worker_pool_i = worker_pool + k * worker_pool_size