linux/include
Damien Le Moal 8368195f8a scsi: sd: Fix TCG OPAL unlock on system resume
commit 0c76106cb9 upstream.

Commit 3cc2ffe5c1 ("scsi: sd: Differentiate system and runtime start/stop
management") introduced the manage_system_start_stop scsi_device flag to
allow libata to indicate to the SCSI disk driver that nothing should be
done when resuming a disk on system resume. This change turned the
execution of sd_resume() into a no-op for ATA devices on system
resume. While this solved deadlock issues during device resume, this change
also wrongly removed the execution of opal_unlock_from_suspend().  As a
result, devices with TCG OPAL locking enabled remain locked and
inaccessible after a system resume from sleep.

To fix this issue, introduce the SCSI driver resume method and implement it
with the sd_resume() function calling opal_unlock_from_suspend(). The
former sd_resume() function is renamed to sd_resume_common() and modified
to call the new sd_resume() function. For non-ATA devices, this result in
no functional changes.

In order for libata to explicitly execute sd_resume() when a device is
resumed during system restart, the function scsi_resume_device() is
introduced. libata calls this function from the revalidation work executed
on devie resume, a state that is indicated with the new device flag
ATA_DFLAG_RESUMING. Doing so, locked TCG OPAL enabled devices are unlocked
on resume, allowing normal operation.

Fixes: 3cc2ffe5c1 ("scsi: sd: Differentiate system and runtime start/stop management")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218538
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20240319071209.1179257-1-dlemoal@kernel.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-03 15:11:54 +02:00
..
acpi ACPI: PM: Add acpi_device_fix_up_power_children() function 2023-11-20 17:31:49 +01:00
asm-generic mm: Introduce flush_cache_vmap_early() 2024-02-16 19:14:25 +01:00
clocksource
crypto crypto: af_alg - Disallow multiple in-flight AIO requests 2024-01-25 15:44:41 -08:00
drm drm/bridge: add ->edid_read hook and drm_bridge_edid_read() 2024-04-03 15:11:34 +02:00
dt-bindings clk: renesas: r8a779g0: Correct PFC/GPIO parent clocks 2024-03-26 18:18:33 -04:00
keys
kunit kunit: Add a macro to wrap a deferred action function 2024-03-01 13:41:44 +01:00
kvm KVM/arm64 updates for 6.7 2023-10-31 16:37:07 -04:00
linux scsi: sd: Fix TCG OPAL unlock on system resume 2024-04-03 15:11:54 +02:00
math-emu
media media: mc: Add num_links flag to media_pad 2024-04-03 15:11:08 +02:00
memory
misc
net wifi: cfg80211: add a flag to disable wireless extensions 2024-04-03 15:11:48 +02:00
pcmcia
ras
rdma RDMA/core: Fix umem iterator when PAGE_SIZE is greater then HCA pgsz 2023-12-04 20:02:41 -04:00
rv
scsi scsi: sd: Fix TCG OPAL unlock on system resume 2024-04-03 15:11:54 +02:00
soc soc: qcom: socinfo: rename PM2250 to PM4125 2024-03-26 18:18:05 -04:00
sound ALSA: hda/tas2781: add ptrs to calibration functions 2024-03-26 18:18:44 -04:00
target
trace tracing/net_sched: Fix tracepoints that save qdisc_dev() as a string 2024-03-15 10:48:17 -04:00
uapi virtio: Define feature bit for administration virtqueue 2024-04-03 15:11:30 +02:00
ufs
vdso
video fbdev: stifb: Make the STI next font pointer a 32-bit signed offset 2023-10-30 14:54:41 +01:00
xen xen/events: reduce externally visible helper functions 2023-11-14 09:29:28 +01:00