On Wed, Jan 10, 2018 at 02:59:12PM +0800, ShuFanLee wrote: > +static inline void rt1711h_poll_ctrl(struct rt1711h_chip *chip) > +{ > + cancel_delayed_work_sync(&chip->poll_work); > + > + if (atomic_read(&chip->poll_count) == 0) { > + atomic_inc(&chip->poll_count); > + cpu_idle_poll_ctrl(true); > + } > + > + schedule_delayed_work(&chip->poll_work, msecs_to_jiffies(40)); > +}
This is very odd, and not good. What are you trying to do here? And why are you thinking that poll_count should be an atomic variable? This feels really strange, and not something you should be doing in an irq handler, right? thanks, greg k-h