mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Tzung-Bi Shih <tzungbi@kernel.org>
To: Radu Vele <raduvele@google.com>
Cc: Benson Leung <bleung@chromium.org>,
	Abhishek Pandit-Subedi <abhishekpandit@chromium.org>,
	Jameson Thies <jthies@google.com>,
	Andrei Kuchynski <akuchynski@chromium.org>,
	chrome-platform@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] platform/chrome: cros_ec_typec: Add lock per-port
Date: Tue, 15 Jul 2025 06:07:54 +0000	[thread overview]
Message-ID: <aHXwOtrFpn-yRFvs@google.com> (raw)
In-Reply-To: <CACKy9TJHtA5K2YqdNdnMuTvOsz4OCkRds4Hbj8aZdK5VXpMgWw@mail.gmail.com>

On Mon, Jul 14, 2025 at 10:32:03AM +0200, Radu Vele wrote:
> On Fri, Jul 11, 2025 at 6:12 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote:
> >
> > On Fri, Jul 11, 2025 at 12:35:02AM +0000, Radu Vele wrote:
> > > Add a lock associated to each port to protect port data against
> > > concurrent access. Concurrency may result from sysfs commands
> > > and ec events.
> >
> > I realized the critical sections are way too large.  What exactly data the
> > lock tries to protect?  Is the race possibility introduced by any previous
> > commits?  Please provide more context.
> 
> With the implementation of the role swap operations from the previous
> commit (and also enter usb mode from another recent commit) we
> introduce the possibility of concurrent access to the cros_ec_typec port
> data from the userspace (e.g. trigger a power role swap from sysfs) vs
> from EC events (e.g. partner triggered a role swap that we accept).
> This is the main reason to propose a per-port lock. This way we ensure
> we protect the state of each port in the cros_ec_typec driver.

To make sure I understand, did you mean the lock tries to prevent from
sending multiple commands to EC at a time?  If yes, does it still need
if the underlying ec_dev is guranteed that [1]?

[1] https://elixir.bootlin.com/linux/v6.15/source/drivers/platform/chrome/cros_ec_proto.c#L661

By taking the following hunk the patch adds as an example:

@@ -54,6 +56,7 @@  static int cros_typec_enter_usb_mode(struct typec_port *tc_port, enum usb_mode m
 		.mode_to_enter = CROS_EC_ALTMODE_USB4
 	};
 
+	guard(mutex)(&port->lock);
 	return cros_ec_cmd(port->typec_data->ec, 0, EC_CMD_TYPEC_CONTROL,
 			  &req, sizeof(req), NULL, 0);

It seems the lock doesn't protect any data but the command transfer.

  reply	other threads:[~2025-07-15  6:07 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-11  0:35 [PATCH v2 1/2] platform/chrome: cros_ec_typec: Add role swap ops Radu Vele
2025-07-11  0:35 ` [PATCH v2 2/2] platform/chrome: cros_ec_typec: Add lock per-port Radu Vele
2025-07-11  4:11   ` Tzung-Bi Shih
2025-07-14  8:32     ` Radu Vele
2025-07-15  6:07       ` Tzung-Bi Shih [this message]
2025-07-16 11:39         ` Radu Vele
2025-07-17  7:46           ` Tzung-Bi Shih
2025-07-11  4:11 ` (subset) [PATCH v2 1/2] platform/chrome: cros_ec_typec: Add role swap ops Tzung-Bi Shih
2025-07-14  9:41   ` Radu Vele

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aHXwOtrFpn-yRFvs@google.com \
    --to=tzungbi@kernel.org \
    --cc=abhishekpandit@chromium.org \
    --cc=akuchynski@chromium.org \
    --cc=bleung@chromium.org \
    --cc=chrome-platform@lists.linux.dev \
    --cc=jthies@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=raduvele@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®