Received: by 2002:a05:6358:53a8:b0:117:f937:c515 with SMTP id z40csp4214157rwe; Mon, 17 Apr 2023 09:24:16 -0700 (PDT) X-Google-Smtp-Source: AKy350Z79NbRsQlBVaZUxwoCC+vGsa/S2AoBFmv3otB5eEIGrdMUAsK3h1r/cJzGgXGoLNrfBxpm X-Received: by 2002:a17:902:dac2:b0:1a6:3af1:9c3a with SMTP id q2-20020a170902dac200b001a63af19c3amr15468421plx.22.1681748655815; Mon, 17 Apr 2023 09:24:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681748655; cv=none; d=google.com; s=arc-20160816; b=g5iVDUzYiBcUihKOlDQx0vst81urrF7q3RZWcSeCEQyDz6bL/eYTw4SO9j6/ZpelUb wncogyzNqengwXONIyiZVhPyHir485zbg+R9ZEL6ajmrrEntCCpuOXPsZzFpU6PktrmG wfCkMxDMMyfkvtGA+jsEon5GwwSKSifIqviXQ+W+PSvr4xjrNE40vzUrEWmLUqrJppej 3uWWtX+/QZ3YBYrBe4B0YAHQVL5HPHHBC0hZHcnvgQadYkRzgYZZ22D0PuVvv2N38CFj t5gPssQubpFL0c7FNAq27YYmx3xJot/N571Zf+0WuMw5S5LxCY1HNm5/oloAoldUgPaR ntrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=YZLjE12AbTBn6pgm3sVsT7UJeiTGN2gKJMn43i9Ovi4=; b=mQ9FPj26hSsPgMQKZX1R0SweMs2k7qn5WdjgxcTr21+VMQGC7NQTzyYnjqWI/ggW9e kcUgwqyYA9/mNGoyQlB/ATW4DizCNCzbQOyO9qPAreM+UKFxfZ4Pq25NVwAbjV1lpFRZ 6uQLKc4yuqHY2XaYD/DuDUuLeXqhilzbogLpazv68e4BpPvoOudSou8mSOx2D0kFY6wK IdfiRV+YV4ZmaIHFBRnQg/vp7jiMt1QZIqXw2BMoJQEMxa3Hn2MB2tqv4W4KJYZ/GFTm 1TmemCCxnQleO+/H/qWleGN4+QZAgEVhNKW5W3ShJ8/5oC/gUVODG26r92tfhHP4Yt40 7YEw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u15-20020a170903124f00b001a19b69c7ebsi13248601plh.345.2023.04.17.09.24.01; Mon, 17 Apr 2023 09:24:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230210AbjDQQWu (ORCPT + 99 others); Mon, 17 Apr 2023 12:22:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43490 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230423AbjDQQWi (ORCPT ); Mon, 17 Apr 2023 12:22:38 -0400 Received: from synguard (unknown [212.29.212.82]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F44EBB88; Mon, 17 Apr 2023 09:22:28 -0700 (PDT) Received: from T14.siklu.local (unknown [192.168.42.162]) by synguard (Postfix) with ESMTP id 035F04DE5B; Mon, 17 Apr 2023 19:03:25 +0300 (IDT) From: Shmuel Hazan To: Russell King Cc: Marcin Wojtas , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , horatiu.vultur@microchip.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Shmuel Hazan Subject: [PATCH 1/3] net: mvpp2: tai: add refcount for ptp worker Date: Mon, 17 Apr 2023 19:01:49 +0300 Message-Id: <20230417160151.1617256-2-shmuel.h@siklu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230417160151.1617256-1-shmuel.h@siklu.com> References: <20230417160151.1617256-1-shmuel.h@siklu.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,FSL_HELO_NON_FQDN_1, HELO_NO_DOMAIN,RDNS_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In some configurations, a single TAI can be responsible for multiple mvpp2 interfaces. However, the mvpp2 driver will call mvpp22_tai_stop and mvpp22_tai_start per interface RX timestamp disable/enable. As a result, disabling timestamping for one interface would stop the worker and corrupt the other interface's RX timestamps. This commit solves the issue by introducing a simpler ref count for each TAI instance. Fixes: ce3497e2072e ("net: mvpp2: ptp: add support for receive timestamping") Signed-off-by: Shmuel Hazan --- .../net/ethernet/marvell/mvpp2/mvpp2_tai.c | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_tai.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_tai.c index 95862aff49f1..9c0d50a924d9 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_tai.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_tai.c @@ -61,6 +61,7 @@ struct mvpp2_tai { u64 period; // nanosecond period in 32.32 fixed point /* This timestamp is updated every two seconds */ struct timespec64 stamp; + u16 poll_worker_refcount; }; static void mvpp2_tai_modify(void __iomem *reg, u32 mask, u32 set) @@ -368,20 +369,45 @@ void mvpp22_tai_tstamp(struct mvpp2_tai *tai, u32 tstamp, hwtstamp->hwtstamp = timespec64_to_ktime(ts); } -void mvpp22_tai_start(struct mvpp2_tai *tai) +static void mvpp22_tai_start_unlocked(struct mvpp2_tai *tai) { long delay; + tai->poll_worker_refcount++; + if (tai->poll_worker_refcount > 1) + return; + delay = mvpp22_tai_aux_work(&tai->caps); ptp_schedule_worker(tai->ptp_clock, delay); } -void mvpp22_tai_stop(struct mvpp2_tai *tai) +void mvpp22_tai_start(struct mvpp2_tai *tai) { + unsigned long flags; + + spin_lock_irqsave(&tai->lock, flags); + mvpp22_tai_start_unlocked(tai); + spin_unlock_irqrestore(&tai->lock, flags); +} + +static void mvpp22_tai_stop_unlocked(struct mvpp2_tai *tai) +{ + tai->poll_worker_refcount--; + if (tai->poll_worker_refcount) + return; ptp_cancel_worker_sync(tai->ptp_clock); } +void mvpp22_tai_stop(struct mvpp2_tai *tai) +{ + unsigned long flags; + + spin_lock_irqsave(&tai->lock, flags); + mvpp22_tai_stop_unlocked(tai); + spin_unlock_irqrestore(&tai->lock, flags); +} + static void mvpp22_tai_remove(void *priv) { struct mvpp2_tai *tai = priv; -- 2.40.0