----- On Mar 28, 2018, at 11:28 AM, Peter Zijlstra peterz@xxxxxxxxxxxxx wrote: > On Wed, Mar 28, 2018 at 11:14:05AM -0400, Mathieu Desnoyers wrote: > >> > If at all possible I would make it SIGSEGV when issueing SYSCALL()s from >> > within an RSEQ. >> >> What's the goal there ? rseq critical sections can technically do system calls >> if they wish. Why prevent this ? > > This all started as a way to do 'small' _fast_ per-cpu ops, System calls > do NOT fit in that pattern. If you're willing to do a system calls the > cost of atomics is not a problem. I'm not arguing that a typical rseq would do a system call. I'm merely pointing out that if we start putting arbitrary limitations like "SIGSEGV when a fork or system call is encountered on top of rseq", this will cause pain in user-space. > >> How would you handle signal handlers that issue system calls while nested >> on top of a rseq critical section in the userspace thread ? SIGSEGV on >> SYSCALLs will break this case. > > Have the rseq thing aborted prior to delivering the signal ? Not if the RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL flag is set either in the TLS or in the rseq_cs structure. How about we simply add a rseq_migrate() within rseq_fork() (when forking to a new process), which will allow me to move the rseq_migrate from __set_task_cpu() to set_task_cpu() as you request. Is that solution acceptable for you ? Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html