Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Mar 2001 15:54:56 -0800 (PST)
From:      Gersh <gersh@sonn.com>
To:        David Taylor <davidt@yadt.co.uk>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: crash dump speed up patch.
Message-ID:  <Pine.BSF.4.21.0103271553570.570-200000@tabby.sonn.com>
In-Reply-To: <20010327235324.A60690@gattaca.yadt.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Attatched is a updated version of the patch with a few ideas from the list
aswell as cam/scsi/scsi_da.c modified aswell.  Thanks for all the comments.

[-- Attachment #2 --]
--- cam/scsi/scsi_da.c	Mon Jan 17 06:27:37 2000
+++ cam/scsi/scsi_da.c.new	Tue Mar 27 16:34:57 2001
@@ -580,7 +580,7 @@
 	long	    blkcnt;
 	vm_offset_t addr;	
 	struct	    ccb_scsiio csio;
-	int	    error;
+	int	    error, left, state, total, percent;
 
 	/* toss any characters present prior to dump */
 	while (cncheckc() != -1)
@@ -604,6 +604,11 @@
 	addr = 0;	/* starting address */
 	blkcnt = howmany(PAGE_SIZE, secsize);
 
+	state = left = 0;
+	total = (num  * softc->params.secsize) / (1024 * 1024);
+
+	printf("Dump in progress, percentage complete: ");
+
 	while (num > 0) {
 
 		if (is_physical_memory(addr)) {
@@ -647,9 +652,14 @@
 			if (wdog_tickler)
 				(*wdog_tickler)();
 #endif /* HW_WDOG */
-			/* Count in MB of data left to write */
-			printf("%d ", (num  * softc->params.secsize)
-				     / (1024 * 1024));
+			left++;
+			percent = left * 100 / total;
+            
+			if (!(percent % 10) && (state - percent))
+			{
+				printf("%d ", percent);
+				state = percent;
+			}
 		}
 		
 		/* update block count */
--- dev/ata/ata-disk.c	Tue Mar 27 10:31:59 2001
+++ dev/ata/ata-disk.c.new	Tue Mar 27 16:35:42 2001
@@ -259,7 +259,7 @@
     struct ad_request request;
     u_int count, blkno, secsize;
     vm_offset_t addr = 0;
-    int error;
+    int error, left, state, total, percent;
 
     if ((error = disk_dumpcheck(dev, &count, &blkno, &secsize)))
 	return error;
@@ -271,8 +271,12 @@
     adp->controller->mode[ATA_DEV(adp->unit)] = ATA_PIO;
     ata_reinit(adp->controller);
 
+    state = left = 0;
+    total = (count * DEV_BSIZE) / (1024 * 1024);
+
+    printf("Dump in progress, percentage complete: ");
+
     while (count > 0) {
-	DELAY(1000);
 	if (is_physical_memory(addr))
 	    pmap_enter(kernel_pmap, (vm_offset_t)CADDR1,
 		       trunc_page(addr), VM_PROT_READ, TRUE);
@@ -300,9 +304,21 @@
 	    if (wdog_tickler)
 		(*wdog_tickler)();
 #endif
-	    printf("%ld ", (long)(count * DEV_BSIZE) / (1024 * 1024));
+	    /*
+	     *  Rate limit printf's to replace old DELAY(1000)
+	     *  This is done so that old slow serial connections
+	     *  do not get hosed.
+	     */
+
+	    left++;
+	    percent = left * 100 / total;
+
+	    if (!(percent % 10) && (state - percent))
+	    {
+		printf("%d ", percent);
+		state = percent;
+	    }
 	}
-
 	blkno += howmany(PAGE_SIZE, secsize);
 	count -= howmany(PAGE_SIZE, secsize);
 	addr += PAGE_SIZE;

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0103271553570.570-200000>