All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c
@ 2026-10-08 15:34 Zhuoying Cai
  2026-10-08 15:45 ` Daniel P. Berrangé
  0 siblings, 1 reply; 4+ messages in thread
From: Zhuoying Cai @ 2026-10-08 15:34 UTC (permalink / raw)
  To: qemu-devel, qemu-s390x; +Cc: shentey, zycai, cohuck, farman, mjrosato

The s390x PXE tests used `memmem` to probe the s390-ccw.img firmware
for device support strings before running each test. MinGW-w64 does
not provide `memmem`, breaking the MSYS2/GCC build.

Remove the check as a workaround.

Signed-off-by: Zhuoying Cai <zycai@linux.ibm.com>
Reported-by: Bernhard Beschow <shentey@gmail.com>
---
 tests/qtest/pxe-test.c | 97 +-----------------------------------------
 1 file changed, 2 insertions(+), 95 deletions(-)

diff --git a/tests/qtest/pxe-test.c b/tests/qtest/pxe-test.c
index 61c92a2df4..51e6bdac2a 100644
--- a/tests/qtest/pxe-test.c
+++ b/tests/qtest/pxe-test.c
@@ -26,7 +26,6 @@ typedef struct testdef {
     const char *machine;    /* Machine type */
     const char *model;      /* NIC device model */
     const char *extra;      /* Any additional parameters */
-    bool (*boot_dev_support)(void); /* optional: boot device support check */
 } testdef_t;
 
 static testdef_t x86_tests[] = {
@@ -59,91 +58,9 @@ static testdef_t ppc64_tests_slow[] = {
     { NULL },
 };
 
-static const char *s390_bios_load(gsize *len)
-{
-    static char *cached_contents;
-    static gsize cached_len;
-    const char *qemu_bin;
-    g_autofree char *cmd = NULL;
-    char dir[PATH_MAX];
-    char *found = NULL;
-    char *path = NULL;
-    FILE *fp;
-
-    if (cached_contents) {
-        g_test_message("Using cached bios contents");
-        goto out;
-    }
-
-    /* search the qemu binary's data directories for s390-ccw.img */
-    qemu_bin = qtest_qemu_binary(NULL);
-    cmd = g_strdup_printf("%s -L help", qemu_bin);
-    fp = popen(cmd, "r");
-
-    if (!fp) {
-        g_error("Failed to run '%s'", cmd);
-    }
-
-    while (fgets(dir, sizeof(dir), fp) && !found) {
-        dir[strcspn(dir, "\n")] = '\0';
-        path = g_build_filename(dir, "s390-ccw.img", NULL);
-        if (g_file_get_contents(path, &cached_contents, &cached_len, NULL)) {
-            found = path;
-        } else {
-            g_free(path);
-        }
-    }
-    pclose(fp);
-
-    if (!found) {
-        g_error("s390-ccw.img not found");
-    }
-
-    g_test_message("Loaded %s", found);
-    g_free(found);
-
-out:
-    *len = cached_len;
-    return cached_contents;
-}
-
-static bool s390_bios_has_string(const char *needle)
-{
-    const char *contents;
-    gsize len;
-    bool found;
-
-    contents = s390_bios_load(&len);
-    found = memmem(contents, len, needle, strlen(needle)) != NULL;
-
-    g_test_message("\"%s\" %s in bios", needle, found ? "found" : "not found");
-    return found;
-}
-
-static bool s390_bios_has_net_ccw(void)
-{
-    /*
-     * Assume that netboot support always includes virtio-net-ccw support.
-     * Check only that netboot code exists, rather than probing virtio-net-ccw
-     * support directly.
-     */
-    return s390_bios_has_string("Network boot starting...");
-}
-
-static bool s390_bios_has_net_pci(void)
-{
-    /*
-     * Check for a string unique to virtio-net-pci boot support in the bios
-     * to determine if the binary was built with support for this device.
-     */
-    return s390_bios_has_string("Setup failed for virtio-net-pci");
-}
-
 static testdef_t s390x_tests[] = {
-    { "s390-ccw-virtio", "virtio-net-ccw",
-      .boot_dev_support = s390_bios_has_net_ccw },
-    { "s390-ccw-virtio", "virtio-net-pci",
-      .boot_dev_support = s390_bios_has_net_pci },
+    { "s390-ccw-virtio", "virtio-net-ccw"},
+    { "s390-ccw-virtio", "virtio-net-pci"},
     { NULL },
 };
 
@@ -174,11 +91,6 @@ static void test_pxe_ipv4(gconstpointer data)
 {
     const testdef_t *test = data;
 
-    if (test->boot_dev_support && !test->boot_dev_support()) {
-        g_test_skip("The bios does not support booting this device");
-        return;
-    }
-
     test_pxe_one(test, false);
 }
 
@@ -186,11 +98,6 @@ static void test_pxe_ipv6(gconstpointer data)
 {
     const testdef_t *test = data;
 
-    if (test->boot_dev_support && !test->boot_dev_support()) {
-        g_test_skip("The bios does not support booting this device");
-        return;
-    }
-
     test_pxe_one(test, true);
 }
 
-- 
2.56.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c
  2026-10-08 15:34 [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c Zhuoying Cai
@ 2026-10-08 15:45 ` Daniel P. Berrangé
  2026-10-08 18:46   ` Yonggang Luo
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel P. Berrangé @ 2026-10-08 15:45 UTC (permalink / raw)
  To: Zhuoying Cai; +Cc: qemu-devel, qemu-s390x, shentey, cohuck, farman, mjrosato

On Thu, Oct 08, 2026 at 11:34:35AM -0400, Zhuoying Cai wrote:
> The s390x PXE tests used `memmem` to probe the s390-ccw.img firmware
> for device support strings before running each test. MinGW-w64 does
> not provide `memmem`, breaking the MSYS2/GCC build.
> 
> Remove the check as a workaround.

Removing the testing on every platform due to a Windows limitation
is rather a big hammer. Why not wrap the code in  #ifndef WIN32   ?

> 
> Signed-off-by: Zhuoying Cai <zycai@linux.ibm.com>
> Reported-by: Bernhard Beschow <shentey@gmail.com>
> ---
>  tests/qtest/pxe-test.c | 97 +-----------------------------------------
>  1 file changed, 2 insertions(+), 95 deletions(-)
> 
> diff --git a/tests/qtest/pxe-test.c b/tests/qtest/pxe-test.c
> index 61c92a2df4..51e6bdac2a 100644
> --- a/tests/qtest/pxe-test.c
> +++ b/tests/qtest/pxe-test.c
> @@ -26,7 +26,6 @@ typedef struct testdef {
>      const char *machine;    /* Machine type */
>      const char *model;      /* NIC device model */
>      const char *extra;      /* Any additional parameters */
> -    bool (*boot_dev_support)(void); /* optional: boot device support check */
>  } testdef_t;
>  
>  static testdef_t x86_tests[] = {
> @@ -59,91 +58,9 @@ static testdef_t ppc64_tests_slow[] = {
>      { NULL },
>  };
>  
> -static const char *s390_bios_load(gsize *len)
> -{
> -    static char *cached_contents;
> -    static gsize cached_len;
> -    const char *qemu_bin;
> -    g_autofree char *cmd = NULL;
> -    char dir[PATH_MAX];
> -    char *found = NULL;
> -    char *path = NULL;
> -    FILE *fp;
> -
> -    if (cached_contents) {
> -        g_test_message("Using cached bios contents");
> -        goto out;
> -    }
> -
> -    /* search the qemu binary's data directories for s390-ccw.img */
> -    qemu_bin = qtest_qemu_binary(NULL);
> -    cmd = g_strdup_printf("%s -L help", qemu_bin);
> -    fp = popen(cmd, "r");
> -
> -    if (!fp) {
> -        g_error("Failed to run '%s'", cmd);
> -    }
> -
> -    while (fgets(dir, sizeof(dir), fp) && !found) {
> -        dir[strcspn(dir, "\n")] = '\0';
> -        path = g_build_filename(dir, "s390-ccw.img", NULL);
> -        if (g_file_get_contents(path, &cached_contents, &cached_len, NULL)) {
> -            found = path;
> -        } else {
> -            g_free(path);
> -        }
> -    }
> -    pclose(fp);
> -
> -    if (!found) {
> -        g_error("s390-ccw.img not found");
> -    }
> -
> -    g_test_message("Loaded %s", found);
> -    g_free(found);
> -
> -out:
> -    *len = cached_len;
> -    return cached_contents;
> -}
> -
> -static bool s390_bios_has_string(const char *needle)
> -{
> -    const char *contents;
> -    gsize len;
> -    bool found;
> -
> -    contents = s390_bios_load(&len);
> -    found = memmem(contents, len, needle, strlen(needle)) != NULL;
> -
> -    g_test_message("\"%s\" %s in bios", needle, found ? "found" : "not found");
> -    return found;
> -}
> -
> -static bool s390_bios_has_net_ccw(void)
> -{
> -    /*
> -     * Assume that netboot support always includes virtio-net-ccw support.
> -     * Check only that netboot code exists, rather than probing virtio-net-ccw
> -     * support directly.
> -     */
> -    return s390_bios_has_string("Network boot starting...");
> -}
> -
> -static bool s390_bios_has_net_pci(void)
> -{
> -    /*
> -     * Check for a string unique to virtio-net-pci boot support in the bios
> -     * to determine if the binary was built with support for this device.
> -     */
> -    return s390_bios_has_string("Setup failed for virtio-net-pci");
> -}
> -
>  static testdef_t s390x_tests[] = {
> -    { "s390-ccw-virtio", "virtio-net-ccw",
> -      .boot_dev_support = s390_bios_has_net_ccw },
> -    { "s390-ccw-virtio", "virtio-net-pci",
> -      .boot_dev_support = s390_bios_has_net_pci },
> +    { "s390-ccw-virtio", "virtio-net-ccw"},
> +    { "s390-ccw-virtio", "virtio-net-pci"},
>      { NULL },
>  };
>  
> @@ -174,11 +91,6 @@ static void test_pxe_ipv4(gconstpointer data)
>  {
>      const testdef_t *test = data;
>  
> -    if (test->boot_dev_support && !test->boot_dev_support()) {
> -        g_test_skip("The bios does not support booting this device");
> -        return;
> -    }
> -
>      test_pxe_one(test, false);
>  }
>  
> @@ -186,11 +98,6 @@ static void test_pxe_ipv6(gconstpointer data)
>  {
>      const testdef_t *test = data;
>  
> -    if (test->boot_dev_support && !test->boot_dev_support()) {
> -        g_test_skip("The bios does not support booting this device");
> -        return;
> -    }
> -
>      test_pxe_one(test, true);
>  }
>  
> -- 
> 2.56.0
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c
  2026-10-08 15:45 ` Daniel P. Berrangé
@ 2026-10-08 18:46   ` Yonggang Luo
  2026-10-08 20:00     ` Zhuoying Cai
  0 siblings, 1 reply; 4+ messages in thread
From: Yonggang Luo @ 2026-10-08 18:46 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: Zhuoying Cai, qemu-devel, qemu-s390x, shentey, cohuck, farman,
	mjrosato

On Thu, Oct 8, 2026 at 11:47 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Thu, Oct 08, 2026 at 11:34:35AM -0400, Zhuoying Cai wrote:
> > The s390x PXE tests used `memmem` to probe the s390-ccw.img firmware
> > for device support strings before running each test. MinGW-w64 does
> > not provide `memmem`, breaking the MSYS2/GCC build.
> >
> > Remove the check as a workaround.
>
> Removing the testing on every platform due to a Windows limitation
> is rather a big hammer. Why not wrap the code in  #ifndef WIN32   ?

I did it in another way:
[PATCH 0/2] tests/qtest: fix and gaurd PXE test build on MinGW
https://lore.kernel.org/qemu-devel/20261008184119.142-1-luoyonggang@gmail.com/T/#t


>
> >
> > Signed-off-by: Zhuoying Cai <zycai@linux.ibm.com>
> > Reported-by: Bernhard Beschow <shentey@gmail.com>
> > ---
> >  tests/qtest/pxe-test.c | 97 +-----------------------------------------
> >  1 file changed, 2 insertions(+), 95 deletions(-)
> >
> > diff --git a/tests/qtest/pxe-test.c b/tests/qtest/pxe-test.c
> > index 61c92a2df4..51e6bdac2a 100644
> > --- a/tests/qtest/pxe-test.c
> > +++ b/tests/qtest/pxe-test.c
> > @@ -26,7 +26,6 @@ typedef struct testdef {
> >      const char *machine;    /* Machine type */
> >      const char *model;      /* NIC device model */
> >      const char *extra;      /* Any additional parameters */
> > -    bool (*boot_dev_support)(void); /* optional: boot device support check */
> >  } testdef_t;
> >
> >  static testdef_t x86_tests[] = {
> > @@ -59,91 +58,9 @@ static testdef_t ppc64_tests_slow[] = {
> >      { NULL },
> >  };
> >
> > -static const char *s390_bios_load(gsize *len)
> > -{
> > -    static char *cached_contents;
> > -    static gsize cached_len;
> > -    const char *qemu_bin;
> > -    g_autofree char *cmd = NULL;
> > -    char dir[PATH_MAX];
> > -    char *found = NULL;
> > -    char *path = NULL;
> > -    FILE *fp;
> > -
> > -    if (cached_contents) {
> > -        g_test_message("Using cached bios contents");
> > -        goto out;
> > -    }
> > -
> > -    /* search the qemu binary's data directories for s390-ccw.img */
> > -    qemu_bin = qtest_qemu_binary(NULL);
> > -    cmd = g_strdup_printf("%s -L help", qemu_bin);
> > -    fp = popen(cmd, "r");
> > -
> > -    if (!fp) {
> > -        g_error("Failed to run '%s'", cmd);
> > -    }
> > -
> > -    while (fgets(dir, sizeof(dir), fp) && !found) {
> > -        dir[strcspn(dir, "\n")] = '\0';
> > -        path = g_build_filename(dir, "s390-ccw.img", NULL);
> > -        if (g_file_get_contents(path, &cached_contents, &cached_len, NULL)) {
> > -            found = path;
> > -        } else {
> > -            g_free(path);
> > -        }
> > -    }
> > -    pclose(fp);
> > -
> > -    if (!found) {
> > -        g_error("s390-ccw.img not found");
> > -    }
> > -
> > -    g_test_message("Loaded %s", found);
> > -    g_free(found);
> > -
> > -out:
> > -    *len = cached_len;
> > -    return cached_contents;
> > -}
> > -
> > -static bool s390_bios_has_string(const char *needle)
> > -{
> > -    const char *contents;
> > -    gsize len;
> > -    bool found;
> > -
> > -    contents = s390_bios_load(&len);
> > -    found = memmem(contents, len, needle, strlen(needle)) != NULL;
> > -
> > -    g_test_message("\"%s\" %s in bios", needle, found ? "found" : "not found");
> > -    return found;
> > -}
> > -
> > -static bool s390_bios_has_net_ccw(void)
> > -{
> > -    /*
> > -     * Assume that netboot support always includes virtio-net-ccw support.
> > -     * Check only that netboot code exists, rather than probing virtio-net-ccw
> > -     * support directly.
> > -     */
> > -    return s390_bios_has_string("Network boot starting...");
> > -}
> > -
> > -static bool s390_bios_has_net_pci(void)
> > -{
> > -    /*
> > -     * Check for a string unique to virtio-net-pci boot support in the bios
> > -     * to determine if the binary was built with support for this device.
> > -     */
> > -    return s390_bios_has_string("Setup failed for virtio-net-pci");
> > -}
> > -
> >  static testdef_t s390x_tests[] = {
> > -    { "s390-ccw-virtio", "virtio-net-ccw",
> > -      .boot_dev_support = s390_bios_has_net_ccw },
> > -    { "s390-ccw-virtio", "virtio-net-pci",
> > -      .boot_dev_support = s390_bios_has_net_pci },
> > +    { "s390-ccw-virtio", "virtio-net-ccw"},
> > +    { "s390-ccw-virtio", "virtio-net-pci"},
> >      { NULL },
> >  };
> >
> > @@ -174,11 +91,6 @@ static void test_pxe_ipv4(gconstpointer data)
> >  {
> >      const testdef_t *test = data;
> >
> > -    if (test->boot_dev_support && !test->boot_dev_support()) {
> > -        g_test_skip("The bios does not support booting this device");
> > -        return;
> > -    }
> > -
> >      test_pxe_one(test, false);
> >  }
> >
> > @@ -186,11 +98,6 @@ static void test_pxe_ipv6(gconstpointer data)
> >  {
> >      const testdef_t *test = data;
> >
> > -    if (test->boot_dev_support && !test->boot_dev_support()) {
> > -        g_test_skip("The bios does not support booting this device");
> > -        return;
> > -    }
> > -
> >      test_pxe_one(test, true);
> >  }
> >
> > --
> > 2.56.0
> >
> >
>
> With regards,
> Daniel
> --
> |: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
> |: https://libvirt.org          ~~          https://entangle-photo.org :|
> |: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|
>
>


-- 
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c
  2026-10-08 18:46   ` Yonggang Luo
@ 2026-10-08 20:00     ` Zhuoying Cai
  0 siblings, 0 replies; 4+ messages in thread
From: Zhuoying Cai @ 2026-10-08 20:00 UTC (permalink / raw)
  To: luoyonggang, Daniel P. Berrangé
  Cc: qemu-devel, qemu-s390x, shentey, cohuck, farman, mjrosato

On 10/8/26 2:46 PM, Yonggang Luo wrote:
> On Thu, Oct 8, 2026 at 11:47 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>>
>> On Thu, Oct 08, 2026 at 11:34:35AM -0400, Zhuoying Cai wrote:
>>> The s390x PXE tests used `memmem` to probe the s390-ccw.img firmware
>>> for device support strings before running each test. MinGW-w64 does
>>> not provide `memmem`, breaking the MSYS2/GCC build.
>>>
>>> Remove the check as a workaround.
>>
>> Removing the testing on every platform due to a Windows limitation
>> is rather a big hammer. Why not wrap the code in  #ifndef WIN32   ?
> 
> I did it in another way:
> [PATCH 0/2] tests/qtest: fix and gaurd PXE test build on MinGW
> https://lore.kernel.org/qemu-devel/20261008184119.142-1-luoyonggang@gmail.com/T/#t
> 
> 

Thanks for the suggestion and for the fix!

Since I had already sent v1, I went ahead and sent a v2 with the
suggested WIN32 guard as another option:

https://lore.kernel.org/qemu-devel/20261008195158.289711-1-zycai@linux.ibm.com/

[...]



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-08 20:01 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-08 15:34 [PATCH v1] test/qtest: Remove s390x boot device support check in pxe-test.c Zhuoying Cai
2026-10-08 15:45 ` Daniel P. Berrangé
2026-10-08 18:46   ` Yonggang Luo
2026-10-08 20:00     ` Zhuoying Cai

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.