Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1874641pxb; Sun, 18 Apr 2021 09:46:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyy1s6VbrhzvCOUYdl6c2asQh6aHtQWkbrc0IQBmLdH9ZwdlSNIPjH/rpbOgs2wiQeyyzEJ X-Received: by 2002:a17:90a:b001:: with SMTP id x1mr21600578pjq.122.1618764382017; Sun, 18 Apr 2021 09:46:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618764382; cv=none; d=google.com; s=arc-20160816; b=O8anHCmNKsH1H/RoJs+F0UBt0+AI5ODnRBkkE5O2s3dJuapCaBeCLitZT6R+bzbcmn D56n/cXGL3/1vR5R/94c8jiXfW2q64feY62bfES/MEgn4/pJ/HAK5aHTwMBBWdBlDJTz blqgCo2rpTP6QTcEAPiGXpLBzzfXN1/mN1alIhBxSCtmA98DpZJABSOAgs6KwtXjAwsK +W5V1+NqvsqLPZizI4KYEQc/gSQg+A5ytiXRLlAWxqM8BbpuGKxS/geIb1jjYxs7+Yke Xx6dK5J9uSopmQA2gbrY17mRC7GTRnFO6wn1/JD3z5JmjrnNeOKPMheUT19pUrmXv19j QocA== 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 :dkim-signature; bh=C74cJ0N+cQ41Ny5N2x4mopJD7r6XxGMXAHJSOz9CP/U=; b=Q5OofRWx1zuzg6V74tNmYwAHny1NcPiJ/489catJsNKBsGPATabYUPyOx2gvNBVcH3 sA8pFUAYJd0a9Lo4ImxOXgsmzEHrPUQAuIT4zeX6fBAbrB7L/R5wdRLP+NXV/lUA5UF+ 8x9Y5RY5zEvD7UTucacHxAbtvvzMT09GXtqCuYWxmL1P62HcslWUhSXB54s9s5jGXdKt +HA1Ef5gAot11Y+9Aj2uq54kFzDsN4fsB2e/BlXL32ybmyYqQV0B+mlDzTUHDF8XU58A rYOHXFed0YubewTMNRhkQm029fclB+LaY7s1YiGutOQGo7NPUXDqqj7loLvLjsTRCxuG TGlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QCOCFZPP; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d18si7157877plh.171.2021.04.18.09.46.09; Sun, 18 Apr 2021 09:46:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QCOCFZPP; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231966AbhDRQq2 (ORCPT + 99 others); Sun, 18 Apr 2021 12:46:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:49720 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231844AbhDRQq1 (ORCPT ); Sun, 18 Apr 2021 12:46:27 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id ACAF56135B; Sun, 18 Apr 2021 16:45:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618764359; bh=ke+RBzaKWQerzq999gaact9VTa49Kdm00iHJ+ieUuo4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QCOCFZPPk8OH2t+0SoBb9+2g5BJMHs1NGzAnav/FDZ7Uuv63hLyBnRke6J+s6lx20 Q7IeV5Z2TEzyDqX0jPOOZXiadJ6qw7ilJ3m7drN9zUhbdvbgNlWAoi+BfzpUQNCQCb VfRbz4haXxHEWwwYEkH1SYDT+XV44FlPvsxeheDDvc0mEP8DAkuOUmmlAfx8SRP+FD yYdyE8F1lASzbqMdAS08IB3yQ3n7Jd8ZxgSDUTJpWQlx5nQg/3W6ZjMb+TYnxokflW WLVAU2gcx8kZyM1Q4XTaxBBZM16wvu7dtA/u4wUqHoOf3HPys3HmmAgXmNuuZGTUNu +E1+OFcyW2Hrg== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com Subject: [PATCH 03/19] mt76: connac: introduce wake counter for fw_pmctrl synchronization Date: Sun, 18 Apr 2021 18:45:29 +0200 Message-Id: <24ce174c35b8517397d7c726b0f783b128c08ec5.1618763001.git.lorenzo@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Introduce wake counter and related spinlock in order to synchronize tx/rx path and fw_pmctrl request. Signed-off-by: Lorenzo Bianconi --- .../net/wireless/mediatek/mt76/mt76_connac.h | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h index 2b31c9794e92..85846eab8d7d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h @@ -54,6 +54,11 @@ struct mt76_connac_pm { struct work_struct wake_work; struct completion wake_cmpl; + + struct { + spinlock_t lock; + u32 count; + } wake; struct mutex mutex; struct delayed_work ps_work; @@ -85,6 +90,32 @@ void mt76_connac_power_save_sched(struct mt76_phy *phy, void mt76_connac_free_pending_tx_skbs(struct mt76_connac_pm *pm, struct mt76_wcid *wcid); +static inline bool +mt76_connac_pm_ref(struct mt76_phy *phy, struct mt76_connac_pm *pm) +{ + bool ret = false; + + spin_lock_bh(&pm->wake.lock); + if (test_bit(MT76_STATE_PM, &phy->state)) + goto out; + + pm->wake.count++; + ret = true; +out: + spin_unlock_bh(&pm->wake.lock); + + return ret; +} + +static inline void +mt76_connac_pm_unref(struct mt76_connac_pm *pm) +{ + spin_lock_bh(&pm->wake.lock); + pm->wake.count--; + pm->last_activity = jiffies; + spin_unlock_bh(&pm->wake.lock); +} + static inline void mt76_connac_mutex_acquire(struct mt76_dev *dev, struct mt76_connac_pm *pm) __acquires(&dev->mutex) -- 2.30.2