Messages in this thread | | | Date | Mon, 7 Jun 1999 03:00:47 +0200 (CEST) | From | Andrea Arcangeli <> | Subject | Re: Why isn't this a bug in run_bottom_halves() (2.2.5)? |
| |
On Sun, 6 Jun 1999, Scott Maxwell wrote:
>static inline void run_bottom_halves(void) >{ > unsigned long active; > void (**bh)(void); > > active = get_active_bhs(); >/* > * Interrupts are enabled here. So suppose an interrupt occurs when > * we're right here and its top half marks a previously unmarked > * bottom half. do_IRQ() won't execute run_bottom_halves() after > * servicing the new interrupt's top half because we already have the > * lock for run_bottom_halves(), but when we return to this point, we > * zero bh_active in the next line, so the newly marked BH never gets
We don't zero bh_active, we only zero the bits that we are going to serve. And we clear them with an andl with the lock on the bus so we can't SMP race.
Andrea Arcangeli
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |