Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932318AbbBPJsa (ORCPT ); Mon, 16 Feb 2015 04:48:30 -0500 Received: from mout.gmx.net ([212.227.17.21]:61269 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932238AbbBPJs3 (ORCPT ); Mon, 16 Feb 2015 04:48:29 -0500 From: Marc Dietrich To: Evan Hauck 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 Message-ID: <2719359.dKxWO2nliZ@fb07-iapwap2> User-Agent: KMail/4.14.4 (Linux/3.19.0-12.gfc9498b-desktop+; KDE/4.14.4; x86_64; ; ) In-Reply-To: <1423880928-1657-1-git-send-email-echauck@mtu.edu> References: <1423880928-1657-1-git-send-email-echauck@mtu.edu> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2213034.ppN5Xc5XxF"; micalg="pgp-sha256"; protocol="application/pgp-signature" X-Provags-ID: V03:K0:iHBZdIYXWCGua+YUGzo+DgkJ81vjXf0B/Nx0Rk5aB4ccjSSRD6v xJVy+Mo6DAq5aehXQYmZDbq94f0+yauJdW4WNiUMp4m6gDCrmdHLR8umTsLDi8s2eCkzT1w YjazmE+MP3OfCcv8B+oesQTxk/lJE64JmJ/51r4RMl01U/jbzzJAJyTTuqyHPt9kmV7Dh62 xeIJ3fMelMkLq17HTeI3g== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5964 Lines: 174 --nextPart2213034.ppN5Xc5XxF Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="ISO-8859-1" 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 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, --nextPart2213034.ppN5Xc5XxF Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABCAAGBQJU4bzoAAoJEKyeR39HFBtoPxsH/jfUpviV0XekkELnmkhWj1Vx NYz7uMC2x8O/K+GNHJcdVhUV1Z1Sp9h5QQbFKFsbe+jJUzaGoLlu3PxFJmMlysZ8 56+ERwZH481ON+TbLeyRdk3I4qCCdg9qyz74u2bjJ0BWjLRG07F1gtFSJzMLsYLM PuggggZ0PGVz33mAUaZq9HRlfjEUkZjmgz39nGqNAsNGEMco2/z3qRrWUDpe9l+0 FTAXG9ThuKrfwaI4ZCfZ32SXiKxHqQiee7ryxm6oVdrA0c2N5gG2TL9B2X+7V1pi 2QxVgq4CfR3xoj/A+DfzhMJ2LOTJzP7lD5SXMrS4NgT6urtLvHI3Tf9TwQYeAfE= =gPHB -----END PGP SIGNATURE----- --nextPart2213034.ppN5Xc5XxF-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/