diff mbox series

tests/qtest/migration: Restore include for postcopy

Message ID 20241217212201.23376-1-farosas@suse.de (mailing list archive)
State New
Headers show
Series tests/qtest/migration: Restore include for postcopy | expand

Commit Message

Fabiano Rosas Dec. 17, 2024, 9:22 p.m. UTC
Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
utils") moved the ufd_version_check() function to another file but
failed to bring along the <sys/syscall> include, which is necessary to
pull in <asm/unistd.h> for __NR_userfaultd.

Restore the missing include.

While here, remove the ifdef __linux__ that's redundant and fix a
couple of typos.

Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
 tests/qtest/migration/migration-util.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Peter Xu Dec. 17, 2024, 9:47 p.m. UTC | #1
On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
> Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
> utils") moved the ufd_version_check() function to another file but
> failed to bring along the <sys/syscall> include, which is necessary to
> pull in <asm/unistd.h> for __NR_userfaultd.
> 
> Restore the missing include.

Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
explicit mention that in the commit message if so, only when you merge.

> 
> While here, remove the ifdef __linux__ that's redundant and fix a
> couple of typos.
> 
> Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
> Signed-off-by: Fabiano Rosas <farosas@suse.de>

Reviewed-by: Peter Xu <peterx@redhat.com>

Maybe we don't need to be as careful on old kernels anymore especially in
tests, because userfaultfd syscall existed for ~10 years. So if we want we
can start requiring __NR_userfaultfd present for __linux__, then no way to
miss such spot next time.
Daniel P. Berrangé Dec. 18, 2024, 8:22 a.m. UTC | #2
On Tue, Dec 17, 2024 at 04:47:39PM -0500, Peter Xu wrote:
> On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
> > Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
> > utils") moved the ufd_version_check() function to another file but
> > failed to bring along the <sys/syscall> include, which is necessary to
> > pull in <asm/unistd.h> for __NR_userfaultd.
> > 
> > Restore the missing include.
> 
> Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
> explicit mention that in the commit message if so, only when you merge.
> 
> > 
> > While here, remove the ifdef __linux__ that's redundant and fix a
> > couple of typos.
> > 
> > Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
> > Signed-off-by: Fabiano Rosas <farosas@suse.de>
> 
> Reviewed-by: Peter Xu <peterx@redhat.com>
> 
> Maybe we don't need to be as careful on old kernels anymore especially in
> tests, because userfaultfd syscall existed for ~10 years. So if we want we
> can start requiring __NR_userfaultfd present for __linux__, then no way to
> miss such spot next time.

Yes, I think that check is obsolete, based on our supported platforms
list. It would suffice to just check __linux__.

With regards,
Daniel
Fabiano Rosas Dec. 18, 2024, 3:12 p.m. UTC | #3
Daniel P. Berrangé <berrange@redhat.com> writes:

> On Tue, Dec 17, 2024 at 04:47:39PM -0500, Peter Xu wrote:
>> On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
>> > Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
>> > utils") moved the ufd_version_check() function to another file but
>> > failed to bring along the <sys/syscall> include, which is necessary to
>> > pull in <asm/unistd.h> for __NR_userfaultd.
>> > 
>> > Restore the missing include.
>> 
>> Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
>> explicit mention that in the commit message if so, only when you merge.
>> 
>> > 
>> > While here, remove the ifdef __linux__ that's redundant and fix a
>> > couple of typos.
>> > 
>> > Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
>> > Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> 
>> Reviewed-by: Peter Xu <peterx@redhat.com>
>> 
>> Maybe we don't need to be as careful on old kernels anymore especially in
>> tests, because userfaultfd syscall existed for ~10 years. So if we want we
>> can start requiring __NR_userfaultfd present for __linux__, then no way to
>> miss such spot next time.
>
> Yes, I think that check is obsolete, based on our supported platforms
> list. It would suffice to just check __linux__.

This breaks the cross builds. It seems the __NR_userfaultfd was actually
stopping several archs from reaching ufd_version_check(). Since
<sys/ioctl.h> is under HOST_X86_64, these new instances now fail to find
the 'ioctl' symbol:

https://gitlab.com/farosas/qemu/-/pipelines/1594332399

Of course I could just include <sys/ioctl.h> unconditionally, but the
fact that new code is not being built means the assumption that we can
imply __NR_userfaultfd from __linux__ alone is not correct.
Peter Xu Dec. 18, 2024, 4:16 p.m. UTC | #4
On Wed, Dec 18, 2024 at 12:12:11PM -0300, Fabiano Rosas wrote:
> Daniel P. Berrangé <berrange@redhat.com> writes:
> 
> > On Tue, Dec 17, 2024 at 04:47:39PM -0500, Peter Xu wrote:
> >> On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
> >> > Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
> >> > utils") moved the ufd_version_check() function to another file but
> >> > failed to bring along the <sys/syscall> include, which is necessary to
> >> > pull in <asm/unistd.h> for __NR_userfaultd.
> >> > 
> >> > Restore the missing include.
> >> 
> >> Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
> >> explicit mention that in the commit message if so, only when you merge.
> >> 
> >> > 
> >> > While here, remove the ifdef __linux__ that's redundant and fix a
> >> > couple of typos.
> >> > 
> >> > Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
> >> > Signed-off-by: Fabiano Rosas <farosas@suse.de>
> >> 
> >> Reviewed-by: Peter Xu <peterx@redhat.com>
> >> 
> >> Maybe we don't need to be as careful on old kernels anymore especially in
> >> tests, because userfaultfd syscall existed for ~10 years. So if we want we
> >> can start requiring __NR_userfaultfd present for __linux__, then no way to
> >> miss such spot next time.
> >
> > Yes, I think that check is obsolete, based on our supported platforms
> > list. It would suffice to just check __linux__.
> 
> This breaks the cross builds. It seems the __NR_userfaultfd was actually
> stopping several archs from reaching ufd_version_check(). Since
> <sys/ioctl.h> is under HOST_X86_64, these new instances now fail to find
> the 'ioctl' symbol:
> 
> https://gitlab.com/farosas/qemu/-/pipelines/1594332399
> 
> Of course I could just include <sys/ioctl.h> unconditionally, but the
> fact that new code is not being built means the assumption that we can
> imply __NR_userfaultfd from __linux__ alone is not correct.

What is the new code referenced here?  I still don't yet understand how it
would fail if we move sys/ioctl.h out.

PS: we don't necessarily need to do it right now to remove that ifdef, but
I'm just curious.
Daniel P. Berrangé Dec. 18, 2024, 4:22 p.m. UTC | #5
On Wed, Dec 18, 2024 at 12:12:11PM -0300, Fabiano Rosas wrote:
> Daniel P. Berrangé <berrange@redhat.com> writes:
> 
> > On Tue, Dec 17, 2024 at 04:47:39PM -0500, Peter Xu wrote:
> >> On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
> >> > Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
> >> > utils") moved the ufd_version_check() function to another file but
> >> > failed to bring along the <sys/syscall> include, which is necessary to
> >> > pull in <asm/unistd.h> for __NR_userfaultd.
> >> > 
> >> > Restore the missing include.
> >> 
> >> Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
> >> explicit mention that in the commit message if so, only when you merge.
> >> 
> >> > 
> >> > While here, remove the ifdef __linux__ that's redundant and fix a
> >> > couple of typos.
> >> > 
> >> > Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
> >> > Signed-off-by: Fabiano Rosas <farosas@suse.de>
> >> 
> >> Reviewed-by: Peter Xu <peterx@redhat.com>
> >> 
> >> Maybe we don't need to be as careful on old kernels anymore especially in
> >> tests, because userfaultfd syscall existed for ~10 years. So if we want we
> >> can start requiring __NR_userfaultfd present for __linux__, then no way to
> >> miss such spot next time.
> >
> > Yes, I think that check is obsolete, based on our supported platforms
> > list. It would suffice to just check __linux__.
> 
> This breaks the cross builds. It seems the __NR_userfaultfd was actually
> stopping several archs from reaching ufd_version_check(). Since
> <sys/ioctl.h> is under HOST_X86_64, these new instances now fail to find
> the 'ioctl' symbol:
> 
> https://gitlab.com/farosas/qemu/-/pipelines/1594332399
> 
> Of course I could just include <sys/ioctl.h> unconditionally, but the
> fact that new code is not being built means the assumption that we can
> imply __NR_userfaultfd from __linux__ alone is not correct.

I think removing __NR_userfaultfd is still correct. The problem is that
the ufd_version_check code is wrapped in a conditional that is not the
same as the conditional that pulls in ioctl.h. That pre-existing bug
should be fixed regardless, and once that's done, removing __NR_userfaultfd
wouldn't be an issue.

With regards,
Daniel
Fabiano Rosas Dec. 18, 2024, 7:20 p.m. UTC | #6
Daniel P. Berrangé <berrange@redhat.com> writes:

> On Wed, Dec 18, 2024 at 12:12:11PM -0300, Fabiano Rosas wrote:
>> Daniel P. Berrangé <berrange@redhat.com> writes:
>> 
>> > On Tue, Dec 17, 2024 at 04:47:39PM -0500, Peter Xu wrote:
>> >> On Tue, Dec 17, 2024 at 06:22:01PM -0300, Fabiano Rosas wrote:
>> >> > Commit 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to
>> >> > utils") moved the ufd_version_check() function to another file but
>> >> > failed to bring along the <sys/syscall> include, which is necessary to
>> >> > pull in <asm/unistd.h> for __NR_userfaultd.
>> >> > 
>> >> > Restore the missing include.
>> >> 
>> >> Ohhhhhhh.. so postcopy tests will always be skipped as of now?  Maybe worth
>> >> explicit mention that in the commit message if so, only when you merge.
>> >> 
>> >> > 
>> >> > While here, remove the ifdef __linux__ that's redundant and fix a
>> >> > couple of typos.
>> >> > 
>> >> > Fixes: 124a3c58b8 ("tests/qtest/migration: Move ufd_version_check to utils")
>> >> > Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> >> 
>> >> Reviewed-by: Peter Xu <peterx@redhat.com>
>> >> 
>> >> Maybe we don't need to be as careful on old kernels anymore especially in
>> >> tests, because userfaultfd syscall existed for ~10 years. So if we want we
>> >> can start requiring __NR_userfaultfd present for __linux__, then no way to
>> >> miss such spot next time.
>> >
>> > Yes, I think that check is obsolete, based on our supported platforms
>> > list. It would suffice to just check __linux__.
>> 
>> This breaks the cross builds. It seems the __NR_userfaultfd was actually
>> stopping several archs from reaching ufd_version_check(). Since
>> <sys/ioctl.h> is under HOST_X86_64, these new instances now fail to find
>> the 'ioctl' symbol:
>> 
>> https://gitlab.com/farosas/qemu/-/pipelines/1594332399
>> 
>> Of course I could just include <sys/ioctl.h> unconditionally, but the
>> fact that new code is not being built means the assumption that we can
>> imply __NR_userfaultfd from __linux__ alone is not correct.
>
> I think removing __NR_userfaultfd is still correct. The problem is that
> the ufd_version_check code is wrapped in a conditional that is not the
> same as the conditional that pulls in ioctl.h. That pre-existing bug
> should be fixed regardless, and once that's done, removing __NR_userfaultfd
> wouldn't be an issue.

Ah, the <sys/ioctl.h> include used to be under the userfaultfd ifdefs. I
got confused because kvm_dirty_ring_supported() also needs the ioctl and
it was introduced without moving the ioctl to a common ifdef.

>
> With regards,
> Daniel
diff mbox series

Patch

diff --git a/tests/qtest/migration/migration-util.c b/tests/qtest/migration/migration-util.c
index 525bf1eed4..d18841e357 100644
--- a/tests/qtest/migration/migration-util.c
+++ b/tests/qtest/migration/migration-util.c
@@ -22,8 +22,12 @@ 
 #include "migration/bootfile.h"
 #include "migration/migration-util.h"
 
-/* for uffd_version_check() */
-#if defined(__linux__) && defined(__NR_userfaultfd) && defined(CONFIG_EVENTFD)
+#if defined(__linux__)
+#include <sys/syscall.h>
+#endif
+
+/* for ufd_version_check() */
+#if defined(__NR_userfaultfd) && defined(CONFIG_EVENTFD)
 #include <sys/eventfd.h>
 #include "qemu/userfaultfd.h"
 #endif
@@ -297,7 +301,7 @@  bool probe_o_direct_support(const char *tmpfs)
 }
 #endif
 
-#if defined(__linux__) && defined(__NR_userfaultfd) && defined(CONFIG_EVENTFD)
+#if defined(__NR_userfaultfd) && defined(CONFIG_EVENTFD)
 bool ufd_version_check(bool *uffd_feature_thread_id)
 {
     struct uffdio_api api_struct;
@@ -333,7 +337,7 @@  bool ufd_version_check(bool *uffd_feature_thread_id)
 #else
 bool ufd_version_check(bool *uffd_feature_thread_id)
 {
-    g_test_message("Skipping test: Userfault not available (builtdtime)");
+    g_test_message("Skipping test: Userfault not available (buildtime)");
     return false;
 }
 #endif