1134 lines
48 KiB
Diff
1134 lines
48 KiB
Diff
From patchwork Thu May 9 14:31:33 2019
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Patchwork-Submitter: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
X-Patchwork-Id: 10937231
|
|
Return-Path:
|
|
<linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org>
|
|
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
|
|
[172.30.200.125])
|
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 40C4F1390
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:04 +0000 (UTC)
|
|
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2BBD428A62
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:04 +0000 (UTC)
|
|
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
|
|
id 259A428AE0; Thu, 9 May 2019 14:32:04 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED,
|
|
DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
|
|
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
[198.137.202.133])
|
|
(using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits))
|
|
(No client certificate requested)
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 415AA28B73
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:02 +0000 (UTC)
|
|
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
d=lists.infradead.org; s=bombadil.20170209; h=Sender:
|
|
Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:
|
|
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description:
|
|
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
List-Owner; bh=3uJvYwW6NsoePeXJ/5ZwETYJ0KPDLBZYP0UKnW2FJN4=; b=C5epWZQXitegMi
|
|
If9WNmt+WIU1qZ5/Zf/K4VyHyLndbbGCz0fCiywJ6C2lL05k2rkyKPLD/5JD9WearPWtXUZKjfWel
|
|
4TaT/dbnBmWnFmxZh/HH6Esg+Nm+f0XTmfQX4CTfAa37AkyGpHcpGoR+JHCXe8tJXjKtdGG3S+9Jl
|
|
l7TTzLJHyGUpJ6SOuB1s2T6hTBGi1fiJzUWjFZzONtMSbnu0gOhemwnL5paYqUdrs7KQq6BqZPU8Z
|
|
48BFzV3uTQ/ux271qzmUx1beTRSqKwtlzquZtS9PutYKyvIm9oyEglAsOkBBVUY+9b8B0HWoWkUvv
|
|
w7rWaT6L1ZSjMthb9UtA==;
|
|
Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org)
|
|
by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5T-0005hY-5q; Thu, 09 May 2019 14:31:55 +0000
|
|
Received: from mx2.suse.de ([195.135.220.15] helo=mx1.suse.de)
|
|
by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5P-0005fv-Tq; Thu, 09 May 2019 14:31:53 +0000
|
|
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
|
|
Received: from relay2.suse.de (unknown [195.135.220.254])
|
|
by mx1.suse.de (Postfix) with ESMTP id 9E8A6AC7E;
|
|
Thu, 9 May 2019 14:31:50 +0000 (UTC)
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
To: linux-kernel@vger.kernel.org
|
|
Subject: [PATCH v3 1/4] staging: vchiq_2835_arm: revert "quit using custom
|
|
down_interruptible()"
|
|
Date: Thu, 9 May 2019 16:31:33 +0200
|
|
Message-Id: <20190509143137.31254-2-nsaenzjulienne@suse.de>
|
|
X-Mailer: git-send-email 2.21.0
|
|
In-Reply-To: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
References: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
MIME-Version: 1.0
|
|
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
X-CRM114-CacheID: sfid-20190509_073152_105160_D40F2444
|
|
X-CRM114-Status: GOOD ( 13.03 )
|
|
X-BeenThere: linux-arm-kernel@lists.infradead.org
|
|
X-Mailman-Version: 2.1.21
|
|
Precedence: list
|
|
List-Id: <linux-arm-kernel.lists.infradead.org>
|
|
List-Unsubscribe:
|
|
<http://lists.infradead.org/mailman/options/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=unsubscribe>
|
|
List-Archive: <http://lists.infradead.org/pipermail/linux-arm-kernel/>
|
|
List-Post: <mailto:linux-arm-kernel@lists.infradead.org>
|
|
List-Help: <mailto:linux-arm-kernel-request@lists.infradead.org?subject=help>
|
|
List-Subscribe:
|
|
<http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=subscribe>
|
|
Cc: stefan.wahren@i2se.com, devel@driverdev.osuosl.org,
|
|
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
|
|
Eric Anholt <eric@anholt.net>,
|
|
linux-rpi-kernel@lists.infradead.org, dan.carpenter@oracle.com,
|
|
Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
|
|
linux-arm-kernel@lists.infradead.org
|
|
Content-Type: text/plain; charset="us-ascii"
|
|
Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org>
|
|
Errors-To:
|
|
linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org
|
|
X-Virus-Scanned: ClamAV using ClamSMTP
|
|
|
|
The killable version of down() is meant to be used on situations where
|
|
it should not fail at all costs, but still have the convenience of being
|
|
able to kill it if really necessary. VCHIQ doesn't fit this criteria, as
|
|
it's mainly used as an interface to V4L2 and ALSA devices.
|
|
|
|
Fixes: ff5979ad8636 ("staging: vchiq_2835_arm: quit using custom down_interruptible()")
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|
---
|
|
.../staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
index a9a22917ecdb..49d3b39b1059 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
@@ -514,7 +514,7 @@ create_pagelist(char __user *buf, size_t count, unsigned short type)
|
|
(g_cache_line_size - 1)))) {
|
|
char *fragments;
|
|
|
|
- if (down_killable(&g_free_fragments_sema)) {
|
|
+ if (down_interruptible(&g_free_fragments_sema) != 0) {
|
|
cleanup_pagelistinfo(pagelistinfo);
|
|
return NULL;
|
|
}
|
|
|
|
From patchwork Thu May 9 14:31:34 2019
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Patchwork-Submitter: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
X-Patchwork-Id: 10937237
|
|
Return-Path:
|
|
<linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org>
|
|
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
|
|
[172.30.200.125])
|
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 94E28933
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:36 +0000 (UTC)
|
|
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 80F8B28B78
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:36 +0000 (UTC)
|
|
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
|
|
id 7D0F128B1B; Thu, 9 May 2019 14:32:36 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED,
|
|
DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
|
|
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
[198.137.202.133])
|
|
(using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits))
|
|
(No client certificate requested)
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9B03628BB9
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:35 +0000 (UTC)
|
|
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
d=lists.infradead.org; s=bombadil.20170209; h=Sender:
|
|
Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:
|
|
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description:
|
|
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
List-Owner; bh=WHM2WEnAejOnk0J6GjEHKXrK0nKxgdLNq48dTkgDLgo=; b=i5Mm8gffWR7Rwq
|
|
4+uMDe6lJY5SKE65Kz4KtVkygMKsGS6oguaK3wvgh6OGo77kqnFU+0r6HHBQr3xb/0KJq4yq6IV9y
|
|
auU1WltykbzEJmRd+Tj3oJX6kaz+Tqagk88AQMUCSuyB95Elbvxqr7Q0ro4NGwveXvkM0CY8EkAcR
|
|
IvfNzMbS6tp0ZVcMflUHecbTThrfVr2H65WipivLLqS7FQtyly6cx1EkEyt3TV+53CAT2uY5l5wDb
|
|
BD2hOBPWrdwsgGFk4plnPlYV71/jQEL6zqb7ScYMQ8PXEC+SIifPvonzmTaGsXAss7CyNQefMsp6U
|
|
RSJQYwd9gv1L/MOawrgg==;
|
|
Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org)
|
|
by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk61-0006Sg-ER; Thu, 09 May 2019 14:32:29 +0000
|
|
Received: from mx2.suse.de ([195.135.220.15] helo=mx1.suse.de)
|
|
by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5Q-0005fw-IZ; Thu, 09 May 2019 14:31:54 +0000
|
|
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
|
|
Received: from relay2.suse.de (unknown [195.135.220.254])
|
|
by mx1.suse.de (Postfix) with ESMTP id 4DE02ACB1;
|
|
Thu, 9 May 2019 14:31:51 +0000 (UTC)
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
To: linux-kernel@vger.kernel.org
|
|
Subject: [PATCH v3 2/4] staging: vchiq: revert "switch to
|
|
wait_for_completion_killable"
|
|
Date: Thu, 9 May 2019 16:31:34 +0200
|
|
Message-Id: <20190509143137.31254-3-nsaenzjulienne@suse.de>
|
|
X-Mailer: git-send-email 2.21.0
|
|
In-Reply-To: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
References: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
MIME-Version: 1.0
|
|
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
X-CRM114-CacheID: sfid-20190509_073152_902395_DF67A86F
|
|
X-CRM114-Status: GOOD ( 15.86 )
|
|
X-BeenThere: linux-arm-kernel@lists.infradead.org
|
|
X-Mailman-Version: 2.1.21
|
|
Precedence: list
|
|
List-Id: <linux-arm-kernel.lists.infradead.org>
|
|
List-Unsubscribe:
|
|
<http://lists.infradead.org/mailman/options/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=unsubscribe>
|
|
List-Archive: <http://lists.infradead.org/pipermail/linux-arm-kernel/>
|
|
List-Post: <mailto:linux-arm-kernel@lists.infradead.org>
|
|
List-Help: <mailto:linux-arm-kernel-request@lists.infradead.org?subject=help>
|
|
List-Subscribe:
|
|
<http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=subscribe>
|
|
Cc: stefan.wahren@i2se.com, devel@driverdev.osuosl.org,
|
|
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
|
|
Eric Anholt <eric@anholt.net>,
|
|
linux-rpi-kernel@lists.infradead.org, dan.carpenter@oracle.com,
|
|
Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
|
|
linux-arm-kernel@lists.infradead.org
|
|
Content-Type: text/plain; charset="us-ascii"
|
|
Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org>
|
|
Errors-To:
|
|
linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org
|
|
X-Virus-Scanned: ClamAV using ClamSMTP
|
|
|
|
The killable version of wait_for_completion() is meant to be used on
|
|
situations where it should not fail at all costs, but still have the
|
|
convenience of being able to kill it if really necessary. VCHIQ doesn't
|
|
fit this criteria, as it's mainly used as an interface to V4L2 and ALSA
|
|
devices.
|
|
|
|
Fixes: a772f116702e ("staging: vchiq: switch to wait_for_completion_killable")
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
---
|
|
.../interface/vchiq_arm/vchiq_arm.c | 21 ++++++++++---------
|
|
.../interface/vchiq_arm/vchiq_core.c | 21 ++++++++++---------
|
|
.../interface/vchiq_arm/vchiq_util.c | 6 +++---
|
|
3 files changed, 25 insertions(+), 23 deletions(-)
|
|
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
index ab7d6a0ce94c..62d8f599e765 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
@@ -532,7 +532,8 @@ add_completion(VCHIQ_INSTANCE_T instance, VCHIQ_REASON_T reason,
|
|
vchiq_log_trace(vchiq_arm_log_level,
|
|
"%s - completion queue full", __func__);
|
|
DEBUG_COUNT(COMPLETION_QUEUE_FULL_COUNT);
|
|
- if (wait_for_completion_killable(&instance->remove_event)) {
|
|
+ if (wait_for_completion_interruptible(
|
|
+ &instance->remove_event)) {
|
|
vchiq_log_info(vchiq_arm_log_level,
|
|
"service_callback interrupted");
|
|
return VCHIQ_RETRY;
|
|
@@ -643,7 +644,7 @@ service_callback(VCHIQ_REASON_T reason, struct vchiq_header *header,
|
|
}
|
|
|
|
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&user_service->remove_event)
|
|
!= 0) {
|
|
vchiq_log_info(vchiq_arm_log_level,
|
|
@@ -978,7 +979,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
has been closed until the client library calls the
|
|
CLOSE_DELIVERED ioctl, signalling close_event. */
|
|
if (user_service->close_pending &&
|
|
- wait_for_completion_killable(
|
|
+ wait_for_completion_interruptible(
|
|
&user_service->close_event))
|
|
status = VCHIQ_RETRY;
|
|
break;
|
|
@@ -1154,7 +1155,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
|
|
DEBUG_TRACE(AWAIT_COMPLETION_LINE);
|
|
mutex_unlock(&instance->completion_mutex);
|
|
- rc = wait_for_completion_killable(
|
|
+ rc = wait_for_completion_interruptible(
|
|
&instance->insert_event);
|
|
mutex_lock(&instance->completion_mutex);
|
|
if (rc != 0) {
|
|
@@ -1324,7 +1325,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
do {
|
|
spin_unlock(&msg_queue_spinlock);
|
|
DEBUG_TRACE(DEQUEUE_MESSAGE_LINE);
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&user_service->insert_event)) {
|
|
vchiq_log_info(vchiq_arm_log_level,
|
|
"DEQUEUE_MESSAGE interrupted");
|
|
@@ -2328,7 +2329,7 @@ vchiq_keepalive_thread_func(void *v)
|
|
while (1) {
|
|
long rc = 0, uc = 0;
|
|
|
|
- if (wait_for_completion_killable(&arm_state->ka_evt)
|
|
+ if (wait_for_completion_interruptible(&arm_state->ka_evt)
|
|
!= 0) {
|
|
vchiq_log_error(vchiq_susp_log_level,
|
|
"%s interrupted", __func__);
|
|
@@ -2579,7 +2580,7 @@ block_resume(struct vchiq_arm_state *arm_state)
|
|
write_unlock_bh(&arm_state->susp_res_lock);
|
|
vchiq_log_info(vchiq_susp_log_level, "%s wait for previously "
|
|
"blocked clients", __func__);
|
|
- if (wait_for_completion_killable_timeout(
|
|
+ if (wait_for_completion_interruptible_timeout(
|
|
&arm_state->blocked_blocker, timeout_val)
|
|
<= 0) {
|
|
vchiq_log_error(vchiq_susp_log_level, "%s wait for "
|
|
@@ -2605,7 +2606,7 @@ block_resume(struct vchiq_arm_state *arm_state)
|
|
write_unlock_bh(&arm_state->susp_res_lock);
|
|
vchiq_log_info(vchiq_susp_log_level, "%s wait for resume",
|
|
__func__);
|
|
- if (wait_for_completion_killable_timeout(
|
|
+ if (wait_for_completion_interruptible_timeout(
|
|
&arm_state->vc_resume_complete, timeout_val)
|
|
<= 0) {
|
|
vchiq_log_error(vchiq_susp_log_level, "%s wait for "
|
|
@@ -2812,7 +2813,7 @@ vchiq_arm_force_suspend(struct vchiq_state *state)
|
|
do {
|
|
write_unlock_bh(&arm_state->susp_res_lock);
|
|
|
|
- rc = wait_for_completion_killable_timeout(
|
|
+ rc = wait_for_completion_interruptible_timeout(
|
|
&arm_state->vc_suspend_complete,
|
|
msecs_to_jiffies(FORCE_SUSPEND_TIMEOUT_MS));
|
|
|
|
@@ -2908,7 +2909,7 @@ vchiq_arm_allow_resume(struct vchiq_state *state)
|
|
write_unlock_bh(&arm_state->susp_res_lock);
|
|
|
|
if (resume) {
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&arm_state->vc_resume_complete) < 0) {
|
|
vchiq_log_error(vchiq_susp_log_level,
|
|
"%s interrupted", __func__);
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
index 0c387b6473a5..c65cf1e6f910 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
@@ -560,7 +560,7 @@ reserve_space(struct vchiq_state *state, size_t space, int is_blocking)
|
|
remote_event_signal(&state->remote->trigger);
|
|
|
|
if (!is_blocking ||
|
|
- (wait_for_completion_killable(
|
|
+ (wait_for_completion_interruptible(
|
|
&state->slot_available_event)))
|
|
return NULL; /* No space available */
|
|
}
|
|
@@ -830,7 +830,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
spin_unlock("a_spinlock);
|
|
mutex_unlock(&state->slot_mutex);
|
|
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&state->data_quota_event))
|
|
return VCHIQ_RETRY;
|
|
|
|
@@ -861,7 +861,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
service_quota->slot_use_count);
|
|
VCHIQ_SERVICE_STATS_INC(service, quota_stalls);
|
|
mutex_unlock(&state->slot_mutex);
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&service_quota->quota_event))
|
|
return VCHIQ_RETRY;
|
|
if (service->closing)
|
|
@@ -1710,7 +1710,8 @@ parse_rx_slots(struct vchiq_state *state)
|
|
&service->bulk_rx : &service->bulk_tx;
|
|
|
|
DEBUG_TRACE(PARSE_LINE);
|
|
- if (mutex_lock_killable(&service->bulk_mutex)) {
|
|
+ if (mutex_lock_killable(
|
|
+ &service->bulk_mutex) != 0) {
|
|
DEBUG_TRACE(PARSE_LINE);
|
|
goto bail_not_ready;
|
|
}
|
|
@@ -2428,7 +2429,7 @@ vchiq_open_service_internal(struct vchiq_service *service, int client_id)
|
|
QMFLAGS_IS_BLOCKING);
|
|
if (status == VCHIQ_SUCCESS) {
|
|
/* Wait for the ACK/NAK */
|
|
- if (wait_for_completion_killable(&service->remove_event)) {
|
|
+ if (wait_for_completion_interruptible(&service->remove_event)) {
|
|
status = VCHIQ_RETRY;
|
|
vchiq_release_service_internal(service);
|
|
} else if ((service->srvstate != VCHIQ_SRVSTATE_OPEN) &&
|
|
@@ -2795,7 +2796,7 @@ vchiq_connect_internal(struct vchiq_state *state, VCHIQ_INSTANCE_T instance)
|
|
}
|
|
|
|
if (state->conn_state == VCHIQ_CONNSTATE_CONNECTING) {
|
|
- if (wait_for_completion_killable(&state->connect))
|
|
+ if (wait_for_completion_interruptible(&state->connect))
|
|
return VCHIQ_RETRY;
|
|
|
|
vchiq_set_conn_state(state, VCHIQ_CONNSTATE_CONNECTED);
|
|
@@ -2894,7 +2895,7 @@ vchiq_close_service(VCHIQ_SERVICE_HANDLE_T handle)
|
|
}
|
|
|
|
while (1) {
|
|
- if (wait_for_completion_killable(&service->remove_event)) {
|
|
+ if (wait_for_completion_interruptible(&service->remove_event)) {
|
|
status = VCHIQ_RETRY;
|
|
break;
|
|
}
|
|
@@ -2955,7 +2956,7 @@ vchiq_remove_service(VCHIQ_SERVICE_HANDLE_T handle)
|
|
request_poll(service->state, service, VCHIQ_POLL_REMOVE);
|
|
}
|
|
while (1) {
|
|
- if (wait_for_completion_killable(&service->remove_event)) {
|
|
+ if (wait_for_completion_interruptible(&service->remove_event)) {
|
|
status = VCHIQ_RETRY;
|
|
break;
|
|
}
|
|
@@ -3038,7 +3039,7 @@ VCHIQ_STATUS_T vchiq_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle,
|
|
VCHIQ_SERVICE_STATS_INC(service, bulk_stalls);
|
|
do {
|
|
mutex_unlock(&service->bulk_mutex);
|
|
- if (wait_for_completion_killable(
|
|
+ if (wait_for_completion_interruptible(
|
|
&service->bulk_remove_event)) {
|
|
status = VCHIQ_RETRY;
|
|
goto error_exit;
|
|
@@ -3115,7 +3116,7 @@ VCHIQ_STATUS_T vchiq_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle,
|
|
|
|
if (bulk_waiter) {
|
|
bulk_waiter->bulk = bulk;
|
|
- if (wait_for_completion_killable(&bulk_waiter->event))
|
|
+ if (wait_for_completion_interruptible(&bulk_waiter->event))
|
|
status = VCHIQ_RETRY;
|
|
else if (bulk_waiter->actual == VCHIQ_BULK_ACTUAL_ABORTED)
|
|
status = VCHIQ_ERROR;
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
|
|
index 6c519d8e48cb..8ee85c5e6f77 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_util.c
|
|
@@ -50,7 +50,7 @@ void vchiu_queue_push(struct vchiu_queue *queue, struct vchiq_header *header)
|
|
return;
|
|
|
|
while (queue->write == queue->read + queue->size) {
|
|
- if (wait_for_completion_killable(&queue->pop))
|
|
+ if (wait_for_completion_interruptible(&queue->pop))
|
|
flush_signals(current);
|
|
}
|
|
|
|
@@ -63,7 +63,7 @@ void vchiu_queue_push(struct vchiu_queue *queue, struct vchiq_header *header)
|
|
struct vchiq_header *vchiu_queue_peek(struct vchiu_queue *queue)
|
|
{
|
|
while (queue->write == queue->read) {
|
|
- if (wait_for_completion_killable(&queue->push))
|
|
+ if (wait_for_completion_interruptible(&queue->push))
|
|
flush_signals(current);
|
|
}
|
|
|
|
@@ -77,7 +77,7 @@ struct vchiq_header *vchiu_queue_pop(struct vchiu_queue *queue)
|
|
struct vchiq_header *header;
|
|
|
|
while (queue->write == queue->read) {
|
|
- if (wait_for_completion_killable(&queue->push))
|
|
+ if (wait_for_completion_interruptible(&queue->push))
|
|
flush_signals(current);
|
|
}
|
|
|
|
|
|
From patchwork Thu May 9 14:31:35 2019
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Patchwork-Submitter: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
X-Patchwork-Id: 10937235
|
|
Return-Path:
|
|
<linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org>
|
|
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
|
|
[172.30.200.125])
|
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC5351390
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:19 +0000 (UTC)
|
|
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 99D2728B65
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:19 +0000 (UTC)
|
|
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
|
|
id 97D1428BB1; Thu, 9 May 2019 14:32:19 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED,
|
|
DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
|
|
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
[198.137.202.133])
|
|
(using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits))
|
|
(No client certificate requested)
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 33B1628B65
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:19 +0000 (UTC)
|
|
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
d=lists.infradead.org; s=bombadil.20170209; h=Sender:
|
|
Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:
|
|
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description:
|
|
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
List-Owner; bh=MppKCYBfq+FT3jZK/ObU3v+sP2fM91OxPw5GM5vFK98=; b=uphpQaXY93kD4n
|
|
qgHpU2dYayllgFMmHqHFKy8338sx7Rh7Whh12IOevJXT84Q43VFK/WoIk4//t7jh/pJYQfoRlmCnH
|
|
KJHT2uWjj2un8BkoTRQSR/fEO+EvLPI5n280twRaGYJQq1A5XprnriWSETDsTkgMcbt8Cj71kph8s
|
|
qqNkS1hkZGFOgh8B8EYP9MUwadwoYKkvovcJziv4ODUl/xaXoz9ST9ipqUpxRNyDnhj3gS0xGP4mU
|
|
eN4swml2LB//9oH9D3bt9GgKJhvURUm/vIKuBhCWQdYrfUPZNfPvIHwTyJStjhkiSuyN+i/yh/u0d
|
|
aVqlnEW/g+94vRfkoSfw==;
|
|
Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org)
|
|
by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5p-0006Ao-3W; Thu, 09 May 2019 14:32:17 +0000
|
|
Received: from mx2.suse.de ([195.135.220.15] helo=mx1.suse.de)
|
|
by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5R-0005gN-Bk; Thu, 09 May 2019 14:31:54 +0000
|
|
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
|
|
Received: from relay2.suse.de (unknown [195.135.220.254])
|
|
by mx1.suse.de (Postfix) with ESMTP id 1944EACBA;
|
|
Thu, 9 May 2019 14:31:52 +0000 (UTC)
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
To: linux-kernel@vger.kernel.org
|
|
Subject: [PATCH v3 3/4] staging: vchiq: make wait events interruptible
|
|
Date: Thu, 9 May 2019 16:31:35 +0200
|
|
Message-Id: <20190509143137.31254-4-nsaenzjulienne@suse.de>
|
|
X-Mailer: git-send-email 2.21.0
|
|
In-Reply-To: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
References: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
MIME-Version: 1.0
|
|
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
X-CRM114-CacheID: sfid-20190509_073153_546153_CF6CDC2C
|
|
X-CRM114-Status: GOOD ( 12.69 )
|
|
X-BeenThere: linux-arm-kernel@lists.infradead.org
|
|
X-Mailman-Version: 2.1.21
|
|
Precedence: list
|
|
List-Id: <linux-arm-kernel.lists.infradead.org>
|
|
List-Unsubscribe:
|
|
<http://lists.infradead.org/mailman/options/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=unsubscribe>
|
|
List-Archive: <http://lists.infradead.org/pipermail/linux-arm-kernel/>
|
|
List-Post: <mailto:linux-arm-kernel@lists.infradead.org>
|
|
List-Help: <mailto:linux-arm-kernel-request@lists.infradead.org?subject=help>
|
|
List-Subscribe:
|
|
<http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=subscribe>
|
|
Cc: stefan.wahren@i2se.com, devel@driverdev.osuosl.org,
|
|
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
|
|
Eric Anholt <eric@anholt.net>,
|
|
linux-rpi-kernel@lists.infradead.org, dan.carpenter@oracle.com,
|
|
Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
|
|
linux-arm-kernel@lists.infradead.org
|
|
Content-Type: text/plain; charset="us-ascii"
|
|
Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org>
|
|
Errors-To:
|
|
linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org
|
|
X-Virus-Scanned: ClamAV using ClamSMTP
|
|
|
|
The killable version of wait_event() is meant to be used on situations
|
|
where it should not fail at all costs, but still have the convenience of
|
|
being able to kill it if really necessary. Wait events in VCHIQ doesn't
|
|
fit this criteria, as it's mainly used as an interface to V4L2 and ALSA
|
|
devices.
|
|
|
|
Fixes: 852b2876a8a8 ("staging: vchiq: rework remove_event handling")
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
---
|
|
.../vc04_services/interface/vchiq_arm/vchiq_core.c | 10 +++++++++-
|
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
index c65cf1e6f910..44bfa890e0e5 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
@@ -395,13 +395,21 @@ remote_event_create(wait_queue_head_t *wq, struct remote_event *event)
|
|
init_waitqueue_head(wq);
|
|
}
|
|
|
|
+/*
|
|
+ * All the event waiting routines in VCHIQ used a custom semaphore
|
|
+ * implementation that filtered most signals. This achieved a behaviour similar
|
|
+ * to the "killable" family of functions. While cleaning up this code all the
|
|
+ * routines where switched to the "interruptible" family of functions, as the
|
|
+ * former was deemed unjustified and the use "killable" set all VCHIQ's
|
|
+ * threads in D state.
|
|
+ */
|
|
static inline int
|
|
remote_event_wait(wait_queue_head_t *wq, struct remote_event *event)
|
|
{
|
|
if (!event->fired) {
|
|
event->armed = 1;
|
|
dsb(sy);
|
|
- if (wait_event_killable(*wq, event->fired)) {
|
|
+ if (wait_event_interruptible(*wq, event->fired)) {
|
|
event->armed = 0;
|
|
return 0;
|
|
}
|
|
|
|
From patchwork Thu May 9 14:31:36 2019
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Patchwork-Submitter: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
X-Patchwork-Id: 10937239
|
|
Return-Path:
|
|
<linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org>
|
|
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
|
|
[172.30.200.125])
|
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 662BC1390
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:50 +0000 (UTC)
|
|
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 532DC289F8
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:50 +0000 (UTC)
|
|
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
|
|
id 5123C28A77; Thu, 9 May 2019 14:32:50 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED,
|
|
DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
|
|
Received: from bombadil.infradead.org (bombadil.infradead.org
|
|
[198.137.202.133])
|
|
(using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits))
|
|
(No client certificate requested)
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 171A028AE6
|
|
for <patchwork-linux-arm@patchwork.kernel.org>;
|
|
Thu, 9 May 2019 14:32:49 +0000 (UTC)
|
|
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
|
|
d=lists.infradead.org; s=bombadil.20170209; h=Sender:
|
|
Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:
|
|
List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:
|
|
Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description:
|
|
Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:
|
|
List-Owner; bh=hbC4fga5OSh0T15ei+AWcZjFFpeyd4eloz75PA9+ZSQ=; b=hjJnppgChnF+da
|
|
gJbdcmOJUMpkaSPdRWwyDVndPiJqHfiacAhGzKZsMAPsymWXz2DiL4/KVE0ULmkTm5MwapaxCUliU
|
|
gdQQ7xNOT1yyCrlMWcXYZJaeDl06ngVfgu6QoNWN02uPS55159ez5rPNpCYtA0+5npkWsREnjEF6q
|
|
4lo12R4nB6W62VLSy5Y1/37KoyYfIaaZOJoK3i15rKYrXoKn12hjF/2DwmVuhTA+NaadTByQyDE86
|
|
0A91ewtqOH/KTMHTJDQrG29q03l5LAI2l6Zr5tfz23o2jLCy+3F5vZCnXTYcGxYNNJUATVmobezZj
|
|
sxUS8TZjBOuPCowBB22g==;
|
|
Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org)
|
|
by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk6E-0006kx-RW; Thu, 09 May 2019 14:32:42 +0000
|
|
Received: from mx2.suse.de ([195.135.220.15] helo=mx1.suse.de)
|
|
by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux))
|
|
id 1hOk5T-0005hX-0e; Thu, 09 May 2019 14:32:02 +0000
|
|
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
|
|
Received: from relay2.suse.de (unknown [195.135.220.254])
|
|
by mx1.suse.de (Postfix) with ESMTP id AC869ACBC;
|
|
Thu, 9 May 2019 14:31:53 +0000 (UTC)
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
To: Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>,
|
|
Florian Fainelli <f.fainelli@gmail.com>, Ray Jui <rjui@broadcom.com>,
|
|
Scott Branden <sbranden@broadcom.com>,
|
|
bcm-kernel-feedback-list@broadcom.com
|
|
Subject: [PATCH v3 4/4] staging: vchiq: stop explicitly comparing with zero to
|
|
catch errors
|
|
Date: Thu, 9 May 2019 16:31:36 +0200
|
|
Message-Id: <20190509143137.31254-5-nsaenzjulienne@suse.de>
|
|
X-Mailer: git-send-email 2.21.0
|
|
In-Reply-To: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
References: <20190509143137.31254-1-nsaenzjulienne@suse.de>
|
|
MIME-Version: 1.0
|
|
X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3
|
|
X-CRM114-CacheID: sfid-20190509_073155_533318_B386BD76
|
|
X-CRM114-Status: GOOD ( 17.98 )
|
|
X-BeenThere: linux-arm-kernel@lists.infradead.org
|
|
X-Mailman-Version: 2.1.21
|
|
Precedence: list
|
|
List-Id: <linux-arm-kernel.lists.infradead.org>
|
|
List-Unsubscribe:
|
|
<http://lists.infradead.org/mailman/options/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=unsubscribe>
|
|
List-Archive: <http://lists.infradead.org/pipermail/linux-arm-kernel/>
|
|
List-Post: <mailto:linux-arm-kernel@lists.infradead.org>
|
|
List-Help: <mailto:linux-arm-kernel-request@lists.infradead.org?subject=help>
|
|
List-Subscribe:
|
|
<http://lists.infradead.org/mailman/listinfo/linux-arm-kernel>,
|
|
<mailto:linux-arm-kernel-request@lists.infradead.org?subject=subscribe>
|
|
Cc: devel@driverdev.osuosl.org,
|
|
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
|
|
linux-kernel@vger.kernel.org,
|
|
Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
|
|
dan.carpenter@oracle.com, linux-arm-kernel@lists.infradead.org,
|
|
linux-rpi-kernel@lists.infradead.org
|
|
Content-Type: text/plain; charset="us-ascii"
|
|
Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org>
|
|
Errors-To:
|
|
linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org
|
|
X-Virus-Scanned: ClamAV using ClamSMTP
|
|
|
|
The vchiq code tends to follow a coding pattern that's not accepted as
|
|
per the Linux kernel coding style
|
|
|
|
We have this:
|
|
if (expression != 0)
|
|
|
|
We want this:
|
|
if (expression)
|
|
|
|
We make an exception if the expression refers to a size, in which case
|
|
it's accepted for the sake of clarity.
|
|
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
---
|
|
.../bcm2835-camera/bcm2835-camera.c | 11 ++--
|
|
.../interface/vchiq_arm/vchiq_2835_arm.c | 2 +-
|
|
.../interface/vchiq_arm/vchiq_arm.c | 66 ++++++++-----------
|
|
.../interface/vchiq_arm/vchiq_connected.c | 4 +-
|
|
.../interface/vchiq_arm/vchiq_core.c | 28 ++++----
|
|
.../interface/vchiq_arm/vchiq_debugfs.c | 4 +-
|
|
6 files changed, 52 insertions(+), 63 deletions(-)
|
|
|
|
diff --git a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
|
|
index 68f08dc18da9..57f79c153277 100644
|
|
--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
|
|
+++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
|
|
@@ -327,7 +327,7 @@ static void buffer_cb(struct vchiq_mmal_instance *instance,
|
|
"%s: status:%d, buf:%p, length:%lu, flags %u, pts %lld\n",
|
|
__func__, status, buf, length, mmal_flags, pts);
|
|
|
|
- if (status != 0) {
|
|
+ if (status) {
|
|
/* error in transfer */
|
|
if (buf) {
|
|
/* there was a buffer with the error so return it */
|
|
@@ -359,8 +359,7 @@ static void buffer_cb(struct vchiq_mmal_instance *instance,
|
|
}
|
|
} else {
|
|
if (dev->capture.frame_count) {
|
|
- if (dev->capture.vc_start_timestamp != -1 &&
|
|
- pts != 0) {
|
|
+ if (dev->capture.vc_start_timestamp != -1 && pts) {
|
|
ktime_t timestamp;
|
|
s64 runtime_us = pts -
|
|
dev->capture.vc_start_timestamp;
|
|
@@ -826,7 +825,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
|
|
struct v4l2_input *inp)
|
|
{
|
|
/* only a single camera input */
|
|
- if (inp->index != 0)
|
|
+ if (inp->index)
|
|
return -EINVAL;
|
|
|
|
inp->type = V4L2_INPUT_TYPE_CAMERA;
|
|
@@ -842,7 +841,7 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
|
|
|
|
static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
|
|
{
|
|
- if (i != 0)
|
|
+ if (i)
|
|
return -EINVAL;
|
|
|
|
return 0;
|
|
@@ -1281,7 +1280,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
|
|
}
|
|
|
|
ret = mmal_setup_components(dev, f);
|
|
- if (ret != 0) {
|
|
+ if (ret) {
|
|
v4l2_err(&dev->v4l2_dev,
|
|
"%s: failed to setup mmal components: %d\n",
|
|
__func__, ret);
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
index 49d3b39b1059..cb588c0b9364 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
|
|
@@ -514,7 +514,7 @@ create_pagelist(char __user *buf, size_t count, unsigned short type)
|
|
(g_cache_line_size - 1)))) {
|
|
char *fragments;
|
|
|
|
- if (down_interruptible(&g_free_fragments_sema) != 0) {
|
|
+ if (down_interruptible(&g_free_fragments_sema)) {
|
|
cleanup_pagelistinfo(pagelistinfo);
|
|
return NULL;
|
|
}
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
index 62d8f599e765..9264a07cf160 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
|
@@ -238,7 +238,7 @@ VCHIQ_STATUS_T vchiq_shutdown(VCHIQ_INSTANCE_T instance)
|
|
vchiq_log_trace(vchiq_core_log_level,
|
|
"%s(%p) called", __func__, instance);
|
|
|
|
- if (mutex_lock_killable(&state->mutex) != 0)
|
|
+ if (mutex_lock_killable(&state->mutex))
|
|
return VCHIQ_RETRY;
|
|
|
|
/* Remove all services */
|
|
@@ -280,7 +280,7 @@ VCHIQ_STATUS_T vchiq_connect(VCHIQ_INSTANCE_T instance)
|
|
vchiq_log_trace(vchiq_core_log_level,
|
|
"%s(%p) called", __func__, instance);
|
|
|
|
- if (mutex_lock_killable(&state->mutex) != 0) {
|
|
+ if (mutex_lock_killable(&state->mutex)) {
|
|
vchiq_log_trace(vchiq_core_log_level,
|
|
"%s: call to mutex_lock failed", __func__);
|
|
status = VCHIQ_RETRY;
|
|
@@ -645,8 +645,7 @@ service_callback(VCHIQ_REASON_T reason, struct vchiq_header *header,
|
|
|
|
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
|
if (wait_for_completion_interruptible(
|
|
- &user_service->remove_event)
|
|
- != 0) {
|
|
+ &user_service->remove_event)) {
|
|
vchiq_log_info(vchiq_arm_log_level,
|
|
"%s interrupted", __func__);
|
|
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
|
@@ -850,7 +849,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
break;
|
|
}
|
|
rc = mutex_lock_killable(&instance->state->mutex);
|
|
- if (rc != 0) {
|
|
+ if (rc) {
|
|
vchiq_log_error(vchiq_arm_log_level,
|
|
"vchiq: connect: could not lock mutex for "
|
|
"state %d: %d",
|
|
@@ -874,9 +873,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
void *userdata;
|
|
int srvstate;
|
|
|
|
- if (copy_from_user
|
|
- (&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ if (copy_from_user(&args, (const void __user *)arg,
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -940,7 +938,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
&(((struct vchiq_create_service __user *)
|
|
arg)->handle),
|
|
(const void *)&service->handle,
|
|
- sizeof(service->handle)) != 0) {
|
|
+ sizeof(service->handle))) {
|
|
ret = -EFAULT;
|
|
vchiq_remove_service(service->handle);
|
|
}
|
|
@@ -1015,9 +1013,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
case VCHIQ_IOC_QUEUE_MESSAGE: {
|
|
struct vchiq_queue_message args;
|
|
|
|
- if (copy_from_user
|
|
- (&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ if (copy_from_user(&args, (const void __user *)arg,
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -1049,9 +1046,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
(cmd == VCHIQ_IOC_QUEUE_BULK_TRANSMIT) ?
|
|
VCHIQ_BULK_TRANSMIT : VCHIQ_BULK_RECEIVE;
|
|
|
|
- if (copy_from_user
|
|
- (&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ if (copy_from_user(&args, (const void __user *)arg,
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -1125,7 +1121,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
&(((struct vchiq_queue_bulk_transfer __user *)
|
|
arg)->mode),
|
|
(const void *)&mode_waiting,
|
|
- sizeof(mode_waiting)) != 0)
|
|
+ sizeof(mode_waiting)))
|
|
ret = -EFAULT;
|
|
}
|
|
} break;
|
|
@@ -1140,7 +1136,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
}
|
|
|
|
if (copy_from_user(&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -1158,7 +1154,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
rc = wait_for_completion_interruptible(
|
|
&instance->insert_event);
|
|
mutex_lock(&instance->completion_mutex);
|
|
- if (rc != 0) {
|
|
+ if (rc) {
|
|
DEBUG_TRACE(AWAIT_COMPLETION_LINE);
|
|
vchiq_log_info(vchiq_arm_log_level,
|
|
"AWAIT_COMPLETION interrupted");
|
|
@@ -1224,7 +1220,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
if (copy_from_user(&msgbuf,
|
|
(const void __user *)
|
|
&args.msgbufs[msgbufcount],
|
|
- sizeof(msgbuf)) != 0) {
|
|
+ sizeof(msgbuf))) {
|
|
if (ret == 0)
|
|
ret = -EFAULT;
|
|
break;
|
|
@@ -1232,7 +1228,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
|
|
/* Copy the message to user space */
|
|
if (copy_to_user(msgbuf, header,
|
|
- msglen) != 0) {
|
|
+ msglen)) {
|
|
if (ret == 0)
|
|
ret = -EFAULT;
|
|
break;
|
|
@@ -1257,8 +1253,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
(size_t)args.buf + ret *
|
|
sizeof(struct vchiq_completion_data)),
|
|
completion,
|
|
- sizeof(struct vchiq_completion_data))
|
|
- != 0) {
|
|
+ sizeof(struct vchiq_completion_data))) {
|
|
if (ret == 0)
|
|
ret = -EFAULT;
|
|
break;
|
|
@@ -1278,13 +1273,13 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
&((struct vchiq_await_completion *)arg)
|
|
->msgbufcount,
|
|
&msgbufcount,
|
|
- sizeof(msgbufcount)) != 0) {
|
|
+ sizeof(msgbufcount))) {
|
|
ret = -EFAULT;
|
|
}
|
|
}
|
|
}
|
|
|
|
- if (ret != 0)
|
|
+ if (ret)
|
|
complete(&instance->remove_event);
|
|
mutex_unlock(&instance->completion_mutex);
|
|
DEBUG_TRACE(AWAIT_COMPLETION_LINE);
|
|
@@ -1296,9 +1291,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
struct vchiq_header *header;
|
|
|
|
DEBUG_TRACE(DEQUEUE_MESSAGE_LINE);
|
|
- if (copy_from_user
|
|
- (&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ if (copy_from_user(&args, (const void __user *)arg,
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -1384,7 +1378,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
struct vchiq_config config;
|
|
|
|
if (copy_from_user(&args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -1403,9 +1397,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|
case VCHIQ_IOC_SET_SERVICE_OPTION: {
|
|
struct vchiq_set_service_option args;
|
|
|
|
- if (copy_from_user(
|
|
- &args, (const void __user *)arg,
|
|
- sizeof(args)) != 0) {
|
|
+ if (copy_from_user(&args, (const void __user *)arg,
|
|
+ sizeof(args))) {
|
|
ret = -EFAULT;
|
|
break;
|
|
}
|
|
@@ -2329,8 +2322,7 @@ vchiq_keepalive_thread_func(void *v)
|
|
while (1) {
|
|
long rc = 0, uc = 0;
|
|
|
|
- if (wait_for_completion_interruptible(&arm_state->ka_evt)
|
|
- != 0) {
|
|
+ if (wait_for_completion_interruptible(&arm_state->ka_evt)) {
|
|
vchiq_log_error(vchiq_susp_log_level,
|
|
"%s interrupted", __func__);
|
|
flush_signals(current);
|
|
@@ -3011,7 +3003,7 @@ vchiq_use_internal(struct vchiq_state *state, struct vchiq_service *service,
|
|
vchiq_log_info(vchiq_susp_log_level, "%s %s resume "
|
|
"blocked - waiting...", __func__, entity);
|
|
if (wait_for_completion_killable(
|
|
- &arm_state->resume_blocker) != 0) {
|
|
+ &arm_state->resume_blocker)) {
|
|
vchiq_log_error(vchiq_susp_log_level, "%s %s "
|
|
"wait for resume blocker interrupted",
|
|
__func__, entity);
|
|
@@ -3060,7 +3052,7 @@ vchiq_use_internal(struct vchiq_state *state, struct vchiq_service *service,
|
|
vchiq_log_info(vchiq_susp_log_level, "%s %s wait for resume",
|
|
__func__, entity);
|
|
if (wait_for_completion_killable(
|
|
- &arm_state->vc_resume_complete) != 0) {
|
|
+ &arm_state->vc_resume_complete)) {
|
|
vchiq_log_error(vchiq_susp_log_level, "%s %s wait for "
|
|
"resume interrupted", __func__, entity);
|
|
ret = VCHIQ_ERROR;
|
|
@@ -3505,13 +3497,13 @@ static int vchiq_probe(struct platform_device *pdev)
|
|
platform_set_drvdata(pdev, drvdata);
|
|
|
|
err = vchiq_platform_init(pdev, &g_state);
|
|
- if (err != 0)
|
|
+ if (err)
|
|
goto failed_platform_init;
|
|
|
|
cdev_init(&vchiq_cdev, &vchiq_fops);
|
|
vchiq_cdev.owner = THIS_MODULE;
|
|
err = cdev_add(&vchiq_cdev, vchiq_devid, 1);
|
|
- if (err != 0) {
|
|
+ if (err) {
|
|
vchiq_log_error(vchiq_arm_log_level,
|
|
"Unable to register device");
|
|
goto failed_platform_init;
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_connected.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_connected.c
|
|
index e87e6619695e..1640906e3929 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_connected.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_connected.c
|
|
@@ -41,7 +41,7 @@ void vchiq_add_connected_callback(VCHIQ_CONNECTED_CALLBACK_T callback)
|
|
{
|
|
connected_init();
|
|
|
|
- if (mutex_lock_killable(&g_connected_mutex) != 0)
|
|
+ if (mutex_lock_killable(&g_connected_mutex))
|
|
return;
|
|
|
|
if (g_connected)
|
|
@@ -76,7 +76,7 @@ void vchiq_call_connected_callbacks(void)
|
|
|
|
connected_init();
|
|
|
|
- if (mutex_lock_killable(&g_connected_mutex) != 0)
|
|
+ if (mutex_lock_killable(&g_connected_mutex))
|
|
return;
|
|
|
|
for (i = 0; i < g_num_deferred_callbacks; i++)
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
index 44bfa890e0e5..44f0eb64952a 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
|
@@ -800,7 +800,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
WARN_ON(!(stride <= VCHIQ_SLOT_SIZE));
|
|
|
|
if (!(flags & QMFLAGS_NO_MUTEX_LOCK) &&
|
|
- (mutex_lock_killable(&state->slot_mutex) != 0))
|
|
+ mutex_lock_killable(&state->slot_mutex))
|
|
return VCHIQ_RETRY;
|
|
|
|
if (type == VCHIQ_MSG_DATA) {
|
|
@@ -812,8 +812,8 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
return VCHIQ_ERROR;
|
|
}
|
|
|
|
- WARN_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
|
|
- QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
|
|
+ WARN_ON(flags & (QMFLAGS_NO_MUTEX_LOCK |
|
|
+ QMFLAGS_NO_MUTEX_UNLOCK));
|
|
|
|
if (service->closing) {
|
|
/* The service has been closed */
|
|
@@ -874,7 +874,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
return VCHIQ_RETRY;
|
|
if (service->closing)
|
|
return VCHIQ_ERROR;
|
|
- if (mutex_lock_killable(&state->slot_mutex) != 0)
|
|
+ if (mutex_lock_killable(&state->slot_mutex))
|
|
return VCHIQ_RETRY;
|
|
if (service->srvstate != VCHIQ_SRVSTATE_OPEN) {
|
|
/* The service has been closed */
|
|
@@ -912,8 +912,8 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|
header, size, VCHIQ_MSG_SRCPORT(msgid),
|
|
VCHIQ_MSG_DSTPORT(msgid));
|
|
|
|
- WARN_ON((flags & (QMFLAGS_NO_MUTEX_LOCK |
|
|
- QMFLAGS_NO_MUTEX_UNLOCK)) != 0);
|
|
+ WARN_ON(flags & (QMFLAGS_NO_MUTEX_LOCK |
|
|
+ QMFLAGS_NO_MUTEX_UNLOCK));
|
|
|
|
callback_result =
|
|
copy_message_data(copy_callback, context,
|
|
@@ -1040,8 +1040,8 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service,
|
|
|
|
local = state->local;
|
|
|
|
- if ((VCHIQ_MSG_TYPE(msgid) != VCHIQ_MSG_RESUME) &&
|
|
- (mutex_lock_killable(&state->sync_mutex) != 0))
|
|
+ if (VCHIQ_MSG_TYPE(msgid) != VCHIQ_MSG_RESUME &&
|
|
+ mutex_lock_killable(&state->sync_mutex))
|
|
return VCHIQ_RETRY;
|
|
|
|
remote_event_wait(&state->sync_release_event, &local->sync_release);
|
|
@@ -1718,8 +1718,7 @@ parse_rx_slots(struct vchiq_state *state)
|
|
&service->bulk_rx : &service->bulk_tx;
|
|
|
|
DEBUG_TRACE(PARSE_LINE);
|
|
- if (mutex_lock_killable(
|
|
- &service->bulk_mutex) != 0) {
|
|
+ if (mutex_lock_killable(&service->bulk_mutex)) {
|
|
DEBUG_TRACE(PARSE_LINE);
|
|
goto bail_not_ready;
|
|
}
|
|
@@ -2523,7 +2522,7 @@ do_abort_bulks(struct vchiq_service *service)
|
|
VCHIQ_STATUS_T status;
|
|
|
|
/* Abort any outstanding bulk transfers */
|
|
- if (mutex_lock_killable(&service->bulk_mutex) != 0)
|
|
+ if (mutex_lock_killable(&service->bulk_mutex))
|
|
return 0;
|
|
abort_outstanding_bulks(service, &service->bulk_tx);
|
|
abort_outstanding_bulks(service, &service->bulk_rx);
|
|
@@ -3038,7 +3037,7 @@ VCHIQ_STATUS_T vchiq_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle,
|
|
queue = (dir == VCHIQ_BULK_TRANSMIT) ?
|
|
&service->bulk_tx : &service->bulk_rx;
|
|
|
|
- if (mutex_lock_killable(&service->bulk_mutex) != 0) {
|
|
+ if (mutex_lock_killable(&service->bulk_mutex)) {
|
|
status = VCHIQ_RETRY;
|
|
goto error_exit;
|
|
}
|
|
@@ -3052,8 +3051,7 @@ VCHIQ_STATUS_T vchiq_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle,
|
|
status = VCHIQ_RETRY;
|
|
goto error_exit;
|
|
}
|
|
- if (mutex_lock_killable(&service->bulk_mutex)
|
|
- != 0) {
|
|
+ if (mutex_lock_killable(&service->bulk_mutex)) {
|
|
status = VCHIQ_RETRY;
|
|
goto error_exit;
|
|
}
|
|
@@ -3081,7 +3079,7 @@ VCHIQ_STATUS_T vchiq_bulk_transfer(VCHIQ_SERVICE_HANDLE_T handle,
|
|
|
|
/* The slot mutex must be held when the service is being closed, so
|
|
claim it here to ensure that isn't happening */
|
|
- if (mutex_lock_killable(&state->slot_mutex) != 0) {
|
|
+ if (mutex_lock_killable(&state->slot_mutex)) {
|
|
status = VCHIQ_RETRY;
|
|
goto cancel_bulk_error_exit;
|
|
}
|
|
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
|
|
index 2bb9120883fd..f217b78d95a0 100644
|
|
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
|
|
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
|
|
@@ -86,7 +86,7 @@ static ssize_t debugfs_log_write(struct file *file,
|
|
if (count >= DEBUGFS_WRITE_BUF_SIZE)
|
|
count = DEBUGFS_WRITE_BUF_SIZE;
|
|
|
|
- if (copy_from_user(kbuf, buffer, count) != 0)
|
|
+ if (copy_from_user(kbuf, buffer, count))
|
|
return -EFAULT;
|
|
kbuf[count - 1] = 0;
|
|
|
|
@@ -151,7 +151,7 @@ static ssize_t debugfs_trace_write(struct file *file,
|
|
VCHIQ_INSTANCE_T instance = f->private;
|
|
char firstchar;
|
|
|
|
- if (copy_from_user(&firstchar, buffer, 1) != 0)
|
|
+ if (copy_from_user(&firstchar, buffer, 1))
|
|
return -EFAULT;
|
|
|
|
switch (firstchar) {
|