netdev
[Top] [All Lists]

[PATCH] skb_{over,under}_panic optimizations

To: <davem@xxxxxxxxxx>
Subject: [PATCH] skb_{over,under}_panic optimizations
From: Ben LaHaise <bcrl@xxxxxxxxxx>
Date: Sun, 15 Jul 2001 22:37:03 -0400 (EDT)
Cc: <netdev@xxxxxxxxxxx>
Sender: owner-netdev@xxxxxxxxxxx
Hello Dave & all,

Below is a patch that moves the skb_{over,under}_panic function calls in
skb_put and skb_push out of line on i386 and hopefully improves register
allocation.  If this turns out to be useful, there are bunch of other
places we can move these kinds useful debugging assertions out of line.
Comments?

                -ben

diff -urN v2.4.6/include/asm-alpha/skbuff.h 
linux-skbhacks1/include/asm-alpha/skbuff.h
--- v2.4.6/include/asm-alpha/skbuff.h   Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-alpha/skbuff.h  Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-arm/skbuff.h 
linux-skbhacks1/include/asm-arm/skbuff.h
--- v2.4.6/include/asm-arm/skbuff.h     Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-arm/skbuff.h    Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-cris/skbuff.h 
linux-skbhacks1/include/asm-cris/skbuff.h
--- v2.4.6/include/asm-cris/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-cris/skbuff.h   Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-generic/skbuff.h 
linux-skbhacks1/include/asm-generic/skbuff.h
--- v2.4.6/include/asm-generic/skbuff.h Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-generic/skbuff.h        Sun Jul 15 10:54:15 2001
@@ -0,0 +1,16 @@
+#ifndef ASM_GENERIC__SKBUF_H
+#define ASM_GENERIC__SKBUF_H
+
+#define arch_skb_under_check(skb, len) \
+       do {\
+               if(skb->data<skb->head)\
+                       skb_under_panic(skb, len, current_text_addr());\
+       } while(0)
+
+#define arch_skb_over_check(skb, len) \
+       do {\
+               if(skb->tail>skb->end)\
+                       skb_over_panic(skb, len, current_text_addr());\
+       } while(0)
+
+#endif /*ASM_GENERIC__SKBUF_H*/
diff -urN v2.4.6/include/asm-i386/skbuff.h 
linux-skbhacks1/include/asm-i386/skbuff.h
--- v2.4.6/include/asm-i386/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-i386/skbuff.h   Sun Jul 15 21:58:01 2001
@@ -0,0 +1,24 @@
+#ifndef ASM_I386__SKBUF_H
+#define ASM_I386__SKBUF_H
+
+#define __arch_skb_check(insn, left, right, skb, why, len) \
+       __asm__ __volatile__( \
+       "       cmpl %1,%0\n" \
+       "1:     " insn " 2f\n" \
+       ".section .text.lock,\"ax\"\n" \
+       "2:     pushl 1b\n" \
+       "       pushl %3\n" \
+       "       pushl %2\n" \
+       "       call skb_" why "_panic\n" \
+       "       ud2a\n" \
+       ".previous\n" \
+       : : "r" (left), "rm" (right), "rmi" (skb), "rmi" (len) \
+       : "cc" )
+
+#define arch_skb_under_check(skb, len) \
+       __arch_skb_check("jl", skb->data, skb->head, skb, "under", len)
+
+#define arch_skb_over_check(skb, len) \
+       __arch_skb_check("jg", skb->tail, skb->end, skb, "over", len)
+
+#endif /*ASM_I386__SKBUF_H*/
diff -urN v2.4.6/include/asm-ia64/skbuff.h 
linux-skbhacks1/include/asm-ia64/skbuff.h
--- v2.4.6/include/asm-ia64/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-ia64/skbuff.h   Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-m68k/skbuff.h 
linux-skbhacks1/include/asm-m68k/skbuff.h
--- v2.4.6/include/asm-m68k/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-m68k/skbuff.h   Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-mips/skbuff.h 
linux-skbhacks1/include/asm-mips/skbuff.h
--- v2.4.6/include/asm-mips/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-mips/skbuff.h   Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-mips64/skbuff.h 
linux-skbhacks1/include/asm-mips64/skbuff.h
--- v2.4.6/include/asm-mips64/skbuff.h  Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-mips64/skbuff.h Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-parisc/skbuff.h 
linux-skbhacks1/include/asm-parisc/skbuff.h
--- v2.4.6/include/asm-parisc/skbuff.h  Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-parisc/skbuff.h Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-ppc/skbuff.h 
linux-skbhacks1/include/asm-ppc/skbuff.h
--- v2.4.6/include/asm-ppc/skbuff.h     Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-ppc/skbuff.h    Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-s390/skbuff.h 
linux-skbhacks1/include/asm-s390/skbuff.h
--- v2.4.6/include/asm-s390/skbuff.h    Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-s390/skbuff.h   Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-s390x/skbuff.h 
linux-skbhacks1/include/asm-s390x/skbuff.h
--- v2.4.6/include/asm-s390x/skbuff.h   Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-s390x/skbuff.h  Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-sh/skbuff.h linux-skbhacks1/include/asm-sh/skbuff.h
--- v2.4.6/include/asm-sh/skbuff.h      Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-sh/skbuff.h     Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-sparc/skbuff.h 
linux-skbhacks1/include/asm-sparc/skbuff.h
--- v2.4.6/include/asm-sparc/skbuff.h   Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-sparc/skbuff.h  Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/asm-sparc64/skbuff.h 
linux-skbhacks1/include/asm-sparc64/skbuff.h
--- v2.4.6/include/asm-sparc64/skbuff.h Wed Dec 31 19:00:00 1969
+++ linux-skbhacks1/include/asm-sparc64/skbuff.h        Sun Jul 15 10:12:37 2001
@@ -0,0 +1 @@
+#include <asm-generic/skbuff.h>
diff -urN v2.4.6/include/linux/skbuff.h linux-skbhacks1/include/linux/skbuff.h
--- v2.4.6/include/linux/skbuff.h       Tue Jul  3 18:43:04 2001
+++ linux-skbhacks1/include/linux/skbuff.h      Sun Jul 15 10:56:16 2001
@@ -22,6 +22,7 @@

 #include <asm/atomic.h>
 #include <asm/types.h>
+#include <asm/skbuff.h>
 #include <linux/spinlock.h>
 #include <linux/mm.h>
 #include <linux/highmem.h>
@@ -787,9 +788,7 @@
        SKB_LINEAR_ASSERT(skb);
        skb->tail+=len;
        skb->len+=len;
-       if(skb->tail>skb->end) {
-               skb_over_panic(skb, len, current_text_addr());
-       }
+       arch_skb_over_check(skb, len);
        return tmp;
 }

@@ -814,9 +813,7 @@
 {
        skb->data-=len;
        skb->len+=len;
-       if(skb->data<skb->head) {
-               skb_under_panic(skb, len, current_text_addr());
-       }
+       arch_skb_under_check(skb, len);
        return skb->data;
 }


-- 
"The world would be a better place if Larry Wall had been born in
Iceland, or any other country where the native language actually
has syntax" -- Peter da Silva


<Prev in Thread] Current Thread [Next in Thread>