bits-688 released with these changes:

  • Test additions and improvements:

    • Add PSD (P-State Dependency) test for processors which require thread-specific scope for the domain. This test currently only applies to Jaketown (SandyBridge-EP).
    • Add tests for _PSS (Pstates).
    • Modify the SMRR test to recognize and abort if model-specific SMRR registers are used. The Intel Software Developer's Manual documents two sets of SMRR registers: the architectural IA32_SMRR_PHYS_BASE and IA32_SMRR_PHYS_MASK supported by all recent processors, which smrr_test can test for, and the older model-specific MSR_SMRR_PHYS_BASE and MSR_SMRR_PHYS_MASK, which smrr_test does not implement tests for. The SMRR test now checks for the latter and stops the test early.
  • Support "Run all tests" in submenus, and support tests which run in submenus but not from the top-level "Run all tests". This allows the creation of special-purpose test groupings (potentially duplicating tests from elsewhere in BITS), such as for specific test checklists.

  • Python API additions and improvements:

    • Add Python API to read and write IO ports.
    • Add Python API for 64-bit memory reads and writes.
    • Add methods to the acpi module to parse the PSD, PSS, and _CST tables.
    • testmsr functions now allow specifying highbit and lowbit rather than shift and mask, and adjust printed output accordingly.
    • Move the Python addr_alignment function to the bits module.
  • Port more functionality to Python:

    • Port legacy PCI operations from C to Python using the new IO port API.
    • Port PCI Express operations from C to Python.
    • Port the format command to Python. In the process, drop support for calling format without passing --dec or --hex, and drop support for hex numbers suffixed by 'h', since no callers used either of those features.
  • Remove various C code that became unused with more ports from C to Python.

  • Merge the "common" C code duplicated in multiple modules into the bitsutil module to share the same implementation.

  • Drop support for faking 64-bit legacy PCI operations via two 32-bit operations.

  • Bugfixes:

    • Fix the docstring for bits.writel to use "dword" rather than "long", for consistency with readl.
    • bits.socket_index should return None for the socket_index if the acpi_id input parameter is None.
    • bits.get_cpupaths no longer returns ACPI namepaths for disabled processors. The ACPI namepaths for processors were already verified to have a status of enabled using ACPICA's AcpiGetObjectInfo(). But if the ACPI _STA() method does not exist (which is often the case for older BIOSes which populate processors in the _PR_ scope instead of the _SB_ scope), AcpiGetObjectInfo() returns a status of Present and Enabled. Add an additional check to ensure that each processor has a valid ApicId or a valid UID in the MADT. On systems without an MADT, bits.get_cpupaths just assumes that all CPUs are enabled.
    • Make the menu entry to run all tests run them in the same order they appear in the test menu, rather than in the arbitrary order of a Python hash.
    • When running all tests, only print submenu headings if they contain a test.
    • The Nehalem power management test needs testpci, so import it.