On Fri, Jul 29, 2016 at 4:02 PM, Muni Sekhar <munisekharrms@gmail.com> 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@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- ---P.K.S