From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752281AbcFWMip (ORCPT ); Thu, 23 Jun 2016 08:38:45 -0400 Received: from bear.ext.ti.com ([198.47.19.11]:59543 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751040AbcFWMim (ORCPT ); Thu, 23 Jun 2016 08:38:42 -0400 Subject: Re: [PATCH 1/1] thermal: core: call thermal_zone_device_update() after mode update To: "Rafael J. Wysocki" , Eduardo Valentin References: <1466563538.2471.10.camel@intel.com> <1466571990-12346-1-git-send-email-edubezval@gmail.com> CC: Rui Zhang , "Rafael J. Wysocki" , Len Brown , ACPI Devel Maling List , "Lee, Chun-Yi" , Darren Hart , Keerthy , Linux Kernel Mailing List , Linux OMAP Mailing List , , "linux-pm@vger.kernel.org" From: Keerthy Message-ID: <576BD826.6030007@ti.com> Date: Thu, 23 Jun 2016 18:07:58 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday 23 June 2016 05:57 PM, Rafael J. Wysocki wrote: > On Wed, Jun 22, 2016 at 7:06 AM, Eduardo Valentin wrote: >> Because several drivers do the following pattern: >> .set_mode() >> ... >> local_data->mode = new_mode; >> thermal_zone_device_update(tz); >> >> makes sense to simply do the thermal_zone_device_update() >> in thermal core, after setting the new mode. >> >> Also, this patch also remove deadlocks on drivers that >> call thermal_zone_device_update() on .set_mode(), >> as .set_mode() is now called always with tz->lock held. > > To me, this part of the patch is way more important than the > optimization mentioned before. > > Apparently, the problem is that drivers deadlock, because the > thermal_zone_device_update() invoked from ->set_mode() is called under > tz->lock. > > So to address that problem you make the core call > thermal_zone_device_update() after ->set_mode() outside of tz->lock > and the drivers don't have to do it any more. > > Is that correct? Rafael, On my set up, mode_store locks tz->lock and eventually ends up calling of_thermal_set_mode before releasing tz->lock which again tries to lock tz->lock and ends up in a deadlock. http://pastebin.ubuntu.com/17687601/ Regards, Keerthy > > Thanks, > Rafael >