Re: [RFC workqueue/driver-core PATCH 2/5] async: Add support for queueing on specific NUMA node

From: Alexander Duyck
Date: Thu Sep 27 2018 - 16:04:14 EST


On 9/27/2018 12:48 PM, Dan Williams wrote:
On Thu, Sep 27, 2018 at 8:24 AM Alexander Duyck
<alexander.h.duyck@xxxxxxxxxxxxxxx> wrote:
[..]
- * Returns an async_cookie_t that may be used for checkpointing later.
- * @domain may be used in the async_synchronize_*_domain() functions to
- * wait within a certain synchronization domain rather than globally. A
- * synchronization domain is specified via @domain. Note: This function
- * may be called from atomic or non-atomic contexts.
+ * Device specific version of async_schedule_near_domain that provides some
+ * NUMA awareness based on the device node.
+ */
+async_cookie_t async_schedule_dev_domain(async_func_t func, struct device *dev,
+ struct async_domain *domain)
+{
+ return async_schedule_near_domain(func, dev, dev_to_node(dev), domain);
+}
+EXPORT_SYMBOL_GPL(async_schedule_dev_domain);

This seems unnecessary and restrictive. Callers may want to pass
something other than dev as the parameter to the async function, and
dev_to_node() is not on onerous burden to place on callers.


That is what async_schedule_near_domain is for, they can call that. The
"dev" versions of the calls as just supposed to be helpers since one of
the most common parameters to the async_schedule calls is a device, so I
thought I would just put together a function that takes care of all this
for us so I could drop an argument and avoid having to use dev_to_node
everywhere.

Yeah, makes sense, I guess I was reacting to the fact that this
expands the number of exports unnecessarily. The other async routines
are exported because they hide internal implementation details of the
async implementation. The async_schedule_dev* helpers can just be
static inline wrappers.

I can do them as inline wrappers for the next patch set. Shouldn't be too much of an issue.

Thanks.

- Alex