* Re: Interrupt disabling design
2005-04-07 10:23 Interrupt disabling design Garcia Jérémie
@ 2005-04-07 10:19 ` Pantelis Antoniou
2005-04-07 23:58 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 3+ messages in thread
From: Pantelis Antoniou @ 2005-04-07 10:19 UTC (permalink / raw)
To: Garcia Jérémie; +Cc: linuxppc-dev
Garcia Jérémie wrote:
> Hi everybody,
> I'm trying to emulate a VxWorks-designed application under a linux montavista environment.
> In this application I have critical portion of code which need the interrupts disabled as below:
[snip]
>
> Is it possible to do that? Cause If I do a "cli()" call, I disable interrupts --> so, will the "sti()" call work?
> If yes, it allows me to make my own system call to use them from the user space but I'm not really sure...
>
> Tks a lot for your help
> _______________________________________________
Although it might be possible to something like that with root permissions,
I'd recommend against it.
If you want to run code with disabled interrupts, move that code in a kernel
module and disable/enable interrupts in the kernel
(still bad but acceptable).
IMHO of course.
Regards
Pantelis
^ permalink raw reply [flat|nested] 3+ messages in thread
* Interrupt disabling design
@ 2005-04-07 10:23 Garcia Jérémie
2005-04-07 10:19 ` Pantelis Antoniou
2005-04-07 23:58 ` Benjamin Herrenschmidt
0 siblings, 2 replies; 3+ messages in thread
From: Garcia Jérémie @ 2005-04-07 10:23 UTC (permalink / raw)
To: linuxppc-dev
Hi everybody,=20
I'm trying to emulate a VxWorks-designed application under a linux =
montavista environment.
In this application I have critical portion of code which need the =
interrupts disabled as below:
-------------------------------------
lockKey =3D OSIntrLock();some=20
.
. // my critical code =20
.
bsos1IntrUnlock(lockKey);
-------------------------------------
As you can see we use an OS encapsulation layer which is used to call =
the OS routines:
----------------------------
int OSIntrLock(void)
{
return (intLock()); // vxWorks routine
}
void OSIntrUnlock(int lockKey)
{
intUnlock(lockKey); // vxWorks routine
}
----------------------------
Furthermore, I'm running my "VxWorks emulator" in the user-space and I'm =
not allowed to modify files others than the OS encapsulation layer ones.
So, how can I use the "cli() / sti()" functions from the user space as =
below:
| USER-SPACE | --> | KERNEL-SPACE | --> | USER-SPACE | --> | =
KERNEL-SPACE | --> | USER-SPACE |
| | | | | | | =
| | | =20
| OSIntrLock() | | cli() | | my critical code | | =
sti() | | ..... |
| OSIntrUnlock() | =20
Is it possible to do that? Cause If I do a "cli()" call, I disable =
interrupts --> so, will the "sti()" call work?
If yes, it allows me to make my own system call to use them from the =
user space but I'm not really sure...
Tks a lot for your help=20
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Interrupt disabling design
2005-04-07 10:23 Interrupt disabling design Garcia Jérémie
2005-04-07 10:19 ` Pantelis Antoniou
@ 2005-04-07 23:58 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 3+ messages in thread
From: Benjamin Herrenschmidt @ 2005-04-07 23:58 UTC (permalink / raw)
To: Garcia Jérémie; +Cc: linuxppc-dev list
On Thu, 2005-04-07 at 12:23 +0200, Garcia Jérémie wrote:
> Hi everybody,
> I'm trying to emulate a VxWorks-designed application under a linux montavista environment.
> In this application I have critical portion of code which need the interrupts disabled as below:
>
> -------------------------------------
> lockKey = OSIntrLock();some
> .
> . // my critical code
> .
> bsos1IntrUnlock(lockKey);
> -------------------------------------
> As you can see we use an OS encapsulation layer which is used to call the OS routines:
On Linux, you can disable interrupts only on the current CPU. If your HW
is SMP, that cannot work, you need to complement the interrupt disabling
with a spinlock.
> ----------------------------
> int OSIntrLock(void)
> {
> return (intLock()); // vxWorks routine
> }
>
> void OSIntrUnlock(int lockKey)
> {
> intUnlock(lockKey); // vxWorks routine
> }
> ----------------------------
>
> Furthermore, I'm running my "VxWorks emulator" in the user-space and I'm not allowed to modify files others than the OS encapsulation layer ones.
> So, how can I use the "cli() / sti()" functions from the user space as below:
You cannot. Never. Forget it. If you ever need to actually disable
interrupts, you have to be a kernel driver. Period. Wrong model.
>
> | USER-SPACE | --> | KERNEL-SPACE | --> | USER-SPACE | --> | KERNEL-SPACE | --> | USER-SPACE |
> | | | | | | | | | |
> | OSIntrLock() | | cli() | | my critical code | | sti() | | ..... |
> | OSIntrUnlock() |
>
> Is it possible to do that? Cause If I do a "cli()" call, I disable interrupts --> so, will the "sti()" call work?
> If yes, it allows me to make my own system call to use them from the user space but I'm not really sure...
>
> Tks a lot for your help
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
--
Benjamin Herrenschmidt <benh@kernel.crashing.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-04-07 23:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-07 10:23 Interrupt disabling design Garcia Jérémie
2005-04-07 10:19 ` Pantelis Antoniou
2005-04-07 23:58 ` Benjamin Herrenschmidt
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).