ELF solution has to load the code to RAM, the overhead is too big to use for 
XIP system.

> -----Original Message-----
> From: Matias N. <mat...@imap.cc>
> Sent: Thursday, January 28, 2021 2:17 AM
> To: dev@nuttx.apache.org
> Subject: Re: limitation in SIGEV_THREAD?
> 
> I think the independent ELF solution would again not be very good for 
> constrained systems.
> The again, reading about SIGEV_THREAD makes me think that the specs are very 
> loose in terms of what is guaranteed by the thread
running
> the callback.
> 
> These kind of issues (and the fact that mixing signals with threads is not 
> good) is what I think makes timerfd/signalfd/eventfd
attractive.
> Having those the need for these kind of notifications is greatly diminished, 
> as you simply poll/select on your own thread, and it
can be done
> for other kind of fds simultaneously.
> 
> Best,
> Matias
> 
> On Wed, Jan 27, 2021, at 15:06, Gregory Nutt wrote:
> >
> > > My thinking is that maybe upon setting up the first SIGEV_THREAD 
> > > notification for a task, a child thread would be created,
which would
> act as a worker, waiting on some semaphore for example. The bad thing is that 
> it would linger until task is finished (not sure
even how easy
> would be to ensure it is deleted on task exit).
> >
> > This would be difficult because in PROTECTED and KERNEL modes, the OS
> > has no knowledge of any user-space symbols.  Creating a pthread is
> > different from starting a task because you have to the user-space
> > address of the pthread entry point.  That is not knowable in the cases
> > where the OS is separately linked.  So this could not be done by the
> > core OS as a general solution.  It could be done in some library
> > function if we had a user-space crt0.o to start the task.
> >
> > There is already a crt0.o for ELF modules and it could start such a thread.
> >
> > > Or is there a way for an lpwork thread to temporarily get into a task's 
> > > environment?
> > No, because an LP thread is a kernel thread.  It is privileged and if
> > it were to run user code in supervisor mode, that would be a major
> > security hole.
> > > BTW, for C++ global constructors I think there's also the issue that they 
> > > are only called at boot and not each time a task
starts. At least I
> had that problem in the past.
> >
> > This would require a different build model with tasks (or at least
> > task-related constructors/destructors) that are separately built and a
> > crt0.o to start any threads.
> >
> > So one solution to both problems is to make all tasks into separately
> > linked ELF modules.
> >
> >
> >

Reply via email to