Oleg Nesterov [off-list ref] writes:
On 07/18, Eric W. Biederman wrote:
quoted
- BUG_ON((reason & __SI_MASK) != __SI_POLL);
+ BUG_ON((reason < POLL_IN) || (reason > NSIGPOLL));
^^^^^^^^^^^^^^^^^
looks obviously wrong? Say, POLL_IN is obviously > NSIGPOLL == 6.
Strictly speaking that code is wrong until the next patch
when I remove __SI_POLL. That is my mistake.
When the values are not their messed up internal kernel variants
the code works fine and makes sense.
#define POLL_IN 1 /* data input available */
#define POLL_OUT 2 /* output buffers available */
#define POLL_MSG 3 /* input message available */
#define POLL_ERR 4 /* i/o error */
#define POLL_PRI 5 /* high priority input available */
#define POLL_HUP 6 /* device disconnected */
#define NSIGPOLL 6
Probably you meant
BUG_ON((reason < POLL_IN) || (reason - POLL_IN > NSIGPOLL)
?
but this contradicts with the next line:
quoted
if (reason - POLL_IN >= NSIGPOLL)
si.si_band = ~0L;
confused...
I am mystified why we test for a condition that we have been bugging on
for ages.
Eric