History

Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging

Pull in the fixes tree for a commit that missed 6.5. Also resolve a trivial merge conflict in fnic. * 6.5/scsi-fixes: (36 commits) scsi: storvsc: Handle additional SRB status values scsi: snic: Fix double free in snic_tgt_create() scsi: core: raid_class: Remove raid_component_add() scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5 scsi: ufs: mcq: Fix the search/wrap around logic scsi: qedf: Fix firmware halt over suspend and resume scsi: qedi: Fix firmware halt over suspend and resume scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock scsi: lpfc: Remove reftag check in DIF paths scsi: ufs: renesas: Fix private allocation scsi: snic: Fix possible memory leak if device_add() fails scsi: core: Fix possible memory leak if device_add() fails scsi: core: Fix legacy /proc parsing buffer overflow scsi: 53c700: Check that command slot is not NULL scsi: fnic: Replace return codes in fnic_clean_pending_aborts() scsi: storvsc: Fix handling of virtual Fibre Channel timeouts scsi: pm80xx: Fix error return code in pm8001_pci_probe() scsi: zfcp: Defer fc_rport blocking until after ADISC response scsi: storvsc: Limit max_sectors for virtual Fibre Channel devices scsi: sg: Fix checking return value of blk_get_queue() ...

Martin K. Petersen committed 3 years ago

Commit 58330d62 parents 15924b0 812fe6433 files · +282 −235Browse files

Unified · Split

33 files
  1. Documentation/ABI/testing/sysfs-driver-ufs +38 −38
  2. block/blk-zoned.c +50 −36
  3. drivers/block/null_blk/zoned.c +5 −11
  4. drivers/block/virtio_blk.c +15 −19
  5. drivers/nvme/host/zns.c +4 −5
  6. drivers/s390/scsi/zfcp_fc.c +1 −5
  7. drivers/scsi/53c700.c +1 −1
  8. drivers/scsi/aacraid/aacraid.h +1 −1
  9. drivers/scsi/fnic/fnic_scsi.c +4 −2
  10. drivers/scsi/fnic/fnic_trace.c +1 −1
  11. drivers/scsi/lpfc/lpfc_hbadisc.c +2 −0
  12. drivers/scsi/lpfc/lpfc_scsi.c +3 −17
  13. drivers/scsi/pm8001/pm8001_init.c +2 −1
  14. drivers/scsi/qedf/qedf_main.c +18 −0
  15. drivers/scsi/qedi/qedi_main.c +21 −2
  16. drivers/scsi/qla2xxx/qla_def.h +0 −1
  17. drivers/scsi/qla2xxx/qla_init.c +2 −2
  18. drivers/scsi/qla2xxx/qla_iocb.c +3 −2
  19. drivers/scsi/raid_class.c +0 −47
  20. drivers/scsi/scsi_debug.c +0 −8
  21. drivers/scsi/scsi_proc.c +17 −13
  22. drivers/scsi/sd_zbc.c +5 −7
  23. drivers/scsi/sg.c +4 −3
  24. drivers/scsi/snic/snic_disc.c +1 −1
  25. drivers/scsi/storvsc_drv.c +13 −4
  26. drivers/ufs/core/ufs-mcq.c +4 −2
  27. drivers/ufs/core/ufshcd.c +38 −0
  28. drivers/ufs/host/Kconfig +1 −0
  29. drivers/ufs/host/ufs-qcom.c +1 −1
  30. drivers/ufs/host/ufs-renesas.c +1 −1
  31. include/linux/raid_class.h +0 −4
  32. include/uapi/scsi/scsi_bsg_ufs.h +25 −0
  33. include/ufs/ufs.h +1 −0
Documentation/ABI/testing/sysfs-driver-ufs+38−38
@@ -994,7 +994,7 @@ Description: This file shows the amount of physical memory needed · 993 unmodified lines
994994 What: /sys/bus/platform/drivers/ufshcd/*/rpm_lvl
995995 What: /sys/bus/platform/devices/*.ufs/rpm_lvl
996996 Date: September 2014
997−Contact: Subhash Jadavani <subhashj@codeaurora.org>
997+Contact: Can Guo <quic_cang@quicinc.com>
998998 Description: This entry could be used to set or show the UFS device
999999 runtime power management level. The current driver
10001000 implementation supports 7 levels with next target states:
@@ -1021,7 +1021,7 @@ Description: This entry could be used to set or show the UFS device · 20 unmodified lines
10211021 What: /sys/bus/platform/drivers/ufshcd/*/rpm_target_dev_state
10221022 What: /sys/bus/platform/devices/*.ufs/rpm_target_dev_state
10231023 Date: February 2018
1024−Contact: Subhash Jadavani <subhashj@codeaurora.org>
1024+Contact: Can Guo <quic_cang@quicinc.com>
10251025 Description: This entry shows the target power mode of an UFS device
10261026 for the chosen runtime power management level.
10271027
@@ -1030,7 +1030,7 @@ Description: This entry shows the target power mode of an UFS device · 2 unmodified lines
10301030 What: /sys/bus/platform/drivers/ufshcd/*/rpm_target_link_state
10311031 What: /sys/bus/platform/devices/*.ufs/rpm_target_link_state
10321032 Date: February 2018
1033−Contact: Subhash Jadavani <subhashj@codeaurora.org>
1033+Contact: Can Guo <quic_cang@quicinc.com>
10341034 Description: This entry shows the target state of an UFS UIC link
10351035 for the chosen runtime power management level.
10361036
@@ -1039,7 +1039,7 @@ Description: This entry shows the target state of an UFS UIC link · 2 unmodified lines
10391039 What: /sys/bus/platform/drivers/ufshcd/*/spm_lvl
10401040 What: /sys/bus/platform/devices/*.ufs/spm_lvl
10411041 Date: September 2014
1042−Contact: Subhash Jadavani <subhashj@codeaurora.org>
1042+Contact: Can Guo <quic_cang@quicinc.com>
10431043 Description: This entry could be used to set or show the UFS device
10441044 system power management level. The current driver
10451045 implementation supports 7 levels with next target states:
@@ -1066,7 +1066,7 @@ Description: This entry could be used to set or show the UFS device · 20 unmodified lines
10661066 What: /sys/bus/platform/drivers/ufshcd/*/spm_target_dev_state
10671067 What: /sys/bus/platform/devices/*.ufs/spm_target_dev_state
10681068 Date: February 2018
1069−Contact: Subhash Jadavani <subhashj@codeaurora.org>
1069+Contact: Can Guo <quic_cang@quicinc.com>
10701070 Description: This entry shows the target power mode of an UFS device
10711071 for the chosen system power management level.
10721072
@@ -1075,7 +1075,7 @@ Description: This entry shows the target power mode of an UFS device · 2 unmodified lines
10751075 What: /sys/bus/platform/drivers/ufshcd/*/spm_target_link_state
10761076 What: /sys/bus/platform/devices/*.ufs/spm_target_link_state
10771077 Date: February 2018
1078−Contact: Subhash Jadavani <subhashj@codeaurora.org>
1078+Contact: Can Guo <quic_cang@quicinc.com>
10791079 Description: This entry shows the target state of an UFS UIC link
10801080 for the chosen system power management level.
10811081
@@ -1084,7 +1084,7 @@ Description: This entry shows the target state of an UFS UIC link · 2 unmodified lines
10841084 What: /sys/bus/platform/drivers/ufshcd/*/monitor/monitor_enable
10851085 What: /sys/bus/platform/devices/*.ufs/monitor/monitor_enable
10861086 Date: January 2021
1087−Contact: Can Guo <cang@codeaurora.org>
1087+Contact: Can Guo <quic_cang@quicinc.com>
10881088 Description: This file shows the status of performance monitor enablement
10891089 and it can be used to start/stop the monitor. When the monitor
10901090 is stopped, the performance data collected is also cleared.
@@ -1092,7 +1092,7 @@ Description: This file shows the status of performance monitor enablement · 1 unmodified line
10921092 What: /sys/bus/platform/drivers/ufshcd/*/monitor/monitor_chunk_size
10931093 What: /sys/bus/platform/devices/*.ufs/monitor/monitor_chunk_size
10941094 Date: January 2021
1095−Contact: Can Guo <cang@codeaurora.org>
1095+Contact: Can Guo <quic_cang@quicinc.com>
10961096 Description: This file tells the monitor to focus on requests transferring
10971097 data of specific chunk size (in Bytes). 0 means any chunk size.
10981098 It can only be changed when monitor is disabled.
@@ -1100,7 +1100,7 @@ Description: This file tells the monitor to focus on requests transferring · 1 unmodified line
11001100 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_total_sectors
11011101 What: /sys/bus/platform/devices/*.ufs/monitor/read_total_sectors
11021102 Date: January 2021
1103−Contact: Can Guo <cang@codeaurora.org>
1103+Contact: Can Guo <quic_cang@quicinc.com>
11041104 Description: This file shows how many sectors (in 512 Bytes) have been
11051105 sent from device to host after monitor gets started.
11061106
@@ -1109,7 +1109,7 @@ Description: This file shows how many sectors (in 512 Bytes) have been · 2 unmodified lines
11091109 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_total_busy
11101110 What: /sys/bus/platform/devices/*.ufs/monitor/read_total_busy
11111111 Date: January 2021
1112−Contact: Can Guo <cang@codeaurora.org>
1112+Contact: Can Guo <quic_cang@quicinc.com>
11131113 Description: This file shows how long (in micro seconds) has been spent
11141114 sending data from device to host after monitor gets started.
11151115
@@ -1118,7 +1118,7 @@ Description: This file shows how long (in micro seconds) has been spent · 2 unmodified lines
11181118 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_nr_requests
11191119 What: /sys/bus/platform/devices/*.ufs/monitor/read_nr_requests
11201120 Date: January 2021
1121−Contact: Can Guo <cang@codeaurora.org>
1121+Contact: Can Guo <quic_cang@quicinc.com>
11221122 Description: This file shows how many read requests have been sent after
11231123 monitor gets started.
11241124
@@ -1127,7 +1127,7 @@ Description: This file shows how many read requests have been sent after · 2 unmodified lines
11271127 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_max
11281128 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_max
11291129 Date: January 2021
1130−Contact: Can Guo <cang@codeaurora.org>
1130+Contact: Can Guo <quic_cang@quicinc.com>
11311131 Description: This file shows the maximum latency (in micro seconds) of
11321132 read requests after monitor gets started.
11331133
@@ -1136,7 +1136,7 @@ Description: This file shows the maximum latency (in micro seconds) of · 2 unmodified lines
11361136 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_min
11371137 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_min
11381138 Date: January 2021
1139−Contact: Can Guo <cang@codeaurora.org>
1139+Contact: Can Guo <quic_cang@quicinc.com>
11401140 Description: This file shows the minimum latency (in micro seconds) of
11411141 read requests after monitor gets started.
11421142
@@ -1145,7 +1145,7 @@ Description: This file shows the minimum latency (in micro seconds) of · 2 unmodified lines
11451145 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_avg
11461146 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_avg
11471147 Date: January 2021
1148−Contact: Can Guo <cang@codeaurora.org>
1148+Contact: Can Guo <quic_cang@quicinc.com>
11491149 Description: This file shows the average latency (in micro seconds) of
11501150 read requests after monitor gets started.
11511151
@@ -1154,7 +1154,7 @@ Description: This file shows the average latency (in micro seconds) of · 2 unmodified lines
11541154 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_sum
11551155 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_sum
11561156 Date: January 2021
1157−Contact: Can Guo <cang@codeaurora.org>
1157+Contact: Can Guo <quic_cang@quicinc.com>
11581158 Description: This file shows the total latency (in micro seconds) of
11591159 read requests sent after monitor gets started.
11601160
@@ -1163,7 +1163,7 @@ Description: This file shows the total latency (in micro seconds) of · 2 unmodified lines
11631163 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_total_sectors
11641164 What: /sys/bus/platform/devices/*.ufs/monitor/write_total_sectors
11651165 Date: January 2021
1166−Contact: Can Guo <cang@codeaurora.org>
1166+Contact: Can Guo <quic_cang@quicinc.com>
11671167 Description: This file shows how many sectors (in 512 Bytes) have been sent
11681168 from host to device after monitor gets started.
11691169
@@ -1172,7 +1172,7 @@ Description: This file shows how many sectors (in 512 Bytes) have been sent · 2 unmodified lines
11721172 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_total_busy
11731173 What: /sys/bus/platform/devices/*.ufs/monitor/write_total_busy
11741174 Date: January 2021
1175−Contact: Can Guo <cang@codeaurora.org>
1175+Contact: Can Guo <quic_cang@quicinc.com>
11761176 Description: This file shows how long (in micro seconds) has been spent
11771177 sending data from host to device after monitor gets started.
11781178
@@ -1181,7 +1181,7 @@ Description: This file shows how long (in micro seconds) has been spent · 2 unmodified lines
11811181 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_nr_requests
11821182 What: /sys/bus/platform/devices/*.ufs/monitor/write_nr_requests
11831183 Date: January 2021
1184−Contact: Can Guo <cang@codeaurora.org>
1184+Contact: Can Guo <quic_cang@quicinc.com>
11851185 Description: This file shows how many write requests have been sent after
11861186 monitor gets started.
11871187
@@ -1190,7 +1190,7 @@ Description: This file shows how many write requests have been sent after · 2 unmodified lines
11901190 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_max
11911191 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_max
11921192 Date: January 2021
1193−Contact: Can Guo <cang@codeaurora.org>
1193+Contact: Can Guo <quic_cang@quicinc.com>
11941194 Description: This file shows the maximum latency (in micro seconds) of write
11951195 requests after monitor gets started.
11961196
@@ -1199,7 +1199,7 @@ Description: This file shows the maximum latency (in micro seconds) of write · 2 unmodified lines
11991199 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_min
12001200 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_min
12011201 Date: January 2021
1202−Contact: Can Guo <cang@codeaurora.org>
1202+Contact: Can Guo <quic_cang@quicinc.com>
12031203 Description: This file shows the minimum latency (in micro seconds) of write
12041204 requests after monitor gets started.
12051205
@@ -1208,7 +1208,7 @@ Description: This file shows the minimum latency (in micro seconds) of write · 2 unmodified lines
12081208 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_avg
12091209 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_avg
12101210 Date: January 2021
1211−Contact: Can Guo <cang@codeaurora.org>
1211+Contact: Can Guo <quic_cang@quicinc.com>
12121212 Description: This file shows the average latency (in micro seconds) of write
12131213 requests after monitor gets started.
12141214
@@ -1217,7 +1217,7 @@ Description: This file shows the average latency (in micro seconds) of write · 2 unmodified lines
12171217 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_sum
12181218 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_sum
12191219 Date: January 2021
1220−Contact: Can Guo <cang@codeaurora.org>
1220+Contact: Can Guo <quic_cang@quicinc.com>
12211221 Description: This file shows the total latency (in micro seconds) of write
12221222 requests after monitor gets started.
12231223
@@ -1226,7 +1226,7 @@ Description: This file shows the total latency (in micro seconds) of write · 2 unmodified lines
12261226 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_presv_us_en
12271227 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_presv_us_en
12281228 Date: June 2020
1229−Contact: Asutosh Das <asutoshd@codeaurora.org>
1229+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12301230 Description: This entry shows if preserve user-space was configured
12311231
12321232 The file is read only.
@@ -1234,7 +1234,7 @@ Description: This entry shows if preserve user-space was configured · 1 unmodified line
12341234 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_shared_alloc_units
12351235 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_shared_alloc_units
12361236 Date: June 2020
1237−Contact: Asutosh Das <asutoshd@codeaurora.org>
1237+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12381238 Description: This entry shows the shared allocated units of WB buffer
12391239
12401240 The file is read only.
@@ -1242,7 +1242,7 @@ Description: This entry shows the shared allocated units of WB buffer · 1 unmodified line
12421242 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_type
12431243 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_type
12441244 Date: June 2020
1245−Contact: Asutosh Das <asutoshd@codeaurora.org>
1245+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12461246 Description: This entry shows the configured WB type.
12471247 0x1 for shared buffer mode. 0x0 for dedicated buffer mode.
12481248
@@ -1251,7 +1251,7 @@ Description: This entry shows the configured WB type. · 2 unmodified lines
12511251 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_buff_cap_adj
12521252 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_buff_cap_adj
12531253 Date: June 2020
1254−Contact: Asutosh Das <asutoshd@codeaurora.org>
1254+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12551255 Description: This entry shows the total user-space decrease in shared
12561256 buffer mode.
12571257 The value of this parameter is 3 for TLC NAND when SLC mode
@@ -1262,7 +1262,7 @@ Description: This entry shows the total user-space decrease in shared · 4 unmodified lines
12621262 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_alloc_units
12631263 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_alloc_units
12641264 Date: June 2020
1265−Contact: Asutosh Das <asutoshd@codeaurora.org>
1265+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12661266 Description: This entry shows the Maximum total WriteBooster Buffer size
12671267 which is supported by the entire device.
12681268
@@ -1271,7 +1271,7 @@ Description: This entry shows the Maximum total WriteBooster Buffer size · 2 unmodified lines
12711271 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_wb_luns
12721272 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_wb_luns
12731273 Date: June 2020
1274−Contact: Asutosh Das <asutoshd@codeaurora.org>
1274+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12751275 Description: This entry shows the maximum number of luns that can support
12761276 WriteBooster.
12771277
@@ -1280,7 +1280,7 @@ Description: This entry shows the maximum number of luns that can support · 2 unmodified lines
12801280 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_red_type
12811281 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_red_type
12821282 Date: June 2020
1283−Contact: Asutosh Das <asutoshd@codeaurora.org>
1283+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12841284 Description: The supportability of user space reduction mode
12851285 and preserve user space mode.
12861286 00h: WriteBooster Buffer can be configured only in
@@ -1295,7 +1295,7 @@ Description: The supportability of user space reduction mode · 8 unmodified lines
12951295 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_wb_type
12961296 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_wb_type
12971297 Date: June 2020
1298−Contact: Asutosh Das <asutoshd@codeaurora.org>
1298+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
12991299 Description: The supportability of WriteBooster Buffer type.
13001300
13011301 === ==========================================================
@@ -1310,7 +1310,7 @@ Description: The supportability of WriteBooster Buffer type. · 8 unmodified lines
13101310 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_enable
13111311 What: /sys/bus/platform/devices/*.ufs/flags/wb_enable
13121312 Date: June 2020
1313−Contact: Asutosh Das <asutoshd@codeaurora.org>
1313+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13141314 Description: This entry shows the status of WriteBooster.
13151315
13161316 == ============================
@@ -1323,7 +1323,7 @@ Description: This entry shows the status of WriteBooster. · 6 unmodified lines
13231323 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_en
13241324 What: /sys/bus/platform/devices/*.ufs/flags/wb_flush_en
13251325 Date: June 2020
1326−Contact: Asutosh Das <asutoshd@codeaurora.org>
1326+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13271327 Description: This entry shows if flush is enabled.
13281328
13291329 == =================================
@@ -1336,7 +1336,7 @@ Description: This entry shows if flush is enabled. · 6 unmodified lines
13361336 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_during_h8
13371337 What: /sys/bus/platform/devices/*.ufs/flags/wb_flush_during_h8
13381338 Date: June 2020
1339−Contact: Asutosh Das <asutoshd@codeaurora.org>
1339+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13401340 Description: Flush WriteBooster Buffer during hibernate state.
13411341
13421342 == =================================================
@@ -1351,7 +1351,7 @@ Description: Flush WriteBooster Buffer during hibernate state. · 8 unmodified lines
13511351 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_avail_buf
13521352 What: /sys/bus/platform/devices/*.ufs/attributes/wb_avail_buf
13531353 Date: June 2020
1354−Contact: Asutosh Das <asutoshd@codeaurora.org>
1354+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13551355 Description: This entry shows the amount of unused WriteBooster buffer
13561356 available.
13571357
@@ -1360,7 +1360,7 @@ Description: This entry shows the amount of unused WriteBooster buffer · 2 unmodified lines
13601360 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_cur_buf
13611361 What: /sys/bus/platform/devices/*.ufs/attributes/wb_cur_buf
13621362 Date: June 2020
1363−Contact: Asutosh Das <asutoshd@codeaurora.org>
1363+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13641364 Description: This entry shows the amount of unused current buffer.
13651365
13661366 The file is read only.
@@ -1368,7 +1368,7 @@ Description: This entry shows the amount of unused current buffer. · 1 unmodified line
13681368 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_flush_status
13691369 What: /sys/bus/platform/devices/*.ufs/attributes/wb_flush_status
13701370 Date: June 2020
1371−Contact: Asutosh Das <asutoshd@codeaurora.org>
1371+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13721372 Description: This entry shows the flush operation status.
13731373
13741374
@@ -1385,7 +1385,7 @@ Description: This entry shows the flush operation status. · 10 unmodified lines
13851385 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_life_time_est
13861386 What: /sys/bus/platform/devices/*.ufs/attributes/wb_life_time_est
13871387 Date: June 2020
1388−Contact: Asutosh Das <asutoshd@codeaurora.org>
1388+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
13891389 Description: This entry shows an indication of the WriteBooster Buffer
13901390 lifetime based on the amount of performed program/erase cycles
13911391
@@ -1399,7 +1399,7 @@ Description: This entry shows an indication of the WriteBooster Buffer · 7 unmodified lines
13991399
14001400 What: /sys/class/scsi_device/*/device/unit_descriptor/wb_buf_alloc_units
14011401 Date: June 2020
1402−Contact: Asutosh Das <asutoshd@codeaurora.org>
1402+Contact: Asutosh Das <quic_asutoshd@quicinc.com>
14031403 Description: This entry shows the configured size of WriteBooster buffer.
14041404 0400h corresponds to 4GB.
14051405
block/blk-zoned.c+50−36
@@ -442,7 +442,6 @@ struct blk_revalidate_zone_args { · 441 unmodified lines
442442 unsigned long *conv_zones_bitmap;
443443 unsigned long *seq_zones_wlock;
444444 unsigned int nr_zones;
445− sector_t zone_sectors;
446445 sector_t sector;
447446 };
448447
@@ -456,38 +455,34 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx, · 7 unmodified lines
456455 struct gendisk *disk = args->disk;
457456 struct request_queue *q = disk->queue;
458457 sector_t capacity = get_capacity(disk);
458+ sector_t zone_sectors = q->limits.chunk_sectors;
459+
460+ /* Check for bad zones and holes in the zone report */
461+ if (zone->start != args->sector) {
462+ pr_warn("%s: Zone gap at sectors %llu..%llu\n",
463+ disk->disk_name, args->sector, zone->start);
464+ return -ENODEV;
465+ }
466+
467+ if (zone->start >= capacity || !zone->len) {
468+ pr_warn("%s: Invalid zone start %llu, length %llu\n",
469+ disk->disk_name, zone->start, zone->len);
470+ return -ENODEV;
471+ }
459472
460473 /*
461474 * All zones must have the same size, with the exception on an eventual
462475 * smaller last zone.
463476 */
464− if (zone->start == 0) {
465− if (zone->len == 0 || !is_power_of_2(zone->len)) {
466− pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n",
467− disk->disk_name, zone->len);
468− return -ENODEV;
469− }
470−
471− args->zone_sectors = zone->len;
472− args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len);
473− } else if (zone->start + args->zone_sectors < capacity) {
474− if (zone->len != args->zone_sectors) {
477+ if (zone->start + zone->len < capacity) {
478+ if (zone->len != zone_sectors) {
475479 pr_warn("%s: Invalid zoned device with non constant zone size\n",
476480 disk->disk_name);
477481 return -ENODEV;
478482 }
479− } else {
480− if (zone->len > args->zone_sectors) {
481− pr_warn("%s: Invalid zoned device with larger last zone size\n",
482− disk->disk_name);
483− return -ENODEV;
484− }
485− }
486−
487− /* Check for holes in the zone report */
488− if (zone->start != args->sector) {
489− pr_warn("%s: Zone gap at sectors %llu..%llu\n",
490− disk->disk_name, args->sector, zone->start);
483+ } else if (zone->len > zone_sectors) {
484+ pr_warn("%s: Invalid zoned device with larger last zone size\n",
485+ disk->disk_name);
491486 return -ENODEV;
492487 }
493488
@@ -526,11 +521,13 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx, · 32 unmodified lines
526521 * @disk: Target disk
527522 * @update_driver_data: Callback to update driver data on the frozen disk
528523 *
529− * Helper function for low-level device drivers to (re) allocate and initialize
530− * a disk request queue zone bitmaps. This functions should normally be called
531− * within the disk ->revalidate method for blk-mq based drivers. For BIO based
532− * drivers only q->nr_zones needs to be updated so that the sysfs exposed value
533− * is correct.
524+ * Helper function for low-level device drivers to check and (re) allocate and
525+ * initialize a disk request queue zone bitmaps. This functions should normally
526+ * be called within the disk ->revalidate method for blk-mq based drivers.
527+ * Before calling this function, the device driver must already have set the
528+ * device zone size (chunk_sector limit) and the max zone append limit.
529+ * For BIO based drivers, this function cannot be used. BIO based device drivers
530+ * only need to set disk->nr_zones so that the sysfs exposed value is correct.
534531 * If the @update_driver_data callback function is not NULL, the callback is
535532 * executed with the device request queue frozen after all zones have been
536533 * checked.
@@ -539,9 +536,9 @@ int blk_revalidate_disk_zones(struct gendisk *disk, · 2 unmodified lines
539536 void (*update_driver_data)(struct gendisk *disk))
540537 {
541538 struct request_queue *q = disk->queue;
542− struct blk_revalidate_zone_args args = {
543− .disk = disk,
544− };
539+ sector_t zone_sectors = q->limits.chunk_sectors;
540+ sector_t capacity = get_capacity(disk);
541+ struct blk_revalidate_zone_args args = { };
545542 unsigned int noio_flag;
546543 int ret;
547544
@@ -550,13 +547,31 @@ int blk_revalidate_disk_zones(struct gendisk *disk, · 2 unmodified lines
550547 if (WARN_ON_ONCE(!queue_is_mq(q)))
551548 return -EIO;
552549
553− if (!get_capacity(disk))
554− return -EIO;
550+ if (!capacity)
551+ return -ENODEV;
552+
553+ /*
554+ * Checks that the device driver indicated a valid zone size and that
555+ * the max zone append limit is set.
556+ */
557+ if (!zone_sectors || !is_power_of_2(zone_sectors)) {
558+ pr_warn("%s: Invalid non power of two zone size (%llu)\n",
559+ disk->disk_name, zone_sectors);
560+ return -ENODEV;
561+ }
562+
563+ if (!q->limits.max_zone_append_sectors) {
564+ pr_warn("%s: Invalid 0 maximum zone append limit\n",
565+ disk->disk_name);
566+ return -ENODEV;
567+ }
555568
556569 /*
557570 * Ensure that all memory allocations in this context are done as if
558571 * GFP_NOIO was specified.
559572 */
573+ args.disk = disk;
574+ args.nr_zones = (capacity + zone_sectors - 1) >> ilog2(zone_sectors);
560575 noio_flag = memalloc_noio_save();
561576 ret = disk->fops->report_zones(disk, 0, UINT_MAX,
562577 blk_revalidate_zone_cb, &args);
@@ -570,7 +585,7 @@ int blk_revalidate_disk_zones(struct gendisk *disk, · 7 unmodified lines
570585 * If zones where reported, make sure that the entire disk capacity
571586 * has been checked.
572587 */
573− if (ret > 0 && args.sector != get_capacity(disk)) {
588+ if (ret > 0 && args.sector != capacity) {
574589 pr_warn("%s: Missing zones from sector %llu\n",
575590 disk->disk_name, args.sector);
576591 ret = -ENODEV;
@@ -583,7 +598,6 @@ int blk_revalidate_disk_zones(struct gendisk *disk, · 6 unmodified lines
583598 */
584599 blk_mq_freeze_queue(q);
585600 if (ret > 0) {
586− blk_queue_chunk_sectors(q, args.zone_sectors);
587601 disk->nr_zones = args.nr_zones;
588602 swap(disk->seq_zones_wlock, args.seq_zones_wlock);
589603 swap(disk->conv_zones_bitmap, args.conv_zones_bitmap);
drivers/block/null_blk/zoned.c+5−11
@@ -162,21 +162,15 @@ int null_register_zoned_dev(struct nullb *nullb) · 161 unmodified lines
162162 disk_set_zoned(nullb->disk, BLK_ZONED_HM);
163163 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
164164 blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE);
165−
166− if (queue_is_mq(q)) {
167− int ret = blk_revalidate_disk_zones(nullb->disk, NULL);
168−
169− if (ret)
170− return ret;
171− } else {
172− blk_queue_chunk_sectors(q, dev->zone_size_sects);
173− nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0);
174− }
175−
165+ blk_queue_chunk_sectors(q, dev->zone_size_sects);
166+ nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0);
176167 blk_queue_max_zone_append_sectors(q, dev->zone_size_sects);
177168 disk_set_max_open_zones(nullb->disk, dev->zone_max_open);
178169 disk_set_max_active_zones(nullb->disk, dev->zone_max_active);
179170
171+ if (queue_is_mq(q))
172+ return blk_revalidate_disk_zones(nullb->disk, NULL);
173+
180174 return 0;
181175 }
182176
drivers/block/virtio_blk.c+15−19
@@ -751,7 +751,6 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev, · 750 unmodified lines
751751 {
752752 u32 v, wg;
753753 u8 model;
754− int ret;
755754
756755 virtio_cread(vdev, struct virtio_blk_config,
757756 zoned.model, &model);
@@ -806,6 +805,7 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev, · 48 unmodified lines
806805 vblk->zone_sectors);
807806 return -ENODEV;
808807 }
808+ blk_queue_chunk_sectors(q, vblk->zone_sectors);
809809 dev_dbg(&vdev->dev, "zone sectors = %u\n", vblk->zone_sectors);
810810
811811 if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) {
@@ -814,26 +814,22 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev, · 2 unmodified lines
814814 blk_queue_max_discard_sectors(q, 0);
815815 }
816816
817− ret = blk_revalidate_disk_zones(vblk->disk, NULL);
818− if (!ret) {
819− virtio_cread(vdev, struct virtio_blk_config,
820− zoned.max_append_sectors, &v);
821− if (!v) {
822− dev_warn(&vdev->dev, "zero max_append_sectors reported\n");
823− return -ENODEV;
824− }
825− if ((v << SECTOR_SHIFT) < wg) {
826− dev_err(&vdev->dev,
827− "write granularity %u exceeds max_append_sectors %u limit\n",
828− wg, v);
829− return -ENODEV;
830− }
831−
832− blk_queue_max_zone_append_sectors(q, v);
833− dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
817+ virtio_cread(vdev, struct virtio_blk_config,
818+ zoned.max_append_sectors, &v);
819+ if (!v) {
820+ dev_warn(&vdev->dev, "zero max_append_sectors reported\n");
821+ return -ENODEV;
822+ }
823+ if ((v << SECTOR_SHIFT) < wg) {
824+ dev_err(&vdev->dev,
825+ "write granularity %u exceeds max_append_sectors %u limit\n",
826+ wg, v);
827+ return -ENODEV;
834828 }
829+ blk_queue_max_zone_append_sectors(q, v);
830+ dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
835831
836− return ret;
832+ return blk_revalidate_disk_zones(vblk->disk, NULL);
837833 }
838834
839835 #else
drivers/nvme/host/zns.c+4−5
@@ -10,12 +10,11 @@ · 9 unmodified lines
1010 int nvme_revalidate_zones(struct nvme_ns *ns)
1111 {
1212 struct request_queue *q = ns->queue;
13− int ret;
1413
15− ret = blk_revalidate_disk_zones(ns->disk, NULL);
16− if (!ret)
17− blk_queue_max_zone_append_sectors(q, ns->ctrl->max_zone_append);
18− return ret;
14+ blk_queue_chunk_sectors(q, ns->zsze);
15+ blk_queue_max_zone_append_sectors(q, ns->ctrl->max_zone_append);
16+
17+ return blk_revalidate_disk_zones(ns->disk, NULL);
1918 }
2019
2120 static int nvme_set_max_append(struct nvme_ctrl *ctrl)
drivers/s390/scsi/zfcp_fc.c+1−5
@@ -534,8 +534,7 @@ static void zfcp_fc_adisc_handler(void *data) · 533 unmodified lines
534534
535535 /* re-init to undo drop from zfcp_fc_adisc() */
536536 port->d_id = ntoh24(adisc_resp->adisc_port_id);
537− /* port is good, unblock rport without going through erp */
538− zfcp_scsi_schedule_rport_register(port);
537+ /* port is still good, nothing to do */
539538 out:
540539 atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status);
541540 put_device(&port->dev);
@@ -595,9 +594,6 @@ void zfcp_fc_link_test_work(struct work_struct *work) · 53 unmodified lines
595594 int retval;
596595
597596 set_worker_desc("zadisc%16llx", port->wwpn); /* < WORKER_DESC_LEN=24 */
598− get_device(&port->dev);
599− port->rport_task = RPORT_DEL;
600− zfcp_scsi_rport_work(&port->rport_work);
601597
602598 /* only issue one test command at one time per port */
603599 if (atomic_read(&port->status) & ZFCP_STATUS_PORT_LINK_TEST)
drivers/scsi/53c700.c+1−1
@@ -1598,7 +1598,7 @@ NCR_700_intr(int irq, void *dev_id) · 1597 unmodified lines
15981598 printk("scsi%d (%d:%d) PHASE MISMATCH IN SEND MESSAGE %d remain, return %p[%04x], phase %s\n", host->host_no, pun, lun, count, (void *)temp, temp - hostdata->pScript, sbcl_to_string(NCR_700_readb(host, SBCL_REG)));
15991599 #endif
16001600 resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch;
1601− } else if(dsp >= to32bit(&slot->pSG[0].ins) &&
1601+ } else if (slot && dsp >= to32bit(&slot->pSG[0].ins) &&
16021602 dsp <= to32bit(&slot->pSG[NCR_700_SG_SEGMENTS].ins)) {
16031603 int data_transfer = NCR_700_readl(host, DBC_REG) & 0xffffff;
16041604 int SGcount = (dsp - to32bit(&slot->pSG[0].ins))/sizeof(struct NCR_700_SG_List);
drivers/scsi/aacraid/aacraid.h+1−1
@@ -2618,7 +2618,7 @@ struct aac_hba_info { · 2617 unmodified lines
26182618 struct aac_aifcmd {
26192619 __le32 command; /* Tell host what type of notify this is */
26202620 __le32 seqnum; /* To allow ordering of reports (if necessary) */
2621− u8 data[1]; /* Undefined length (from kernel viewpoint) */
2621+ u8 data[]; /* Undefined length (from kernel viewpoint) */
26222622 };
26232623
26242624 /**
drivers/scsi/fnic/fnic_scsi.c+4−2
@@ -2139,7 +2139,7 @@ static int fnic_clean_pending_aborts(struct fnic *fnic, · 2138 unmodified lines
21392139 bool new_sc)
21402140
21412141 {
2142− int ret = SUCCESS;
2142+ int ret = 0;
21432143 struct fnic_pending_aborts_iter_data iter_data = {
21442144 .fnic = fnic,
21452145 .lun_dev = lr_sc->device,
@@ -2159,9 +2159,11 @@ static int fnic_clean_pending_aborts(struct fnic *fnic, · 13 unmodified lines
21592159
21602160 /* walk again to check, if IOs are still pending in fw */
21612161 if (fnic_is_abts_pending(fnic, lr_sc))
2162− ret = FAILED;
2162+ ret = 1;
21632163
21642164 clean_pending_aborts_end:
2165+ FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2166+ "%s: exit status: %d\n", __func__, ret);
21652167 return ret;
21662168 }
21672169
drivers/scsi/fnic/fnic_trace.c+1−1
@@ -465,7 +465,7 @@ int fnic_trace_buf_init(void) · 464 unmodified lines
465465 fnic_max_trace_entries = (trace_max_pages * PAGE_SIZE)/
466466 FNIC_ENTRY_SIZE_BYTES;
467467
468− fnic_trace_buf_p = (unsigned long)vzalloc(trace_max_pages * PAGE_SIZE);
468+ fnic_trace_buf_p = (unsigned long)vcalloc(trace_max_pages, PAGE_SIZE);
469469 if (!fnic_trace_buf_p) {
470470 printk(KERN_ERR PFX "Failed to allocate memory "
471471 "for fnic_trace_buf_p\n");
drivers/scsi/lpfc/lpfc_hbadisc.c+2−0
@@ -6971,7 +6971,9 @@ lpfc_unregister_fcf_rescan(struct lpfc_hba *phba) · 6970 unmodified lines
69716971 if (rc)
69726972 return;
69736973 /* Reset HBA FCF states after successful unregister FCF */
6974+ spin_lock_irq(&phba->hbalock);
69746975 phba->fcf.fcf_flag = 0;
6976+ spin_unlock_irq(&phba->hbalock);
69756977 phba->fcf.current_rec.flag = 0;
69766978
69776979 /*
drivers/scsi/lpfc/lpfc_scsi.c+3−17
@@ -109,8 +109,6 @@ lpfc_sli4_set_rsp_sgl_last(struct lpfc_hba *phba, · 108 unmodified lines
109109 }
110110 }
111111
112−#define LPFC_INVALID_REFTAG ((u32)-1)
113−
114112 /**
115113 * lpfc_rampdown_queue_depth - Post RAMP_DOWN_QUEUE event to worker thread
116114 * @phba: The Hba for which this call is being executed.
@@ -978,8 +976,6 @@ lpfc_bg_err_inject(struct lpfc_hba *phba, struct scsi_cmnd *sc, · 861 unmodified lines
978976
979977 sgpe = scsi_prot_sglist(sc);
980978 lba = scsi_prot_ref_tag(sc);
981− if (lba == LPFC_INVALID_REFTAG)
982− return 0;
983979
984980 /* First check if we need to match the LBA */
985981 if (phba->lpfc_injerr_lba != LPFC_INJERR_LBA_OFF) {
@@ -1560,8 +1556,6 @@ lpfc_bg_setup_bpl(struct lpfc_hba *phba, struct scsi_cmnd *sc, · 574 unmodified lines
15601556
15611557 /* extract some info from the scsi command for pde*/
15621558 reftag = scsi_prot_ref_tag(sc);
1563− if (reftag == LPFC_INVALID_REFTAG)
1564− goto out;
15651559
15661560 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
15671561 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
@@ -1723,8 +1717,6 @@ lpfc_bg_setup_bpl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc, · 155 unmodified lines
17231717 /* extract some info from the scsi command */
17241718 blksize = scsi_prot_interval(sc);
17251719 reftag = scsi_prot_ref_tag(sc);
1726− if (reftag == LPFC_INVALID_REFTAG)
1727− goto out;
17281720
17291721 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
17301722 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
@@ -1953,8 +1945,6 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc, · 222 unmodified lines
19531945
19541946 /* extract some info from the scsi command for pde*/
19551947 reftag = scsi_prot_ref_tag(sc);
1956− if (reftag == LPFC_INVALID_REFTAG)
1957− goto out;
19581948
19591949 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
19601950 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
@@ -2154,8 +2144,6 @@ lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc, · 193 unmodified lines
21542144 /* extract some info from the scsi command */
21552145 blksize = scsi_prot_interval(sc);
21562146 reftag = scsi_prot_ref_tag(sc);
2157− if (reftag == LPFC_INVALID_REFTAG)
2158− goto out;
21592147
21602148 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
21612149 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1);
@@ -2746,8 +2734,6 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd) · 584 unmodified lines
27462734
27472735 src = (struct scsi_dif_tuple *)sg_virt(sgpe);
27482736 start_ref_tag = scsi_prot_ref_tag(cmd);
2749− if (start_ref_tag == LPFC_INVALID_REFTAG)
2750− goto out;
27512737 start_app_tag = src->app_tag;
27522738 len = sgpe->length;
27532739 while (src && protsegcnt) {
@@ -3493,11 +3479,11 @@ err: · 739 unmodified lines
34933479 scsi_cmnd->sc_data_direction);
34943480
34953481 lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT,
3496− "9084 Cannot setup S/G List for HBA"
3497− "IO segs %d/%d SGL %d SCSI %d: %d %d\n",
3482+ "9084 Cannot setup S/G List for HBA "
3483+ "IO segs %d/%d SGL %d SCSI %d: %d %d %d\n",
34983484 lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt,
34993485 phba->cfg_total_seg_cnt, phba->cfg_sg_seg_cnt,
3500− prot_group_type, num_sge);
3486+ prot_group_type, num_sge, ret);
35013487
35023488 lpfc_cmd->seg_cnt = 0;
35033489 lpfc_cmd->prot_seg_cnt = 0;
drivers/scsi/pm8001/pm8001_init.c+2−1
@@ -1178,7 +1178,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev, · 1177 unmodified lines
11781178 pm80xx_set_thermal_config(pm8001_ha);
11791179 }
11801180
1181− if (pm8001_init_sas_add(pm8001_ha))
1181+ rc = pm8001_init_sas_add(pm8001_ha);
1182+ if (rc)
11821183 goto err_out_shost;
11831184 /* phy setting support for motherboard controller */
11841185 rc = pm8001_configure_phy_settings(pm8001_ha);
drivers/scsi/qedf/qedf_main.c+18−0
@@ -31,6 +31,7 @@ static void qedf_remove(struct pci_dev *pdev); · 30 unmodified lines
3131 static void qedf_shutdown(struct pci_dev *pdev);
3232 static void qedf_schedule_recovery_handler(void *dev);
3333 static void qedf_recovery_handler(struct work_struct *work);
34+static int qedf_suspend(struct pci_dev *pdev, pm_message_t state);
3435
3536 /*
3637 * Driver module parameters.
@@ -3271,6 +3272,7 @@ static struct pci_driver qedf_pci_driver = { · 3234 unmodified lines
32713272 .probe = qedf_probe,
32723273 .remove = qedf_remove,
32733274 .shutdown = qedf_shutdown,
3275+ .suspend = qedf_suspend,
32743276 };
32753277
32763278 static int __qedf_probe(struct pci_dev *pdev, int mode)
@@ -4000,6 +4002,22 @@ static void qedf_shutdown(struct pci_dev *pdev) · 723 unmodified lines
40004002 __qedf_remove(pdev, QEDF_MODE_NORMAL);
40014003 }
40024004
4005+static int qedf_suspend(struct pci_dev *pdev, pm_message_t state)
4006+{
4007+ struct qedf_ctx *qedf;
4008+
4009+ if (!pdev) {
4010+ QEDF_ERR(NULL, "pdev is NULL.\n");
4011+ return -ENODEV;
4012+ }
4013+
4014+ qedf = pci_get_drvdata(pdev);
4015+
4016+ QEDF_ERR(&qedf->dbg_ctx, "%s: Device does not support suspend operation\n", __func__);
4017+
4018+ return -EPERM;
4019+}
4020+
40034021 /*
40044022 * Recovery handler code
40054023 */
drivers/scsi/qedi/qedi_main.c+21−2
@@ -69,6 +69,7 @@ static struct nvm_iscsi_block *qedi_get_nvram_block(struct qedi_ctx *qedi); · 68 unmodified lines
6969 static void qedi_recovery_handler(struct work_struct *work);
7070 static void qedi_schedule_hw_err_handler(void *dev,
7171 enum qed_hw_err_type err_type);
72+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state);
7273
7374 static int qedi_iscsi_event_cb(void *context, u8 fw_event_code, void *fw_handle)
7475 {
@@ -1976,8 +1977,9 @@ static int qedi_cpu_offline(unsigned int cpu) · 1901 unmodified lines
19761977 struct qedi_percpu_s *p = this_cpu_ptr(&qedi_percpu);
19771978 struct qedi_work *work, *tmp;
19781979 struct task_struct *thread;
1980+ unsigned long flags;
19791981
1980− spin_lock_bh(&p->p_work_lock);
1982+ spin_lock_irqsave(&p->p_work_lock, flags);
19811983 thread = p->iothread;
19821984 p->iothread = NULL;
19831985
@@ -1988,7 +1990,7 @@ static int qedi_cpu_offline(unsigned int cpu) · 4 unmodified lines
19881990 kfree(work);
19891991 }
19901992
1991− spin_unlock_bh(&p->p_work_lock);
1993+ spin_unlock_irqrestore(&p->p_work_lock, flags);
19921994 if (thread)
19931995 kthread_stop(thread);
19941996 return 0;
@@ -2510,6 +2512,22 @@ static void qedi_shutdown(struct pci_dev *pdev) · 515 unmodified lines
25102512 __qedi_remove(pdev, QEDI_MODE_SHUTDOWN);
25112513 }
25122514
2515+static int qedi_suspend(struct pci_dev *pdev, pm_message_t state)
2516+{
2517+ struct qedi_ctx *qedi;
2518+
2519+ if (!pdev) {
2520+ QEDI_ERR(NULL, "pdev is NULL.\n");
2521+ return -ENODEV;
2522+ }
2523+
2524+ qedi = pci_get_drvdata(pdev);
2525+
2526+ QEDI_ERR(&qedi->dbg_ctx, "%s: Device does not support suspend operation\n", __func__);
2527+
2528+ return -EPERM;
2529+}
2530+
25132531 static int __qedi_probe(struct pci_dev *pdev, int mode)
25142532 {
25152533 struct qedi_ctx *qedi;
@@ -2868,6 +2886,7 @@ static struct pci_driver qedi_pci_driver = { · 352 unmodified lines
28682886 .remove = qedi_remove,
28692887 .shutdown = qedi_shutdown,
28702888 .err_handler = &qedi_err_handler,
2889+ .suspend = qedi_suspend,
28712890 };
28722891
28732892 static int __init qedi_init(void)
drivers/scsi/qla2xxx/qla_def.h+0−1
@@ -4502,7 +4502,6 @@ struct qla_hw_data { · 4501 unmodified lines
45024502
45034503 /* n2n */
45044504 struct fc_els_flogi plogi_els_payld;
4505−#define LOGIN_TEMPLATE_SIZE (sizeof(struct fc_els_flogi) - 4)
45064505
45074506 void *swl;
45084507
drivers/scsi/qla2xxx/qla_init.c+2−2
@@ -8499,7 +8499,7 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, · 8498 unmodified lines
84998499 ql_dbg(ql_dbg_init, vha, 0x0163,
85008500 "-> fwdt%u template allocate template %#x words...\n",
85018501 j, risc_size);
8502− fwdt->template = vmalloc(risc_size * sizeof(*dcode));
8502+ fwdt->template = vmalloc_array(risc_size, sizeof(*dcode));
85038503 if (!fwdt->template) {
85048504 ql_log(ql_log_warn, vha, 0x0164,
85058505 "-> fwdt%u failed allocate template.\n", j);
@@ -8754,7 +8754,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) · 248 unmodified lines
87548754 ql_dbg(ql_dbg_init, vha, 0x0173,
87558755 "-> fwdt%u template allocate template %#x words...\n",
87568756 j, risc_size);
8757− fwdt->template = vmalloc(risc_size * sizeof(*dcode));
8757+ fwdt->template = vmalloc_array(risc_size, sizeof(*dcode));
87588758 if (!fwdt->template) {
87598759 ql_log(ql_log_warn, vha, 0x0174,
87608760 "-> fwdt%u failed allocate template.\n", j);
drivers/scsi/qla2xxx/qla_iocb.c+3−2
@@ -3072,7 +3072,8 @@ qla24xx_els_dcmd2_iocb(scsi_qla_host_t *vha, int els_opcode, · 3071 unmodified lines
30723072 memset(ptr, 0, sizeof(struct els_plogi_payload));
30733073 memset(resp_ptr, 0, sizeof(struct els_plogi_payload));
30743074 memcpy(elsio->u.els_plogi.els_plogi_pyld->data,
3075− &ha->plogi_els_payld.fl_csp, LOGIN_TEMPLATE_SIZE);
3075+ (void *)&ha->plogi_els_payld + offsetof(struct fc_els_flogi, fl_csp),
3076+ sizeof(ha->plogi_els_payld) - offsetof(struct fc_els_flogi, fl_csp));
30763077
30773078 elsio->u.els_plogi.els_cmd = els_opcode;
30783079 elsio->u.els_plogi.els_plogi_pyld->opcode = els_opcode;
@@ -3919,7 +3920,7 @@ qla2x00_start_sp(srb_t *sp) · 840 unmodified lines
39193920
39203921 pkt = __qla2x00_alloc_iocbs(sp->qpair, sp);
39213922 if (!pkt) {
3922− rval = EAGAIN;
3923+ rval = -EAGAIN;
39233924 ql_log(ql_log_warn, vha, 0x700c,
39243925 "qla2x00_alloc_iocbs failed.\n");
39253926 goto done;
drivers/scsi/raid_class.c+0−47
@@ -209,53 +209,6 @@ raid_attr_ro_state(level); · 208 unmodified lines
209209 raid_attr_ro_fn(resync);
210210 raid_attr_ro_state_fn(state);
211211
212−static void raid_component_release(struct device *dev)
213−{
214− struct raid_component *rc =
215− container_of(dev, struct raid_component, dev);
216− dev_printk(KERN_ERR, rc->dev.parent, "COMPONENT RELEASE\n");
217− put_device(rc->dev.parent);
218− kfree(rc);
219−}
220−
221−int raid_component_add(struct raid_template *r,struct device *raid_dev,
222− struct device *component_dev)
223−{
224− struct device *cdev =
225− attribute_container_find_class_device(&r->raid_attrs.ac,
226− raid_dev);
227− struct raid_component *rc;
228− struct raid_data *rd = dev_get_drvdata(cdev);
229− int err;
230−
231− rc = kzalloc(sizeof(*rc), GFP_KERNEL);
232− if (!rc)
233− return -ENOMEM;
234−
235− INIT_LIST_HEAD(&rc->node);
236− device_initialize(&rc->dev);
237− rc->dev.release = raid_component_release;
238− rc->dev.parent = get_device(component_dev);
239− rc->num = rd->component_count++;
240−
241− dev_set_name(&rc->dev, "component-%d", rc->num);
242− list_add_tail(&rc->node, &rd->component_list);
243− rc->dev.class = &raid_class.class;
244− err = device_add(&rc->dev);
245− if (err)
246− goto err_out;
247−
248− return 0;
249−
250−err_out:
251− list_del(&rc->node);
252− rd->component_count--;
253− put_device(component_dev);
254− kfree(rc);
255− return err;
256−}
257−EXPORT_SYMBOL(raid_component_add);
258−
259212 struct raid_template *
260213 raid_class_attach(struct raid_function_template *ft)
261214 {
drivers/scsi/scsi_debug.c+0−8
@@ -841,11 +841,6 @@ static int sdeb_zbc_nr_conv = DEF_ZBC_NR_CONV_ZONES; · 840 unmodified lines
841841 static int submit_queues = DEF_SUBMIT_QUEUES; /* > 1 for multi-queue (mq) */
842842 static int poll_queues; /* iouring iopoll interface.*/
843843
844−static DEFINE_RWLOCK(atomic_rw);
845−static DEFINE_RWLOCK(atomic_rw2);
846−
847−static rwlock_t *ramdisk_lck_a[2];
848−
849844 static char sdebug_proc_name[] = MY_NAME;
850845 static const char *my_name = MY_NAME;
851846
@@ -6818,9 +6813,6 @@ static int __init scsi_debug_init(void) · 5966 unmodified lines
68186813 int k, ret, hosts_to_add;
68196814 int idx = -1;
68206815
6821− ramdisk_lck_a[0] = &atomic_rw;
6822− ramdisk_lck_a[1] = &atomic_rw2;
6823−
68246816 if (sdebug_ndelay >= 1000 * 1000 * 1000) {
68256817 pr_warn("ndelay must be less than 1 second, ignored\n");
68266818 sdebug_ndelay = 0;
drivers/scsi/scsi_proc.c+17−13
@@ -406,7 +406,7 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, · 405 unmodified lines
406406 size_t length, loff_t *ppos)
407407 {
408408 int host, channel, id, lun;
409− char *buffer, *p;
409+ char *buffer, *end, *p;
410410 int err;
411411
412412 if (!buf || length > PAGE_SIZE)
@@ -421,10 +421,14 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, · 8 unmodified lines
421421 goto out;
422422
423423 err = -EINVAL;
424− if (length < PAGE_SIZE)
425− buffer[length] = '\0';
426− else if (buffer[PAGE_SIZE-1])
427− goto out;
424+ if (length < PAGE_SIZE) {
425+ end = buffer + length;
426+ *end = '\0';
427+ } else {
428+ end = buffer + PAGE_SIZE - 1;
429+ if (*end)
430+ goto out;
431+ }
428432
429433 /*
430434 * Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
@@ -433,10 +437,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, · 2 unmodified lines
433437 if (!strncmp("scsi add-single-device", buffer, 22)) {
434438 p = buffer + 23;
435439
436− host = simple_strtoul(p, &p, 0);
437− channel = simple_strtoul(p + 1, &p, 0);
438− id = simple_strtoul(p + 1, &p, 0);
439− lun = simple_strtoul(p + 1, &p, 0);
440+ host = (p < end) ? simple_strtoul(p, &p, 0) : 0;
441+ channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
442+ id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
443+ lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
440444
441445 err = scsi_add_single_device(host, channel, id, lun);
442446
@@ -447,10 +451,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf, · 4 unmodified lines
447451 } else if (!strncmp("scsi remove-single-device", buffer, 25)) {
448452 p = buffer + 26;
449453
450− host = simple_strtoul(p, &p, 0);
451− channel = simple_strtoul(p + 1, &p, 0);
452− id = simple_strtoul(p + 1, &p, 0);
453− lun = simple_strtoul(p + 1, &p, 0);
454+ host = (p < end) ? simple_strtoul(p, &p, 0) : 0;
455+ channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
456+ id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
457+ lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0;
454458
455459 err = scsi_remove_single_device(host, channel, id, lun);
456460 }
drivers/scsi/sd_zbc.c+5−7
@@ -831,7 +831,6 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp) · 830 unmodified lines
831831 struct request_queue *q = disk->queue;
832832 u32 zone_blocks = sdkp->early_zone_info.zone_blocks;
833833 unsigned int nr_zones = sdkp->early_zone_info.nr_zones;
834− u32 max_append;
835834 int ret = 0;
836835 unsigned int flags;
837836
@@ -876,6 +875,11 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp) · 38 unmodified lines
876875 goto unlock;
877876 }
878877
878+ blk_queue_chunk_sectors(q,
879+ logical_to_sectors(sdkp->device, zone_blocks));
880+ blk_queue_max_zone_append_sectors(q,
881+ q->limits.max_segments << PAGE_SECTORS_SHIFT);
882+
879883 ret = blk_revalidate_disk_zones(disk, sd_zbc_revalidate_zones_cb);
880884
881885 memalloc_noio_restore(flags);
@@ -888,12 +892,6 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp) · 6 unmodified lines
888892 goto unlock;
889893 }
890894
891− max_append = min_t(u32, logical_to_sectors(sdkp->device, zone_blocks),
892− q->limits.max_segments << PAGE_SECTORS_SHIFT);
893− max_append = min_t(u32, max_append, queue_max_hw_sectors(q));
894−
895− blk_queue_max_zone_append_sectors(q, max_append);
896−
897895 sd_zbc_print_zones(sdkp);
898896
899897 unlock:
drivers/scsi/sg.c+4−3
@@ -1497,9 +1497,10 @@ sg_add_device(struct device *cl_dev) · 1496 unmodified lines
14971497 int error;
14981498 unsigned long iflags;
14991499
1500− error = blk_get_queue(scsidp->request_queue);
1501− if (error)
1502− return error;
1500+ if (!blk_get_queue(scsidp->request_queue)) {
1501+ pr_warn("%s: get scsi_device queue failed\n", __func__);
1502+ return -ENODEV;
1503+ }
15031504
15041505 error = -ENOMEM;
15051506 cdev = cdev_alloc();
drivers/scsi/snic/snic_disc.c+1−1
@@ -307,7 +307,7 @@ snic_tgt_create(struct snic *snic, struct snic_tgt_id *tgtid) · 306 unmodified lines
307307 spin_lock_irqsave(snic->shost->host_lock, flags);
308308 list_del(&tgt->list);
309309 spin_unlock_irqrestore(snic->shost->host_lock, flags);
310− kfree(tgt);
310+ put_device(&tgt->dev);
311311 tgt = NULL;
312312
313313 return tgt;
drivers/scsi/storvsc_drv.c+13−4
@@ -316,8 +316,12 @@ enum storvsc_request_type { · 315 unmodified lines
316316 #define SRB_STATUS_ABORTED 0x02
317317 #define SRB_STATUS_ERROR 0x04
318318 #define SRB_STATUS_INVALID_REQUEST 0x06
319+#define SRB_STATUS_TIMEOUT 0x09
320+#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
321+#define SRB_STATUS_BUS_RESET 0x0E
319322 #define SRB_STATUS_DATA_OVERRUN 0x12
320323 #define SRB_STATUS_INVALID_LUN 0x20
324+#define SRB_STATUS_INTERNAL_ERROR 0x30
321325
322326 #define SRB_STATUS(status) \
323327 (status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
@@ -365,6 +369,7 @@ static void storvsc_on_channel_callback(void *context); · 41 unmodified lines
365369 #define STORVSC_FC_MAX_LUNS_PER_TARGET 255
366370 #define STORVSC_FC_MAX_TARGETS 128
367371 #define STORVSC_FC_MAX_CHANNELS 8
372+#define STORVSC_FC_MAX_XFER_SIZE ((u32)(512 * 1024))
368373
369374 #define STORVSC_IDE_MAX_LUNS_PER_TARGET 64
370375 #define STORVSC_IDE_MAX_TARGETS 1
@@ -978,6 +983,11 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, · 607 unmodified lines
978983 case SRB_STATUS_ERROR:
979984 case SRB_STATUS_ABORTED:
980985 case SRB_STATUS_INVALID_REQUEST:
986+ case SRB_STATUS_INTERNAL_ERROR:
987+ case SRB_STATUS_TIMEOUT:
988+ case SRB_STATUS_SELECTION_TIMEOUT:
989+ case SRB_STATUS_BUS_RESET:
990+ case SRB_STATUS_DATA_OVERRUN:
981991 if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID) {
982992 /* Check for capacity change */
983993 if ((asc == 0x2a) && (ascq == 0x9)) {
@@ -1671,10 +1681,6 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd) · 687 unmodified lines
16711681 */
16721682 static enum scsi_timeout_action storvsc_eh_timed_out(struct scsi_cmnd *scmnd)
16731683 {
1674−#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
1675− if (scmnd->device->host->transportt == fc_transport_template)
1676− return fc_eh_timed_out(scmnd);
1677−#endif
16781684 return SCSI_EH_RESET_TIMER;
16791685 }
16801686
@@ -2004,6 +2010,9 @@ static int storvsc_probe(struct hv_device *device, · 323 unmodified lines
20042010 * protecting it from any weird value.
20052011 */
20062012 max_xfer_bytes = round_down(stor_device->max_transfer_bytes, HV_HYP_PAGE_SIZE);
2013+ if (is_fc)
2014+ max_xfer_bytes = min(max_xfer_bytes, STORVSC_FC_MAX_XFER_SIZE);
2015+
20072016 /* max_hw_sectors_kb */
20082017 host->max_sectors = max_xfer_bytes >> 9;
20092018 /*
drivers/ufs/core/ufs-mcq.c+4−2
@@ -578,7 +578,6 @@ static bool ufshcd_mcq_sqe_search(struct ufs_hba *hba, · 577 unmodified lines
578578 {
579579 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag];
580580 struct utp_transfer_req_desc *utrd;
581− u32 mask = hwq->max_entries - 1;
582581 __le64 cmd_desc_base_addr;
583582 bool ret = false;
584583 u64 addr, match;
@@ -606,7 +605,10 @@ static bool ufshcd_mcq_sqe_search(struct ufs_hba *hba, · 21 unmodified lines
606605 ret = true;
607606 goto out;
608607 }
609− sq_head_slot = (sq_head_slot + 1) & mask;
608+
609+ sq_head_slot++;
610+ if (sq_head_slot == hwq->max_entries)
611+ sq_head_slot = 0;
610612 }
611613
612614 out:
drivers/ufs/core/ufshcd.c+38−0
@@ -8452,6 +8452,41 @@ out: · 8451 unmodified lines
84528452 return ret;
84538453 }
84548454
8455+static void ufshcd_set_timestamp_attr(struct ufs_hba *hba)
8456+{
8457+ int err;
8458+ struct ufs_query_req *request = NULL;
8459+ struct ufs_query_res *response = NULL;
8460+ struct ufs_dev_info *dev_info = &hba->dev_info;
8461+ struct utp_upiu_query_v4_0 *upiu_data;
8462+
8463+ if (dev_info->wspecversion < 0x400)
8464+ return;
8465+
8466+ ufshcd_hold(hba);
8467+
8468+ mutex_lock(&hba->dev_cmd.lock);
8469+
8470+ ufshcd_init_query(hba, &request, &response,
8471+ UPIU_QUERY_OPCODE_WRITE_ATTR,
8472+ QUERY_ATTR_IDN_TIMESTAMP, 0, 0);
8473+
8474+ request->query_func = UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST;
8475+
8476+ upiu_data = (struct utp_upiu_query_v4_0 *)&request->upiu_req;
8477+
8478+ put_unaligned_be64(ktime_get_real_ns(), &upiu_data->osf3);
8479+
8480+ err = ufshcd_exec_dev_cmd(hba, DEV_CMD_TYPE_QUERY, QUERY_REQ_TIMEOUT);
8481+
8482+ if (err)
8483+ dev_err(hba->dev, "%s: failed to set timestamp %d\n",
8484+ __func__, err);
8485+
8486+ mutex_unlock(&hba->dev_cmd.lock);
8487+ ufshcd_release(hba);
8488+}
8489+
84558490 /**
84568491 * ufshcd_add_lus - probe and add UFS logical units
84578492 * @hba: per-adapter instance
@@ -8641,6 +8676,8 @@ static int ufshcd_device_init(struct ufs_hba *hba, bool init_dev_params) · 183 unmodified lines
86418676 ufshcd_set_ufs_dev_active(hba);
86428677 ufshcd_force_reset_auto_bkops(hba);
86438678
8679+ ufshcd_set_timestamp_attr(hba);
8680+
86448681 /* Gear up to HS gear if supported */
86458682 if (hba->max_pwr_info.is_valid) {
86468683 /*
@@ -9677,6 +9714,7 @@ static int __ufshcd_wl_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) · 1030 unmodified lines
96779714 ret = ufshcd_set_dev_pwr_mode(hba, UFS_ACTIVE_PWR_MODE);
96789715 if (ret)
96799716 goto set_old_link_state;
9717+ ufshcd_set_timestamp_attr(hba);
96809718 }
96819719
96829720 if (ufshcd_keep_autobkops_enabled_except_suspend(hba))
drivers/ufs/host/Kconfig+1−0
@@ -72,6 +72,7 @@ config SCSI_UFS_QCOM · 71 unmodified lines
7272 config SCSI_UFS_MEDIATEK
7373 tristate "Mediatek specific hooks to UFS controller platform driver"
7474 depends on SCSI_UFSHCD_PLATFORM && ARCH_MEDIATEK
75+ depends on RESET_CONTROLLER
7576 select PHY_MTK_UFS
7677 select RESET_TI_SYSCON
7778 help
drivers/ufs/host/ufs-qcom.c+1−1
@@ -365,7 +365,7 @@ static void ufs_qcom_select_unipro_mode(struct ufs_qcom_host *host) · 364 unmodified lines
365365 ufs_qcom_cap_qunipro(host) ? QUNIPRO_SEL : 0,
366366 REG_UFS_CFG1);
367367
368− if (host->hw_ver.major == 0x05)
368+ if (host->hw_ver.major >= 0x05)
369369 ufshcd_rmwl(host->hba, QUNIPRO_G4_SEL, 0, REG_UFS_CFG0);
370370
371371 /* make sure above configuration is applied before we return */
drivers/ufs/host/ufs-renesas.c+1−1
@@ -359,7 +359,7 @@ static int ufs_renesas_init(struct ufs_hba *hba) · 358 unmodified lines
359359 {
360360 struct ufs_renesas_priv *priv;
361361
362− priv = devm_kmalloc(hba->dev, sizeof(*priv), GFP_KERNEL);
362+ priv = devm_kzalloc(hba->dev, sizeof(*priv), GFP_KERNEL);
363363 if (!priv)
364364 return -ENOMEM;
365365 ufshcd_set_variant(hba, priv);
include/linux/raid_class.h+0−4
@@ -77,7 +77,3 @@ DEFINE_RAID_ATTRIBUTE(enum raid_state, state) · 76 unmodified lines
7777
7878 struct raid_template *raid_class_attach(struct raid_function_template *);
7979 void raid_class_release(struct raid_template *);
80−
81−int __must_check raid_component_add(struct raid_template *, struct device *,
82− struct device *);
83−
include/uapi/scsi/scsi_bsg_ufs.h+25−0
@@ -116,6 +116,31 @@ struct utp_upiu_query { · 115 unmodified lines
116116 __be32 reserved[2];
117117 };
118118
119+/**
120+ * struct utp_upiu_query_v4_0 - upiu request buffer structure for
121+ * query request >= UFS 4.0 spec.
122+ * @opcode: command to perform B-0
123+ * @idn: a value that indicates the particular type of data B-1
124+ * @index: Index to further identify data B-2
125+ * @selector: Index to further identify data B-3
126+ * @osf4: spec field B-5
127+ * @osf5: spec field B 6,7
128+ * @osf6: spec field DW 8,9
129+ * @osf7: spec field DW 10,11
130+ */
131+struct utp_upiu_query_v4_0 {
132+ __u8 opcode;
133+ __u8 idn;
134+ __u8 index;
135+ __u8 selector;
136+ __u8 osf3;
137+ __u8 osf4;
138+ __be16 osf5;
139+ __be32 osf6;
140+ __be32 osf7;
141+ __be32 reserved;
142+};
143+
119144 /**
120145 * struct utp_upiu_cmd - Command UPIU structure
121146 * @data_transfer_len: Data Transfer Length DW-3
include/ufs/ufs.h+1−0
@@ -179,6 +179,7 @@ enum attr_idn { · 178 unmodified lines
179179 QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 0x1E,
180180 QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE = 0x1F,
181181 QUERY_ATTR_IDN_EXT_IID_EN = 0x2A,
182+ QUERY_ATTR_IDN_TIMESTAMP = 0x30
182183 };
183184
184185 /* Descriptor idn for Query requests */