From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753174AbcH3Nq3 (ORCPT ); Tue, 30 Aug 2016 09:46:29 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:36176 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751861AbcH3Nq2 (ORCPT ); Tue, 30 Aug 2016 09:46:28 -0400 Subject: Re: [PATCHv6 1/3] usb: USB Type-C connector class To: Heikki Krogerus , Oliver Neukum References: <1472474182-43858-1-git-send-email-heikki.krogerus@linux.intel.com> <1472474182-43858-2-git-send-email-heikki.krogerus@linux.intel.com> <1472549521.2623.10.camel@suse.com> <20160830100437.GA1751@kuha.fi.intel.com> Cc: Greg KH , Vincent Palatin , Bin Gao , Felipe Balbi , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org From: Guenter Roeck Message-ID: Date: Tue, 30 Aug 2016 06:46:24 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160830100437.GA1751@kuha.fi.intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Authenticated_sender: linux@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: linux@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: linux@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/30/2016 03:04 AM, Heikki Krogerus wrote: > Hi Oliver, > > On Tue, Aug 30, 2016 at 11:32:01AM +0200, Oliver Neukum wrote: >> On Mon, 2016-08-29 at 15:36 +0300, Heikki Krogerus wrote: >>> +What: /sys/class/typec//current_data_role >>> +Date: June 2016 >>> +Contact: Heikki Krogerus >>> +Description: >>> + The current USB data role the port is operating in. >>> This >>> + attribute can be used for requesting data role >>> swapping on the >>> + port. Swapping is only supported as an asynchronous >>> operation >>> + and requires polling of the attribute in order to know >>> the >>> + result, so successful write operation does not mean >>> successful >>> + swap. >>> + >> >> That is badly formulated. Does it mean that poll() or select() >> can be used or does the value need to be repearedly read? > > Does polling not always mean poll/select? > >> And how would you learn about an error? > > This is what I'm also really worried about. I'm now wondering did I > give up too easily on this to Guenter in hope to move this thing > forward. He said it's problematic to do these calls synchronously for > him. Was it something related to potential conflicting role swaps from > both ends? > > Guenter, can you please elaborate? And how do you plan to report > failures with the swaps? > I thought we had this sorted out. When I said "asynchronous", I did not mean that the sysfs operation would not wait for the operation to complete. I meant that the Type-C state machine operates in a different context than the sysfs/class code. Since the state machine operates in a different context, it may have to execute a callback into the class code at any time, independently of any pending role changes triggered through sysfs. Please have a look into the patch set I submitted for details. Roughly it works as follows. Class code context State machine context User requests role change Class code calls {dr,pr,vconn}_set {dr,pr,vconn}_set code validates request {dr,pr,vconn}_set code sends role change request to state machine State machine gets role change request {dr,pr,vconn}_set code waits for completion State machine sends role change request to link partner Partner reports Accept or Reject State machine changes state as requested State machine reports new role to class code via callbacks State machine informs Class code that request is complete {dr,pr,vconn}_set code gets results and returns to caller Class code reports results to user From user perspective, everything is synchronous. However, the state machine has to be able to run independently and report role and other state changes to the class code while a role change request from the class code is pending. For example, it has to be able to handle incoming role change requests from the link partner, and it has to be able to handle link state changes. All those have to be reported to the class code. This is impossible if the class code holds a lock while a role change triggered from user space is pending, which is why I asked for the locks in the class code to be removed. Maybe my use of the term "asynchronous" was misleading, and I should have said "operates in a different context" instead. My apologies. Thanks, Guenter