mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: musl without atomic instructions?
Date: Sat, 12 Mar 2016 19:21:40 -0500	[thread overview]
Message-ID: <20160313002140.GG9349@brightrain.aerifal.cx> (raw)
In-Reply-To: <CAA-4+jf8w0SNE7cGRG65xCeqs=yoQYUm-7Wzi_2U4qD7ikL0Rg@mail.gmail.com>

On Sun, Mar 13, 2016 at 08:47:36AM +0900, Masanori Ogino wrote:
> Hello,
> 
> While I work on my GSoC proposal, I doubt whether musl can be built
> without hardware atomic operation supports.
> 
> Could we build musl without such instructions?
> If we could, what will happen with the features of musl?

Atomic compare and swap (usually provided by either a direct cas
instruction or ll/sc pair type) is a hard requirement for musl. The
normal profiles of riscv have at least ll/sc style and possibly cas
too. Minimal profiles for microcontroller use lack it (this was a
mistake in the riscv ISA specification, IMO), so if supporting these
ISA levels is interesting, there are at least three options:

1. Have the kernel trap the unimplemented instructions and emulate
   them.

2. Have userspace issue a system call to have the kernel mediate
   atomic accesses.

3. Integrate atomic sequence restart with the scheduler: at scheduling
   time, the kernel determines if the task being resumed was
   interrupted in the middle of a sequence of instructions that's
   supposed to be atomic, and if so, resets the program counter to the
   beginning of the sequence. (This is how pre-v6 ARM and most SH
   models work.)

Option 3 offers by far the best performance but inherently only works
on uniprocessor. Options 1 and 2 could theoretically support SMP as
long as the kernel has some other way of ensuring mutual exclusion and
memory synchronization between the processors.

Of course the best of all worlds is to have the kernel provide a vdso
function for atomic cas which it can then provide an optimal
implementation of for the particular processor being used. Then
baseline-ISA-level riscv binaries would use the vdso, and ones
targeting an ISA level that's known to have native atomic instructions
would use the inline instructions.

Rich


  reply	other threads:[~2016-03-13  0:21 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-12 23:47 Masanori Ogino
2016-03-13  0:21 ` Rich Felker [this message]
2016-03-13  0:54   ` Masanori Ogino
2016-03-14  1:34     ` Masanori Ogino
2016-03-14  2:13       ` Rich Felker
2016-03-14  2:55         ` Masanori Ogino
2016-03-14  3:43           ` Rich Felker
2016-03-14  4:24             ` Masanori Ogino

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=20160313002140.GG9349@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).