aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2018-08-10 19:19:07 +0000
committerConrad Meyer <cem@FreeBSD.org>2018-08-10 19:19:07 +0000
commitf053ca1f0846852a472ac418218e6cdcc70d4ec2 (patch)
tree8b0597569e892128f061cb6343ebe82b344833f0
parent0915d9d07061ba3f00882663a8a20337079b6f4d (diff)
downloadsrc-f053ca1f0846852a472ac418218e6cdcc70d4ec2.tar.gz
src-f053ca1f0846852a472ac418218e6cdcc70d4ec2.zip
Walk back r337554 while discussion continues
The idea was to get the uncontroversial mechanical change out of the way, then get the meatier functional changes reviewed subsequently. I had not realized that the immediately adjacent issue was addressed in a different direction in r334506 (see Warner's guidance in D15592). Discussion continues, trying to determine if there is a secondary issue still[1] and how best to fix it. With 12-related activities coming up, while that is ongoing, just take this back for now. [1]: Shutdown-time eventhandler events fire normally during panic's reboot path. Driver callbacks that attempt to issue and wait on interrupt- completed IO may never complete, hanging the system. This is particularly obnoxious in the shutdown/panic path, as the debugger cannot be entered anymore and the hang prevents reboot restoring availability. (There's nothing CAM-specific about this problem -- any shutdown event-triggered driver could do something like this during panic. But most NICs, etc. don't try to send spin-down commands at shutdown. ;-)) Discussed with: imp, markj
Notes
Notes: svn path=/head/; revision=337583
-rw-r--r--sys/cam/ata/ata_da.c3
-rw-r--r--sys/cam/cam_ccb.h3
-rw-r--r--sys/cam/nvme/nvme_da.c2
-rw-r--r--sys/cam/scsi/scsi_da.c2
4 files changed, 1 insertions, 9 deletions
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c
index e31e6d8b73ba..ac04b3d23076 100644
--- a/sys/cam/ata/ata_da.c
+++ b/sys/cam/ata/ata_da.c
@@ -1081,7 +1081,6 @@ adadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t len
(u_int8_t *) virtual,
length,
ada_default_timeout*1000);
- ataio.ccb_h.xflags |= CAM_CCB_DUMP;
if ((softc->flags & ADA_FLAG_CAN_48BIT) &&
(lba + count >= ATA_MAX_28BIT_LBA ||
count >= 256)) {
@@ -1116,7 +1115,6 @@ adadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t len
NULL,
0,
5*1000);
- ataio.ccb_h.xflags |= CAM_CCB_DUMP;
if (softc->flags & ADA_FLAG_CAN_48BIT)
ata_48bit_cmd(&ataio, ATA_FLUSHCACHE48, 0, 0, 0);
@@ -3501,7 +3499,6 @@ adaspindown(uint8_t cmd, int flags)
NULL,
0,
ada_default_timeout*1000);
- local_ccb.ccb_h.xflags |= CAM_CCB_DUMP;
ata_28bit_cmd(&local_ccb, cmd, 0, 0, 0);
error = cam_periph_runccb((union ccb *)&local_ccb, adaerror,
/*cam_flags*/0, /*sense_flags*/ SF_NO_RECOVERY | SF_NO_RETRY,
diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h
index 131b5d564549..7893b19290aa 100644
--- a/sys/cam/cam_ccb.h
+++ b/sys/cam/cam_ccb.h
@@ -116,8 +116,7 @@ typedef enum {
typedef enum {
CAM_USER_DATA_ADDR = 0x00000002,/* Userspace data pointers */
CAM_SG_FORMAT_IOVEC = 0x00000004,/* iovec instead of busdma S/G*/
- CAM_UNMAPPED_BUF = 0x00000008,/* use unmapped I/O */
- CAM_CCB_DUMP = 0x00000010,/* polled ccb during dump */
+ CAM_UNMAPPED_BUF = 0x00000008 /* use unmapped I/O */
} ccb_xflags;
/* XPT Opcodes for xpt_action */
diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c
index a430798ae016..f83a038506aa 100644
--- a/sys/cam/nvme/nvme_da.c
+++ b/sys/cam/nvme/nvme_da.c
@@ -426,7 +426,6 @@ ndadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t len
xpt_setup_ccb(&nvmeio.ccb_h, periph->path, CAM_PRIORITY_NORMAL);
nvmeio.ccb_state = NDA_CCB_DUMP;
nda_nvme_write(softc, &nvmeio, virtual, lba, length, count);
- nvmeio.ccb_h.xflags |= CAM_CCB_DUMP;
error = cam_periph_runccb((union ccb *)&nvmeio, cam_periph_error,
0, SF_NO_RECOVERY | SF_NO_RETRY, NULL);
if (error != 0)
@@ -440,7 +439,6 @@ ndadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t len
nvmeio.ccb_state = NDA_CCB_DUMP;
nda_nvme_flush(softc, &nvmeio);
- nvmeio.ccb_h.xflags |= CAM_CCB_DUMP;
error = cam_periph_runccb((union ccb *)&nvmeio, cam_periph_error,
0, SF_NO_RECOVERY | SF_NO_RETRY, NULL);
if (error != 0)
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 449ae0a3bdeb..40f593f9b629 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -1847,7 +1847,6 @@ dadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t leng
/*dxfer_len*/length,
/*sense_len*/SSD_FULL_SIZE,
da_default_timeout * 1000);
- csio.ccb_h.xflags |= CAM_CCB_DUMP;
error = cam_periph_runccb((union ccb *)&csio, cam_periph_error,
0, SF_NO_RECOVERY | SF_NO_RETRY, NULL);
if (error != 0)
@@ -1870,7 +1869,6 @@ dadump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t leng
/*lb_count*/0,
SSD_FULL_SIZE,
5 * 1000);
- csio.ccb_h.xflags |= CAM_CCB_DUMP;
error = cam_periph_runccb((union ccb *)&csio, cam_periph_error,
0, SF_NO_RECOVERY | SF_NO_RETRY, NULL);
if (error != 0)