From: Chris Metcalf <cmetcalf@tilera.com>
To: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <fweisbec@gmail.com>,
Cody P Schafer <cody@linux.vnet.ibm.com>
Subject: Re: [PATCH v4 1/2] workqueue: add new schedule_on_cpu_mask() API
Date: Fri, 9 Aug 2013 12:12:43 -0400 [thread overview]
Message-ID: <520514FB.8060502@tilera.com> (raw)
In-Reply-To: <20130809150257.GM20515@mtj.dyndns.org>
On 8/9/2013 11:02 AM, Tejun Heo wrote:
> Hello, Chris.
>
> On Wed, Aug 07, 2013 at 04:49:44PM -0400, Chris Metcalf wrote:
>> This primitive allows scheduling work to run on a particular set of
>> cpus described by a "struct cpumask". This can be useful, for example,
>> if you have a per-cpu variable that requires code execution only if the
>> per-cpu variable has a certain value (for example, is a non-empty list).
> So, this allows scheduling work items on !online CPUs. Workqueue does
> allow scheduling per-cpu work items on offline CPUs if the CPU has
> ever been online, but the behavior when scheduling work items on cpu
> which has never been online is undefined. I think the interface at
> least needs to verify that the the target cpus have been online,
> trigger warning and mask off invalid CPUs otherwise.
I could certainly make schedule_on_cpu_mask() do sanity checking, perhaps via a WARN_ON_ONCE() if offline cpus were specified, and otherwise just have it create a local struct cpumask that it and's with cpu_online_mask, suitably wrapping with get_online_cpus()/put_online_cpus(). (I'm not sure how to test if a cpu has ever been online, vs whether it's online right now.) I don't want to unnecessarily slow down the existing schedule_on_each_cpu(), so perhaps the implementation should have a static schedule_on_cpu_mask_internal() function that is the same as my previous schedule_on_cpu_mask(), allowing schedule_on_each_cpu() to call it directly to bypass the checking.
That said... I wonder if it might make sense to treat this API the same as other APIs that already take a cpu? schedule_work_on(), schedule_delayed_work_on(), and queue_delayed_work_on() all take a cpu parameter without API comment or validity checking; queue_work_on() just says "the caller must ensure [the cpu] can't go away". Does it make sense to just add a similar comment to schedule_on_cpu_mask() rather than make this API the first to actually do cpu validity checking?
Let me know; I'm happy to respin it either way.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Chris Metcalf <cmetcalf@tilera.com>
To: Tejun Heo <tj@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <fweisbec@gmail.com>,
Cody P Schafer <cody@linux.vnet.ibm.com>
Subject: Re: [PATCH v4 1/2] workqueue: add new schedule_on_cpu_mask() API
Date: Fri, 9 Aug 2013 12:12:43 -0400 [thread overview]
Message-ID: <520514FB.8060502@tilera.com> (raw)
In-Reply-To: <20130809150257.GM20515@mtj.dyndns.org>
On 8/9/2013 11:02 AM, Tejun Heo wrote:
> Hello, Chris.
>
> On Wed, Aug 07, 2013 at 04:49:44PM -0400, Chris Metcalf wrote:
>> This primitive allows scheduling work to run on a particular set of
>> cpus described by a "struct cpumask". This can be useful, for example,
>> if you have a per-cpu variable that requires code execution only if the
>> per-cpu variable has a certain value (for example, is a non-empty list).
> So, this allows scheduling work items on !online CPUs. Workqueue does
> allow scheduling per-cpu work items on offline CPUs if the CPU has
> ever been online, but the behavior when scheduling work items on cpu
> which has never been online is undefined. I think the interface at
> least needs to verify that the the target cpus have been online,
> trigger warning and mask off invalid CPUs otherwise.
I could certainly make schedule_on_cpu_mask() do sanity checking, perhaps via a WARN_ON_ONCE() if offline cpus were specified, and otherwise just have it create a local struct cpumask that it and's with cpu_online_mask, suitably wrapping with get_online_cpus()/put_online_cpus(). (I'm not sure how to test if a cpu has ever been online, vs whether it's online right now.) I don't want to unnecessarily slow down the existing schedule_on_each_cpu(), so perhaps the implementation should have a static schedule_on_cpu_mask_internal() function that is the same as my previous schedule_on_cpu_mask(), allowing schedule_on_each_cpu() to call it directly to bypass the checking.
That said... I wonder if it might make sense to treat this API the same as other APIs that already take a cpu? schedule_work_on(), schedule_delayed_work_on(), and queue_delayed_work_on() all take a cpu parameter without API comment or validity checking; queue_work_on() just says "the caller must ensure [the cpu] can't go away". Does it make sense to just add a similar comment to schedule_on_cpu_mask() rather than make this API the first to actually do cpu validity checking?
Let me know; I'm happy to respin it either way.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
next prev parent reply other threads:[~2013-08-09 16:12 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-06 20:22 [PATCH] mm: make lru_add_drain_all() selective Chris Metcalf
2013-08-06 20:22 ` Chris Metcalf
2013-08-06 20:22 ` [PATCH v2] " Chris Metcalf
2013-08-06 20:22 ` Chris Metcalf
2013-08-07 20:45 ` Tejun Heo
2013-08-07 20:45 ` Tejun Heo
2013-08-07 20:49 ` [PATCH v3 1/2] workqueue: add new schedule_on_cpu_mask() API Chris Metcalf
2013-08-07 20:49 ` Chris Metcalf
2013-08-07 20:52 ` [PATCH v3 2/2] mm: make lru_add_drain_all() selective Chris Metcalf
2013-08-07 20:52 ` Chris Metcalf
2013-08-07 22:48 ` [PATCH v2] " Cody P Schafer
2013-08-07 22:48 ` Cody P Schafer
2013-08-07 20:49 ` [PATCH v4 1/2] workqueue: add new schedule_on_cpu_mask() API Chris Metcalf
2013-08-07 20:49 ` Chris Metcalf
2013-08-09 15:02 ` Tejun Heo
2013-08-09 15:02 ` Tejun Heo
2013-08-09 16:12 ` Chris Metcalf [this message]
2013-08-09 16:12 ` Chris Metcalf
2013-08-09 16:30 ` Tejun Heo
2013-08-09 16:30 ` Tejun Heo
2013-08-07 20:49 ` [PATCH v5 " Chris Metcalf
2013-08-07 20:49 ` Chris Metcalf
2013-08-09 17:40 ` Tejun Heo
2013-08-09 17:40 ` Tejun Heo
2013-08-09 17:49 ` [PATCH v6 " Chris Metcalf
2013-08-09 17:49 ` Chris Metcalf
2013-08-09 17:52 ` [PATCH v6 2/2] mm: make lru_add_drain_all() selective Chris Metcalf
2013-08-09 17:52 ` Chris Metcalf
2013-08-07 20:52 ` [PATCH v5 " Chris Metcalf
2013-08-07 20:52 ` Chris Metcalf
2013-08-07 20:52 ` [PATCH v4 " Chris Metcalf
2013-08-07 20:52 ` Chris Metcalf
2013-08-12 21:05 ` Andrew Morton
2013-08-12 21:05 ` Andrew Morton
2013-08-13 1:53 ` Chris Metcalf
2013-08-13 1:53 ` Chris Metcalf
2013-08-13 19:35 ` Andrew Morton
2013-08-13 19:35 ` Andrew Morton
2013-08-13 20:19 ` Tejun Heo
2013-08-13 20:19 ` Tejun Heo
2013-08-13 20:31 ` Andrew Morton
2013-08-13 20:31 ` Andrew Morton
2013-08-13 20:59 ` Chris Metcalf
2013-08-13 20:59 ` Chris Metcalf
2013-08-13 21:13 ` Andrew Morton
2013-08-13 21:13 ` Andrew Morton
2013-08-13 22:13 ` Chris Metcalf
2013-08-13 22:13 ` Chris Metcalf
2013-08-13 22:26 ` Andrew Morton
2013-08-13 22:26 ` Andrew Morton
2013-08-13 23:04 ` Chris Metcalf
2013-08-13 23:04 ` Chris Metcalf
2013-08-13 22:51 ` [PATCH v7 1/2] workqueue: add schedule_on_each_cpu_cond Chris Metcalf
2013-08-13 22:51 ` Chris Metcalf
2013-08-13 22:53 ` [PATCH v7 2/2] mm: make lru_add_drain_all() selective Chris Metcalf
2013-08-13 22:53 ` Chris Metcalf
2013-08-13 23:29 ` Tejun Heo
2013-08-13 23:29 ` Tejun Heo
2013-08-13 23:32 ` Chris Metcalf
2013-08-13 23:32 ` Chris Metcalf
2013-08-14 6:46 ` Andrew Morton
2013-08-14 6:46 ` Andrew Morton
2013-08-14 13:05 ` Tejun Heo
2013-08-14 13:05 ` Tejun Heo
2013-08-14 16:03 ` Chris Metcalf
2013-08-14 16:03 ` Chris Metcalf
2013-08-14 16:57 ` Tejun Heo
2013-08-14 16:57 ` Tejun Heo
2013-08-14 17:18 ` Chris Metcalf
2013-08-14 17:18 ` Chris Metcalf
2013-08-14 20:07 ` Tejun Heo
2013-08-14 20:07 ` Tejun Heo
2013-08-14 20:22 ` [PATCH v8] " Chris Metcalf
2013-08-14 20:22 ` Chris Metcalf
2013-08-14 20:44 ` Andrew Morton
2013-08-14 20:44 ` Andrew Morton
2013-08-14 20:50 ` Tejun Heo
2013-08-14 20:50 ` Tejun Heo
2013-08-14 21:03 ` Andrew Morton
2013-08-14 21:03 ` Andrew Morton
2013-08-14 21:07 ` Andrew Morton
2013-08-14 21:07 ` Andrew Morton
2013-08-14 21:12 ` Andrew Morton
2013-08-14 21:12 ` Andrew Morton
2013-08-14 21:23 ` Chris Metcalf
2013-08-14 21:23 ` Chris Metcalf
2013-08-13 23:44 ` [PATCH v7 2/2] " Chris Metcalf
2013-08-13 23:44 ` Chris Metcalf
2013-08-13 23:51 ` Tejun Heo
2013-08-13 23:51 ` Tejun Heo
2013-08-13 21:07 ` [PATCH v4 " Tejun Heo
2013-08-13 21:07 ` Tejun Heo
2013-08-13 21:16 ` Andrew Morton
2013-08-13 21:16 ` Andrew Morton
2013-08-13 22:07 ` Tejun Heo
2013-08-13 22:07 ` Tejun Heo
2013-08-13 22:18 ` Andrew Morton
2013-08-13 22:18 ` Andrew Morton
2013-08-13 22:33 ` Tejun Heo
2013-08-13 22:33 ` Tejun Heo
2013-08-13 22:47 ` Andrew Morton
2013-08-13 22:47 ` Andrew Morton
2013-08-13 23:03 ` Tejun Heo
2013-08-13 23:03 ` 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=520514FB.8060502@tilera.com \
--to=cmetcalf@tilera.com \
--cc=cody@linux.vnet.ibm.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=tglx@linutronix.de \
--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.