[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/4] qtest/ahci: export generate_pattern
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH 2/4] qtest/ahci: export generate_pattern |
Date: |
Thu, 10 Sep 2015 17:40:18 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 |
On 09/10/2015 05:18 AM, Markus Armbruster wrote:
> John Snow <address@hidden> writes:
>
>> Share the pattern function for ide and ahci test.
>>
>> Signed-off-by: John Snow <address@hidden>
>> ---
>> 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