Merge branch 'akpm' (patches from Andrew)
Merge misc updates from Andrew Morton: - a few random little subsystems - almost all of the MM patches which are staged ahead of linux-next material. I'll trickle to post-linux-next work in as the dependents get merged up. Subsystems affected by this patch series: kthread, kbuild, ide, ntfs, ocfs2, arch, and mm (slab-generic, slab, slub, dax, debug, pagecache, gup, swap, shmem, memcg, pagemap, mremap, hmm, vmalloc, documentation, kasan, pagealloc, memory-failure, hugetlb, vmscan, z3fold, compaction, oom-kill, migration, cma, page-poison, userfaultfd, zswap, zsmalloc, uaccess, zram, and cleanups). * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (200 commits) mm: cleanup kstrto*() usage mm: fix fall-through warnings for Clang mm: slub: convert sysfs sprintf family to sysfs_emit/sysfs_emit_at mm: shmem: convert shmem_enabled_show to use sysfs_emit_at mm:backing-dev: use sysfs_emit in macro defining functions mm: huge_memory: convert remaining use of sprintf to sysfs_emit and neatening mm: use sysfs_emit for struct kobject * uses mm: fix kernel-doc markups zram: break the strict dependency from lzo zram: add stat to gather incompressible pages since zram set up zram: support page writeback mm/process_vm_access: remove redundant initialization of iov_r mm/zsmalloc.c: rework the list_add code in insert_zspage() mm/zswap: move to use crypto_acomp API for hardware acceleration mm/zswap: fix passing zero to 'PTR_ERR' warning mm/zswap: make struct kernel_param_ops definitions const userfaultfd/selftests: hint the test runner on required privilege userfaultfd/selftests: fix retval check for userfaultfd_open() userfaultfd/selftests: always dump something in modes userfaultfd: selftests: make __{s,u}64 format specifiers portable ...
This commit is contained in:
@@ -704,8 +704,15 @@ repeat:
|
||||
raw_spin_unlock_irq(&worker->lock);
|
||||
|
||||
if (work) {
|
||||
kthread_work_func_t func = work->func;
|
||||
__set_current_state(TASK_RUNNING);
|
||||
trace_sched_kthread_work_execute_start(work);
|
||||
work->func(work);
|
||||
/*
|
||||
* Avoid dereferencing work after this point. The trace
|
||||
* event only cares about the address.
|
||||
*/
|
||||
trace_sched_kthread_work_execute_end(work, func);
|
||||
} else if (!freezing(current))
|
||||
schedule();
|
||||
|
||||
@@ -786,7 +793,25 @@ EXPORT_SYMBOL(kthread_create_worker);
|
||||
* A good practice is to add the cpu number also into the worker name.
|
||||
* For example, use kthread_create_worker_on_cpu(cpu, "helper/%d", cpu).
|
||||
*
|
||||
* Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM)
|
||||
* CPU hotplug:
|
||||
* The kthread worker API is simple and generic. It just provides a way
|
||||
* to create, use, and destroy workers.
|
||||
*
|
||||
* It is up to the API user how to handle CPU hotplug. They have to decide
|
||||
* how to handle pending work items, prevent queuing new ones, and
|
||||
* restore the functionality when the CPU goes off and on. There are a
|
||||
* few catches:
|
||||
*
|
||||
* - CPU affinity gets lost when it is scheduled on an offline CPU.
|
||||
*
|
||||
* - The worker might not exist when the CPU was off when the user
|
||||
* created the workers.
|
||||
*
|
||||
* Good practice is to implement two CPU hotplug callbacks and to
|
||||
* destroy/create the worker when the CPU goes down/up.
|
||||
*
|
||||
* Return:
|
||||
* The pointer to the allocated worker on success, ERR_PTR(-ENOMEM)
|
||||
* when the needed structures could not get allocated, and ERR_PTR(-EINTR)
|
||||
* when the worker was SIGKILLed.
|
||||
*/
|
||||
@@ -834,6 +859,8 @@ static void kthread_insert_work(struct kthread_worker *worker,
|
||||
{
|
||||
kthread_insert_work_sanity_check(worker, work);
|
||||
|
||||
trace_sched_kthread_work_queue_work(worker, work);
|
||||
|
||||
list_add_tail(&work->node, pos);
|
||||
work->worker = worker;
|
||||
if (!worker->current_work && likely(worker->task))
|
||||
|
||||
Reference in New Issue
Block a user