From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, pbonzini@redhat.com, armbru@redhat.com,
stefanha@redhat.com, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH 00/15] AHCI test helper refactors
Date: Mon, 03 Nov 2014 13:41:17 -0500 [thread overview]
Message-ID: <5457CC4D.2000101@redhat.com> (raw)
In-Reply-To: <1411083819-9284-1-git-send-email-jsnow@redhat.com>
PING for this refactor series, which will allow me to check in more AHCI
tests. To assist review, I'll annotate this cover letter a little bit
with some additional information.
The hardest/ugliest patch to review is the first one, but it is
primarily just variable name/location changes and nothing substantial.
The subsequent patches are all fairly small in scope and mostly
mechanical refactors, but do include some enhanced functionality beyond
the scope of what the identify test requires, but will be useful later
for additional tests.
The primary purpose of this series is to break up the monolithic
identify test into smaller parts that allow it to be easily recycled for
testing other ATA commands in the future.
(And by "in the future" I mean "I have a lot of test cases on my hard
drive that I'd like to submit, but they use these re-factored helper
commands.")
On 09/18/2014 07:43 PM, John Snow wrote:
> The original version of the AHCI test base
> which is now staged for being merged, processes
> the ahci_identify test in a monolithic fashion.
>
> In authoring new tests, it became necessary and
> obvious as to how the operation of this device
> should be factored out to ease the writing of
> new AHCI tests.
>
> This patch set issues the necessary refactorings
> to support future test development for AHCI.
>
> This patch set DOES NOT account for any new fixes
> and requires no fixes from my "AHCI fixes" RFC
> in order to run successfully on 2014-09-18's
> origin/master.
>
> This patch set does not alter the operation of the
> existing test, or add new tests. It only offers
> refactorings for future patch submissions which
> depend on them, but are still under consideration.
>
> John Snow (15):
> qtest/ahci: Add AHCIState structure
This patch adds a state structure that the test uses to track various
fields and information within the AHCI device during the run of the
test, so we don't have to keep re-querying and re-verifying the sanity
of various pointer fields stored in guest memory.
Capabilities, pointers, and other metadata are now stored within this
AHCIState object.
Many function declarations are changed from accepting a QPCIDevice
and/or a pointer to the HBA configuration space to just accepting a
pointer to the new state object. Many macros are changed to operate on
this object.
It's mostly just a lot of churn without much functional difference, but
it keeps the code in future tests a little nicer, and the object is
managed in a functional way in order to prevent state differences from
impacting the results of subsequent test runs.
> qtest/ahci: Add port_select helper
Factor out the loop that finds the first used port.
> qtest/ahci: Add port_clear helper
Factor out the code that resets a port's state back to a known value.
> qtest/ahci: Add command header helpers
-Compress 32bit upper/lower fields into single 64bit address fields.
-Add get_command_header, set_command_header and destroy_command as
helpers to help retrieve the command information stored within the
command list buffer (CLB)
-Add pick_cmd which picks a command slot (0-31) to use for a new command
being built. pick_cmd attempts to cycle through all of the command slots
instead of re-using a previous slot, to mimic real AHCI behavior.
> qtest/ahci: Add build cmd table helper
build_cmd_table is added as a helper that builds the actual command that
is pointed to by the command header structure -- the CTBA (Command Table
Base Address.) Much of the logic of building the command table is ripped
out of the identify test case and isolated within this helper.
> qtest/ahci: Add link_cmd_slot helper
Generate a Command Header for use in the CLB from a given Table pointer,
then commit the new header to the CLB. This command "links" the command
list and the command table. The chosen command slot is returned.
> qtest/ahci: Add port_check_error helper
Common error flags in the registers and FIS are checked in a separate
function that can now be recycled.
> qtest/ahci: Add issue_command helper
The code responsible for actually issuing a command once it is in-place
is factored out into its own function.
> qtest/ahci: Add port_check_interrupts helper
This helper is a shorthand for confirming that the interrupt status of a
specific port is what we expect it to be; then clears the interrupt.
> qtest/ahci: Add port_check_nonbusy helper
Simply asserts that the state of the port is consistent with what we
expect a port who is ready to receive another command would be. This is
an addition instead of a refactor.
> qtest/ahci: Add cmd response sanity check helpers
- Fields in the FIS structure are renamed to be a little clearer.
- A PIO Setup FIS structure is added.
- Port_Check_D2H_Sanity inspects a D2H Register FIS from the device and
makes sure it looks appropriate.
- Port_Check_PIO_Sanity does the same for a PIO Setup FIS.
- Port_Check_CMD_Sanity primarily checks the byte count response that is
stored within the command header to ensure it matches what we think it
should be (the full size of the transfer.)
All of the patches below this point are even smaller "niceness" fixes
that don't really refactor anything at all:
> qtest/ahci: Enforce zero-leaks for guest mem usage
Utilize extra flags to the PC Alloc layer in libqos to add an assertion
if we leak any memory. This is mostly for debugging niceness to prove
that we are not dropping any guest memory in the various linked AHCI
structures. It also served as a POC for the new linked-list malloc
implementation in libqos.
> qtest/ahci: Add a macro bootup routine
For future use: Now that we have tests that establish the subcomponents
of an AHCI bootup are sane, add a command that will all-at-once bring
the AHCI device up to functional status for us. This may be useful for
other tests in the future, as well, that would like to run various tests
while using the AHCI controller.
> qtest/ahci: Add human-readable command names
Mostly for future use: add some ATA command mnemonic mappings instead of
using the raw hex codes.
> qtest/ahci: Don't use a magic constant for buffer size
Small niceness: Get rid of the magic constant '512' for the IDENTIFY
buffer size test routine.
>
> tests/ahci-test.c | 860 ++++++++++++++++++++++++++++++++++++------------------
> 1 file changed, 583 insertions(+), 277 deletions(-)
>
next prev parent reply other threads:[~2014-11-03 18:41 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-18 23:43 [Qemu-devel] [PATCH 00/15] AHCI test helper refactors John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 01/15] qtest/ahci: Add AHCIState structure John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 02/15] qtest/ahci: Add port_select helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 03/15] qtest/ahci: Add port_clear helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 04/15] qtest/ahci: Add command header helpers John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 05/15] qtest/ahci: Add build cmd table helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 06/15] qtest/ahci: Add link_cmd_slot helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 07/15] qtest/ahci: Add port_check_error helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 08/15] qtest/ahci: Add issue_command helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 09/15] qtest/ahci: Add port_check_interrupts helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 10/15] qtest/ahci: Add port_check_nonbusy helper John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 11/15] qtest/ahci: Add cmd response sanity check helpers John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 12/15] qtest/ahci: Enforce zero-leaks for guest mem usage John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 13/15] qtest/ahci: Add a macro bootup routine John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 14/15] qtest/ahci: Add human-readable command names John Snow
2014-09-18 23:43 ` [Qemu-devel] [PATCH 15/15] qtest/ahci: Don't use a magic constant for buffer size John Snow
2014-09-19 10:53 ` [Qemu-devel] [PATCH 00/15] AHCI test helper refactors Markus Armbruster
2014-09-19 12:57 ` Stefan Hajnoczi
2014-09-19 15:28 ` John Snow
2014-11-03 18:41 ` John Snow [this message]
2015-01-08 16:25 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5457CC4D.2000101@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).