qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, qemu-block@nongnu.org, zuban32s@gmail.com,
	qemu-devel@nongnu.org, stefanha@redhat.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/4] qtest/ahci: export generate_pattern
Date: Thu, 10 Sep 2015 17:40:18 -0400	[thread overview]
Message-ID: <55F1F8C2.1050807@redhat.com> (raw)
In-Reply-To: <87pp1q7htu.fsf@blackfin.pond.sub.org>



On 09/10/2015 05:18 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
> 
>> Share the pattern function for ide and ahci test.
>>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>  tests/ahci-test.c     | 26 --------------------------
>>  tests/libqos/libqos.c | 26 ++++++++++++++++++++++++++
>>  tests/libqos/libqos.h |  1 +
>>  3 files changed, 27 insertions(+), 26 deletions(-)
>>
>> diff --git a/tests/ahci-test.c b/tests/ahci-test.c
>> index b1a785c..59d387c 100644
>> --- a/tests/ahci-test.c
>> +++ b/tests/ahci-test.c
>> @@ -71,32 +71,6 @@ static void string_bswap16(uint16_t *s, size_t bytes)
>>      }
>>  }
>>  
>> -static void generate_pattern(void *buffer, size_t len, size_t cycle_len)
>> -{
>> -    int i, j;
>> -    unsigned char *tx = (unsigned char *)buffer;
>> -    unsigned char p;
>> -    size_t *sx;
>> -
>> -    /* Write an indicative pattern that varies and is unique per-cycle */
>> -    p = rand() % 256;
>> -    for (i = 0; i < len; i++) {
>> -        tx[i] = p++ % 256;
>> -        if (i % cycle_len == 0) {
>> -            p = rand() % 256;
>> -        }
>> -    }
>> -
>> -    /* force uniqueness by writing an id per-cycle */
>> -    for (i = 0; i < len / cycle_len; i++) {
>> -        j = i * cycle_len;
>> -        if (j + sizeof(*sx) <= len) {
>> -            sx = (size_t *)&tx[j];
>> -            *sx = i;
>> -        }
>> -    }
>> -}
>> -
>>  /**
>>   * Verify that the transfer did not corrupt our state at all.
>>   */
>> diff --git a/tests/libqos/libqos.c b/tests/libqos/libqos.c
>> index fce625b..8d7c5a9 100644
>> --- a/tests/libqos/libqos.c
>> +++ b/tests/libqos/libqos.c
>> @@ -212,3 +212,29 @@ void prepare_blkdebug_script(const char *debug_fn, const char *event)
>>      ret = fclose(debug_file);
>>      g_assert(ret == 0);
>>  }
>> +
>> +void generate_pattern(void *buffer, size_t len, size_t cycle_len)
>> +{
>> +    int i, j;
>> +    unsigned char *tx = (unsigned char *)buffer;
>> +    unsigned char p;
>> +    size_t *sx;
>> +
>> +    /* Write an indicative pattern that varies and is unique per-cycle */
>> +    p = rand() % 256;
>> +    for (i = 0; i < len; i++) {
>> +        tx[i] = p++ % 256;
>> +        if (i % cycle_len == 0) {
>> +            p = rand() % 256;
>> +        }
>> +    }
>> +
>> +    /* force uniqueness by writing an id per-cycle */
>> +    for (i = 0; i < len / cycle_len; i++) {
>> +        j = i * cycle_len;
>> +        if (j + sizeof(*sx) <= len) {
>> +            sx = (size_t *)&tx[j];
> 
> Relies on cycle_len being a multiple of size_t's alignment.  So far,
> it's always AHCI_SECTOR_SIZE, which should do.
> 
>> +            *sx = i;
>> +        }
>> +    }
>> +}
> 
> Looks like overkill to me, but since it's working code... :)
> 

I'll spare you the details, but I found it to be genuinely helpful to
have a pattern like this while debugging. Makes it very easy to see
which pattern came from where and so on.

The per-sector uniqueness was critical, too ...

>> diff --git a/tests/libqos/libqos.h b/tests/libqos/libqos.h
>> index e1f14ea..492a651 100644
>> --- a/tests/libqos/libqos.h
>> +++ b/tests/libqos/libqos.h
>> @@ -24,6 +24,7 @@ void mkqcow2(const char *file, unsigned size_mb);
>>  void set_context(QOSState *s);
>>  void migrate(QOSState *from, QOSState *to, const char *uri);
>>  void prepare_blkdebug_script(const char *debug_fn, const char *event);
>> +void generate_pattern(void *buffer, size_t len, size_t cycle_len);
>>  
>>  static inline uint64_t qmalloc(QOSState *q, size_t bytes)
>>  {

-- 
—js

  reply	other threads:[~2015-09-10 21:40 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-26 21:13 [Qemu-devel] [PATCH 0/4] ide: simple ATAPI tests John Snow
2015-08-26 21:13 ` [Qemu-devel] [PATCH 1/4] qtest/ahci: use generate_pattern everywhere John Snow
2015-08-26 21:13 ` [Qemu-devel] [PATCH 2/4] qtest/ahci: export generate_pattern John Snow
2015-09-10  9:18   ` Markus Armbruster
2015-09-10 21:40     ` John Snow [this message]
2015-08-26 21:13 ` [Qemu-devel] [PATCH 3/4] ide-test: add cdrom pio test John Snow
2015-09-10  9:42   ` Markus Armbruster
2015-09-10 21:22     ` John Snow
2015-08-26 21:13 ` [Qemu-devel] [PATCH 4/4] ide-test: add cdrom dma test John Snow
2015-09-09 16:37 ` [Qemu-devel] [PATCH 0/4] ide: simple ATAPI tests John Snow
2015-09-09 17:00   ` Paolo Bonzini
2015-09-09 17:04     ` John Snow
2015-09-10  9:59       ` Markus Armbruster

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=55F1F8C2.1050807@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=zuban32s@gmail.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).