From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Florian Weimer <fweimer@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
paulmck <paulmck@linux.ibm.com>,
Boqun Feng <boqun.feng@gmail.com>,
"H. Peter Anvin" <hpa@zytor.com>, Paul Turner <pjt@google.com>,
linux-api <linux-api@vger.kernel.org>,
Christian Brauner <christian.brauner@ubuntu.com>,
carlos <carlos@redhat.com>
Subject: Re: [RFC PATCH 2/4] rseq: Allow extending struct rseq
Date: Tue, 14 Jul 2020 08:50:35 -0400 (EDT) [thread overview]
Message-ID: <131549905.11442.1594731035989.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <87mu42bepq.fsf@oldenburg2.str.redhat.com>
----- On Jul 14, 2020, at 5:58 AM, Florian Weimer fweimer@redhat.com wrote:
> * Mathieu Desnoyers:
>
>> + /*
>> + * Very last field of the structure, to calculate size excluding padding
>> + * with offsetof().
>> + */
>> + char end[];
>> } __attribute__((aligned(4 * sizeof(__u64))));
>
> This makes the header incompatible with standard C++.
One alternative would be to add a helper to compute the effective size on c++, e.g.:
/* Always updated with struct rseq_cs declaration. */
#define rseq_last_field kernel_size
static inline size_t rseq_effective_size(void)
{
return offsetof(struct rseq, rseq_last_field) + sizeof(((struct rseq *)NULL)->rseq_last_field);
}
>
> How are extensions going to affect the definition of struct rseq,
> including its alignment?
The alignment will never decrease. If the structure becomes large enough
its alignment could theoretically increase. Would that be an issue ?
> As things stand now, glibc 2.32 will make the size and alignment of
> struct rseq part of its ABI, so it can't really change after that.
Can the size and alignment of a structure be defined as minimum alignment
and size values ? For instance, those would be invariant for a given glibc
version (if we always use the internal struct rseq declaration), but could
be increased in future versions.
> With a different approach, we can avoid making the symbol size part of
> the ABI, but then we cannot use the __rseq_abi TLS symbol. As a result,
> interoperability with early adopters would be lost.
Do you mean with a function "getter", and then keeping that pointer around
in a per-user TLS ? I would prefer to avoid that because it adds an extra
pointer dereference on a fast path.
> One way to avoid this problem would be for every library to register its
> own rseq area, of the appropriate size. Then process-wide coordination
> in userspace would not be needed.
I did propose the code to do just that in my initial rseq implementations, but
the idea was shutdown by kernel maintainers because it required the kernel to
handle a linked-list of rseq areas per thread, which was more complex within
the kernel.
Thanks,
Mathieu
>
> Thanks,
> Florian
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2020-07-14 12:50 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-14 3:03 [RFC PATCH 0/4] rseq: Introduce extensible struct rseq Mathieu Desnoyers
2020-07-14 3:03 ` [RFC PATCH 1/4] selftests: rseq: Use fixed value as rseq_len parameter Mathieu Desnoyers
2020-07-14 3:03 ` [RFC PATCH 2/4] rseq: Allow extending struct rseq Mathieu Desnoyers
2020-07-14 9:58 ` Florian Weimer
2020-07-14 12:50 ` Mathieu Desnoyers [this message]
2020-07-14 13:00 ` Florian Weimer
2020-07-14 13:19 ` Mathieu Desnoyers
2020-07-14 21:30 ` Carlos O'Donell
2020-07-15 13:12 ` Mathieu Desnoyers
2020-07-15 13:22 ` Florian Weimer
2020-07-15 13:31 ` Mathieu Desnoyers
2020-07-15 13:42 ` Florian Weimer
2020-07-15 13:55 ` Christian Brauner
2020-07-15 14:20 ` Mathieu Desnoyers
2020-07-15 14:54 ` Mathieu Desnoyers
2020-07-15 14:58 ` Florian Weimer
2020-07-15 15:26 ` Mathieu Desnoyers
2020-07-14 17:24 ` Peter Oskolkov
2020-07-14 17:43 ` Mathieu Desnoyers
2020-07-14 18:33 ` Peter Oskolkov
2020-07-15 2:34 ` Chris Kennelly
2020-07-15 6:31 ` Florian Weimer
2020-07-15 10:59 ` Christian Brauner
2020-07-15 14:38 ` Mathieu Desnoyers
2020-07-15 14:50 ` Mathieu Desnoyers
2020-07-15 11:38 ` Christian Brauner
2020-07-15 12:33 ` Christian Brauner
2020-07-15 15:10 ` Mathieu Desnoyers
2020-07-15 15:33 ` Christian Brauner
2020-07-14 3:03 ` [RFC PATCH 3/4] selftests: rseq: define __rseq_abi with extensible size Mathieu Desnoyers
2020-07-14 3:03 ` [RFC PATCH 4/4] selftests: rseq: print rseq extensible size in basic test Mathieu Desnoyers
2020-07-14 20:55 ` [RFC PATCH 0/4] rseq: Introduce extensible struct rseq Carlos O'Donell
2020-07-15 13:02 ` Mathieu Desnoyers
2020-07-16 13:39 ` Carlos O'Donell
2020-07-16 14:45 ` Mathieu Desnoyers
2020-07-15 15:12 ` Florian Weimer
2020-07-15 15:32 ` Mathieu Desnoyers
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=131549905.11442.1594731035989.JavaMail.zimbra@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=boqun.feng@gmail.com \
--cc=carlos@redhat.com \
--cc=christian.brauner@ubuntu.com \
--cc=fweimer@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.ibm.com \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=tglx@linutronix.de \
/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.