Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: coretemp0: workqueue busy: updates stopped



On 24 Jun 2015, at 10:51, Paul Goyette <paul%vps1.whooppee.com@localhost> wrote:

<snip>
> 
> There is a rather "interesting" mutex-dance in sme_check_events() about
> which I need to think:
> 
> 	mutex_enter(wq_mutex)
> 	check for empty wq
> 	mutex_exit(wq_mutex)
> 
> 	mutex_enter(global_sysmon_mutex)
> 	mutex_enter(wq_mutex)
> 	queue up the wq entries
> 	mutex_exit(wq_mutex)
> 	check for low_power condition
> 	mutex_exit(global_sysmon_mutex)
> 
> I'm pretty sure this can be reduced a bit:
> 
> 	mutex_enter(global_sysmon_mutex)
> 	mutex_enter(wq_mutex)
> 	check for empty wq
> 
> 	queue up the wq entries
> 	mutex_exit(wq_mutex)
> 	check for low_poer condition
> 	mutex_exit(global_sysmon_mutex)

It can't, see rev. 1.114:

Add a counter of busy events and stop enqueueing more work if a device is busy.
Protect this counter with a new short time lock "sme_work_mtx" and
keep "sme_mtx" as long time lock.

Removes a deadlock where an active event holds "sme_mtx", the callout
"sme_events_check" blocks on "sme_mtx" and callout processing stops.

--
J. Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig (Germany)



Home | Main Index | Thread Index | Old Index