diff mbox

[2/4] qtest/ahci: export generate_pattern

Message ID 1440623592-13999-3-git-send-email-jsnow@redhat.com
State New
Headers show

Commit Message

John Snow Aug. 26, 2015, 9:13 p.m. UTC
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(-)

Comments

Markus Armbruster Sept. 10, 2015, 9:18 a.m. UTC | #1
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... :)

> 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)
>  {
John Snow Sept. 10, 2015, 9:40 p.m. UTC | #2
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)
>>  {
diff mbox

Patch

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];
+            *sx = i;
+        }
+    }
+}
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)
 {