提交 af4edb1d 编写于 作者: A Adrian Hunter 提交者: Martin K. Petersen

scsi: core: sd: Add silence_suspend flag to suppress some PM messages

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 add a flag to suppress them. This flag is used by the UFS
driver.

Link: https://lore.kernel.org/r/20220228113652.970857-2-adrian.hunter@intel.com
Cc: stable@vger.kernel.org
Signed-off-by: NAdrian Hunter <adrian.hunter@intel.com>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 e81ce97f
...@@ -484,8 +484,13 @@ static void scsi_report_sense(struct scsi_device *sdev, ...@@ -484,8 +484,13 @@ static void scsi_report_sense(struct scsi_device *sdev,
if (sshdr->asc == 0x29) { if (sshdr->asc == 0x29) {
evt_type = SDEV_EVT_POWER_ON_RESET_OCCURRED; evt_type = SDEV_EVT_POWER_ON_RESET_OCCURRED;
sdev_printk(KERN_WARNING, sdev, /*
"Power-on or device reset occurred\n"); * Do not print message if it is an expected side-effect
* of runtime PM.
*/
if (!sdev->silence_suspend)
sdev_printk(KERN_WARNING, sdev,
"Power-on or device reset occurred\n");
} }
if (sshdr->asc == 0x2a && sshdr->ascq == 0x01) { if (sshdr->asc == 0x2a && sshdr->ascq == 0x01) {
......
...@@ -3676,7 +3676,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors) ...@@ -3676,7 +3676,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
return 0; return 0;
if (sdkp->WCE && sdkp->media_present) { if (sdkp->WCE && sdkp->media_present) {
sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n"); if (!sdkp->device->silence_suspend)
sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
ret = sd_sync_cache(sdkp, &sshdr); ret = sd_sync_cache(sdkp, &sshdr);
if (ret) { if (ret) {
...@@ -3698,7 +3699,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors) ...@@ -3698,7 +3699,8 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
} }
if (sdkp->device->manage_start_stop) { if (sdkp->device->manage_start_stop) {
sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n"); if (!sdkp->device->silence_suspend)
sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
/* an error is not worth aborting a system sleep */ /* an error is not worth aborting a system sleep */
ret = sd_start_stop_device(sdkp, 0); ret = sd_start_stop_device(sdkp, 0);
if (ignore_stop_errors) if (ignore_stop_errors)
......
...@@ -206,6 +206,7 @@ struct scsi_device { ...@@ -206,6 +206,7 @@ struct scsi_device {
unsigned rpm_autosuspend:1; /* Enable runtime autosuspend at device unsigned rpm_autosuspend:1; /* Enable runtime autosuspend at device
* creation time */ * creation time */
unsigned ignore_media_change:1; /* Ignore MEDIA CHANGE on resume */ unsigned ignore_media_change:1; /* Ignore MEDIA CHANGE on resume */
unsigned silence_suspend:1; /* Do not print runtime PM related messages */
unsigned int queue_stopped; /* request queue is quiesced */ unsigned int queue_stopped; /* request queue is quiesced */
bool offline_already; /* Device offline message logged */ bool offline_already; /* Device offline message logged */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册