All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
@ 2015-10-16 14:49 Jan Kiszka
  2015-10-16 14:56 ` Jan Kiszka
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 14:49 UTC (permalink / raw)
  To: Xenomai

Hi,

kill() is currently handled by libcobalt such that PIDs <= 0 are
forwarded to Linux and PIDs > 0 are considered to target only Xenomai
threads. But what if the user wants to address a regular Linux task from
within a Xenomai application? Shouldn't we retry kill via the Linux path
if Xenomai's syscall reports ESRCH?

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 14:49 [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs Jan Kiszka
@ 2015-10-16 14:56 ` Jan Kiszka
  2015-10-16 15:22   ` Philippe Gerum
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 14:56 UTC (permalink / raw)
  To: Xenomai

On 2015-10-16 16:49, Jan Kiszka wrote:
> Hi,
> 
> kill() is currently handled by libcobalt such that PIDs <= 0 are
> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
> threads. But what if the user wants to address a regular Linux task from
> within a Xenomai application? Shouldn't we retry kill via the Linux path
> if Xenomai's syscall reports ESRCH?
> 

IOW:

diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
index aac4059..7e03301 100644
--- a/lib/cobalt/signal.c
+++ b/lib/cobalt/signal.c
@@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
 
 	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
 	if (ret) {
+		/* Retry with regular kill is no RT target was found. */
+		if (ret == -ESRCH)
+			return __STD(kill(pid, sig));
+
 		errno = -ret;
 		return -1;
 	}

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 14:56 ` Jan Kiszka
@ 2015-10-16 15:22   ` Philippe Gerum
  2015-10-16 15:28     ` Jan Kiszka
  0 siblings, 1 reply; 12+ messages in thread
From: Philippe Gerum @ 2015-10-16 15:22 UTC (permalink / raw)
  To: Jan Kiszka, Xenomai

On 10/16/2015 04:56 PM, Jan Kiszka wrote:
> On 2015-10-16 16:49, Jan Kiszka wrote:
>> Hi,
>>
>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>> threads. But what if the user wants to address a regular Linux task from
>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>> if Xenomai's syscall reports ESRCH?
>>
> 
> IOW:
> 
> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
> index aac4059..7e03301 100644
> --- a/lib/cobalt/signal.c
> +++ b/lib/cobalt/signal.c
> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>  
>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>  	if (ret) {
> +		/* Retry with regular kill is no RT target was found. */
> +		if (ret == -ESRCH)
> +			return __STD(kill(pid, sig));
> +
>  		errno = -ret;
>  		return -1;
>  	}
> 
> Jan
> 

This may break code that sends signal 0 to detect whether a rt thread
exists (like copperplate does), which is the reason for the lack of
forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
without breaking such assumption.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:22   ` Philippe Gerum
@ 2015-10-16 15:28     ` Jan Kiszka
  2015-10-16 15:31       ` Philippe Gerum
  2015-10-16 15:34       ` Gilles Chanteperdrix
  0 siblings, 2 replies; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 15:28 UTC (permalink / raw)
  To: Philippe Gerum, Xenomai

On 2015-10-16 17:22, Philippe Gerum wrote:
> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>> Hi,
>>>
>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>> threads. But what if the user wants to address a regular Linux task from
>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>> if Xenomai's syscall reports ESRCH?
>>>
>>
>> IOW:
>>
>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>> index aac4059..7e03301 100644
>> --- a/lib/cobalt/signal.c
>> +++ b/lib/cobalt/signal.c
>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>  
>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>  	if (ret) {
>> +		/* Retry with regular kill is no RT target was found. */
>> +		if (ret == -ESRCH)
>> +			return __STD(kill(pid, sig));
>> +
>>  		errno = -ret;
>>  		return -1;
>>  	}
>>
>> Jan
>>
> 
> This may break code that sends signal 0 to detect whether a rt thread
> exists (like copperplate does), which is the reason for the lack of
> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
> without breaking such assumption.

That still breaks POSIX (what if the user wants to test for a non-rt
thread, like this is possible under regular Linux?). Can't copperplate
be changed to bypass the wrapper?

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:28     ` Jan Kiszka
@ 2015-10-16 15:31       ` Philippe Gerum
  2015-10-16 15:57         ` Jan Kiszka
  2015-10-16 15:34       ` Gilles Chanteperdrix
  1 sibling, 1 reply; 12+ messages in thread
From: Philippe Gerum @ 2015-10-16 15:31 UTC (permalink / raw)
  To: Jan Kiszka, Xenomai

On 10/16/2015 05:28 PM, Jan Kiszka wrote:
> On 2015-10-16 17:22, Philippe Gerum wrote:
>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>> Hi,
>>>>
>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>> threads. But what if the user wants to address a regular Linux task from
>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>> if Xenomai's syscall reports ESRCH?
>>>>
>>>
>>> IOW:
>>>
>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>> index aac4059..7e03301 100644
>>> --- a/lib/cobalt/signal.c
>>> +++ b/lib/cobalt/signal.c
>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>  
>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>  	if (ret) {
>>> +		/* Retry with regular kill is no RT target was found. */
>>> +		if (ret == -ESRCH)
>>> +			return __STD(kill(pid, sig));
>>> +
>>>  		errno = -ret;
>>>  		return -1;
>>>  	}
>>>
>>> Jan
>>>
>>
>> This may break code that sends signal 0 to detect whether a rt thread
>> exists (like copperplate does), which is the reason for the lack of
>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>> without breaking such assumption.
> 
> That still breaks POSIX (what if the user wants to test for a non-rt
> thread, like this is possible under regular Linux?). Can't copperplate
> be changed to bypass the wrapper?
> 

Probably, yes.


-- 
Philippe.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:28     ` Jan Kiszka
  2015-10-16 15:31       ` Philippe Gerum
@ 2015-10-16 15:34       ` Gilles Chanteperdrix
  2015-10-16 15:50         ` Jan Kiszka
  1 sibling, 1 reply; 12+ messages in thread
From: Gilles Chanteperdrix @ 2015-10-16 15:34 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: Xenomai

On Fri, Oct 16, 2015 at 05:28:07PM +0200, Jan Kiszka wrote:
> On 2015-10-16 17:22, Philippe Gerum wrote:
> > On 10/16/2015 04:56 PM, Jan Kiszka wrote:
> >> On 2015-10-16 16:49, Jan Kiszka wrote:
> >>> Hi,
> >>>
> >>> kill() is currently handled by libcobalt such that PIDs <= 0 are
> >>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
> >>> threads. But what if the user wants to address a regular Linux task from
> >>> within a Xenomai application? Shouldn't we retry kill via the Linux path
> >>> if Xenomai's syscall reports ESRCH?
> >>>
> >>
> >> IOW:
> >>
> >> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
> >> index aac4059..7e03301 100644
> >> --- a/lib/cobalt/signal.c
> >> +++ b/lib/cobalt/signal.c
> >> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
> >>  
> >>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
> >>  	if (ret) {
> >> +		/* Retry with regular kill is no RT target was found. */
> >> +		if (ret == -ESRCH)
> >> +			return __STD(kill(pid, sig));
> >> +
> >>  		errno = -ret;
> >>  		return -1;
> >>  	}
> >>
> >> Jan
> >>
> > 
> > This may break code that sends signal 0 to detect whether a rt thread
> > exists (like copperplate does), which is the reason for the lack of
> > forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
> > without breaking such assumption.
> 
> That still breaks POSIX (what if the user wants to test for a non-rt
> thread, like this is possible under regular Linux?). Can't copperplate
> be changed to bypass the wrapper?

If I have understood the "xenomai 3" philosophy, is not an
application which wants to use the standard call supposed to use the
__STD prefix, or not use the wrapping at all ?

-- 
					    Gilles.
https://click-hack.org


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:34       ` Gilles Chanteperdrix
@ 2015-10-16 15:50         ` Jan Kiszka
  0 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 15:50 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: Xenomai

On 2015-10-16 17:34, Gilles Chanteperdrix wrote:
> On Fri, Oct 16, 2015 at 05:28:07PM +0200, Jan Kiszka wrote:
>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>> Hi,
>>>>>
>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>> if Xenomai's syscall reports ESRCH?
>>>>>
>>>>
>>>> IOW:
>>>>
>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>> index aac4059..7e03301 100644
>>>> --- a/lib/cobalt/signal.c
>>>> +++ b/lib/cobalt/signal.c
>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>  
>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>  	if (ret) {
>>>> +		/* Retry with regular kill is no RT target was found. */
>>>> +		if (ret == -ESRCH)
>>>> +			return __STD(kill(pid, sig));
>>>> +
>>>>  		errno = -ret;
>>>>  		return -1;
>>>>  	}
>>>>
>>>> Jan
>>>>
>>>
>>> This may break code that sends signal 0 to detect whether a rt thread
>>> exists (like copperplate does), which is the reason for the lack of
>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>> without breaking such assumption.
>>
>> That still breaks POSIX (what if the user wants to test for a non-rt
>> thread, like this is possible under regular Linux?). Can't copperplate
>> be changed to bypass the wrapper?
> 
> If I have understood the "xenomai 3" philosophy, is not an
> application which wants to use the standard call supposed to use the
> __STD prefix, or not use the wrapping at all ?

That's also a theoretical option, but should only be used if we can't
fix the limitation otherwise. The more exceptions we define, the less
portable we become for POSIX/Linux applications.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:31       ` Philippe Gerum
@ 2015-10-16 15:57         ` Jan Kiszka
  2015-10-16 16:00           ` Philippe Gerum
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 15:57 UTC (permalink / raw)
  To: Philippe Gerum, Xenomai

On 2015-10-16 17:31, Philippe Gerum wrote:
> On 10/16/2015 05:28 PM, Jan Kiszka wrote:
>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>> Hi,
>>>>>
>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>> if Xenomai's syscall reports ESRCH?
>>>>>
>>>>
>>>> IOW:
>>>>
>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>> index aac4059..7e03301 100644
>>>> --- a/lib/cobalt/signal.c
>>>> +++ b/lib/cobalt/signal.c
>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>  
>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>  	if (ret) {
>>>> +		/* Retry with regular kill is no RT target was found. */
>>>> +		if (ret == -ESRCH)
>>>> +			return __STD(kill(pid, sig));
>>>> +
>>>>  		errno = -ret;
>>>>  		return -1;
>>>>  	}
>>>>
>>>> Jan
>>>>
>>>
>>> This may break code that sends signal 0 to detect whether a rt thread
>>> exists (like copperplate does), which is the reason for the lack of
>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>> without breaking such assumption.
>>
>> That still breaks POSIX (what if the user wants to test for a non-rt
>> thread, like this is possible under regular Linux?). Can't copperplate
>> be changed to bypass the wrapper?
>>
> 
> Probably, yes.
> 

Looking at cluster_probe, I wonder if there is actually a problem.
Doesn't that code also run over mercury? Then kill(pid, 0) also targets
the whole system, not just a set of Xenomai applications. Or do we need
to ensure that the caller is not migrated to Linux needlessly under
cobalt? IOW: can that probing happen under RT constraints?

The same applies for me to the other users of the kill-based probing
pattern (copperplate/heapobj-pshared.c and copperplate/regd/fs-common.c).

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 15:57         ` Jan Kiszka
@ 2015-10-16 16:00           ` Philippe Gerum
  2015-10-16 16:03             ` Jan Kiszka
  0 siblings, 1 reply; 12+ messages in thread
From: Philippe Gerum @ 2015-10-16 16:00 UTC (permalink / raw)
  To: Jan Kiszka, Xenomai

On 10/16/2015 05:57 PM, Jan Kiszka wrote:
> On 2015-10-16 17:31, Philippe Gerum wrote:
>> On 10/16/2015 05:28 PM, Jan Kiszka wrote:
>>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>>> Hi,
>>>>>>
>>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>>> if Xenomai's syscall reports ESRCH?
>>>>>>
>>>>>
>>>>> IOW:
>>>>>
>>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>>> index aac4059..7e03301 100644
>>>>> --- a/lib/cobalt/signal.c
>>>>> +++ b/lib/cobalt/signal.c
>>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>>  
>>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>>  	if (ret) {
>>>>> +		/* Retry with regular kill is no RT target was found. */
>>>>> +		if (ret == -ESRCH)
>>>>> +			return __STD(kill(pid, sig));
>>>>> +
>>>>>  		errno = -ret;
>>>>>  		return -1;
>>>>>  	}
>>>>>
>>>>> Jan
>>>>>
>>>>
>>>> This may break code that sends signal 0 to detect whether a rt thread
>>>> exists (like copperplate does), which is the reason for the lack of
>>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>>> without breaking such assumption.
>>>
>>> That still breaks POSIX (what if the user wants to test for a non-rt
>>> thread, like this is possible under regular Linux?). Can't copperplate
>>> be changed to bypass the wrapper?
>>>
>>
>> Probably, yes.
>>
> 
> Looking at cluster_probe, I wonder if there is actually a problem.
> Doesn't that code also run over mercury? Then kill(pid, 0) also targets
> the whole system, not just a set of Xenomai applications.

Over mercury, the whole system is the rt domain.

 Or do we need
> to ensure that the caller is not migrated to Linux needlessly under
> cobalt? IOW: can that probing happen under RT constraints?
> 

It does with clusters. In general, no restriction on the calling domain
should exist for this low level interface.

> The same applies for me to the other users of the kill-based probing
> pattern (copperplate/heapobj-pshared.c and copperplate/regd/fs-common.c).
> 
> Jan
> 


-- 
Philippe.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 16:00           ` Philippe Gerum
@ 2015-10-16 16:03             ` Jan Kiszka
  2015-10-16 16:06               ` Philippe Gerum
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Kiszka @ 2015-10-16 16:03 UTC (permalink / raw)
  To: Philippe Gerum, Xenomai

On 2015-10-16 18:00, Philippe Gerum wrote:
> On 10/16/2015 05:57 PM, Jan Kiszka wrote:
>> On 2015-10-16 17:31, Philippe Gerum wrote:
>>> On 10/16/2015 05:28 PM, Jan Kiszka wrote:
>>>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>>>> if Xenomai's syscall reports ESRCH?
>>>>>>>
>>>>>>
>>>>>> IOW:
>>>>>>
>>>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>>>> index aac4059..7e03301 100644
>>>>>> --- a/lib/cobalt/signal.c
>>>>>> +++ b/lib/cobalt/signal.c
>>>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>>>  
>>>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>>>  	if (ret) {
>>>>>> +		/* Retry with regular kill is no RT target was found. */
>>>>>> +		if (ret == -ESRCH)
>>>>>> +			return __STD(kill(pid, sig));
>>>>>> +
>>>>>>  		errno = -ret;
>>>>>>  		return -1;
>>>>>>  	}
>>>>>>
>>>>>> Jan
>>>>>>
>>>>>
>>>>> This may break code that sends signal 0 to detect whether a rt thread
>>>>> exists (like copperplate does), which is the reason for the lack of
>>>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>>>> without breaking such assumption.
>>>>
>>>> That still breaks POSIX (what if the user wants to test for a non-rt
>>>> thread, like this is possible under regular Linux?). Can't copperplate
>>>> be changed to bypass the wrapper?
>>>>
>>>
>>> Probably, yes.
>>>
>>
>> Looking at cluster_probe, I wonder if there is actually a problem.
>> Doesn't that code also run over mercury? Then kill(pid, 0) also targets
>> the whole system, not just a set of Xenomai applications.
> 
> Over mercury, the whole system is the rt domain.
> 
>  Or do we need
>> to ensure that the caller is not migrated to Linux needlessly under
>> cobalt? IOW: can that probing happen under RT constraints?
>>
> 
> It does with clusters. In general, no restriction on the calling domain
> should exist for this low level interface.

Ok, will handle that path cobalt-specific then.

> 
>> The same applies for me to the other users of the kill-based probing
>> pattern (copperplate/heapobj-pshared.c and copperplate/regd/fs-common.c).

But these are fine, no?

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 16:03             ` Jan Kiszka
@ 2015-10-16 16:06               ` Philippe Gerum
  2015-10-16 16:07                 ` Philippe Gerum
  0 siblings, 1 reply; 12+ messages in thread
From: Philippe Gerum @ 2015-10-16 16:06 UTC (permalink / raw)
  To: Jan Kiszka, Xenomai

On 10/16/2015 06:03 PM, Jan Kiszka wrote:
> On 2015-10-16 18:00, Philippe Gerum wrote:
>> On 10/16/2015 05:57 PM, Jan Kiszka wrote:
>>> On 2015-10-16 17:31, Philippe Gerum wrote:
>>>> On 10/16/2015 05:28 PM, Jan Kiszka wrote:
>>>>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>>>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>>>>> if Xenomai's syscall reports ESRCH?
>>>>>>>>
>>>>>>>
>>>>>>> IOW:
>>>>>>>
>>>>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>>>>> index aac4059..7e03301 100644
>>>>>>> --- a/lib/cobalt/signal.c
>>>>>>> +++ b/lib/cobalt/signal.c
>>>>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>>>>  
>>>>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>>>>  	if (ret) {
>>>>>>> +		/* Retry with regular kill is no RT target was found. */
>>>>>>> +		if (ret == -ESRCH)
>>>>>>> +			return __STD(kill(pid, sig));
>>>>>>> +
>>>>>>>  		errno = -ret;
>>>>>>>  		return -1;
>>>>>>>  	}
>>>>>>>
>>>>>>> Jan
>>>>>>>
>>>>>>
>>>>>> This may break code that sends signal 0 to detect whether a rt thread
>>>>>> exists (like copperplate does), which is the reason for the lack of
>>>>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>>>>> without breaking such assumption.
>>>>>
>>>>> That still breaks POSIX (what if the user wants to test for a non-rt
>>>>> thread, like this is possible under regular Linux?). Can't copperplate
>>>>> be changed to bypass the wrapper?
>>>>>
>>>>
>>>> Probably, yes.
>>>>
>>>
>>> Looking at cluster_probe, I wonder if there is actually a problem.
>>> Doesn't that code also run over mercury? Then kill(pid, 0) also targets
>>> the whole system, not just a set of Xenomai applications.
>>
>> Over mercury, the whole system is the rt domain.
>>
>>  Or do we need
>>> to ensure that the caller is not migrated to Linux needlessly under
>>> cobalt? IOW: can that probing happen under RT constraints?
>>>
>>
>> It does with clusters. In general, no restriction on the calling domain
>> should exist for this low level interface.
> 
> Ok, will handle that path cobalt-specific then.
> 
>>
>>> The same applies for me to the other users of the kill-based probing
>>> pattern (copperplate/heapobj-pshared.c and copperplate/regd/fs-common.c).
> 
> But these are fine, no?
> 

Yes, don't care for mode switches there.


-- 
Philippe.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs
  2015-10-16 16:06               ` Philippe Gerum
@ 2015-10-16 16:07                 ` Philippe Gerum
  0 siblings, 0 replies; 12+ messages in thread
From: Philippe Gerum @ 2015-10-16 16:07 UTC (permalink / raw)
  To: Jan Kiszka, Xenomai

On 10/16/2015 06:06 PM, Philippe Gerum wrote:
> On 10/16/2015 06:03 PM, Jan Kiszka wrote:
>> On 2015-10-16 18:00, Philippe Gerum wrote:
>>> On 10/16/2015 05:57 PM, Jan Kiszka wrote:
>>>> On 2015-10-16 17:31, Philippe Gerum wrote:
>>>>> On 10/16/2015 05:28 PM, Jan Kiszka wrote:
>>>>>> On 2015-10-16 17:22, Philippe Gerum wrote:
>>>>>>> On 10/16/2015 04:56 PM, Jan Kiszka wrote:
>>>>>>>> On 2015-10-16 16:49, Jan Kiszka wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> kill() is currently handled by libcobalt such that PIDs <= 0 are
>>>>>>>>> forwarded to Linux and PIDs > 0 are considered to target only Xenomai
>>>>>>>>> threads. But what if the user wants to address a regular Linux task from
>>>>>>>>> within a Xenomai application? Shouldn't we retry kill via the Linux path
>>>>>>>>> if Xenomai's syscall reports ESRCH?
>>>>>>>>>
>>>>>>>>
>>>>>>>> IOW:
>>>>>>>>
>>>>>>>> diff --git a/lib/cobalt/signal.c b/lib/cobalt/signal.c
>>>>>>>> index aac4059..7e03301 100644
>>>>>>>> --- a/lib/cobalt/signal.c
>>>>>>>> +++ b/lib/cobalt/signal.c
>>>>>>>> @@ -99,6 +99,10 @@ COBALT_IMPL(int, kill, (pid_t pid, int sig))
>>>>>>>>  
>>>>>>>>  	ret = XENOMAI_SYSCALL2(sc_cobalt_kill, pid, sig);
>>>>>>>>  	if (ret) {
>>>>>>>> +		/* Retry with regular kill is no RT target was found. */
>>>>>>>> +		if (ret == -ESRCH)
>>>>>>>> +			return __STD(kill(pid, sig));
>>>>>>>> +
>>>>>>>>  		errno = -ret;
>>>>>>>>  		return -1;
>>>>>>>>  	}
>>>>>>>>
>>>>>>>> Jan
>>>>>>>>
>>>>>>>
>>>>>>> This may break code that sends signal 0 to detect whether a rt thread
>>>>>>> exists (like copperplate does), which is the reason for the lack of
>>>>>>> forwarding IIRC. (ret == -ESRCH && sig) would be required to forward
>>>>>>> without breaking such assumption.
>>>>>>
>>>>>> That still breaks POSIX (what if the user wants to test for a non-rt
>>>>>> thread, like this is possible under regular Linux?). Can't copperplate
>>>>>> be changed to bypass the wrapper?
>>>>>>
>>>>>
>>>>> Probably, yes.
>>>>>
>>>>
>>>> Looking at cluster_probe, I wonder if there is actually a problem.
>>>> Doesn't that code also run over mercury? Then kill(pid, 0) also targets
>>>> the whole system, not just a set of Xenomai applications.
>>>
>>> Over mercury, the whole system is the rt domain.
>>>
>>>  Or do we need
>>>> to ensure that the caller is not migrated to Linux needlessly under
>>>> cobalt? IOW: can that probing happen under RT constraints?
>>>>
>>>
>>> It does with clusters. In general, no restriction on the calling domain
>>> should exist for this low level interface.
>>
>> Ok, will handle that path cobalt-specific then.
>>
>>>
>>>> The same applies for me to the other users of the kill-based probing
>>>> pattern (copperplate/heapobj-pshared.c and copperplate/regd/fs-common.c).
>>
>> But these are fine, no?
>>
> 
> Yes, don't care for mode switches there.
> 
> 

In fact, those will never target a non-Xenomai thread over cobalt.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-10-16 16:07 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-16 14:49 [Xenomai] Xenomai 3: kill() to non-Xenomai PIDs Jan Kiszka
2015-10-16 14:56 ` Jan Kiszka
2015-10-16 15:22   ` Philippe Gerum
2015-10-16 15:28     ` Jan Kiszka
2015-10-16 15:31       ` Philippe Gerum
2015-10-16 15:57         ` Jan Kiszka
2015-10-16 16:00           ` Philippe Gerum
2015-10-16 16:03             ` Jan Kiszka
2015-10-16 16:06               ` Philippe Gerum
2015-10-16 16:07                 ` Philippe Gerum
2015-10-16 15:34       ` Gilles Chanteperdrix
2015-10-16 15:50         ` Jan Kiszka

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.