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]
Message-ID: <52E8D13A.1060100@intel.com>
Date:	Wed, 29 Jan 2014 18:00:26 +0800
From:	"xinhui.pan" <xinhuix.pan@...el.com>
To:	Mika Westerberg <mika.westerberg@...ux.intel.com>,
	Wolfram Sang <wsa@...-dreams.de>
CC:	linux-kernel@...r.kernel.org, linux-i2c@...r.kernel.org,
	andriy.shevchenko@...ux.intel.com, yanmin_zhang@...ux.intel.com,
	bo.he@...el.com
Subject: Re: [PATCH] i2c-designware-pcidrv: fix the incorrect return of idle
 callback



于 2014年01月29日 16:35, Mika Westerberg 写道:
> On Tue, Jan 28, 2014 at 07:30:35PM +0100, Wolfram Sang wrote:
>> On Tue, Jan 28, 2014 at 01:48:28PM +0800, xinhui.pan wrote:
>>> From: "xinhui.pan" <xinhuix.pan@...el.com>
>>>
>>> i2c_dw_pci_runtime_idle should return -EBUSY rather than zero if it do success.
>>
>> I don't understand...
>>
>>> Otherwise rpm_idle will call pm_suspend again and that may cause pm_schedule_suspend delay invalidate.
>>> 	
>>> Signed-off-by: bo.he <bo.he@...el.com>
>>> Signed-off-by: xinhui.pan <xinhuix.pan@...el.com>
>>> ---
>>>  drivers/i2c/busses/i2c-designware-pcidrv.c |    4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
>>> index f6ed06c..96e81f6 100644
>>> --- a/drivers/i2c/busses/i2c-designware-pcidrv.c
>>> +++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
>>> @@ -190,8 +190,8 @@ static int i2c_dw_pci_runtime_idle(struct device *dev)
>>>  	int err = pm_schedule_suspend(dev, 500);
>>>  	dev_dbg(dev, "runtime_idle called\n");
>>>  
>>> -	if (err != 0)
>>> -		return 0;
>>> +	if (err)
>>> +		return err;
>>>  	return -EBUSY;
>>
>> ... it does return EBUSY when pm_schedule_suspend() succeeds? It only
>> returns 0 if it does not succeed (for which I don't know if this is an
>> apropriate behaviour). Mika?
> 
> If I understand correctly, pm_schedule_suspend(dev, 500) is there because
> we want to runtime suspend in 500 ms. It then returns -EBUSY to prevent PM
> runtime from carrying on suspend on it's own. However, I have no idea where
> this magical 500 ms requirement comes from.
> 
> If we fail to schedule suspend we let the PM core to do whatever it thinks
> suitable (in this case I suppose it suspends the device).
> 

Hi ,Mika
  If the callback returns 0,it means pm_schedule_suspend fails,
also means rpm_check_suspend_allowed(pm_schedule_suspend calls it) 
returns nonzero value.As a result,rpm_suspend will be called by rpm_idle.
  However in rpm_idle, rpm_check_suspend_allowed is called at first,too.
and the return value is treated as it is.But rpm_idle just returns 
without doing anything(rpm_suspend is not called). 
  in both case above,why goes in different ways? I am confused.
 
> I think the whole idle dance could be replaced with a use of runtime PM
> autosuspend, just like we do in the platform version of the driver.
> 
> Xinghui,
> 
> Is this a real problem that you are trying to solve?
> 

To be honest,we got many panic when testing.
But is not caused by this driver I think.
while checking problems,we found these confusing codes by accident.

--
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