From patchwork Fri Jun 24 16:39:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Wahren X-Patchwork-Id: 12894864 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 340DFC433EF for ; Fri, 24 Jun 2022 16:40:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=IffELiyE55L6IO5dco4VB0Nlvwo3YlXR/DAqSVaDSWc=; b=4Uvyf7PfiSaXX6 DynWyeIy6JgJSZEjp3j6ViDgHXvFRxTzn1YsszTxtcrd0Dhur8MR62MMrBTNMjZmtc2dxHSaX3qfK C+RHtrIqrVlR9k2npEk87npU7F1skeT6gHNhCSv0Fm3mCn4nB2OJwUMLZbxfkS/3BSivTU2kBoQnI gPkugxN6LBsKBlXBvA1E//yn9kzHZ5qF1xZgWRX+GVJUzfSiX0YpKbD60rX7pfRAv0t9j2Tu5tzqq hSX2QSnqQVE7956PJ120idmCxw66pWRE5xYPeoL1U2ZYLUdeyJ1n2nwdoAEvF2i//6sGdnj0mLhAm 4TbWebpTN+1IjI3u6UYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o4mLb-0032Hk-8o; Fri, 24 Jun 2022 16:39:55 +0000 Received: from mout.kundenserver.de ([212.227.126.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o4mLX-0032Fu-F5; Fri, 24 Jun 2022 16:39:53 +0000 Received: from localhost.localdomain ([37.4.249.155]) by mrelayeu.kundenserver.de (mreue010 [212.227.15.167]) with ESMTPSA (Nemesis) id 1Mdevh-1nVAXk2mJt-00ZdtC; Fri, 24 Jun 2022 18:39:41 +0200 From: Stefan Wahren To: Greg Kroah-Hartman Cc: Peter Robinson , Phil Elwell , Adrien Thierry , bcm-kernel-feedback-list@broadcom.com, Gaston Gonzalez , linux-staging@lists.linux.dev, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Stefan Wahren Subject: [PATCH] staging: vchiq_arm: Add missing memory barrier comments Date: Fri, 24 Jun 2022 18:39:02 +0200 Message-Id: <20220624163902.6913-1-stefan.wahren@i2se.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Provags-ID: V03:K1:6D+6xb9DkEyOjZJDjNMI4PRhQSrvNC/CPkzqV7neEO07RhlSVUE /tQBDLZnHOyaQU14YpBxgxEwum/hy+djXvdMofN/KOlgPwhFmR98gOu7vfGLRlpM4g3VlOg xTOmCC8JrY5u3v6Aagi9mrhT6FPlGIe3pCVqF74H5rwH8t6FIRzdjycXSrTXs6r6KpY7Gya qCpfyXHjAk/gIQbVq7/XQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:z+hyA4DojEQ=:hrBOoCm/jfh20e7X+4roJV EXO6khWHtPH4/NYFtawUagne99qwQiVih8mO12hq1ou9euX2VhsWFKtFf4Za5W53JIs4EUP4y tdTPn4Ghb6oOwXdDFbmDWrR8kIrFciYZ83ijEmZod8/pEK3XWuEDg24G/DyD1nPhzLTLcJMkd YCZ44GtFSyE48pkABdPIGtO/oSY5pdbHoRlMXSgG/t6/N8Z9PgGtAs0hBR9i9VHW3VgUbhBsV wraGgDHy/W4ZMd6A9b1Rjceb+idKgmhePqlHb40oSEBO/SGFrxU8dxvYteOIb9wKa0lgge2is XEmLNJsKfbMtJZLF3ZAMubmB1WJ1oMgsViVdUHHDkbRVneCMIpJgMHl+YJ3wYFVi0NBJtVNvX DEzQ/SfGC5NrhgZ2tJ4Ee5U9sv/cJuNdRFQAuwrFLiMWDJNTGMVVG1NJODa9ltlW2Ao+SikCN DPsV0w9AWFzJKXcKX2+3Gl5AHwxeAajLDk801469BUr8AUQ1outkSfa8dR6vcWNdpn8tn1IuD UNpHsYrFOVeb3z8StnHc68PEfvYXFmipXzWApdZG7lAUv/kcScnHv1ijX0R+qPFt9Ik5xpag9 /7tXvFJyRc2z1r6P+X/icxTAiZjvvr1+zydQkKzIQBbiEUs9+t2LwR+ILRAm08w2x1R56XC4l +5Lv6q5Z1UFh+QOWnkP1g8HNVR6nauvTlIl3tYCE427x7j3L5Q1GoxkGIvVLLci3AW57qCko8 Nmte26vxSJHyDZn3Y+3TQZ1+1jwDNE+4+w0BRn0UAS/ctTOwl+xQdeq7hk0= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220624_093951_840638_5EACCA72 X-CRM114-Status: GOOD ( 11.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Phil Elwell One of points on the TODO list was to comment the memory barriers. This patch addresses the missing ones in order to help reviewers. Signed-off-by: Phil Elwell Signed-off-by: Stefan Wahren Link: https://github.com/raspberrypi/linux/pull/5066 --- .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 4 ++++ .../vc04_services/interface/vchiq_arm/vchiq_core.c | 9 +++++++++ 2 files changed, 13 insertions(+) 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 3bcb893d14a1..dc33490ba7fb 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -602,6 +602,10 @@ static struct vchiq_arm_state *vchiq_platform_get_arm_state(struct vchiq_state * void remote_event_signal(struct remote_event *event) { + /* + * Ensure that all writes to shared data structures have completed + * before signalling the peer. + */ wmb(); event->fired = 1; 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 7b9c100eb74d..45ed30bfdbf5 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c @@ -528,6 +528,7 @@ remote_event_wait(wait_queue_head_t *wq, struct remote_event *event) return 0; } event->armed = 0; + /* Ensure that the peer sees that we are not waiting (armed == 0). */ wmb(); } @@ -650,6 +651,7 @@ request_poll(struct vchiq_state *state, struct vchiq_service *service, skip_service: state->poll_needed = 1; + /* Ensure the slot handler thread sees the poll_needed flag. */ wmb(); /* ... and ensure the slot handler runs. */ @@ -1156,6 +1158,7 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service, remote_event_wait(&state->sync_release_event, &local->sync_release); + /* Ensure that reads don't overtake the remote_event_wait. */ rmb(); header = (struct vchiq_header *)SLOT_DATA_FROM_INDEX(state, @@ -1959,6 +1962,7 @@ slot_handler_func(void *v) DEBUG_TRACE(SLOT_HANDLER_LINE); remote_event_wait(&state->trigger_event, &local->trigger); + /* Ensure that reads don't overtake the remote_event_wait. */ rmb(); DEBUG_TRACE(SLOT_HANDLER_LINE); @@ -2021,6 +2025,7 @@ sync_func(void *v) remote_event_wait(&state->sync_trigger_event, &local->sync_trigger); + /* Ensure that reads don't overtake the remote_event_wait. */ rmb(); msgid = header->msgid; @@ -3081,6 +3086,10 @@ enum vchiq_status vchiq_bulk_transfer(struct vchiq_instance *instance, unsigned if (vchiq_prepare_bulk_data(instance, bulk, offset, uoffset, size, dir)) goto unlock_error_exit; + /* + * Ensure that the bulk data record is visible to the peer + * before proceeding. + */ wmb(); vchiq_log_info(vchiq_core_log_level, "%d: bt (%d->%d) %cx %x@%pad %pK",