On Fri, Jul 29, 2016 at 4:02 PM, Muni Sekhar <munisekharrms@xxxxxxxxx> wrote: > Hi All, > > I have a doubt regarding the workqueue scheduling. > > I am using the workqueue for processing the Rx Interrupt data. I am > calling schedule_work() on receiving the Rx interrupt from hardware. > > I calculated the time between calling the schedule_work() and > workqueue task actually getting executed, Here I see many cases of > less than 100 us(It is fairly good). > > But sometimes I see 10’s of ms and a lot in the 100’s of ms. I have > seen over 0.5 secs too. I would like to know why does sometimes kernel > takes longer time(in milli seconds) to schedule it? Is there any way > to reduce this time gap? > > > My code: > > static void my_workqueuetask(struct work_struct *work) > { > printk("In %s() \n",__func__); > You probably don't need this if it's just for your work_fn, yeah but if there's race between this and something else... > mutex_lock(&bh_mutex); > > //Do something here > > mutex_unlock(&bh_mutex); > } > > > static irqreturn_t my_irq_handler(int irq, void *dev) > { > ……; > > if(Rx Interrupt) > schedule_work(&rx_work); Maybe system_wq has too much already on it's plate? Have you tried the same with completion and a kthread? or with your own workqueue, overkill but you can give it a shot. > > return IRQ_HANDLED; > } > > -- > Thanks, > Sekhar > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies -- ---P.K.S _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies