lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 21 Sep 2012 10:49:52 -0700
From:	Tejun Heo <tj@...nel.org>
To:	Dinky Verma <dverma249@...il.com>
Cc:	linux-kernel@...r.kernel.org
Subject: Re: Work queue questions

On Fri, Sep 21, 2012 at 06:35:25PM +0100, Dinky Verma wrote:
> I have one question regarding concurrency managed workqueue. In the
> previous kernel versions, I was using
> create_singlethread_workqueue("driver_wq") e.g workqueue name is
> driver_wq. In my device driver with the latest kernel version, I am
> doing the same to have a support in my device driver for previous
> kernel versions and new kernel version, I started using
> alloc_workqueue (in intention to create single threaded workqueue)
> e.g.
> 
> wq = alloc_workqueue("driver_wq", WQ_UNBOUND,1);
> 
> create_singlethread_workqueue (Depricated) and alloc_workqueue creates
> work queue both work on the newer kernel versions.

You can use alloc_ordered_workqueue() instead but do you really need
strict ordering among different work items?  If not, it's likely that
you don't need to create separate workqueues at all.

> I have created 3 single threaded workqueues. when I do ps on linux
> console, I see the workqueue thread with process id. When I am queuing
> the work simultaneously on these worker threads, I found that threads
> named with Kworker/X.Y will process the work from the work queue not
> the one that had been created create_singlethread_workqueue.
> 
> When I schedule the three works at the same time, I saw sometimes one
> Kworker/X.Y thread processes all work items.
> 
> The question is why the main worker thread that I created does not
> process the work that is intended for it why instead kworker will
> process it? I have queued the work using queue_work(wq,
> worker_struct).

The kthread named after the workqueue is the rescuer which kicks in
iff work execution can't make forward progress due to memory pressure.
Normally all work items are served by worker threads in shared worker
pool.  What kind of driver is it?  Does it sit in memory reclaim path?

Thanks.

-- 
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ