"fast data access mmu miss" on kernels w/o "makeoptions DEBUG=-g"

R. Imura imura at ryu16.org
Sat Aug 27 13:20:19 GMT 2005


On Sat, Aug 27, 2005 at 02:55:03PM +0200, Marius Strobl wrote:
> On Sat, Aug 27, 2005 at 02:58:41PM +0900, R. Imura wrote:
> > Hi,
> > 
> > On Wed, Aug 24, 2005 at 07:14:37PM +0200, Marius Strobl wrote:
> > > > > smbfs does not work on sparc64 as smbfs assumes it runs on
> > > > > architectures that allow on-aligned memory access. It also needs
> > > > > big-endian clean up too.(See sys/mchain.h)
> > > > 
> > > > To begin with, you might want this patch. :)
> > > > 
> > > 
> > > You probably should go the NetBSD route and change the consumers
> > > of these macros to use the byteorder(9) functions like htole16(9)
> > > directly. Btw., NetBSD seems to also have fixed the alignment
> > > issues.
> > 
> > I was too rushed that these macros in my patch are no longer used
> > in our system, so we can safe to remove them.
> > 
> > Fixes are done in 3 years ago.
> > http://docs.freebsd.org/cgi/mid.cgi?200212161620.gBGGK6uX080655
> > 
> 
> That commit only dealt with the kernel part, these macros are still
> used in the userland part:
> > grep -r htoles /usr/src/contrib/smbfs/*
> /usr/src/contrib/smbfs/lib/smb/nb_name.c:#define        NBENCODE(c)     (htoles((u_short)(((u_char)(c) >> 4) | \
> 
> Marius

I see. :)
Then, could you test this patch?

Index: contrib/smbfs/lib/smb/mbuf.c
===================================================================
RCS file: /home/ncvs/src/contrib/smbfs/lib/smb/mbuf.c,v
retrieving revision 1.2
diff -u -r1.2 mbuf.c
--- contrib/smbfs/lib/smb/mbuf.c	19 Oct 2004 17:44:31 -0000	1.2
+++ contrib/smbfs/lib/smb/mbuf.c	27 Aug 2005 13:07:14 -0000
@@ -36,6 +36,7 @@
 __FBSDID("$FreeBSD: src/contrib/smbfs/lib/smb/mbuf.c,v 1.2 2004/10/19 17:44:31 obrien Exp $");
 
 #include <sys/types.h>
+#include <sys/endian.h>
 #include <sys/mchain.h>
 #include <arpa/inet.h>
 #include <ctype.h>
@@ -268,7 +269,7 @@
 mb_put_int64be(struct mbdata *mbp, int64_t x)
 {
 	MB_PUT(int64_t);
-	*p = htobeq(x);
+	*p = htobe64(x);
 	return 0;
 }
 
@@ -276,7 +277,7 @@
 mb_put_int64le(struct mbdata *mbp, int64_t x)
 {
 	MB_PUT(int64_t);
-	*p = htoleq(x);
+	*p = htole64(x);
 	return 0;
 }
 
@@ -367,7 +368,7 @@
 	u_int16_t v;
 	int error = mb_get_uint16(mbp, &v);
 
-	*x = letohs(v);
+	*x = le16toh(v);
 	return error;
 }
 
@@ -376,7 +377,7 @@
 	u_int16_t v;
 	int error = mb_get_uint16(mbp, &v);
 
-	*x = betohs(v);
+	*x = be16toh(v);
 	return error;
 }
 
@@ -393,7 +394,7 @@
 	int error;
 
 	error = mb_get_uint32(mbp, &v);
-	*x = betohl(v);
+	*x = be32toh(v);
 	return error;
 }
 
@@ -404,7 +405,7 @@
 	int error;
 
 	error = mb_get_uint32(mbp, &v);
-	*x = letohl(v);
+	*x = le32toh(v);
 	return error;
 }
 
@@ -421,7 +422,7 @@
 	int error;
 
 	error = mb_get_int64(mbp, &v);
-	*x = betohq(v);
+	*x = be64toh(v);
 	return error;
 }
 
@@ -432,7 +433,7 @@
 	int error;
 
 	error = mb_get_int64(mbp, &v);
-	*x = letohq(v);
+	*x = le64toh(v);
 	return error;
 }
 
Index: contrib/smbfs/lib/smb/nb_name.c
===================================================================
RCS file: /home/ncvs/src/contrib/smbfs/lib/smb/nb_name.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 nb_name.c
--- contrib/smbfs/lib/smb/nb_name.c	20 Dec 2001 16:16:25 -0000	1.1.1.2
+++ contrib/smbfs/lib/smb/nb_name.c	27 Aug 2005 13:08:13 -0000
@@ -31,9 +31,9 @@
  *
  * $Id: nb_name.c,v 1.2 2001/08/22 03:31:36 bp Exp $
  */
+#include <sys/endian.h>
 #include <sys/param.h>
 #include <sys/socket.h>
-#include <sys/mchain.h>		/* for endiand macros */
 
 #include <ctype.h>
 #include <err.h>
@@ -139,7 +139,7 @@
 	return len;
 }
 
-#define	NBENCODE(c)	(htoles((u_short)(((u_char)(c) >> 4) | \
+#define	NBENCODE(c)	(htole16((u_short)(((u_char)(c) >> 4) | \
 			 (((u_char)(c) & 0xf) << 8)) + 0x4141))
 
 static void
Index: contrib/smbfs/lib/smb/rap.c
===================================================================
RCS file: /home/ncvs/src/contrib/smbfs/lib/smb/rap.c,v
retrieving revision 1.4
diff -u -r1.4 rap.c
--- contrib/smbfs/lib/smb/rap.c	19 Jun 2004 19:03:01 -0000	1.4
+++ contrib/smbfs/lib/smb/rap.c	27 Aug 2005 13:10:08 -0000
@@ -35,6 +35,7 @@
  * This is very simple implementation of RAP protocol.
  */
 #include <sys/param.h>
+#include <sys/endian.h>
 #include <sys/errno.h>
 #include <sys/stat.h>
 #include <ctype.h>
@@ -45,8 +46,6 @@
 #include <stdlib.h>
 #include <sysexits.h>
 
-#include <sys/mchain.h>
-
 #include <netsmb/smb_lib.h>
 #include <netsmb/smb_conn.h>
 #include <netsmb/smb_rap.h>
@@ -290,7 +289,7 @@
 		return error;
 	switch (ptype) {
 	    case 'h':
-		*value = letohs(*(u_int16_t*)rap->r_npbuf);
+		*value = le16toh(*(u_int16_t*)rap->r_npbuf);
 		break;
 	    default:
 		return EINVAL;
@@ -320,8 +319,8 @@
 	if (error)
 		return error;
 	rp = (u_int16_t*)rap->r_pbuf;
-	rap->r_result = letohs(*rp++);
-	conv = letohs(*rp++);
+	rap->r_result = le16toh(*rp++);
+	conv = le16toh(*rp++);
 	rap->r_npbuf = (char*)rp;
 	rap->r_entries = entries = 0;
 	done = 0;
@@ -329,7 +328,7 @@
 		ptype = *p;
 		switch (ptype) {
 		    case 'e':
-			rap->r_entries = entries = letohs(*(u_int16_t*)rap->r_npbuf);
+			rap->r_entries = entries = le16toh(*(u_int16_t*)rap->r_npbuf);
 			rap->r_npbuf += 2;
 			p++;
 			break;
Index: sys/sys/mchain.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/mchain.h,v
retrieving revision 1.9
diff -u -r1.9 mchain.h
--- sys/sys/mchain.h	29 Jul 2005 13:22:36 -0000	1.9
+++ sys/sys/mchain.h	27 Aug 2005 13:13:05 -0000
@@ -34,54 +34,6 @@
 #ifndef _SYS_MCHAIN_H_
 #define _SYS_MCHAIN_H_
 
-#include <machine/endian.h>
-
-#ifndef _KERNEL
-/*
- * This macros probably belongs to the endian.h
- */
-#if (BYTE_ORDER == LITTLE_ENDIAN)
-
-#define	htoles(x)	((u_int16_t)(x))
-#define	letohs(x)	((u_int16_t)(x))
-#define	htolel(x)	((u_int32_t)(x))
-#define	letohl(x)	((u_int32_t)(x))
-#define	htoleq(x)	((int64_t)(x))
-#define	letohq(x)	((int64_t)(x))
-
-#define	htobes(x)	(__htons(x))
-#define	betohs(x)	(__ntohs(x))
-#define	htobel(x)	(__htonl(x))
-#define	betohl(x)	(__ntohl(x))
-
-static __inline int64_t
-htobeq(int64_t x)
-{
-	return (int64_t)__htonl((u_int32_t)(x >> 32)) |
-	    (int64_t)__htonl((u_int32_t)(x & 0xffffffff)) << 32;
-}
-
-static __inline int64_t
-betohq(int64_t x)
-{
-	return (int64_t)__ntohl((u_int32_t)(x >> 32)) |
-	    (int64_t)__ntohl((u_int32_t)(x & 0xffffffff)) << 32;
-}
-
-#else	/* (BYTE_ORDER == LITTLE_ENDIAN) */
-
-#error "Macros for Big-Endians are incomplete"
-
-/*
-#define	htoles(x)	((u_int16_t)(x))
-#define	letohs(x)	((u_int16_t)(x))
-#define	htolel(x)	((u_int32_t)(x))
-#define	letohl(x)	((u_int32_t)(x))
-*/
-#endif	/* (BYTE_ORDER == LITTLE_ENDIAN) */
-#endif	/* _KERNEL */
-
-
 #ifdef _KERNEL
 
 /*

Regards,
- R. Imura


More information about the freebsd-sparc64 mailing list