PERFORCE change 131511 for review

Robert Watson rwatson at FreeBSD.org
Mon Dec 24 03:08:11 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=131511

Change 131511 by rwatson at rwatson_cinnamon on 2007/12/24 11:07:18

	Integrate zcopybpf.

Affected files ...

.. //depot/projects/zcopybpf/src/sys/arm/at91/kb920x_machdep.c#7 integrate
.. //depot/projects/zcopybpf/src/sys/geom/part/g_part_bsd.c#2 integrate

Differences ...

==== //depot/projects/zcopybpf/src/sys/arm/at91/kb920x_machdep.c#7 (text) ====

@@ -48,7 +48,7 @@
 #include "opt_at91.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.27 2007/11/05 11:36:10 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.28 2007/12/23 23:31:27 stas Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -213,7 +213,7 @@
 board_init(void)
 {
 	/*
-	 * Since the USART supprots RS-485 multidrop mode, it allows the
+	 * Since the USART supports RS-485 multidrop mode, it allows the
 	 * TX pins to float.  However, for RS-232 operations, we don't want
 	 * these pins to float.  Instead, they should be pulled up to avoid
 	 * mismatches.  Linux does something similar when it configures the

==== //depot/projects/zcopybpf/src/sys/geom/part/g_part_bsd.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/part/g_part_bsd.c,v 1.2 2007/12/08 07:01:10 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/part/g_part_bsd.c,v 1.3 2007/12/24 01:01:59 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/bio.h>
@@ -48,6 +48,7 @@
 struct g_part_bsd_table {
 	struct g_part_table	base;
 	u_char			*label;
+	uint32_t		offset;
 };
 
 struct g_part_bsd_entry {
@@ -137,35 +138,15 @@
 {
 	struct g_part_bsd_entry *entry;
 	struct g_part_bsd_table *table;
-	uint32_t start, size, sectors;
 
 	if (gpp->gpp_parms & G_PART_PARM_LABEL)
 		return (EINVAL);
 
-	sectors = basetable->gpt_sectors;
-
 	entry = (struct g_part_bsd_entry *)baseentry;
 	table = (struct g_part_bsd_table *)basetable;
 
-	start = gpp->gpp_start;
-	size = gpp->gpp_size;
-	if (size < sectors)
-		return (EINVAL);
-	if (start % sectors) {
-		size = size - sectors + (start % sectors);
-		start = start - (start % sectors) + sectors;
-	}
-	if (size % sectors)
-		size = size - (size % sectors);
-	if (size < sectors)
-		return (EINVAL);
-
-	KASSERT(baseentry->gpe_start <= start, (__func__));
-	KASSERT(baseentry->gpe_end >= start + size - 1, (__func__));
-	baseentry->gpe_start = start;
-	baseentry->gpe_end = start + size - 1;
-	entry->part.p_size = size;
-	entry->part.p_offset = start + basetable->gpt_offset;
+	entry->part.p_size = gpp->gpp_size;
+	entry->part.p_offset = gpp->gpp_start + table->offset;
 	entry->part.p_fsize = 0;
 	entry->part.p_frag = 0;
 	entry->part.p_cpg = 0;
@@ -203,14 +184,14 @@
 	le32enc(ptr + 48, basetable->gpt_heads);	/* d_ntracks */
 	le32enc(ptr + 52, ncyls);			/* d_ncylinders */
 	le32enc(ptr + 56, secpercyl);			/* d_secpercyl */
-	le32enc(ptr + 60, ncyls * secpercyl);		/* d_secperunit */
+	le32enc(ptr + 60, msize);			/* d_secperunit */
 	le16enc(ptr + 72, 3600);			/* d_rpm */
 	le32enc(ptr + 132, DISKMAGIC);			/* d_magic2 */
 	le16enc(ptr + 138, basetable->gpt_entries);	/* d_npartitions */
 	le32enc(ptr + 140, BBSIZE);			/* d_bbsize */
 
 	basetable->gpt_first = 0;
-	basetable->gpt_last = ncyls * secpercyl - 1;
+	basetable->gpt_last = msize - 1;
 	basetable->gpt_isleaf = 1;
 
 	baseentry = g_part_new_entry(basetable, RAW_PART + 1,
@@ -218,7 +199,7 @@
 	baseentry->gpe_internal = 1;
 	entry = (struct g_part_bsd_entry *)baseentry;
 	entry->part.p_size = basetable->gpt_last + 1;
-	entry->part.p_offset = basetable->gpt_offset;
+	entry->part.p_offset = table->offset;
 
 	return (0);
 }
@@ -320,29 +301,31 @@
 	sectors = le32dec(buf + 44);
 	if (sectors < 1 || sectors > 63)
 		goto invalid_label;
-	if (sectors != basetable->gpt_sectors) {
-		if (basetable->gpt_fixgeom)
-			goto invalid_label;
+	if (sectors != basetable->gpt_sectors && !basetable->gpt_fixgeom) {
 		g_part_geometry_heads(msize, sectors, &chs, &heads);
-		if (chs == 0)
-			goto invalid_label;
-		basetable->gpt_sectors = sectors;
-		basetable->gpt_heads = heads;
+		if (chs != 0) {
+			basetable->gpt_sectors = sectors;
+			basetable->gpt_heads = heads;
+		}
 	}
 	heads = le32dec(buf + 48);
 	if (heads < 1 || heads > 255)
 		goto invalid_label;
-	if (heads != basetable->gpt_heads) {
-		if (basetable->gpt_fixgeom)
-			goto invalid_label;
+	if (heads != basetable->gpt_heads && !basetable->gpt_fixgeom)
 		basetable->gpt_heads = heads;
-	}
-	chs = le32dec(buf + 52) * heads * sectors;
+	if (sectors != basetable->gpt_sectors ||
+	    heads != basetable->gpt_heads)
+		printf("GEOM: %s: geometry does not match label.\n", pp->name);
+
+	chs = le32dec(buf + 60);
 	if (chs < 1 || chs > msize)
 		goto invalid_label;
+	if (chs != msize)
+		printf("GEOM: %s: media size does not match label.\n",
+		    pp->name);
 
 	basetable->gpt_first = 0;
-	basetable->gpt_last = chs - 1;
+	basetable->gpt_last = msize - 1;
 	basetable->gpt_isleaf = 1;
 
 	basetable->gpt_entries = le16dec(buf + 138);
@@ -350,6 +333,7 @@
 	    basetable->gpt_entries > g_part_bsd_scheme.gps_maxent)
 		goto invalid_label;
 
+	table->offset = le32dec(buf + 148 + RAW_PART * 16 + 4);
 	for (index = basetable->gpt_entries - 1; index >= 0; index--) {
 		p = buf + 148 + index * 16;
 		part.p_size = le32dec(p + 0);
@@ -362,11 +346,11 @@
 			continue;
 		if (part.p_fstype == FS_UNUSED && index != RAW_PART)
 			continue;
-		if (part.p_offset < basetable->gpt_offset)
+		if (part.p_offset < table->offset)
 			continue;
 		baseentry = g_part_new_entry(basetable, index + 1,
-		    part.p_offset - basetable->gpt_offset,
-		    part.p_offset - basetable->gpt_offset + part.p_size - 1);
+		    part.p_offset - table->offset,
+		    part.p_offset - table->offset + part.p_size - 1);
 		entry = (struct g_part_bsd_entry *)baseentry;
 		entry->part = part;
 		if (part.p_fstype == FS_UNUSED)


More information about the p4-projects mailing list