Loading drivers/net/wireless/ath/wil6210/debugfs.c +15 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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)); Loading Loading @@ -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; } Loading drivers/net/wireless/ath/wil6210/main.c +4 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading drivers/net/wireless/ath/wil6210/pm.c +23 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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"); Loading @@ -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; } drivers/net/wireless/ath/wil6210/wil6210.h +5 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
drivers/net/wireless/ath/wil6210/debugfs.c +15 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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)); Loading Loading @@ -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; } Loading
drivers/net/wireless/ath/wil6210/main.c +4 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; Loading
drivers/net/wireless/ath/wil6210/pm.c +23 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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"); Loading @@ -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; }
drivers/net/wireless/ath/wil6210/wil6210.h +5 −0 Original line number Diff line number Diff line Loading @@ -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, Loading