diff --git a/configs/common/FSConfig.py b/configs/common/FSConfig.py
index d49ad78..e154593 100644
--- a/configs/common/FSConfig.py
+++ b/configs/common/FSConfig.py
@@ -41,12 +41,17 @@
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
+
 import m5
 from m5.objects import *
 from m5.util import *
 from common.Benchmarks import *
 from common import ObjectList
 
+if six.PY3:
+    long = int
+
 # Populate to reflect supported os types per target ISA
 os_types = { 'mips'  : [ 'linux' ],
              'riscv' : [ 'linux' ], # TODO that's a lie
@@ -574,7 +579,7 @@
 
     # We assume below that there's at least 1MB of memory. We'll require 2
     # just to avoid corner cases.
-    phys_mem_size = sum(map(lambda r: r.size(), self.mem_ranges))
+    phys_mem_size = sum([r.size() for r in self.mem_ranges])
     assert(phys_mem_size >= 0x200000)
     assert(len(self.mem_ranges) <= 2)
 
diff --git a/configs/common/FileSystemConfig.py b/configs/common/FileSystemConfig.py
index 97279f1..ec27656 100644
--- a/configs/common/FileSystemConfig.py
+++ b/configs/common/FileSystemConfig.py
@@ -132,7 +132,7 @@
         file_append((procdir, 'cpuinfo'), one_cpu)
 
     file_append((procdir, 'stat'), 'cpu 0 0 0 0 0 0 0\n')
-    for i in xrange(len(cpus)):
+    for i in range(len(cpus)):
         file_append((procdir, 'stat'), 'cpu%d 0 0 0 0 0 0 0\n' % i)
 
     # Set up /sys
diff --git a/configs/common/HMC.py b/configs/common/HMC.py
index c65b201..c4c0acc 100644
--- a/configs/common/HMC.py
+++ b/configs/common/HMC.py
@@ -432,7 +432,7 @@
                                   for i in range(numx*(opt.mem_chunk-1))]
 
         # Buffer iterator
-        it = iter(range(len(system.hmc_dev.buffers)))
+        it = iter(list(range(len(system.hmc_dev.buffers))))
 
         # necesarry to add system_port to one of the xbar
         system.system_port = system.hmc_dev.xbar[3].slave
@@ -443,7 +443,7 @@
                 # connect xbar to all other xbars except itself
                 if i != j:
                     # get the next index of buffer
-                    index = it.next()
+                    index = next(it)
 
                     # Change the default values for ranges of bridge
                     system.hmc_dev.buffers[index].ranges = system.mem_ranges[
diff --git a/configs/common/ObjectList.py b/configs/common/ObjectList.py
index 8bffa5f..c91ea0c 100644
--- a/configs/common/ObjectList.py
+++ b/configs/common/ObjectList.py
@@ -75,7 +75,7 @@
         print("Available {} classes:".format(self.base_cls))
         doc_wrapper = TextWrapper(initial_indent="\t\t",
             subsequent_indent="\t\t")
-        for name, cls in self._sub_classes.items():
+        for name, cls in list(self._sub_classes.items()):
             print("\t{}".format(name))
 
             # Try to extract the class documentation from the class help
@@ -87,7 +87,7 @@
 
         if self._aliases:
             print("\Aliases:")
-            for alias, target in self._aliases.items():
+            for alias, target in list(self._aliases.items()):
                 print("\t{} => {}".format(alias, target))
 
     def get_names(self):
@@ -156,7 +156,7 @@
     def _add_objects(self):
         """ Add all enum values to the ObjectList """
         self._sub_classes = {}
-        for (key, value) in self.base_cls.__members__.items():
+        for (key, value) in list(self.base_cls.__members__.items()):
             # All Enums have a value Num_NAME at the end which we
             # do not want to include
             if not key.startswith("Num_"):
diff --git a/configs/common/Options.py b/configs/common/Options.py
index 6d0c6c2..3eff04b 100644
--- a/configs/common/Options.py
+++ b/configs/common/Options.py
@@ -110,7 +110,7 @@
                       help="Specify the physical memory size (single memory)")
     parser.add_option("--enable-dram-powerdown", action="store_true",
                        help="Enable low-power states in DRAMCtrl")
-    parser.add_option("--mem-channels-intlv", type="int",
+    parser.add_option("--mem-channels-intlv", type="int", default=0,
                       help="Memory channels interleave")
 
 
diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py
index 73a0ff5..e53c755 100644
--- a/configs/common/Simulation.py
+++ b/configs/common/Simulation.py
@@ -40,6 +40,7 @@
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
 import sys
 from os import getcwd
 from os.path import join as joinpath
@@ -52,6 +53,9 @@
 from m5.objects import *
 from m5.util import *
 
+if six.PY3:
+    long = int
+
 addToPath('../common')
 
 def getCPUClass(cpu_type):
diff --git a/configs/common/SysPaths.py b/configs/common/SysPaths.py
index f37039e..440b0cf 100644
--- a/configs/common/SysPaths.py
+++ b/configs/common/SysPaths.py
@@ -55,10 +55,10 @@
                     paths = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
 
                 # expand '~' and '~user' in paths
-                paths = map(os.path.expanduser, paths)
+                paths = list(map(os.path.expanduser, paths))
 
                 # filter out non-existent directories
-                paths = filter(os.path.isdir, paths)
+                paths = list(filter(os.path.isdir, paths))
 
                 if not paths:
                     raise IOError(
diff --git a/configs/dram/lat_mem_rd.py b/configs/dram/lat_mem_rd.py
index 07f9afc..9b04e4b 100644
--- a/configs/dram/lat_mem_rd.py
+++ b/configs/dram/lat_mem_rd.py
@@ -37,6 +37,7 @@
 from __future__ import absolute_import
 
 import gzip
+import six
 import optparse
 import os
 
@@ -52,6 +53,9 @@
 addToPath('../../util')
 import protolib
 
+if six.PY3:
+    long = int
+
 # this script is helpful to observe the memory latency for various
 # levels in a cache hierarchy, and various cache and memory
 # configurations, in essence replicating the lmbench lat_mem_rd thrash
diff --git a/configs/dram/sweep.py b/configs/dram/sweep.py
index d3c86c3..a340b46 100644
--- a/configs/dram/sweep.py
+++ b/configs/dram/sweep.py
@@ -73,7 +73,7 @@
                   help = "Percentage of read commands")
 
 parser.add_option("--mode", type="choice", default="DRAM",
-                  choices=dram_generators.keys(),
+                  choices=list(dram_generators.keys()),
                   help = "DRAM: Random traffic; \
                           DRAM_ROTATE: Traffic rotating across banks and ranks")
 
diff --git a/configs/example/arm/baremetal.py b/configs/example/arm/baremetal.py
index 412625d..04f60a1 100644
--- a/configs/example/arm/baremetal.py
+++ b/configs/example/arm/baremetal.py
@@ -203,7 +203,7 @@
                         help="Disk to instantiate")
     parser.add_argument("--readfile", type=str, default="",
                         help = "File to return with the m5 readfile command")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
diff --git a/configs/example/arm/devices.py b/configs/example/arm/devices.py
index a45188b..cc8ac5e 100644
--- a/configs/example/arm/devices.py
+++ b/configs/example/arm/devices.py
@@ -38,12 +38,17 @@
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
+
 import m5
 from m5.objects import *
 m5.util.addToPath('../../')
 from common.Caches import *
 from common import ObjectList
 
+if six.PY3:
+    long = int
+
 have_kvm = "ArmV8KvmCPU" in ObjectList.cpu_list.get_names()
 have_fastmodel = "FastModelCortexA76" in ObjectList.cpu_list.get_names()
 
diff --git a/configs/example/arm/fs_bigLITTLE.py b/configs/example/arm/fs_bigLITTLE.py
index b7e794d..228d11c 100644
--- a/configs/example/arm/fs_bigLITTLE.py
+++ b/configs/example/arm/fs_bigLITTLE.py
@@ -177,7 +177,7 @@
                         help="Disks to instantiate")
     parser.add_argument("--bootscript", type=str, default=default_rcs,
                         help="Linux bootscript")
-    parser.add_argument("--cpu-type", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu-type", type=str, choices=list(cpu_types.keys()),
                         default="timing",
                         help="CPU simulation mode. Default: %(default)s")
     parser.add_argument("--kernel-init", type=str, default="/sbin/init",
diff --git a/configs/example/arm/starter_fs.py b/configs/example/arm/starter_fs.py
index 7a20280..3033890 100644
--- a/configs/example/arm/starter_fs.py
+++ b/configs/example/arm/starter_fs.py
@@ -208,7 +208,7 @@
                         help="Disk to instantiate")
     parser.add_argument("--script", type=str, default="",
                         help = "Linux bootscript")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
diff --git a/configs/example/arm/starter_se.py b/configs/example/arm/starter_se.py
index 0f20ecc..0003ce9 100644
--- a/configs/example/arm/starter_se.py
+++ b/configs/example/arm/starter_se.py
@@ -183,7 +183,7 @@
 
     parser.add_argument("commands_to_run", metavar="command(s)", nargs='*',
                         help="Command(s) to run")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
diff --git a/configs/example/read_config.py b/configs/example/read_config.py
index 167815c..52a53ba 100644
--- a/configs/example/read_config.py
+++ b/configs/example/read_config.py
@@ -49,7 +49,7 @@
 from __future__ import absolute_import
 
 import argparse
-import ConfigParser
+from six.moves import configparser
 import inspect
 import json
 import re
@@ -63,7 +63,7 @@
     long = int
 
 sim_object_classes_by_name = {
-    cls.__name__: cls for cls in m5.objects.__dict__.values()
+    cls.__name__: cls for cls in list(m5.objects.__dict__.values())
     if inspect.isclass(cls) and issubclass(cls, m5.objects.SimObject) }
 
 # Add some parsing functions to Param classes to handle reading in .ini
@@ -129,7 +129,7 @@
     'EthernetAddr': simple_parser()
     }
 
-for name, parser in param_parsers.items():
+for name, parser in list(param_parsers.items()):
     setattr(m5.params.__dict__[name], 'parse_ini', classmethod(parser))
 
 class PortConnection(object):
@@ -193,7 +193,7 @@
 
         parsed_params = {}
 
-        for param_name, param in object_class._params.items():
+        for param_name, param in list(object_class._params.items()):
             if issubclass(param.ptype, m5.params.ParamValue):
                 if isinstance(param, m5.params.VectorParamDesc):
                     param_values = self.config.get_param_vector(object_name,
@@ -221,7 +221,7 @@
         if object_name == 'Null':
             return NULL
 
-        for param_name, param in obj.__class__._params.items():
+        for param_name, param in list(obj.__class__._params.items()):
             if issubclass(param.ptype, m5.objects.SimObject):
                 if isinstance(param, m5.params.VectorParamDesc):
                     param_values = self.config.get_param_vector(object_name,
@@ -286,11 +286,11 @@
             return NULL
 
         parsed_ports = []
-        for port_name, port in obj.__class__._ports.items():
+        for port_name, port in list(obj.__class__._ports.items()):
             # Assume that unnamed ports are unconnected
             peers = self.config.get_port_peers(object_name, port_name)
 
-            for index, peer in zip(range(0, len(peers)), peers):
+            for index, peer in zip(list(range(0, len(peers))), peers):
                 parsed_ports.append((
                     PortConnection(object_name, port.name, index),
                     PortConnection.from_string(peer)))
@@ -368,12 +368,12 @@
         # Now fill in SimObject-valued parameters in the knowledge that
         #   this won't be interpreted as becoming the parent of objects
         #   which are already in the root hierarchy
-        for name, obj in self.objects_by_name.items():
+        for name, obj in list(self.objects_by_name.items()):
             self.fill_in_simobj_parameters(name, obj)
 
         # Gather a list of all port-to-port connections
         connections = []
-        for name, obj in self.objects_by_name.items():
+        for name, obj in list(self.objects_by_name.items()):
             connections += self.gather_port_connections(name, obj)
 
         # Find an acceptable order to bind those port connections and
@@ -415,7 +415,7 @@
 
 class ConfigIniFile(ConfigFile):
     def __init__(self):
-        self.parser = ConfigParser.ConfigParser()
+        self.parser = configparser.ConfigParser()
 
     def load(self, config_file):
         self.parser.read(config_file)
@@ -466,7 +466,7 @@
             for elem in node:
                 self.find_all_objects(elem)
         elif isinstance(node, dict):
-            for elem in node.values():
+            for elem in list(node.values()):
                 self.find_all_objects(elem)
 
     def load(self, config_file):
@@ -505,7 +505,7 @@
         obj = self.object_dicts[object_name]
 
         children = []
-        for name, node in obj.items():
+        for name, node in list(obj.items()):
             if self.is_sim_object(node):
                 children.append((name, node['path']))
             elif isinstance(node, list) and node != [] and all([
diff --git a/configs/ruby/AMD_Base_Constructor.py b/configs/ruby/AMD_Base_Constructor.py
index cd51bca..a347f43 100644
--- a/configs/ruby/AMD_Base_Constructor.py
+++ b/configs/ruby/AMD_Base_Constructor.py
@@ -34,7 +34,7 @@
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath, convert
-from CntrlBase import *
+from .CntrlBase import *
 
 addToPath('../')
 
diff --git a/configs/ruby/GPU_RfO.py b/configs/ruby/GPU_RfO.py
index 26bea0c..58711ea 100644
--- a/configs/ruby/GPU_RfO.py
+++ b/configs/ruby/GPU_RfO.py
@@ -29,19 +29,23 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
diff --git a/configs/ruby/GPU_VIPER.py b/configs/ruby/GPU_VIPER.py
index f4ecc41..58572ae 100644
--- a/configs/ruby/GPU_VIPER.py
+++ b/configs/ruby/GPU_VIPER.py
@@ -29,19 +29,23 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
@@ -516,16 +520,16 @@
 
     # Register CPUs and caches for each CorePair and directory (SE mode only)
     if not full_system:
-        for i in xrange((options.num_cpus + 1) // 2):
+        for i in range((options.num_cpus + 1) // 2):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = \
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2,
                                           thread_siblings = [])
 
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = \
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2+1,
                                           thread_siblings = [])
 
@@ -564,7 +568,7 @@
                                             line_size = options.cacheline_size,
                                             assoc = options.l3_assoc,
                                             cpus = [n for n in
-                                                xrange(options.num_cpus)])
+                                                range(options.num_cpus)])
 
     gpuCluster = None
     if hasattr(options, 'bw_scalor') and options.bw_scalor > 0:
diff --git a/configs/ruby/GPU_VIPER_Baseline.py b/configs/ruby/GPU_VIPER_Baseline.py
index 46fdec9..5388a4e 100644
--- a/configs/ruby/GPU_VIPER_Baseline.py
+++ b/configs/ruby/GPU_VIPER_Baseline.py
@@ -29,19 +29,23 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
diff --git a/configs/ruby/GPU_VIPER_Region.py b/configs/ruby/GPU_VIPER_Region.py
index 7b15403..a8b39ae 100644
--- a/configs/ruby/GPU_VIPER_Region.py
+++ b/configs/ruby/GPU_VIPER_Region.py
@@ -29,17 +29,21 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import send_evicts
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
diff --git a/configs/ruby/Garnet_standalone.py b/configs/ruby/Garnet_standalone.py
index 4aee7a4..4b7ca8d 100644
--- a/configs/ruby/Garnet_standalone.py
+++ b/configs/ruby/Garnet_standalone.py
@@ -29,7 +29,7 @@
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology, create_directories
+from .Ruby import create_topology, create_directories
 
 #
 # Declare caches used by the protocol
diff --git a/configs/ruby/MESI_Three_Level.py b/configs/ruby/MESI_Three_Level.py
index 0bd893e..7cfb832 100644
--- a/configs/ruby/MESI_Three_Level.py
+++ b/configs/ruby/MESI_Three_Level.py
@@ -31,8 +31,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 #
@@ -294,10 +294,10 @@
         all_cntrls = all_cntrls + [io_controller]
     # Register configuration with filesystem
     else:
-        for i in xrange(options.num_clusters):
-            for j in xrange(num_cpus_per_cluster):
+        for i in range(options.num_clusters):
+            for j in range(num_cpus_per_cluster):
                 FileSystemConfig.register_cpu(physical_package_id = 0,
-                                              core_siblings = xrange(options.num_cpus),
+                                              core_siblings = range(options.num_cpus),
                                               core_id = i*num_cpus_per_cluster+j,
                                               thread_siblings = [])
 
@@ -329,7 +329,7 @@
                                                    num_l2caches_per_cluster)+'B',
                                             line_size = options.cacheline_size,
                                             assoc = options.l2_assoc,
-                                            cpus = [n for n in xrange(i*num_cpus_per_cluster, \
+                                            cpus = [n for n in range(i*num_cpus_per_cluster, \
                                                                      (i+1)*num_cpus_per_cluster)])
 
     ruby_system.network.number_of_virtual_networks = 3
diff --git a/configs/ruby/MESI_Two_Level.py b/configs/ruby/MESI_Two_Level.py
index 3ddf8ef..77fef76 100644
--- a/configs/ruby/MESI_Two_Level.py
+++ b/configs/ruby/MESI_Two_Level.py
@@ -29,8 +29,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
diff --git a/configs/ruby/MI_example.py b/configs/ruby/MI_example.py
index 2ea6699..264f709 100644
--- a/configs/ruby/MI_example.py
+++ b/configs/ruby/MI_example.py
@@ -29,8 +29,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
@@ -113,7 +113,7 @@
         l1_cntrl.responseToCache = MessageBuffer(ordered = True)
         l1_cntrl.responseToCache.slave = ruby_system.network.master
 
-    phys_mem_size = sum(map(lambda r: r.size(), system.mem_ranges))
+    phys_mem_size = sum([r.size() for r in system.mem_ranges])
     assert(phys_mem_size % options.num_dirs == 0)
     mem_module_size = phys_mem_size / options.num_dirs
 
diff --git a/configs/ruby/MOESI_AMD_Base.py b/configs/ruby/MOESI_AMD_Base.py
index aa9dd50..91ff4d2 100644
--- a/configs/ruby/MOESI_AMD_Base.py
+++ b/configs/ruby/MOESI_AMD_Base.py
@@ -34,8 +34,8 @@
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 addToPath('../')
@@ -328,16 +328,16 @@
 
     # Register CPUs and caches for each CorePair and directory (SE mode only)
     if not full_system:
-        for i in xrange((options.num_cpus + 1) // 2):
+        for i in range((options.num_cpus + 1) // 2):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings =
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2,
                                           thread_siblings = [])
 
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings =
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2+1,
                                           thread_siblings = [])
 
@@ -376,7 +376,7 @@
                                             line_size = options.cacheline_size,
                                             assoc = options.l3_assoc,
                                             cpus = [n for n in
-                                                xrange(options.num_cpus)])
+                                                range(options.num_cpus)])
 
     # Assuming no DMA devices
     assert(len(dma_devices) == 0)
diff --git a/configs/ruby/MOESI_CMP_directory.py b/configs/ruby/MOESI_CMP_directory.py
index 2b7770a..8778b61 100644
--- a/configs/ruby/MOESI_CMP_directory.py
+++ b/configs/ruby/MOESI_CMP_directory.py
@@ -41,8 +41,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
diff --git a/configs/ruby/MOESI_CMP_token.py b/configs/ruby/MOESI_CMP_token.py
index a2c41c0..80944f5 100644
--- a/configs/ruby/MOESI_CMP_token.py
+++ b/configs/ruby/MOESI_CMP_token.py
@@ -29,8 +29,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
diff --git a/configs/ruby/MOESI_hammer.py b/configs/ruby/MOESI_hammer.py
index 5aac38b..c83bb72 100644
--- a/configs/ruby/MOESI_hammer.py
+++ b/configs/ruby/MOESI_hammer.py
@@ -29,8 +29,8 @@
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 #
@@ -257,7 +257,7 @@
         all_cntrls = all_cntrls + [io_controller]
     # Register configuration with filesystem
     else:
-        for i in xrange(options.num_cpus):
+        for i in range(options.num_cpus):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = [],
                                           core_id = i,
diff --git a/configs/topologies/MeshDirCorners_XY.py b/configs/topologies/MeshDirCorners_XY.py
index 6d97f82..7d065de 100644
--- a/configs/topologies/MeshDirCorners_XY.py
+++ b/configs/topologies/MeshDirCorners_XY.py
@@ -101,7 +101,7 @@
         # NUMA Node for each quadrant
         # With odd columns or rows, the nodes will be unequal
         numa_nodes = [ [], [], [], []]
-        for i in xrange(num_routers):
+        for i in range(num_routers):
             if i % num_columns < num_columns / 2  and \
                i < num_routers / 2:
                 numa_nodes[0].append(i)
diff --git a/configs/topologies/Mesh_XY.py b/configs/topologies/Mesh_XY.py
index 3ae3485..64a8506 100644
--- a/configs/topologies/Mesh_XY.py
+++ b/configs/topologies/Mesh_XY.py
@@ -176,6 +176,6 @@
 
     # Register nodes with filesystem
     def registerTopology(self, options):
-        for i in xrange(options.num_cpus):
+        for i in range(options.num_cpus):
             FileSystemConfig.register_node([i],
                     MemorySize(options.mem_size) / options.num_cpus, i)
