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:   Sun, 3 Dec 2017 21:52:48 -0600
From:   Pierre-Louis Bossart <pierre-louis.bossart@...ux.intel.com>
To:     Vinod Koul <vinod.koul@...el.com>
Cc:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        LKML <linux-kernel@...r.kernel.org>,
        ALSA <alsa-devel@...a-project.org>, Mark <broonie@...nel.org>,
        Takashi <tiwai@...e.de>, patches.audio@...el.com,
        alan@...ux.intel.com,
        Charles Keepax <ckeepax@...nsource.cirrus.com>,
        Sagar Dharia <sdharia@...eaurora.org>,
        srinivas.kandagatla@...aro.org, plai@...eaurora.org,
        Sudheer Papothi <spapothi@...eaurora.org>
Subject: Re: [alsa-devel] [PATCH v4 09/15] soundwire: Add slave status
 handling

On 12/3/17 9:21 PM, Vinod Koul wrote:
> On Sun, Dec 03, 2017 at 09:11:39PM -0600, Pierre-Louis Bossart wrote:
>> On 12/3/17 11:11 AM, Vinod Koul wrote:
>>> On Fri, Dec 01, 2017 at 05:52:03PM -0600, Pierre-Louis Bossart wrote:
>>>
>>>>> +		status = sdw_read(slave, SDW_DP0_INT);
>>>>> +		if (status < 0) {
>>>>> +			dev_err(slave->bus->dev,
>>>>> +				"SDW_DP0_INT read failed:%d", status);
>>>>> +			return status;
>>>>> +		}
>>>>> +
>>>>> +		count++;
>>>>> +
>>>>> +		/* we can get alerts while processing so keep retrying */
>>>>
>>>> This is not incorrect, but this goes beyond what the spec requires.
>>>>
>>>> The additional read is to make sure some interrupts are not lost due to a
>>>> known race condition. It would be enough to mask the status read the second
>>>> time to only check if the interrupts sources which were cleared are still
>>>> signaling something.
>>>>
>>>> With the code as it is, you may catch *new* interrupt sources, which could
>>>> impact the arbitration/priority/policy in handling interrupts. It's not
>>>> necessarily bad, but you'd need to document whether you want to deal with
>>>> the race condition described in the MIPI spec or try to be smarter.
>>>
>>> This was based on your last comment, lets discuss more offline on this to
>>> see what else is required here.
>>
>> I am fine if you leave the code as is for now, it's not bad but can be
>> optimized.
> 
> Not bad is not good here :)
> 
> Okay I still havent grabbed my coffee, so help me out here. I am not sure I
> understand here, can you point me to the part of spec handling you were
> referring and what should be *ideally* done

You first read the status, then clear the interrupts then re-read the 
status. I'd be good enough in the second read to mask with the settings 
of the first read. This is intended to detect alert sources that fired 
between the last successful read and the write to clear interrupts (see 
Figure 92 in the 1.1 spec)

e.g.

do {
status1= sdw_read()
deal with interrupts
status2 = sdw_read()
status2 &= status1; /* filter initial sources */
		

/* we can get alerts while processing so keep retrying */
} while (status2 != 0 && count < SDW_READ_INTR_CLEAR_RETRY);


Powered by blists - more mailing lists