aboutsummaryrefslogtreecommitdiff
path: root/sys/cam
diff options
context:
space:
mode:
authorPaul Saab <ps@FreeBSD.org>2000-10-17 10:05:49 +0000
committerPaul Saab <ps@FreeBSD.org>2000-10-17 10:05:49 +0000
commitc794ceb56a6ff6601c150cc72d68824a2ec295c5 (patch)
tree44fb5dd9c3a167bb7217b50d32005aa46a786aa3 /sys/cam
parent0eed4af9fa715945c4ef54bffdff097162525cf5 (diff)
Notes
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/scsi/scsi_da.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index cc5ada227c0d..45d3d76a85c4 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -634,7 +634,9 @@ dadump(dev_t dev)
long blkcnt;
vm_offset_t addr;
struct ccb_scsiio csio;
+ int dumppages = MAXDUMPPGS;
int error;
+ int i;
/* toss any characters present prior to dump */
while (cncheckc() != -1)
@@ -659,12 +661,17 @@ dadump(dev_t dev)
blkcnt = howmany(PAGE_SIZE, secsize);
while (num > 0) {
- void *va;
+ caddr_t va;
- if (is_physical_memory(addr)) {
- va = pmap_kenter_temporary(trunc_page(addr));
- } else {
- va = pmap_kenter_temporary(trunc_page(0));
+ if ((num / blkcnt) < dumppages)
+ dumppages = num / blkcnt;
+
+ for (i = 0; i < dumppages; ++i) {
+ vm_offset_t a = addr + (i * PAGE_SIZE);
+ if (is_physical_memory(a))
+ va = pmap_kenter_temporary(trunc_page(a), i);
+ else
+ va = pmap_kenter_temporary(trunc_page(0), i);
}
xpt_setup_ccb(&csio.ccb_h, periph->path, /*priority*/1);
@@ -677,9 +684,9 @@ dadump(dev_t dev)
/*byte2*/0,
/*minimum_cmd_size*/ softc->minimum_cmd_size,
blknum,
- blkcnt,
+ blkcnt * dumppages,
/*data_ptr*/(u_int8_t *) va,
- /*dxfer_len*/blkcnt * secsize,
+ /*dxfer_len*/blkcnt * secsize * dumppages,
/*sense_len*/SSD_FULL_SIZE,
DA_DEFAULT_TIMEOUT * 1000);
xpt_polled_action((union ccb *)&csio);
@@ -706,9 +713,9 @@ dadump(dev_t dev)
}
/* update block count */
- num -= blkcnt;
- blknum += blkcnt;
- addr += PAGE_SIZE;
+ num -= blkcnt * dumppages;
+ blknum += blkcnt * dumppages;
+ addr += PAGE_SIZE * dumppages;
/* operator aborting dump? */
if (cncheckc() != -1)