Benjamin Herrenschmidt wrote: > On Sun, 2009-11-22 at 23:01 +0100, Albert Herranz wrote: > >> +static void flipper_pic_mask_and_ack(unsigned int virq) >> +{ >> + int irq = virq_to_hw(virq); >> + void __iomem *io_base = get_irq_chip_data(virq); >> + >> + clear_bit(irq, io_base + FLIPPER_IMR); >> + set_bit(irq, io_base + FLIPPER_ICR); >> +} > > Do not use clear_bit and set_bit on IOs. They will do lwarx/stwcx. which > is really not what you want. You can use __clear_bit and __set_bit but > it's still fishy. Those operate on unsigned long, so the size vary > between 32 and 64 bit etc... not something you care that much about, but > it's still the wrong tool for the job. > > Do those guys have more than 32 interrupts ? If not, just hand > code the msak & shifts. If they do, then maybe stick with __clear_bit() > and __set_bit() which are the non atomic variants. >
There can be only 32 interrupt sources per pic. I'll build a mask and check if just a simple write works too (it should IMHO), instead of a RWM. > Cheers, > Ben. > Thanks, Albert _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev