Ejemplo n.º 1
0
    def setUp(self):

        """
        Gets the console and set-up the machine for test
        """
        if 'ppc' not in distro.detect().arch:
            self.cancel("Processor is not ppc64")
        output = genio.read_file("/sys/kernel/debug/powerpc/eeh_enable")\
            .strip()
        if output != '0x1':
            self.cancel("EEH is not enabled, please enable via FSP")
        self.max_freeze = int(self.params.get('max_freeze', default='1'))
        cmd = "echo %d > /sys/kernel/debug/powerpc/eeh_max_freezes"\
            % self.max_freeze
        process.system(cmd, ignore_status=True, shell=True)
        self.function = str(self.params.get('function', default='4'))
        self.err = str(self.params.get('err'))
        self.pci_device = str(self.params.get('pci_device', default=' '))
        self.phb = self.pci_device.split(":", 1)[0]
        self.addr = genio.read_file("/sys/bus/pci/devices/%s/"
                                    "eeh_pe_config_addr" % self.pci_device)
        self.addr = str(self.addr).rstrip()
        self.err = 0
        for line in process.system_output('lspci -vs %s' % self.pci_device,
                                          ignore_status=True,
                                          shell=True).splitlines():
            if 'Memory' in line and '64-bit, prefetchable' in line:
                self.err = 1
                break
        self.mem_addr = pci.get_memory_address(self.pci_device)
        self.mask = pci.get_mask(self.pci_device)
        self.log.info("Test-----> %s", self.addr)
        self.log.info("===============Testing EEH Frozen PE==================")
 def test_eeh_basic_pe(self):
     """
     Test to execute basic error injection on PE
     """
     for self.addr in self.pci_addr:
         enter_loop = True
         num_of_miss = 0
         num_of_hit = 0
         self.pci_mem_addr = pci.get_memory_address(self.addr)
         self.pci_mask = pci.get_mask(self.addr)
         self.pci_class_name = pci.get_pci_class_name(self.addr)
         if self.pci_class_name == 'fc_host':
             self.pci_class_name = 'scsi_host'
         self.pci_interface = pci.get_interfaces_in_pci_address(
             self.addr, self.pci_class_name)[-1]
         self.log.info("PCI addr = %s" % self.addr)
         self.log.info("PCI mem_addr = %s" % self.pci_mem_addr)
         self.log.info("PCI mask = %s" % self.pci_mask)
         self.log.info("PCI class name = %s" % self.pci_class_name)
         self.log.info("PCI interface = %s" % self.pci_interface)
         while num_of_hit <= self.max_freeze:
             for func in self.function:
                 self.log.info("Running error inject on pe %s function %s"
                               % (self.addr, func))
                 if num_of_miss < 5:
                     return_code = self.basic_eeh(func,
                                                  self.pci_class_name,
                                                  self.pci_interface,
                                                  self.pci_mem_addr,
                                                  self.pci_mask,
                                                  self.add_cmd)
                     if return_code == EEH_MISS:
                         num_of_miss += 1
                         self.log.info("number of miss is %d"
                                       % num_of_miss)
                         continue
                     else:
                         num_of_hit += 1
                         self.log.info("number of hit is %d"
                                       % num_of_hit)
                         if num_of_hit <= self.max_freeze:
                             if not self.check_eeh_pe_recovery(self.addr):
                                 self.fail("PE %s recovery failed after"
                                           "%d EEH" % (self.addr,
                                                       num_of_hit))
                                 break
                             else:
                                 self.log.info("PE recovered successfully")
                 else:
                     self.log.warning("EEH inject failed for 5 times with\
                                function %s" % func)
                     enter_loop = False
                     break
             if not enter_loop:
                 break
         else:
             if self.check_eeh_removed():
                 self.log.info("PE %s removed successfully" % self.addr)
             else:
                 self.fail("PE %s not removed after max hit" % self.addr)
Ejemplo n.º 3
0
 def test_eeh_basic_pe(self):
     """
     Test to execute basic error injection on PE
     """
     for self.addr in pci.get_pci_addresses():
         self.pci_mem_addr = pci.get_memory_address(self.addr)
         self.pci_mask = pci.get_mask(self.addr)
         self.pci_class_name = pci.get_pci_class_name(self.addr)
         self.pci_interface = pci.get_interfaces_in_pci_address(
             self.addr, self.pci_class_name)[-1]
         self.log.info("PCI addr = %s" % self.addr)
         self.log.info("PCI mem_addr = %s" % self.pci_mem_addr)
         self.log.info("PCI mask = %s" % self.pci_mask)
         self.log.info("PCI class name = %s" % self.pci_class_name)
         self.log.info("PCI interface = %s" % self.pci_interface)
         for func in self.function:
             self.log.info("Running error injection on pe %s function %s" %
                           (self.addr, func))
             self.return_code = self.basic_eeh(func, self.pci_class_name,
                                               self.pci_interface,
                                               self.pci_mem_addr,
                                               self.pci_mask)
             if self.return_code == EEH_MISS:
                 continue
             else:
                 if not self.check_eeh_pe_recovery(self.addr):
                     self.fail("PE %s recovery failed after first EEH" %
                               self.addr)
                     break
                 self.log.info("PE recovered successfully")
Ejemplo n.º 4
0
 def test_eeh_basic_pe(self):
     """
     Test to execute basic error injection on PE
     """
     for self.addr in pci.get_pci_addresses():
         enter_loop = True
         num_of_miss = 0
         num_of_hit = 0
         self.pci_mem_addr = pci.get_memory_address(self.addr)
         self.pci_mask = pci.get_mask(self.addr)
         self.pci_class_name = pci.get_pci_class_name(self.addr)
         self.pci_interface = pci.get_interfaces_in_pci_address(
             self.addr, self.pci_class_name)[-1]
         self.log.info("PCI addr = %s" % self.addr)
         self.log.info("PCI mem_addr = %s" % self.pci_mem_addr)
         self.log.info("PCI mask = %s" % self.pci_mask)
         self.log.info("PCI class name = %s" % self.pci_class_name)
         self.log.info("PCI interface = %s" % self.pci_interface)
         while num_of_hit <= self.max_freeze:
             for func in self.function:
                 self.log.info("Running error inject on pe %s function %s"
                               % (self.addr, func))
                 if num_of_miss < 5:
                     return_code = self.basic_eeh(func,
                                                  self.pci_class_name,
                                                  self.pci_interface,
                                                  self.pci_mem_addr,
                                                  self.pci_mask)
                     if return_code == EEH_MISS:
                         num_of_miss += 1
                         self.log.info("number of miss is %d"
                                       % num_of_miss)
                         continue
                     else:
                         num_of_hit += 1
                         self.log.info("number of hit is %d"
                                       % num_of_hit)
                         if num_of_hit <= self.max_freeze:
                             if not self.check_eeh_pe_recovery(self.addr):
                                 self.fail("PE %s recovery failed after"
                                           "%d EEH" % (self.addr,
                                                       num_of_hit))
                                 break
                             else:
                                 self.log.info("PE recovered successfully")
                 else:
                     self.log.warning("EEH inject failed for 5 times with\
                                function %s" % func)
                     enter_loop = False
                     break
             if not enter_loop:
                 break
         else:
             if self.check_eeh_removed():
                 self.log.info("PE %s removed successfully" % self.addr)
             else:
                 self.fail("PE %s not removed after max hit" % self.addr)
Ejemplo n.º 5
0
 def setUp(self):
     """
     Gets the console and set-up the machine for test
     """
     if 'ppc' not in distro.detect().arch:
         self.cancel("Processor is not ppc64")
     eeh_enable_file = "/sys/kernel/debug/powerpc/eeh_enable"
     if '0x1' not in genio.read_file(eeh_enable_file).strip():
         self.cancel("EEH is not enabled, please enable via FSP")
     self.max_freeze = self.params.get('max_freeze', default=1)
     self.pci_device = self.params.get('pci_device', default="")
     self.add_cmd = self.params.get('additional_command', default='')
     if not self.pci_device:
         self.cancel("No PCI Device specified")
     self.function = str(self.params.get('function')).split(" ")
     smm = SoftwareManager()
     if not smm.check_installed("pciutils") and not smm.install("pciutils"):
         self.cancel("pciutils package is need to test")
     self.mem_addr = pci.get_memory_address(self.pci_device)
     self.mask = pci.get_mask(self.pci_device)
     if self.is_baremetal():
         cmd = "echo %d > /sys/kernel/debug/powerpc/eeh_max_freezes"\
             % self.max_freeze
         process.system(cmd, ignore_status=True, shell=True)
         self.phb = self.pci_device.split(":", 1)[0]
         self.addr = genio.read_file("/sys/bus/pci/devices/%s/"
                                     "eeh_pe_config_addr" % self.pci_device)
         self.addr = str(self.addr).rstrip()
         self.err = 0
         for line in process.system_output('lspci -vs %s' % self.pci_device,
                                           ignore_status=True,
                                           shell=True).decode("utf-8\
                                           ").splitlines():
             if 'Memory' in line and '64-bit, prefetchable' in line:
                 self.err = 1
                 break
     else:
         self.pci_class_name = pci.get_pci_class_name(self.pci_device)
         if self.pci_class_name == 'fc_host':
             self.pci_class_name = 'scsi_host'
         self.pci_interface = pci.get_interfaces_in_pci_address(
             self.pci_device, self.pci_class_name)[-1]
     self.log.info("===============Testing EEH Frozen PE==================")