Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Add infrastructure to allow ports to override build of i...
details: https://anonhg.NetBSD.org/src/rev/3364d587f994
branches: trunk
changeset: 510305:3364d587f994
user: sommerfeld <sommerfeld%NetBSD.org@localhost>
date: Sat May 26 17:46:11 2001 +0000
description:
Add infrastructure to allow ports to override build of in6_cksum.c by
enabling the INET6_MD_CKSUM option, which is defopted into opt_inet.h.
Supply an i386 assembly version of in6_cksum in in_cksum.s; on
P6-family cpu's, this is is roughly 20% faster than the C code in
sys/netinet6 for ethernet-mtu-sized mbufs in L1 cache. Turn on
INET6_MD_CKSUM in i386/conf/std.i386
While we're here, also nuke some now-obsolete XXX comments from
in_cksum.s.
diffstat:
sys/arch/i386/conf/std.i386 | 4 +-
sys/arch/i386/i386/genassym.cf | 6 ++-
sys/arch/i386/i386/in_cksum.s | 76 ++++++++++++++++++++++++++++++++++++++---
sys/conf/files | 6 +-
4 files changed, 81 insertions(+), 11 deletions(-)
diffs (180 lines):
diff -r 31b014efa33a -r 3364d587f994 sys/arch/i386/conf/std.i386
--- a/sys/arch/i386/conf/std.i386 Sat May 26 16:49:58 2001 +0000
+++ b/sys/arch/i386/conf/std.i386 Sat May 26 17:46:11 2001 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: std.i386,v 1.19 2000/06/22 20:27:53 fvdl Exp $
+# $NetBSD: std.i386,v 1.20 2001/05/26 17:46:12 sommerfeld Exp $
#
# standard, required NetBSD/i386 'options'
@@ -7,3 +7,5 @@
options EXEC_AOUT # exec a.out binaries
options EXEC_ELF32 # exec ELF binaries
options EXEC_SCRIPT # exec #! scripts
+
+options INET6_MD_CKSUM # machine-dependant code for in6_cksum
diff -r 31b014efa33a -r 3364d587f994 sys/arch/i386/i386/genassym.cf
--- a/sys/arch/i386/i386/genassym.cf Sat May 26 16:49:58 2001 +0000
+++ b/sys/arch/i386/i386/genassym.cf Sat May 26 17:46:11 2001 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: genassym.cf,v 1.26 2001/04/14 13:56:02 augustss Exp $
+# $NetBSD: genassym.cf,v 1.27 2001/05/26 17:46:12 sommerfeld Exp $
#
# Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -89,6 +89,7 @@
include <netinet/in.h>
include <netinet/in_systm.h>
include <netinet/ip.h>
+include <netinet/ip6.h>
include <netinet/ip_var.h>
include <uvm/uvm.h>
@@ -158,6 +159,9 @@
define IP_SRC offsetof(struct ip, ip_src)
define IP_DST offsetof(struct ip, ip_dst)
+define IP6_SRC offsetof(struct ip6_hdr, ip6_src)
+define IP6_DST offsetof(struct ip6_hdr, ip6_dst)
+
define V_TRAP offsetof(struct uvmexp, traps)
define V_INTR offsetof(struct uvmexp, intrs)
diff -r 31b014efa33a -r 3364d587f994 sys/arch/i386/i386/in_cksum.s
--- a/sys/arch/i386/i386/in_cksum.s Sat May 26 16:49:58 2001 +0000
+++ b/sys/arch/i386/i386/in_cksum.s Sat May 26 17:46:11 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: in_cksum.s,v 1.15 2001/05/23 15:56:51 sommerfeld Exp $ */
+/* $NetBSD: in_cksum.s,v 1.16 2001/05/26 17:46:12 sommerfeld Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -69,6 +69,8 @@
* SUCH DAMAGE.
*/
+#include "opt_inet.h"
+
#include <machine/asm.h>
#include "assym.h"
@@ -124,7 +126,71 @@
addw %dx, %ax ; \
adcw $0, %ax
-/* XXX There should really be a section 9 for this. --PM, May 21, 2001 */
+
+/*
+ * XXX KAME handles link-local scopes in a way which causes us great pain.
+ * we need to special-case link-local addresses and not include the scope id
+ * as part of the transport-layer pseudoheader.
+ * Both ff02::/16 and fe80::/10 get this treatment.
+ *
+ * so, big-endian, this would be:
+ * (s6_addr32[0] & 0xffc00000) == 0xfe800000
+ * (s6_addr32[0] & 0xff0f) == 0xff020000
+ * since we're little-endian,
+ * (s6_addr32[0] & 0x0000c0ff) == 0x000080fe
+ * (s6_addr32[0] & 0x00000fff) == 0x000002ff
+ */
+
+#define ADD6SCOPE(n) \
+ movw n(%ebx), %cx ; \
+ addl %ecx,%eax ; \
+ andl $0xc0ff,%ecx ; \
+ cmpl $0x80fe,%ecx ; \
+ je 1f ; \
+ movw n(%ebx), %cx ; \
+ andl $0xfff,%ecx ; \
+ cmpl $0x2ff,%ecx ; \
+ je 1f ; \
+ movw n+2(%ebx),%cx ; \
+ addl %ecx,%eax ; \
+1:
+
+#if defined(INET6) && defined(INET6_MD_CKSUM)
+/*
+ * XXX does not deal with jumbograms.
+ */
+/* LINTSTUB: Func: int in6_cksum(struct mbuf *m, u_int8_t nxt, int off, int len) */
+ENTRY(in6_cksum)
+ pushl %ebp
+ pushl %ebx
+ pushl %esi
+
+ movl 16(%esp), %ebp
+ movzbl 20(%esp), %eax /* sum = nxt */
+ movl 24(%esp), %edx /* %edx = off */
+ movl 28(%esp), %esi /* %esi = len */
+ testl %eax, %eax
+ jz mbuf_loop_0 /* skip if nxt == 0 */
+ movl M_DATA(%ebp), %ebx
+ addl %esi, %eax /* sum += len */
+ shll $8, %eax /* sum = htons(sum) */
+ xorl %ecx,%ecx
+ ADD6SCOPE(IP6_SRC)
+ ADD6SCOPE(IP6_DST)
+ ADD(IP6_SRC+4) /* sum += ip6->ip6_src */
+ ADC(IP6_SRC+8) /* sum += ip6->ip6_src */
+ ADC(IP6_SRC+12) /* sum += ip6->ip6_src */
+ ADC(IP6_DST+4) /* sum += ip6->ip_dst */
+ ADC(IP6_DST+8) /* sum += ip6->ip_dst */
+ ADC(IP6_DST+12) /* sum += ip6->ip_dst */
+
+ MOP
+#ifdef INET
+ jmp mbuf_loop_0
+#endif
+#endif
+
+#ifdef INET
/* LINTSTUB: Func: int in4_cksum(struct mbuf *m, u_int8_t nxt, int off, int len) */
ENTRY(in4_cksum)
pushl %ebp
@@ -144,7 +210,7 @@
ADD(IP_SRC) /* sum += ip->ip_src */
ADC(IP_DST) /* sum += ip->ip_dst */
MOP
-
+#endif
mbuf_loop_0:
testl %ebp, %ebp
jz out_of_mbufs
@@ -170,9 +236,7 @@
jmp in4_entry
-/* XXX There should really be a section 9 for this. --PM, May 21, 2001 */
-/* XXX The prototype below deserves better parameter names. */
-/* LINTSTUB: Func: int in_cksum(struct mbuf *m, int i) */
+/* LINTSTUB: Func: int in_cksum(struct mbuf *m, int len) */
ENTRY(in_cksum)
pushl %ebp
pushl %ebx
diff -r 31b014efa33a -r 3364d587f994 sys/conf/files
--- a/sys/conf/files Sat May 26 16:49:58 2001 +0000
+++ b/sys/conf/files Sat May 26 17:46:11 2001 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files,v 1.441 2001/05/18 19:59:03 matt Exp $
+# $NetBSD: files,v 1.442 2001/05/26 17:46:11 sommerfeld Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
@@ -55,7 +55,7 @@
COMPAT_13 COMPAT_14 COMPAT_15 COMPAT_NOMID
# networking protocols
-defopt opt_inet.h INET INET6
+defopt opt_inet.h INET INET6 INET6_MD_CKSUM
defopt opt_ipsec.h IPSEC IPSEC_ESP
defopt opt_inet_conf.h SUBNETSARELOCAL HOSTZEROBROADCAST
defopt opt_atalk.h NETATALK
@@ -1039,7 +1039,7 @@
file netinet6/frag6.c inet6
file netinet6/icmp6.c inet6
file netinet6/in6.c inet6
-file netinet6/in6_cksum.c inet6
+file netinet6/in6_cksum.c inet6 & !inet6_md_cksum
file netinet6/in6_gif.c gif & inet6
file netinet6/in6_ifattach.c inet6
file netinet6/in6_pcb.c inet6
Home |
Main Index |
Thread Index |
Old Index