From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Gavin Shan <gshan@redhat.com>
Cc: Florian Weimer <fweimer@redhat.com>,
shan gavin <shan.gavin@gmail.com>, KVM list <kvm@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
andrew jones <andrew.jones@linux.dev>, yihyu <yihyu@redhat.com>,
linux-kselftest <linux-kselftest@vger.kernel.org>,
maz <maz@kernel.org>, Paolo Bonzini <pbonzini@redhat.com>,
shuah <shuah@kernel.org>, kvmarm <kvmarm@lists.cs.columbia.edu>
Subject: Re: [PATCH 1/2] KVM: selftests: Make rseq compatible with glibc-2.35
Date: Wed, 10 Aug 2022 08:29:19 -0400 (EDT) [thread overview]
Message-ID: <1316061904.375.1660134559269.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <8c1f33b4-a5a1-fcfa-4521-36253ffa22c8@redhat.com>
----- On Aug 9, 2022, at 8:37 PM, Gavin Shan gshan@redhat.com wrote:
> Hi Mathieu and Sean,
>
> On 8/10/22 7:38 AM, Sean Christopherson wrote:
>> On Tue, Aug 09, 2022, Mathieu Desnoyers wrote:
>>> ----- On Aug 9, 2022, at 8:21 AM, Mathieu Desnoyers
>>> mathieu.desnoyers@efficios.com wrote:
>>>> ----- Gavin Shan <gshan@redhat.com> wrote:
>>>>> On 8/9/22 5:16 PM, Florian Weimer wrote:
>>>>>>>> __builtin_thread_pointer doesn't work on all architectures/GCC
>>>>>>>> versions.
>>>>>>>> Is this a problem for selftests?
>>>>>>>>
>>>>>>>
>>>>>>> It's a problem as the test case is running on all architectures. I think I
>>>>>>> need introduce our own __builtin_thread_pointer() for where it's not
>>>>>>> supported: (1) PowerPC (2) x86 without GCC 11
>>>>>>>
>>>>>>> Please let me know if I still have missed cases where
>>>>>>> __buitin_thread_pointer() isn't supported?
>>>>>>
>>>>>> As far as I know, these are the two outliers that also have rseq
>>>>>> support. The list is a bit longer if we also consider non-rseq
>>>>>> architectures (csky, hppa, ia64, m68k, microblaze, sparc, don't know
>>>>>> about the Linux architectures without glibc support).
>>>>>>
>>>>>
>>>>> For kvm/selftests, there are 3 architectures involved actually. So we
>>>>> just need consider 4 cases: aarch64, x86, s390 and other. For other
>>>>> case, we just use __builtin_thread_pointer() to maintain code's
>>>>> integrity, but it's not called at all.
>>>>>
>>>>> I think kvm/selftest is always relying on glibc if I'm correct.
>>>>
>>>> All those are handled in the rseq selftests and in librseq. Why duplicate all
>>>> that logic again?
>>>
>>> More to the point, considering that we have all the relevant rseq registration
>>> code in tools/testing/selftests/rseq/rseq.c already, and the relevant thread
>>> pointer getter code in tools/testing/selftests/rseq/rseq-*thread-pointer.h,
>>> is there an easy way to get test applications in tools/testing/selftests/kvm
>>> and in tools/testing/selftests/rseq to share that common code ?
>>>
>>> Keeping duplicated compatibility code is bad for long-term maintainability.
>>
>> Any reason not to simply add tools/lib/rseq.c and then expose a helper to get
>> the
>> registered rseq struct?
>>
>
> There are couple of reasons, not to share
> tools/testing/selftests/rseq/librseq.so
> or add tools/lib/librseq.so. Please let me know if the arguments making sense
> to you?
>
> - By design, selftests/rseq and selftests/kvm are parallel. It's going to
> introduce
> unnecessary dependency for selftests/kvm to use selftests/rseq/librseq.so. To
> me,
> it makes the maintainability even harder.
In terms of build system, yes, selftests/rseq and selftests/kvm are side-by-side,
and I agree it is odd to have a cross-dependency.
That's where moving rseq.c to tools/lib/ makes sense.
>
> - What selftests/kvm needs is rseq-thread-pointer.h, which accounts for ~5% of
> functionalities, provided by selftests/rseq/librseq.so.
I've never seen this type of argument used to prevent using a library before, except
on extremely memory-constrained devices, which is not our target here.
Even if you would only use 1% of the features of a library, it does not justify
reimplementing that 1% if that code already sits within the same project (kernel
selftests).
>
> - I'm not too much familiar with selftests/rseq, but it seems it need heavy
> rework before it can become tools/lib/librseq.so. However, I'm not sure if
> the effort is worthwhile. The newly added library is fully used by
> testtests/rseq. ~5% of that is going to be used by selftests/kvm.
> In this case, we still have cross-dependency issue.
No, it's just moving files around and a bit of Makefile modifications. That's
the simple part.
>
> I personally prefer not to use selftests/rseq/librseq.so or add
> tools/lib/librseq.so,
> but I need your feedback. Please share your thoughts.
I strongly favor that we use a two steps approach:
1) immediate fix: include ../rseq/rseq.c into your test code and use the headers,
as proposed by Paolo.
2) I'll move librseq code into tools/lib/ and tools/include/rseq/, and adapt the
users accordingly. (after the end of my vacation)
Thanks,
Mathieu
> Thanks,
> Gavin
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Gavin Shan <gshan@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>, shuah <shuah@kernel.org>,
Florian Weimer <fweimer@redhat.com>,
kvmarm <kvmarm@lists.cs.columbia.edu>,
KVM list <kvm@vger.kernel.org>,
linux-kselftest <linux-kselftest@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>, maz <maz@kernel.org>,
oliver upton <oliver.upton@linux.dev>,
andrew jones <andrew.jones@linux.dev>, yihyu <yihyu@redhat.com>,
shan gavin <shan.gavin@gmail.com>
Subject: Re: [PATCH 1/2] KVM: selftests: Make rseq compatible with glibc-2.35
Date: Wed, 10 Aug 2022 08:29:19 -0400 (EDT) [thread overview]
Message-ID: <1316061904.375.1660134559269.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <8c1f33b4-a5a1-fcfa-4521-36253ffa22c8@redhat.com>
----- On Aug 9, 2022, at 8:37 PM, Gavin Shan gshan@redhat.com wrote:
> Hi Mathieu and Sean,
>
> On 8/10/22 7:38 AM, Sean Christopherson wrote:
>> On Tue, Aug 09, 2022, Mathieu Desnoyers wrote:
>>> ----- On Aug 9, 2022, at 8:21 AM, Mathieu Desnoyers
>>> mathieu.desnoyers@efficios.com wrote:
>>>> ----- Gavin Shan <gshan@redhat.com> wrote:
>>>>> On 8/9/22 5:16 PM, Florian Weimer wrote:
>>>>>>>> __builtin_thread_pointer doesn't work on all architectures/GCC
>>>>>>>> versions.
>>>>>>>> Is this a problem for selftests?
>>>>>>>>
>>>>>>>
>>>>>>> It's a problem as the test case is running on all architectures. I think I
>>>>>>> need introduce our own __builtin_thread_pointer() for where it's not
>>>>>>> supported: (1) PowerPC (2) x86 without GCC 11
>>>>>>>
>>>>>>> Please let me know if I still have missed cases where
>>>>>>> __buitin_thread_pointer() isn't supported?
>>>>>>
>>>>>> As far as I know, these are the two outliers that also have rseq
>>>>>> support. The list is a bit longer if we also consider non-rseq
>>>>>> architectures (csky, hppa, ia64, m68k, microblaze, sparc, don't know
>>>>>> about the Linux architectures without glibc support).
>>>>>>
>>>>>
>>>>> For kvm/selftests, there are 3 architectures involved actually. So we
>>>>> just need consider 4 cases: aarch64, x86, s390 and other. For other
>>>>> case, we just use __builtin_thread_pointer() to maintain code's
>>>>> integrity, but it's not called at all.
>>>>>
>>>>> I think kvm/selftest is always relying on glibc if I'm correct.
>>>>
>>>> All those are handled in the rseq selftests and in librseq. Why duplicate all
>>>> that logic again?
>>>
>>> More to the point, considering that we have all the relevant rseq registration
>>> code in tools/testing/selftests/rseq/rseq.c already, and the relevant thread
>>> pointer getter code in tools/testing/selftests/rseq/rseq-*thread-pointer.h,
>>> is there an easy way to get test applications in tools/testing/selftests/kvm
>>> and in tools/testing/selftests/rseq to share that common code ?
>>>
>>> Keeping duplicated compatibility code is bad for long-term maintainability.
>>
>> Any reason not to simply add tools/lib/rseq.c and then expose a helper to get
>> the
>> registered rseq struct?
>>
>
> There are couple of reasons, not to share
> tools/testing/selftests/rseq/librseq.so
> or add tools/lib/librseq.so. Please let me know if the arguments making sense
> to you?
>
> - By design, selftests/rseq and selftests/kvm are parallel. It's going to
> introduce
> unnecessary dependency for selftests/kvm to use selftests/rseq/librseq.so. To
> me,
> it makes the maintainability even harder.
In terms of build system, yes, selftests/rseq and selftests/kvm are side-by-side,
and I agree it is odd to have a cross-dependency.
That's where moving rseq.c to tools/lib/ makes sense.
>
> - What selftests/kvm needs is rseq-thread-pointer.h, which accounts for ~5% of
> functionalities, provided by selftests/rseq/librseq.so.
I've never seen this type of argument used to prevent using a library before, except
on extremely memory-constrained devices, which is not our target here.
Even if you would only use 1% of the features of a library, it does not justify
reimplementing that 1% if that code already sits within the same project (kernel
selftests).
>
> - I'm not too much familiar with selftests/rseq, but it seems it need heavy
> rework before it can become tools/lib/librseq.so. However, I'm not sure if
> the effort is worthwhile. The newly added library is fully used by
> testtests/rseq. ~5% of that is going to be used by selftests/kvm.
> In this case, we still have cross-dependency issue.
No, it's just moving files around and a bit of Makefile modifications. That's
the simple part.
>
> I personally prefer not to use selftests/rseq/librseq.so or add
> tools/lib/librseq.so,
> but I need your feedback. Please share your thoughts.
I strongly favor that we use a two steps approach:
1) immediate fix: include ../rseq/rseq.c into your test code and use the headers,
as proposed by Paolo.
2) I'll move librseq code into tools/lib/ and tools/include/rseq/, and adapt the
users accordingly. (after the end of my vacation)
Thanks,
Mathieu
> Thanks,
> Gavin
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2022-08-10 12:29 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-09 6:06 [PATCH 0/2] kvm/selftests: Two rseq_test fixes Gavin Shan
2022-08-09 6:06 ` Gavin Shan
2022-08-09 6:06 ` [PATCH 1/2] KVM: selftests: Make rseq compatible with glibc-2.35 Gavin Shan
2022-08-09 6:06 ` Gavin Shan
2022-08-09 6:33 ` Florian Weimer
2022-08-09 6:33 ` Florian Weimer
2022-08-09 8:45 ` Gavin Shan
2022-08-09 8:45 ` Gavin Shan
2022-08-09 7:16 ` Florian Weimer
2022-08-09 7:16 ` Florian Weimer
2022-08-09 9:27 ` Gavin Shan
2022-08-09 9:27 ` Gavin Shan
2022-08-09 12:21 ` Mathieu Desnoyers
2022-08-09 12:21 ` Mathieu Desnoyers
2022-08-09 13:44 ` Mathieu Desnoyers
2022-08-09 13:44 ` Mathieu Desnoyers
2022-08-09 21:38 ` Sean Christopherson
2022-08-09 21:38 ` Sean Christopherson
2022-08-10 0:37 ` Gavin Shan
2022-08-10 0:37 ` Gavin Shan
2022-08-10 12:29 ` Mathieu Desnoyers [this message]
2022-08-10 12:29 ` Mathieu Desnoyers
2022-08-10 12:35 ` Paolo Bonzini
2022-08-10 12:35 ` Paolo Bonzini
2022-08-10 12:13 ` Mathieu Desnoyers
2022-08-10 12:13 ` Mathieu Desnoyers
2022-08-10 23:52 ` Gavin Shan
2022-08-10 23:52 ` Gavin Shan
2022-08-10 9:14 ` Paolo Bonzini
2022-08-10 9:14 ` Paolo Bonzini
2022-08-10 9:59 ` Gavin Shan
2022-08-10 9:59 ` Gavin Shan
2022-08-10 12:17 ` Mathieu Desnoyers
2022-08-10 12:17 ` Mathieu Desnoyers
2022-08-10 12:19 ` Paolo Bonzini
2022-08-10 12:19 ` Paolo Bonzini
2022-08-10 23:34 ` Gavin Shan
2022-08-10 23:34 ` Gavin Shan
2022-08-09 6:06 ` [PATCH 2/2] KVM: selftests: Use getcpu() instead of sched_getcpu() in rseq_test Gavin Shan
2022-08-09 6:06 ` Gavin Shan
2022-08-09 6:35 ` Florian Weimer
2022-08-09 6:35 ` Florian Weimer
2022-08-09 7:17 ` Florian Weimer
2022-08-09 7:17 ` Florian Weimer
2022-08-09 8:46 ` Gavin Shan
2022-08-09 8:46 ` Gavin Shan
2022-08-09 20:53 ` Sean Christopherson
2022-08-09 20:53 ` Sean Christopherson
2022-08-10 0:45 ` Gavin Shan
2022-08-10 0:45 ` Gavin Shan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1316061904.375.1660134559269.JavaMail.zimbra@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=andrew.jones@linux.dev \
--cc=fweimer@redhat.com \
--cc=gshan@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
--cc=shan.gavin@gmail.com \
--cc=shuah@kernel.org \
--cc=yihyu@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.