Re: Why can't we sleep in an ISR?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dong Feng wrote:
OK. I think the gap between you and me is the definition of term
*context*. If you go to Linux Kernel Development, 2nd Edition (ISBN
0-672-32720-1), Page 6, then you will read the following:

....  in Linux, ... each processor is doing one of three things at any
given moment:

1. In kernel-space, in process context, ...
2. In kernel-space, in interrupt context, not associated with a process, ...
3. In user-space ...

This list is inclusive. ...

Yep, I disagree with that use of the term, because it is misleading and caused your confusion. The context that the ISR executes in is not associated with a _known_ process is more correct.

Maybe you prefer other terminology system, but I do like the above
definition given by Robert Love. So maybe in your system *context*
mean something at hardware level and you say ISR is in process
context, but I think it is more like a logical level and agree with
Rovert's definition.

And in hardware level, Robert's *context* definition also mean
something specific, that I started to be aware of. That is, *in the
same context* means a kernel-code is triggered by a user-space code.
*in different context* means a kernel-code is triggered by an external
interrupt source other than a user-space code.

Right, and that becomes more clear when you say that the ISR's is executing in an indeterminate process context, rather than saying it does not have any context at all, or has its own special context.

Context has nothing to do with whether an ISR borrow any data
structure of a process, instead, its something logical or related to
causality.

No, it has everything to do with the data structures of the process. When you are executing "in the same context" as you put it, as called from the user mode code, you know you are using the task structure of that process and so you can make use of that structure. For example, you can look at the current uid to decide if you should allow an operation to proceed. When you are in an ISR, there _is_ a task structure there, but you shouldn't use it because you don't know which task structure it is because you don't know which task you are interrupting. Thus if you look at the current uid in an ISR, you have no idea what you will see there and it will change from interrupt to interrupt, depending on which task gets interrupted.



--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux