Re: Syncronization in work queues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On Wed, May 6, 2009 at 11:58 AM, jasjit singh <singh.jasjit@xxxxxxxxxxx> wrote:
> Hi
> I am using work queue to do bottom half processing in my driver. The
> function queue_work() doesn't enqueue the work if the work_struct is already
> in the queue. I want to know how this phenomenon is synchronized. Suppose I
> have enqueued a work which calls the function do_this_work(). Now the
> do_this_work() has been invoked and not finished yet. So if there is an
> interrupt while processing of this function, will the new work be enqueued
> or the queue_work() still give an error ?
> What I could think is when the kernel starts processing do_this_work(), it
> resets some flag so that more work can be enqueued to the work queue. Does
> it behave like this or not ? Please elaborate the scenario if u can.


Looking at the source, specifically kernel/workqueue.c on function
run_workqueue()... I saw locking mechanism. I believe it's using
spin_lock_irq(), thus for current CPU, the interrupt is temporarily
disabled. Furthermore, I conclude that at this point, interrupt won't
trigger the execution of work queue at this point.

CMIIW people.

regards,

Mulyadi.

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux