All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Dietrich <marvin24@gmx.de>
To: Evan Hauck <echauck@mtu.edu>
Cc: gregkh@linuxfoundation.org, jak@jak-linux.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] staging: nvec: Make nvec_write_sync return result by parameter
Date: Mon, 16 Feb 2015 10:48:24 +0100	[thread overview]
Message-ID: <2719359.dKxWO2nliZ@fb07-iapwap2> (raw)
In-Reply-To: <1423880928-1657-1-git-send-email-echauck@mtu.edu>

[-- Attachment #1: Type: text/plain, Size: 4916 bytes --]

Hi Even,

Am Freitag, 13. Februar 2015, 21:28:48 schrieb Evan Hauck:
> As outlined in the TODO file, nvec_write_sync was modified to return an
> error code instead of NULL on failure, and return the nvec_msg as a
> parameter.
> 
> Signed-off-by: Evan Hauck <echauck@mtu.edu>

thanks for looking into this issue! I tested this and saw no issue. You 
confused msg and result variables below. Can you re-send with this problem 
fixed?

Marc

> ---
>  drivers/staging/nvec/TODO   |  2 --
>  drivers/staging/nvec/nvec.c | 37 +++++++++++++++++++++----------------
>  drivers/staging/nvec/nvec.h |  5 +++--
>  3 files changed, 24 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/staging/nvec/TODO b/drivers/staging/nvec/TODO
> index e5ae42a..e4d85d9 100644
> --- a/drivers/staging/nvec/TODO
> +++ b/drivers/staging/nvec/TODO
> @@ -3,6 +3,4 @@ ToDo list (incomplete, unordered)
>  	- move half of the nvec init stuff to i2c-tegra.c
>  	- move event handling to nvec_events
>  	- finish suspend/resume support
> -	- modifiy the sync_write method to return the received
> -	  message in a variable (and return the error code).
>  	- add support for more device implementations
> diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
> index 120b70d..47ef013 100644
> --- a/drivers/staging/nvec/nvec.c
> +++ b/drivers/staging/nvec/nvec.c
> @@ -288,46 +288,53 @@ EXPORT_SYMBOL(nvec_write_async);
>   * @nvec: An &struct nvec_chip
>   * @data: The data to write
>   * @size: The size of @data
> + * @result: The resulting message

s/result/msg/ (or vise versa)

>   *
>   * This is similar to nvec_write_async(), but waits for the
>   * request to be answered before returning. This function
>   * uses a mutex and can thus not be called from e.g.
>   * interrupt handlers.
>   *
> - * Returns: A pointer to the response message on success,
> + * Returns in *result: A pointer to the response message on success,
>   * %NULL on failure. Free with nvec_msg_free() once no longer
>   * used.
> + *
> + * Returns: 0 on success, a negative error code on failure. If a failure
> + * occurred, the nvec driver may print an error.
>   */
> -struct nvec_msg *nvec_write_sync(struct nvec_chip *nvec,
> -		const unsigned char *data, short size)
> +int nvec_write_sync(struct nvec_chip *nvec,
> +		const unsigned char *data, short size,
> +		struct nvec_msg **msg)
>  {
> -	struct nvec_msg *msg;
> +	int err;
> 
>  	mutex_lock(&nvec->sync_write_mutex);
> 
>  	nvec->sync_write_pending = (data[1] << 8) + data[0];
> 
> -	if (nvec_write_async(nvec, data, size) < 0) {
> +	err = nvec_write_async(nvec, data, size);
> +	if (err < 0) {
>  		mutex_unlock(&nvec->sync_write_mutex);
> -		return NULL;
> +		return err;
>  	}
> 
>  	dev_dbg(nvec->dev, "nvec_sync_write: 0x%04x\n",
>  					nvec->sync_write_pending);
> -	if (!(wait_for_completion_timeout(&nvec->sync_write,
> -				msecs_to_jiffies(2000)))) {
> +	err = wait_for_completion_timeout(&nvec->sync_write,
> +			msecs_to_jiffies(2000));
> +	if (!err) {
>  		dev_warn(nvec->dev, "timeout waiting for sync write to complete\n");
>  		mutex_unlock(&nvec->sync_write_mutex);
> -		return NULL;
> +		return err;
>  	}
> 
>  	dev_dbg(nvec->dev, "nvec_sync_write: pong!\n");
> 
> -	msg = nvec->last_sync_msg;
> +	*msg = nvec->last_sync_msg;
> 
>  	mutex_unlock(&nvec->sync_write_mutex);
> 
> -	return msg;
> +	return 0;
>  }
>  EXPORT_SYMBOL(nvec_write_sync);
> 
> @@ -879,9 +886,7 @@ static int tegra_nvec_probe(struct platform_device
> *pdev) pm_power_off = nvec_power_off;
> 
>  	/* Get Firmware Version */
> -	msg = nvec_write_sync(nvec, get_firmware_version, 2);
> -
> -	if (msg) {
> +	if (!nvec_write_sync(nvec, get_firmware_version, 2, &msg)) {
>  		dev_warn(nvec->dev, "ec firmware version %02x.%02x.%02x / %02x\n",
>  			msg->data[4], msg->data[5], msg->data[6], msg->data[7]);
> 
> @@ -935,8 +940,8 @@ static int nvec_suspend(struct device *dev)
>  	/* keep these sync or you'll break suspend */
>  	nvec_toggle_global_events(nvec, false);
> 
> -	msg = nvec_write_sync(nvec, ap_suspend, sizeof(ap_suspend));
> -	nvec_msg_free(nvec, msg);
> +	if (!nvec_write_sync(nvec, ap_suspend, sizeof(ap_suspend), &msg))
> +		nvec_msg_free(nvec, msg);
> 
>  	nvec_disable_i2c_slave(nvec);
> 
> diff --git a/drivers/staging/nvec/nvec.h b/drivers/staging/nvec/nvec.h
> index e271375..00d099a 100644
> --- a/drivers/staging/nvec/nvec.h
> +++ b/drivers/staging/nvec/nvec.h
> @@ -168,8 +168,9 @@ struct nvec_chip {
>  extern int nvec_write_async(struct nvec_chip *nvec, const unsigned char
> *data, short size);
> 
> -extern struct nvec_msg *nvec_write_sync(struct nvec_chip *nvec,
> -					const unsigned char *data, short size);
> +extern int nvec_write_sync(struct nvec_chip *nvec,
> +			   const unsigned char *data, short size,
> +			   struct nvec_msg **result);

result or msg?

>  extern int nvec_register_notifier(struct nvec_chip *nvec,
>  				  struct notifier_block *nb,

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

      reply	other threads:[~2015-02-16  9:48 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-14  2:28 [PATCH] staging: nvec: Make nvec_write_sync return result by parameter Evan Hauck
2015-02-16  9:48 ` Marc Dietrich [this message]

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=2719359.dKxWO2nliZ@fb07-iapwap2 \
    --to=marvin24@gmx.de \
    --cc=echauck@mtu.edu \
    --cc=gregkh@linuxfoundation.org \
    --cc=jak@jak-linux.org \
    --cc=linux-kernel@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.