* [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.