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
next prev parent 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.