Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcab4d17 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "wil6210: fix interface-up check"

parents bb354ed6 7c6746da
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -1622,6 +1622,8 @@ static ssize_t wil_write_suspend_stats(struct file *file,
	struct wil6210_priv *wil = file->private_data;

	memset(&wil->suspend_stats, 0, sizeof(wil->suspend_stats));
	wil->suspend_stats.min_suspend_time = ULONG_MAX;
	wil->suspend_stats.collection_start = ktime_get();

	return len;
}
@@ -1633,18 +1635,27 @@ static ssize_t wil_read_suspend_stats(struct file *file,
	struct wil6210_priv *wil = file->private_data;
	static char text[400];
	int n;
	unsigned long long stats_collection_time =
		ktime_to_us(ktime_sub(ktime_get(),
				      wil->suspend_stats.collection_start));

	n = snprintf(text, sizeof(text),
		     "Suspend statistics:\n"
		     "successful suspends:%ld failed suspends:%ld\n"
		     "successful resumes:%ld failed resumes:%ld\n"
		     "rejected by host:%ld rejected by device:%ld\n",
		     "rejected by host:%ld rejected by device:%ld\n"
		     "total suspend time:%lld min suspend time:%lld\n"
		     "max suspend time:%lld stats collection time: %lld\n",
		     wil->suspend_stats.successful_suspends,
		     wil->suspend_stats.failed_suspends,
		     wil->suspend_stats.successful_resumes,
		     wil->suspend_stats.failed_resumes,
		     wil->suspend_stats.rejected_by_host,
		     wil->suspend_stats.rejected_by_device);
		     wil->suspend_stats.rejected_by_device,
		     wil->suspend_stats.total_suspend_time,
		     wil->suspend_stats.min_suspend_time,
		     wil->suspend_stats.max_suspend_time,
		     stats_collection_time);

	n = min_t(int, n, sizeof(text));

@@ -1800,6 +1811,8 @@ int wil6210_debugfs_init(struct wil6210_priv *wil)

	wil6210_debugfs_create_ITR_CNT(wil, dbg);

	wil->suspend_stats.collection_start = ktime_get();

	return 0;
}

+4 −1
Original line number Diff line number Diff line
@@ -395,10 +395,11 @@ static void wil_fw_error_worker(struct work_struct *work)
	struct wil6210_priv *wil = container_of(work, struct wil6210_priv,
						fw_error_worker);
	struct wireless_dev *wdev = wil->wdev;
	struct net_device *ndev = wil_to_ndev(wil);

	wil_dbg_misc(wil, "fw error worker\n");

	if (!netif_running(wil_to_ndev(wil))) {
	if (!(ndev->flags & IFF_UP)) {
		wil_info(wil, "No recovery - interface is down\n");
		return;
	}
@@ -581,6 +582,8 @@ int wil_priv_init(struct wil6210_priv *wil)

	wil->wakeup_trigger = WMI_WAKEUP_TRIGGER_UCAST |
			      WMI_WAKEUP_TRIGGER_BCAST;
	memset(&wil->suspend_stats, 0, sizeof(wil->suspend_stats));
	wil->suspend_stats.min_suspend_time = ULONG_MAX;

	return 0;

+23 −4
Original line number Diff line number Diff line
@@ -21,10 +21,11 @@ int wil_can_suspend(struct wil6210_priv *wil, bool is_runtime)
{
	int rc = 0;
	struct wireless_dev *wdev = wil->wdev;
	struct net_device *ndev = wil_to_ndev(wil);

	wil_dbg_pm(wil, "can_suspend: %s\n", is_runtime ? "runtime" : "system");

	if (!netif_running(wil_to_ndev(wil))) {
	if (!(ndev->flags & IFF_UP)) {
		/* can always sleep when down */
		wil_dbg_pm(wil, "Interface is down\n");
		goto out;
@@ -85,7 +86,9 @@ static int wil_resume_keep_radio_on(struct wil6210_priv *wil)
	/* Send WMI resume request to the device */
	rc = wmi_resume(wil);
	if (rc) {
		wil_err(wil, "device failed to resume (%d), resetting\n", rc);
		wil_err(wil, "device failed to resume (%d)\n", rc);
		if (no_fw_recovery)
			goto out;
		rc = wil_down(wil);
		if (rc) {
			wil_err(wil, "wil_down failed (%d)\n", rc);
@@ -298,6 +301,9 @@ int wil_suspend(struct wil6210_priv *wil, bool is_runtime)
	wil_dbg_pm(wil, "suspend: %s => %d\n",
		   is_runtime ? "runtime" : "system", rc);

	if (!rc)
		wil->suspend_stats.suspend_start_time = ktime_get();

	return rc;
}

@@ -307,6 +313,7 @@ int wil_resume(struct wil6210_priv *wil, bool is_runtime)
	struct net_device *ndev = wil_to_ndev(wil);
	bool keep_radio_on = ndev->flags & IFF_UP &&
			     wil->keep_radio_on_during_sleep;
	unsigned long long suspend_time_usec = 0;

	wil_dbg_pm(wil, "resume: %s\n", is_runtime ? "runtime" : "system");

@@ -324,8 +331,20 @@ int wil_resume(struct wil6210_priv *wil, bool is_runtime)
	else
		rc = wil_resume_radio_off(wil);

	if (rc)
		goto out;

	suspend_time_usec =
		ktime_to_us(ktime_sub(ktime_get(),
				      wil->suspend_stats.suspend_start_time));
	wil->suspend_stats.total_suspend_time += suspend_time_usec;
	if (suspend_time_usec < wil->suspend_stats.min_suspend_time)
		wil->suspend_stats.min_suspend_time = suspend_time_usec;
	if (suspend_time_usec > wil->suspend_stats.max_suspend_time)
		wil->suspend_stats.max_suspend_time = suspend_time_usec;

out:
	wil_dbg_pm(wil, "resume: %s => %d\n",
		   is_runtime ? "runtime" : "system", rc);
	wil_dbg_pm(wil, "resume: %s => %d, suspend time %lld usec\n",
		   is_runtime ? "runtime" : "system", rc, suspend_time_usec);
	return rc;
}
+5 −0
Original line number Diff line number Diff line
@@ -91,6 +91,11 @@ struct wil_suspend_stats {
	unsigned long failed_resumes;
	unsigned long rejected_by_device;
	unsigned long rejected_by_host;
	unsigned long long total_suspend_time;
	unsigned long long min_suspend_time;
	unsigned long long max_suspend_time;
	ktime_t collection_start;
	ktime_t suspend_start_time;
};

/* Calculate MAC buffer size for the firmware. It includes all overhead,