diff options
author | Linus Torvalds <torvalds@cc.helsinki.fi> | 1993-12-10 14:29:01 +0000 |
---|---|---|
committer | Nicolas Pitre <nico@cam.org> | 2007-08-19 14:19:22 -0400 |
commit | 89fc4813f91b51c803c68c9256d538270035eeae (patch) | |
tree | 5304bcec26c9e22ce669a66c70c028a87c312193 | |
parent | 3d40b9081a8372ab0152d49d1c43b62264eab0bd (diff) | |
download | archive-89fc4813f91b51c803c68c9256d538270035eeae.tar.gz |
ALPHA-pl14c
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | drivers/net/CONFIG | 4 | ||||
-rw-r--r-- | drivers/net/Makefile | 2 | ||||
-rw-r--r-- | drivers/net/slhc.c | 5 | ||||
-rw-r--r-- | drivers/net/slip.c | 3 | ||||
-rw-r--r-- | include/linux/in.h | 8 | ||||
-rw-r--r-- | kernel/sched.c | 23 |
7 files changed, 30 insertions, 17 deletions
@@ -1,6 +1,6 @@ VERSION = 0.99 PATCHLEVEL = 14 -ALPHA = b +ALPHA = c all: Version zImage diff --git a/drivers/net/CONFIG b/drivers/net/CONFIG index c17d07f..882a654 100644 --- a/drivers/net/CONFIG +++ b/drivers/net/CONFIG @@ -27,9 +27,6 @@ # LANCE_DEBUG Set the debugging message level. # DEFAULT_DMA Change the default DMA to other than 5. # CONFIG_PLIP The Crynwr-protocol PL/IP driver -# SLIP The MicroWalt SLIP driver -# SL_DUMP Uses the "dump frame" debug code -# SL_COMPRESSED Use CSLIP # D_LINK The D-Link DE-600 Portable Ethernet Adaptor. # D_LINK_IO The D-Link I/O address (0x378 == default) # D_LINK_IRQ The D-Link IRQ number to use (IRQ7 == default) @@ -42,6 +39,5 @@ EL2_OPTS = #-UEL2_AUI NE_OPTS = HP_OPTS = PLIP_OPTS = -SLIP_OPTS = -DSL_DUMP -DSL_COMPRESSED DL_OPTS = -DD_LINK_IO=0x378 -DD_LINK_IRQ=7 -UD_LINK_DEBUG AT_OPTS = # -DLANCE_DMA=5 diff --git a/drivers/net/Makefile b/drivers/net/Makefile index c535be7..2a958fd 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -70,7 +70,7 @@ endif ifdef CONFIG_SLIP NETDRV_OBJS := $(NETDRV_OBJS) net.a(slip.o) net.a(slhc.o) slip.o: slip.c CONFIG - $(CC) $(CPPFLAGS) $(CFLAGS) $(SLIP_OPTS) -c $< + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< endif ifdef CONFIG_DE600 diff --git a/drivers/net/slhc.c b/drivers/net/slhc.c index 32e10d3..9ba15d0 100644 --- a/drivers/net/slhc.c +++ b/drivers/net/slhc.c @@ -593,7 +593,10 @@ slhc_uncompress(struct slcompress *comp, unsigned char *icp, int isize) * packet. Recalculate IP checksum (but not TCP checksum). */ - len = isize - (cp - icp) + hdrlen; + len = isize - (cp - icp); + if (len < 0) + goto bad; + len += hdrlen; ip->tot_len = htons(len); ip->check = 0; diff --git a/drivers/net/slip.c b/drivers/net/slip.c index 0c3720f..bf8410a 100644 --- a/drivers/net/slip.c +++ b/drivers/net/slip.c @@ -20,6 +20,8 @@ */ #include <asm/segment.h> #include <asm/system.h> + +#include <linux/config.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/sched.h> @@ -47,7 +49,6 @@ #include "slip.h" #include "slhc.h" - #define SLIP_VERSION "0.7.5" /* Define some IP layer stuff. Not all systems have it. */ diff --git a/include/linux/in.h b/include/linux/in.h index c3c656b..7ea0923 100644 --- a/include/linux/in.h +++ b/include/linux/in.h @@ -124,9 +124,9 @@ extern unsigned short int htons(unsigned short int); static __inline__ unsigned long int __ntohl(unsigned long int x) { - __asm__("xchgb %l0,%h0\n\t" /* swap lower bytes */ + __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ "rorl $16,%0\n\t" /* swap words */ - "xchgb %l0,%h0" /* swap higher bytes */ + "xchgb %b0,%h0" /* swap higher bytes */ :"=q" (x) : "0" (x)); return x; @@ -144,9 +144,9 @@ __ntohs(unsigned short int x) static __inline__ unsigned long int __htonl(unsigned long int x) { - __asm__("xchgb %l0,%h0\n\t" /* swap lower bytes */ + __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ "rorl $16,%0\n\t" /* swap words */ - "xchgb %l0,%h0" /* swap higher bytes */ + "xchgb %b0,%h0" /* swap higher bytes */ :"=q" (x) : "0" (x)); return x; diff --git a/kernel/sched.c b/kernel/sched.c index 7a9a01d..809329b 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -533,6 +533,9 @@ static void second_overflow(void) */ static void timer_bh(void * unused) { + unsigned long mask; + struct timer_struct *tp; + cli(); while (next_timer && next_timer->expires == 0) { void (*fn)(unsigned long) = next_timer->function; @@ -543,6 +546,18 @@ static void timer_bh(void * unused) cli(); } sti(); + + for (mask = 1, tp = timer_table+0 ; mask ; tp++,mask += mask) { + if (mask > timer_active) + break; + if (!(mask & timer_active)) + continue; + if (tp->expires > jiffies) + continue; + timer_active &= ~mask; + tp->fn(); + sti(); + } } /* @@ -554,7 +569,7 @@ static void timer_bh(void * unused) static void do_timer(struct pt_regs * regs) { unsigned long mask; - struct timer_struct *tp = timer_table+0; + struct timer_struct *tp; long ltemp; @@ -636,16 +651,14 @@ static void do_timer(struct pt_regs * regs) current->it_prof_value = current->it_prof_incr; send_sig(SIGPROF,current,1); } - for (mask = 1 ; mask ; tp++,mask += mask) { + for (mask = 1, tp = timer_table+0 ; mask ; tp++,mask += mask) { if (mask > timer_active) break; if (!(mask & timer_active)) continue; if (tp->expires > jiffies) continue; - timer_active &= ~mask; - tp->fn(); - sti(); + mark_bh(TIMER_BH); } cli(); itimer_ticks++; |