Index: usr.sbin/freebsd-update/freebsd-update.sh
===================================================================
RCS file: /home/ncvs/src/usr.sbin/freebsd-update/freebsd-update.sh,v
retrieving revision 1.2.2.2.2.1
diff -u -I__FBSDID -I$FreeBSD -r1.2.2.2.2.1 freebsd-update.sh
--- usr.sbin/freebsd-update/freebsd-update.sh	27 Nov 2006 21:27:33 -0000	1.2.2.2.2.1
+++ usr.sbin/freebsd-update/freebsd-update.sh	13 Mar 2007 12:56:06 -0000
@@ -499,6 +499,24 @@
 		exit 1
 	fi
 
+	# Figure out what kernel configuration is running.  We start with
+	# the output of `uname -i`, and then make the following adjustments:
+	# 1. Replace "SMP-GENERIC" with "SMP".  Why the SMP kernel config
+	# file says "ident SMP-GENERIC", I don't know...
+	# 2. If the kernel claims to be GENERIC _and_ ${ARCH} is "amd64"
+	# _and_ `sysctl kern.version` contains a line which ends "/SMP", then
+	# we're running an SMP kernel.  This mis-identification is a bug
+	# which was fixed in 6.2-STABLE.
+	KERNCONF=`uname -i`
+	if [ ${KERNCONF} = "SMP-GENERIC" ]; then
+		KERNCONF=SMP
+	fi
+	if [ ${KERNCONF} = "GENERIC" ] && [ ${ARCH} = "amd64" ]; then
+		if sysctl kern.version | grep -qE '/SMP$'; then
+			KERNCONF=SMP
+		fi
+	fi
+
 	# Define some paths
 	BSPATCH=/usr/bin/bspatch
 	SHA256=/sbin/sha256
@@ -1084,8 +1102,8 @@
 # /boot/kernel
 # (or more generally, `sysctl -n kern.bootfile` minus the trailing "/kernel").
 fetch_filter_kernel_names () {
-	grep ^/boot/`uname -i` $1 |
-	    sed -e "s,/boot/`uname -i`,${KERNELDIR}," |
+	grep ^/boot/${KERNCONF} $1 |
+	    sed -e "s,/boot/${KERNCONF},${KERNELDIR},g" |
 	    sort - $1 > $1.tmp
 	mv $1.tmp $1
 }
