1. 16 2月, 2015 20 次提交
    • J
      libqos/ahci: Add cmd response sanity check helpers · d1ef8838
      John Snow 提交于
      This patch adds a few helpers to help sanity-check the response of the
      AHCI device after a command.
      
      ahci_d2h_check_sanity inspects the D2H Register FIS,
      ahci_pio_check_sanity inspects the PIO Setup FIS, and
      ahci_cmd_check_sanity inspects the command header.
      
      To support the PIO sanity check, a new structure is added for the
      PIO Setup FIS type. Existing FIS types (H2D and D2H) have had their
      members renamed slightly to condense reserved members into fewer
      fields; and LBA fields are now represented by arrays of 8 byte chunks
      instead of independent variables.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-9-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      d1ef8838
    • J
      libqos/ahci: Add port_check_nonbusy helper · 89a46723
      John Snow 提交于
      A simple helper that asserts a given port is not busy processing any
      commands via the TFD, Command Issue and SACT registers.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-8-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      89a46723
    • J
      libqos/ahci: Add ahci_port_check_interrupts helper · 5bf99aa1
      John Snow 提交于
      A helper that compares a given port's current interrupts and checks them
      against a supplied list of expected interrupt bits, and throws an error
      if they do not match.
      
      The helper then resets the requested interrupts on this port, and asserts
      that the interrupt register is now empty.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-7-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      5bf99aa1
    • J
      libqos/ahci: Add ahci_port_check_error helper · 85c34e93
      John Snow 提交于
      ahci_port_check_error checks a given port's error registers and asserts
      that everything from the port-level view is still OK.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-6-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      85c34e93
    • J
      libqos/ahci: Add command header helpers · 6cae27a6
      John Snow 提交于
      Adds command header helper functions:
      -ahci_command_header_set
      -ahci_command_header_get,
      -ahci_command_destroy, and
      -ahci_cmd_pick
      
      These helpers help to quickly manage the command header information in
      the AHCI device.
      
      ahci_command_header_set and get will store or retrieve an AHCI command
      header, respectively.
      
      ahci_cmd_pick chooses the first available but least recently used
      command slot to allow us to cycle through the available command slots.
      
      ahci_command_destroy obliterates all information contained within a
      given slot's command header, and frees its associated command table,
      but not its DMA buffer!
      
      Lastly, the command table pointer fields (dba and dbau) are merged into
      a single 64bit value to make managing 64bit tests simpler.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 1423158090-25580-5-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      6cae27a6
    • J
      qtest/ahci: rename 'Command' to 'CommandHeader' · c7f9c570
      John Snow 提交于
      The structure name is a bit of a misnomer; the structure currently named
      command is actually the commandheader. A future patch in this series
      will add an actual "Command" structure, so we'll rename it now before the
      rest of the functions in this series try to use it.
      
      In addition, rename the "b1" and "b2" fields
      to be a unified uint16_t named "flags."
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Message-id: 1423158090-25580-4-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      c7f9c570
    • J
      libqos/ahci: Add ahci_port_clear helper · e83fd96b
      John Snow 提交于
      Add a helper that assists in clearing out potentially old error and FIS
      information from an AHCI port's data structures. This ensures we always
      start with a blank slate for interrupt and FIS receipt information.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-3-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      e83fd96b
    • J
      libqos/ahci: Add ahci_port_select helper · e77448a3
      John Snow 提交于
      This helper identifies which port of the
      AHCI HBA has a device we may run tests on.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1423158090-25580-2-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      e77448a3
    • J
      libqos/ahci: create libqos/ahci.c · 9a75b0a0
      John Snow 提交于
      With global state removed, code responsible for booting up,
      verifying, and initializing the AHCI HBA is extracted and
      inserted into libqos/ahci.c, which would allow for other
      qtests in the future to quickly grab a meaningfully initialized
      reference to an AHCI HBA.
      
      Even without other users, functionalizing and isolating the code
      assists future AHCI tests that exercise Q35 migration.
      
      For now, libqos/ahci.o will be PC-only, but can be expanded into
      something arch-agnostic in the future, if needed.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-16-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      9a75b0a0
    • J
      qtest/ahci: Bookmark FB and CLB pointers · f3dd2da4
      John Snow 提交于
      Instead of re-querying the AHCI device for the FB and CLB buffers, save
      the pointer we gave to the device during initialization and reference
      these values instead.
      
      [Peter Maydell <peter.maydell@linaro.org> reported the following clang
      compiler warnings:
      
        tests/libqos/ahci.c:256:40: warning: format specifies type 'unsigned
            long' but the argument has type 'uint64_t'
            (aka 'unsigned long long') [-Wformat]
              g_test_message("CLB: 0x%08lx", ahci->port[i].clb);
        tests/libqos/ahci.c:264:39: warning: format specifies type 'unsigned
            long' but the argument has type 'uint64_t'
            (aka 'unsigned long long') [-Wformat]
              g_test_message("FB: 0x%08lx", ahci->port[i].fb);
      
      The commit moved from uint32_t to uint64_t, so PRIx64 should be used for
      the format specifier.
      --Stefan]
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-15-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      f3dd2da4
    • J
      libqos/ahci: Functional register helpers · 4882f359
      John Snow 提交于
      Introduce a set of "static inline" register helpers that are intended to
      replace the current set of macros with more functional versions that are
      better suited to inclusion in libqos than porcelain macros.
      
      As a stopgap measure before eliminating the porcelain macros, define them
      to use the new functions defined in the ahci.h header.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-13-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      4882f359
    • J
      qtest/ahci: finalize AHCIQState consolidation · 8d5eeced
      John Snow 提交于
      Move barsize, ahci_fingerprint and capabilities registers into
      the AHCIQState object, removing global ahci-related state
      from the ahci-test.c file.
      
      More churn, less globals.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-10-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      8d5eeced
    • J
      qtest/ahci: Store hba_base in AHCIQState · 6100ddb0
      John Snow 提交于
      Store the HBA memory base address in the new state object, to simplify
      function prototypes and encourage a more functional testing style.
      
      This causes a lot of churn, but this patch is as "simplified" as I could
      get it to be. This patch is therefore fairly mechanical and straightforward:
      Any case where we pass "hba_base" has been consolidated into the AHCIQState
      object and we pass the one unified parameter.
      
      Any case where we reference "ahci" and "hba_state" have been modified to use
      "ahci->dev" for the PCIDevice and "ahci->hba_state" to get at the base memory
      address, accordingly.
      
      Notes:
      
       - A needless return is removed from start_ahci_device.
      
       - For ease of reviewing, this patch can be reproduced (mostly) by:
         # Replace (ahci, hba_base) prototypes with unified parameter
         's/(QPCIDevice \*ahci, void \*\?\*hba_base/(AHCIQState *ahci/'
      
         # Replace (ahci->dev, hba_base) calls with unified parameter
         's/(ahci->dev, &\?hba_base)/(ahci)/'
      
         # Replace calls to PCI config space using "ahci" with "ahci->dev"
         's/qpci_config_\(read\|write\)\(.\)(ahci,/qpci_config_\1\2(ahci->dev,/'
      
         After these, the remaining differences are easy to review by hand.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-9-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      6100ddb0
    • J
      libqos: add pc specific interface · 90e5add6
      John Snow 提交于
      Create an operations structure so that the libqos interface can be
      architecture agnostic, and create a pc-specific interface to functions
      like qtest_boot.
      
      Move the libqos object in the Makefile from being ahci-test only to
      being linked with all tests that utilize the libqos features.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-8-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      90e5add6
    • J
      libqos: Update QGuestAllocator to be opaque · f6f363c1
      John Snow 提交于
      To avoid the architecture-specific implementations of the generic qtest
      allocator having to know about fields within the allocator, add a
      page_size setter method for users or arch specializations to use.
      The allocator will assume a default page_size for general use, but it
      can always be overridden.
      
      Since this was the last instance of code directly using properties of the
      QGuestAllocator object directly, modify the type to be opaque and move
      the structure inside of malloc.c.
      
      mlist_new, which was previously exported, is made static local to malloc.c,
      as it has no external users.
      
      [Peter Maydell <peter.maydell@linaro.org> reported the following clang
      warning:
        tests/libqos/malloc.c:35:3: warning:
        redefinition of typedef 'QGuestAllocator' is a C11 feature
              [-Wtypedef-redefinition]
        } QGuestAllocator;
      
      I converted typedef struct ... QGuestAllocator; to struct ...;
      --Stefan]
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NMarc Marí <marc.mari.barcelo@gmail.com>
      Message-id: 1421698563-6977-7-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      f6f363c1
    • J
      libqos: add alloc_init_flags · fa02e608
      John Snow 提交于
      Allow a generic interface to alloc_init_flags,
      not just through pc_alloc_init_flags.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-6-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      fa02e608
    • J
      libqos: add qtest_vboot · f1518d11
      John Snow 提交于
      Add a va_list variant of the qtest_boot function.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-5-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      f1518d11
    • J
      libqos: create libqos.c · dd0029c0
      John Snow 提交于
      The intent of this file is to serve as a misc. utilities file to be
      shared amongst tests that are utilizing libqos facilities.
      
      In a later patch, migration test helpers will be added to libqos.c that
      will allow simplified testing of migration cases where libqos is
      "Just Enough OS" for migrations testing.
      
      The addition of the AHCIQState structure will also allow us to eliminate
      global variables inside of qtests to manage allocators and test instances
      in a better, more functional way.
      
      libqos.c:
              - Add qtest_boot
              - Add qtest_shutdown
      
      libqos.h:
              - Create QOSState structure for allocator and QTestState.
      
      ahci-test.c:
              - Move qtest_boot and qtest_shutdown to libqos.c/h
              - Create AHCIQState to interface with new qtest_boot/shutdown prototypes
              - Modify tests slightly to use new types.
      
      For now, the new object file is only linked to ahci-test, because it still
      relies on pc architecture specific code in libqos. The next two patches will
      reorganize the code to be more general.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-4-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      dd0029c0
    • J
      qtest/ahci: Create ahci.h · 90fc5e09
      John Snow 提交于
      Extract defines and other information to ahci.h, to be shared with other
      tests if they so please.
      
      At the very least, reduce clutter in the test file itself.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-3-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      90fc5e09
    • J
      libqos: Split apart pc_alloc_init · af77f2cd
      John Snow 提交于
      Move the list-specific initialization over into
      malloc.c, to keep all of the list implementation
      details within the same file.
      
      The allocation and freeing of these structures are
      now both back within the same layer.
      Signed-off-by: NJohn Snow <jsnow@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      Message-id: 1421698563-6977-2-git-send-email-jsnow@redhat.com
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      af77f2cd
  2. 13 1月, 2015 1 次提交
  3. 15 10月, 2014 3 次提交
  4. 30 9月, 2014 2 次提交
    • S
      libqos: use microseconds instead of iterations for virtio timeout · 70556264
      Stefan Hajnoczi 提交于
      Some hosts are slow or overloaded so test execution takes a long time.
      Test cases use timeouts to protect against an infinite loop stalling the
      test forever (especially important in automated test setups).
      
      Commit 6cd14054 ("libqos virtio:
      Increase ISR timeout") increased the clock_step() value in an attempt to
      lengthen the virtio interrupt wait timeout, but timeout failures are
      still occuring on the Travis automated testing platform.
      
      This is because clock_step() only affects the guest's virtual time.
      Virtio requests can be bottlenecked on host disk I/O latency - which
      cannot be improved by stepping the clock, so the fix was ineffective.
      
      This patch changes the qvirtio_wait_queue_isr() and
      qvirtio_wait_config_isr() timeout mechanism from loop iterations to
      microseconds.  This way the test case can specify an absolute 30 second
      timeout.  Number of loop iterations is not a reliable timeout mechanism
      since the speed depends on many factors including host performance.
      
      Tests should no longer timeout on overloaded Travis instances.
      
      Cc: Marc Marí <marc.mari.barcelo@gmail.com>
      Reported-by: NPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      70556264
    • S
      libqos: improve event_index test with timeout · e8c81b4d
      Stefan Hajnoczi 提交于
      The virtio event_index feature lets the device driver tell the device
      how many requests to process before raising the next interrupt.
      virtio-blk-test.c tries to verify that the device does not raise an
      interrupt unnecessarily.
      
      Unfortunately the test has a race condition.  It spins checking for an
      interrupt up to 100 times and then assumes the request has finished.  On
      a slow host the I/O request could still be in flight and the test would
      fail.
      
      This patch waits for the request to complete, or until a 30-second
      timeout is reached.  If an interrupt is raised while waiting the test
      fails since the device was not supposed to raise interrupts.
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      e8c81b4d
  5. 22 9月, 2014 1 次提交
  6. 12 9月, 2014 1 次提交
  7. 08 9月, 2014 7 次提交
  8. 16 8月, 2014 5 次提交