]> git.baikalelectronics.ru Git - kernel.git/commitdiff
scsi: ufs: Fix runtime PM messages never-ending cycle
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 28 Feb 2022 11:36:52 +0000 (13:36 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 2 Mar 2022 04:56:29 +0000 (23:56 -0500)
Kernel messages produced during runtime PM can cause a never-ending cycle
because user space utilities (e.g. journald or rsyslog) write the messages
back to storage, causing runtime resume, more messages, and so on.

Messages that tell of things that are expected to happen, are arguably
unnecessary, so suppress them.

UFS driver messages are changes to from dev_err() to dev_dbg() which means
they will not display unless activated by dynamic debug of building with
-DDEBUG.

sdev->silence_suspend is set to skip messages from sd_suspend_common()
"Synchronizing SCSI cache", "Stopping disk" and scsi_report_sense()
"Power-on or device reset occurred" message (Note, that message appears
when the LUN is accessed after runtime PM, not during runtime PM)

 Example messages from Ubuntu 21.10:

 $ dmesg | tail
 [ 1620.380071] ufshcd 0000:00:12.5: ufshcd_print_pwr_info:[RX, TX]: gear=[1, 1], lane[1, 1], pwr[SLOWAUTO_MODE, SLOWAUTO_MODE], rate = 0
 [ 1620.408825] ufshcd 0000:00:12.5: ufshcd_print_pwr_info:[RX, TX]: gear=[4, 4], lane[2, 2], pwr[FAST MODE, FAST MODE], rate = 2
 [ 1620.409020] ufshcd 0000:00:12.5: ufshcd_find_max_sup_active_icc_level: Regulator capability was not set, actvIccLevel=0
 [ 1620.409524] sd 0:0:0:0: Power-on or device reset occurred
 [ 1622.938794] sd 0:0:0:0: [sda] Synchronizing SCSI cache
 [ 1622.939184] ufs_device_wlun 0:0:0:49488: Power-on or device reset occurred
 [ 1625.183175] ufshcd 0000:00:12.5: ufshcd_print_pwr_info:[RX, TX]: gear=[1, 1], lane[1, 1], pwr[SLOWAUTO_MODE, SLOWAUTO_MODE], rate = 0
 [ 1625.208041] ufshcd 0000:00:12.5: ufshcd_print_pwr_info:[RX, TX]: gear=[4, 4], lane[2, 2], pwr[FAST MODE, FAST MODE], rate = 2
 [ 1625.208311] ufshcd 0000:00:12.5: ufshcd_find_max_sup_active_icc_level: Regulator capability was not set, actvIccLevel=0
 [ 1625.209035] sd 0:0:0:0: Power-on or device reset occurred

Note for stable: depends on patch "scsi: core: sd: Add silence_suspend flag
to suppress some PM messages".

Link: https://lore.kernel.org/r/20220228113652.970857-3-adrian.hunter@intel.com
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c

index 40be73a9ba63acd84f787b27399b512d39c5447f..59c5135dcf9405683667bc0e66c81c2bae907c2c 100644 (file)
@@ -583,7 +583,12 @@ static void ufshcd_print_pwr_info(struct ufs_hba *hba)
                "INVALID MODE",
        };
 
-       dev_err(hba->dev, "%s:[RX, TX]: gear=[%d, %d], lane[%d, %d], pwr[%s, %s], rate = %d\n",
+       /*
+        * Using dev_dbg to avoid messages during runtime PM to avoid
+        * never-ending cycles of messages written back to storage by user space
+        * causing runtime resume, causing more messages and so on.
+        */
+       dev_dbg(hba->dev, "%s:[RX, TX]: gear=[%d, %d], lane[%d, %d], pwr[%s, %s], rate = %d\n",
                 __func__,
                 hba->pwr_info.gear_rx, hba->pwr_info.gear_tx,
                 hba->pwr_info.lane_rx, hba->pwr_info.lane_tx,
@@ -5022,6 +5027,12 @@ static int ufshcd_slave_configure(struct scsi_device *sdev)
                pm_runtime_get_noresume(&sdev->sdev_gendev);
        else if (ufshcd_is_rpm_autosuspend_allowed(hba))
                sdev->rpm_autosuspend = 1;
+       /*
+        * Do not print messages during runtime PM to avoid never-ending cycles
+        * of messages written back to storage by user space causing runtime
+        * resume, causing more messages and so on.
+        */
+       sdev->silence_suspend = 1;
 
        ufshcd_crypto_register(hba, q);
 
@@ -7384,7 +7395,13 @@ static u32 ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba,
 
        if (!hba->vreg_info.vcc || !hba->vreg_info.vccq ||
                                                !hba->vreg_info.vccq2) {
-               dev_err(hba->dev,
+               /*
+                * Using dev_dbg to avoid messages during runtime PM to avoid
+                * never-ending cycles of messages written back to storage by
+                * user space causing runtime resume, causing more messages and
+                * so on.
+                */
+               dev_dbg(hba->dev,
                        "%s: Regulator capability was not set, actvIccLevel=%d",
                                                        __func__, icc_level);
                goto out;