Message ID | 20120719211541.GB32763@google.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
On Thu, 2012-07-19 at 14:15 -0700, Tejun Heo wrote: > From c9bba34243a86fb3ac82d1bdd0ce4bf796b79559 Mon Sep 17 00:00:00 2001 > From: Tejun Heo <tj@kernel.org> > Date: Thu, 19 Jul 2012 13:52:53 -0700 > > Make the following two non-functional changes. > > * Separate out insert_kthread_work() from queue_kthread_work(). > > * Relocate struct kthread_flush_work and kthread_flush_work_fn() > definitions above flush_kthread_work(). > > Signed-off-by: Tejun Heo <tj@kernel.org> > --- > kernel/kthread.c | 40 ++++++++++++++++++++++++---------------- > 1 files changed, 24 insertions(+), 16 deletions(-) > > diff --git a/kernel/kthread.c b/kernel/kthread.c > index 3d3de63..7b8a678 100644 > --- a/kernel/kthread.c > +++ b/kernel/kthread.c > @@ -378,6 +378,17 @@ repeat: > } > EXPORT_SYMBOL_GPL(kthread_worker_fn); > > +/* insert @work before @pos in @worker */ Hi Tejun, Would a comment that the caller should be holding worker->lock be useful here? Anyway, comment or not: Acked-by: Andy Walls <awall@md.metrocast.net> Regards, Andy > +static void insert_kthread_work(struct kthread_worker *worker, > + struct kthread_work *work, > + struct list_head *pos) > +{ > + list_add_tail(&work->node, pos); > + work->queue_seq++; > + if (likely(worker->task)) > + wake_up_process(worker->task); > +} > + > /** > * queue_kthread_work - queue a kthread_work > * @worker: target kthread_worker > @@ -395,10 +406,7 @@ bool queue_kthread_work(struct kthread_worker *worker, > > spin_lock_irqsave(&worker->lock, flags); > if (list_empty(&work->node)) { > - list_add_tail(&work->node, &worker->work_list); > - work->queue_seq++; > - if (likely(worker->task)) > - wake_up_process(worker->task); > + insert_kthread_work(worker, work, &worker->work_list); > ret = true; > } > spin_unlock_irqrestore(&worker->lock, flags); > @@ -406,6 +414,18 @@ bool queue_kthread_work(struct kthread_worker *worker, > } > EXPORT_SYMBOL_GPL(queue_kthread_work); > > +struct kthread_flush_work { > + struct kthread_work work; > + struct completion done; > +}; > + > +static void kthread_flush_work_fn(struct kthread_work *work) > +{ > + struct kthread_flush_work *fwork = > + container_of(work, struct kthread_flush_work, work); > + complete(&fwork->done); > +} > + > /** > * flush_kthread_work - flush a kthread_work > * @work: work to flush > @@ -436,18 +456,6 @@ void flush_kthread_work(struct kthread_work *work) > } > EXPORT_SYMBOL_GPL(flush_kthread_work); > > -struct kthread_flush_work { > - struct kthread_work work; > - struct completion done; > -}; > - > -static void kthread_flush_work_fn(struct kthread_work *work) > -{ > - struct kthread_flush_work *fwork = > - container_of(work, struct kthread_flush_work, work); > - complete(&fwork->done); > -} > - > /** > * flush_kthread_worker - flush all current works on a kthread_worker > * @worker: worker to flush ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
Hello, On Sat, Jul 21, 2012 at 01:13:27PM -0400, Andy Walls wrote: > > +/* insert @work before @pos in @worker */ > > Hi Tejun, > > Would a comment that the caller should be holding worker->lock be useful > here? Anyway, comment or not: > > Acked-by: Andy Walls <awall@md.metrocast.net> Will add lockdep_assert_held(). Thanks!
On Sun, 2012-07-22 at 09:46 -0700, Tejun Heo wrote: > Hello, > > On Sat, Jul 21, 2012 at 01:13:27PM -0400, Andy Walls wrote: > > > +/* insert @work before @pos in @worker */ > > > > Hi Tejun, > > > > Would a comment that the caller should be holding worker->lock be useful > > here? Anyway, comment or not: > > > > Acked-by: Andy Walls <awall@md.metrocast.net> > > Will add lockdep_assert_held(). Thanks! > Great! Thank you. Regards, Andy ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
diff --git a/kernel/kthread.c b/kernel/kthread.c index 3d3de63..7b8a678 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -378,6 +378,17 @@ repeat: } EXPORT_SYMBOL_GPL(kthread_worker_fn); +/* insert @work before @pos in @worker */ +static void insert_kthread_work(struct kthread_worker *worker, + struct kthread_work *work, + struct list_head *pos) +{ + list_add_tail(&work->node, pos); + work->queue_seq++; + if (likely(worker->task)) + wake_up_process(worker->task); +} + /** * queue_kthread_work - queue a kthread_work * @worker: target kthread_worker @@ -395,10 +406,7 @@ bool queue_kthread_work(struct kthread_worker *worker, spin_lock_irqsave(&worker->lock, flags); if (list_empty(&work->node)) { - list_add_tail(&work->node, &worker->work_list); - work->queue_seq++; - if (likely(worker->task)) - wake_up_process(worker->task); + insert_kthread_work(worker, work, &worker->work_list); ret = true; } spin_unlock_irqrestore(&worker->lock, flags); @@ -406,6 +414,18 @@ bool queue_kthread_work(struct kthread_worker *worker, } EXPORT_SYMBOL_GPL(queue_kthread_work); +struct kthread_flush_work { + struct kthread_work work; + struct completion done; +}; + +static void kthread_flush_work_fn(struct kthread_work *work) +{ + struct kthread_flush_work *fwork = + container_of(work, struct kthread_flush_work, work); + complete(&fwork->done); +} + /** * flush_kthread_work - flush a kthread_work * @work: work to flush @@ -436,18 +456,6 @@ void flush_kthread_work(struct kthread_work *work) } EXPORT_SYMBOL_GPL(flush_kthread_work); -struct kthread_flush_work { - struct kthread_work work; - struct completion done; -}; - -static void kthread_flush_work_fn(struct kthread_work *work) -{ - struct kthread_flush_work *fwork = - container_of(work, struct kthread_flush_work, work); - complete(&fwork->done); -} - /** * flush_kthread_worker - flush all current works on a kthread_worker * @worker: worker to flush