Jan Kiszka wrote:
Philippe Gerum wrote:
Anders Blomdell wrote:
My distinct feeling is that the return value should be a scalar and
not a set!
To sum up, the valid return values are HANDLED, HANDLED | ENABLE (*),
HANDLED | CHAINED and CHAINED. It's currently a set because I once
thought that the "handled" indication (or lack of) could be a valuable
information to gather at nucleus level to detect unhandled RT
interrupts. Fact is that we currently don't use this information,
But it is required for the edge-triggered case to detect when the IRQ
line was at least shortly released. I guess Dmitry introduced that NOINT
just because HANDLED equals 0 so far. As I would say HANDLED == !NOINT,
we could avoid this new flag by just making HANDLED non-zero.
Yes, we could. HANDLED is currently zero only because the nucleus does not care of
the !handled case, yet.
though. IOW, we could indeed define some enum and have a scalar there
instead of a set; or we could just leave this as a set, but whine when
detecting the invalid ENABLE | CHAINED combination.
In combination with the change above and some doc improvement ("valid
combinations are: ..."), I could also live with keeping the flags. The
advantage were that we wouldn't break existing applications.
(*) because the handler does not necessary know how to ->end() the
current IRQ at IC level, but Xenomai always does.