svn commit: r212142 - in projects/sv/sys: amd64/amd64 arm/arm geom i386/i386 ia64/ia64 net powerpc/powerpc sparc64/sparc64 sun4v/sun4v sys

Attilio Rao attilio at FreeBSD.org
Thu Sep 2 09:33:48 UTC 2010


Author: attilio
Date: Thu Sep  2 09:33:48 2010
New Revision: 212142
URL: http://svn.freebsd.org/changeset/base/212142

Log:
  Introduce a flag field for the dumpers and use it immediately for the
  DIF_NET flag.
  This flag is responsible for toggling a netdump and having a correct set
  of dumplo in the dumping routines.

Modified:
  projects/sv/sys/amd64/amd64/dump_machdep.c
  projects/sv/sys/amd64/amd64/minidump_machdep.c
  projects/sv/sys/arm/arm/dump_machdep.c
  projects/sv/sys/arm/arm/minidump_machdep.c
  projects/sv/sys/geom/geom_disk.c
  projects/sv/sys/i386/i386/dump_machdep.c
  projects/sv/sys/i386/i386/minidump_machdep.c
  projects/sv/sys/ia64/ia64/dump_machdep.c
  projects/sv/sys/net/netdump_client.c
  projects/sv/sys/powerpc/powerpc/dump_machdep.c
  projects/sv/sys/sparc64/sparc64/dump_machdep.c
  projects/sv/sys/sun4v/sun4v/dump_machdep.c
  projects/sv/sys/sys/conf.h

Modified: projects/sv/sys/amd64/amd64/dump_machdep.c
==============================================================================
--- projects/sv/sys/amd64/amd64/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/amd64/amd64/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -297,12 +297,17 @@ dumpsys(struct dumperinfo *di)
 	hdrgap = fileofs - DEV_ALIGN(hdrsz);
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize, di->blocksize);
 

Modified: projects/sv/sys/amd64/amd64/minidump_machdep.c
==============================================================================
--- projects/sv/sys/amd64/amd64/minidump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/amd64/amd64/minidump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -243,12 +243,17 @@ minidumpsys(struct dumperinfo *di)
 	dumpsize += PAGE_SIZE;
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 	progress = dumpsize;
 
 	/* Initialize mdhdr */

Modified: projects/sv/sys/arm/arm/dump_machdep.c
==============================================================================
--- projects/sv/sys/arm/arm/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/arm/arm/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -304,12 +304,17 @@ dumpsys(struct dumperinfo *di)
 	hdrgap = fileofs - DEV_ALIGN(hdrsz);
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_ARM_VERSION, dumpsize, di->blocksize);
 

Modified: projects/sv/sys/arm/arm/minidump_machdep.c
==============================================================================
--- projects/sv/sys/arm/arm/minidump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/arm/arm/minidump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -277,13 +277,18 @@ minidumpsys(struct dumperinfo *di)
 	dumpsize += PAGE_SIZE;
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
-	}
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
 
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
+	}
 	progress = dumpsize;
 
 	/* Initialize mdhdr */

Modified: projects/sv/sys/geom/geom_disk.c
==============================================================================
--- projects/sv/sys/geom/geom_disk.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/geom/geom_disk.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -182,6 +182,7 @@ g_disk_kerneldump(struct bio *bp, struct
 	di.blocksize = dp->d_sectorsize;
 	di.maxiosize = dp->d_maxsize;
 	di.mediaoffset = gkd->offset;
+	di.flags = 0;
 	if ((gkd->offset + gkd->length) > dp->d_mediasize)
 		gkd->length = dp->d_mediasize - gkd->offset;
 	di.mediasize = gkd->length;

Modified: projects/sv/sys/i386/i386/dump_machdep.c
==============================================================================
--- projects/sv/sys/i386/i386/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/i386/i386/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -297,12 +297,17 @@ dumpsys(struct dumperinfo *di)
 	hdrgap = fileofs - DEV_ALIGN(hdrsz);
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_I386_VERSION, dumpsize, di->blocksize);
 

Modified: projects/sv/sys/i386/i386/minidump_machdep.c
==============================================================================
--- projects/sv/sys/i386/i386/minidump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/i386/i386/minidump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -243,12 +243,17 @@ minidumpsys(struct dumperinfo *di)
 	dumpsize += PAGE_SIZE;
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 	progress = dumpsize;
 
 	/* Initialize mdhdr */

Modified: projects/sv/sys/ia64/ia64/dump_machdep.c
==============================================================================
--- projects/sv/sys/ia64/ia64/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/ia64/ia64/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -232,12 +232,17 @@ dumpsys(struct dumperinfo *di)
 	hdrgap = fileofs - DEV_ALIGN(hdrsz);
 
 	/* Determine dump offset on device. */
-	if (di->mediasize < SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
-		error = ENOSPC;
-		goto fail;
+	if ((di->flags & DIF_NET) != 0)
+		dumplo = 0;
+	else {
+		if (di->mediasize <
+		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
+			error = ENOSPC;
+			goto fail;
+		}
+		dumplo = di->mediaoffset + di->mediasize - dumpsize;
+		dumplo -= sizeof(kdh) * 2;
 	}
-	dumplo = di->mediaoffset + di->mediasize - dumpsize;
-	dumplo -= sizeof(kdh) * 2;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_IA64_VERSION, dumpsize, di->blocksize);
 

Modified: projects/sv/sys/net/netdump_client.c
==============================================================================
--- projects/sv/sys/net/netdump_client.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/net/netdump_client.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -1223,7 +1223,7 @@ netdump_trigger(void *arg, int howto)
 	dumper.dumper = netdump_dumper;
 	dumper.priv = NULL;
 	dumper.blocksize = NETDUMP_DATASIZE;
-	dumper.flags = DF_NET;
+	dumper.flags = DIF_NET;
 
 	/* in dump_machdep.c */
 	dumpsys(&dumper);

Modified: projects/sv/sys/powerpc/powerpc/dump_machdep.c
==============================================================================
--- projects/sv/sys/powerpc/powerpc/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/powerpc/powerpc/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -233,8 +233,8 @@ dumpsys(struct dumperinfo *di)
 	dumpsize += fileofs;
 	hdrgap = fileofs - DEV_ALIGN(hdrsz);
 
-	/* For block devices, determine the dump offset on the device. */
-	if (di->mediasize > 0) {
+	/* Determine dump offset on device. */
+	if ((di->flags & DIF_NET) == 0 && di->mediasize > 0) {
 		if (di->mediasize <
 		    SIZEOF_METADATA + dumpsize + sizeof(kdh) * 2) {
 			error = ENOSPC;

Modified: projects/sv/sys/sparc64/sparc64/dump_machdep.c
==============================================================================
--- projects/sv/sys/sparc64/sparc64/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/sparc64/sparc64/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -167,7 +167,8 @@ dumpsys(struct dumperinfo *di)
 	}
 
 	/* Determine dump offset on device. */
-	dumplo = di->mediaoffset + di->mediasize - totsize;
+	dumplo = (di->flags & DIF_NET) != 0 ? 0 :
+	    di->mediaoffset + di->mediasize - totsize;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size, di->blocksize);
 

Modified: projects/sv/sys/sun4v/sun4v/dump_machdep.c
==============================================================================
--- projects/sv/sys/sun4v/sun4v/dump_machdep.c	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/sun4v/sun4v/dump_machdep.c	Thu Sep  2 09:33:48 2010	(r212142)
@@ -170,7 +170,8 @@ dumpsys(struct dumperinfo *di)
 	}
 
 	/* Determine dump offset on device. */
-	dumplo = di->mediaoffset + di->mediasize - totsize;
+	dumplo = (di->flags & DIF_NET) != 0 ? 0 :
+	    di->mediaoffset + di->mediasize - totsize;
 
 	mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size, di->blocksize);
 

Modified: projects/sv/sys/sys/conf.h
==============================================================================
--- projects/sv/sys/sys/conf.h	Thu Sep  2 07:49:45 2010	(r212141)
+++ projects/sv/sys/sys/conf.h	Thu Sep  2 09:33:48 2010	(r212142)
@@ -317,6 +317,8 @@ EVENTHANDLER_DECLARE(dev_clone, dev_clon
 
 /* Stuff relating to kernel-dump */
 
+#define	DIF_NET		0x01		/* Dump over network. */
+
 struct dumperinfo {
 	dumper_t *dumper;	/* Dumping function. */
 	void    *priv;		/* Private parts. */
@@ -324,6 +326,7 @@ struct dumperinfo {
 	u_int	maxiosize;	/* Max size allowed for an individual I/O */
 	off_t   mediaoffset;	/* Initial offset in bytes. */
 	off_t   mediasize;	/* Space available in bytes. */
+	u_int	flags;		/* Dump device flags. */
 };
 
 int set_dumper(struct dumperinfo *);


More information about the svn-src-projects mailing list