Hi Srinivas, You are right, Work Queues run in process context. However are you taking some semaphore/scheduling, while in_interrupt is true? Thanks, Vishwas ________________________________________ From: kernelnewbies-bounce@xxxxxxxxxxxx [mailto:kernelnewbies-bounce@xxxxxxxxxxxx] On Behalf Of srinivas bakki Sent: Friday, September 23, 2005 1:38 PM To: Thomas Petazzoni Cc: kernelnewbies@xxxxxxxxxxxx Subject: Re: Unable to schedue bottom halve AFAIK, bottom halves run in « interrupt context », i.e in_interrupt() is true while running bottom halves. yes in_interrupt() is some positive value indicating that its running in the interrupt context. but the work we queue using queue_work must be run in the context of a kernel thread right. thats why we create a kernel thread using create_workqueue(). The basic difference i can make out between work queues and tasklets is the context in which they are executed. The alternative to tasklets is workqueues, which may have a higher latency but that are allowed to sleep. because of this kernel thread is why the latency comes in and because of which they are allowed to sleep ... since they have a backing process to which they can return to. -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/