All of lore.kernel.org
 help / color / mirror / Atom feed
From: Evan Quan <evan.quan@amd.com>
To: <rafael@kernel.org>, <lenb@kernel.org>,
	<Alexander.Deucher@amd.com>, <Christian.Koenig@amd.com>,
	<Xinhui.Pan@amd.com>, <airlied@gmail.com>, <daniel@ffwll.ch>,
	<johannes@sipsolutions.net>, <davem@davemloft.net>,
	<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<Mario.Limonciello@amd.com>, <mdaenzer@redhat.com>,
	<maarten.lankhorst@linux.intel.com>, <tzimmermann@suse.de>,
	<hdegoede@redhat.com>, <jingyuwang_vip@163.com>,
	<Lijo.Lazar@amd.com>, <jim.cromie@gmail.com>,
	<bellosilicio@gmail.com>, <andrealmeid@igalia.com>,
	<trix@redhat.com>, <jsg@jsg.id.au>, <arnd@arndb.de>
Cc: <linux-kernel@vger.kernel.org>, <linux-acpi@vger.kernel.org>,
	<amd-gfx@lists.freedesktop.org>,
	<dri-devel@lists.freedesktop.org>,
	<linux-wireless@vger.kernel.org>, <netdev@vger.kernel.org>,
	Evan Quan <evan.quan@amd.com>,
	Mario Limonciello <mario.limonciello@amd.com>
Subject: [PATCH V5 7/9] drm/amd/pm: add flood detection for wbrf events
Date: Fri, 30 Jun 2023 18:32:38 +0800	[thread overview]
Message-ID: <20230630103240.1557100-8-evan.quan@amd.com> (raw)
In-Reply-To: <20230630103240.1557100-1-evan.quan@amd.com>

To protect PMFW from being overloaded.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 30 +++++++++++++++----
 drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h |  7 +++++
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 83d428e890df..a4cfaf8a6f59 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -1278,7 +1278,8 @@ static int smu_wbrf_event_handler(struct notifier_block *nb,
 
 	switch (action) {
 	case WBRF_CHANGED:
-		smu_wbrf_handle_exclusion_ranges(smu);
+		schedule_delayed_work(&smu->wbrf_delayed_work,
+				      msecs_to_jiffies(SMU_WBRF_EVENT_HANDLING_PACE));
 		break;
 	default:
 		return NOTIFY_DONE;
@@ -1287,6 +1288,21 @@ static int smu_wbrf_event_handler(struct notifier_block *nb,
 	return NOTIFY_OK;
 }
 
+/**
+ * smu_wbrf_delayed_work_handler - callback on delayed work timer expired
+ *
+ * @work: struct work_struct pointer
+ *
+ * Flood is over and driver will consume the latest exclusion ranges.
+ */
+static void smu_wbrf_delayed_work_handler(struct work_struct *work)
+{
+	struct smu_context *smu =
+		container_of(work, struct smu_context, wbrf_delayed_work.work);
+
+	smu_wbrf_handle_exclusion_ranges(smu);
+}
+
 /**
  * smu_wbrf_support_check - check wbrf support
  *
@@ -1323,6 +1339,9 @@ static int smu_wbrf_init(struct smu_context *smu)
 	if (!smu->wbrf_supported)
 		return 0;
 
+	INIT_DELAYED_WORK(&smu->wbrf_delayed_work,
+			  smu_wbrf_delayed_work_handler);
+
 	smu->wbrf_notifier.notifier_call = smu_wbrf_event_handler;
 	ret = wbrf_register_notifier(&smu->wbrf_notifier);
 	if (ret)
@@ -1333,11 +1352,10 @@ static int smu_wbrf_init(struct smu_context *smu)
 	 * before our driver loaded. To make sure our driver
 	 * is awared of those exclusion ranges.
 	 */
-	ret = smu_wbrf_handle_exclusion_ranges(smu);
-	if (ret)
-		dev_err(adev->dev, "Failed to handle wbrf exclusion ranges\n");
+	schedule_delayed_work(&smu->wbrf_delayed_work,
+			      msecs_to_jiffies(SMU_WBRF_EVENT_HANDLING_PACE));
 
-	return ret;
+	return 0;
 }
 
 /**
@@ -1353,6 +1371,8 @@ static void smu_wbrf_fini(struct smu_context *smu)
 		return;
 
 	wbrf_unregister_notifier(&smu->wbrf_notifier);
+
+	cancel_delayed_work_sync(&smu->wbrf_delayed_work);
 }
 
 static int smu_smc_hw_setup(struct smu_context *smu)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
index 5b2343cfc69b..5df28d4a8c30 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
@@ -480,6 +480,12 @@ struct stb_context {
 
 #define WORKLOAD_POLICY_MAX 7
 
+/*
+ * Configure wbrf event handling pace as there can be only one
+ * event processed every SMU_WBRF_EVENT_HANDLING_PACE ms.
+ */
+#define SMU_WBRF_EVENT_HANDLING_PACE	10
+
 struct smu_context
 {
 	struct amdgpu_device            *adev;
@@ -579,6 +585,7 @@ struct smu_context
 	/* data structures for wbrf feature support */
 	bool				wbrf_supported;
 	struct notifier_block		wbrf_notifier;
+	struct delayed_work		wbrf_delayed_work;
 };
 
 struct i2c_adapter;
-- 
2.34.1


WARNING: multiple messages have this Message-ID (diff)
From: Evan Quan <evan.quan@amd.com>
To: <rafael@kernel.org>, <lenb@kernel.org>,
	<Alexander.Deucher@amd.com>, <Christian.Koenig@amd.com>,
	<Xinhui.Pan@amd.com>, <airlied@gmail.com>, <daniel@ffwll.ch>,
	<johannes@sipsolutions.net>, <davem@davemloft.net>,
	<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<Mario.Limonciello@amd.com>, <mdaenzer@redhat.com>,
	<maarten.lankhorst@linux.intel.com>, <tzimmermann@suse.de>,
	<hdegoede@redhat.com>, <jingyuwang_vip@163.com>,
	<Lijo.Lazar@amd.com>, <jim.cromie@gmail.com>,
	<bellosilicio@gmail.com>, <andrealmeid@igalia.com>,
	<trix@redhat.com>, <jsg@jsg.id.au>, <arnd@arndb.de>
Cc: netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	linux-acpi@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	Evan Quan <evan.quan@amd.com>,
	Mario Limonciello <mario.limonciello@amd.com>
Subject: [PATCH V5 7/9] drm/amd/pm: add flood detection for wbrf events
Date: Fri, 30 Jun 2023 18:32:38 +0800	[thread overview]
Message-ID: <20230630103240.1557100-8-evan.quan@amd.com> (raw)
In-Reply-To: <20230630103240.1557100-1-evan.quan@amd.com>

To protect PMFW from being overloaded.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 30 +++++++++++++++----
 drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h |  7 +++++
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 83d428e890df..a4cfaf8a6f59 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -1278,7 +1278,8 @@ static int smu_wbrf_event_handler(struct notifier_block *nb,
 
 	switch (action) {
 	case WBRF_CHANGED:
-		smu_wbrf_handle_exclusion_ranges(smu);
+		schedule_delayed_work(&smu->wbrf_delayed_work,
+				      msecs_to_jiffies(SMU_WBRF_EVENT_HANDLING_PACE));
 		break;
 	default:
 		return NOTIFY_DONE;
@@ -1287,6 +1288,21 @@ static int smu_wbrf_event_handler(struct notifier_block *nb,
 	return NOTIFY_OK;
 }
 
+/**
+ * smu_wbrf_delayed_work_handler - callback on delayed work timer expired
+ *
+ * @work: struct work_struct pointer
+ *
+ * Flood is over and driver will consume the latest exclusion ranges.
+ */
+static void smu_wbrf_delayed_work_handler(struct work_struct *work)
+{
+	struct smu_context *smu =
+		container_of(work, struct smu_context, wbrf_delayed_work.work);
+
+	smu_wbrf_handle_exclusion_ranges(smu);
+}
+
 /**
  * smu_wbrf_support_check - check wbrf support
  *
@@ -1323,6 +1339,9 @@ static int smu_wbrf_init(struct smu_context *smu)
 	if (!smu->wbrf_supported)
 		return 0;
 
+	INIT_DELAYED_WORK(&smu->wbrf_delayed_work,
+			  smu_wbrf_delayed_work_handler);
+
 	smu->wbrf_notifier.notifier_call = smu_wbrf_event_handler;
 	ret = wbrf_register_notifier(&smu->wbrf_notifier);
 	if (ret)
@@ -1333,11 +1352,10 @@ static int smu_wbrf_init(struct smu_context *smu)
 	 * before our driver loaded. To make sure our driver
 	 * is awared of those exclusion ranges.
 	 */
-	ret = smu_wbrf_handle_exclusion_ranges(smu);
-	if (ret)
-		dev_err(adev->dev, "Failed to handle wbrf exclusion ranges\n");
+	schedule_delayed_work(&smu->wbrf_delayed_work,
+			      msecs_to_jiffies(SMU_WBRF_EVENT_HANDLING_PACE));
 
-	return ret;
+	return 0;
 }
 
 /**
@@ -1353,6 +1371,8 @@ static void smu_wbrf_fini(struct smu_context *smu)
 		return;
 
 	wbrf_unregister_notifier(&smu->wbrf_notifier);
+
+	cancel_delayed_work_sync(&smu->wbrf_delayed_work);
 }
 
 static int smu_smc_hw_setup(struct smu_context *smu)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
index 5b2343cfc69b..5df28d4a8c30 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
@@ -480,6 +480,12 @@ struct stb_context {
 
 #define WORKLOAD_POLICY_MAX 7
 
+/*
+ * Configure wbrf event handling pace as there can be only one
+ * event processed every SMU_WBRF_EVENT_HANDLING_PACE ms.
+ */
+#define SMU_WBRF_EVENT_HANDLING_PACE	10
+
 struct smu_context
 {
 	struct amdgpu_device            *adev;
@@ -579,6 +585,7 @@ struct smu_context
 	/* data structures for wbrf feature support */
 	bool				wbrf_supported;
 	struct notifier_block		wbrf_notifier;
+	struct delayed_work		wbrf_delayed_work;
 };
 
 struct i2c_adapter;
-- 
2.34.1


  parent reply	other threads:[~2023-06-30 10:36 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-30 10:32 [PATCH V5 0/9] Enable Wifi RFI interference mitigation feature support Evan Quan
2023-06-30 10:32 ` Evan Quan
2023-06-30 10:32 ` [PATCH V5 1/9] drivers core: Add support for Wifi band RF mitigations Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 13:38   ` Simon Horman
2023-06-30 13:38     ` Simon Horman
2023-06-30 13:38     ` Simon Horman
2023-07-04  3:41     ` Quan, Evan
2023-07-04  3:41       ` Quan, Evan
2023-07-04  3:41       ` Quan, Evan
2023-06-30 16:40   ` Limonciello, Mario
2023-06-30 16:40     ` Limonciello, Mario
2023-07-01  0:25     ` Andrew Lunn
2023-07-01  0:25       ` Andrew Lunn
2023-07-01  0:25       ` Andrew Lunn
2023-07-04  3:25       ` Quan, Evan
2023-07-04  3:25         ` Quan, Evan
2023-07-04  3:25         ` Quan, Evan
2023-07-04  3:40     ` Quan, Evan
2023-07-04  3:40       ` Quan, Evan
2023-07-04  3:53       ` Mario Limonciello
2023-07-04  3:53         ` Mario Limonciello
2023-07-01  0:19   ` Andrew Lunn
2023-07-01  0:19     ` Andrew Lunn
2023-07-01  0:19     ` Andrew Lunn
2023-07-04  3:30     ` Quan, Evan
2023-07-04  3:30       ` Quan, Evan
2023-07-04  3:30       ` Quan, Evan
2023-07-04 13:07       ` Andrew Lunn
2023-07-04 13:07         ` Andrew Lunn
2023-07-04 13:07         ` Andrew Lunn
2023-07-06  2:58         ` Quan, Evan
2023-07-06  2:58           ` Quan, Evan
2023-07-06  2:58           ` Quan, Evan
2023-07-06  3:09           ` Mario Limonciello
2023-07-06  3:09             ` Mario Limonciello
2023-07-06  3:09             ` Mario Limonciello
2023-06-30 10:32 ` [PATCH V5 2/9] driver core: add ACPI based WBRF mechanism introduced by AMD Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-07-01  0:51   ` Andrew Lunn
2023-07-01  0:51     ` Andrew Lunn
2023-07-01  0:51     ` Andrew Lunn
2023-07-04  3:24     ` Quan, Evan
2023-07-04  3:24       ` Quan, Evan
2023-07-04  3:24       ` Quan, Evan
2023-06-30 10:32 ` [PATCH V5 3/9] cfg80211: expose nl80211_chan_width_to_mhz for wide sharing Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 10:32 ` [PATCH V5 4/9] wifi: mac80211: Add support for ACPI WBRF Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 14:08   ` kernel test robot
2023-06-30 14:08     ` kernel test robot
2023-07-01  1:02   ` Andrew Lunn
2023-07-01  1:02     ` Andrew Lunn
2023-07-01  1:02     ` Andrew Lunn
2023-07-04  3:12     ` Quan, Evan
2023-07-04  3:12       ` Quan, Evan
2023-07-04  3:12       ` Quan, Evan
2023-06-30 10:32 ` [PATCH V5 5/9] drm/amd/pm: update driver_if and ppsmc headers for coming wbrf feature Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 10:32 ` [PATCH V5 6/9] drm/amd/pm: setup the framework to support Wifi RFI mitigation feature Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 10:32 ` Evan Quan [this message]
2023-06-30 10:32   ` [PATCH V5 7/9] drm/amd/pm: add flood detection for wbrf events Evan Quan
2023-06-30 14:29   ` kernel test robot
2023-06-30 14:29     ` kernel test robot
2023-06-30 10:32 ` [PATCH V5 8/9] drm/amd/pm: enable Wifi RFI mitigation feature support for SMU13.0.0 Evan Quan
2023-06-30 10:32   ` Evan Quan
2023-06-30 10:32 ` [PATCH V5 9/9] drm/amd/pm: enable Wifi RFI mitigation feature support for SMU13.0.7 Evan Quan
2023-06-30 10:32   ` Evan Quan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230630103240.1557100-8-evan.quan@amd.com \
    --to=evan.quan@amd.com \
    --cc=Alexander.Deucher@amd.com \
    --cc=Christian.Koenig@amd.com \
    --cc=Lijo.Lazar@amd.com \
    --cc=Mario.Limonciello@amd.com \
    --cc=Xinhui.Pan@amd.com \
    --cc=airlied@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=andrealmeid@igalia.com \
    --cc=arnd@arndb.de \
    --cc=bellosilicio@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=davem@davemloft.net \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=edumazet@google.com \
    --cc=hdegoede@redhat.com \
    --cc=jim.cromie@gmail.com \
    --cc=jingyuwang_vip@163.com \
    --cc=johannes@sipsolutions.net \
    --cc=jsg@jsg.id.au \
    --cc=kuba@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mdaenzer@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=rafael@kernel.org \
    --cc=trix@redhat.com \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.