All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shaohua Li <shli@kernel.org>
To: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [patch]workqueue: copy attr with all fields.
Date: Thu, 1 Aug 2013 09:56:36 +0800	[thread overview]
Message-ID: <20130801015636.GA12580@kernel.org> (raw)
In-Reply-To: <20130731102752.GD2810@htj.dyndns.org>

On Wed, Jul 31, 2013 at 06:27:52AM -0400, Tejun Heo wrote:
> Hello,
> 
> On Wed, Jul 31, 2013 at 09:39:29AM +0800, Shaohua Li wrote:
> > Hmm, I didn't agree it's more confusing to change copy_workqueue_attrs(), the
> 
> We're talking past each other.  I'm not saying copy_workqueue_attrs()
> shouldn't copy no_numa.  I'm saying get_unbound_pool() should clear
> no_numa so that pools don't have random no_numa settings.
> 
> > name of the function suggests it is a 'copy'. And clearing no_numa in
> > apply_workqueue_attrs() after copy_workqueue_attrs() looks like a hack to me.
> 
> Why would apply_workqueue_attrs() modify no_numa when it *is* dealing
> with an actual workqueue attr.  I've been talking about
> get_unbound_pool() not apply_workqueue_attrs() the whole time.
> 
> > But it depends on you, feel free to fix it by yourself.
> 
> Please update the patch to add no_numa clearing to get_unbound_pool()
> and explain what's going on.

Something like this?


Subject: workqueue: copy workqueue_attrs with all fields

$echo '0' > /sys/bus/workqueue/devices/xxx/numa
$cat /sys/bus/workqueue/devices/xxx/numa
I got 1. It should be 0, the reason is copy_workqueue_attrs() called in
apply_workqueue_attrs() doesn't copy no_numa field.

Signed-off-by: Shaohua Li <shli@fusionio.com>

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 0b72e81..daf3f03 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -3411,6 +3411,7 @@ static void copy_workqueue_attrs(struct workqueue_attrs *to,
 {
 	to->nice = from->nice;
 	cpumask_copy(to->cpumask, from->cpumask);
+	to->no_numa = from->no_numa;
 }
 
 /* hash value of the content of @attr */
@@ -3578,6 +3579,12 @@ static struct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)
 	lockdep_set_subclass(&pool->lock, 1);	/* see put_pwq() */
 	copy_workqueue_attrs(pool->attrs, attrs);
 
+	/*
+	 * no_numa isn't a worker_pool attribute, always clear it. See 'struct
+	 * workqueue_attrs' comments for detail.
+	 */
+	pool->attrs->no_numa = 0;
+
 	/* if cpumask is contained inside a NUMA node, we belong to that node */
 	if (wq_numa_enabled) {
 		for_each_node(node) {

  reply	other threads:[~2013-08-01  1:56 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-29  6:24 [patch]workqueue: copy attr with all fields Shaohua Li
2013-07-29 11:14 ` Tejun Heo
2013-07-29 12:52   ` Shaohua Li
2013-07-29 15:35     ` Tejun Heo
2013-07-30  5:49       ` Shaohua Li
2013-07-30 14:14         ` Tejun Heo
2013-07-31  1:39           ` Shaohua Li
2013-07-31 10:27             ` Tejun Heo
2013-08-01  1:56               ` Shaohua Li [this message]
2013-08-01 12:35                 ` [PATCH] workqueue: copy workqueue_attrs " Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130801015636.GA12580@kernel.org \
    --to=shli@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.