From: Guenter Roeck <linux@roeck-us.net>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: linux-usb@vger.kernel.org
Subject: Re: [PATCH v3 1/9] usb: typec: Copy everything from struct typec_capability during registration
Date: Tue, 8 Oct 2019 13:44:28 -0700 [thread overview]
Message-ID: <20191008204428.GA16138@roeck-us.net> (raw)
In-Reply-To: <20191008111350.68581-2-heikki.krogerus@linux.intel.com>
On Tue, Oct 08, 2019 at 02:13:42PM +0300, Heikki Krogerus wrote:
> Copying everything from struct typec_capability to struct
> typec_port during port registration. This will make sure
> that under no circumstances the driver can change the values
> in the struct typec_capability that the port uses.
>
> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/usb/typec/class.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
> index 94a3eda62add..0bbf10c8ad58 100644
> --- a/drivers/usb/typec/class.c
> +++ b/drivers/usb/typec/class.c
> @@ -52,6 +52,7 @@ struct typec_port {
> struct typec_switch *sw;
> struct typec_mux *mux;
>
> + const struct typec_capability *orig_cap; /* to be removed */
> const struct typec_capability *cap;
> };
>
> @@ -968,7 +969,7 @@ preferred_role_store(struct device *dev, struct device_attribute *attr,
> return -EINVAL;
> }
>
> - ret = port->cap->try_role(port->cap, role);
> + ret = port->cap->try_role(port->orig_cap, role);
> if (ret)
> return ret;
>
> @@ -1014,7 +1015,7 @@ static ssize_t data_role_store(struct device *dev,
> goto unlock_and_ret;
> }
>
> - ret = port->cap->dr_set(port->cap, ret);
> + ret = port->cap->dr_set(port->orig_cap, ret);
> if (ret)
> goto unlock_and_ret;
>
> @@ -1071,7 +1072,7 @@ static ssize_t power_role_store(struct device *dev,
> goto unlock_and_ret;
> }
>
> - ret = port->cap->pr_set(port->cap, ret);
> + ret = port->cap->pr_set(port->orig_cap, ret);
> if (ret)
> goto unlock_and_ret;
>
> @@ -1119,7 +1120,7 @@ port_type_store(struct device *dev, struct device_attribute *attr,
> goto unlock_and_ret;
> }
>
> - ret = port->cap->port_type_set(port->cap, type);
> + ret = port->cap->port_type_set(port->orig_cap, type);
> if (ret)
> goto unlock_and_ret;
>
> @@ -1184,7 +1185,7 @@ static ssize_t vconn_source_store(struct device *dev,
> if (ret)
> return ret;
>
> - ret = port->cap->vconn_set(port->cap, (enum typec_role)source);
> + ret = port->cap->vconn_set(port->orig_cap, (enum typec_role)source);
> if (ret)
> return ret;
>
> @@ -1278,6 +1279,7 @@ static void typec_release(struct device *dev)
> ida_destroy(&port->mode_ids);
> typec_switch_put(port->sw);
> typec_mux_put(port->mux);
> + kfree(port->cap);
> kfree(port);
> }
>
> @@ -1579,9 +1581,10 @@ struct typec_port *typec_register_port(struct device *parent,
> mutex_init(&port->port_type_lock);
>
> port->id = id;
> - port->cap = cap;
> + port->orig_cap = cap;
> port->port_type = cap->type;
> port->prefer_role = cap->prefer_role;
> + port->cap = kmemdup(cap, sizeof(*cap), GFP_KERNEL);
I just realized ... unfortunately kmemdup() can return NULL.
>
> device_initialize(&port->dev);
> port->dev.class = typec_class;
> --
> 2.23.0
>
next prev parent reply other threads:[~2019-10-08 20:44 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-08 11:13 [PATCH v3 0/9] usb: typec: Small API improvement Heikki Krogerus
2019-10-08 11:13 ` [PATCH v3 1/9] usb: typec: Copy everything from struct typec_capability during registration Heikki Krogerus
2019-10-08 20:44 ` Guenter Roeck [this message]
2019-10-09 7:58 ` Heikki Krogerus
2019-10-08 11:13 ` [PATCH v3 2/9] usb: typec: Introduce typec_get_drvdata() Heikki Krogerus
2019-10-08 21:36 ` Guenter Roeck
2019-10-08 11:13 ` [PATCH v3 3/9] usb: typec: Separate the operations vector Heikki Krogerus
2019-10-08 21:38 ` Guenter Roeck
2019-10-08 11:13 ` [PATCH v3 4/9] usb: typec: tcpm: Start using struct typec_operations Heikki Krogerus
2019-10-08 11:13 ` [PATCH v3 5/9] usb: typec: tps6598x: " Heikki Krogerus
2019-10-08 11:13 ` [PATCH v3 6/9] usb: typec: ucsi: " Heikki Krogerus
2019-10-08 11:13 ` [PATCH v3 7/9] usb: typec: hd3ss3220: " Heikki Krogerus
2019-10-08 21:39 ` Guenter Roeck
2019-10-08 11:13 ` [PATCH v3 8/9] usb: typec: Remove the callback members from struct typec_capability Heikki Krogerus
2019-10-08 21:40 ` Guenter Roeck
2019-10-08 11:13 ` [PATCH v3 9/9] usb: typec: Remove unused " Heikki Krogerus
2019-10-08 21:40 ` Guenter Roeck
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=20191008204428.GA16138@roeck-us.net \
--to=linux@roeck-us.net \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-usb@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.