From patchwork Thu Dec 7 16:52:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Wajdeczko X-Patchwork-Id: 10100123 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8715360360 for ; Thu, 7 Dec 2017 17:02:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7493D1FF60 for ; Thu, 7 Dec 2017 17:02:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 696BC281F9; Thu, 7 Dec 2017 17:02:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E9C0B1FF60 for ; Thu, 7 Dec 2017 17:02:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 31E7F89A9A; Thu, 7 Dec 2017 17:02:26 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org X-Greylist: delayed 570 seconds by postgrey-1.35 at gabe; Thu, 07 Dec 2017 17:02:24 UTC Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id E1D146E23A for ; Thu, 7 Dec 2017 17:02:24 +0000 (UTC) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Dec 2017 08:52:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,373,1508828400"; d="scan'208";a="182229823" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga005.jf.intel.com with ESMTP; 07 Dec 2017 08:52:52 -0800 Received: from mwajdecz-MOBL1.ger.corp.intel.com (mwajdecz-mobl1.ger.corp.intel.com [172.28.174.150]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id vB7GqpCv019073; Thu, 7 Dec 2017 16:52:52 GMT From: Michal Wajdeczko To: intel-gfx@lists.freedesktop.org Date: Thu, 7 Dec 2017 16:52:46 +0000 Message-Id: <20171207165246.17944-1-michal.wajdeczko@intel.com> X-Mailer: git-send-email 2.10.1.windows.1 Subject: [Intel-gfx] [PATCH i-g-t v2] lib/igt_sysfs: Let igt_sysfs_read|write return -errno X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP In some cases debugfs or sysfs may return errors that we want to check. Return -errno from helper functions to make asserts easier. v2: don't forget about EOF ret=0 (Chris) small re-write (Michal) Signed-off-by: Michal Wajdeczko Cc: Chris Wilson Cc: Joonas Lahtinen --- lib/igt_sysfs.c | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c index e7c67da..842a136 100644 --- a/lib/igt_sysfs.c +++ b/lib/igt_sysfs.c @@ -54,36 +54,34 @@ static int readN(int fd, char *buf, int len) { - int total = 0; + int ret, total = 0; do { - int ret = read(fd, buf + total, len - total); - if (ret < 0 && (errno == EINTR || errno == EAGAIN)) + ret = read(fd, buf + total, len - total); + if (ret < 0) + ret = -errno; + if (ret == -EINTR || ret == -EAGAIN) continue; - if (ret <= 0) - return total ?: ret; - + break; total += ret; - if (total == len) - return total; - } while (1); + } while (total != len); + return total ?: ret; } static int writeN(int fd, const char *buf, int len) { - int total = 0; + int ret, total = 0; do { - int ret = write(fd, buf + total, len - total); - if (ret < 0 && (errno == EINTR || errno == EAGAIN)) + ret = write(fd, buf + total, len - total); + if (ret < 0) + ret = -errno; + if (ret == -EINTR || ret == -EAGAIN) continue; - if (ret <= 0) - return total ?: ret; - + break; total += ret; - if (total == len) - return total; - } while (1); + } while (total != len); + return total ?: ret; } /** @@ -238,7 +236,7 @@ int igt_sysfs_open_parameters(int device) * This writes @len bytes from @data to the sysfs file. * * Returns: - * The number of bytes written, or -1 on error. + * The number of bytes written, or -errno on error. */ int igt_sysfs_write(int dir, const char *attr, const void *data, int len) { @@ -246,7 +244,7 @@ int igt_sysfs_write(int dir, const char *attr, const void *data, int len) fd = openat(dir, attr, O_WRONLY); if (fd < 0) - return false; + return -errno; len = writeN(fd, data, len); close(fd); @@ -264,7 +262,7 @@ int igt_sysfs_write(int dir, const char *attr, const void *data, int len) * This reads @len bytes from the sysfs file to @data * * Returns: - * The length read, -1 on failure. + * The length read, -errno on failure. */ int igt_sysfs_read(int dir, const char *attr, void *data, int len) { @@ -272,7 +270,7 @@ int igt_sysfs_read(int dir, const char *attr, void *data, int len) fd = openat(dir, attr, O_RDONLY); if (fd < 0) - return false; + return -errno; len = readN(fd, data, len); close(fd); @@ -338,7 +336,7 @@ char *igt_sysfs_get(int dir, const char *attr) rem = len - offset - 1; } - if (ret != -1) + if (ret > 0) offset += ret; buf[offset] = '\0'; while (offset > 0 && buf[offset-1] == '\n')